From ff1928192988ffb11aa57a798a39679e94891932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 21 Jan 2025 01:08:55 +0100 Subject: [PATCH 0001/1184] Change Delete Policy request type from GET to POST --- src/pages/endpoint/MEM/list-policies/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/endpoint/MEM/list-policies/index.js b/src/pages/endpoint/MEM/list-policies/index.js index 299881df53fe..21c2f1962a24 100644 --- a/src/pages/endpoint/MEM/list-policies/index.js +++ b/src/pages/endpoint/MEM/list-policies/index.js @@ -60,7 +60,7 @@ const Page = () => { }, { label: "Delete Policy", - type: "GET", + type: "POST", url: "/api/RemovePolicy", data: { ID: "id", From fe3b29355744e49dd08b669ad35c086d8a49f812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 21 Jan 2025 01:09:07 +0100 Subject: [PATCH 0002/1184] Add "Scripts" menu item to the endpoint navigation --- src/layouts/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/layouts/config.js b/src/layouts/config.js index e74843605127..3ba6ec3a98b1 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -251,6 +251,7 @@ export const nativeMenuItems = [ { title: "Protection Policies", path: "/endpoint/MEM/list-appprotection-policies" }, { title: "Apply Policy", path: "/endpoint/MEM/add-policy" }, { title: "Policy Templates", path: "/endpoint/MEM/list-templates" }, + { title: "Scripts", path: "/endpoint/MEM/list-scripts" }, ], }, { From 1f3b7558adacf81b570e05a37010d4ddcd9fc1c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 21 Jan 2025 01:21:07 +0100 Subject: [PATCH 0003/1184] Add Intune scripts page --- src/pages/endpoint/MEM/list-scripts/index.js | 69 ++++++++++++++++++ src/pages/endpoint/MEM/list-scripts/linux.js | 61 ++++++++++++++++ src/pages/endpoint/MEM/list-scripts/macOS.js | 70 +++++++++++++++++++ .../endpoint/MEM/list-scripts/remediation.js | 69 ++++++++++++++++++ .../endpoint/MEM/list-scripts/tabOptions.json | 18 +++++ 5 files changed, 287 insertions(+) create mode 100644 src/pages/endpoint/MEM/list-scripts/index.js create mode 100644 src/pages/endpoint/MEM/list-scripts/linux.js create mode 100644 src/pages/endpoint/MEM/list-scripts/macOS.js create mode 100644 src/pages/endpoint/MEM/list-scripts/remediation.js create mode 100644 src/pages/endpoint/MEM/list-scripts/tabOptions.json diff --git a/src/pages/endpoint/MEM/list-scripts/index.js b/src/pages/endpoint/MEM/list-scripts/index.js new file mode 100644 index 000000000000..6ce9383bb2fd --- /dev/null +++ b/src/pages/endpoint/MEM/list-scripts/index.js @@ -0,0 +1,69 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Code, TrashIcon } from "@heroicons/react/24/outline"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import tabOptions from "./tabOptions"; + +const Page = () => { + const pageTitle = "Windows Scripts"; + + const actions = [ + { + label: "Delete Script", + type: "POST", + url: "/api/RemoveIntuneScript", + data: { + ID: "id", + displayName: "displayName", + ScriptType: "!windows", + }, + confirmText: "Are you sure you want to delete this script?", + icon: , + color: "danger", + }, + ]; + + const offCanvas = { + extendedInfoFields: [ + "id", + "fileName", + "displayName", + "description", + "lastModifiedDateTime", + "createdDateTime", + ], + actions: actions, + }; + + const simpleColumns = [ + "displayName", + "description", + "runAsAccount", + "runAs32Bit", + "enforceSignatureCheck", + "lastModifiedDateTime", + ]; + + return ( + + ); +}; + +Page.getLayout = (page) => ( + + {page} + +); +export default Page; diff --git a/src/pages/endpoint/MEM/list-scripts/linux.js b/src/pages/endpoint/MEM/list-scripts/linux.js new file mode 100644 index 000000000000..be139e47205f --- /dev/null +++ b/src/pages/endpoint/MEM/list-scripts/linux.js @@ -0,0 +1,61 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Code, TrashIcon } from "@heroicons/react/24/outline"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import tabOptions from "./tabOptions"; + +const Page = () => { + const pageTitle = "Linux Scripts"; + + const actions = [ + { + label: "Delete Script", + type: "POST", + url: "/api/RemovePolicy", + data: { + ID: "id", + URLName: "URLName", + }, + confirmText: "Are you sure you want to delete this script?", + icon: , + color: "danger", + }, + ]; + + const offCanvas = { + extendedInfoFields: [ + "id", + "displayName", + "description", + "lastModifiedDateTime", + "createdDateTime", + ], + actions: actions, + }; + + const simpleColumns = [ + "displayName", + "description", + "runAsAccount", + "executionFrequency", + "enforceSignatureCheck", + "lastModifiedDateTime", + ]; + + return ( + + ); +}; + +Page.getLayout = (page) => ( + + {page} + +); +export default Page; diff --git a/src/pages/endpoint/MEM/list-scripts/macOS.js b/src/pages/endpoint/MEM/list-scripts/macOS.js new file mode 100644 index 000000000000..5fcf6fca1202 --- /dev/null +++ b/src/pages/endpoint/MEM/list-scripts/macOS.js @@ -0,0 +1,70 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Code, TrashIcon } from "@heroicons/react/24/outline"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import tabOptions from "./tabOptions"; + +const Page = () => { + const pageTitle = "MacOS Scripts"; + + const actions = [ + { + label: "Delete Script", + type: "POST", + url: "/api/RemoveIntuneScript", + data: { + ID: "id", + displayName: "displayName", + ScriptType: "!macOS", + }, + confirmText: "Are you sure you want to delete this script?", + icon: , + color: "danger", + }, + ]; + + const offCanvas = { + extendedInfoFields: [ + "id", + "fileName", + "displayName", + "description", + "lastModifiedDateTime", + "createdDateTime", + "retryCount", + ], + actions: actions, + }; + + const simpleColumns = [ + "displayName", + "description", + "runAsAccount", + "executionFrequency", + "enforceSignatureCheck", + "lastModifiedDateTime", + ]; + + return ( + + ); +}; + +Page.getLayout = (page) => ( + + {page} + +); +export default Page; diff --git a/src/pages/endpoint/MEM/list-scripts/remediation.js b/src/pages/endpoint/MEM/list-scripts/remediation.js new file mode 100644 index 000000000000..f08106b87099 --- /dev/null +++ b/src/pages/endpoint/MEM/list-scripts/remediation.js @@ -0,0 +1,69 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Code, TrashIcon } from "@heroicons/react/24/outline"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import tabOptions from "./tabOptions"; + +const Page = () => { + const pageTitle = "Remediation Scripts"; + + const actions = [ + { + label: "Delete Script", + type: "POST", + url: "/api/RemoveIntuneScript", + data: { + ID: "id", + displayName: "displayName", + ScriptType: "!remediate", + }, + confirmText: "Are you sure you want to delete this script?", + icon: , + color: "danger", + }, + ]; + + const offCanvas = { + extendedInfoFields: [ + "id", + "fileName", + "displayName", + "description", + "lastModifiedDateTime", + "createdDateTime", + ], + actions: actions, + }; + + const simpleColumns = [ + "displayName", + "description", + "runAsAccount", + "runAs32Bit", + "enforceSignatureCheck", + "lastModifiedDateTime", + ]; + + return ( + + ); +}; + +Page.getLayout = (page) => ( + + {page} + +); +export default Page; diff --git a/src/pages/endpoint/MEM/list-scripts/tabOptions.json b/src/pages/endpoint/MEM/list-scripts/tabOptions.json new file mode 100644 index 000000000000..0e10ef91f490 --- /dev/null +++ b/src/pages/endpoint/MEM/list-scripts/tabOptions.json @@ -0,0 +1,18 @@ +[ + { + "label": "Windows Scripts", + "path": "/endpoint/MEM/list-scripts" + }, + { + "label": "MacOS Scripts", + "path": "/endpoint/MEM/list-scripts/macOS" + }, + { + "label": "Linux Scripts", + "path": "/endpoint/MEM/list-scripts/linux" + }, + { + "label": "Remediation Scripts", + "path": "/endpoint/MEM/list-scripts/remediation" + } +] From a45dc747ec2415334ce811c0e0f52fd993c56f62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 23 Jan 2025 22:55:59 +0100 Subject: [PATCH 0004/1184] Make into 1 page --- .../email/tools/mailbox-restores/index.js | 6 +- src/pages/endpoint/MEM/list-scripts/index.js | 28 +++----- src/pages/endpoint/MEM/list-scripts/linux.js | 61 ---------------- src/pages/endpoint/MEM/list-scripts/macOS.js | 70 ------------------- .../endpoint/MEM/list-scripts/remediation.js | 69 ------------------ .../endpoint/MEM/list-scripts/tabOptions.json | 18 ----- 6 files changed, 13 insertions(+), 239 deletions(-) delete mode 100644 src/pages/endpoint/MEM/list-scripts/linux.js delete mode 100644 src/pages/endpoint/MEM/list-scripts/macOS.js delete mode 100644 src/pages/endpoint/MEM/list-scripts/remediation.js delete mode 100644 src/pages/endpoint/MEM/list-scripts/tabOptions.json diff --git a/src/pages/email/tools/mailbox-restores/index.js b/src/pages/email/tools/mailbox-restores/index.js index ffa463800bd5..16ffea192996 100644 --- a/src/pages/email/tools/mailbox-restores/index.js +++ b/src/pages/email/tools/mailbox-restores/index.js @@ -15,7 +15,7 @@ const Page = () => { data: { TenantFilter: "Tenant", Identity: "Identity", - Action: "Resume", + Action: "!Resume", }, confirmText: "Are you sure you want to resume this restore request?", color: "info", @@ -27,7 +27,7 @@ const Page = () => { data: { TenantFilter: "Tenant", Identity: "Identity", - Action: "Suspend", + Action: "!Suspend", }, confirmText: "Are you sure you want to suspend this restore request?", color: "warning", @@ -39,7 +39,7 @@ const Page = () => { data: { TenantFilter: "Tenant", Identity: "Identity", - Action: "Remove", + Action: "!Remove", }, confirmText: "Are you sure you want to remove this restore request?", color: "danger", diff --git a/src/pages/endpoint/MEM/list-scripts/index.js b/src/pages/endpoint/MEM/list-scripts/index.js index 6ce9383bb2fd..db6dd7a1d1eb 100644 --- a/src/pages/endpoint/MEM/list-scripts/index.js +++ b/src/pages/endpoint/MEM/list-scripts/index.js @@ -1,11 +1,9 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Code, TrashIcon } from "@heroicons/react/24/outline"; -import { TabbedLayout } from "/src/layouts/TabbedLayout"; -import tabOptions from "./tabOptions"; const Page = () => { - const pageTitle = "Windows Scripts"; + const pageTitle = "Scripts"; const actions = [ { @@ -15,7 +13,7 @@ const Page = () => { data: { ID: "id", displayName: "displayName", - ScriptType: "!windows", + ScriptType: "scriptType", }, confirmText: "Are you sure you want to delete this script?", icon: , @@ -25,35 +23,33 @@ const Page = () => { const offCanvas = { extendedInfoFields: [ + "scriptType", "id", "fileName", "displayName", "description", "lastModifiedDateTime", + "runAsAccount", "createdDateTime", + "runAs32Bit", + "executionFrequency", + "enforceSignatureCheck", ], actions: actions, }; const simpleColumns = [ + "scriptType", "displayName", "description", "runAsAccount", - "runAs32Bit", - "enforceSignatureCheck", "lastModifiedDateTime", ]; return ( { ); }; -Page.getLayout = (page) => ( - - {page} - -); +Page.getLayout = (page) => {page}; export default Page; diff --git a/src/pages/endpoint/MEM/list-scripts/linux.js b/src/pages/endpoint/MEM/list-scripts/linux.js deleted file mode 100644 index be139e47205f..000000000000 --- a/src/pages/endpoint/MEM/list-scripts/linux.js +++ /dev/null @@ -1,61 +0,0 @@ -import { Layout as DashboardLayout } from "/src/layouts/index.js"; -import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import { Code, TrashIcon } from "@heroicons/react/24/outline"; -import { TabbedLayout } from "/src/layouts/TabbedLayout"; -import tabOptions from "./tabOptions"; - -const Page = () => { - const pageTitle = "Linux Scripts"; - - const actions = [ - { - label: "Delete Script", - type: "POST", - url: "/api/RemovePolicy", - data: { - ID: "id", - URLName: "URLName", - }, - confirmText: "Are you sure you want to delete this script?", - icon: , - color: "danger", - }, - ]; - - const offCanvas = { - extendedInfoFields: [ - "id", - "displayName", - "description", - "lastModifiedDateTime", - "createdDateTime", - ], - actions: actions, - }; - - const simpleColumns = [ - "displayName", - "description", - "runAsAccount", - "executionFrequency", - "enforceSignatureCheck", - "lastModifiedDateTime", - ]; - - return ( - - ); -}; - -Page.getLayout = (page) => ( - - {page} - -); -export default Page; diff --git a/src/pages/endpoint/MEM/list-scripts/macOS.js b/src/pages/endpoint/MEM/list-scripts/macOS.js deleted file mode 100644 index 5fcf6fca1202..000000000000 --- a/src/pages/endpoint/MEM/list-scripts/macOS.js +++ /dev/null @@ -1,70 +0,0 @@ -import { Layout as DashboardLayout } from "/src/layouts/index.js"; -import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import { Code, TrashIcon } from "@heroicons/react/24/outline"; -import { TabbedLayout } from "/src/layouts/TabbedLayout"; -import tabOptions from "./tabOptions"; - -const Page = () => { - const pageTitle = "MacOS Scripts"; - - const actions = [ - { - label: "Delete Script", - type: "POST", - url: "/api/RemoveIntuneScript", - data: { - ID: "id", - displayName: "displayName", - ScriptType: "!macOS", - }, - confirmText: "Are you sure you want to delete this script?", - icon: , - color: "danger", - }, - ]; - - const offCanvas = { - extendedInfoFields: [ - "id", - "fileName", - "displayName", - "description", - "lastModifiedDateTime", - "createdDateTime", - "retryCount", - ], - actions: actions, - }; - - const simpleColumns = [ - "displayName", - "description", - "runAsAccount", - "executionFrequency", - "enforceSignatureCheck", - "lastModifiedDateTime", - ]; - - return ( - - ); -}; - -Page.getLayout = (page) => ( - - {page} - -); -export default Page; diff --git a/src/pages/endpoint/MEM/list-scripts/remediation.js b/src/pages/endpoint/MEM/list-scripts/remediation.js deleted file mode 100644 index f08106b87099..000000000000 --- a/src/pages/endpoint/MEM/list-scripts/remediation.js +++ /dev/null @@ -1,69 +0,0 @@ -import { Layout as DashboardLayout } from "/src/layouts/index.js"; -import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import { Code, TrashIcon } from "@heroicons/react/24/outline"; -import { TabbedLayout } from "/src/layouts/TabbedLayout"; -import tabOptions from "./tabOptions"; - -const Page = () => { - const pageTitle = "Remediation Scripts"; - - const actions = [ - { - label: "Delete Script", - type: "POST", - url: "/api/RemoveIntuneScript", - data: { - ID: "id", - displayName: "displayName", - ScriptType: "!remediate", - }, - confirmText: "Are you sure you want to delete this script?", - icon: , - color: "danger", - }, - ]; - - const offCanvas = { - extendedInfoFields: [ - "id", - "fileName", - "displayName", - "description", - "lastModifiedDateTime", - "createdDateTime", - ], - actions: actions, - }; - - const simpleColumns = [ - "displayName", - "description", - "runAsAccount", - "runAs32Bit", - "enforceSignatureCheck", - "lastModifiedDateTime", - ]; - - return ( - - ); -}; - -Page.getLayout = (page) => ( - - {page} - -); -export default Page; diff --git a/src/pages/endpoint/MEM/list-scripts/tabOptions.json b/src/pages/endpoint/MEM/list-scripts/tabOptions.json deleted file mode 100644 index 0e10ef91f490..000000000000 --- a/src/pages/endpoint/MEM/list-scripts/tabOptions.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "label": "Windows Scripts", - "path": "/endpoint/MEM/list-scripts" - }, - { - "label": "MacOS Scripts", - "path": "/endpoint/MEM/list-scripts/macOS" - }, - { - "label": "Linux Scripts", - "path": "/endpoint/MEM/list-scripts/linux" - }, - { - "label": "Remediation Scripts", - "path": "/endpoint/MEM/list-scripts/remediation" - } -] From a85b9b7deddc84b465296c31e09e289a74524641 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 27 Jan 2025 12:17:18 +0100 Subject: [PATCH 0005/1184] querykey confusion --- src/pages/tenant/gdap-management/invites/add.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/tenant/gdap-management/invites/add.js b/src/pages/tenant/gdap-management/invites/add.js index 22d72810f0c8..b470cde23584 100644 --- a/src/pages/tenant/gdap-management/invites/add.js +++ b/src/pages/tenant/gdap-management/invites/add.js @@ -40,12 +40,12 @@ const Page = () => { const createCippDefaults = ApiPostCall({ urlFromData: true, - relatedQueryKeys: ["ListGDAPRoleTemplatesAutocomplete"], + relatedQueryKeys: ["ListGDAPRoleTemplatesAutocomplete", "ListGDAPRoleTemplates"], }); const templateList = ApiGetCall({ url: "/api/ExecGDAPRoleTemplate", - queryKey: "ListGDAPRoleTemplatesAutocomplete", + queryKey: "ListGDAPRoleTemplates", }); const selectedTemplate = useWatch({ control: formControl.control, name: "roleMappings" }); From ba54a291d04f2af520ac4a1cc47fc0766c9562c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:23:21 +0100 Subject: [PATCH 0006/1184] FIX space typo --- src/data/alerts.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/alerts.json b/src/data/alerts.json index d027afab9869..1e2b8bdc0fc8 100644 --- a/src/data/alerts.json +++ b/src/data/alerts.json @@ -92,7 +92,7 @@ "recommendedRunInterval": "30d" }, { - "name": "AppCertificateExpiry ", + "name": "AppCertificateExpiry", "label": "Alert on expiring application certificates", "recommendedRunInterval": "1d" }, From 5c84a91be79f82fba487aa6eec56c229240809b3 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 27 Jan 2025 10:48:10 -0500 Subject: [PATCH 0007/1184] set tenantfilter on table action if tenant filter is all tenants --- src/components/CippTable/CippDataTable.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 914c0d7675c5..005678d16998 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -17,11 +17,13 @@ import { ApiGetCallWithPagination } from "../../api/ApiCall"; import { utilTableMode } from "./util-tablemode"; import { utilColumnsFromAPI } from "./util-columnsFromAPI"; import { CIPPTableToptoolbar } from "./CIPPTableToptoolbar"; -import { More, MoreHoriz } from "@mui/icons-material"; +import { Info, More, MoreHoriz } from "@mui/icons-material"; import { CippOffCanvas } from "../CippComponents/CippOffCanvas"; import { useDialog } from "../../hooks/use-dialog"; import { CippApiDialog } from "../CippComponents/CippApiDialog"; import { getCippError } from "../../utils/get-cipp-error"; +import { Box } from "@mui/system"; +import { useSettings } from "../../hooks/use-settings"; export const CippDataTable = (props) => { const { @@ -61,6 +63,9 @@ export const CippDataTable = (props) => { const [actionData, setActionData] = useState({ data: {}, action: {}, ready: false }); const [graphFilterData, setGraphFilterData] = useState({}); const waitingBool = api?.url ? true : false; + + const settings = useSettings(); + const getRequestData = ApiGetCallWithPagination({ url: api.url, data: { ...api.data }, @@ -177,7 +182,11 @@ export const CippDataTable = (props) => { }, renderEmptyRowsFallback: ({ table }) => getRequestData.data?.pages?.[0].Metadata?.QueueMessage ? ( -
{getRequestData.data?.pages?.[0].Metadata?.QueueMessage}
+ +
+ {getRequestData.data?.pages?.[0].Metadata?.QueueMessage} +
+
) : undefined, onColumnVisibilityChange: setColumnVisibility, ...modeInfo, @@ -188,6 +197,11 @@ export const CippDataTable = (props) => { sx={{ color: action.color }} key={`actions-list-row-${index}`} onClick={() => { + if (settings.currentTenant === "AllTenants" && row.original?.Tenant) { + settings.handleUpdate({ + currentTenant: row.original.Tenant, + }); + } setActionData({ data: row.original, action: action, From 3510fc233e352b32b7c34e2ec388c658dd2880b1 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 27 Jan 2025 10:49:11 -0500 Subject: [PATCH 0008/1184] Update ApiCall.jsx --- src/api/ApiCall.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/api/ApiCall.jsx b/src/api/ApiCall.jsx index c9c62c1f8048..fa953247204c 100644 --- a/src/api/ApiCall.jsx +++ b/src/api/ApiCall.jsx @@ -190,7 +190,11 @@ export function ApiGetCallWithPagination({ return response.data; }, getNextPageParam: (lastPage) => { - if (data?.noPagination || data?.manualPagination === false) { + if ( + data?.noPagination || + data?.manualPagination === false || + data?.tenantFilter === "AllTenants" + ) { return undefined; } return lastPage?.Metadata?.nextLink ? { nextLink: lastPage.Metadata.nextLink } : undefined; From 77ec401b5ee29e5247aeb3b29f2fe04ec07deabe Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 27 Jan 2025 13:44:22 -0500 Subject: [PATCH 0009/1184] fix button sizes --- src/pages/cipp/integrations/configure.js | 81 ++++++++++++++---------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/src/pages/cipp/integrations/configure.js b/src/pages/cipp/integrations/configure.js index 52d4766d9c09..2861a241edad 100644 --- a/src/pages/cipp/integrations/configure.js +++ b/src/pages/cipp/integrations/configure.js @@ -120,51 +120,62 @@ const Page = () => { {extension.alertText} )} - + {extension?.hideTestButton !== true && ( - + + + )} {extension?.forceSyncButton && ( - + + + )} {extension?.links && ( <> {extension.links.map((link, index) => ( - + + + ))} )} + From d805803291b882e1aa1b1e07246e203cdb8e2d02 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 27 Jan 2025 14:47:58 -0500 Subject: [PATCH 0010/1184] up version minor package/workflow tweaks --- .github/workflows/Check_for_Version_Update.yml | 8 ++++---- package.json | 1 + public/version.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/Check_for_Version_Update.yml b/.github/workflows/Check_for_Version_Update.yml index ec6f3e68769b..0958e8190cea 100644 --- a/.github/workflows/Check_for_Version_Update.yml +++ b/.github/workflows/Check_for_Version_Update.yml @@ -7,17 +7,17 @@ on: jobs: build: if: github.repository_owner == 'KelvinTegelaar' - name: 'Check for Version Update' + name: "Check for Version Update" runs-on: ubuntu-latest steps: - name: Check for Changed Files uses: brettcannon/check-for-changed-files@v1.1.0 with: - file-pattern: version_latest.txt - failure-message: 'You have not updated version_latest.txt. This is a required file to update at each PR. Please sync your latest changes and update the version number.' + file-pattern: version.json + failure-message: "You have not updated version.json. This is a required file to update at each PR. Please sync your latest changes and update the version number." - name: Prevent changes to workflow files uses: DovnarAlexander/github-action-file-detection@v0.3.0 with: - wildcard: '.github/workflows/*.yml' + wildcard: ".github/workflows/*.yml" exit_code_found: 1 exit_code_not_found: 0 diff --git a/package.json b/package.json index 6c2c57ba925d..eb70d4b08762 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "bugs": { "url": "https://github.com/KelvinTegelaar/CIPP/issues" }, + "license": "AGPL-3.0", "engines": { "node": "^18.17.0" }, diff --git a/public/version.json b/public/version.json index fa68337146a1..ef511cf84994 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.1.1" + "version": "7.1.2" } From be8347685b0325a96892ca7278bbb86b96315a77 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 27 Jan 2025 14:50:23 -0500 Subject: [PATCH 0011/1184] Update Check_for_Version_Update.yml --- .github/workflows/Check_for_Version_Update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Check_for_Version_Update.yml b/.github/workflows/Check_for_Version_Update.yml index 0958e8190cea..f8a7db0343f2 100644 --- a/.github/workflows/Check_for_Version_Update.yml +++ b/.github/workflows/Check_for_Version_Update.yml @@ -13,7 +13,7 @@ jobs: - name: Check for Changed Files uses: brettcannon/check-for-changed-files@v1.1.0 with: - file-pattern: version.json + file-pattern: public/version.json failure-message: "You have not updated version.json. This is a required file to update at each PR. Please sync your latest changes and update the version number." - name: Prevent changes to workflow files uses: DovnarAlexander/github-action-file-detection@v0.3.0 From da746cde6ecf76ec9eb31fbd55164da8ada978e9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 27 Jan 2025 15:09:50 -0500 Subject: [PATCH 0012/1184] Update offboarding.js --- src/pages/tenant/gdap-management/offboarding.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/tenant/gdap-management/offboarding.js b/src/pages/tenant/gdap-management/offboarding.js index 1fb872a6d2da..1fe26d282b70 100644 --- a/src/pages/tenant/gdap-management/offboarding.js +++ b/src/pages/tenant/gdap-management/offboarding.js @@ -7,7 +7,7 @@ import { CippFormComponent } from "/src/components/CippComponents/CippFormCompon import vendorTenantList from "/src/data/vendorTenantList"; import { Box, Grid, Stack } from "@mui/system"; import { Alert, Divider, Typography } from "@mui/material"; -import { ApiGetCall } from "/src/api/ApiCall"; +import { ApiGetCall, ApiGetCallWithPagination } from "/src/api/ApiCall"; import { CippInfoBar } from "../../../components/CippCards/CippInfoBar"; import { ShieldCheckIcon } from "@heroicons/react/24/outline"; import { Apps, Description, Widgets } from "@mui/icons-material"; @@ -60,7 +60,7 @@ const Page = () => { queryKey: "ListMSPApps-" + tenantId?.value, }); - const vendorApps = ApiGetCall({ + const vendorApps = ApiGetCallWithPagination({ url: "/api/ListGraphRequest", data: { Endpoint: "servicePrincipals", @@ -193,7 +193,7 @@ const Page = () => { }, valueField: "appId", }} - disabled={vendorApps?.data?.Results?.length > 0 ? false : true} + disabled={vendorApps?.data?.pages?.[0]?.Results?.length > 0 ? false : true} /> Date: Mon, 27 Jan 2025 12:51:56 -0800 Subject: [PATCH 0013/1184] Update required engine to Node 20. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6c2c57ba925d..6ee40b74d760 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/KelvinTegelaar/CIPP/issues" }, "engines": { - "node": "^18.17.0" + "node": "^20.18.2" }, "repository": { "type": "git", From 56242de9403fb97e68a51b0474914374d3c21724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 27 Jan 2025 23:12:57 +0100 Subject: [PATCH 0014/1184] Add fallback message for empty license translations --- src/utils/get-cipp-license-translation.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/utils/get-cipp-license-translation.js b/src/utils/get-cipp-license-translation.js index 813e52a5d1e9..e77574c713a9 100644 --- a/src/utils/get-cipp-license-translation.js +++ b/src/utils/get-cipp-license-translation.js @@ -21,5 +21,9 @@ export const getCippLicenseTranslation = (licenseArray) => { } }); - return licenses.join(", "); + const result = licenses.join(", "); + if (!result) { + return "No Licenses Assigned"; + } + return result; }; From 2968075eb198bbe524b011bd08ae774e6fb607d6 Mon Sep 17 00:00:00 2001 From: redanthrax Date: Mon, 27 Jan 2025 14:38:19 -0800 Subject: [PATCH 0015/1184] Trim standards search, show output with 0 results, min width --- .../CippStandards/CippStandardDialog.jsx | 224 ++++++++++-------- 1 file changed, 126 insertions(+), 98 deletions(-) diff --git a/src/components/CippStandards/CippStandardDialog.jsx b/src/components/CippStandards/CippStandardDialog.jsx index 2fb081155944..d2b94853e6ee 100644 --- a/src/components/CippStandards/CippStandardDialog.jsx +++ b/src/components/CippStandards/CippStandardDialog.jsx @@ -42,13 +42,18 @@ const CippStandardDialog = ({ const handleSearchQueryChange = useCallback( debounce((query) => { - setSearchQuery(query); + setSearchQuery(query.trim()); }, 50), [] ); return ( - + Select a Standard to Add handleSearchQueryChange(e.target.value.toLowerCase())} /> - {Object.keys(categories).map((category) => - filterStandards(categories[category]).map((standard) => ( - - - - - {standard.label} - - {standard.helpText && ( - <> - - Description: - - - {standard.helpText} - - - )} - - Category: - - - {standard.tag?.filter((tag) => !tag.toLowerCase().includes("impact")).length > - 0 && ( - <> - - Tags: - - - {standard.tag - .filter((tag) => !tag.toLowerCase().includes("impact")) - .map((tag, idx) => ( - - ))} - - - )} - - Impact: - - - {standard.recommendedBy?.length > 0 && ( - <> - - Recommended By: - - - {standard.recommendedBy.join(", ")} - - - )} - - - - {standard.multiple ? ( - filterStandards(categories[category]).length === 0 + ) ? ( + + Search returned no results + + ) : ( + Object.keys(categories).map((category) => + filterStandards(categories[category]).map((standard) => ( + + + + + {standard.label} + + {standard.helpText && ( + <> + + Description: + + + {standard.helpText} + + + )} + + Category: + + handleAddClick(standard.name)} - > - - - ) : ( - handleToggleSingleStandard(standard.name)} - /> + sx={{ mt: 1, mb: 2 }} + /> + {standard.tag?.filter((tag) => !tag.toLowerCase().includes("impact")).length > + 0 && ( + <> + + Tags: + + + {standard.tag + .filter((tag) => !tag.toLowerCase().includes("impact")) + .map((tag, idx) => ( + + ))} + + + )} + + Impact: + + - )} - - - - )) + {standard.recommendedBy?.length > 0 && ( + <> + + Recommended By: + + + {standard.recommendedBy.join(", ")} + + + )} + + + + {standard.multiple ? ( + handleAddClick(standard.name)} + > + + + ) : ( + + handleToggleSingleStandard(standard.name) + } + /> + } + label="Add this standard to the template" + /> + )} + + + + )) + ) )} From 6005b874999d0db4d1c8f71bd6528509a78f304f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 27 Jan 2025 23:41:21 +0100 Subject: [PATCH 0016/1184] Add User ID display to user tabs --- src/components/CippCards/CippUserInfoCard.jsx | 5 ++ .../administration/users/user/bec.jsx | 48 +++++++++---------- .../users/user/conditional-access.jsx | 6 ++- .../administration/users/user/devices.jsx | 6 ++- .../administration/users/user/edit.jsx | 8 +++- .../administration/users/user/exchange.jsx | 8 +++- .../administration/users/user/index.jsx | 8 +++- 7 files changed, 56 insertions(+), 33 deletions(-) diff --git a/src/components/CippCards/CippUserInfoCard.jsx b/src/components/CippCards/CippUserInfoCard.jsx index 8b9048f46fec..49c0ec716ab1 100644 --- a/src/components/CippCards/CippUserInfoCard.jsx +++ b/src/components/CippCards/CippUserInfoCard.jsx @@ -91,6 +91,11 @@ export const CippUserInfoCard = (props) => { ) } /> + : user?.id || "N/A"} + /> { return "No mailbox permission changes found."; }; + const subtitle = userRequest.isSuccess + ? [ + { + icon: , + text: , + }, + { + icon: , + text: , + }, + { + icon: , + text: ( + <> + Created: + + ), + }, + ] + : []; + return ( , - text: ( - - ), - }, - { - icon: , - text: ( - <> - Created:{" "} - - - ), - }, - ] - : [] - } + subtitle={subtitle} isFetching={userRequest.isFetching} > {/* Loading State: Show only Remediation Card and Check 1 with Loading Skeleton */} diff --git a/src/pages/identity/administration/users/user/conditional-access.jsx b/src/pages/identity/administration/users/user/conditional-access.jsx index 6bda3f8534c2..5d85ae736cff 100644 --- a/src/pages/identity/administration/users/user/conditional-access.jsx +++ b/src/pages/identity/administration/users/user/conditional-access.jsx @@ -4,7 +4,7 @@ import { useSettings } from "/src/hooks/use-settings"; import { useRouter } from "next/router"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { Mail, Forward } from "@mui/icons-material"; +import { Mail, Forward, Fingerprint } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import ReactTimeAgo from "react-time-ago"; @@ -41,6 +41,10 @@ const Page = () => { icon: , text: , }, + { + icon: , + text: , + }, { icon: , text: ( diff --git a/src/pages/identity/administration/users/user/devices.jsx b/src/pages/identity/administration/users/user/devices.jsx index b0d5d9649b89..23cda503df3a 100644 --- a/src/pages/identity/administration/users/user/devices.jsx +++ b/src/pages/identity/administration/users/user/devices.jsx @@ -4,7 +4,7 @@ import { useRouter } from "next/router"; import { ApiGetCall } from "/src/api/ApiCall"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { Check, Mail } from "@mui/icons-material"; +import { Check, Mail, Fingerprint } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import ReactTimeAgo from "react-time-ago"; @@ -50,6 +50,10 @@ const Page = () => { icon: , text: , }, + { + icon: , + text: , + }, { icon: , text: ( diff --git a/src/pages/identity/administration/users/user/edit.jsx b/src/pages/identity/administration/users/user/edit.jsx index 8cd113275022..539ed69d1d98 100644 --- a/src/pages/identity/administration/users/user/edit.jsx +++ b/src/pages/identity/administration/users/user/edit.jsx @@ -9,7 +9,7 @@ import { useEffect } from "react"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import { getCippLicenseTranslation } from "/src/utils/get-cipp-license-translation"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { Mail } from "@mui/icons-material"; +import { Mail, Fingerprint } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import { CippCopyToClipBoard } from "../../../../../components/CippComponents/CippCopyToClipboard"; @@ -55,11 +55,15 @@ const Page = () => { icon: , text: , }, + { + icon: , + text: , + }, { icon: , text: ( <> - Created + Created: ), }, diff --git a/src/pages/identity/administration/users/user/exchange.jsx b/src/pages/identity/administration/users/user/exchange.jsx index 29082e3b6fb8..beccf92393e2 100644 --- a/src/pages/identity/administration/users/user/exchange.jsx +++ b/src/pages/identity/administration/users/user/exchange.jsx @@ -4,7 +4,7 @@ import { useRouter } from "next/router"; import { ApiGetCall } from "/src/api/ApiCall"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { Check, Error, Mail } from "@mui/icons-material"; +import { Check, Error, Mail, Fingerprint } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import { CippTimeAgo } from "../../../../../components/CippComponents/CippTimeAgo"; @@ -101,11 +101,15 @@ const Page = () => { ), }, + { + icon: , + text: , + }, { icon: , text: ( <> - Created + Created: ), }, diff --git a/src/pages/identity/administration/users/user/index.jsx b/src/pages/identity/administration/users/user/index.jsx index 984371102e4f..f7d8937590d5 100644 --- a/src/pages/identity/administration/users/user/index.jsx +++ b/src/pages/identity/administration/users/user/index.jsx @@ -4,7 +4,7 @@ import { useRouter } from "next/router"; import { ApiGetCall } from "/src/api/ApiCall"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { AdminPanelSettings, Check, Group, Mail } from "@mui/icons-material"; +import { AdminPanelSettings, Check, Group, Mail, Fingerprint } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import { CippCopyToClipBoard } from "../../../../../components/CippComponents/CippCopyToClipboard"; @@ -122,11 +122,15 @@ const Page = () => { icon: , text: , }, + { + icon: , + text: , + }, { icon: , text: ( <> - Created + Created: ), }, From bcdbd1a081cd6cc2cd3538b4a2cf5db3e6027536 Mon Sep 17 00:00:00 2001 From: Esco Date: Tue, 28 Jan 2025 13:11:17 +0100 Subject: [PATCH 0017/1184] fix: revert back to location --- src/pages/identity/reports/risk-detections/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pages/identity/reports/risk-detections/index.js b/src/pages/identity/reports/risk-detections/index.js index f6fe5e6b07da..3c54fc260e31 100644 --- a/src/pages/identity/reports/risk-detections/index.js +++ b/src/pages/identity/reports/risk-detections/index.js @@ -23,8 +23,7 @@ const Page = () => { "userDisplayName", "userPrincipalName", "detectedDateTime", - "location.city", - "location.countryOrRegion", + "location", "ipAddress", "riskLevel", "riskState", @@ -39,8 +38,7 @@ const Page = () => { const simpleColumns = [ "detectedDateTime", "userPrincipalName", - "location.city", - "location.countryOrRegion", + "location", "ipAddress", "riskState", "riskDetail", From 45fa3756cf91cea07fc8093feea85952826ae10b Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Tue, 28 Jan 2025 13:04:52 +0000 Subject: [PATCH 0018/1184] Add speed dial actions for bug reporting and feature requests --- .../CippComponents/CippSpeedDial.jsx | 222 ++++++++++++++++++ src/pages/_app.js | 15 ++ 2 files changed, 237 insertions(+) create mode 100644 src/components/CippComponents/CippSpeedDial.jsx diff --git a/src/components/CippComponents/CippSpeedDial.jsx b/src/components/CippComponents/CippSpeedDial.jsx new file mode 100644 index 000000000000..805ca4a66fe9 --- /dev/null +++ b/src/components/CippComponents/CippSpeedDial.jsx @@ -0,0 +1,222 @@ +import React, { useState, useEffect } from "react"; +import { + SpeedDial, + SpeedDialAction, + SpeedDialIcon, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Button, + Snackbar, + Alert, + CircularProgress, +} from "@mui/material"; +import { Close as CloseIcon } from "@mui/icons-material"; +import { useForm } from "react-hook-form"; +import { CippFormComponent } from "/src/components/CippComponents/CippFormComponent"; + +const CippSpeedDial = ({ + actions = [], + position = { bottom: 16, right: 16 }, + icon, + openIcon = , +}) => { + const [openDialogs, setOpenDialogs] = useState({}); + const [loading, setLoading] = useState(false); + const [showSnackbar, setShowSnackbar] = useState(false); + const [speedDialOpen, setSpeedDialOpen] = useState(false); + const [isHovering, setIsHovering] = useState(false); + const [snackbarMessage, setSnackbarMessage] = useState(""); + + const formControls = actions.reduce((acc, action) => { + if (action.form) { + acc[action.id] = useForm({ + mode: "onChange", + defaultValues: action.form.defaultValues || {}, + }); + } + return acc; + }, {}); + + const handleSpeedDialClose = () => { + if (!isHovering) { + setTimeout(() => { + setSpeedDialOpen(false); + }, 200); + } + }; + + const handleMouseEnter = () => { + setIsHovering(true); + setSpeedDialOpen(true); + }; + + const handleMouseLeave = () => { + setIsHovering(false); + handleSpeedDialClose(); + }; + + const handleDialogOpen = (actionId) => { + setOpenDialogs((prev) => ({ ...prev, [actionId]: true })); + }; + + const handleDialogClose = (actionId) => { + setOpenDialogs((prev) => ({ ...prev, [actionId]: false })); + }; + + const handleSubmit = async (actionId, data) => { + if (!actions.find((a) => a.id === actionId)?.onSubmit) return; + + setLoading(true); + try { + const action = actions.find((a) => a.id === actionId); + const result = await action.onSubmit(data); + + if (result.success) { + formControls[actionId]?.reset(); + handleDialogClose(actionId); + } + setSnackbarMessage(result.message); + setShowSnackbar(true); + } catch (error) { + console.error(`Error submitting ${actionId}:`, error); + setSnackbarMessage("An error occurred while submitting"); + setShowSnackbar(true); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + const handleClickOutside = (event) => { + if (speedDialOpen) { + const speedDial = document.querySelector('[aria-label="Navigation SpeedDial"]'); + if (speedDial && !speedDial.contains(event.target)) { + setSpeedDialOpen(false); + } + } + }; + + document.addEventListener("click", handleClickOutside); + return () => { + document.removeEventListener("click", handleClickOutside); + }; + }, [speedDialOpen]); + + return ( + <> + } + open={speedDialOpen} + onClose={handleSpeedDialClose} + onOpen={() => setSpeedDialOpen(true)} + onMouseEnter={handleMouseEnter} + onMouseLeave={handleMouseLeave} + > + {actions.map((action) => ( + { + if (action.form) { + handleDialogOpen(action.id); + } else if (action.onClick) { + action.onClick(); + } + setSpeedDialOpen(false); + }} + tooltipOpen + sx={{ + "&.MuiSpeedDialAction-fab": { + backgroundColor: "background.paper", + "&:hover": { + backgroundColor: "action.hover", + }, + }, + "& .MuiSpeedDialAction-staticTooltipLabel": { + cursor: "pointer", + whiteSpace: "nowrap", + marginRight: "10px", + padding: "6px 10px", + "&:hover": { + backgroundColor: "action.hover", + }, + }, + }} + /> + ))} + + + {actions + .filter((action) => action.form) + .map((action) => ( + handleDialogClose(action.id)} + maxWidth="md" + fullWidth + > + {action.form.title} + + + + + + + + + ))} + + setShowSnackbar(false)} + anchorOrigin={{ vertical: "bottom", horizontal: "center" }} + > + setShowSnackbar(false)} severity="success" sx={{ width: "100%" }}> + {snackbarMessage} + + + + ); +}; + +export default CippSpeedDial; diff --git a/src/pages/_app.js b/src/pages/_app.js index 702eb328927c..1dd1e6971768 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -36,6 +36,21 @@ const App = (props) => { const getLayout = Component.getLayout ?? ((page) => page); const preferredTheme = useMediaPredicate("(prefers-color-scheme: dark)") ? "dark" : "light"; + const speedDialActions = [ + { + id: "bug-report", + icon: , + name: "Report Bug", + href: "https://github.com/KelvinTegelaar/CIPP/issues/new?template=bug.yml", + }, + { + id: "feature-request", + icon: , + name: "Request Feature", + href: "https://github.com/KelvinTegelaar/CIPP/issues/new?template=feature.yml", + }, + ]; + return ( From 0523c8cc4db8a5f9b25cf3708af11f76d6c916ed Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 28 Jan 2025 10:59:24 -0500 Subject: [PATCH 0019/1184] bring back offboarding defaults --- .../CippWizard/CippWizardOffboarding.jsx | 10 ++++++++++ src/pages/cipp/preferences.js | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/components/CippWizard/CippWizardOffboarding.jsx b/src/components/CippWizard/CippWizardOffboarding.jsx index 7d69817bcf52..d61e9365c1e5 100644 --- a/src/components/CippWizard/CippWizardOffboarding.jsx +++ b/src/components/CippWizard/CippWizardOffboarding.jsx @@ -5,12 +5,14 @@ import { CippFormCondition } from "../CippComponents/CippFormCondition"; import { useWatch } from "react-hook-form"; import { useEffect, useState } from "react"; import { Grid } from "@mui/system"; +import { useSettings } from "../../hooks/use-settings"; export const CippWizardOffboarding = (props) => { const { postUrl, formControl, onPreviousStep, onNextStep, currentStep } = props; const currentTenant = formControl.watch("tenantFilter"); const selectedUsers = useWatch({ control: formControl.control, name: "user" }); const [showAlert, setShowAlert] = useState(false); + const userSettingsDefaults = useSettings().userSettingsDefaults; useEffect(() => { if (selectedUsers.length >= 4) { @@ -19,6 +21,14 @@ export const CippWizardOffboarding = (props) => { } }, [selectedUsers]); + useEffect(() => { + if (userSettingsDefaults?.offboardingDefaults) { + userSettingsDefaults.offboardingDefaults.forEach((setting) => { + formControl.setValue(setting.name, setting.value); + }); + } + }, [userSettingsDefaults]); + return ( diff --git a/src/pages/cipp/preferences.js b/src/pages/cipp/preferences.js index 6cc782d44508..a6c34d96bbab 100644 --- a/src/pages/cipp/preferences.js +++ b/src/pages/cipp/preferences.js @@ -255,6 +255,26 @@ const Page = () => { /> ), }, + { + label: "Disable Sign in", + value: ( + + ), + }, + { + label: "Remove all MFA Devices", + value: ( + + ), + }, ]} /> From 6dd731b63dfa29de61712c41f9bfaaf1d1a0b33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 28 Jan 2025 22:44:59 +0100 Subject: [PATCH 0020/1184] Add icons for permission actions in OneDrive page --- src/pages/teams-share/onedrive/index.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/pages/teams-share/onedrive/index.js b/src/pages/teams-share/onedrive/index.js index c14fd268acb2..842b0737cbcc 100644 --- a/src/pages/teams-share/onedrive/index.js +++ b/src/pages/teams-share/onedrive/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { PersonAdd, PersonRemove } from "@mui/icons-material"; const Page = () => { const pageTitle = "OneDrive"; @@ -7,6 +8,7 @@ const Page = () => { const actions = [ { label: "Add permissions to OneDrive", + icon: , type: "POST", url: "/api/ExecSharePointPerms", data: { @@ -36,6 +38,7 @@ const Page = () => { }, { label: "Remove permissions from OneDrive", + icon: , type: "POST", url: "/api/ExecSharePointPerms", data: { @@ -65,17 +68,11 @@ const Page = () => { }, ]; - const offCanvas = { - extendedInfoFields: ["UPN"], - actions: actions, - }; - return ( Date: Tue, 28 Jan 2025 23:06:56 +0100 Subject: [PATCH 0021/1184] Remove unused actions and offCanvas variables from Azure AD Connect report --- src/pages/identity/reports/azure-ad-connect-report/index.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/pages/identity/reports/azure-ad-connect-report/index.js b/src/pages/identity/reports/azure-ad-connect-report/index.js index 529ce0333b4e..97594a13d6ac 100644 --- a/src/pages/identity/reports/azure-ad-connect-report/index.js +++ b/src/pages/identity/reports/azure-ad-connect-report/index.js @@ -9,9 +9,6 @@ const simpleColumns = [ ]; const apiUrl = "/api/ListAzureADConnectStatus"; -const actions = []; // No actions specified in the original code - -const offCanvas = null; // No off-canvas details provided const Page = () => { return ( @@ -21,8 +18,6 @@ const Page = () => { apiData={{ DataToReturn: "AzureADObjectsInError", }} - actions={actions} - offCanvas={offCanvas} simpleColumns={simpleColumns} /> ); From a4f8f1b45d02565cceab345a25d09daa0028ddd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 28 Jan 2025 23:07:01 +0100 Subject: [PATCH 0022/1184] Remove unused actions and offCanvas variables from Sign Ins Report --- src/pages/identity/reports/signin-report/index.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/pages/identity/reports/signin-report/index.js b/src/pages/identity/reports/signin-report/index.js index 6304b8fa0da6..619f99ef8bcd 100644 --- a/src/pages/identity/reports/signin-report/index.js +++ b/src/pages/identity/reports/signin-report/index.js @@ -7,8 +7,6 @@ import CippButtonCard from "/src/components/CippCards/CippButtonCard"; const Page = () => { const pageTitle = "Sign Ins Report"; const apiUrl = "/api/ListSignIns"; - const actions = []; - const offCanvas = null; const simpleColumns = [ "createdDateTime", "userPrincipalName", @@ -16,6 +14,7 @@ const Page = () => { "authenticationRequirement", "errorCode", "additionalDetails", + "ipAddress", "locationcipp", ]; @@ -102,8 +101,6 @@ const Page = () => { title={pageTitle} apiUrl={apiUrl} apiData={appliedFilters} - actions={actions} - offCanvas={offCanvas} simpleColumns={simpleColumns} queryKey={`ListSignIns-${JSON.stringify(appliedFilters)}`} /> From 2e095d04182ce497b60b05a4bca5a98c369ce791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 28 Jan 2025 23:21:52 +0100 Subject: [PATCH 0023/1184] Refactor user filters in administration page for improved readability --- .../identity/administration/users/index.js | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/pages/identity/administration/users/index.js b/src/pages/identity/administration/users/index.js index c03a62bb56cd..ec4552915b18 100644 --- a/src/pages/identity/administration/users/index.js +++ b/src/pages/identity/administration/users/index.js @@ -9,6 +9,24 @@ const Page = () => { const pageTitle = "Users"; const tenant = useSettings().currentTenant; + const filters = [ + { + filterName: "Account Enabled", + value: [{ id: "accountEnabled", value: "Yes" }], + type: "column", + }, + { + filterName: "Account Disabled", + value: [{ id: "accountEnabled", value: "No" }], + type: "column", + }, + { + filterName: "Guest Accounts", + value: [{ id: "userType", value: "Guest" }], + type: "column", + }, + ]; + const offCanvas = { extendedInfoFields: [ "createdDateTime", // Created Date (UTC) @@ -67,24 +85,7 @@ const Page = () => { "proxyAddresses", "assignedLicenses", ]} - filters={[ - { - filterName: "Account Enabled", - //true or false filters by yes/no - value: [{ id: "accountEnabled", value: "Yes" }], - type: "column", - }, - { - filterName: "Account Disabled", - value: [{ id: "accountEnabled", value: "No" }], - type: "column", - }, - { - filterName: "Guest Accounts", - value: [{ id: "userType", value: "Guest" }], - type: "column", - }, - ]} + filters={filters} /> ); }; From 4745883169c56171d618cea04c07d979373b64af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 28 Jan 2025 23:22:02 +0100 Subject: [PATCH 0024/1184] Add filters and actions to MFA Report page --- .../identity/reports/mfa-report/index.js | 75 ++++++++++++++++--- 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/src/pages/identity/reports/mfa-report/index.js b/src/pages/identity/reports/mfa-report/index.js index fd18f1bdef0c..02ee1058648e 100644 --- a/src/pages/identity/reports/mfa-report/index.js +++ b/src/pages/identity/reports/mfa-report/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { LockPerson } from "@mui/icons-material"; const Page = () => { const pageTitle = "MFA Report"; @@ -15,19 +16,71 @@ const Page = () => { "MFAMethods", "CAPolicies", ]; + const filters = [ + { + filterName: "Enabled, licensed users", + value: [ + { id: "AccountEnabled", value: "Yes" }, + { id: "isLicensed", value: "Yes" }, + ], + type: "column", + }, + { + filterName: "Enabled, licensed users missing MFA", + value: [ + { id: "AccountEnabled", value: "Yes" }, + { id: "isLicensed", value: "Yes" }, + { id: "MFARegistration", value: "No" }, + ], + type: "column", + }, + { + filterName: "No MFA methods registered", + value: [{ id: "MFARegistration", value: "No" }], + type: "column", + }, + { + filterName: "MFA methods registered", + value: [{ id: "MFARegistration", value: "Yes" }], + type: "column", + }, + ]; - /* Filters not supported in the current structure, need dev attention for integration. - filterlist: [ - { filterName: 'Enabled users', filter: '"accountEnabled":true' }, - { filterName: 'Non-guest users', filter: 'Complex: UPN notlike #EXT#' }, - { filterName: 'Licensed users', filter: 'Complex: IsLicensed eq true' }, - { filterName: 'Enabled, licensed non-guest users missing MFA', filter: 'Complex: UPN notlike #EXT#; IsLicensed eq true; accountEnabled eq true; MFARegistration ne true' }, - { filterName: 'No MFA methods registered', filter: 'Complex: MFARegistration ne true' }, - { filterName: 'MFA methods registered', filter: 'Complex: MFARegistration eq true' }, - ], - */ + const actions = [ + { + //tested + label: "Set Per-User MFA", + type: "POST", + icon: , + url: "/api/ExecPerUserMFA", + data: { userId: "UPN" }, + fields: [ + { + type: "autoComplete", + name: "State", + label: "State", + options: [ + { label: "Enforced", value: "Enforced" }, + { label: "Enabled", value: "Enabled" }, + { label: "Disabled", value: "Disabled" }, + ], + multiple: false, + }, + ], + confirmText: "Are you sure you want to set per-user MFA for these users?", + multiPost: false, + }, + ]; - return ; + return ( + + ); }; Page.getLayout = (page) => {page}; From 59adc40f8811ebe16bdd2f0f7c2fd643e2e0f945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 28 Jan 2025 23:24:02 +0100 Subject: [PATCH 0025/1184] Restrict creatable option for MFA user actions --- src/components/CippComponents/CippUserActions.jsx | 1 + src/pages/identity/reports/mfa-report/index.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippUserActions.jsx b/src/components/CippComponents/CippUserActions.jsx index fe532d259f4b..f88d909281e8 100644 --- a/src/components/CippComponents/CippUserActions.jsx +++ b/src/components/CippComponents/CippUserActions.jsx @@ -98,6 +98,7 @@ export const CippUserActions = () => { { label: "Disabled", value: "Disabled" }, ], multiple: false, + creatable: false, }, ], confirmText: "Are you sure you want to set per-user MFA for these users?", diff --git a/src/pages/identity/reports/mfa-report/index.js b/src/pages/identity/reports/mfa-report/index.js index 02ee1058648e..206e8337e2ef 100644 --- a/src/pages/identity/reports/mfa-report/index.js +++ b/src/pages/identity/reports/mfa-report/index.js @@ -48,7 +48,6 @@ const Page = () => { const actions = [ { - //tested label: "Set Per-User MFA", type: "POST", icon: , @@ -65,6 +64,7 @@ const Page = () => { { label: "Disabled", value: "Disabled" }, ], multiple: false, + creatable: false, }, ], confirmText: "Are you sure you want to set per-user MFA for these users?", From b363c663a22bc9113076e9d570f28e65a035456e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 28 Jan 2025 23:40:19 +0100 Subject: [PATCH 0026/1184] Remove unused actions and offCanvas variables --- .../tenant/administration/list-licenses/index.js | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/pages/tenant/administration/list-licenses/index.js b/src/pages/tenant/administration/list-licenses/index.js index 1a4abfc73707..417e1ef16910 100644 --- a/src/pages/tenant/administration/list-licenses/index.js +++ b/src/pages/tenant/administration/list-licenses/index.js @@ -5,28 +5,16 @@ const Page = () => { const pageTitle = "Licenses Report"; const apiUrl = "/api/ListLicenses"; - const actions = []; // No actions specified, setting to empty array - - const offCanvas = null; // No off-canvas details provided - const simpleColumns = [ "Tenant", "License", "CountUsed", "CountAvailable", "TotalLicenses", - "TermInfo", + "TermInfo", // TODO TermInfo is not showing as a clickable json object in the table, like CApolicies does in the mfa report. IDK how to fix it. -Bobby ]; - return ( - - ); + return ; }; Page.getLayout = (page) => {page}; From 8cf68f8379742398d95fef88b546f1e3acf3fb51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 28 Jan 2025 23:47:09 +0100 Subject: [PATCH 0027/1184] Update tenant reports pathing to be the same as other pages --- src/layouts/config.js | 6 +++--- .../application-consent/index.js | 0 .../{administration => reports}/list-csp-licenses/index.jsx | 0 .../{administration => reports}/list-licenses/index.js | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename src/pages/tenant/{administration => reports}/application-consent/index.js (100%) rename src/pages/tenant/{administration => reports}/list-csp-licenses/index.jsx (100%) rename src/pages/tenant/{administration => reports}/list-licenses/index.js (100%) diff --git a/src/layouts/config.js b/src/layouts/config.js index d9685ba29de4..c2f375de7f8b 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -154,15 +154,15 @@ export const nativeMenuItems = [ items: [ { title: "Licence Report", - path: "/tenant/administration/list-licenses", + path: "/tenant/reports/list-licenses", }, { title: "Sherweb Licence Report", - path: "/tenant/administration/list-csp-licenses", + path: "/tenant/reports/list-csp-licenses", }, { title: "Consented Applications", - path: "/tenant/administration/application-consent", + path: "/tenant/reports/application-consent", }, ], }, diff --git a/src/pages/tenant/administration/application-consent/index.js b/src/pages/tenant/reports/application-consent/index.js similarity index 100% rename from src/pages/tenant/administration/application-consent/index.js rename to src/pages/tenant/reports/application-consent/index.js diff --git a/src/pages/tenant/administration/list-csp-licenses/index.jsx b/src/pages/tenant/reports/list-csp-licenses/index.jsx similarity index 100% rename from src/pages/tenant/administration/list-csp-licenses/index.jsx rename to src/pages/tenant/reports/list-csp-licenses/index.jsx diff --git a/src/pages/tenant/administration/list-licenses/index.js b/src/pages/tenant/reports/list-licenses/index.js similarity index 100% rename from src/pages/tenant/administration/list-licenses/index.js rename to src/pages/tenant/reports/list-licenses/index.js From 295d71f44c3872a29ed2379b09a66b7a2f3ca3a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 28 Jan 2025 23:49:46 +0100 Subject: [PATCH 0028/1184] Update device management path to align with new endpoint structure --- src/layouts/config.js | 2 +- src/pages/endpoint/{reports => MEM}/devices/index.js | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/pages/endpoint/{reports => MEM}/devices/index.js (100%) diff --git a/src/layouts/config.js b/src/layouts/config.js index c2f375de7f8b..bc501b15c43e 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -244,7 +244,7 @@ export const nativeMenuItems = [ title: "Device Management", path: "/endpoint/MEM", items: [ - { title: "Devices", path: "/endpoint/reports/devices" }, + { title: "Devices", path: "/endpoint/MEM/devices" }, { title: "Configuration Policies", path: "/endpoint/MEM/list-policies" }, { title: "Compliance Policies", path: "/endpoint/MEM/list-compliance-policies" }, { title: "Protection Policies", path: "/endpoint/MEM/list-appprotection-policies" }, diff --git a/src/pages/endpoint/reports/devices/index.js b/src/pages/endpoint/MEM/devices/index.js similarity index 100% rename from src/pages/endpoint/reports/devices/index.js rename to src/pages/endpoint/MEM/devices/index.js From ac0f4523cf2f5bc4f2d6e68978559af2a5af94ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:02:51 +0100 Subject: [PATCH 0029/1184] forgot a spot --- generate-placeholders.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate-placeholders.js b/generate-placeholders.js index 9858fc7f7b7c..f1733c0eb830 100644 --- a/generate-placeholders.js +++ b/generate-placeholders.js @@ -82,7 +82,7 @@ const pages = [ { title: "Add Profile", path: "/endpoint/autopilot/add-profile" }, { title: "Status Pages", path: "/endpoint/autopilot/list-status-pages" }, { title: "Add Status Page", path: "/endpoint/autopilot/add-status-page" }, - { title: "Devices", path: "/endpoint/reports/devices" }, + { title: "Devices", path: "/endpoint/MEM/devices" }, { title: "Configuration Policies", path: "/endpoint/MEM/list-policies" }, { title: "Compliance Policies", path: "/endpoint/MEM/list-compliance-policies" }, { title: "Protection Policies", path: "/endpoint/MEM/list-appprotection-policies" }, From d41a0b72c806023d0b078f6fdd19e63be03ba5ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:04:36 +0100 Subject: [PATCH 0030/1184] Update transport paths in email layout for consistency --- src/layouts/config.js | 6 +++--- .../list-connector-templates/index.js | 0 .../email/{connectors => transport}/list-connectors/add.jsx | 0 .../{connectors => transport}/list-connectors/index.js | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename src/pages/email/{connectors => transport}/list-connector-templates/index.js (100%) rename src/pages/email/{connectors => transport}/list-connectors/add.jsx (100%) rename src/pages/email/{connectors => transport}/list-connectors/index.js (100%) diff --git a/src/layouts/config.js b/src/layouts/config.js index bc501b15c43e..f14a9b4feb0b 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -315,17 +315,17 @@ export const nativeMenuItems = [ }, { title: "Transport", - path: "/email/Transport", + path: "/email/transport", items: [ { title: "Transport rules", path: "/email/transport/list-rules" }, { title: "Transport Templates", path: "/email/transport/list-templates", }, - { title: "Connectors", path: "/email/connectors/list-connectors" }, + { title: "Connectors", path: "/email/transport/list-connectors" }, { title: "Connector Templates", - path: "/email/connectors/list-connector-templates", + path: "/email/transport/list-connector-templates", }, ], }, diff --git a/src/pages/email/connectors/list-connector-templates/index.js b/src/pages/email/transport/list-connector-templates/index.js similarity index 100% rename from src/pages/email/connectors/list-connector-templates/index.js rename to src/pages/email/transport/list-connector-templates/index.js diff --git a/src/pages/email/connectors/list-connectors/add.jsx b/src/pages/email/transport/list-connectors/add.jsx similarity index 100% rename from src/pages/email/connectors/list-connectors/add.jsx rename to src/pages/email/transport/list-connectors/add.jsx diff --git a/src/pages/email/connectors/list-connectors/index.js b/src/pages/email/transport/list-connectors/index.js similarity index 100% rename from src/pages/email/connectors/list-connectors/index.js rename to src/pages/email/transport/list-connectors/index.js From db5f73f69e92ad766c3e0cb8fd3669abb70b9dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:05:26 +0100 Subject: [PATCH 0031/1184] Update connectors paths to align with transport structure --- generate-placeholders.js | 4 ++-- src/pages/email/transport/list-connectors/index.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/generate-placeholders.js b/generate-placeholders.js index f1733c0eb830..560e7680e3b1 100644 --- a/generate-placeholders.js +++ b/generate-placeholders.js @@ -108,9 +108,9 @@ const pages = [ { title: "Transport rules", path: "/email/transport/list-rules" }, { title: "Deploy Transport rule", path: "/email/transport/deploy-rules" }, { title: "Transport Templates", path: "/email/transport/list-templates" }, - { title: "Connectors", path: "/email/connectors/list-connectors" }, + { title: "Connectors", path: "/email/transport/list-connectors" }, { title: "Deploy Connector Templates", path: "/email/connectors/deploy-connector" }, - { title: "Connector Templates", path: "/email/connectors/list-connector-templates" }, + { title: "Connector Templates", path: "/email/transport/list-connector-templates" }, { title: "Spamfilter", path: "/email/spamfilter/list-spamfilter" }, { title: "Apply Spamfilter Template", path: "/email/spamfilter/deploy" }, { title: "Templates", path: "/email/spamfilter/list-templates" }, diff --git a/src/pages/email/transport/list-connectors/index.js b/src/pages/email/transport/list-connectors/index.js index 58799a4bd6dc..c61b44ad6fa2 100644 --- a/src/pages/email/transport/list-connectors/index.js +++ b/src/pages/email/transport/list-connectors/index.js @@ -83,7 +83,7 @@ const Page = () => { }} cardButton={ <> - From 311c3606565ecb4d4e64821c2f2d60ffc7099bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:09:48 +0100 Subject: [PATCH 0032/1184] Fix path casing in email administration and remove unused deploy connector page --- src/layouts/config.js | 2 +- .../email/connectors/deploy-connector/index.js | 17 ----------------- 2 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 src/pages/email/connectors/deploy-connector/index.js diff --git a/src/layouts/config.js b/src/layouts/config.js index f14a9b4feb0b..75bf312ddd87 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -300,7 +300,7 @@ export const nativeMenuItems = [ items: [ { title: "Administration", - path: "/email/Administration", + path: "/email/administration", items: [ { title: "Mailboxes", path: "/email/administration/mailboxes" }, { title: "Deleted Mailboxes", path: "/email/administration/deleted-mailboxes" }, diff --git a/src/pages/email/connectors/deploy-connector/index.js b/src/pages/email/connectors/deploy-connector/index.js deleted file mode 100644 index cddfb2691027..000000000000 --- a/src/pages/email/connectors/deploy-connector/index.js +++ /dev/null @@ -1,17 +0,0 @@ - -import { Layout as DashboardLayout } from "/src/layouts/index.js"; - -const Page = () => { - const pageTitle = "Deploy Connector Templates"; - - return ( -
-

{pageTitle}

-

This is a placeholder page for the deploy connector templates section.

-
- ); -}; - -Page.getLayout = (page) => {page}; - -export default Page; From f040f64cecfd240b8844661a80039e98e17300e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:17:42 +0100 Subject: [PATCH 0033/1184] Remove unused placeholder and reorder to fit the rest of CIPPs pages --- src/layouts/config.js | 7 +++++-- .../email/connectionfilter/deploy/index.js | 17 ----------------- src/pages/email/spamfilter/deploy/index.js | 17 ----------------- .../list-connectionfilter-templates}/index.js | 0 .../list-connectionfilter/add.jsx | 0 .../list-connectionfilter/index.js | 10 ++-------- 6 files changed, 7 insertions(+), 44 deletions(-) delete mode 100644 src/pages/email/connectionfilter/deploy/index.js delete mode 100644 src/pages/email/spamfilter/deploy/index.js rename src/pages/email/{connectionfilter/list-templates => spamfilter/list-connectionfilter-templates}/index.js (100%) rename src/pages/email/{connectionfilter => spamfilter}/list-connectionfilter/add.jsx (100%) rename src/pages/email/{connectionfilter => spamfilter}/list-connectionfilter/index.js (85%) diff --git a/src/layouts/config.js b/src/layouts/config.js index 75bf312ddd87..d3e24167dc9d 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -335,8 +335,11 @@ export const nativeMenuItems = [ items: [ { title: "Spamfilter", path: "/email/spamfilter/list-spamfilter" }, { title: "Spamfilter templates", path: "/email/spamfilter/list-templates" }, - { title: "Connection filter", path: "/email/connectionfilter/list-connectionfilter" }, - { title: "Connection filter templates", path: "/email/connectionfilter/list-templates" }, + { title: "Connection filter", path: "/email/spamfilter/list-connectionfilter" }, + { + title: "Connection filter templates", + path: "/email/spamfilter/list-connectionfilter-templates", + }, ], }, { diff --git a/src/pages/email/connectionfilter/deploy/index.js b/src/pages/email/connectionfilter/deploy/index.js deleted file mode 100644 index 92cbabc77ae2..000000000000 --- a/src/pages/email/connectionfilter/deploy/index.js +++ /dev/null @@ -1,17 +0,0 @@ - -import { Layout as DashboardLayout } from "/src/layouts/index.js"; - -const Page = () => { - const pageTitle = "Apply Spamfilter Template"; - - return ( -
-

{pageTitle}

-

This is a placeholder page for the apply spamfilter template section.

-
- ); -}; - -Page.getLayout = (page) => {page}; - -export default Page; diff --git a/src/pages/email/spamfilter/deploy/index.js b/src/pages/email/spamfilter/deploy/index.js deleted file mode 100644 index 92cbabc77ae2..000000000000 --- a/src/pages/email/spamfilter/deploy/index.js +++ /dev/null @@ -1,17 +0,0 @@ - -import { Layout as DashboardLayout } from "/src/layouts/index.js"; - -const Page = () => { - const pageTitle = "Apply Spamfilter Template"; - - return ( -
-

{pageTitle}

-

This is a placeholder page for the apply spamfilter template section.

-
- ); -}; - -Page.getLayout = (page) => {page}; - -export default Page; diff --git a/src/pages/email/connectionfilter/list-templates/index.js b/src/pages/email/spamfilter/list-connectionfilter-templates/index.js similarity index 100% rename from src/pages/email/connectionfilter/list-templates/index.js rename to src/pages/email/spamfilter/list-connectionfilter-templates/index.js diff --git a/src/pages/email/connectionfilter/list-connectionfilter/add.jsx b/src/pages/email/spamfilter/list-connectionfilter/add.jsx similarity index 100% rename from src/pages/email/connectionfilter/list-connectionfilter/add.jsx rename to src/pages/email/spamfilter/list-connectionfilter/add.jsx diff --git a/src/pages/email/connectionfilter/list-connectionfilter/index.js b/src/pages/email/spamfilter/list-connectionfilter/index.js similarity index 85% rename from src/pages/email/connectionfilter/list-connectionfilter/index.js rename to src/pages/email/spamfilter/list-connectionfilter/index.js index cd6e9482ada8..be6506c4db26 100644 --- a/src/pages/email/connectionfilter/list-connectionfilter/index.js +++ b/src/pages/email/spamfilter/list-connectionfilter/index.js @@ -32,13 +32,7 @@ const Page = () => { actions: actions, }; - const simpleColumns = [ - "Name", - "IsDefault", - "IPAllowList", - "IPBlockList", - "EnableSafeList", - ]; + const simpleColumns = ["Name", "IsDefault", "IPAllowList", "IPBlockList", "EnableSafeList"]; return ( { simpleColumns={simpleColumns} cardButton={ <> - From dcdfc849ab8f8dd21abc29148433c06e46f5e85a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:20:26 +0100 Subject: [PATCH 0034/1184] Add Book icon to connection filter page --- src/pages/email/spamfilter/list-connectionfilter/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/email/spamfilter/list-connectionfilter/index.js b/src/pages/email/spamfilter/list-connectionfilter/index.js index be6506c4db26..97e8cd8f963f 100644 --- a/src/pages/email/spamfilter/list-connectionfilter/index.js +++ b/src/pages/email/spamfilter/list-connectionfilter/index.js @@ -1,6 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { Book } from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -14,6 +15,7 @@ const Page = () => { dataFunction: (data) => { return { ...data }; }, + icon: , confirmText: "Are you sure you want to create a template based on this rule?", }, ]; From c7c8a3e235d7c0969df67557ebaffa94b53c46d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:29:17 +0100 Subject: [PATCH 0035/1184] Update link in domains analyser to point to tools section --- src/pages/tenant/standards/domains-analyser/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tenant/standards/domains-analyser/index.js b/src/pages/tenant/standards/domains-analyser/index.js index 218e8a8633b4..1a5c2e9b4a68 100644 --- a/src/pages/tenant/standards/domains-analyser/index.js +++ b/src/pages/tenant/standards/domains-analyser/index.js @@ -36,7 +36,7 @@ const Page = () => { apiUrl="/api/ListDomainAnalyser" cardButton={ <> - {/* This needs to be replaced with a CippApiDialog. */} From a1b4b46907719a9e524c62904ac768de203c403d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:31:46 +0100 Subject: [PATCH 0036/1184] Update paths for Graph Explorer, Application Approval, and Individual Domain Check to align with tools section --- generate-placeholders.js | 6 +++--- src/layouts/config.js | 6 +++--- .../tenant/{administration => tools}/appapproval/index.js | 0 .../{administration => tools}/graph-explorer/index.js | 0 .../tenant/{standards => tools}/individual-domains/index.js | 0 5 files changed, 6 insertions(+), 6 deletions(-) rename src/pages/tenant/{administration => tools}/appapproval/index.js (100%) rename src/pages/tenant/{administration => tools}/graph-explorer/index.js (100%) rename src/pages/tenant/{standards => tools}/individual-domains/index.js (100%) diff --git a/generate-placeholders.js b/generate-placeholders.js index 560e7680e3b1..2f6b614fe9a8 100644 --- a/generate-placeholders.js +++ b/generate-placeholders.js @@ -35,11 +35,11 @@ const pages = [ { title: "Backup Wizard", path: "/tenant/backup/backup-wizard" }, { title: "Restore Wizard", path: "/tenant/backup/restore-wizard" }, { title: "Tools", path: "/tenant/administration" }, - { title: "Graph Explorer", path: "/tenant/administration/graph-explorer" }, - { title: "Application Approval", path: "/tenant/administration/appapproval" }, + { title: "Graph Explorer", path: "/tenant/tools/graph-explorer" }, + { title: "Application Approval", path: "/tenant/tools/appapproval" }, { title: "IP Database", path: "/tenant/tools/geoiplookup" }, { title: "Tenant Lookup", path: "/tenant/administration/tenantlookup" }, - { title: "Individual Domain Check", path: "/tenant/standards/individual-domains" }, + { title: "Individual Domain Check", path: "/tenant/tools/individual-domains" }, { title: "BPA Report Builder", path: "/tenant/tools/bpa-report-builder" }, { title: "Standards", path: "/tenant/standards" }, { title: "Edit Standards", path: "/tenant/standards/list-applied-standards" }, diff --git a/src/layouts/config.js b/src/layouts/config.js index d3e24167dc9d..e8c6d541c9be 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -402,11 +402,11 @@ export const nativeMenuItems = [ items: [ { title: "Graph Explorer", - path: "/tenant/administration/graph-explorer", + path: "/tenant/tools/graph-explorer", }, { title: "Application Approval", - path: "/tenant/administration/appapproval", + path: "/tenant/tools/appapproval", }, { title: "Tenant Lookup", path: "/tenant/tools/tenantlookup" }, @@ -414,7 +414,7 @@ export const nativeMenuItems = [ { title: "Individual Domain Check", - path: "/tenant/standards/individual-domains", + path: "/tenant/tools/individual-domains", }, ], }, diff --git a/src/pages/tenant/administration/appapproval/index.js b/src/pages/tenant/tools/appapproval/index.js similarity index 100% rename from src/pages/tenant/administration/appapproval/index.js rename to src/pages/tenant/tools/appapproval/index.js diff --git a/src/pages/tenant/administration/graph-explorer/index.js b/src/pages/tenant/tools/graph-explorer/index.js similarity index 100% rename from src/pages/tenant/administration/graph-explorer/index.js rename to src/pages/tenant/tools/graph-explorer/index.js diff --git a/src/pages/tenant/standards/individual-domains/index.js b/src/pages/tenant/tools/individual-domains/index.js similarity index 100% rename from src/pages/tenant/standards/individual-domains/index.js rename to src/pages/tenant/tools/individual-domains/index.js From afbfd9c7d31babbdbb969ab5f7dacb4a0b93478c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 00:54:32 +0100 Subject: [PATCH 0037/1184] Add icons for device actions in the autopilot device list --- src/pages/endpoint/autopilot/list-devices/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pages/endpoint/autopilot/list-devices/index.js b/src/pages/endpoint/autopilot/list-devices/index.js index b738be0ba6af..d924ec33b3d5 100644 --- a/src/pages/endpoint/autopilot/list-devices/index.js +++ b/src/pages/endpoint/autopilot/list-devices/index.js @@ -1,6 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { PersonAdd, Delete } from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -9,6 +10,7 @@ const Page = () => { const actions = [ { label: "Assign device", + icon: , type: "POST", url: "/api/ExecAssignAPDevice", data: { @@ -38,6 +40,7 @@ const Page = () => { }, { label: "Delete Device", + icon: , type: "POST", url: "/api/RemoveAPDevice", data: { ID: "id" }, From 23bb3774e178fd14cfd6f76984bf6575957144c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 01:07:58 +0100 Subject: [PATCH 0038/1184] Fix Add Status Page placeholder --- .../autopilot/add-status-page/index.js | 118 ++++++++++++++++- .../autopilot/list-status-pages/add.jsx | 123 ------------------ .../autopilot/list-status-pages/index.js | 2 +- 3 files changed, 113 insertions(+), 130 deletions(-) delete mode 100644 src/pages/endpoint/autopilot/list-status-pages/add.jsx diff --git a/src/pages/endpoint/autopilot/add-status-page/index.js b/src/pages/endpoint/autopilot/add-status-page/index.js index 2ee87af41a8e..1a3454035a19 100644 --- a/src/pages/endpoint/autopilot/add-status-page/index.js +++ b/src/pages/endpoint/autopilot/add-status-page/index.js @@ -1,14 +1,120 @@ - +import React from "react"; +import { Grid, Divider } from "@mui/material"; +import { useForm, useWatch } from "react-hook-form"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import CippFormPage from "/src/components/CippFormPages/CippFormPage"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; +import { CippFormTenantSelector } from "/src/components/CippComponents/CippFormTenantSelector"; const Page = () => { - const pageTitle = "Add Status Page"; + const formControl = useForm({ + mode: "onChange", + defaultValues: { + TimeOutInMinutes: "", + ErrorMessage: "", + ShowProgress: false, + EnableLog: false, + OBEEOnly: false, + blockDevice: false, + Allowretry: false, + AllowReset: false, + AllowFail: false, + }, + }); return ( -
-

{pageTitle}

-

This is a placeholder page for the add status page section.

-
+ + + {/* Tenant Selector */} + + + + + + + {/* Form Fields */} + + + + + + + + + {/* Switches */} + + + + + + + + + + + ); }; diff --git a/src/pages/endpoint/autopilot/list-status-pages/add.jsx b/src/pages/endpoint/autopilot/list-status-pages/add.jsx deleted file mode 100644 index 328283d07829..000000000000 --- a/src/pages/endpoint/autopilot/list-status-pages/add.jsx +++ /dev/null @@ -1,123 +0,0 @@ -import React from "react"; -import { Grid, Divider } from "@mui/material"; -import { useForm, useWatch } from "react-hook-form"; -import { Layout as DashboardLayout } from "/src/layouts/index.js"; -import CippFormPage from "/src/components/CippFormPages/CippFormPage"; -import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; -import { CippFormTenantSelector } from "/src/components/CippComponents/CippFormTenantSelector"; - -const AutopilotStatusPageForm = () => { - const formControl = useForm({ - mode: "onChange", - defaultValues: { - TimeOutInMinutes: "", - ErrorMessage: "", - ShowProgress: false, - EnableLog: false, - OBEEOnly: false, - blockDevice: false, - Allowretry: false, - AllowReset: false, - AllowFail: false, - }, - }); - - return ( - - - {/* Tenant Selector */} - - - - - - - {/* Form Fields */} - - - - - - - - - {/* Switches */} - - - - - - - - - - - - ); -}; - -AutopilotStatusPageForm.getLayout = (page) => {page}; - -export default AutopilotStatusPageForm; diff --git a/src/pages/endpoint/autopilot/list-status-pages/index.js b/src/pages/endpoint/autopilot/list-status-pages/index.js index 939685bd69ad..d49f4281b043 100644 --- a/src/pages/endpoint/autopilot/list-status-pages/index.js +++ b/src/pages/endpoint/autopilot/list-status-pages/index.js @@ -25,7 +25,7 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - From be8d2cfe068195d4e043f51149bcab77146214e9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 28 Jan 2025 22:32:54 -0500 Subject: [PATCH 0039/1184] adjust logo size --- src/pages/cipp/integrations/configure.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pages/cipp/integrations/configure.js b/src/pages/cipp/integrations/configure.js index 2861a241edad..62bc4990350b 100644 --- a/src/pages/cipp/integrations/configure.js +++ b/src/pages/cipp/integrations/configure.js @@ -101,7 +101,6 @@ const Page = () => { backButtonTitle="Integrations" headerText={extension.headerText} hideTitleText={true} - headerImage={logo} > {logo && ( @@ -109,7 +108,7 @@ const Page = () => { component="img" src={logo} alt={extension.name} - sx={{ width: "50%", mx: "auto" }} + sx={{ maxWidth: "50%", mx: "auto", maxHeight: "125px" }} /> )} @@ -187,6 +186,7 @@ const Page = () => { {extension?.mappingRequired && } {extension?.fieldMapping && } + {extension?.id === "cippapi" && } @@ -202,6 +202,11 @@ const Page = () => { )} + {extension?.id === "cippapi" && ( + + API Client component to go here + + )} )} From f75f84fc175b14202075523b81e511f3828fe508 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 13:36:09 +0100 Subject: [PATCH 0040/1184] fix: added condition to name location actions --- .../tenant/conditional/list-named-locations/index.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/tenant/conditional/list-named-locations/index.js b/src/pages/tenant/conditional/list-named-locations/index.js index 877d38a6411b..99e704323535 100644 --- a/src/pages/tenant/conditional/list-named-locations/index.js +++ b/src/pages/tenant/conditional/list-named-locations/index.js @@ -17,6 +17,7 @@ const Page = () => { }, fields: [{ type: "textField", name: "input", label: "Country Code" }], confirmText: "Enter a two-letter country code, e.g., US.", + condition: (row) => row["@odata.type"] == "#microsoft.graph.countryNamedLocation", }, { label: "Remove location from named location", @@ -28,6 +29,7 @@ const Page = () => { }, fields: [{ type: "textField", name: "input", label: "Country Code" }], confirmText: "Enter a two-letter country code, e.g., US.", + condition: (row) => row["@odata.type"] == "#microsoft.graph.countryNamedLocation", }, { label: "Add IP to named location", @@ -39,6 +41,7 @@ const Page = () => { }, fields: [{ type: "textField", name: "input", label: "IP" }], confirmText: "Enter an IP in CIDR format, e.g., 1.1.1.1/32.", + condition: (row) => row["@odata.type"] == "#microsoft.graph.ipNamedLocation", }, { label: "Remove IP from named location", @@ -49,13 +52,13 @@ const Page = () => { change: "removeIp", }, fields: [{ type: "textField", name: "input", label: "IP" }], - confirmText: "Enter an IP in CIDR format, e.g., 1.1.1.1/32.", + condition: (row) => row["@odata.type"] == "#microsoft.graph.ipNamedLocation", }, ]; const offCanvas = { - extendedInfoFields: ["displayName", "type", "rangeOrLocation"], + extendedInfoFields: ["displayName", "rangeOrLocation"], actions: actions, }; @@ -75,7 +78,7 @@ const Page = () => { simpleColumns={[ "displayName", "includeUnknownCountriesAndRegions", - "type", + "isTrusted", "rangeOrLocation", "modifiedDateTime", ]} From c3986009e8ca4b4c6268766bfa9bd108c05c2d9f Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 14:13:35 +0100 Subject: [PATCH 0041/1184] fix: added conditional action to Quarantine Management --- src/pages/email/administration/quarantine/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pages/email/administration/quarantine/index.js b/src/pages/email/administration/quarantine/index.js index e784d8888a0e..7415aa9dc5d0 100644 --- a/src/pages/email/administration/quarantine/index.js +++ b/src/pages/email/administration/quarantine/index.js @@ -101,6 +101,7 @@ const Page = () => { }, confirmText: "Are you sure you want to release this message?", icon: , + condition: (row) => row.ReleaseStatus !== "RELEASED", }, { label: "Deny", @@ -112,6 +113,7 @@ const Page = () => { }, confirmText: "Are you sure you want to deny this message?", icon: , + condition: (row) => row.ReleaseStatus !== "DENIED", }, { label: "Release & Allow Sender", @@ -125,6 +127,7 @@ const Page = () => { confirmText: "Are you sure you want to release this email and add the sender to the whitelist?", icon: , + condition: (row) => row.ReleaseStatus !== "RELEASED", }, ]; From f6029e362c72bd7d39d28bba3b2b382a6fb9e5f8 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 14:15:23 +0100 Subject: [PATCH 0042/1184] fix: added trashbin to Remove --- .../email/administration/tenant-allow-block-lists/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/email/administration/tenant-allow-block-lists/index.js b/src/pages/email/administration/tenant-allow-block-lists/index.js index 97925a29f708..508d5c67110e 100644 --- a/src/pages/email/administration/tenant-allow-block-lists/index.js +++ b/src/pages/email/administration/tenant-allow-block-lists/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; +import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; const Page = () => { const pageTitle = "Tenant Allow/Block Lists"; @@ -18,6 +19,7 @@ const Page = () => { }, confirmText: "Are you sure you want to delete?", color: "danger", + icon: , }, ]; From 3ed5d8019519c03fb7b24a11b091293e6df22042 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 14:32:36 +0100 Subject: [PATCH 0043/1184] fix: fixed Contacts Page --- src/pages/email/administration/contacts/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index d32c9f8a2a6b..89a6a65d74c8 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -3,6 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Edit } from "@mui/icons-material"; import { Button } from "@mui/material"; import Link from "next/link"; +import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; const Page = () => { const pageTitle = "Contacts"; @@ -13,19 +14,20 @@ const Page = () => { type: "POST", url: "/api/RemoveContact", data: { - TenantFilter: "Tenant", GUID: "id", }, confirmText: "Are you sure you want to delete this contact?", color: "danger", + icon: , }, + /* TODO: Implement edit contact { label: "Edit Contact", link: "/email/administration/edit-contact/[id]", multiPost: false, icon: , color: "warning", - }, + },*/ ]; const simpleColumns = ["displayName", "mail", "companyName", "onPremisesSyncEnabled"]; From 21ba3325d6858cad7911f23d104020e418e7cbe2 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 14:50:30 +0100 Subject: [PATCH 0044/1184] fix: added condition to Global Address list --- src/pages/email/reports/global-address-list/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/email/reports/global-address-list/index.js b/src/pages/email/reports/global-address-list/index.js index 5b0be1040072..6e78b2dacc26 100644 --- a/src/pages/email/reports/global-address-list/index.js +++ b/src/pages/email/reports/global-address-list/index.js @@ -12,6 +12,7 @@ const Page = () => { ID: "PrimarySmtpAddress", }, confirmText: "Are you sure you want to show this mailbox in the Global Address List?", + condition: (row) => row.HiddenFromAddressListsEnabled == true, }, { label: "Hide from Global Address List", @@ -22,6 +23,7 @@ const Page = () => { ID: "PrimarySmtpAddress", }, confirmText: "Are you sure you want to hide this mailbox from the Global Address List?", + condition: (row) => row.HiddenFromAddressListsEnabled == false, }, ]; From 360e2757c47c3b247bc128471b4122e6d5b4c008 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 14:56:18 +0100 Subject: [PATCH 0045/1184] fix: added edit icon --- src/pages/teams-share/teams/list-team/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/teams-share/teams/list-team/index.js b/src/pages/teams-share/teams/list-team/index.js index db874b1091da..b1a41a9adbb6 100644 --- a/src/pages/teams-share/teams/list-team/index.js +++ b/src/pages/teams-share/teams/list-team/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; +import { Edit } from "@mui/icons-material"; const Page = () => { const pageTitle = "Teams"; @@ -12,6 +13,7 @@ const Page = () => { link: "/identity/administration/groups/edit?groupId=[id]", multiPost: false, color: "warning", + icon: , }, ]; From 51fe974da2d5b32f4a2459d9797f30067081ae48 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 15:07:56 +0100 Subject: [PATCH 0046/1184] fix: added icon to global address list --- src/pages/email/reports/global-address-list/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pages/email/reports/global-address-list/index.js b/src/pages/email/reports/global-address-list/index.js index 6e78b2dacc26..314fb23f66f0 100644 --- a/src/pages/email/reports/global-address-list/index.js +++ b/src/pages/email/reports/global-address-list/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Visibility, VisibilityOff } from "@mui/icons-material"; const Page = () => { const actions = [ @@ -7,6 +8,7 @@ const Page = () => { label: "Unhide from Global Address List", type: "POST", url: "/api/ExecHideFromGAL", + icon: , data: { HideFromGAL: false, ID: "PrimarySmtpAddress", @@ -18,6 +20,7 @@ const Page = () => { label: "Hide from Global Address List", type: "POST", url: "/api/ExecHideFromGAL", + icon: , data: { HideFromGAL: true, ID: "PrimarySmtpAddress", From a99e4b75dd5914fdfdb69fb1634c08a068d560ed Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 30 Jan 2025 10:05:35 -0500 Subject: [PATCH 0047/1184] hide tenant in title for logbook --- src/pages/cipp/logs/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/cipp/logs/index.js b/src/pages/cipp/logs/index.js index f98368546531..fdee0356920d 100644 --- a/src/pages/cipp/logs/index.js +++ b/src/pages/cipp/logs/index.js @@ -95,6 +95,7 @@ const Page = () => { apiUrl={apiUrl} simpleColumns={simpleColumns} queryKey={`Listlogs-${dateFilter}-${filterEnabled}`} + tenantInTitle={false} apiData={{ DateFilter: dateFilter, // Pass date filter from state Filter: filterEnabled, // Pass filter toggle state From c0e01eb428a5dfe4827c1d5d1efcc79d481ee597 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 19:02:55 +0100 Subject: [PATCH 0048/1184] fix: irons for named location --- src/pages/tenant/conditional/list-named-locations/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pages/tenant/conditional/list-named-locations/index.js b/src/pages/tenant/conditional/list-named-locations/index.js index 99e704323535..2f72a57d5325 100644 --- a/src/pages/tenant/conditional/list-named-locations/index.js +++ b/src/pages/tenant/conditional/list-named-locations/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; +import { MinusIcon, PlusIcon } from "@heroicons/react/24/outline"; const Page = () => { const pageTitle = "Named Locations"; @@ -11,6 +12,7 @@ const Page = () => { label: "Add location to named location", type: "GET", url: "/api/ExecNamedLocation", + icon: , data: { namedLocationId: "id", change: "addLocation", @@ -23,6 +25,7 @@ const Page = () => { label: "Remove location from named location", type: "POST", url: "/api/ExecNamedLocation", + icon: , data: { namedLocationId: "id", change: "removeLocation", @@ -35,6 +38,7 @@ const Page = () => { label: "Add IP to named location", type: "POST", url: "/api/ExecNamedLocation", + icon: , data: { namedLocationId: "id", change: "addIp", @@ -47,6 +51,7 @@ const Page = () => { label: "Remove IP from named location", type: "POST", url: "/api/ExecNamedLocation", + icon: , data: { namedLocationId: "id", change: "removeIp", From 215c6a328991ec97697a908eccb1c956ec9845af Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 19:03:22 +0100 Subject: [PATCH 0049/1184] fix: icons and fix block signin on Shared Mailboxes --- .../email/reports/SharedMailboxEnabledAccount/index.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/pages/email/reports/SharedMailboxEnabledAccount/index.js b/src/pages/email/reports/SharedMailboxEnabledAccount/index.js index c72597ef6a25..186556bbe91e 100644 --- a/src/pages/email/reports/SharedMailboxEnabledAccount/index.js +++ b/src/pages/email/reports/SharedMailboxEnabledAccount/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Block } from "@mui/icons-material"; /* NOTE for Devs: @@ -18,10 +19,11 @@ const Page = () => { actions={[ { label: "Block Sign In", - type: "POST", + type: "GET", + icon: , url: "/api/ExecDisableUser", - data: { TenantFilter: "Tenant", ID: "id" }, - confirmText: "Are you sure you want to block this user from signing in?", + data: { ID: "id" }, + confirmText: "Are you sure you want to block the sign-in for this user?", }, ]} offCanvas={{ From 86ec1c9d29313d8645d5db9b444aa2ce45dd8fb7 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 19:07:17 +0100 Subject: [PATCH 0050/1184] fix: fix remove contact type --- src/pages/email/administration/contacts/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index 89a6a65d74c8..a6d7fa23c5fe 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -11,7 +11,7 @@ const Page = () => { const actions = [ { label: "Remove Contact", - type: "POST", + type: "GET", url: "/api/RemoveContact", data: { GUID: "id", From 6003bb18a69496c44066ace02fb02fb0f84101cb Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 19:18:17 +0100 Subject: [PATCH 0051/1184] fix: added icon to deleted items --- src/pages/identity/administration/deleted-items/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/identity/administration/deleted-items/index.js b/src/pages/identity/administration/deleted-items/index.js index ab568cfb92d9..43d9ddb9d817 100644 --- a/src/pages/identity/administration/deleted-items/index.js +++ b/src/pages/identity/administration/deleted-items/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import RestoreFromTrashIcon from '@mui/icons-material/RestoreFromTrash'; const Page = () => { const pageTitle = "Deleted Items"; @@ -8,8 +9,9 @@ const Page = () => { { label: "Restore Object", type: "GET", + icon: , url: "/api/ExecRestoreDeleted", - data: { TenantFilter: "Tenant", ID: "id" }, + data: { ID: "id" }, confirmText: "Are you sure you want to restore this user?", multiPost: false, }, From abd2d8c10e22e917bbb59af02280273455637325 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 20:20:42 +0100 Subject: [PATCH 0052/1184] fix: fix and add icons for email filter pages --- .../reports/antiphishing-filters/index.js | 18 ++- .../email/reports/malware-filters/index.js | 18 ++- .../reports/safeattachments-filters/index.js | 22 +-- .../email/reports/safelinks-filters/index.js | 141 ++++++++++-------- .../email/spamfilter/list-spamfilter/index.js | 20 ++- 5 files changed, 120 insertions(+), 99 deletions(-) diff --git a/src/pages/email/reports/antiphishing-filters/index.js b/src/pages/email/reports/antiphishing-filters/index.js index 96a1080d9498..0d3d3d26e736 100644 --- a/src/pages/email/reports/antiphishing-filters/index.js +++ b/src/pages/email/reports/antiphishing-filters/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Block, Check } from "@mui/icons-material"; const Page = () => { const pageTitle = "List of Anti-Phishing Filters"; @@ -8,25 +9,27 @@ const Page = () => { const actions = [ { label: "Enable Rule", - type: "POST", + type: "GET", + icon: , url: "/api/EditAntiPhishingFilter", data: { State: "Enable", - TenantFilter: "TenantFilter", // TenantFilter used in API path as per original file - RuleName: "id", + RuleName: "RuleName", }, confirmText: "Are you sure you want to enable this rule?", + condition: (row) => row.State === "Disabled", }, { label: "Disable Rule", - type: "POST", + type: "GET", + icon: , url: "/api/EditAntiPhishingFilter", data: { State: "Disable", - TenantFilter: "TenantFilter", - RuleName: "id", + RuleName: "RuleName", }, confirmText: "Are you sure you want to disable this rule?", + condition: (row) => row.State === "Enabled", }, // Uncomment the following block if Delete Rule is to be re-enabled in the future /* @@ -35,8 +38,7 @@ const Page = () => { type: "POST", url: "/api/RemoveAntiPhishingFilter", data: { - TenantFilter: "TenantFilter", - RuleName: "id", + RuleName: "RuleName", }, confirmText: "Are you sure you want to delete this rule?", }, diff --git a/src/pages/email/reports/malware-filters/index.js b/src/pages/email/reports/malware-filters/index.js index 4d5ffe472d98..5ede0778ed93 100644 --- a/src/pages/email/reports/malware-filters/index.js +++ b/src/pages/email/reports/malware-filters/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Block, Check } from "@mui/icons-material"; const Page = () => { return ( @@ -9,25 +10,27 @@ const Page = () => { actions={[ { label: "Enable Rule", - type: "POST", + type: "GET", + icon: , url: "/api/EditMalwareFilter", data: { State: "Enable", - TenantFilter: "tenant.defaultDomainName", - RuleName: "row.RuleName", + RuleName: "RuleName", }, confirmText: "Are you sure you want to enable this rule?", + condition: (row) => row.State === "Disabled", }, { label: "Disable Rule", - type: "POST", + type: "GET", + icon: , url: "/api/EditMalwareFilter", data: { State: "Disable", - TenantFilter: "tenant.defaultDomainName", - RuleName: "row.RuleName", + RuleName: "RuleName", }, confirmText: "Are you sure you want to disable this rule?", + condition: (row) => row.State === "Enabled", }, /* Uncomment and add additional actions if required by future specs { @@ -35,8 +38,7 @@ const Page = () => { type: "POST", url: "/api/RemoveMalwareFilter", data: { - TenantFilter: "tenant.defaultDomainName", - RuleName: "row.RuleName", + RuleName: "RuleName", }, confirmText: "Are you sure you want to delete this rule?", }, diff --git a/src/pages/email/reports/safeattachments-filters/index.js b/src/pages/email/reports/safeattachments-filters/index.js index b61ac47207bc..ae3d6930785e 100644 --- a/src/pages/email/reports/safeattachments-filters/index.js +++ b/src/pages/email/reports/safeattachments-filters/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Block, Check } from "@mui/icons-material"; const Page = () => { const pageTitle = "List of Safe Attachment Filters"; @@ -9,37 +10,38 @@ const Page = () => { const actions = [ { label: "Enable Rule", - type: "POST", + type: "GET", + icon: , url: "/api/EditSafeAttachmentsFilter", data: { - State: "Enable", - TenantFilter: "tenant.defaultDomainName", // TenantFilter uses default domain name in context - RuleName: "row.RuleName", + State: "!Enable", + RuleName: "RuleName", }, confirmText: "Are you sure you want to enable this rule?", color: "info", + condition: (row) => row.State === "Disabled" }, { label: "Disable Rule", - type: "POST", + type: "GET", + icon: , url: "/api/EditSafeAttachmentsFilter", data: { State: "Disable", - TenantFilter: "tenant.defaultDomainName", // TenantFilter uses default domain name in context - RuleName: "row.RuleName", + RuleName: "RuleName", }, confirmText: "Are you sure you want to disable this rule?", color: "info", + condition: (row) => row.State === "Enabled", }, // Commented out "Delete Rule" action from the original file as it was also commented in legacy code /* { label: "Delete Rule", - type: "POST", + type: "GET", url: "/api/RemoveSafeAttachmentsFilter", data: { - TenantFilter: "tenant.defaultDomainName", - RuleName: "row.RuleName", + RuleName: "RuleName", }, confirmText: "Are you sure you want to delete this rule?", color: "danger", diff --git a/src/pages/email/reports/safelinks-filters/index.js b/src/pages/email/reports/safelinks-filters/index.js index 7d2bf1ad5a37..bee1985d9745 100644 --- a/src/pages/email/reports/safelinks-filters/index.js +++ b/src/pages/email/reports/safelinks-filters/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Block, Check } from "@mui/icons-material"; /* Note: Tenant information is passed directly in apiData instead of using Redux (e.g., useSelector) */ /* Original file included a "Delete Rule" action. If needed, add back by following other action formats. */ @@ -7,74 +8,82 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" /* Removed custom formatters and FontAwesome imports, as table formatting is handled by CippTablePage */ const Page = () => { + const pageTitle = "List of Safe Link Filters"; + const apiUrl = "/api/ListSafeLinksFilters"; + + const actions = [ + { + label: "Enable Rule", + type: "GET", + icon: , + url: "/api/EditSafeLinksFilter", + data: { + State: "Enable", + RuleName: "RuleName", + }, + confirmText: "Are you sure you want to enable this rule?", + color: "info", + condition: (row) => row.State === "Disabled", + }, + { + label: "Disable Rule", + type: "GET", + icon: , + url: "/api/EditSafeLinksFilter", + data: { + State: "Disable", + RuleName: "RuleName", + }, + confirmText: "Are you sure you want to disable this rule?", + color: "info", + condition: (row) => row.State === "Enabled", + }, + /* TODO: implement Delete Rule action + { + label: "Delete Rule", + type: "GET", + url: "/api/EditSafeLinksFilter", + data: { + RuleName: "RuleName", + }, + confirmText: "Are you sure you want to delete this rule?", + color: "danger", + }, + */ + ]; + + const offCanvas = { + extendedInfoFields: ["RuleName", "Name", "State", "WhenCreated", "WhenChanged"], + actions: actions, // Attaching actions to offCanvas per original design + }; + + const simpleColumns = [ + "RuleName", + "Name", + "State", + "Priority", + "RecipientDomainIs", + "EnableSafeLinksForEmail", + "EnableSafeLinksForTeams", + "EnableSafeLinksForOffice", + "TrackClicks", + "ScanUrls", + "EnableForInternalSenders", + "DeliverMessageAfterScan", + "AllowClickThrough", + "DisableUrlRewrite", + "EnableOrganizationBranding", + "WhenCreated", + "WhenChanged", + ]; + return ( ); }; diff --git a/src/pages/email/spamfilter/list-spamfilter/index.js b/src/pages/email/spamfilter/list-spamfilter/index.js index 062f9e71dc87..e3c017d1cdbd 100644 --- a/src/pages/email/spamfilter/list-spamfilter/index.js +++ b/src/pages/email/spamfilter/list-spamfilter/index.js @@ -1,15 +1,19 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { Book, Block, Check } from "@mui/icons-material"; +import { TrashIcon } from "@heroicons/react/24/outline"; import Link from "next/link"; const Page = () => { const pageTitle = "Spam Filters"; + const apiUrl = "/api/ListSpamfilter" const actions = [ { label: "Create template based on rule", type: "POST", + icon: , url: "/api/AddSpamfilterTemplate", dataFunction: (data) => { return { ...data }; @@ -18,32 +22,34 @@ const Page = () => { }, { label: "Enable Rule", - type: "POST", + type: "GET", + icon: , url: "/api/EditSpamfilter", data: { State: "enable", - TenantFilter: "Tenant", name: "Name", }, confirmText: "Are you sure you want to enable this rule?", + condition: (row) => row.ruleState === "Disabled", }, { label: "Disable Rule", - type: "POST", + type: "GET", + icon: , url: "/api/EditSpamfilter", data: { State: "disable", - TenantFilter: "Tenant", name: "Name", }, confirmText: "Are you sure you want to disable this rule?", + condition: (row) => row.ruleState === "Enabled", }, { label: "Delete Rule", - type: "POST", + type: "GET", + icon: , url: "/api/RemoveSpamFilter", data: { - TenantFilter: "Tenant", name: "Name", }, confirmText: "Are you sure you want to delete this rule?", @@ -88,7 +94,7 @@ const Page = () => { return ( Date: Thu, 30 Jan 2025 16:28:54 -0500 Subject: [PATCH 0053/1184] Update CippApiDialog.jsx --- src/components/CippComponents/CippApiDialog.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 834cb3e958dc..2e37e00f3c4f 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -79,8 +79,7 @@ export const CippApiDialog = (props) => { } else { Object.keys(dataObject).forEach((key) => { const value = dataObject[key]; - - if (typeof value === "string" && value.startsWith("!")) { + if (value.startsWith("!")) { newData[key] = value.slice(1); } else if (typeof value === "string") { if (row[value] !== undefined) { From 7e8bdc61e430888ab0b6e3c408c35f25916fc2ee Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 30 Jan 2025 22:36:51 +0100 Subject: [PATCH 0054/1184] fix: no idea why lower case works as expected --- src/pages/email/reports/safeattachments-filters/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/email/reports/safeattachments-filters/index.js b/src/pages/email/reports/safeattachments-filters/index.js index ae3d6930785e..11e15a1bdea7 100644 --- a/src/pages/email/reports/safeattachments-filters/index.js +++ b/src/pages/email/reports/safeattachments-filters/index.js @@ -14,7 +14,7 @@ const Page = () => { icon: , url: "/api/EditSafeAttachmentsFilter", data: { - State: "!Enable", + State: "!enable", RuleName: "RuleName", }, confirmText: "Are you sure you want to enable this rule?", From f15e30a196669b192947fa870d685f7611adc2f6 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 30 Jan 2025 16:42:23 -0500 Subject: [PATCH 0055/1184] Update CippApiDialog.jsx --- src/components/CippComponents/CippApiDialog.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 2e37e00f3c4f..bd6348868c8b 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -79,7 +79,7 @@ export const CippApiDialog = (props) => { } else { Object.keys(dataObject).forEach((key) => { const value = dataObject[key]; - if (value.startsWith("!")) { + if (typeof value === "string" && value.startsWith("!")) { newData[key] = value.slice(1); } else if (typeof value === "string") { if (row[value] !== undefined) { From 4a812c0d9ecbdffe502ae1df96b92b12d5861999 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 30 Jan 2025 17:13:43 -0500 Subject: [PATCH 0056/1184] add missing mailbox actions --- .../email/administration/mailboxes/index.js | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/src/pages/email/administration/mailboxes/index.js b/src/pages/email/administration/mailboxes/index.js index 81726a1abd14..eea3d264e425 100644 --- a/src/pages/email/administration/mailboxes/index.js +++ b/src/pages/email/administration/mailboxes/index.js @@ -131,6 +131,93 @@ const Page = () => { confirmText: "Are you sure you want to delete this mailbox?", multiPost: false, }, + { + label: "Copy Sent Items to Shared Mailbox", + type: "GET", + url: "/api/ExecCopyForSent", + data: { ID: "UPN" }, + confirmText: "Are you sure you want to enable Copy Sent Items to Shared Mailbox?", + icon: , + condition: (row) => + row.MessageCopyForSentAsEnabled === false && row.recipientTypeDetails === "SharedMailbox", + }, + { + label: "Disable Copy Sent Items to Shared Mailbox", + type: "GET", + url: "/api/ExecCopyForSent", + data: { ID: "UPN", MessageCopyForSentAsEnabled: false }, + confirmText: "Are you sure you want to disable Copy Sent Items to Shared Mailbox?", + icon: , + condition: (row) => + row.MessageCopyForSentAsEnabled === true && row.recipientTypeDetails === "SharedMailbox", + }, + { + label: "Set mailbox locale", + type: "POST", + url: "/api/ExecSetMailboxLocale", + data: { user: "UPN", ProhibitSendQuota: true }, + confirmText: "Enter a locale, e.g. en-US", + icon: , + fields: [ + { + label: "Locale", + name: "locale", + type: "textField", + placeholder: "e.g. en-US", + }, + ], + }, + { + label: "Set Send Quota", + type: "POST", + url: "/api/ExecSetMailboxQuota", + data: { user: "UPN", ProhibitSendQuota: true }, + confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", + icon: , + fields: [ + { + label: "Quota", + name: "quota", + type: "textField", + placeholder: "e.g. 1000MB, 10GB,1TB", + }, + ], + }, + { + label: "Set Send and Receive Quota", + type: "POST", + url: "/api/ExecSetMailboxQuota", + data: { + user: "UPN", + ProhibitSendReceiveQuota: true, + }, + confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", + icon: , + fields: [ + { + label: "Quota", + name: "quota", + type: "textField", + placeholder: "e.g. 1000MB, 10GB,1TB", + }, + ], + }, + { + label: "Set Quota Warning Level", + type: "POST", + url: "/api/ExecSetMailboxQuota", + data: { user: "UPN", IssueWarningQuota: true }, + confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", + icon: , + fields: [ + { + label: "Quota", + name: "quota", + type: "textField", + placeholder: "e.g. 1000MB, 10GB,1TB", + }, + ], + }, ]; // Define off-canvas details From eba21f51540b5567957206000588a974e99bb467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 29 Jan 2025 20:44:15 +0100 Subject: [PATCH 0057/1184] Add back sync autopilot devices button Add icons More icons Add SharePoint Admin portal and update icons in bulk actions menu update icon property there must be a less ugly way to do this, help Add icons to action buttons across various pages --- src/components/bulk-actions-menu.js | 29 +++++++++++ src/data/portals.json | 34 ++++++------- src/pages/cipp/settings/tenants.js | 7 ++- .../email/administration/contacts/index.js | 8 ++- .../email/administration/mailboxes/index.js | 7 ++- .../tenant-allow-block-lists/index.js | 9 +++- .../resources/management/list-rooms/index.js | 7 ++- .../resources/management/room-lists/index.js | 4 +- .../spamfilter/list-connectionfilter/index.js | 8 ++- .../email/spamfilter/list-spamfilter/index.js | 7 ++- .../email/tools/mailbox-restores/index.js | 10 +++- .../list-connector-templates/index.js | 14 ++++++ .../email/transport/list-connectors/index.js | 12 ++++- src/pages/email/transport/list-rules/index.js | 8 ++- .../email/transport/list-templates/index.js | 7 ++- src/pages/endpoint/MEM/devices/index.js | 20 ++++++++ src/pages/endpoint/applications/list/index.js | 4 +- .../endpoint/applications/queue/index.js | 7 ++- .../endpoint/autopilot/list-devices/index.js | 50 +++++++++++++------ .../endpoint/autopilot/list-profiles/index.js | 7 ++- .../autopilot/list-status-pages/index.js | 7 ++- .../identity/administration/devices/index.js | 8 ++- .../administration/group-templates/index.js | 6 ++- .../identity/administration/groups/index.js | 12 ++--- .../administration/jit-admin/index.js | 3 +- .../administration/risky-users/index.js | 5 +- .../identity/administration/users/index.js | 11 ++-- src/pages/index.js | 1 + .../security/incidents/list-alerts/index.js | 3 ++ .../incidents/list-incidents/index.js | 5 ++ src/pages/teams-share/sharepoint/index.js | 20 +++++++- .../teams-share/teams/business-voice/index.js | 4 ++ .../teams-share/teams/list-team/index.js | 3 +- .../alert-configuration/index.js | 8 ++- .../authentication-methods/index.js | 3 ++ .../tenant/backup/backup-wizard/index.js | 9 +++- .../conditional/deploy-vacation/index.js | 3 +- .../conditional/list-named-locations/index.js | 3 +- .../tenant/conditional/list-policies/index.js | 7 ++- .../tenant/conditional/list-template/index.js | 2 + .../tenant/gdap-management/invites/index.js | 3 +- .../gdap-management/onboarding/index.js | 8 ++- .../gdap-management/role-templates/index.js | 9 ++-- .../tenant/gdap-management/roles/index.js | 12 +++-- .../reports/list-csp-licenses/index.jsx | 4 +- .../tenant/standards/bpa-report/index.js | 4 +- .../standards/domains-analyser/index.js | 12 +++-- .../tenant/standards/list-standards/index.js | 6 +-- 48 files changed, 337 insertions(+), 103 deletions(-) diff --git a/src/components/bulk-actions-menu.js b/src/components/bulk-actions-menu.js index b4ceba4c48bd..fd15898e28a3 100644 --- a/src/components/bulk-actions-menu.js +++ b/src/components/bulk-actions-menu.js @@ -2,6 +2,33 @@ import PropTypes from "prop-types"; import ChevronDownIcon from "@heroicons/react/24/outline/ChevronDownIcon"; import { Button, Link, ListItemText, Menu, MenuItem, SvgIcon } from "@mui/material"; import { usePopover } from "../hooks/use-popover"; +import { FilePresent, Laptop, Mail, Share, Shield, ShieldMoon } from "@mui/icons-material"; +import { GlobeAltIcon, UsersIcon, ServerIcon } from "@heroicons/react/24/outline"; + +function getIconByName(iconName) { + switch (iconName) { + case "GlobeAltIcon": + return ; + case "Mail": + return ; + case "UsersIcon": + return ; + case "FilePresent": + return ; + case "ServerIcon": + return ; + case "Laptop": + return ; + case "Share": + return ; + case "Shield": + return ; + case "ShieldMoon": + return ; + default: + return null; + } +} export const BulkActionsMenu = (props) => { const { buttonName, sx, row, actions = [], ...other } = props; @@ -55,12 +82,14 @@ export const BulkActionsMenu = (props) => { target="_blank" rel="noreferrer" > + {getIconByName(action.icon)} ); } else { return ( + {getIconByName(action.icon)} ); diff --git a/src/data/portals.json b/src/data/portals.json index 130c9f2d11e4..d5fdbd5ebeb0 100644 --- a/src/data/portals.json +++ b/src/data/portals.json @@ -6,7 +6,7 @@ "variable": "customerId", "target": "_blank", "external": true, - "icon": "cog" + "icon": "GlobeAltIcon" }, { "label": "Exchange Portal", @@ -15,7 +15,7 @@ "variable": "defaultDomainName", "target": "_blank", "external": true, - "icon": "mail-bulk" + "icon": "Mail" }, { "label": "Entra Portal", @@ -24,7 +24,7 @@ "variable": "defaultDomainName", "target": "_blank", "external": true, - "icon": "users" + "icon": "UsersIcon" }, { "label": "Teams Portal", @@ -33,7 +33,7 @@ "variable": "defaultDomainName", "target": "_blank", "external": true, - "icon": "comments" + "icon": "FilePresent" }, { "label": "Azure Portal", @@ -42,7 +42,7 @@ "variable": "defaultDomainName", "target": "_blank", "external": true, - "icon": "server" + "icon": "ServerIcon" }, { "label": "Intune Portal", @@ -51,7 +51,16 @@ "variable": "defaultDomainName", "target": "_blank", "external": true, - "icon": "laptop-code" + "icon": "Laptop" + }, + { + "label": "SharePoint Admin", + "name": "SharePoint_Admin", + "url": "https://admin.microsoft.com/Partner/beginclientsession.aspx?CTID=customerId&CSDEST=SharePoint", + "variable": "customerId", + "target": "_blank", + "external": true, + "icon": "Share" }, { "label": "Security Portal", @@ -60,7 +69,7 @@ "variable": "customerId", "target": "_blank", "external": true, - "icon": "shield-alt" + "icon": "Shield" }, { "label": "Compliance Portal", @@ -69,15 +78,6 @@ "variable": "customerId", "target": "_blank", "external": true, - "icon": "shield-alt" - }, - { - "label": "SharePoint Admin", - "name": "SharePoint_Admin", - "url": "https://admin.microsoft.com/Partner/beginclientsession.aspx?CTID=customerId&CSDEST=SharePoint", - "variable": "customerId", - "target": "_blank", - "external": true, - "icon": "book" + "icon": "ShieldMoon" } ] diff --git a/src/pages/cipp/settings/tenants.js b/src/pages/cipp/settings/tenants.js index 3a09b8ff8aa4..529e7c413a18 100644 --- a/src/pages/cipp/settings/tenants.js +++ b/src/pages/cipp/settings/tenants.js @@ -5,7 +5,7 @@ import tabOptions from "./tabOptions"; import { Button, SvgIcon } from "@mui/material"; import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog"; import { useDialog } from "/src/hooks/use-dialog"; -import { Sync } from "@mui/icons-material"; +import { Sync, Block, PlayArrow, RestartAlt, Delete, Add } from "@mui/icons-material"; const Page = () => { const pageTitle = "Tenants - Backend"; @@ -17,6 +17,7 @@ const Page = () => { label: "Exclude Tenants", type: "POST", url: `/api/ExecExcludeTenant?AddExclusion=true`, + icon: , data: { value: "customerId" }, confirmText: "Are you sure you want to exclude these tenants?", multiPost: false, @@ -25,6 +26,7 @@ const Page = () => { label: "Include Tenants", type: "POST", url: `/api/ExecExcludeTenant?RemoveExclusion=true`, + icon: , data: { value: "customerId" }, confirmText: "Are you sure you want to include these tenants?", multiPost: false, @@ -33,6 +35,7 @@ const Page = () => { label: "Refresh CPV Permissions", type: "POST", url: `/api/ExecCPVPermissions`, + icon: , data: { TenantFilter: "customerId" }, confirmText: "Are you sure you want to refresh the CPV permissions for these tenants?", multiPost: false, @@ -41,6 +44,7 @@ const Page = () => { label: "Reset CPV Permissions", type: "POST", url: `/api/ExecCPVPermissions?&ResetSP=true`, + icon: , data: { TenantFilter: "customerId" }, confirmText: "Are you sure you want to reset the CPV permissions for these tenants? (This will delete the Service Principal and re-add it.)", @@ -50,6 +54,7 @@ const Page = () => { label: "Remove Tenant", type: "POST", url: `/api/ExecRemoveTenant`, + icon: , data: { TenantID: "customerId" }, confirmText: "Are you sure you want to remove this tenant?", multiPost: false, diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index a6d7fa23c5fe..ac22d6596579 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -1,6 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import { Edit } from "@mui/icons-material"; +import { Edit, PersonAdd } from "@mui/icons-material"; import { Button } from "@mui/material"; import Link from "next/link"; import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; @@ -40,7 +40,11 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/email/administration/mailboxes/index.js b/src/pages/email/administration/mailboxes/index.js index eea3d264e425..90bfc401266e 100644 --- a/src/pages/email/administration/mailboxes/index.js +++ b/src/pages/email/administration/mailboxes/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import Link from "next/link"; import { Button } from "@mui/material"; +import { Add } from "@mui/icons-material"; import { Archive, @@ -269,7 +270,11 @@ const Page = () => { filters={filterList} cardButton={ <> - diff --git a/src/pages/email/administration/tenant-allow-block-lists/index.js b/src/pages/email/administration/tenant-allow-block-lists/index.js index 508d5c67110e..f88d18848767 100644 --- a/src/pages/email/administration/tenant-allow-block-lists/index.js +++ b/src/pages/email/administration/tenant-allow-block-lists/index.js @@ -2,7 +2,8 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; -import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; +import TrashIcon from "@heroicons/react/24/outline/TrashIcon"; +import { PlaylistAdd } from "@mui/icons-material"; const Page = () => { const pageTitle = "Tenant Allow/Block Lists"; @@ -50,7 +51,11 @@ const Page = () => { }} cardButton={ <> - diff --git a/src/pages/email/resources/management/list-rooms/index.js b/src/pages/email/resources/management/list-rooms/index.js index e81e9313ef7a..a3fe7dab1547 100644 --- a/src/pages/email/resources/management/list-rooms/index.js +++ b/src/pages/email/resources/management/list-rooms/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; +import { AddHomeWork } from "@mui/icons-material"; const Page = () => { const pageTitle = "Rooms"; @@ -12,7 +13,11 @@ const Page = () => { apiUrl="/api/ListRooms" simpleColumns={["displayName", "building", "floorNumber", "capacity", "bookingType"]} cardButton={ - } diff --git a/src/pages/email/resources/management/room-lists/index.js b/src/pages/email/resources/management/room-lists/index.js index 11abfc1683cb..6ae175a9ed1f 100644 --- a/src/pages/email/resources/management/room-lists/index.js +++ b/src/pages/email/resources/management/room-lists/index.js @@ -1,15 +1,17 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Visibility } from "@mui/icons-material"; const Page = () => { const pageTitle = "Room Lists"; - const apiUrl = "/api/ListRoomLists" + const apiUrl = "/api/ListRoomLists"; const actions = [ { label: "View included Rooms", link: `/email/resources/management/room-lists/list/view?roomAddress=[emailAddress]`, color: "info", + icon: , }, ]; diff --git a/src/pages/email/spamfilter/list-connectionfilter/index.js b/src/pages/email/spamfilter/list-connectionfilter/index.js index 97e8cd8f963f..02481161dc18 100644 --- a/src/pages/email/spamfilter/list-connectionfilter/index.js +++ b/src/pages/email/spamfilter/list-connectionfilter/index.js @@ -1,7 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; -import { Book } from "@mui/icons-material"; +import { Book, AddModerator } from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -45,7 +45,11 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/email/spamfilter/list-spamfilter/index.js b/src/pages/email/spamfilter/list-spamfilter/index.js index e3c017d1cdbd..55985f5d7316 100644 --- a/src/pages/email/spamfilter/list-spamfilter/index.js +++ b/src/pages/email/spamfilter/list-spamfilter/index.js @@ -4,6 +4,7 @@ import { Button } from "@mui/material"; import { Book, Block, Check } from "@mui/icons-material"; import { TrashIcon } from "@heroicons/react/24/outline"; import Link from "next/link"; +import { RocketLaunch } from "@mui/icons-material"; const Page = () => { const pageTitle = "Spam Filters"; @@ -100,7 +101,11 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/email/tools/mailbox-restores/index.js b/src/pages/email/tools/mailbox-restores/index.js index ffa463800bd5..cedc2e73f0a9 100644 --- a/src/pages/email/tools/mailbox-restores/index.js +++ b/src/pages/email/tools/mailbox-restores/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; +import { RestoreFromTrash, PlayArrow, Pause, Delete } from "@mui/icons-material"; import MailboxRestoreDetails from "../../../../components/CippComponents/MailboxRestoreDetails"; const Page = () => { @@ -12,6 +13,7 @@ const Page = () => { label: "Resume Restore Request", type: "POST", url: "/api/ExecMailboxRestore", + icon: , data: { TenantFilter: "Tenant", Identity: "Identity", @@ -24,6 +26,7 @@ const Page = () => { label: "Suspend Restore Request", type: "POST", url: "/api/ExecMailboxRestore", + icon: , data: { TenantFilter: "Tenant", Identity: "Identity", @@ -36,6 +39,7 @@ const Page = () => { label: "Remove Restore Request", type: "POST", url: "/api/ExecMailboxRestore", + icon: , data: { TenantFilter: "Tenant", Identity: "Identity", @@ -63,7 +67,11 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/email/transport/list-connector-templates/index.js b/src/pages/email/transport/list-connector-templates/index.js index 671c148f21e2..188e87254ab6 100644 --- a/src/pages/email/transport/list-connector-templates/index.js +++ b/src/pages/email/transport/list-connector-templates/index.js @@ -1,4 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { Button } from "@mui/material"; +import Link from "next/link"; +import { RocketLaunch } from "@mui/icons-material"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { EyeIcon, TrashIcon } from "@heroicons/react/24/outline"; import ConnectorTemplateDetails from "../../../../components/CippComponents/ConnectorTemplateDetails"; @@ -39,6 +42,17 @@ const Page = () => { label: "Add Template", href: "/email/connectors/add-connector-templates", }} + cardButton={ + <> + + + } /> ); }; diff --git a/src/pages/email/transport/list-connectors/index.js b/src/pages/email/transport/list-connectors/index.js index c61b44ad6fa2..477b191fdff5 100644 --- a/src/pages/email/transport/list-connectors/index.js +++ b/src/pages/email/transport/list-connectors/index.js @@ -1,6 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { RocketLaunch, Book, Check, Block, Delete } from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -11,6 +12,7 @@ const Page = () => { label: "Create template based on connector", type: "POST", url: "/api/AddExConnectorTemplate", + icon: , postEntireRow: true, confirmText: "Are you sure you want to create a template based on this connector?", color: "info", @@ -19,6 +21,7 @@ const Page = () => { label: "Enable Connector", type: "POST", url: "/api/EditExConnector", + icon: , data: { State: "Enable", GUID: "Guid", @@ -31,6 +34,7 @@ const Page = () => { label: "Disable Connector", type: "POST", url: "/api/EditExConnector", + icon: , data: { State: "Disable", GUID: "Guid", @@ -43,6 +47,7 @@ const Page = () => { label: "Delete Connector", type: "POST", url: "/api/RemoveExConnector", + icon: , data: { GUID: "Guid", Type: "cippconnectortype", @@ -80,10 +85,15 @@ const Page = () => { titleButton={{ label: "Deploy Connector", href: "/email/connectors/deploy-connector", + startIcon: , // Added icon }} cardButton={ <> - diff --git a/src/pages/email/transport/list-rules/index.js b/src/pages/email/transport/list-rules/index.js index 7312f49794fc..0c6128024c6e 100644 --- a/src/pages/email/transport/list-rules/index.js +++ b/src/pages/email/transport/list-rules/index.js @@ -1,7 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; -import { Book, DoDisturb, Done } from "@mui/icons-material"; +import { Book, DoDisturb, Done, RocketLaunch } from "@mui/icons-material"; import { TrashIcon } from "@heroicons/react/24/outline"; import Link from "next/link"; @@ -88,7 +88,11 @@ const Page = () => { ]} cardButton={ <> - diff --git a/src/pages/email/transport/list-templates/index.js b/src/pages/email/transport/list-templates/index.js index 1bfff7428f93..fb40f8da0e9b 100644 --- a/src/pages/email/transport/list-templates/index.js +++ b/src/pages/email/transport/list-templates/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { EyeIcon, TrashIcon } from "@heroicons/react/24/outline"; import { Button } from "@mui/material"; +import { RocketLaunch } from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -35,7 +36,11 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/endpoint/MEM/devices/index.js b/src/pages/endpoint/MEM/devices/index.js index 4ce9ebcbc46a..0965bb50462f 100644 --- a/src/pages/endpoint/MEM/devices/index.js +++ b/src/pages/endpoint/MEM/devices/index.js @@ -2,6 +2,17 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { useSettings } from "/src/hooks/use-settings"; import { EyeIcon } from "@heroicons/react/24/outline"; +import { + Sync, + RestartAlt, + LocationOn, + Password, + PasswordOutlined, + Key, + Security, + FindInPage, + Shield, +} from "@mui/icons-material"; const Page = () => { const pageTitle = "Devices"; @@ -11,6 +22,7 @@ const Page = () => { { label: "Sync Device", type: "POST", + icon: , url: "/api/ExecDeviceAction", data: { GUID: "id", @@ -21,6 +33,7 @@ const Page = () => { { label: "Reboot Device", type: "POST", + icon: , url: "/api/ExecDeviceAction", data: { GUID: "id", @@ -31,6 +44,7 @@ const Page = () => { { label: "Locate Device", type: "POST", + icon: , url: "/api/ExecDeviceAction", data: { GUID: "id", @@ -41,6 +55,7 @@ const Page = () => { { label: "Retrieve LAPs password", type: "POST", + icon: , url: "/api/ExecGetLocalAdminPassword", data: { GUID: "azureADDeviceId", @@ -50,6 +65,7 @@ const Page = () => { { label: "Rotate Local Admin Password", type: "POST", + icon: , url: "/api/ExecDeviceAction", data: { GUID: "id", @@ -60,6 +76,7 @@ const Page = () => { { label: "Retrieve Bitlocker Keys", type: "POST", + icon: , url: "/api/ExecGetRecoveryKey", data: { GUID: "azureADDeviceId", @@ -69,6 +86,7 @@ const Page = () => { { label: "Windows Defender Full Scan", type: "POST", + icon: , url: "/api/ExecDeviceAction", data: { GUID: "id", @@ -80,6 +98,7 @@ const Page = () => { { label: "Windows Defender Quick Scan", type: "POST", + icon: , url: "/api/ExecDeviceAction", data: { GUID: "id", @@ -91,6 +110,7 @@ const Page = () => { { label: "Update Windows Defender", type: "POST", + icon: , url: "/api/ExecDeviceAction", data: { GUID: "id", diff --git a/src/pages/endpoint/applications/list/index.js b/src/pages/endpoint/applications/list/index.js index 5a3d8eef0cfb..9530d9712981 100644 --- a/src/pages/endpoint/applications/list/index.js +++ b/src/pages/endpoint/applications/list/index.js @@ -1,7 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { GlobeAltIcon, TrashIcon, UserIcon } from "@heroicons/react/24/outline"; -import { LaptopMac } from "@mui/icons-material"; +import { Add, LaptopMac } from "@mui/icons-material"; import { Button } from "@mui/material"; import Link from "next/link"; @@ -95,7 +95,7 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/endpoint/applications/queue/index.js b/src/pages/endpoint/applications/queue/index.js index 0f30341cefcb..3e683b11e8b0 100644 --- a/src/pages/endpoint/applications/queue/index.js +++ b/src/pages/endpoint/applications/queue/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { CheckmarkIcon } from "react-hot-toast"; import { Button } from "@mui/material"; +import { PlayArrow, Add } from "@mui/icons-material"; import Link from "next/link"; import { ApiPostCall } from "../../../../api/ApiCall"; import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; @@ -40,9 +41,11 @@ const Page = () => { tenantInTitle={false} cardButton={ <> - + - diff --git a/src/pages/endpoint/autopilot/list-devices/index.js b/src/pages/endpoint/autopilot/list-devices/index.js index d924ec33b3d5..038e5b9d8d2a 100644 --- a/src/pages/endpoint/autopilot/list-devices/index.js +++ b/src/pages/endpoint/autopilot/list-devices/index.js @@ -1,11 +1,15 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog.jsx"; import { Button } from "@mui/material"; -import { PersonAdd, Delete } from "@mui/icons-material"; +import { PersonAdd, Delete, Sync, Add } from "@mui/icons-material"; +import { useDialog } from "../../../../hooks/use-dialog"; import Link from "next/link"; +import { useState } from "react"; const Page = () => { const pageTitle = "Autopilot Devices"; + const createDialog = useDialog(); const actions = [ { @@ -70,20 +74,36 @@ const Page = () => { ]; return ( - - - - } - /> + <> + + + + + } + /> + + ); }; diff --git a/src/pages/endpoint/autopilot/list-profiles/index.js b/src/pages/endpoint/autopilot/list-profiles/index.js index 2e9d5f419aef..e1e3e8375b1a 100644 --- a/src/pages/endpoint/autopilot/list-profiles/index.js +++ b/src/pages/endpoint/autopilot/list-profiles/index.js @@ -3,6 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { EyeIcon } from "@heroicons/react/24/outline"; import { Button } from "@mui/material"; import Link from "next/link"; +import { AccountCircle } from "@mui/icons-material"; import CippJsonView from "../../../../components/CippFormPages/CippJSONView"; const Page = () => { @@ -32,7 +33,11 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/endpoint/autopilot/list-status-pages/index.js b/src/pages/endpoint/autopilot/list-status-pages/index.js index d49f4281b043..fc1525f4cbbb 100644 --- a/src/pages/endpoint/autopilot/list-status-pages/index.js +++ b/src/pages/endpoint/autopilot/list-status-pages/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; +import { PostAdd } from "@mui/icons-material"; const Page = () => { const pageTitle = "Autopilot Status Pages"; @@ -25,7 +26,11 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/identity/administration/devices/index.js b/src/pages/identity/administration/devices/index.js index 456329c33755..0ae68838f469 100644 --- a/src/pages/identity/administration/devices/index.js +++ b/src/pages/identity/administration/devices/index.js @@ -1,7 +1,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative. import { useSettings } from "/src/hooks/use-settings"; -import { EyeIcon } from "@heroicons/react/24/outline"; +import { Visibility, CheckCircleOutline, Block, VpnKey, DeleteForever } from "@mui/icons-material"; const Page = () => { const pageTitle = "Devices"; @@ -12,7 +12,7 @@ const Page = () => { label: "View in Entra", link: `https://entra.microsoft.com/${tenantFilter}/#view/Microsoft_AAD_Devices/DeviceDetailsMenuBlade/~/Properties/objectId/[id]/deviceId/`, color: "info", - icon: , + icon: , target: "_blank", multiPost: false, external: true, @@ -27,6 +27,7 @@ const Page = () => { }, confirmText: "Are you sure you want to enable this device?", multiPost: false, + icon: , }, { label: "Disable Device", @@ -38,6 +39,7 @@ const Page = () => { }, confirmText: "Are you sure you want to disable this device?", multiPost: false, + icon: , }, { label: "Retrieve BitLocker Keys", @@ -48,6 +50,7 @@ const Page = () => { }, confirmText: "Are you sure you want to retrieve the BitLocker keys?", multiPost: false, + icon: , }, { label: "Delete Device", @@ -59,6 +62,7 @@ const Page = () => { }, confirmText: "Are you sure you want to delete this device?", multiPost: false, + icon: , }, ]; diff --git a/src/pages/identity/administration/group-templates/index.js b/src/pages/identity/administration/group-templates/index.js index 52bb163880a8..69a3a55d6911 100644 --- a/src/pages/identity/administration/group-templates/index.js +++ b/src/pages/identity/administration/group-templates/index.js @@ -1,6 +1,7 @@ import { Button } from "@mui/material"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { AddBox, RocketLaunch, Delete } from "@mui/icons-material"; import Link from "next/link"; import { CippCodeBlock } from "../../../../components/CippComponents/CippCodeBlock"; @@ -12,6 +13,7 @@ const Page = () => { label: "Delete Template", type: "GET", url: "/api/RemoveGroupTemplate", + icon: , data: { ID: "GUID", }, @@ -31,10 +33,10 @@ const Page = () => { actions={actions} cardButton={ <> - - diff --git a/src/pages/identity/administration/groups/index.js b/src/pages/identity/administration/groups/index.js index 1fb57be03d1e..0c9fc8452887 100644 --- a/src/pages/identity/administration/groups/index.js +++ b/src/pages/identity/administration/groups/index.js @@ -2,8 +2,8 @@ import { Button } from "@mui/material"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import Link from "next/link"; -import { EyeIcon, LockClosedIcon, LockOpenIcon, PencilIcon, TrashIcon } from "@heroicons/react/24/outline"; -import { LockOpen, Visibility, VisibilityOff } from "@mui/icons-material"; +import { TrashIcon } from "@heroicons/react/24/outline"; +import { Visibility, VisibilityOff, GroupAdd, Edit, LockOpen, Lock } from "@mui/icons-material"; const Page = () => { const pageTitle = "Groups"; @@ -13,7 +13,7 @@ const Page = () => { label: "Edit Group", link: "/identity/administration/groups/edit?groupId=[id]", multiPost: false, - icon: , + icon: , color: "success", }, { @@ -49,7 +49,7 @@ const Page = () => { label: "Only allow messages from people inside the organisation", type: "GET", url: "/api/ExecGroupsDeliveryManagement", - icon: , + icon: , data: { TenantFilter: "TenantFilter", ID: "mail", @@ -63,7 +63,7 @@ const Page = () => { { label: "Allow messages from people inside and outside the organisation", type: "GET", - icon: , + icon: , url: "/api/ExecGroupsDeliveryManagement", data: { TenantFilter: "TenantFilter", @@ -106,7 +106,7 @@ const Page = () => { title={pageTitle} cardButton={ <> - diff --git a/src/pages/identity/administration/jit-admin/index.js b/src/pages/identity/administration/jit-admin/index.js index cc90ab853599..e4ad1c00ce46 100644 --- a/src/pages/identity/administration/jit-admin/index.js +++ b/src/pages/identity/administration/jit-admin/index.js @@ -1,6 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import CippTablePage from "/src/components/CippComponents/CippTablePage"; import { Button } from "@mui/material"; +import { AdminPanelSettings } from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -8,7 +9,7 @@ const Page = () => { - diff --git a/src/pages/identity/administration/risky-users/index.js b/src/pages/identity/administration/risky-users/index.js index 759117480d8b..a5327f24d7f3 100644 --- a/src/pages/identity/administration/risky-users/index.js +++ b/src/pages/identity/administration/risky-users/index.js @@ -1,7 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import { Clear } from "@mui/icons-material"; -import { MagnifyingGlassIcon } from "@heroicons/react/24/outline"; +import { Clear, Search } from "@mui/icons-material"; const Page = () => { const pageTitle = "Risky Users"; @@ -19,7 +18,7 @@ const Page = () => { { label: "Research Compromised Account", type: "GET", - icon: , + icon: , link: "/identity/administration/users/user/bec?userId=[id]", confirmText: "Are you sure you want to research this compromised account?", multiPost: false, diff --git a/src/pages/identity/administration/users/index.js b/src/pages/identity/administration/users/index.js index ec4552915b18..5d646a68fb69 100644 --- a/src/pages/identity/administration/users/index.js +++ b/src/pages/identity/administration/users/index.js @@ -1,6 +1,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { Button } from "@mui/material"; +import { Send, GroupAdd, PersonAdd } from "@mui/icons-material"; import Link from "next/link"; import { useSettings } from "/src/hooks/use-settings.js"; import { CippUserActions } from "/src/components/CippComponents/CippUserActions.jsx"; @@ -53,15 +54,15 @@ const Page = () => { apiUrl="/api/ListGraphRequest" cardButton={ <> - + - - } apiData={{ diff --git a/src/pages/index.js b/src/pages/index.js index 0c60b06fe5a2..c5810877c598 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -167,6 +167,7 @@ const Page = () => { label: portal.label, target: "_blank", link: portal.url.replace(portal.variable, tenantLookup?.[portal.variable]), + icon: portal.icon, })); setPortalMenuItems(menuItems); } diff --git a/src/pages/security/incidents/list-alerts/index.js b/src/pages/security/incidents/list-alerts/index.js index 09e1411d9d3b..4110754efd8d 100644 --- a/src/pages/security/incidents/list-alerts/index.js +++ b/src/pages/security/incidents/list-alerts/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Assignment, Done } from "@mui/icons-material"; const Page = () => { const pageTitle = "Alerts List"; @@ -9,6 +10,7 @@ const Page = () => { { label: "Set status to in progress", type: "POST", + icon: , url: "/api/ExecSetSecurityAlert", data: { TenantFilter: "Tenant", @@ -22,6 +24,7 @@ const Page = () => { { label: "Set status to resolved", type: "POST", + icon: , url: "/api/ExecSetSecurityAlert", data: { TenantFilter: "Tenant", diff --git a/src/pages/security/incidents/list-incidents/index.js b/src/pages/security/incidents/list-incidents/index.js index bebae5e2f983..9737696a1d02 100644 --- a/src/pages/security/incidents/list-incidents/index.js +++ b/src/pages/security/incidents/list-incidents/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { PersonAdd, PlayArrow, Assignment, Done } from "@mui/icons-material"; const Page = () => { const pageTitle = "Incidents List"; @@ -9,6 +10,7 @@ const Page = () => { { label: "Assign to self", type: "POST", + icon: , url: "/api/ExecSetSecurityIncident", data: { TenantFilter: "Tenant", @@ -20,6 +22,7 @@ const Page = () => { { label: "Set status to active", type: "POST", + icon: , url: "/api/ExecSetSecurityIncident", data: { TenantFilter: "Tenant", @@ -32,6 +35,7 @@ const Page = () => { { label: "Set status to in progress", type: "POST", + icon: , url: "/api/ExecSetSecurityIncident", data: { TenantFilter: "Tenant", @@ -44,6 +48,7 @@ const Page = () => { { label: "Set status to resolved", type: "POST", + icon: , url: "/api/ExecSetSecurityIncident", data: { TenantFilter: "Tenant", diff --git a/src/pages/teams-share/sharepoint/index.js b/src/pages/teams-share/sharepoint/index.js index d88d75533e92..5b15705536f9 100644 --- a/src/pages/teams-share/sharepoint/index.js +++ b/src/pages/teams-share/sharepoint/index.js @@ -1,6 +1,14 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { + Add, + AddToPhotos, + PersonAdd, + PersonRemove, + AdminPanelSettings, + NoAccounts, +} from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -10,6 +18,7 @@ const Page = () => { { label: "Add Member", type: "POST", + icon: , url: "/api/ExecSetSharePointMember", data: { groupId: "ownerPrincipalName", @@ -40,6 +49,7 @@ const Page = () => { { label: "Remove Member", type: "POST", + icon: , url: "/api/ExecSetSharePointMember", data: { groupId: "ownerPrincipalName", @@ -70,6 +80,7 @@ const Page = () => { { label: "Add Site Admin", type: "POST", + icon: , url: "/api/ExecSharePointPerms", data: { UPN: "ownerPrincipalName", @@ -99,6 +110,7 @@ const Page = () => { { label: "Remove Site Admin", type: "POST", + icon: , url: "/api/ExecSharePointPerms", data: { UPN: "ownerPrincipalName", @@ -151,10 +163,14 @@ const Page = () => { ]} cardButton={ <> - - diff --git a/src/pages/teams-share/teams/business-voice/index.js b/src/pages/teams-share/teams/business-voice/index.js index 725a2a8a5331..6cef4fd00045 100644 --- a/src/pages/teams-share/teams/business-voice/index.js +++ b/src/pages/teams-share/teams/business-voice/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { PersonAdd, PersonRemove, LocationOn } from "@mui/icons-material"; const Page = () => { const pageTitle = "Teams Business Voice"; @@ -9,6 +10,7 @@ const Page = () => { { label: "Assign User", type: "POST", + icon: , url: "/api/ExecTeamsVoicePhoneNumberAssignment", data: { PhoneNumber: "TelephoneNumber", @@ -34,6 +36,7 @@ const Page = () => { { label: "Unassign User", type: "POST", + icon: , url: "/api/ExecRemoveTeamsVoicePhoneNumberAssignment", data: { PhoneNumber: "TelephoneNumber", @@ -45,6 +48,7 @@ const Page = () => { { label: "Set Emergency Location", type: "POST", + icon: , url: "/api/ExecTeamsVoicePhoneNumberAssignment", data: { PhoneNumber: "TelephoneNumber", diff --git a/src/pages/teams-share/teams/list-team/index.js b/src/pages/teams-share/teams/list-team/index.js index b1a41a9adbb6..fb3580cc2622 100644 --- a/src/pages/teams-share/teams/list-team/index.js +++ b/src/pages/teams-share/teams/list-team/index.js @@ -1,6 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { GroupAdd } from "@mui/icons-material"; import Link from "next/link"; import { Edit } from "@mui/icons-material"; @@ -25,7 +26,7 @@ const Page = () => { simpleColumns={["displayName", "description", "visibility", "mailNickname", "id"]} cardButton={ <> - diff --git a/src/pages/tenant/administration/alert-configuration/index.js b/src/pages/tenant/administration/alert-configuration/index.js index 6b68555d0e66..1544d84c8e39 100644 --- a/src/pages/tenant/administration/alert-configuration/index.js +++ b/src/pages/tenant/administration/alert-configuration/index.js @@ -3,7 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Layout as DashboardLayout } from "/src/layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative. import Link from "next/link"; import { EyeIcon } from "@heroicons/react/24/outline"; -import { CopyAll, Delete } from "@mui/icons-material"; +import { CopyAll, Delete, NotificationAdd } from "@mui/icons-material"; const Page = () => { const pageTitle = "Alerts"; @@ -43,7 +43,11 @@ const Page = () => { apiUrl="/api/ListAlertsQueue" tenantInTitle={false} cardButton={ - } diff --git a/src/pages/tenant/administration/authentication-methods/index.js b/src/pages/tenant/administration/authentication-methods/index.js index 7da41b844058..cd8fc26259c3 100644 --- a/src/pages/tenant/administration/authentication-methods/index.js +++ b/src/pages/tenant/administration/authentication-methods/index.js @@ -1,5 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Check, Block } from "@mui/icons-material"; const Page = () => { const pageTitle = "Auth Methods"; @@ -12,6 +13,7 @@ const Page = () => { { label: "Enable Policy", type: "POST", + icon: , url: "/api/SetAuthMethod", data: { state: "enabled", id: "id" }, confirmText: "Are you sure you want to enable this policy?", @@ -20,6 +22,7 @@ const Page = () => { { label: "Disable Policy", type: "POST", + icon: , url: "/api/SetAuthMethod", data: { state: "disabled", id: "id" }, confirmText: "Are you sure you want to disable this policy?", diff --git a/src/pages/tenant/backup/backup-wizard/index.js b/src/pages/tenant/backup/backup-wizard/index.js index a5a5b04b6d62..ef07baf9d842 100644 --- a/src/pages/tenant/backup/backup-wizard/index.js +++ b/src/pages/tenant/backup/backup-wizard/index.js @@ -1,6 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { Restore, Backup } from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -10,10 +11,14 @@ const Page = () => { apiUrl="/api/ListScheduledItems" cardButton={ <> - - diff --git a/src/pages/tenant/conditional/deploy-vacation/index.js b/src/pages/tenant/conditional/deploy-vacation/index.js index ddddd13809c2..ca4092689195 100644 --- a/src/pages/tenant/conditional/deploy-vacation/index.js +++ b/src/pages/tenant/conditional/deploy-vacation/index.js @@ -1,6 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import CippTablePage from "/src/components/CippComponents/CippTablePage"; import { Button } from "@mui/material"; +import { EventAvailable } from "@mui/icons-material"; import Link from "next/link"; const Page = () => { @@ -8,7 +9,7 @@ const Page = () => { - diff --git a/src/pages/tenant/conditional/list-named-locations/index.js b/src/pages/tenant/conditional/list-named-locations/index.js index 2f72a57d5325..834efd07eb32 100644 --- a/src/pages/tenant/conditional/list-named-locations/index.js +++ b/src/pages/tenant/conditional/list-named-locations/index.js @@ -3,6 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Button } from "@mui/material"; import Link from "next/link"; import { MinusIcon, PlusIcon } from "@heroicons/react/24/outline"; +import { LocationOn } from "@mui/icons-material"; const Page = () => { const pageTitle = "Named Locations"; @@ -75,7 +76,7 @@ const Page = () => { offCanvas={offCanvas} cardButton={ <> - diff --git a/src/pages/tenant/conditional/list-policies/index.js b/src/pages/tenant/conditional/list-policies/index.js index 35f77a73f286..df42715f9801 100644 --- a/src/pages/tenant/conditional/list-policies/index.js +++ b/src/pages/tenant/conditional/list-policies/index.js @@ -5,6 +5,7 @@ import { Check as CheckIcon, Delete as DeleteIcon, MenuBook as MenuBookIcon, + AddModerator as AddModeratorIcon, Visibility as VisibilityIcon, } from "@mui/icons-material"; import { Button } from "@mui/material"; @@ -105,7 +106,11 @@ const Page = () => { - diff --git a/src/pages/tenant/conditional/list-template/index.js b/src/pages/tenant/conditional/list-template/index.js index 41a8010d6b50..b45950ba60dc 100644 --- a/src/pages/tenant/conditional/list-template/index.js +++ b/src/pages/tenant/conditional/list-template/index.js @@ -2,6 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import CippJsonView from "../../../../components/CippFormPages/CippJSONView"; +import { Delete } from "@mui/icons-material"; const Page = () => { const pageTitle = "Available Conditional Access Templates"; @@ -11,6 +12,7 @@ const Page = () => { label: "Delete Template", type: "GET", url: "/api/RemoveCATemplate", + icon: , data: { ID: "GUID" }, confirmText: "Do you want to delete the template?", multiPost: false, diff --git a/src/pages/tenant/gdap-management/invites/index.js b/src/pages/tenant/gdap-management/invites/index.js index 7cf52a876857..54670b22330e 100644 --- a/src/pages/tenant/gdap-management/invites/index.js +++ b/src/pages/tenant/gdap-management/invites/index.js @@ -3,6 +3,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import tabOptions from "../tabOptions"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { Add } from "@mui/icons-material"; import Link from "next/link"; const pageTitle = "GDAP Invites"; @@ -13,7 +14,7 @@ const Page = () => { return ( + } diff --git a/src/pages/tenant/gdap-management/onboarding/index.js b/src/pages/tenant/gdap-management/onboarding/index.js index 3835749a7cac..f5f2042f3064 100644 --- a/src/pages/tenant/gdap-management/onboarding/index.js +++ b/src/pages/tenant/gdap-management/onboarding/index.js @@ -4,7 +4,7 @@ import tabOptions from "../tabOptions"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; -import { Cancel, Replay } from "@mui/icons-material"; +import { Cancel, PlayArrow, Replay } from "@mui/icons-material"; const pageTitle = "Tenant Onboarding"; @@ -49,7 +49,11 @@ const Page = () => { tenantInTitle={false} queryKey="ListTenantOnboarding" cardButton={ - } diff --git a/src/pages/tenant/gdap-management/role-templates/index.js b/src/pages/tenant/gdap-management/role-templates/index.js index def2717cc986..3b82189aeb14 100644 --- a/src/pages/tenant/gdap-management/role-templates/index.js +++ b/src/pages/tenant/gdap-management/role-templates/index.js @@ -9,7 +9,7 @@ import { useEffect, useState } from "react"; import { Box, Stack } from "@mui/system"; import { PlusIcon, TrashIcon } from "@heroicons/react/24/outline"; import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; -import { Edit } from "@mui/icons-material"; +import { Edit, AddBox } from "@mui/icons-material"; const Page = () => { const pageTitle = "GDAP Role Templates"; @@ -42,7 +42,6 @@ const Page = () => { urlFromData: true, relatedQueryKeys: "ListGDAPRoleTemplates", }); - useEffect(() => { if (currentTemplates.isSuccess) { @@ -98,7 +97,11 @@ const Page = () => { tenantInTitle={false} sx={{ flexGrow: 1, pb: 4 }} cardButton={ - } diff --git a/src/pages/tenant/gdap-management/roles/index.js b/src/pages/tenant/gdap-management/roles/index.js index 2de5ad32b096..e97820abaf08 100644 --- a/src/pages/tenant/gdap-management/roles/index.js +++ b/src/pages/tenant/gdap-management/roles/index.js @@ -3,15 +3,15 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import tabOptions from "../tabOptions"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; +import { AdminPanelSettings, Add, Delete } from "@mui/icons-material"; import Link from "next/link"; -import { PlusIcon, TrashIcon } from "@heroicons/react/24/outline"; const pageTitle = "GDAP Role Mappings"; const actions = [ { label: "Add to Template", - icon: , + icon: , type: "POST", url: "/api/ExecGDAPRoleTemplate?Action=Add", confirmText: "Select a template to add the selected role mapping(s) to.", @@ -40,7 +40,7 @@ const actions = [ }, { label: "Delete Mapping", - icon: , + icon: , type: "POST", url: "/api/ExecDeleteGDAPRoleMapping", data: { @@ -64,7 +64,11 @@ const Page = () => { simpleColumns={simpleColumns} tenantInTitle={false} cardButton={ - } diff --git a/src/pages/tenant/reports/list-csp-licenses/index.jsx b/src/pages/tenant/reports/list-csp-licenses/index.jsx index 611d4f5d9b10..9e6264df4c74 100644 --- a/src/pages/tenant/reports/list-csp-licenses/index.jsx +++ b/src/pages/tenant/reports/list-csp-licenses/index.jsx @@ -1,7 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { MinusIcon, PlusIcon } from "@heroicons/react/24/outline"; -import { DeleteForever } from "@mui/icons-material"; +import { DeleteForever, ShoppingCart } from "@mui/icons-material"; import { Button } from "@mui/material"; import Link from "next/link"; @@ -93,7 +93,7 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - diff --git a/src/pages/tenant/standards/bpa-report/index.js b/src/pages/tenant/standards/bpa-report/index.js index 2c786341cd68..50cf80d53b99 100644 --- a/src/pages/tenant/standards/bpa-report/index.js +++ b/src/pages/tenant/standards/bpa-report/index.js @@ -3,7 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Layout as DashboardLayout } from "/src/layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative. import Link from "next/link"; import { EyeIcon } from "@heroicons/react/24/outline"; -import { CopyAll, Delete, Edit } from "@mui/icons-material"; +import { CopyAll, Delete, Edit, AddBox } from "@mui/icons-material"; const Page = () => { const pageTitle = "Best Practice Reports"; @@ -48,7 +48,7 @@ const Page = () => { title={pageTitle} apiUrl="/api/listBPATemplates" cardButton={ - } diff --git a/src/pages/tenant/standards/domains-analyser/index.js b/src/pages/tenant/standards/domains-analyser/index.js index 1a5c2e9b4a68..c90254aab4df 100644 --- a/src/pages/tenant/standards/domains-analyser/index.js +++ b/src/pages/tenant/standards/domains-analyser/index.js @@ -6,7 +6,7 @@ import { ApiGetCall } from "../../../../api/ApiCall"; import { useSettings } from "../../../../hooks/use-settings"; import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; import { CippDomainCards } from "../../../../components/CippCards/CippDomainCards"; -import { DeleteForever } from "@mui/icons-material"; +import { DeleteForever, TravelExplore, Refresh } from "@mui/icons-material"; const Page = () => { const currentTenant = useSettings().currentTenant; @@ -36,11 +36,17 @@ const Page = () => { apiUrl="/api/ListDomainAnalyser" cardButton={ <> - {/* This needs to be replaced with a CippApiDialog. */} - + } prependComponents={} diff --git a/src/pages/tenant/standards/list-standards/index.js b/src/pages/tenant/standards/list-standards/index.js index e041ea9cd23b..2d9b4493d975 100644 --- a/src/pages/tenant/standards/list-standards/index.js +++ b/src/pages/tenant/standards/list-standards/index.js @@ -3,7 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Layout as DashboardLayout } from "/src/layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative. import Link from "next/link"; import { EyeIcon } from "@heroicons/react/24/outline"; -import { CopyAll, Delete, PlayArrow } from "@mui/icons-material"; +import { CopyAll, Delete, PlayArrow, AddBox, Visibility, Edit } from "@mui/icons-material"; import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall"; import { Grid } from "@mui/system"; import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; @@ -17,7 +17,7 @@ const Page = () => { label: "Edit Template", //when using a link it must always be the full path /identity/administration/users/[id] for example. link: "/tenant/standards/template?id=[GUID]", - icon: , + icon: , color: "success", target: "_self", }, @@ -105,7 +105,7 @@ const Page = () => { apiUrl="/api/listStandardTemplates" tenantInTitle={false} cardButton={ - } From b0aa77755d3716bbd5fa74f15da702dbdf50eaac Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 30 Jan 2025 22:16:29 -0500 Subject: [PATCH 0058/1184] add github logos --- public/assets/integrations/github.png | Bin 0 -> 13001 bytes public/assets/integrations/github_dark.png | Bin 0 -> 31120 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/assets/integrations/github.png create mode 100644 public/assets/integrations/github_dark.png diff --git a/public/assets/integrations/github.png b/public/assets/integrations/github.png new file mode 100644 index 0000000000000000000000000000000000000000..e03d8dd8bcf0d851fe1eb89f93a39de843e5c69c GIT binary patch literal 13001 zcmeIYXHb*d+bJ(fiT{_ zrFjnmIkp6W(4?K92XEetxHEt+c7&E0!U*ny2(#uLisrxp$v>2QJ#)+PFGcwc@-bZg9*Hy5%#Vd%{9OgB`8m1B-_z9o&syL~>8cw7;VUmH8WOI*T11@Oo#eIEpxWZ%P$@B}gqV!1xVXBc zl)9$6xCB&97AhyFCid?f|J_&(by=vay0(_2tR$F2OHxfnQ(Rq2OhQ6kLQ_m!Tl(Lz zw|)E(_CAiz|E}u}*8R^|&Hr(%yoR5%Jp%4$42OIDYXNuN;0U zQbI=a>VL*M{lAf#C?H0ZY99ZGx%~SI*dX=ie;Ge`_%HWy_5nWQ2b|+<`2HIRL}cf- zrke4?@n2IXUvu40g|0_m`CBzSIp6u|`!$8G{71amyydlGm>aW?=48*}zT%b^R~H{) zzQ@Xczj33y>vO@es55k*n!C=HKjHd?aQpO9^~B!voba2>=XnkO@WA1>GiyQ91svQ< zC8)kSa#8^h9S(`{GePA5>JB zr3dLY`Tzne5zwg3v)6edR5m?6QrCi=-6QSy;ab6Ef`ACcf zUsc&`;SA4~8D8U9@{abDsR&QpxwR*M1DgpC7s)mii7n-d;lfrYjF%Uc#6p8i*zs#o z^}@ttzaT@p9oC)`bO;E94nc#?rQOpm8xtgM!4!0g9b68CYiBMZ(fHx{-|;6_MBN#w z_DEYFJ{_;BEY1SIsS)%}`s-u0Ucto{n^{$+19RR)NvDr-LjXIDx>`!sA# zC`FH*Qhf`G-FL+A!4|d6j$)FjMoi^|6#3h<-5~+jirG%!fVU|KWROF(@TsttXYUWA z{?iL8o2?^eSWp!97qR~nVHum8hY^V-JD>V>e#F)No~dct8Q_(#tQN8|!8Vx%q`*VfgwD)WvAJP2Gn{EKX%clQP6dyBiKa z8j}a-8FVzKIOb~O13pB(BPmOANl%x5Ttjz{$iCr+um9%bgBNYomvU9TyP~ODz{O)= z5~Vw1Vq;mk+H261$GOW@z$k`EF4-d|c&?AdN$+G!B$tUk*)~%@?ZN(ah*gj$j_iUj zME)gM+UJ&;Z}hb0nT3i+1O`beMzq1d;0j_!2z5+aQohYEdpHTGkHa89cxOW$um*ep-JvE5LM<{`X+7~w>QA z-ud-`wMAl3ke$$Kl>ED;gE;%a^IOZa@Ix^Vb|X4~<1${HRdvKDUsAC#K0~pvArcO! z51Vxal|@qovM#TuOIMa(o0i*FxNIu_c!izfc9SB)*$&}N~45b zzgNnAFCT;G_M>9h(O}PVyhPj|5gR}(6j;KdEMQQMwQo31!D@p}Eq$ChPs_Q|!m2y` zR0D~;&}%Bxx+hStR@+$90ylWFu*m6H24~!V-F$a9n(${GyVky4vjZ6q^i;NS)pDPT z?VL?>siG1Obvz594VO{%H;sTlCFt>lutS+?TyW|tF*Nt)aVm+JPkrahWHtHO>;mx8 zmn^b&T>FP2rUtmET7B|_gs@%*_8|P_+Mr7s(EBqlezv?9UoU8HFMo;zp(_|CI zvt{CKr@WwT4a?d3LRfghxs5=U+C|eq?(!Sdt!AG%!Pzm(mSIQZv%IpFZj-b1O}66D z=brJ>*}Y@irwO4K2^SCKtqj)h;jysA4y&e5dMsecQcqb!SN;Pbk4HZ5Aw~jHwnNQ! zQ(wsqYQwas&7cW0D=Ylkue`qYdibR)6c$lSNOzn>l>RH?GUc_E=A_S{cp0T{|ju4A2121~hDx?UsW9LzvZf#xH?b z*kg1gmPt+d91sX{R&Hs<-we+&-hZB8G3(l$<;t`hWW(Gom*Ml!WL`8&Bt})S=F#%j zB5qhB4H_6kphgquouJJFlDxQ+sOFS4JVIr(?5%t0Fg57D$@B_IP;{JRjuFNNM2*XNbYhTFp|XR7 zJ*Y_~Bcb;Rj?)S}m;YXWKVf@A+{)5*}5;mNcM;_h^ zby}nP_q3wEGAc9x@5=XP+MA>C>iYuEuSV#bpUC57lTySI`Avb0P@d(3DGX9ZlgpZG zVqK>K1Ssm#ZMl50`!c>mLoa?OXq`y&VmTwQp6~g4t@NA6ks>h*JMz}PyTxk+xSVO} z;3InlMUOiX)llm|N*qr338^uu;Mb8OqbcQ=*$yd=7sNbN#3lln5Z8W%as21zGMCz>5uesMg29#&22t>M|{<=V>TO?ddYU!(a~CI=Q5QAcT|0SL-Yt=rQgoV2_+tZ zQl0#|E0i>|#s;^ki0tTlVk%v?sBs8tB#)_eTA0`!KH-ujjem88vQzdj?6?N1-r%sQ zEYv?1=z(JMF|_C-w6@RrIomive--*G*On*7 z8)LxvL`6l~W7O;^JhcGpASX;^weV;7otoumxIlU9*J_cQ1(<1OmF8>2>GQjZ?lz&4 z9*MgRDeN?BtPqH@ue6n+>CR(`=RdD=Jqt0U%hHLJ&^SX3yOkqHe1G=%mN~3btC%Nj zc?p+VPX)CG<)-+@XKI#fPbjl;+C;Js+D4Is4r=Z3mRJMfh^^UL8Db*Lvu*9L0LOsj zfP`NMh=pFb6T29w74(K<?T&u}P4nJ6VlFFkTI&=4RyQn(xgd zS(crv%?os7>)Vzj9(`<5VWG$a%tKn_*!=iSxMC$pgeVz#2|^98=}^~drOuu09VIU_ zDlFQp|3WxHu7Gv2fl?7L0~25dLvvV@FK&sU_=y>4&u3a{xItE+wI^P#zD5^a0dWJz z9ryrlqN-9{)3SC_1Lz1_2tsdrWt47r5~dz|{bF$huA6b!a8X<7{^1)DQ~j*PU@RGP zcu)Bz15J~-P0B#^LBB68?Zvq4AOY`=u8kZr{M%uCX8#HSnMndYsb z@JlgHPWeTM?q`!NL~1qLsK-LQQghiSgFH9uBuG}tE& zT@@dsMGbqu_!4kXkmGa$uDXx+?ad9=vO2fi>^wYe<&ZImv@aE1R+aP`3y2~+Zu&dg z%6_7y$P(Anib*!G{SMFI(TCoBB?H0pK4r2kxY4}l`&!;cmGRjUyJa@TA=YSFkEAnD zarD4?4zAU~vM*|$b*}1R%?lo-%!uaitd7JUZFa9NJy;7AbLL~9XZ&GvZ|e+lwg zx88hQA%>_@=OUH6zt||F%*1u^3PpG2T>tUSc9IjGG4ev>#m}Z9Gr6{Be+m*#L7Y~2 zh0So%nEY1-jYpaa)Z}?rB#w1JFY*FCSMN~8oiJu;7!(3Iyq;mbKDS#`X)mP0%dKY=kL1p6H9#CYD#F;wO%`;5}7nHH^R5~ zO5+g7`@0M}8CQ zo{4#`ti~DH>ksrZ;E7n)+JA<##wLqzu@Lug>DYLX=mZ-pfbjVKKKAemkquDHYI?Sy zR^?uVZ)S;M-3<>0BcJ~5SoyzDJM||BB90J9c9$||mZf1-U$LQk`**o^N>aV#SfsnO zS*OMmlKt%j$N@$M0=XMuwRIa1!#dh_raGsFez`W|t&Gj@=Vto`ZS{kFfT z;5}mNGW=c86fNX=6(X!uqw*sIrG4N&X)DX+1W-=&t})p0*uYdz3s-ge_s?7blb`2g zDK3z?k`0x}R`I0vIwg1KG_Wnev)yJBwxF;$J!bgV^w4nABbgIR8dV`ZqhZN^dbm8pQ7Y{R^k>6JvC3fL z_nEQvO2kauQw(<;QPk6AZzlH`cFMV!qbdmR0$Y|YG6mLEcax7=krXPagVktSb0f|1 zNg$u!VcJRA0tw9dm?rFY!g%55BfB3yWj%VDeKt}_bes9UiLz{&i&fbyFqN&fF*OK8=?r$I4SL|{V!u3)lhirp4oTV&$ zITdpKwrhK+jB-jYXCI~V^YRB`b%_RRf80&6F=!hiZNE=`qhYRRDT;$(^UFZGX!;e1 z({(O!L!EaCaXWRc0=soT+jbA0`&`~xW8Vr<$D6=s=yo?424?R;6i7zlxUHin1U zh6x$;*%^&Urhz$tL?Mvh0U%U~eGvm4H@tdATPDuYLR3dY5>Q186Yt~gFZMGyMp7%= z#`i%AsaGaju#jGM&(O3+NAvVj%%(B0*^oO3X!J2ic%$|6k1}^8VrfyUG)m@QKp+A0 z#HU%3yv@FW>0>1LKyXL{F7H&-n7+RvJ#&VEWwGorOQZT(oqkivSV-LZ3QmEueuYqm zIr2CKVGO*F&zH728f8WreFcpqsG5|&@X6b{5r?}dI=f+)2lc^3)%qp9p+ zeMkEDjec74Ri&37WxUKHkZ)Yx(Lg>pG_-UqHy8b2?q{9f0Fk5tptdK`rE~1mtX4|C zMfQRMtbIR3U+7TTBiS6B8@3*~SCoKV6*6H2OI-cTNpu8G zP=I?dY;b58?Q&3y#_yg#Bpun*dj180Z0(rEjW%_!pInN__=#j%N*}Sm#+SR(K0Ep1 zumJ>P6|o)~$mj521?RS#tE3$_z*O8Hrj%fFNFLW+y3LQDe;BMff$sT0J>YpMYbD73A2mp_&x~^F{=vh&esyOl z#gQPX0pPh}Lh@UD6XP`qNCs?Np-$yoo;wI6+)EZz{_+c7e~UB()^8cDxcW2mmn(S5 ztJgjJaBAvr8&#e+piY-sRx6p{FK{^-j}m=6s%)+9?LU0hIvfKh(1M=x~A9zLC51?+Va zzjysXABQpxx*u$@nepv$?B0Vvv;p)lm&oZ@R&E8#(2$nHdViac902qQB9+^%LDig- ztG`o|5(BV(xEBJDoFx%LOTKG;UK)yBk*ft(qTdQozWGwgM!f>C5hi`$IGbjZZw9W% z#gJdV0Den@ekDh3>Hhh(da)nWPxKiDsfh#DEe)94)45M)Iw=a&90Y7E)*uau!DRM% zr4MpVF-cVdyY&>Lt||sreNIIZtT8c?la+Hd2)#s-K#1)#f zw~f9*WKfrfh&@Ukp=C?kZOqIJvsu(Bnu1?Ez8P?Q!PqI+#DqQ{JMv5_?3x@h2=lNU}FApq}O67%v9@^ z?dWrjxw^lZ`)_-?(MSnox18I04mg~^00ESnO-?@VnUW%QoFJ@0fA_lyy3_Q3LEi}( zG1KL=^PSx)cM*~)+PFT+l}fzEcN2i278y6olsNgD0d#~{JHuy`qz1<=Ac(Pi3rNIv zd|K(zO5|Ntcnt!&(;Vqd`WqIgdF$v7p3Vru;miq*r<3;*6b@G_-2YZw143O>F|fwL zjLERc5Bi2WLoJ+0(-5;GH~dSNV^ZoUy21EyNRqT#h-q{H_;w& zTmm>2b-v|Yo`h{?*}B{K_E4Gl95>%{_H}8UwC$0`+*Z>Y`^UOzFFwjN=7XX*HXA#O zmd)s?w(WuPalL=-A+-oUDQxC76Hk7KuZ`TfVx3-ZXkOvC_#jB=hz(?Ak-(c_3PZdj z*W!BUVd*;Frj-UcmP2^wi+4)*$OXQKd$>LhT>x1BLg&l3%+k2K55>XKf^RlZZbazU z$(Mh$;uFXY)Vx#DIotj+9uuYxJ#?{Re-tQuBzJsU!7-H>?-yk2VT)%TXmx#Bm#AxR zpDH0$WLC+2Y}lx>`ET38Gd~EuLy2FJbeq+35;noE?aSNpttV+w48PLj&vhs-bVbwW zDxGpQTyR-q8x?fuZMqwQr1;@w*f$S2h745KD&d;w_h(|hs=SBWj2uk=8XVYihxtd3 zNK;7M-fJA|qLe}(W9PkKXGuA)<+3W?t4 zP-6XVzi+tx6WtX@zl~-bvm=jW=*3U{g_!A=KB1QMq)HJ-{Zj2)uDSiWtcsD*!_EeV#zM$kEx(kE}Y zwJDOcHDvCLqfXXm|oL*NQkSD)MtjUXJVrK1>$T)>E08}6}82MH+ zaayY{`Eb~Z4>A1@tX6wn!%X|i|houvhulrJ2#rYRstsxCljs%2A*8jN(fgbHlIUcWgw*2nB%HXt@4hm z9;a9U00A4Fm`O2^RKV?KacV;TN^z$Vk}=dvRSCRB|L(f=cJMophTT6&2xKi@9-y%a zc){|)!O{dIciG%o!B?4;-Z9dmlGMrOWxMePka^`RN`<>384&sRVYhi6!ADPKtB1Zj zPK&yPRwi0`Lv&k)Xg?et|2#PdYZ<1eY4QU>eW7jk`zOigf3v_%z~zvitB-%5WInN! zbcSHq?vRDkK^)^)i^c)Am%;_H+<1DsS3S|>GAd0>1g6eeVb~Dp(Ik2+P)g}GfB4y7 zwl>l2H|1$!%Wc~Zm&8Guy1d>IG{@2JYx~c6l0v-I1TG&>@cb!;RZIeFYv7;WjnUzQQL6x5hQkkI$QOkBi;t z^rR6xl^H|E08)@=2@MxZZa>XmJys&9_~-#H$ON zz^o22y5;t1^$gQz_hg92B?|m1^Hl{moUgU+0ijKB{vzN6^mM6hO-d zIoPP%F){T+W#v)DLO`zw&tR})ndgsz8~vJD&(ca5Rnt{0b1VFn&1Ll%mKui~vivgv zQFTo(dZSUc2fG9uE0T_bG;V0y&y~ll%CId;_|?daq+QD1bV^I`j0n#prMuTxkkT>S z1B?qlZg@6_+Eg0o9CxchB=<&)LlCOoqF=ub6RI23h#cgZi8yuBub=0Q8 zu*kN*VUoyWZlptJKcV=Mli6_w&(JXq)u)%@LX7kantd)Jt9_&l>RCTBVPs;1eDedO zX17AUg{DgZ54lW((|Vt$nqVp;k?{=@#8yy!f$nMS&%xHBc#M?t`Qm)l@GRo1I@)p( z81vGdic?Tan(-F+?UcdG7m&|!Uj)f_v|MxI+oe~*jwVeV!a=xiLZtw zRynp!TJ~-wI+SVPy)6b!YLb6Ue&nOcpn;e4X`;nLtynNO zloes&iB7|Es&eiK6C$=UpYRbfUT%LQ2TU9ncyYulNaQyJ4i)TJ|NSU&bbXd)BE$NGv7YLnHCep94S8qDKRl=rFEUsi%EJ43< zg3<_2O|-m{?uWwWZ?Kl=arq9P8XT$W@sq}mK0yl|h|d6HcHDmQW?NKC4B79;d9Rq| zPq@+i{o}&le^;t_4n)6AukM{uclWws|RDyX0jd<&6aF~j;CV=IajW0 zEw3i^5q0Mk0lS7~k{tkOsoZy)B8C!2D^gpUhX^l#(0N#zA0Hd9fv0kACGBqXJW20A z+gS&$`!MZ9)%#pIn!wT!ZSsPl!Fy^Mo_el)h#7VVJ212 zxh)=Ev-YWS$M+!}UksZ2^6PkCLQn7$qt!N{89BZUBgn~>n~#|s6f>jARtL2{1LWC> zxD?x))`#Wpn*=5x&!J}M1Uq5jFRkU0wFYg94zv25C%MpHn_6E4#LqHlW>_|>nST4p zv9rHG-&8#$>&?EEiU}IcuOUer?_kXsh=_8L` zd5J?nmy%*ewp>~SLoCO9{JZaF`e>H>Y${~@-k!q|q{kymS+^R`igWE9dAHh(R$!Z1 zRSX1F#AJSS*SHg6I%N)909qqj3qR|@`qd4e>iywO4b*yJl z?HbRrPUq`7e{0?K77huQJJ{+PkUyrH{kmV7`7~|y0>z`k&g`RDlQ^a2;<>_yM6%d| z7Wv%ERr`LU#QO#_lVM`0FqcGrhu8_fvRz+1KW3yCA(;^W;Ls&~KRNz&NSO=zmMwei02|53P;|*-fFDoUgT>-0nX=|KbzYJkAQfkz0ri9P85xEr8 z4Q{INV1E=kgA?`3?53g5%Jy$0e7jwSep>yYVNf2z)k;o&31UR+VeM(M7p6Ag{IZs9Yo=;~R;+_vuNkW%fEkk9%Eo zi3>5fUT{@ToPOv|PfMJ&yn;u~Zw;+eV%<*bX?g`hhgXUG8MU|dH-)Ay3!-6lUX0`y ztBN5OK~M)$Q(^F&+2wnct9AE~?pYw!hy}TV)G|PAt{K4QbRJF)&g-&jQSvp` z&g&&-JsWHc3x1-)%6MNsad8IIYv4K`H=f@3htr5@c42UDuS-{90sN<#L)+2jPsfVuH~9XURn|PnAWm!|K=Em6hd<>X`&|g!%Lr#H0}*@ zHKy71d*042LQ{c@qVM`~3XWiJn+yZjoQ_F9+3xYIK1tBSfooB$O-6<9)qmqa^+R;p zz`Y5xRkVfhe<$2EZ^7>EK;D)|JBI4j9c#Ewj2!#B$!+t?_pS5*U&7fQg`}k3m*29l zmNp8Bu;+tJr2_ zH@evG)C8gR2#?u%^L5jE&s%HRMbAiS?nPu%sA*KY%lvY{98Kwu`wHtc3R6NGtL1}O z9=OP|a;d^+kCvAr72k5*tglvS)g|0cDA%=J5*2?`_;OpWCMBu&v7RmMw8?1qXr=_;UL~44=CaKJ8(j;725uL zaem?L#qG|sW@oSS=IY$ZgSWUQs}v0N?bG9JyXLXZH^RowKVZXq1`;H21*5)(dnl`F ztL6~vVANFef#!2WYa!z47AwdBUl6KNn(GXqSwT`t{wAh51N*Nwo0}~L$QQygelH?C z4o;Eq-D?zg6-l2DeHGwNMfa#j-wna078RRS&wF_dy)&yDca6OcMep}glDhgniJGFq ztm}(5=KUta<&J*y{mK+v3`ITa-26>iWuBijWJn)W%V#ByaRwQKTb!Ug14=mH034K- zRsTFwFN*&2{7=)L=YN|1Z&y%F`~R=Zc$toD!)YKlzdF1(8xBPSHA8M|8EBTM+dcYU Dq_KSN literal 0 HcmV?d00001 diff --git a/public/assets/integrations/github_dark.png b/public/assets/integrations/github_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c61ab9d0582e487852d3afdbf22987208123591e GIT binary patch literal 31120 zcmeFYWmuHm_clC)U=ZGbqO>3&Al*ZQ(j|?QbTh=zF(|hpA|)}>AOa#KodXz%bO}R; z0}MF8&>hdl-+lky|A+tae0z`M{qPPSCfL`$)?Rz<73aCGC|zw8@~d=LArJ_;n(6~R z2!v=E0wGAdOagw%7sEQqx!8A6;60V zb&iE<<7nAgT9M z?h?v3L7o^s)w@sF_63qtBG1Z4+*U>qZdxm(LKu#^1o4YCiKmo*0tru5yx#+1ksyR9 zF;Vvtv1k(I2n@B(6)==`@f=6>Dz^~J41(VCX)y2F(P z)(m7i8?`EyNVAU&0--w`{Cp-M7mr<9m|t?hy5V=)-<`Q`z*uGPY|frFza}JxT-WZ$ zPgpH3juLrx5Pb4&buBW3Oc+6&W)CfdC$Ho@zB&+e7#%2aBF~hStNTNmk>TpKYisN_ zxhMflwCuU?JZvsHY!CeRY%*vA;*}?i|r;>6!h4~vYmB2N1VoT z4gM0TFu#A})uu^Qy)LU(M__|q!h<`V$-k&p5JH>GDW_Kw{mCIEFLc_pYe{Rm-P*#| z2?(PpOosd*@?qP&uj#HOK(0HA2nFs#Ac?Jqaq>I_kY40_3y6z54x^5j<5ms`y*t`IByxJ+$*2m10ao7gedzRR?!vBa#_sv>W~ z-?OZ|q zxM{m+B5D*TYRhOM?stQ}Ez25z`7U8}IQ8mf%fGLGaeEdYuVSKUqV$1%m93hp@v`xi zh`$BDaIz+T(5Yq*qB{H*U<0j)H&HI(Sii$`CyU*ZlY-hRQS~lG=bHuXt9RJrh19O8 zxvEa8^1j!9FFSPIIYW~J7w_IVvv9dGyo3drP!~@buk+@(^Xoz#4Yd8`FU>3O?&`fy zqEZ*Nms=#x&lXZl&H4DKw?FLz9h?!;-Nd4Get@Qd@Z8dfSk5j4>*Ef6ssTtJ|qD;hR(5pjsYhJ;!>aBStiUR@R{e#$Zz-GGjmGDs64!EHwH4+xzx~ z7OvhT*EEO5!RldnPtTA0Qzc_1ovX2uBN?t))-B`BlP59H^B-okt4E7Pcce_Dgmhm@ z(Ms7bd21wV6lk<-gf3AVHOJk@xsMvV>Czjglcht`yK6s`rk8&6OLw28`9%}QHN>^6 z?=c~`da`)nAkA2U5ub;7pfr@cd3N97m4fpNwbMtJ*y`LBPTJ){x>x!`> zy<@IV=C&wpfku2c719q$tM6X;s?Z}ls5^O)ZoP4+W_UL*y(xXFblm;tbdOAXXz{TY zUpjrK#a9`;!p_FN$uF-SOlDzv;g{`rEWf3nrK#mHib_UnHILN(XiAo(vz%XsiW@GxP#XDz^$8`+LxXXd?r{V zKs}{E&4-S;VH-aX@fVqE@$3& zOn)TM!=cGE`d93W{>!u1!(au6nkzlEmtW4QxV@}rcD|iTdl*W?#Vz!a@Aso>eYh8V z|Ndyng6Xj%Dt0rj=yikCq)V;0pJR!Oo1UBPYI=Qm{m1&J0g(p}H<46u>bqCgq87f5 zeUpj8_z+^<(u6Y>(hO4Iwq=V`?;2>AR{FZL{H0ArP2)o(p1-9+R?00#uqf*C-_ltu z^w46Y-ugTJxz59ucQNlCRn*n1OTSslG)mr+n3f7vI&ylUqwM=#_==7mPhi6BHw|pt zT1F2>XG;3Vy~cSZlQNPr^7P1^Q>uB;0(JN5bR2ki63G_=m)yJP6C=C!7uXJcwkL16 zJ=Yw}tJW*irMRid|A8mK?3P(Ty(&ue@lWAdhqK>@Y}cOM3_-_9jfCt5x=&2ZsMmF^;Z$+& zaULc6rmf}bC>Mp1ffpO(rSzLIi}Y6R>ND`%AeY_P-s;}2ULsLz(KWN4+LFnwT(P{p zpiG2Cx6x^7ab3$e$HZvsw14n6MFiswsTq9IYI6-wfUzs;Vd$>M(E79KI652p#@3~< z>3S7^o%XD_;QV0Hy@z<53moP)Ro>cKdBt5%EQU!H>baO64x30{OY^Vse9TSpMPczX z=WIbpFh+Mdx9{uJ*WTGwMBVOXoN6G?5VX~|gg4JUMT2=G0_CXGpCv~NU)QX&+V9++ z!Nyr^G<)u_?%PbV*J+f>l*y=sd7jRzmYczF_WRvy#?oc*9W9*HAbuEe zS!4&I@ZVSI>pVE78S2>^cMtsb)@c2&u4_(N1jPlEpR`Pz{w6)5{EetStFUi#pF4Qc z_N4!-DJ7obN@Uhq()n=Y{E$kI$_Se>TTEOgGc!Fo9cs(2FLA!GvXHvJE6nIT5a&~j zojv_^tkG|BGPZH;FuK3BEU;+X8(&;h4((v;U~cXUl-VpeDeapK#n%2Xyvju_0$C{QG}zABRh_{{^zj+wg}baDA8q+~3;U9-?3ev$1DUbGLT1 z*R!{_3-s!=mj+4bGiL)6xQUh~)E4H>XMHh-FTmXsTn&Lp%LRB^+q&ArS#0bbojqh& z@lCC)EY5Z^tj3~R0$QF*_D;^KLEiTILD~kkL9VuvcC2!;EYbl`FoC;0+?pl8-Oa-X z8X&{^XI?1yeDO0sE6blDa90`D{|IHGrOToO^R{OZ|W5trl>6qS?^61mSJ zBp@ipFCfV;D8efs2o;co3J9|N^I`>e^R{z<>OD~Y=U(8O4673y?g{1R_xJbb^B3lW zc{}n8N=i!d3kdNG3Gspvygq>*aO(hG4+EsyBiF?y{b$V&?7f}+?Cq4jVeTw{vDc~T^3$$v@Yi(<5$15o)Xlo-TCL$nWC&bDRMC89Pod01+|NaE5^Wx)wj|KSh z--BiE0Zx-QI5whxDZYh3Tn*J8C>R7xtWKM`rK3|fj@e(4;^g&c*oP&Pqe|{oC~}rf zbC(u+8HmPC_Jvd(uN_tsOp_71k+D4an|!uu!(0;^6p~92LcJQzNEA#oOX6Vb0Nu4V zM{7+R#84IbVbUHk2>OK#B(VDaQurCh^7*w&~bv=jZ&pRRf&)YwPAOz4qU;h~t z4q^PCgZ`cIpF#i3`0t>9X8d>1|9{*67nKb8|J1fo%sbFdrDzvwu_l-VPQSkT{8{Is zH&6LKH5rLkaPV56*>ndJbgBA;R=M z5Mt?~!^6WIiJepXt;c=-Ew*7t!`W%mP5$NP#(K4C&TocT^DWio)iY0p$!F;E-73m= z_fW<6b^Ryj!b%f7xIXkv>;^Ri0NKJxt6kB2!U6(MY$|R^ML!I6SsZymsMy%vMB9X|)o#CH?SoZU6Llri@END`^Rr4cFYaJ_d;jtP zwo4XCxFdPo$inVCt234(<4$zuHXae)eA?u_cb?ebh50_@AbX*d@JKJ*DDN;D-4V+o z-`dgV*`%efKU^>!)=PYjkvq#9uX2nF`^h-SVPBl|A<2kK$AyK7j6`X&4puH)*Hl|x z6Ww$yn9-k)D15?vd8#-%m}}c|rahFM1?iqH1z*+;a&T}MBEeIOIkno)S|tmKNlRx8 zWf4zoUu;NQ#Ne2Qt-$r1+2mOEQ8MqE;-Vr!Mn=XUh2>3tU$xnxk&%&uI>d3EZ-VNB zrV=@8qMgx7$SD`sXZ6|UNSSh9H&m!yLI zhrF+*IH-ue$)R0i+9?BsspT4RSoby{)+V zKt`&8@$n*9m6-f_$$k0r=F-x&ZD6f*badR=NggRZe>^GSj#j~a{W50X`-gS!o3E3R z_`guR!>ChM_1QV4UL-I*4z*Xad~j^k#6OuIqTlsw6_a{)b{5sr(xRg&*d%+OUEAT0 z3nmCk=IMUxI*Ohh8M(2(w&wo&0c(FJc1=tkAO8+_>yy|R+tlt7pAw`?Xq7I*)z2cB z$K1o!_4qDR9B#~)v0pY(lf$v|0};IuY*ZaJK47rwV(_@ZW;{i`*s+?%ZIDSavB<#1 z+RpCVf_HJ!##&XM-{j7D=#&mfF(2BzQ5n~Lz4Ng~Q46>}N4&K~NU zZ)qYGhwqn1qIOMI{tkx5S}-T|bO|<$&(6wCpwa%?vXs%$c0Zqz7mL@aqQ*IPmx>Dx zSoD!G_e&3Soe8qKNdg)dFr<2Y=JlTQRctD;Z#9s7?jJD)pASDrkoNXvN|`NST=iPq z@i5uoRc>B+{!*uRPY->$T8C}#b@12Rj${6~9#oQm8)QRcw)cXjoXbDc=?7Bws8e?D z1Zk>DmXixQN5-g0xjoIhLI{^OC-;%EExV!hskpc}zphT4ChCFZn|^+cKno(@uk~9o zMvl?iErqGONGU0)LQOBD6R{g{9p&WYt zQmZ>f`h{hKXM_Y$CUvkE^mo$)@mHQJKIU@yJ_RFE{GM#gu|_h=p05-;-U4hdz{+a& z%Hav_8ZF=JghvFU$lkWbmVFeyrc?9-rLceMq{S4E?`2(QiI_9((CfvNI~@6fl6J4U z6+GxFdt)lspf8-t$w?l&r++uhB~Vy7SP3-^u3lNlW$qSx-BtTuYxDE9xt}<}`&jR~ z=F?m*3T&}|TmL9-lYSy2CAjTP^;f>{HWjYbt@7cqq{V9M8OhVeDT0WHviOuC+gH=C zT*l2}>-VY^#((byW#d;@@AqC4n4Oq7nzZeR?d>9GwYr3LE+xM=WskLAiE8vy8gc*G zW5t)MN%#F1#w!6=Qd?M9Xi2#1xL{jIo{^DLZBkO!ys5{L*kE#x=B$345I(*XG`@#j zjd=B;p~Hp##s?9rDD8VkC2mT(wf0XTj1;Xv+kCEOJCpXlNz_i|=_JmPYe{}4Reg+i z*Z2wH*K=&wjC#9fT!fc`-JgHJbemo7W7KGpav{N|^}e(aYgfz32+R82tJ6g08W#%< z4ol%^98z9sCcj_sA~F(rD>|;@VOhoFhEY1VC)jUu_pEMyLc4uY`Y^d#Gl~BenJVdX zOi&QbLq&lVstf*ftI#seTPG)2>heIvccYiRsx600>Aolws?_h)ySIK_ynQ{?dhZQp ze8+4CG`dX(WNLC{YH}buOE8ZTT}zD0M6*$Q84^A)=Mby|`G5w2g7c_f zN9MD=y5P$LkI1zQF{{K0mT`OyoXe;`$0(#mPr0(Nkdx}_^Drl(ZAYz&XxnfZ15uGD znWF7ia;|Di^1By=q;u^pI8l;BNG(W@^iLFjb=4@kW1)Z3d|B+bo%Te#49|J?IIz-A z;34a|_%sSJF6R;;D&47y^}XuZeXTWn4ZBZ7=`Xu|OhCBv+d()fOMEt@s-~`PKT7rP zJKG*n`Pq(&;t9xUK|i)>#k)a>LW2LRx24!56C-~LAzYuK|F|uYI;E8UJe7AMFQ*E4 zbxeS?tf+{{`_w(t?;j(SZ^x*|GV3N_g(3gBK_k4qMfcuLLCCI!PjJCw1LoelR+Pkq z#xhL(HqWz>3X=R*iQ8MjVgl&(wKPGr$10^1QLV#ljpIx0lcW>`1_PFp3zn0(b%>dt zw^mZVaQMW_CdS31qLjYAzB1^^$tGc{sAanH#xlEjlmTjJ1jnYi_h?Tpj7oPL(;otP7%7OWy}GvH)2ikkCg=X;R(gQOkz z&P}tN327p5>!cXS|FIb_&_4d@QTts99ZCv{z6_b*(bunE8~h3^QrPxiXg<-9-OWIxNG#pa}8p)JN>?Xw>=jt&SnxptbSe%HWG-0rBq zpI^|I`Hg)w}u5Mk(E?Q4S=};utQGcKUD?aV9&nrpm zeIvk9tTQlBzU3$?iBU{Ee`YjEH%#@h zm^BwpM6l(jqpG-^M?-$npwF^qfvEe(7Sq$yW(y1>Wed=yW)*dfOY7nmBTwScxJ=+D zo7erCbed21CMWu3`nfIv2?^mPYNkug?GAnCkx8^;!s#gvy)d-~F8i-&x$L)ZH?#qQ zlK;7!%b|}aG*GVh{r(SF)|=Tgv%u_yB*H&?v0m)vR^HL~s+1abTCTTO;V)Jr$(4N^ z(&B~ePM%%f_L*%7<&BAnfigeK%H~h&y5%1x*GLguce0dvdc1EX7reLH^W(=4A=^Pv zp#py&%uPQ@fBCs$<7>K9pL=V+WN%z1-lDq858F9x@W;=jIEj3;?f0j5?1{{wyq*<5 zd$QHmCJ*0VpJry3^uF6+a#6}&&%tD!gdyAkm{gyarxcNW-cHkz0kiIRdwhwj0S*ln zPEgg%l=Alo3<(Kg>({Bv$d2(2Yhh(>wdeMkI-FjHuJ~>p`+u{kKv|aWSJlmi9lzq* z(*!ev#BkG|nwol7UtfPVr4G6-&C%X%IsUVnaxaM(TSr1l>f_j-CEBPtMw0bsPN)7} zWzzM2C|8p`JzsaNCe=mB-R5k*`fS%&Ump`R|D2X?4?laZZflFN>N19@2F9MYuB`m+ zi3Zh!N*uFXOO8dQxXn~`tjuhMZDhi>@I5THcq@5t!^v;%%q{*MddzY>#b}yiS`0|n z#`PmdjzmjKE9>dgr;d$HO|A4X%DxV(H=p_3k_v8`Tw_A|*nJ(9&m>JyT~H|)3w`T_)ooll{LsC4)Pvo2 zA3MT=gr#vITZ3@7v_QhyI#FrAPm%6Qa7buk z6)v;s?!h?I)#pJA#mM}FG2u@_1@&i#5+S>GAQ4io#hgPars{D18tCp^0_xleodb^v1Ti&CQPSsS7vXZ4UM{k>jrDSo+G6` z9)#`9)m`q`O7?Sy+4MiT!RRl`M=<$}81|g}gpuyP^80EdwalDiwq>Ho(t>A3>i0&j z0T+CK*JuEmtNU4@kpv5MW8qp{dVYn40d-07)E$HD)ivtmJj=5!51~Jw)A|fI+#`1h> zlqjawKq*sqBI||vM3y-pIzv6*5?LpgR5?u}ysW+aOSY7t@njEENq)|bZ=It8oeeDV zMf{?CE6Q?G<)27sg7t-8#O>S+lQ;*Did5v5<~1eXgY+0QZE7SuN^@%UUX09a z9W1-GqGHo*%P@{ho2)~km$c4~$T+k&ebORH1NQ)l+{!6-Ff`>0#y>W6F-A3t&zam9 zTG>hBtMFT&YFH&HM_8V7})SXukXHdcPd4tP!i^Y6j z$F|E|`)JT+Syd0K8lb6v<&n%3=8DW*(#+|BP1;m^a{ce3^M3fy#MgR>zrR(s=9?DAG(byb-Cs{{0_*(+a@ zUOW-F6>nSL&a;ZZ*B~5MMjU5hf|PY`GhGXwiHV8X%yMBNWrU-0R=JotU+Ly%lnb}x zP-A2+7EP;HHtur)dV+2DYcTIiSI@8QoTSZvFvjMe|GA+c3Z||$#$rzNc@tDuQF$tH z4v{ZjR4)1XNy9w+-T6@|jn&A;I%H!bvat}Ef_SV!yPsD1#L~*Osj;y+l7eyT0qb8D zH+8ChTXSjcy(P()zLRg-HB1?pA?n$@;@8xXo|eYVQH9$K5PB*<_o5kP{V`ADpz9Wb z3thbM6m0fI1TnmM^X7@3U-x9FUY1>4iCxQZ!B|beo%G(=nAfjE1cil#Z6aE?AfYY+ z0b|YEeNxJVyX2>Xn*mdBIQ*?l@ZK%@Z%ESRqmPueS=S2n<3Lb>f*^e83{4i1J^h6}N@w6x_9^9H?IXIt$uP)jvg5!nYJ zE&UdJw735gJ7FZ9c9j6z!o6{st^PdjP)KmVoZrm9=yRpHoJl4K?&0L5O0>Vlw|>p< zyfo>mM63gV;Y388@3*|E(V2)OhentcMK=|KI(dB{SE&VL+!h!my?1(9Lha+nySst< zJ@vEEB+a%!KaCw2(~_i!0?b?-gQSh@!CXWt2wdqECiiWbr6ok=(UHt(Zl{zGpf(Ua zP^x*Y1)#3+11ZJq<;bsT3b4t)n{uBJjoXQ(qu3Q@dQ($V<;EbV`*b;!l$5mGca+Wy zQ;^8s#cpJGD|hLYFqM>G!-DCt9P?o9=A81+Pd+L2MHgP6B|mWW{=FZ&J-W^m_J&FE zEyo@` z-|RsZ;>?BkM0o?6FR?bC*azE4A0HpL%9alF{@s<#V_@{pnFHBT49Jf7(`{ZN zzW1!&4beL6gpY|!OHb#ot*-9*lQ@M#P_NV=dDD}FDX3+`=u_62Gq0TdsA5 z3a9s;x!Bn)R0m-*{f9=f1QEK$LaWiW65kIF0u(6L-Z5b1Is?x%%F)FbobUZ06j9%! zweig?MvPptcA?~*KMAO1uZV_3_T>C$>u zR#woJpT3f%j_(7C1AMTWUgOo#<8FJi>~n|h;COaq3h+p^WDU8ki^FCz)|QtKbo+Kc zW#DEvf>6_29lZthVnO+)s)fS{)w@)3az0Bvrjl|Ul5&4!Z;>Q?dt|_!uko=a{nt0E z5p|?)6Zc|$l0MZ&2povL0OTf1-TrM%r@W-b0=WSY8u9%3rPd@^msw_klDD)k?^pH_}frhlE^pwMSPSh^o;3%`M0 zI_v~Ci;xQ3T8Jl>mW(}Hs=3c+)zT~=Cgzu$muFi6fFb3w2ua{ghiN$Dw%ywLhddad zL{pw(>8EuG2?%6a@a-L2u5-S{shypjd=P^8{wwoeQo+Fy#J`~m z=B~+?u)nWyIl3!v)!E&B)EBFkO;1mMY?jrnH3`ZjJo2v9C{EuSZoad;nVYHzfOUUL=aVH?N(RU1Oton z(>NlBYx?9m9jean5FDls7wW_%Bz!}SX&w!Yjg6JY#>Sd~;!f=c+86{W1Hb`Ml%tPd zqhwDC>hGGNOphgeEri?^UiEz|n-*VMXl6ieZ*}$b^puOpGcz$U&7TneM|PwpN8Q49 zAi1nagr)Jr^a6`WQJ=GHl{ltMhfJT6%^(v~PE=8mTGb@p-`6)ZY>ELsTHM1sxMXt?vxnDSP_wh$k7@nB$JfcH>Z>pKIu4e@fi$@uD8%)Dp4 zQp=HYGVwCB%wH^1o05|%irTR+AGd>0{+eZPdmWI<%F2}>h|~GvI{gj1cJ;z#rKLj>x2gWz$>fn(@G&T3=>*%? zn`#U{IdALnX?V(tNJs=&5WVey3eRACi3s=vb3%&z7IB?_t;IBmPS(m##Ed zftB}CkdxalR`IR)tI+xjE&bV+j_jJ++EHLo0e5xLb0Mxb*7(=@a?sdQoX*K^9%a&Gx#cu$gApH#edmBGsEN(R72n(54}Aq z)e*$g{plhivdEuLz!}yO3xb4}xwxQ$QyX)0PmWf{t4jR;Fw?}#$wdWA{fV0CnjHF8 z_h{f8F1ILhl=AMIW%-TMU{40$6$_P; z(f&LPtL|XEJW#x)SX7FVQESTBmT0_`d~|q+4$(G9 zGluRq(uFU3PVkB?eK2J#7@ITK_?}`){?m78`fDVm@CqM6kniKikA=3kw-I6QKox*u zXQ05{g0KBr_t_{|2^#TPfgkBaJ+N7rYVh%SEknA&0t%r$ZW|Q{#FMsI=vUgM@~X{< zmY~((I`TG|MlyF844(pQ)9Kuem!Q$1&o}U~MT(!c6~I@Qer+Boj#t*?qaV`$zzNl+ z+6kqy4{L|7OEj2!EUqM4njp^i5wMo?Q+)8dL8oZ1vm^hC zCkR+a7U#-DY)yUl*oRjONfpMR*OeuMZjLYV>--`SDaHLvIYbtQ43ZQ2^XL0csm#1C z{`@kK7UtH~p=qNYd=b0FPdT7eOt_P#vK!oNS-t|0{Lr2Why~HEtC&3V2m}QnOP_`~ zZD8)s8!b=H(@lkN#LG7jpBv2i*1Aj+wF`Y`Md%$t+CIp~mp$g&j|C9;&EhO#ITL4!6aoZpg~-xeb-q61f+0Qi zSt|q7=k)fyi0!70F+^)p1v)&`Qe8RB>|<*yqOrUj_KjqXSv9KrbeCk`m~iJ6HXtjKg!8F0l_|pu(FJWP;su zNy^U5qH4$YSl03!wY>5RlOY!BO-b^X%#CHu=(^8y?hl83C0Rb2luJ0q**CPts!6F= ztrY>QWzEwLw~T7uBSD|MrOU+`p;bFoJ;QuFJw4MZu=ULDQ;gC91FKUF`plZAz5=&a z0Sl#-97g^FW)9%l>{T32ikmk_ z-&H2U_9f`f5Lq-TvD?gx66ex4qfZ~l!t`SKc{MH+Ayz*dU)f<<=rMWoLv>1R_n9nt zk8j2*?0qxmu74%fZ@lO#tb7$;TG`sl#@yb*>X$Ym}YUS)9S*hA6MyU$Qgv=sMlicUH+v z>}MvYq(s0EHs%R$`x5S`=aDaSx_Noi`iF9#wl6F!WXCeg$x1?@T?y?nz;g$I7hV4R zAXvP5*M8;qDo;*=!ojb zT*{NO$u8!9%xtm>WI?|{{x2(?Zuc5W5R|_$M&dglAr(WqpmhZ%Jl=`+OLyh0MuKf$@mTgx<97T>#9 zu>9+F@RJGDM!I*1Tmq(8cnDMsbvS&yIemH8WN0m)xB79}%nZy=<50eK{*_y_wp)7f z#_2R`t0D7?W(N;S&JT8?d$RBM3(*U8aou7kT{ImWdAD*L0bDwC;=3vE1X;-Bu3xEh_ z0EtUd@T?c=-uvk&bQ=}uKbAA(T-`l7TuE*{p3)gfK45JBLuP5_w)eF0Uy~c-F7zGw z{R(|0D$2pa?numWGs7&2AE~Fx>2wbIMf0>Z?oQ#reMCele_kay!FbA{I_1EkILSiY z?|O_og_PmWRDfF8@x$>K`wiafPWyESe_+|SvZ@HvE*?Eg@piYsQ;spx{LaP4C`B9PhZ3vOc*+bVdos z;9z`KDm%F)UGad+-q3p?O?UNq?F1=N%LqZU*BNnQa!@SyW74+FF0^tVJ(itzt9E_w zw&RWfx9@HLv>}N@I=)n?<?Byy@_4;?YAHYD9 zBjqcHzV*Viw7_&bbdMpV*X=}eHMz|eljCk#?r-Mk=$KgcfI6;&AB3b8fvVe?x^WdN zpz7B~roT;1HI?LA3{CVpyT3kB8p?Y8@`4N#r7`8`(A+(K?U@&(98Vj9pFGL2@6VEf zk|2k_s-LHS!e2+JwUJ( zl$Yb>7PgPSe*LQPT8mTO%HOQcLsafCN;}LYWUHn9Gr4D|VwzUrusBuJx1S9@*p!Zr z4#~E;@1eB$yAiVim>73}o=k&I9Q4s>g(JTgbby7V?KJY#e773KY%M<3RCIUo3P{o) zI64-_>RY8sy#wZ;D9w~D?fct60qHgRfb;SIv!wg`^PNIDi*bI?L*&0jU0srNP#t5XbBwV z=;&_nC5lJa8(xpO(U(n@OnSVM`Tm21unm(-y%MUg9*xF{W@ct~d(<7D0`kV}xPiX{ z5Yp)51)nWqx-^CCq-ze9MMYfQ^Tg{~O?LTuT$v(;qn1+PY|nhS0xRM{n~d1xcbr&v zEiwheDo+~Tq0!WM{(L67pr9aygM%ZC4UZk?1>3GbztWiTO#9~iLg&1Z&@vwqcP+cW z?uYfIb?QZ$tKT_TEWW2!ZQ1w?1snKCFvK!Scs@Bl+{Tu}3Swq!T#X;pS_C&QcU`sA zCWQo)h*%Ca1knLdqw07cZzTar`$IrFw>CFxn!SRYCg3Ssxf}*u8Jii?9=)x6ew#kL z#`+h7L=@lVKERny=iA!a#D`a^9r(n$h2Y&`t*zR%7MwmKxm-PsWRSS*8J}7;ixb8M z%IR0_Hp7vW%uK0SSpe(-8_FJfwOph4`Rl6eAGqgU`d#GuJq1LNkNC6cyH8ybMP6Ax z@rOXfSJa16@t^Qlb$p88>P9EiXk=9B47& z;)HRwcU_oLD@9@duQJo^Kr?Q!h^+2K!Xks;>05hRT;=M4LsRR&Jiri|9OPcd`=mJg z*;B>6`SOKRU%!jz9=PKR%uPfN0j6?qX@lKQuic6aY`we1Iwd8y;DIoZs zrD{6FHJ>IVAtlyES0%aJEAbBY%$9#Tk>#InX&m|iE_D~E6XCtLI_~xTT{(GoNoXKq znTo(Na-DwdYU#8JoN-6JPtld~5~Kf&3qp8Q+i^5{%!lS;KORgNxyLBy^;43OiB$1H z368$5#<>8R%#m9n!s8XCLYn4gCmqx4$#p5prVDGj!C>sZd3@?#VY0fozP@f0sB;W9 z@af1HwfTmfDtGhcp3A;QZ=X8ESmKGFyGXvxohU8E!#}AbxU7Fk*O-@Q#4G!gf%g@=j z!(`;D;k@`Eh`xE$@bJtfehYM3TzJtre*nq|0z#yxzdt>neW?!EDgskJI!^$#9UyqN z<02!*XC|Qy36BxuTuezS)+@+=t(KbnCP@hPs+$S<#xXD$?>#AR7_n)jzq*IAP&erE zF>GnwvHnIq=(Mx)^eMrt20zN~Y@Ye-v!;$tx;bCR_=E5;D{cHQZ4$ zGoQBJr(4SHXr-+v55kLY$Zn_C%4egJ+iHQmcy~#*TJ+v_lm*r!3C)&A0pF`{B znI&9@^eL;$f2dwXKG6CX8A&z_2Af^l4Px6nF5sSwOCv7bKR(szu&GE<%$;*_a=I4} zRAuEFk6W1Sy9J*k2#{u?zD%r+(rI2zcttTFTsx=)n*0OI%QS8$cw2U1!H#A#$^?l> ziin7~;x(cj)-0x~_FA(Ogq(@?H1vKqHa4bFFhZ+A&&z6Zf4SO<&`7Gp026WP3Veb` zA?W*}H?J^BCImIX%qI{nwE_9w(a{TlX)QppjLgiO<)U#T_VRRE702V=<2AdV&<@T$ zsnktQ{F5(~i^2jKT3ZWNXGh07nS{p zV%;KWV52s*v}|Gje8^hJNDx#*y8K#!lqq~Fq&I<0rKdfbwj7Ws%UF=+WPA9l2Y#1M zi?qmZt1Y{~;jb5Od9|ITv&Dp zvn*gNN^^7X^ulp(y+b9MK~@lxqM~))_xZB|`A^IcQ)>L)ONUV_cKC{tstD>rR99J`K>*1^Q5hH&`wb1R1Ta0)1Ztt5kAUI zEdAE)+YLg(!rNwlv?v$!L-UXb=tT_4ZzX1HYby){OxXM3xV8Jfn*Qogm`M_vR;wbo zet7aQ?ZZ8-S4e^O&11lk{+^q%y`})&fV}Cn^8i))JAkETXIKfv)khzfSu{<6sOz@-|}MbhdPJF1l!T3&QRC^rL!E(`_r6MNAjUiidp;w$<@hU^CEWvW1GK7 zKlQ@?WjJYcPCKCOc9ms3y4iejqosDBCDq^EwoNTDqg3PxXpSjolnXmK9UL4?&)|iG zbLU`sIf3?6fcCJ!IouA*xV?Q`tzsm!GTH;E&tMp8*T|XGjJ!|kbrrSOMDzyzbH(}8 z=g*(>@{q?6`m|Ez82g8Z)$K#XOaOZoF}b!k;X15_#&+RHW4`o3$lnwUG0q%V=GDJ`eG{n)2rY7|&`G8q(?L!DzB91h&Z zhi^>@{aD`y^BM}2nCng*PR#Qz0mM+TYN!fO+QJ=i%-PJ0jHN%AQ?(0`{TY&ppv$J! z6$V3m$L;>6TjAHZA^~r8-D~v#+DOPgS>SABYEIbChym8dm=hdRm3`4<1BuIYnTkSWTA{js?WcvEYTO-#_sH#Jl}fZujFY6*_V z*(>~-_pHndVj{B!jkp6-hrnm%0#wT7dRi)EbUQ|F_?iXa$bpuiuN{5 zug5KxrbtG1@P_F#X!L(_CEPhCSq_Y3?uVL5)PiyHH;Rgj(~*Fa>(@wyZxlG`RgB*> zin=4;TA0Rta0>UjSn$XA4h$DD;nTptV5P3t5#pdV4|>)-C_r*b0q3kwbQth4^n54o z=>{|#{#!^^wk70fXC=SAz1$mS-gu@T4`M!gsq@-2AIOM8eOCw65BkUp&i zx5^3PoqSVg-|3c>tJPgAXzYsj<@@@H50d`C*<$C?AR4`26yn=HWm(qa?4>avpvFLO zL`MiG@2j#GM{rudk${Xz@AIIH^W9SG_DftS4MZiZD)$?dCqLz(Z-r|Wg1QIe*W}9! zFD#2JtLVCE_R{R~0Df|=bL^MT9Qmv}{rwoA=MOGN0)aw+;?7XL%h!pkM>!e>v#H>R zHNslu7-Ezs7i;uoaa-j8(F{Hbg677xYAJ_Ao!x}gS8ENohoZ|YbSTKknr}w8!@YAIz%xzhJF)`SuQW;} zMI+X$p4UHzoVE}gJ>yk~WYR(8>N@q<2_=WQxsutE5X|9*JZ3HqPZXvj?&9!d&S=sj zG!=Wp&i53uUfh6$oI+<8y+@8hWcwW^ zJ*OSU{lwR9LDEMK4(cUCkKpsa+M|V6;6XFFUeS?|Oh_p2Q_MTwONAZ}MCf)w9vVQ& zB<%#wEzc(B@B7WBKu4gS{#^Q)GPLh=`mZ}2C~DgQ{Cfi1iJKj<&fCYQF;K6*6kaoz zI7TU>dictaH~Xn9vRf3heJGn$r=t<2Htw>{kl2#dTK9y9u-v*CbXh?dKDf#3xLH|Q zP1Jg2-dYa2GH_)8uhIcaYOLp%JgFDU*DK=n-sCfys0Girbjq`AXqY7|*QX-aU}ZJ4 zrN-fwzaKMKQeL8ySOjNf&H(7`Qr%?f+Ubzcp!PLCQ7`4V$KdF9O@WRlQUYStFNh)KHDJ=>KW&yWiPf(W0uusF|uw zQPo-h_wAD-)a{N!@o z?tDJ?e7|4g9fQ=ON^WBgaS$Z!{AhN|IcNrn2PS=L!uZ7z?1{DYY@3O&>K|Jq|G>#O z(euR@+V;49@0&(~!v>?tz7yvWN*|IUGJ@(h>W>zROcHB*bG^nnz}a=Gp0K{M0`;s1 zciqxR@y6 z(LEo$=v;vLk|==VtGx9k^U&c}->PO$(9_cgGq7Bh0Ib9nL(ndh5@)1x0#IGxx)S3K z{`ow?G$6zG_d^oMY0RINnLu@QqZ_KK;v?Ap{b&HV5f8_3p}D+}4W9zZyy*F#8e_?t zD3Vv*mGVO8 z-)48V4s(NjRKN`(-2ve>x^+=bJV}dA?J{VcFDQqLn_%Pbm5mn{W>E{ne7j)VnUES@ zlWnPKu9y+c7puYj<`_B1ulLtMn*5TLs2)HScN|{GMDX?`Th+96uzSM}EJjq^l-y_U z39WoSrZEjs->Uc0l9jD)+ylXQgg!m2J(HM*5yRU{+`WCf?-+Nu^k2)i4q8#DGU%;s ztf|r2(b17DL@^^uX@n{8+w#Q1?migQQ78Z%WY;Ln1PelG%6wQ=_#BD1c zFbdc_FbWOzR+!+iW0Xz-$odTr)hm{C)=4EWOAc!2(KbklU#+jZ2CSe7Z;wYY$|$*Q zYQ7YFyk}23E=4dgE`=r}&E6VQ=`DZG&C#(F5CH%#V4Pni3~Rp7w@gk>b_6QQ{P}WIJG_74+UvPV;7Y^ zJT*Z%qvqA|vD&j!&?{no$FNjEE_}Zi=r#Zxd+qBV$@tgJ%}F-%REd{WgKcRVa{v{y zCe~VPD`x0c5HmDQ^IvH9dk0j^Y#iAMv+dgfVY&KrgKR(ejIeD$dX3-zoCy_lqMy=$ zP5M}f9X}ew2Rnsyt!sbPy1su3qKHa|@u4OsM@PYL|9)H&7;&KtoSRs$IUS5{N1s0A z-A#=!4B!0xJTy-?BOU9%IXC1jr(pAixU3TqHv(WmL@DCvFwe^W$0-n?w$L6==#_iK zPyKs2fR34Ee$zq*S}@5Hv(i^g0JRtgzKujcp)Cb2EkC&Nh~teVGyg}so*K1myaF8^ zovtRHeMNTm_yy>e?&`~B#8u8K^ylu%x?i{)9?J4T2@`E03KxadKLc9Dn2?YV4}(?G zVH~r2nil`ZpA%(E3})u${D8IQ=hsP1M2^VYl^;Klo@ox%6;N3gtoi%e9tU*;_BFp` z&6nmZUo%lSK-^|K>AEW!kaD~29n+VG6>;3a4TuH2pBrE7pPhiQ5H*g~L`jT|Tc=6} z1qFm*>=|hT+3zel=@}a%6Sf!v8dTnwK-o$Xv}3noMpmdEznh`r<;XeN}Smk z5e}48nDoD|Su?T%TUuRBWqH$rjc%Ve07GK(=Z%It(E;u?B8e{)a2)awO1^WH5O>6O_Lb%G#>Q^Uu~Q|wK!H@H zOz&b~?Xr`6W^B%5b_1f#D(wU&is5)@q*C^e4SNsw9P{GxP=m%}4-d2AL@d$LGh<_> zoaf#seQ2MLebx_3u01{7*K~5}>o{1lBCqZ%&wqk{5I0Wjf0<{8V-F8So;~k0I5=22 z>)W98siuBm+~RN7EW7@yhW%aCf%dJ7<0^byVGnBz09g0nPSVaI2>SvWhGe{AYQgfI z{-}(lW8Y!0hI=VN+-jf!%9>7pyXO8n+jsSZGJ3>GPF{WmczGB${exElyA<)P|G74t zx5Ds`VE^@-dYWOCVi&|9CtUQ>sk>5FquVQMYEnY>e>recWev1SWL=pk-Q8Nh26UBR z9qDc}n5mQD%I927TNs_N*Vs-x4=Z_9B3_R(-diLM)N-ru&8U3tiw3h=14dBFrDY6> zBQ|wBiwU9+BWIqui3Q;O*N}hhH#gU|MDX^H`QI^KX5fRVsj6-%?T_Kua*DclU&#wS zD8m0IoQ1DBuN$vAubY3_vCEo3P3#tptP}%NjWbZ99s#c>KM;2EE$lyZDB`?Bx;HeC zX_3*t&vHdZ4~U?~;yDX?duVB*-}>U1FP(km&KJ8`E*};IkT)M7mirAPJDbF01;6o= z9vm_k0UB&~NVYoivHkvYhB`IlVQnngSgLAUQJ2U1?q!q;Hut$>yj!(mYe3sY@#P~m z;1qg}I3yyb`Px1{Vz_D&=`n4x9#4qQ!slC+1RxcwM)G!P@~y6VnBV+}BT~UIESz`e z27(`?Cdxa}Wl+Y;Q---u9Bd7_%S?+^P7S^j?P-7C7!Fk~>RwFmc*Zv!xKiw=?ZM|4 zsmJ*xc%a3s(Q?B85G=Z*E{CT{Ml-m$gYju zH&4n;wm~>*0lck3_OR2LSsabfYMIT$+R-D17w2@7!P+Vs|>{=btV>;6rklv0a()e>9=6jcM-QIP0JoJ+vkb$X6Y`Q>lei7 za`dpjQM9M|QWx4WMrnITTkq@S1~T4HKq54LTtHyQq-c=gdGg1Pz9->aQlx{48$_$T z#t;q7Yy&!Pf!ONl696NI<_#o?!+R}y>?()^yRD>|4MhKXmm}gJ`{|mwvzR5irm3Q$ zqUT~eHh6q^H~|Q-wpCPA9QKNs{ke>@lE}=aYE8Mh-+;h7&aY+UP`s+acg+!;>E<%A zWwgvojUqZsu0DZ7Fh)j3ZYX}tVo^5dUfU2v_6_}#kQYonh*V%ATx~dh2?@MPYwuT> z^&E{s=1v6TsnSW(`wKeWP~MNoS2&vVJbXwv70P0HNQSxAnB^pMiyL>j7x zK;*-t*>DzDW+tW&-+LZpJbCp&eB@g2WsZDA`$c4G3iGS`?*Nk{1g--_<)yR|cEnSE zf0>H&Nj}HAiUXjC)3jO^Ml$!)*bi)0rgn^G(pMTZWRfH+#4~UkT70o1r~972FM67) z7!2h;sR%%0LnSdWF}R?!%YuHx{S!H|4r-;YUVon?21a#+hzRXgX`zlxWREO75BI=B z`>skmyRWw{WGbp_jo$|tCG~uoVNH7$VsqHsE$tIJz4E!Ef9%?Ok?IFK;ox#G0+&O6 zN8JfQhunR!hVP}l= zpPCpQO&rA{jsgnc{qeVJv<18l7gO9`=fKV<__kRZXmx)btAyKr?+y960C>QvE+0() z;$uPiqh!KCkYO)Yny^Cr;AQ;DtkUD3ORtZw@$BLL{uoDB*HGPQSLwFRC7WNJnx)g$ zklK+Q$%|)u0F|0Yp-?L4QpDQC_{W(QZNuXO_GjQdP4G-uwQ}7ETTQV^)!-PzspRYE zn&%H-w=eH>VW;d7(YV8-$~#VT-`+Dj-h;b%JfSl~XB?{%IWJ#c`q1`d6Koq@LrUs} zuY5&TsRx5v+_?y2WO;lbpD0v zmS=M1UmQ1hHqEBiyHGL`H|Pb?%-(wgq}Gf;aS{%6+Dne-*zYWVeJ$+|UUO^JmZC@H zEr4Sn6BGO1Jgj5<8CJ;h2!j&Gxy+BL zZs_lO)%Fun#^dATC0%<7pvFVL=qMv+{3A$Ls&wbx?#omJ!sR{7n{?0Lp;jNaUg3x- zA6>f3Z-C5Y>*F?WUpYDT#3>917jclkL zDQ|dWqsdV!ZP$~f2_^_0;uQDs z%0aF!soD;9-67&S-6-70F4ZBtm&(Nb*ibA254eDp_oweJ@ZUo`Gm3nuWc&VUD!Ie) zWs?_<)2$#vu5@fEJU>oEr`O#97Y`H?yA0q~sQTeP%K5KE0#-GV+w@G(m5KWvbuPd9 z{^L$geVnj{f&m!)Qz;r50T;=gusZ~~yRJ|W-(mmN#x3#G;u7alCDH2mw@uFniX4X~ zvb;1MaJX}_8Ly-_(5KCsM_FuD~p4vRE@FAEz}hwbgy0zGHb?Z1XhRS zhp(<~GMUk>Gxb5c*bG&|N_<|}NmLc?S5&75+_`d2>E_6hNP%%>UevHiM754744YUk zhibGmO~U3D7CJ%Q+|WQcZU0wEVSQ!N6KP^%al4reN(y-Yn<_Q&uChm!$kFy(nSKAs zX=2GlH|0g0SA14~U(ZnC#i6*S1QwjdGE9(Y+mwn7m4(Q!w$P?+&&CUmqw6zR0oa!T z(#>F3Z|}<5ij|cP0Iw?r+CIhe1ES*fld?pq$37>{50BI9>33$zhp^@~;J>v+ks4!h?=-j@q~>-t<5>$@!-;8=Wg3647V70`_ta(rkj#rIJZ08}~LQtZG444Dd7r<_$zdMC?iw4HYlM8KHQ1 zeCt(RO0ayKw#r4*N$|7{QJkr5dTu;Xeq((0^!Qe{W~-$|({&e4Jj#&M6XoN5u$Q(j{X{(xsks-9*yT=ZgAJeDj>PKDu(u z&?d%~HgJ40^k)E;rfIsmXJ;eupHTW?#|YCZIlVE#hk-rXWBWmSbjw?Y?=^Sj6*8bg z=i?Jj4AV5VVT{D5xREO)(jkv+$qsL`EG?zp(ZRvg+0_+u!_7w+RCY;xpnw7eYlAGIM5)m0pMi0J4t*wSn)_1_!S^PlWf;d#&f`?o@=`TKbSkn|GMYq z=KLi%(#ZSL53BT?uEG)=Q4wDT3(-JKBIUF=2OQ5Qm+qB?nkG^){L5O%tW~fKX zM3P4)YpEvQxLqR_umBZa#9nR9w6=3~EaeT+dJe)Ae70I%8=}(~csevb)95J`4YB~F zT%b<5r(6vq)uUc(P;hZ-qRiP}#NIlQe@kClTZ2oo*e8D2v{w4g z(x2{nQl!NJ<(L5+0auP0=5=!5j6|D7)> zQz@tJox-2_F{dvbsm|3lx-EGv9CNj}onY&=w`D61+&C4$FO38!88blG0BGiyGWQ`% zf-g)PsN8!RfckraTp-Y^`>5TL_G)5Rwawkv&r|}a<=4nv@GT?$q9N1IoMS>XQi-DS zyZeCf-bLk%ayd0L+obWtb{x#k&c2Le0UEg=VDpwYe}bb)8GljCSSburGBip;TzV~0 zUSz!f;hSStOizHUfA_D`t$-lD(hyD)q9PK}g@i!T?*?qmgY-I0Vm(K|uIF_B^B%M1 zdJ8XrPm8+wP&`~8e{HF0L|*hOb;ZgV#ySCB=6 zkQ!&|eHJbnP7S14Qa@@4R33;0l?QBp0aUQlW<)ImkcS)9piWVM53SWx@4FO(RW55U zAc3-y3!&^x&doi!!4YXm-luZC_Nb(}3i~s5M18D9ECm%yIrWtuZ+Vv+h(a+zTMHd! zLdGSfYQt~O?u*?r=T?wZPzce)P%`vIE8t;0=G;u@&gEWs*P0(J>F{1RiFWqU5M&$l zgbJlCeeQjEh5Xiu6cmo8r>ED2&S^-?og<(5#ab$xGq79-GQ3t`q1*uX ztrZZ|@-wq&)84J85XuK38&GPwG3ip;cJ6Bhx>=9M%KEQ?S`-1CW*s>8pu<^vCfBfX zElN&L&XJYAMC`YIy03g0TQck_OScL3_xIl!n4COt3fM0Z@MWY6Q!~VNYf`gf zA2}x3M$?$6u?u7@wYsy;Sd9G53&xcEQF-QG;kO*CDNuusevz@+`u5E9G-d+u*#ql* zC++~-H!(Gz6&$;VNAQj5^f|dLx+rONrlk|%f3d|tB8F`?14pK-BE#2u+H4(#N*Z$n z13I%0X|PM|`#rx3<2zM;8XRQi2v$YSui8mBWVWfR#zeB6Xd?;zoSk}B2*656CvNw9 zS$Lu0j$LP07aA<{t?|?oKbmTOe*@fO)c5FrM4K2M(it;+r3c?^5P`X|X{$Ha#l4`` zu<-lUe6bi!xf(aF;c|34LRv;Q>ZY1nXjGxac^cCX5Q?Su6fsLBO048`m@o%&ek7*i zAR6=eJsc+;#lCapnK-Ei$dDnDQc{-S(tjr^DA+J-Cl{Y zZEC#)E7-1`j}*J5MM*Rnr0B)RZEIHux99KZA|TX(8DC%Db5|9EM>Vo~KlUE5l?$w)L7LM#?T}FH|x-!IDNLzAmAV@WIY{Fo%i)5E~`r+Jt2t7xrc8T zrQW?n^GpcyK_hq%vWG{=PhSrI2i37>D%<;Atb;Hrab7kQB1X9IPDEM)j-Ncm*$zf@ z+czLuLP|;%Fd5$Rt(-sHWrq9uZeIj)Rh|r|)zN?c7P{=^*$qss=a(PDq95E)BW&Zr z!Q=Hoi>+kVbO(=r6jIny1*UjLT>%{zSmHrph}zAj8}$#yAGQj-gG>lx4kDrGPN8{0 zmtGX|saez+sGYa%APXUXuHQNEMG2?K%KT?gCawUs%YUU}c}#HRDdiXYa$acv*w|j( zjxKUJBPR1wyft4_eZ85VWz*>7x4ynr8wSi!?wJuk&#m6at$Ct=EBC6b_x2Ecp|3d~8$YihihI5MK)+$fKq(>A5dq?_ zvs44tovit_t@N|M`b$Ztf4Al4@@Y@10#EM)6_u8O&wA<^`~!Zeqzc=+n2+47!*3se zB22%*^$twUczRSGC|(l*a15OIjlHJ0i<%+a+}zk=aw7^wxKJ=-jtWJav}YwuFj&OyiG!@#TqHP0ohagvOej5D@;b2ikv(28E6k12&mz<9i;ww(8E zIWH!&WlAhtQJ8xoB_#z1lO@Erj-}7qY<2h{GFw+ibc*l zl=Qw{>MrIBPxIV~jE>&L9v$x2cQ`Gi`AwUK?h%m2bq`oxVaR-Z9eY{T*#Oi_F5T5c z1n74Lg~$0#dGDcNfj5mNvF4t^g47`^D8eVRsVO8W$&1zdvYRSw=2eI}$7l*D?Q|@X zsQ)||53sQoUx%S8C(7iP-Y>@Pgsarz*r(GdKid)ZZG3ZcvlH+b>n3OJ{`!?J8~odS z^?dY$lJQSy?*!RT#F-yafudZE0YND(je{$-gHFY}2)=d$(Izu`mMB_*b*o2*hiq0x zE__rlRkf|imkP0%c9b#c<>~XgLyJq>y#vD~8A#tI-Ekl7KHOE1A`<4Km3#>V!uo7; zcrS&f>y+8LXMw2bvcfw6Z$(9&^CNWry>>zC&l~T{3TznYPq*hZ9=(DpO+SK%*mfS& zIAmyY<1SZBjVpl+`ff+MI?qz=8*83MuvMi0x$NNTx(>EVNLES7I#IMq?3>VVQhPQk za!XQHr_)2{#Dr{!)ic1J_kK|2#(&rgJQIlNKfhfIBMzM?oRN!FeT6zC6HeNpHk6{az)~>~Md1&GK zkKZ@M2)wVo5g-2m=Ub)iZt>pq-HZxfLE}!#5`HR+AUU}zIhn)Q+`RA%g^Ow{umR6$ zv_b}X{)5^*<=;Z-47%07lHjpcLlP%uXzX1D4plg)O5{B$o?ZUQ9T}PsU~~ef2h@Zb z1_rTGl|&cSrt82h8B>CrSSp(EZU5$(G9_cL5P?vIN*G>p;PmujX1KfDmX)x$ zrQEeogX{uzI8K3$GkenB2@kt871zf;r~NQ2ENrWFHp2RqKH=lO;4R{1Mvp`Z^Lbsv zbZZ7D#s9t|sFYq=({}K9E&`+c1UWCl+DkGWEG~W-q23UxGfob57*VS64RL7l1(wZv zKujamd7c3Fydpk6zA!p}GQm}U(xj?Bk&zW|?`@W$pyV<4GFAzmu$vRND*)DqrIIOp z5DhkW2jzQ1akm?!zq|yOj8oskxKf9ez7uciW7?Bs`IX!0%Fq8ZL?StcG_`^V)C=L{ zZdJAi`%1NEVkUM|MJ%FD}Nefc7o zmd4dFa1M>(yLDs6#tZ{(yth)duJD-~t=@F_fJ7$hqf=mkstThE1%1oc9_X)EB#cGI z?Y=zV9LHOF@9n)WD7MTpD>@T68S^68;$fDp>%-33tc12J?;-V&&P%LTs;j235S`si zo(F)cmQ3_Bje>fn#yq_@PA=>(QA5E-c-J=@s#XA5ydKV?=pHl6bIb$P5z~WQ#}txj zhl+++!pFX-pXd0n(M0zgu?-Gk~79YMX zEG2AB2@v+P;x<0-*v`A$=UMW%o)#yK_kGK;>4SG$0HXstqg1kl)XSD1a83@6U!YQM zq+WeNY7`r(f;7Q}`!VVEw8?%XpriK~-_4acEq&vYI#zNq@GA247-8%Cd~0j#eSrJ> z>`{++2y^ZFqL$vve_xs?R>rk8Usv< zlZ%YoDAQN*Us4P(u8OYSR}!c5#Em>t7;egO^6m!QBq&@bP^%Au>i=14w5SmjS|P}$ z{-oz}QrHo>N(8YOBt9Xb_mcU~p$*{~7#!;zs|{1ws^lf1WJ8bi*IvgpK1bYSCr#&Z>2}Opod!Aym7A%2DkL>q=Ya z@>&a>@Yy>u*!XN^X7>IHkil0%bz=^`ql}dlggKMZ)Y1k?M>ueEZKrVIDLnk)y>7pbjZB!!*G$>FmdoJm-uw+g?&=mzC1X0*vUIg?5~x3LipVnH=p=z`bs1u zxi+;5?$hA%*Me;X1afy_VasOV!@_&sISxPig;4E@v$X+EM_9iGOLKF10C{-z&vo~1 z)V?0GJb|`##?xPl(wtiUBqx#5Mv>t?vO^9jPhn@_>@MV%C6*;qV`=a2lIz1xAvGtd z^5X{7{EBu8%zI?FJ?CH}cIzk=iYvm})BW{I>K%%Diz`^}$FR|BEdY_LCH!1yJ4TjM$4#-@0pof$5-PuG$+s{LUmy0e zc;G{?yX5&ZWq6i(BH+#lymJG5Z$JPUIIg>ZYbjh`bP;9o!8AO_HhXeCK$J(M*-k=3 zNg25^Ei@96W1*8BlE40m~kxIy+eA$epEKIL+sut{q^yYE#uG-Hu+%A`!W z*k5mEbvtYAhkJcR#kP1I?gD2MPJh}*)yc4PpSjMJ%X8|6<%@Lpx*8Uh()YaTeLigK z+h`1hG^}dGx*)XI>mk4x>#1l{<}ldl_noj*-jO^Lnw~lcU2JvV*t7A)HmZ#O`<(N%E7+bdCAyc5+(psctpa zzw^NB_W3;2Mh0U;>jpbEOsB)68GY@Q_M8Nc%ySM___`yF))DqW;*-U&o*^|?qvFOD zKdAOKjev~!Ek#iRjJs`cKBtYpy<#!Cwt3|KyUJL8-CRo$ej=^d+It`Z8oWy&AvK>I zXWiWb`-=(dOOk@8fbSpd`Ip zuif`>-t~y#uX)pF3c|Vf%xa1(9;?^om#e~4e6D)hF5ABw89f>4pj8qCwpfhCZjR7> z%aGxy8J&Xm24~*Zt57)~$yNj3>8Es%y5Udh)q%O@+*TEVd1sp64mGHQkUVaZ7*K~3 zGOc$tU#MTp*U?S;4eqSs6Z>=qflFck3{Fl?z9^yZqkZ!vYoA43ZOjn-n8^R_>nG}g z8`?*j&6TitY05^a%jzs>Sm2}0*W?&B9~#fDA#uq?2cwjea`_Dq-S_w$-XC(c+2Uwv zo?eT1nQS-XB%f(kzdG0^m_2=0XwGDUX5G+=iPOk{+rRu5!!-QZM=&$%OF=#zz!hMb|A zmqQhqm|}GW^B77lSx3HWo}KLSk6hn*F8s^~Fr_gTHL@$C*L6qFo`!okj-GS2v^X<9 zI4J&w)#|k{CUuK-hhGG<8e3a#JO`~y4gcGpU}>?r&uA`AImL2NXcoLV-{Yyef3>I^ z?=LRu0q?f!^r=eh{XHEgBi@*_)=>NyYBKYr{wrzzOB=rKgz!;;VtL&DBQ#8;=46P~ z$4qFz3>sHt-e9&qY{X4jTVX@PdW4U5#c###(0dp)dSd57&UH3?Yp;#-N)yPa+`7uM zWQ=NzUc8Sm@`Cg<&oZAA3&$*if@6fW-{cF^tngBRex~5^(?OA-Cw+o(wnYvwcYJy!} zcO18KMFHTX2MrsThJ&_CR>Fa_>nXhJz+3h13CDM3<-vLV!tfd4wpdDoHpxw$v>{rU zO}XM0&-~A_tTRH%e@N>Uveb<%$7XAJC*!9aON0^p1?5s1MaqV(9lQBOx-2iKUvtamcXL<0JjF zDpa!~yQHg2g)G8r@htiPT_fODnswu{_gVV%7wtwjEsuPg>C-A3SDq#g=ug8Nw+^)x zK5bpaz1qScjzV|wYTR`rR*19{c8SWntJ6&rO`yVf2^x*gM~6q{EPL@=qMByL1~nP= zCD|%p+`GuL6z`|eM?L?Gb$9I(IVkcLpRkFD>0gX7qyUJrRk^C19jz8Z%7v%_alqyQ zjaMD4!M9HDZRGkVX|jw1v*#e|f)>j1g=K@z3(VTpGlAcWMY6U0&(t5C{$78E67r3W z#Pu;{lXsc-%*vSr&yl(++OOA?XMXT5B~hPW%l$3n|KdSghAflaS+|MvJWCb6S|$@p zc8K(Az1N^?U$E$bLD(U(`=r9Hqh{Bi&0mf5)@uT(vmd2@S3XhNH4Z;{hT?*@;w-~G z{UtwDiA@-jkeM>md)WMl{l7LU zTAK!)!o-pN)6k#YMn4%DH16NHX>&SZlmbV*3nH0*1?t-IAEvk!0TB^x1veD@n$^mt z9C=q6SqqQ)wU2wmH(Y>7f=>`KE$ zlc*3DqgD}wvAk|-GhbC<=pHtMcRjR$w4w2_5n5-}d+X?sb$7@DvH|j&5)4MshyKj5 zI+BJ)HvIbiKfkE|`?Wwc|NWik->(G Date: Thu, 30 Jan 2025 22:37:26 -0500 Subject: [PATCH 0059/1184] downgrade node to 20.18.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index af7519d616d5..d4d4aad1955a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "license": "AGPL-3.0", "engines": { - "node": "^20.18.2" + "node": "^20.18.1" }, "repository": { "type": "git", From 1ea3338b4c572482a8d7dc51ed516b67429ed65e Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 30 Jan 2025 22:44:50 -0500 Subject: [PATCH 0060/1184] cleanup manually specified tenant filters in actions --- .../email/administration/tenant-allow-block-lists/index.js | 1 - src/pages/email/tools/mailbox-restores/index.js | 3 --- src/pages/endpoint/applications/list/index.js | 4 ---- src/pages/identity/administration/groups/index.js | 4 ---- src/pages/security/incidents/list-alerts/index.js | 2 -- src/pages/security/incidents/list-incidents/index.js | 4 ---- 6 files changed, 18 deletions(-) diff --git a/src/pages/email/administration/tenant-allow-block-lists/index.js b/src/pages/email/administration/tenant-allow-block-lists/index.js index 508d5c67110e..e0348868e263 100644 --- a/src/pages/email/administration/tenant-allow-block-lists/index.js +++ b/src/pages/email/administration/tenant-allow-block-lists/index.js @@ -13,7 +13,6 @@ const Page = () => { type: "POST", url: "/api/RemoveTenantAllowBlockList", data: { - TenantFilter: "Tenant", Entries: "Value", ListType: "ListType", }, diff --git a/src/pages/email/tools/mailbox-restores/index.js b/src/pages/email/tools/mailbox-restores/index.js index ffa463800bd5..d9956d0d742b 100644 --- a/src/pages/email/tools/mailbox-restores/index.js +++ b/src/pages/email/tools/mailbox-restores/index.js @@ -13,7 +13,6 @@ const Page = () => { type: "POST", url: "/api/ExecMailboxRestore", data: { - TenantFilter: "Tenant", Identity: "Identity", Action: "Resume", }, @@ -25,7 +24,6 @@ const Page = () => { type: "POST", url: "/api/ExecMailboxRestore", data: { - TenantFilter: "Tenant", Identity: "Identity", Action: "Suspend", }, @@ -37,7 +35,6 @@ const Page = () => { type: "POST", url: "/api/ExecMailboxRestore", data: { - TenantFilter: "Tenant", Identity: "Identity", Action: "Remove", }, diff --git a/src/pages/endpoint/applications/list/index.js b/src/pages/endpoint/applications/list/index.js index 5a3d8eef0cfb..67e16ece37bd 100644 --- a/src/pages/endpoint/applications/list/index.js +++ b/src/pages/endpoint/applications/list/index.js @@ -15,7 +15,6 @@ const Page = () => { url: "/api/ExecAssignApp", data: { AssignTo: "AllUsers", - TenantFilter: "Tenant", ID: "id", }, confirmText: "Are you sure you want to assign this app to all users?", @@ -28,7 +27,6 @@ const Page = () => { url: "/api/ExecAssignApp", data: { AssignTo: "AllDevices", - TenantFilter: "Tenant", ID: "id", }, confirmText: "Are you sure you want to assign this app to all devices?", @@ -41,7 +39,6 @@ const Page = () => { url: "/api/ExecAssignApp", data: { AssignTo: "Both", - TenantFilter: "Tenant", ID: "id", }, confirmText: "Are you sure you want to assign this app to all users and devices?", @@ -53,7 +50,6 @@ const Page = () => { type: "POST", url: "/api/RemoveApp", data: { - TenantFilter: "Tenant", ID: "id", }, confirmText: "Are you sure you want to delete this application?", diff --git a/src/pages/identity/administration/groups/index.js b/src/pages/identity/administration/groups/index.js index 1fb57be03d1e..934526687979 100644 --- a/src/pages/identity/administration/groups/index.js +++ b/src/pages/identity/administration/groups/index.js @@ -22,7 +22,6 @@ const Page = () => { url: "/api/ExecGroupsHideFromGAL", icon: , data: { - TenantFilter: "TenantFilter", ID: "mail", GroupType: "calculatedGroupType", HidefromGAL: true, @@ -37,7 +36,6 @@ const Page = () => { url: "/api/ExecGroupsHideFromGAL", icon: , data: { - TenantFilter: "TenantFilter", ID: "mail", GroupType: "calculatedGroupType", }, @@ -51,7 +49,6 @@ const Page = () => { url: "/api/ExecGroupsDeliveryManagement", icon: , data: { - TenantFilter: "TenantFilter", ID: "mail", GroupType: "calculatedGroupType", OnlyAllowInternal: true, @@ -66,7 +63,6 @@ const Page = () => { icon: , url: "/api/ExecGroupsDeliveryManagement", data: { - TenantFilter: "TenantFilter", ID: "mail", GroupType: "calculatedGroupType", }, diff --git a/src/pages/security/incidents/list-alerts/index.js b/src/pages/security/incidents/list-alerts/index.js index 09e1411d9d3b..837db5087312 100644 --- a/src/pages/security/incidents/list-alerts/index.js +++ b/src/pages/security/incidents/list-alerts/index.js @@ -11,7 +11,6 @@ const Page = () => { type: "POST", url: "/api/ExecSetSecurityAlert", data: { - TenantFilter: "Tenant", GUID: "id", Status: "inProgress", Vendor: "vendorInformation.vendor", @@ -24,7 +23,6 @@ const Page = () => { type: "POST", url: "/api/ExecSetSecurityAlert", data: { - TenantFilter: "Tenant", GUID: "id", Status: "resolved", Vendor: "vendorInformation.vendor", diff --git a/src/pages/security/incidents/list-incidents/index.js b/src/pages/security/incidents/list-incidents/index.js index bebae5e2f983..53ac8ab1ef30 100644 --- a/src/pages/security/incidents/list-incidents/index.js +++ b/src/pages/security/incidents/list-incidents/index.js @@ -11,7 +11,6 @@ const Page = () => { type: "POST", url: "/api/ExecSetSecurityIncident", data: { - TenantFilter: "Tenant", GUID: "id", Assigned: "currentUserId", }, @@ -22,7 +21,6 @@ const Page = () => { type: "POST", url: "/api/ExecSetSecurityIncident", data: { - TenantFilter: "Tenant", GUID: "id", Status: "active", Assigned: "currentAssignedUser", @@ -34,7 +32,6 @@ const Page = () => { type: "POST", url: "/api/ExecSetSecurityIncident", data: { - TenantFilter: "Tenant", GUID: "id", Status: "inProgress", Assigned: "currentAssignedUser", @@ -46,7 +43,6 @@ const Page = () => { type: "POST", url: "/api/ExecSetSecurityIncident", data: { - TenantFilter: "Tenant", GUID: "id", Status: "resolved", Assigned: "currentAssignedUser", From 32cbe0277a43203638631961e22c77d4772f906b Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Fri, 31 Jan 2025 08:48:00 +0000 Subject: [PATCH 0061/1184] Add Speed Dial component with help, bug report, and feedback actions --- src/pages/_app.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/pages/_app.js b/src/pages/_app.js index 1dd1e6971768..b4ac447e1829 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -20,6 +20,12 @@ import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; import TimeAgo from "javascript-time-ago"; import en from "javascript-time-ago/locale/en.json"; +import CippSpeedDial from 'src/components/CippComponents/CippSpeedDial' +import { + Help as HelpIcon, + BugReport as BugReportIcon, + Feedback as FeedbackIcon, +} from '@mui/icons-material' import React from "react"; TimeAgo.addDefaultLocale(en); @@ -84,6 +90,11 @@ const App = (props) => { {getLayout()} + } + position={{ bottom: 16, right: 16 }} + /> {settings?.showDevtools && ( From 205fa4ca188ecb9060b3420a0f9147062ecc97ee Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Fri, 31 Jan 2025 08:50:04 +0000 Subject: [PATCH 0062/1184] Prettier fix --- src/pages/_app.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pages/_app.js b/src/pages/_app.js index b4ac447e1829..c4884343f139 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -20,12 +20,12 @@ import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; import TimeAgo from "javascript-time-ago"; import en from "javascript-time-ago/locale/en.json"; -import CippSpeedDial from 'src/components/CippComponents/CippSpeedDial' +import CippSpeedDial from "src/components/CippComponents/CippSpeedDial"; import { Help as HelpIcon, BugReport as BugReportIcon, Feedback as FeedbackIcon, -} from '@mui/icons-material' +} from "@mui/icons-material"; import React from "react"; TimeAgo.addDefaultLocale(en); @@ -90,11 +90,11 @@ const App = (props) => { {getLayout()} - } - position={{ bottom: 16, right: 16 }} - /> + } + position={{ bottom: 16, right: 16 }} + /> {settings?.showDevtools && ( From 65da8b660e90cc07a0e9dd46890ca5fb917d6ab0 Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Fri, 31 Jan 2025 09:24:13 +0000 Subject: [PATCH 0063/1184] Tested and works properly on my Dev Env now! --- src/components/CippComponents/CippSpeedDial.jsx | 2 +- src/pages/_app.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippSpeedDial.jsx b/src/components/CippComponents/CippSpeedDial.jsx index 805ca4a66fe9..4313ace7a7ef 100644 --- a/src/components/CippComponents/CippSpeedDial.jsx +++ b/src/components/CippComponents/CippSpeedDial.jsx @@ -14,7 +14,7 @@ import { } from "@mui/material"; import { Close as CloseIcon } from "@mui/icons-material"; import { useForm } from "react-hook-form"; -import { CippFormComponent } from "/src/components/CippComponents/CippFormComponent"; +import { CippFormComponent } from "../../components/CippComponents/CippFormComponent"; const CippSpeedDial = ({ actions = [], diff --git a/src/pages/_app.js b/src/pages/_app.js index c4884343f139..b764d3f36c12 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -20,7 +20,7 @@ import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; import TimeAgo from "javascript-time-ago"; import en from "javascript-time-ago/locale/en.json"; -import CippSpeedDial from "src/components/CippComponents/CippSpeedDial"; +import CippSpeedDial from "../components/CippComponents/CippSpeedDial"; import { Help as HelpIcon, BugReport as BugReportIcon, From 6c432d3d77631c3cc94d15cd560c2456dd9ff70b Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Fri, 31 Jan 2025 09:26:28 +0000 Subject: [PATCH 0064/1184] Add onClick handlers to Speed Dial GitHub links --- src/pages/_app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/_app.js b/src/pages/_app.js index b764d3f36c12..271c911a2c5b 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -48,12 +48,14 @@ const App = (props) => { icon: , name: "Report Bug", href: "https://github.com/KelvinTegelaar/CIPP/issues/new?template=bug.yml", + onClick: () => window.open("https://github.com/KelvinTegelaar/CIPP/issues/new?template=bug.yml", "_blank") }, { id: "feature-request", icon: , name: "Request Feature", href: "https://github.com/KelvinTegelaar/CIPP/issues/new?template=feature.yml", + onClick: () => window.open("https://github.com/KelvinTegelaar/CIPP/issues/new?template=feature.yml", "_blank") }, ]; From 8830a02a37de356486fe9d12c65ab24cc6eb1911 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 31 Jan 2025 13:30:33 +0100 Subject: [PATCH 0065/1184] fix reset form issue --- .../CippFormPages/CippAddGroupForm.jsx | 4 ++-- src/components/CippFormPages/CippFormPage.jsx | 3 +-- .../CippStandards/CippStandardsSideBar.jsx | 23 ++++++++++--------- .../administration/group-templates/add.jsx | 1 + 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/components/CippFormPages/CippAddGroupForm.jsx b/src/components/CippFormPages/CippAddGroupForm.jsx index 9745d9858636..49be141db5dd 100644 --- a/src/components/CippFormPages/CippAddGroupForm.jsx +++ b/src/components/CippFormPages/CippAddGroupForm.jsx @@ -51,7 +51,7 @@ const CippAddGroupForm = (props) => { formControl={formControl} name="owners" label="Owners" - multiple={false} + multiple={true} select={"id,userPrincipalName,displayName"} /> @@ -62,7 +62,7 @@ const CippAddGroupForm = (props) => { formControl={formControl} name="members" label="Members" - multiple={false} + multiple={true} select={"id,userPrincipalName,displayName"} /> diff --git a/src/components/CippFormPages/CippFormPage.jsx b/src/components/CippFormPages/CippFormPage.jsx index 585975b073bb..7db1575e9620 100644 --- a/src/components/CippFormPages/CippFormPage.jsx +++ b/src/components/CippFormPages/CippFormPage.jsx @@ -27,7 +27,7 @@ const CippFormPage = (props) => { formControl, postUrl, customDataformatter, - resetForm = true, + resetForm = false, hideBackButton = false, hidePageType = false, hideTitle = false, @@ -36,7 +36,6 @@ const CippFormPage = (props) => { ...other } = props; const router = useRouter(); - //check if there are const postCall = ApiPostCall({ datafromUrl: true, diff --git a/src/components/CippStandards/CippStandardsSideBar.jsx b/src/components/CippStandards/CippStandardsSideBar.jsx index c6a405de636f..2c87c7562fe8 100644 --- a/src/components/CippStandards/CippStandardsSideBar.jsx +++ b/src/components/CippStandards/CippStandardsSideBar.jsx @@ -1,14 +1,5 @@ import PropTypes from "prop-types"; -import { - Card, - CardContent, - CardHeader, - Divider, - formControlLabelClasses, - Stack, - SvgIcon, - Typography, -} from "@mui/material"; +import { Card, CardContent, CardHeader, Divider, Stack, SvgIcon, Typography } from "@mui/material"; import { styled } from "@mui/material/styles"; import { Timeline, @@ -24,7 +15,7 @@ import { ActionListItem } from "/src/components/action-list-item"; import CheckIcon from "@heroicons/react/24/outline/CheckIcon"; import CloseIcon from "@mui/icons-material/Close"; import { useWatch } from "react-hook-form"; -import { useEffect, useState } from "react"; +import { use, useEffect, useState } from "react"; import _ from "lodash"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { CippFormTenantSelector } from "../CippComponents/CippFormTenantSelector"; @@ -127,6 +118,15 @@ const CippStandardsSideBar = ({ fullWidth /> + + { return ( <> Date: Fri, 31 Jan 2025 14:22:35 +0100 Subject: [PATCH 0066/1184] feat: readded MDM wipe methods --- src/pages/endpoint/MEM/devices/index.js | 146 ++++++++++++++++++++++-- 1 file changed, 137 insertions(+), 9 deletions(-) diff --git a/src/pages/endpoint/MEM/devices/index.js b/src/pages/endpoint/MEM/devices/index.js index 0965bb50462f..a381de6b12df 100644 --- a/src/pages/endpoint/MEM/devices/index.js +++ b/src/pages/endpoint/MEM/devices/index.js @@ -12,6 +12,9 @@ import { Security, FindInPage, Shield, + Archive, + AutoMode, + Recycling, } from "@mui/icons-material"; const Page = () => { @@ -19,6 +22,15 @@ const Page = () => { const tenantFilter = useSettings().currentTenant; const actions = [ + { + label: "View in InTune", + link: `https://intune.microsoft.com/${tenantFilter}/#view/Microsoft_Intune_Devices/DeviceSettingsMenuBlade/~/overview/mdmDeviceId/[id]`, + color: "info", + icon: , + target: "_blank", + multiPost: false, + external: true, + }, { label: "Sync Device", type: "POST", @@ -116,17 +128,133 @@ const Page = () => { GUID: "id", Action: "windowsDefenderUpdateSignatures", }, - confirmText: - "Are you sure you want to update the Windows Defender signatures for this device?", + confirmText: "Are you sure you want to update the Windows Defender signatures for this device?", }, { - label: "View in InTune", - link: `https://intune.microsoft.com/${tenantFilter}/#view/Microsoft_Intune_Devices/DeviceSettingsMenuBlade/~/overview/mdmDeviceId/[id]`, - color: "info", - icon: , - target: "_blank", - multiPost: false, - external: true, + label: "Generate logs and ship to MEM", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "CreateDeviceLogCollectionRequest", + }, + confirmText: "Are you sure you want to generate logs and ship these to MEM?", + }, + /* + { + label: "Rename device", + type: "POST", + icon: null, + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "setDeviceName", + }, + confirmText: "Enter the new name for the device", + }, + */ + { + label: "Fresh Start (Remove user data)", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "cleanWindowsDevice", + keepUserData: false, + }, + confirmText: "Are you sure you want to Fresh Start this device?", + }, + { + label: "Fresh Start (Do not remove user data)", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "cleanWindowsDevice", + keepUserData: true, + }, + confirmText: "Are you sure you want to Fresh Start this device?", + }, + { + label: "Wipe Device, keep enrollment data", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "cleanWindowsDevice", + keepUserData: false, + keepEnrollmentData: true, + }, + confirmText: "Are you sure you want to wipe this device, and retain enrollment data?", + }, + { + label: "Wipe Device, remove enrollment data", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "cleanWindowsDevice", + keepUserData: false, + keepEnrollmentData: false, + }, + confirmText: "Are you sure you want to wipe this device, and remove enrollment data?", + }, + { + label: "Wipe Device, keep enrollment data, and continue at powerloss", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "cleanWindowsDevice", + keepEnrollmentData: true, + keepUserData: false, + useProtectedWipe: true, + }, + confirmText: "Are you sure you want to wipe this device? This will retain enrollment data. Continuing at powerloss may cause boot issues if wipe is interrupted.", + }, + { + label: "Wipe Device, remove enrollment data, and continue at powerloss", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "cleanWindowsDevice", + keepEnrollmentData: false, + keepUserData: false, + useProtectedWipe: true, + }, + confirmText: "Are you sure you want to wipe this device? This will also remove enrollment data. Continuing at powerloss may cause boot issues if wipe is interrupted.", + }, + { + label: "Autopilot Reset", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "wipe", + keepUserData: "false", + keepEnrollmentData: "true", + }, + confirmText: "Are you sure you want to Autopilot Reset this device?", + }, + { + label: "Retire device", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "retire", + }, + confirmText: "Are you sure you want to retire this device?", }, ]; From d6eaf09fef428c52f1565655b4b5548959c19e6e Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Fri, 31 Jan 2025 14:19:04 +0000 Subject: [PATCH 0067/1184] Add Discord link to Speed Dial component --- public/discord-mark-blue.svg | 1 + src/pages/_app.js | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 public/discord-mark-blue.svg diff --git a/public/discord-mark-blue.svg b/public/discord-mark-blue.svg new file mode 100644 index 000000000000..4cadbc7f7ed3 --- /dev/null +++ b/public/discord-mark-blue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/pages/_app.js b/src/pages/_app.js index 271c911a2c5b..e520d50c5822 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -26,6 +26,8 @@ import { BugReport as BugReportIcon, Feedback as FeedbackIcon, } from "@mui/icons-material"; +import { SvgIcon } from "@mui/material"; +import discordIcon from "../../public/discord-mark-blue.svg"; import React from "react"; TimeAgo.addDefaultLocale(en); @@ -57,6 +59,16 @@ const App = (props) => { href: "https://github.com/KelvinTegelaar/CIPP/issues/new?template=feature.yml", onClick: () => window.open("https://github.com/KelvinTegelaar/CIPP/issues/new?template=feature.yml", "_blank") }, + { + id: "discord", + icon: ( + + + ), + name: "Join the Discord!", + href: "https://discord.gg/cyberdrain", + onClick: () => window.open("https://discord.gg/cyberdrain", "_blank") + }, ]; return ( From 392baf39fcc77bad3da2cdb0893432d94729245f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 31 Jan 2025 17:02:59 -0500 Subject: [PATCH 0068/1184] fix graph explorer in offcanvas fix scheduler parameters --- .../CippFormPages/CippSchedulerForm.jsx | 3 +- .../CippTable/CippGraphExplorerFilter.js | 72 ++++++++++--------- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/src/components/CippFormPages/CippSchedulerForm.jsx b/src/components/CippFormPages/CippSchedulerForm.jsx index e18e9c57421a..5bc71dd02211 100644 --- a/src/components/CippFormPages/CippSchedulerForm.jsx +++ b/src/components/CippFormPages/CippSchedulerForm.jsx @@ -206,7 +206,8 @@ const CippSchedulerForm = (props) => { formControl={formControl} > - {param.Type === "System.Boolean" ? ( + {param.Type === "System.Boolean" || + param.Type === "System.Management.Automation.SwitchParameter" ? ( { + const endpoint = watchedValues.endpoint; + if (endpoint && endpoint !== currentEndpoint) { + setCurrentEndpoint(endpoint); + } + }, [watchedValues.endpoint]); // API call for available properties const propertyList = ApiGetCall({ url: "/api/ListGraphRequest", - queryKey: `graph-properties-${endpoint}`, + queryKey: `graph-properties-${currentEndpoint}`, data: { - Endpoint: endpoint, + Endpoint: currentEndpoint, ListProperties: true, TenantFilter: tenant, IgnoreErrors: true, @@ -141,16 +149,16 @@ const CippGraphExplorerFilter = ({ }); } setPresetOptions(presetOptionList); - }, [defaultPresets, presetList.isSuccess]); + }, [defaultPresets, presetList.isSuccess, presetList.data]); // Debounced refetch when endpoint, put in in a useEffect dependand on endpoint const debouncedRefetch = useCallback( debounce(() => { - if (endpoint) { + if (currentEndpoint) { propertyList.refetch(); } }, 1000), - [endpoint] // Dependencies that the debounce function depends on + [currentEndpoint] // Dependencies that the debounce function depends on ); useEffect(() => { @@ -159,10 +167,10 @@ const CippGraphExplorerFilter = ({ return () => { debouncedRefetch.cancel(); }; - }, [endpoint, debouncedRefetch]); + }, [currentEndpoint, debouncedRefetch]); const savePresetApi = ApiPostCall({ - relatedQueryKeys: "ListGraphExplorerPresets", + relatedQueryKeys: ["ListGraphExplorerPresets", "ListGraphRequest"], }); // Save preset function @@ -278,13 +286,13 @@ const CippGraphExplorerFilter = ({ }; // Schedule report function const handleScheduleReport = () => { - const formParameters = formControl.getValues(); + const formParameters = watchedValues; const selectString = formParameters.$select ? formParameters.$select?.map((item) => item.value).join(",") : null; //compose the parameters for the form based on what is available - const Parameters = [ + var Parameters = [ { Key: "$select", Value: selectString, @@ -309,32 +317,17 @@ const CippGraphExplorerFilter = ({ Key: "$expand", Value: formParameters.$expand, }, - { - Key: "ReverseTenantLookup", - Value: formParameters.ReverseTenantLookup, - }, - { - Key: "ReverseTenantLookupProperty", - Value: formParameters.ReverseTenantLookupProperty, - }, - { - Key: "NoPagination", - Value: formParameters.NoPagination, - }, - { - Key: "AsApp", - Value: formParameters.AsApp, - }, { Key: "$format", Value: formParameters.$format, }, ]; - Parameters.forEach((param) => { - if (param.Value == null || param.Value === "") { - //delete the index - Parameters.splice(Parameters.indexOf(param), 1); - } + Parameters = Parameters.filter((param) => { + return ( + param.Value != null && + param.Value !== "" && + !(typeof param.Value === "boolean" && param.Value === false) + ); }); const resetParams = { tenantFilter: tenant, @@ -350,6 +343,9 @@ const CippGraphExplorerFilter = ({ Endpoint: formParameters.endpoint, skipCache: true, NoPagination: formParameters.NoPagination, + AsApp: formParameters.AsApp, + ReverseTenantLookup: formParameters.ReverseTenantLookup, + ReverseTenantLookupProperty: formParameters.ReverseTenantLookupProperty, Parameters: Parameters, }, advancedParameters: false, @@ -375,12 +371,14 @@ const CippGraphExplorerFilter = ({ function getPresetProps(values) { var newvals = Object.assign({}, values); + console.log(values); if (newvals?.$select !== undefined && Array.isArray(newvals?.$select)) { newvals.$select = newvals?.$select.map((p) => p.value).join(","); } delete newvals["reportTemplate"]; delete newvals["tenantFilter"]; delete newvals["IsShared"]; + delete newvals["id"]; if (newvals.ReverseTenantLookup === false) { delete newvals.ReverseTenantLookup; } @@ -390,6 +388,9 @@ const CippGraphExplorerFilter = ({ if (newvals.$count === false) { delete newvals.$count; } + if (newvals.AsApp === false) { + delete newvals.AsApp; + } Object.keys(newvals).forEach((key) => { if (values[key] === "" || values[key] === null) { delete newvals[key]; @@ -399,7 +400,7 @@ const CippGraphExplorerFilter = ({ } useEffect(() => { - var values = getPresetProps(formControl.getValues()); + var values = getPresetProps(watchedValues); setOffCanvasContent(() => ( <> @@ -425,7 +426,7 @@ const CippGraphExplorerFilter = ({ )); - }, [editorValues, savePresetApi.isPending, formControl, selectedPresets]); + }, [editorValues, savePresetApi.isPending, formControl, selectedPresets, watchedValues]); const handleImport = () => { setOffCanvasOpen(true); // Open the offCanvas, the content will be updated by useEffect @@ -555,6 +556,7 @@ const CippGraphExplorerFilter = ({ multiple={false} formControl={formControl} options={presetOptions} + isFetching={presetList.isFetching} groupBy={(option) => option.type} renderGroup={(params) => (
  • @@ -594,7 +596,7 @@ const CippGraphExplorerFilter = ({ name="$select" label="Select" formControl={formControl} - isFetching={propertyList.isLoading} + isFetching={propertyList.isFetching} options={ (propertyList.isSuccess && propertyList?.data?.Results?.length > 0 && From f740ad5a73220e10b8acf219da29be84ea55dfd0 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 31 Jan 2025 17:10:38 -0500 Subject: [PATCH 0069/1184] up version --- package.json | 2 +- public/version.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d4d4aad1955a..13dac459bf3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cipp", - "version": "7.0.0", + "version": "7.1.3", "author": "CIPP Contributors", "homepage": "https://cipp.app/", "bugs": { diff --git a/public/version.json b/public/version.json index ef511cf84994..795806e4fd04 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.1.2" + "version": "7.1.3" } From 033592c89a95b9aca073a3cb4f07dfa31d70345a Mon Sep 17 00:00:00 2001 From: Esco Date: Sun, 2 Feb 2025 02:29:22 +0100 Subject: [PATCH 0070/1184] feat: New standard RetentionPolicyTag --- src/data/standards.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 4a7a5527ae36..eddac84ee102 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1412,6 +1412,26 @@ "powershellEquivalent": "Set-HostedOutboundSpamFilterPolicy -AutoForwardingMode 'Off'", "recommendedBy": ["CIS"] }, + { + "name": "standards.RetentionPolicyTag", + "cat": "Exchange Standards", + "tag": ["highimpact"], + "helpText": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.", + "docsDescription": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.", + "addedComponent": [ + { + "type": "number", + "name": "standards.RetentionPolicyTag.AgeLimitForRetention", + "label": "Retention Days", + "required": true + } + ], + "label": "Retention Policy, permanently delete items in Deleted Items after X days", + "impact": "High Impact", + "impactColour": "danger", + "powershellEquivalent": "Set-RetentionPolicyTag", + "recommendedBy": [] + }, { "name": "standards.QuarantineRequestAlert", "cat": "Defender Standards", From 32d9f71655b29c4e0a339fc5aa8c71113f7e6f37 Mon Sep 17 00:00:00 2001 From: Esco Date: Mon, 3 Feb 2025 15:04:06 +0100 Subject: [PATCH 0071/1184] fix: make some standards required input --- src/data/standards.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index eddac84ee102..e868f769760c 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -645,6 +645,7 @@ "addedComponent": [ { "type": "autoComplete", + "required": true, "multiple": false, "label": "Who can send invites?", "name": "standards.GuestInvite.allowInvitesFrom", @@ -1871,6 +1872,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "Spam Action", "name": "standards.SpamFilterPolicy.SpamAction", @@ -1887,6 +1889,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "Spam Quarantine Tag", "name": "standards.SpamFilterPolicy.SpamQuarantineTag", @@ -1907,6 +1910,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "High Confidence Spam Action", "name": "standards.SpamFilterPolicy.HighConfidenceSpamAction", @@ -1923,6 +1927,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "High Confidence Spam Quarantine Tag", "name": "standards.SpamFilterPolicy.HighConfidenceSpamQuarantineTag", @@ -1943,6 +1948,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "Bulk Spam Action", "name": "standards.SpamFilterPolicy.BulkSpamAction", @@ -1959,6 +1965,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "Bulk Quarantine Tag", "name": "standards.SpamFilterPolicy.BulkQuarantineTag", @@ -1979,6 +1986,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "Phish Spam Action", "name": "standards.SpamFilterPolicy.PhishSpamAction", @@ -1995,6 +2003,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "Phish Quarantine Tag", "name": "standards.SpamFilterPolicy.PhishQuarantineTag", @@ -2015,6 +2024,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "label": "High Confidence Phish Quarantine Tag", "name": "standards.SpamFilterPolicy.HighConfidencePhishQuarantineTag", @@ -2138,6 +2148,7 @@ "addedComponent": [ { "type": "autoComplete", + "required": true, "multiple": false, "name": "standards.IntuneComplianceSettings.secureByDefault", "label": "Mark devices with no compliance policy as", @@ -2588,6 +2599,7 @@ "addedComponent": [ { "type": "autoComplete", + "required": true, "multiple": false, "name": "standards.TeamsGlobalMeetingPolicy.DesignatedPresenterRoleMode", "label": "Default value of the `Who can present?`", @@ -2617,6 +2629,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "name": "standards.TeamsGlobalMeetingPolicy.MeetingChatEnabledType", "label": "Meeting chat policy", @@ -2708,6 +2721,8 @@ "addedComponent": [ { "type": "autoComplete", + "required": true, + "multiple": false, "name": "standards.TeamsEnrollUser.EnrollUserOverride", "label": "Voice and Face Enrollment", "options": [ @@ -2776,6 +2791,7 @@ }, { "type": "autoComplete", + "required" : true, "multiple": false, "name": "standards.TeamsFederationConfiguration.DomainControl", "label": "Communication Mode", @@ -2844,6 +2860,7 @@ }, { "type": "autoComplete", + "required": true, "multiple": false, "name": "standards.TeamsMessagingPolicy.ReadReceiptsEnabledType", "label": "Read Receipts Enabled Type", From dc9c7c336cec58c5d45e229f89d90c44321d4c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 3 Feb 2025 19:12:04 +0100 Subject: [PATCH 0072/1184] feat: Add Edit Contact page with form functionality --- .../email/administration/contacts/edit.jsx | 236 ++++++++++++++++++ .../email/administration/contacts/index.js | 8 +- 2 files changed, 240 insertions(+), 4 deletions(-) create mode 100644 src/pages/email/administration/contacts/edit.jsx diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx new file mode 100644 index 000000000000..12846ae3140a --- /dev/null +++ b/src/pages/email/administration/contacts/edit.jsx @@ -0,0 +1,236 @@ +import React, { useEffect } from "react"; +import { useRouter } from "next/router"; +import { Grid, Divider } from "@mui/material"; +import { useForm } from "react-hook-form"; +import { useSelector } from "react-redux"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import CippFormPage from "/src/components/CippFormPages/CippFormPage"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; +import { useSettings } from "../../../../hooks/use-settings"; +import { ApiGetCall } from "../../../../api/ApiCall"; + +const EditContact = () => { + const tenantDomain = useSettings().currentTenant; + const router = useRouter(); + const { id } = router.query; + + const contactInfo = ApiGetCall({ + url: `/api/ListContacts?tenantFilter=${tenantDomain}&id=${id}`, + queryKey: `ListContacts-${id}`, + waiting: false, + }); + + useEffect(() => { + if (id) { + contactInfo.refetch(); + } + }, [router.query, id, tenantDomain]); + + const formControl = useForm({ + mode: "onChange", + defaultValues: { + displayName: "", + firstName: "", + lastName: "", + email: "", + hidefromGAL: false, + streetAddress: "", + postalCode: "", + city: "", + country: "", + companyName: "", + mobilePhone: "", + businessPhone: "", + jobTitle: "", + }, + }); + + useEffect(() => { + if (contactInfo.isSuccess && contactInfo.data?.Results?.[0]) { + const contact = contactInfo.data.Results[0]; + formControl.reset({ + displayName: contact.displayName || "", + firstName: contact.firstName || "", + lastName: contact.lastName || "", + email: contact.mail || "", + hidefromGAL: contact.hidefromGAL || false, + streetAddress: contact.streetAddress || "", + postalCode: contact.postalCode || "", + city: contact.city || "", + country: contact.countryOrRegion || "", + companyName: contact.companyName || "", + mobilePhone: contact.mobilePhone || "", + businessPhone: contact.phone || "", + jobTitle: contact.jobTitle || "", + }); + } + }, [contactInfo.isSuccess, contactInfo.data, contactInfo.isFetching]); + + if (contactInfo.isLoading) { + return
    Loading...
    ; + } + + return ( + { + return { + tenantID: tenantDomain, + firstName: values.firstName, + lastName: values.lastName, + displayName: values.displayName, + mail: values.email, + hidefromGAL: values.hidefromGAL, + ContactID: contactInfo.data?.Results?.[0]?.id, + StreetAddress: values.streetAddress, + PostalCode: values.postalCode, + City: values.city, + Country: values.country, + companyName: values.companyName, + MobilePhone: values.mobilePhone, + BusinessPhone: values.businessPhone, + jobTitle: values.jobTitle, + }; + }} + > + + {/* Display Name */} + + + + + {/* First Name and Last Name */} + + + + + + + + + + {/* Email */} + + + + + {/* Hide from GAL */} + + + + + + + {/* Company Information */} + + + + + + + + + + {/* Address Information */} + + + + + + + + + + + + + + + + {/* Phone Numbers */} + + + + + + + + + ); +}; + +EditContact.getLayout = (page) => {page}; + +export default EditContact; diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index ac22d6596579..e08ab4e7d785 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -3,7 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Edit, PersonAdd } from "@mui/icons-material"; import { Button } from "@mui/material"; import Link from "next/link"; -import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; +import TrashIcon from "@heroicons/react/24/outline/TrashIcon"; const Page = () => { const pageTitle = "Contacts"; @@ -20,14 +20,14 @@ const Page = () => { color: "danger", icon: , }, - /* TODO: Implement edit contact { label: "Edit Contact", - link: "/email/administration/edit-contact/[id]", + link: "/email/administration/contacts/edit?id={id}", multiPost: false, + postEntireRow: true, icon: , color: "warning", - },*/ + }, ]; const simpleColumns = ["displayName", "mail", "companyName", "onPremisesSyncEnabled"]; From 5cc4ae46006bbc09917ed9751988fc9db2251daa Mon Sep 17 00:00:00 2001 From: Esco Date: Mon, 3 Feb 2025 21:44:40 +0100 Subject: [PATCH 0073/1184] Tweaks to Start with Windows Terminal and Dev Installation --- Tools/Start-CippDevEmulators.ps1 | 10 ++++++++-- Tools/Start-CippDevInstallation.ps1 | 30 ++++++++++++++--------------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/Tools/Start-CippDevEmulators.ps1 b/Tools/Start-CippDevEmulators.ps1 index 882579f1bdc4..d171c0a1eaaf 100644 --- a/Tools/Start-CippDevEmulators.ps1 +++ b/Tools/Start-CippDevEmulators.ps1 @@ -1,8 +1,14 @@ -Write-Host 'Starting CIPP Dev Emulators' +Get-Command wt -ErrorAction Stop | Out-Null Get-Process node -ErrorAction SilentlyContinue | Stop-Process -ErrorAction SilentlyContinue $Path = (Get-Item $PSScriptRoot).Parent.Parent.FullName -$Process = Read-Host -Prompt 'Start Process Function (y/N)?' +pwsh -file (Join-Path $PSScriptRoot 'Start-CippDevInstallation.ps1') + +Write-Host 'Starting CIPP Dev Emulators' + +if (Test-Path (Join-Path $Path 'CIPP-API-Processor')) { + $Process = Read-Host -Prompt 'Start Process Function (y/N)?' +} if ($Process -eq 'y') { wt --title CIPP`; new-tab --title 'Azurite' -d $Path pwsh -c azurite`; new-tab --title 'FunctionApp' -d $Path\CIPP-API pwsh -c func start`; new-tab --title 'CIPP Frontend' -d $Path\CIPP pwsh -c npm run dev`; new-tab --title 'SWA' -d $Path\CIPP pwsh -c npm run start-swa`; new-tab --title 'CIPP-API-Processor' -d $Path\CIPP-API-Processor pwsh -c func start --port 7072 diff --git a/Tools/Start-CippDevInstallation.ps1 b/Tools/Start-CippDevInstallation.ps1 index fa1de465b2eb..2d00a12c6a26 100644 --- a/Tools/Start-CippDevInstallation.ps1 +++ b/Tools/Start-CippDevInstallation.ps1 @@ -1,32 +1,32 @@ $Path = (Get-Item $PSScriptRoot).Parent.Parent.FullName -if (-not(Get-Command npm)) { - throw 'npm is required to install the CIPP development environment' +if (-not((Get-Command npm -ErrorAction SilentlyContinue) -or (Get-Command yarn -ErrorAction SilentlyContinue))) { + throw 'npm or yarn is required to install the CIPP development environment.' } -if (-not(Get-Command azurite)) { +if (-not(Get-Command yarn -ErrorAction SilentlyContinue)) { + Write-Host 'Installing Yarn' + npm install --global yarn +} + +if (-not(Get-Command azurite -ErrorAction SilentlyContinue)) { Write-Host 'Installing Azurite' - npm install --global 'azurite' + yarn global add 'azurite' } -if (-not(Get-Command swa)) { +if (-not(Get-Command swa -ErrorAction SilentlyContinue)) { Write-Host 'Installing @azure/static-web-apps-cli' - npm install --global '@azure/static-web-apps-cli' + yarn global add '@azure/static-web-apps-cli' } -if (-not(Get-Command func)) { +if (-not(Get-Command func -ErrorAction SilentlyContinue)) { Write-Host 'Installing Azure Functions Core Tools' - npm install --global 'azure-functions-core-tools@4' --unsafe-perms true -} - -if (-not(Get-Command yarn)) { - Write-Host 'Installing Yarn' - npm install --global yarn + yarn global add 'azure-functions-core-tools@4' } -if (-not(yarn list --global --pattern 'next' | Select-String -Pattern 'next')) { +if (-not(yarn global list | Select-String -Pattern 'next')) { Write-Host 'Installing Next.js' - yarn install --global next --network-timeout 500000 + yarn global add 'next' } yarn install --cwd (Join-Path $Path "CIPP") --network-timeout 500000 From 3f7e051e2126c7a703ca7360d4325871e4871ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 3 Feb 2025 23:42:15 +0100 Subject: [PATCH 0074/1184] move up --- .../email/administration/contacts/index.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index e08ab4e7d785..8d512604501f 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -9,6 +9,15 @@ const Page = () => { const pageTitle = "Contacts"; const actions = [ + , + { + label: "Edit Contact", + link: "/email/administration/contacts/edit?id=[id]", + multiPost: false, + postEntireRow: true, + icon: , + color: "warning", + }, { label: "Remove Contact", type: "GET", @@ -20,14 +29,6 @@ const Page = () => { color: "danger", icon: , }, - { - label: "Edit Contact", - link: "/email/administration/contacts/edit?id={id}", - multiPost: false, - postEntireRow: true, - icon: , - color: "warning", - }, ]; const simpleColumns = ["displayName", "mail", "companyName", "onPremisesSyncEnabled"]; From fa7eda9bb3837ef78c789cb1382935bfe1fa57ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 4 Feb 2025 01:29:44 +0100 Subject: [PATCH 0075/1184] make it actually work --- .../email/administration/contacts/edit.jsx | 52 +++++++++++-------- .../email/administration/contacts/index.js | 6 ++- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx index 12846ae3140a..56bf1e557f6e 100644 --- a/src/pages/email/administration/contacts/edit.jsx +++ b/src/pages/email/administration/contacts/edit.jsx @@ -46,21 +46,29 @@ const EditContact = () => { }); useEffect(() => { - if (contactInfo.isSuccess && contactInfo.data?.Results?.[0]) { - const contact = contactInfo.data.Results[0]; + if (contactInfo.isSuccess && contactInfo.data?.[0]) { + const contact = contactInfo.data[0]; + // Get the address info from the first address entry + const address = contact.addresses?.[0] || {}; + + // Find phone numbers by type + const phones = contact.phones || []; + const mobilePhone = phones.find((p) => p.type === "mobile")?.number; + const businessPhone = phones.find((p) => p.type === "business")?.number; + formControl.reset({ displayName: contact.displayName || "", - firstName: contact.firstName || "", - lastName: contact.lastName || "", + firstName: contact.givenName || "", + lastName: contact.surname || "", email: contact.mail || "", hidefromGAL: contact.hidefromGAL || false, - streetAddress: contact.streetAddress || "", - postalCode: contact.postalCode || "", - city: contact.city || "", - country: contact.countryOrRegion || "", + streetAddress: address.street || "", + postalCode: address.postalCode || "", + city: address.city || "", + country: address.countryOrRegion || "", companyName: contact.companyName || "", - mobilePhone: contact.mobilePhone || "", - businessPhone: contact.phone || "", + mobilePhone: mobilePhone || "", + businessPhone: businessPhone || "", jobTitle: contact.jobTitle || "", }); } @@ -74,26 +82,28 @@ const EditContact = () => { { return { tenantID: tenantDomain, - firstName: values.firstName, - lastName: values.lastName, - displayName: values.displayName, - mail: values.email, + ContactID: contactInfo.data?.[0]?.id, + DisplayName: values.displayName, hidefromGAL: values.hidefromGAL, - ContactID: contactInfo.data?.Results?.[0]?.id, + email: values.email, + FirstName: values.firstName, + LastName: values.lastName, + Title: values.jobTitle, StreetAddress: values.streetAddress, PostalCode: values.postalCode, City: values.city, - Country: values.country, - companyName: values.companyName, - MobilePhone: values.mobilePhone, - BusinessPhone: values.businessPhone, - jobTitle: values.jobTitle, + CountryOrRegion: values.country, + Company: values.companyName, + mobilePhone: values.mobilePhone, + phone: values.businessPhone, }; }} > diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index 8d512604501f..9d75996d8652 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -9,7 +9,6 @@ const Page = () => { const pageTitle = "Contacts"; const actions = [ - , { label: "Edit Contact", link: "/email/administration/contacts/edit?id=[id]", @@ -17,6 +16,7 @@ const Page = () => { postEntireRow: true, icon: , color: "warning", + condition: (row) => !row.onPremisesSyncEnabled, }, { label: "Remove Contact", @@ -25,9 +25,11 @@ const Page = () => { data: { GUID: "id", }, - confirmText: "Are you sure you want to delete this contact?", + confirmText: + "Are you sure you want to delete this contact? Remember this will not work if the contact is AD Synced.", color: "danger", icon: , + condition: (row) => !row.onPremisesSyncEnabled, }, ]; From d185ae1feba6e492b38d62da84eb201ee2508c7d Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 3 Feb 2025 21:23:57 -0500 Subject: [PATCH 0076/1184] fix tenant mapping and buttons --- .../CippIntegrationTenantMapping.jsx | 60 +++++++++---------- src/pages/cipp/integrations/configure.js | 5 +- 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx index 8f1ecc67ec5c..6bc3e95caea6 100644 --- a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx +++ b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx @@ -95,37 +95,37 @@ const CippIntegrationSettings = ({ children }) => { }; const handleAutoMap = () => { - const newTableData = []; - tenantList.data?.pages[0]?.forEach((tenant) => { - const matchingCompany = mappings.data.Companies.find( - (company) => company.name === tenant.displayName - ); - if ( - Array.isArray(tableData) && - tableData?.find((item) => item.TenantId === tenant.customerId) - ) - return; - if (matchingCompany) { - newTableData.push({ - TenantId: tenant.customerId, - Tenant: tenant.displayName, - IntegrationName: matchingCompany.name, - IntegrationId: matchingCompany.value, - }); - } - }); - if (Array.isArray(tableData)) { - setTableData([...tableData, ...newTableData]); - } else { - setTableData(newTableData); - } - if (extension.autoMapSyncApi) { - automapPostCall.mutate({ - url: `/api/ExecExtensionMapping?AutoMapping=${router.query.id}`, - queryKey: `IntegrationTenantMapping-${router.query.id}`, + const newTableData = []; + tenantList.data?.pages[0]?.forEach((tenant) => { + const matchingCompany = mappings.data.Companies.find( + (company) => company.name === tenant.displayName + ); + if ( + Array.isArray(tableData) && + tableData?.find((item) => item.TenantId === tenant.customerId) + ) + return; + if (matchingCompany) { + newTableData.push({ + TenantId: tenant.customerId, + Tenant: tenant.displayName, + IntegrationName: matchingCompany.name, + IntegrationId: matchingCompany.value, }); } - }; + }); + if (Array.isArray(tableData)) { + setTableData([...tableData, ...newTableData]); + } else { + setTableData(newTableData); + } + if (extension.autoMapSyncApi) { + automapPostCall.mutate({ + url: `/api/ExecExtensionMapping?AutoMapping=${router.query.id}`, + queryKey: `IntegrationTenantMapping-${router.query.id}`, + }); + } + }; const actions = [ { @@ -140,7 +140,7 @@ const CippIntegrationSettings = ({ children }) => { useEffect(() => { if (mappings.isSuccess) { - setTableData(mappings.data.Mappings); + setTableData(mappings.data.Mappings ?? []); } }, [mappings.isSuccess]); diff --git a/src/pages/cipp/integrations/configure.js b/src/pages/cipp/integrations/configure.js index 62bc4990350b..e45bf0fd4489 100644 --- a/src/pages/cipp/integrations/configure.js +++ b/src/pages/cipp/integrations/configure.js @@ -174,10 +174,9 @@ const Page = () => { ))} )} - - - + + From 8e4c7f5140c9ac941fd1cb2ab8d2ac19385794f6 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 4 Feb 2025 10:01:09 +0100 Subject: [PATCH 0077/1184] api data key --- src/pages/security/incidents/list-alerts/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/security/incidents/list-alerts/index.js b/src/pages/security/incidents/list-alerts/index.js index 00748c78552c..444459c102ec 100644 --- a/src/pages/security/incidents/list-alerts/index.js +++ b/src/pages/security/incidents/list-alerts/index.js @@ -62,6 +62,7 @@ const Page = () => { Date: Tue, 4 Feb 2025 10:03:22 +0100 Subject: [PATCH 0078/1184] api datakey --- src/pages/security/incidents/list-incidents/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/security/incidents/list-incidents/index.js b/src/pages/security/incidents/list-incidents/index.js index ec9860e7e96f..213d760ff575 100644 --- a/src/pages/security/incidents/list-incidents/index.js +++ b/src/pages/security/incidents/list-incidents/index.js @@ -83,7 +83,7 @@ const Page = () => { Date: Tue, 4 Feb 2025 11:02:40 +0100 Subject: [PATCH 0079/1184] fixes default attributess --- src/pages/identity/administration/users/add.jsx | 1 + src/pages/identity/administration/users/user/edit.jsx | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/pages/identity/administration/users/add.jsx b/src/pages/identity/administration/users/add.jsx index 5d15605280e7..61e9e1dc2025 100644 --- a/src/pages/identity/administration/users/add.jsx +++ b/src/pages/identity/administration/users/add.jsx @@ -36,6 +36,7 @@ const Page = () => { newFields.usageLocation = { label: usageLocation, value: usageLocation }; } newFields.tenantFilter = userSettingsDefaults.currentTenant; + formControl.reset(newFields); } }, [formValues]); diff --git a/src/pages/identity/administration/users/user/edit.jsx b/src/pages/identity/administration/users/user/edit.jsx index 539ed69d1d98..17e60e4a4f1b 100644 --- a/src/pages/identity/administration/users/user/edit.jsx +++ b/src/pages/identity/administration/users/user/edit.jsx @@ -34,8 +34,17 @@ const Page = () => { useEffect(() => { if (userRequest.isSuccess) { const user = userRequest.data?.[0]; + //if we have userSettingsDefaults.userAttributes set, grab the .label from each userSsettingsDefaults, then set defaultAttributes.${label}.value to user.${label} + let defaultAttributes = {}; + if (userSettingsDefaults.userAttributes) { + userSettingsDefaults.userAttributes.forEach((attribute) => { + defaultAttributes[attribute.label] = { Value: user?.[attribute.label] }; + }); + } + console.log(defaultAttributes); formControl.reset({ ...user, + defaultAttributes: defaultAttributes, tenantFilter: userSettingsDefaults.currentTenant, licenses: user.assignedLicenses.map((license) => ({ label: getCippLicenseTranslation([license]), From 54f0fdebbef53c7dc8fe6a895199c07cabd9fe60 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 4 Feb 2025 11:08:38 +0100 Subject: [PATCH 0080/1184] auto username and default attributes --- src/components/CippFormPages/CippAddEditUser.jsx | 11 +++++++++++ src/pages/identity/administration/users/add.jsx | 2 +- src/pages/identity/administration/users/user/edit.jsx | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx index 991ade01854a..f772ae0e8e0e 100644 --- a/src/components/CippFormPages/CippAddEditUser.jsx +++ b/src/components/CippFormPages/CippAddEditUser.jsx @@ -8,6 +8,8 @@ import { CippFormLicenseSelector } from "/src/components/CippComponents/CippForm import Grid from "@mui/material/Grid"; import { ApiGetCall } from "../../api/ApiCall"; import { useSettings } from "../../hooks/use-settings"; +import { useWatch } from "react-hook-form"; +import { useEffect } from "react"; const CippAddEditUser = (props) => { const { formControl, userSettingsDefaults, formType = "add" } = props; @@ -16,6 +18,15 @@ const CippAddEditUser = (props) => { url: "/api/ListExtensionsConfig", queryKey: "ListExtensionsConfig", }); + + const watcher = useWatch({ control: formControl.control }); + useEffect(() => { + //if watch.firstname changes, and watch.lastname changes, set displayname to firstname + lastname + if (watcher.givenName && watcher.surname && formType === "add") { + formControl.setValue("displayName", `${watcher.givenName} ${watcher.surname}`); + } + }, [watcher.givenName, watcher.surname]); + return ( diff --git a/src/pages/identity/administration/users/add.jsx b/src/pages/identity/administration/users/add.jsx index 61e9e1dc2025..6db4b2a4bbf6 100644 --- a/src/pages/identity/administration/users/add.jsx +++ b/src/pages/identity/administration/users/add.jsx @@ -11,7 +11,7 @@ const Page = () => { const userSettingsDefaults = useSettings(); const formControl = useForm({ - mode: "onChange", + mode: "onBlur", defaultValues: { tenantFilter: userSettingsDefaults.currentTenant, usageLocation: userSettingsDefaults.usageLocation, diff --git a/src/pages/identity/administration/users/user/edit.jsx b/src/pages/identity/administration/users/user/edit.jsx index 17e60e4a4f1b..76998a10094b 100644 --- a/src/pages/identity/administration/users/user/edit.jsx +++ b/src/pages/identity/administration/users/user/edit.jsx @@ -25,7 +25,7 @@ const Page = () => { }); const formControl = useForm({ - mode: "onChange", + mode: "onBlur", defaultValues: { tenantFilter: userSettingsDefaults.currentTenant, }, From b0e222da1efa5c9b5cfc0916395461dff75c171d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 4 Feb 2025 17:14:12 +0100 Subject: [PATCH 0081/1184] Country selector --- src/pages/email/administration/contacts/edit.jsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx index 56bf1e557f6e..4981c10fe029 100644 --- a/src/pages/email/administration/contacts/edit.jsx +++ b/src/pages/email/administration/contacts/edit.jsx @@ -8,6 +8,7 @@ import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { useSettings } from "../../../../hooks/use-settings"; import { ApiGetCall } from "../../../../api/ApiCall"; +import countryList from "/src/data/countryList.json"; const EditContact = () => { const tenantDomain = useSettings().currentTenant; @@ -65,7 +66,9 @@ const EditContact = () => { streetAddress: address.street || "", postalCode: address.postalCode || "", city: address.city || "", - country: address.countryOrRegion || "", + country: address.countryOrRegion + ? countryList.find((c) => c.Name === address.countryOrRegion)?.Code || "" + : "", companyName: contact.companyName || "", mobilePhone: mobilePhone || "", businessPhone: businessPhone || "", @@ -100,7 +103,7 @@ const EditContact = () => { StreetAddress: values.streetAddress, PostalCode: values.postalCode, City: values.city, - CountryOrRegion: values.country, + CountryOrRegion: values.country?.value || values.country, Company: values.companyName, mobilePhone: values.mobilePhone, phone: values.businessPhone, @@ -210,9 +213,14 @@ const EditContact = () => { ({ + label: Name, + value: Code, + }))} formControl={formControl} /> From 7e2c987dad5d51cbb85dad04f22b5d5be0e93f47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 4 Feb 2025 18:06:05 +0100 Subject: [PATCH 0082/1184] fix: Update label for GAL visibility and disable creatable option for country selection --- src/pages/email/administration/contacts/edit.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx index 4981c10fe029..87e9febc70f9 100644 --- a/src/pages/email/administration/contacts/edit.jsx +++ b/src/pages/email/administration/contacts/edit.jsx @@ -163,7 +163,7 @@ const EditContact = () => { @@ -217,6 +217,7 @@ const EditContact = () => { label="Country" name="country" multiple={false} + creatable={false} options={countryList.map(({ Code, Name }) => ({ label: Name, value: Code, From 0a600445889677169c9742baaaa14d8a3bf12da6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 3 Feb 2025 19:12:04 +0100 Subject: [PATCH 0083/1184] feat: Add Edit Contact page with form functionality --- .../email/administration/contacts/edit.jsx | 236 ++++++++++++++++++ .../email/administration/contacts/index.js | 8 +- 2 files changed, 240 insertions(+), 4 deletions(-) create mode 100644 src/pages/email/administration/contacts/edit.jsx diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx new file mode 100644 index 000000000000..12846ae3140a --- /dev/null +++ b/src/pages/email/administration/contacts/edit.jsx @@ -0,0 +1,236 @@ +import React, { useEffect } from "react"; +import { useRouter } from "next/router"; +import { Grid, Divider } from "@mui/material"; +import { useForm } from "react-hook-form"; +import { useSelector } from "react-redux"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import CippFormPage from "/src/components/CippFormPages/CippFormPage"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; +import { useSettings } from "../../../../hooks/use-settings"; +import { ApiGetCall } from "../../../../api/ApiCall"; + +const EditContact = () => { + const tenantDomain = useSettings().currentTenant; + const router = useRouter(); + const { id } = router.query; + + const contactInfo = ApiGetCall({ + url: `/api/ListContacts?tenantFilter=${tenantDomain}&id=${id}`, + queryKey: `ListContacts-${id}`, + waiting: false, + }); + + useEffect(() => { + if (id) { + contactInfo.refetch(); + } + }, [router.query, id, tenantDomain]); + + const formControl = useForm({ + mode: "onChange", + defaultValues: { + displayName: "", + firstName: "", + lastName: "", + email: "", + hidefromGAL: false, + streetAddress: "", + postalCode: "", + city: "", + country: "", + companyName: "", + mobilePhone: "", + businessPhone: "", + jobTitle: "", + }, + }); + + useEffect(() => { + if (contactInfo.isSuccess && contactInfo.data?.Results?.[0]) { + const contact = contactInfo.data.Results[0]; + formControl.reset({ + displayName: contact.displayName || "", + firstName: contact.firstName || "", + lastName: contact.lastName || "", + email: contact.mail || "", + hidefromGAL: contact.hidefromGAL || false, + streetAddress: contact.streetAddress || "", + postalCode: contact.postalCode || "", + city: contact.city || "", + country: contact.countryOrRegion || "", + companyName: contact.companyName || "", + mobilePhone: contact.mobilePhone || "", + businessPhone: contact.phone || "", + jobTitle: contact.jobTitle || "", + }); + } + }, [contactInfo.isSuccess, contactInfo.data, contactInfo.isFetching]); + + if (contactInfo.isLoading) { + return
    Loading...
    ; + } + + return ( + { + return { + tenantID: tenantDomain, + firstName: values.firstName, + lastName: values.lastName, + displayName: values.displayName, + mail: values.email, + hidefromGAL: values.hidefromGAL, + ContactID: contactInfo.data?.Results?.[0]?.id, + StreetAddress: values.streetAddress, + PostalCode: values.postalCode, + City: values.city, + Country: values.country, + companyName: values.companyName, + MobilePhone: values.mobilePhone, + BusinessPhone: values.businessPhone, + jobTitle: values.jobTitle, + }; + }} + > + + {/* Display Name */} + + + + + {/* First Name and Last Name */} + + + + + + + + + + {/* Email */} + + + + + {/* Hide from GAL */} + + + + + + + {/* Company Information */} + + + + + + + + + + {/* Address Information */} + + + + + + + + + + + + + + + + {/* Phone Numbers */} + + + + + + + + + ); +}; + +EditContact.getLayout = (page) => {page}; + +export default EditContact; diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index ac22d6596579..e08ab4e7d785 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -3,7 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Edit, PersonAdd } from "@mui/icons-material"; import { Button } from "@mui/material"; import Link from "next/link"; -import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; +import TrashIcon from "@heroicons/react/24/outline/TrashIcon"; const Page = () => { const pageTitle = "Contacts"; @@ -20,14 +20,14 @@ const Page = () => { color: "danger", icon: , }, - /* TODO: Implement edit contact { label: "Edit Contact", - link: "/email/administration/edit-contact/[id]", + link: "/email/administration/contacts/edit?id={id}", multiPost: false, + postEntireRow: true, icon: , color: "warning", - },*/ + }, ]; const simpleColumns = ["displayName", "mail", "companyName", "onPremisesSyncEnabled"]; From e6ad713b6ab85d7569a8f370606b49feaf107592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 3 Feb 2025 23:42:15 +0100 Subject: [PATCH 0084/1184] move up --- .../email/administration/contacts/index.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index e08ab4e7d785..8d512604501f 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -9,6 +9,15 @@ const Page = () => { const pageTitle = "Contacts"; const actions = [ + , + { + label: "Edit Contact", + link: "/email/administration/contacts/edit?id=[id]", + multiPost: false, + postEntireRow: true, + icon: , + color: "warning", + }, { label: "Remove Contact", type: "GET", @@ -20,14 +29,6 @@ const Page = () => { color: "danger", icon: , }, - { - label: "Edit Contact", - link: "/email/administration/contacts/edit?id={id}", - multiPost: false, - postEntireRow: true, - icon: , - color: "warning", - }, ]; const simpleColumns = ["displayName", "mail", "companyName", "onPremisesSyncEnabled"]; From b74a81f33318afac9c7e65a067f1d38c0a7b6ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 4 Feb 2025 01:29:44 +0100 Subject: [PATCH 0085/1184] make it actually work --- .../email/administration/contacts/edit.jsx | 52 +++++++++++-------- .../email/administration/contacts/index.js | 6 ++- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx index 12846ae3140a..56bf1e557f6e 100644 --- a/src/pages/email/administration/contacts/edit.jsx +++ b/src/pages/email/administration/contacts/edit.jsx @@ -46,21 +46,29 @@ const EditContact = () => { }); useEffect(() => { - if (contactInfo.isSuccess && contactInfo.data?.Results?.[0]) { - const contact = contactInfo.data.Results[0]; + if (contactInfo.isSuccess && contactInfo.data?.[0]) { + const contact = contactInfo.data[0]; + // Get the address info from the first address entry + const address = contact.addresses?.[0] || {}; + + // Find phone numbers by type + const phones = contact.phones || []; + const mobilePhone = phones.find((p) => p.type === "mobile")?.number; + const businessPhone = phones.find((p) => p.type === "business")?.number; + formControl.reset({ displayName: contact.displayName || "", - firstName: contact.firstName || "", - lastName: contact.lastName || "", + firstName: contact.givenName || "", + lastName: contact.surname || "", email: contact.mail || "", hidefromGAL: contact.hidefromGAL || false, - streetAddress: contact.streetAddress || "", - postalCode: contact.postalCode || "", - city: contact.city || "", - country: contact.countryOrRegion || "", + streetAddress: address.street || "", + postalCode: address.postalCode || "", + city: address.city || "", + country: address.countryOrRegion || "", companyName: contact.companyName || "", - mobilePhone: contact.mobilePhone || "", - businessPhone: contact.phone || "", + mobilePhone: mobilePhone || "", + businessPhone: businessPhone || "", jobTitle: contact.jobTitle || "", }); } @@ -74,26 +82,28 @@ const EditContact = () => { { return { tenantID: tenantDomain, - firstName: values.firstName, - lastName: values.lastName, - displayName: values.displayName, - mail: values.email, + ContactID: contactInfo.data?.[0]?.id, + DisplayName: values.displayName, hidefromGAL: values.hidefromGAL, - ContactID: contactInfo.data?.Results?.[0]?.id, + email: values.email, + FirstName: values.firstName, + LastName: values.lastName, + Title: values.jobTitle, StreetAddress: values.streetAddress, PostalCode: values.postalCode, City: values.city, - Country: values.country, - companyName: values.companyName, - MobilePhone: values.mobilePhone, - BusinessPhone: values.businessPhone, - jobTitle: values.jobTitle, + CountryOrRegion: values.country, + Company: values.companyName, + mobilePhone: values.mobilePhone, + phone: values.businessPhone, }; }} > diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index 8d512604501f..9d75996d8652 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -9,7 +9,6 @@ const Page = () => { const pageTitle = "Contacts"; const actions = [ - , { label: "Edit Contact", link: "/email/administration/contacts/edit?id=[id]", @@ -17,6 +16,7 @@ const Page = () => { postEntireRow: true, icon: , color: "warning", + condition: (row) => !row.onPremisesSyncEnabled, }, { label: "Remove Contact", @@ -25,9 +25,11 @@ const Page = () => { data: { GUID: "id", }, - confirmText: "Are you sure you want to delete this contact?", + confirmText: + "Are you sure you want to delete this contact? Remember this will not work if the contact is AD Synced.", color: "danger", icon: , + condition: (row) => !row.onPremisesSyncEnabled, }, ]; From 852fafa1618b8fde4478c8a3e9430295b1827244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 4 Feb 2025 17:14:12 +0100 Subject: [PATCH 0086/1184] Country selector --- src/pages/email/administration/contacts/edit.jsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx index 56bf1e557f6e..4981c10fe029 100644 --- a/src/pages/email/administration/contacts/edit.jsx +++ b/src/pages/email/administration/contacts/edit.jsx @@ -8,6 +8,7 @@ import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { useSettings } from "../../../../hooks/use-settings"; import { ApiGetCall } from "../../../../api/ApiCall"; +import countryList from "/src/data/countryList.json"; const EditContact = () => { const tenantDomain = useSettings().currentTenant; @@ -65,7 +66,9 @@ const EditContact = () => { streetAddress: address.street || "", postalCode: address.postalCode || "", city: address.city || "", - country: address.countryOrRegion || "", + country: address.countryOrRegion + ? countryList.find((c) => c.Name === address.countryOrRegion)?.Code || "" + : "", companyName: contact.companyName || "", mobilePhone: mobilePhone || "", businessPhone: businessPhone || "", @@ -100,7 +103,7 @@ const EditContact = () => { StreetAddress: values.streetAddress, PostalCode: values.postalCode, City: values.city, - CountryOrRegion: values.country, + CountryOrRegion: values.country?.value || values.country, Company: values.companyName, mobilePhone: values.mobilePhone, phone: values.businessPhone, @@ -210,9 +213,14 @@ const EditContact = () => {
    ({ + label: Name, + value: Code, + }))} formControl={formControl} /> From fa301687464b8b402b6cc0da73a2f8e27d19c45a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 4 Feb 2025 18:06:05 +0100 Subject: [PATCH 0087/1184] fix: Update label for GAL visibility and disable creatable option for country selection --- src/pages/email/administration/contacts/edit.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx index 4981c10fe029..87e9febc70f9 100644 --- a/src/pages/email/administration/contacts/edit.jsx +++ b/src/pages/email/administration/contacts/edit.jsx @@ -163,7 +163,7 @@ const EditContact = () => { @@ -217,6 +217,7 @@ const EditContact = () => { label="Country" name="country" multiple={false} + creatable={false} options={countryList.map(({ Code, Name }) => ({ label: Name, value: Code, From f2bd99e2ffc68547b0742b094a596e5dfe7df137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 3 Feb 2025 19:12:04 +0100 Subject: [PATCH 0088/1184] feat: Add Edit Contact page with form functionality --- .../email/administration/contacts/edit.jsx | 255 ++++++++++++++++++ .../email/administration/contacts/index.js | 23 +- 2 files changed, 268 insertions(+), 10 deletions(-) create mode 100644 src/pages/email/administration/contacts/edit.jsx diff --git a/src/pages/email/administration/contacts/edit.jsx b/src/pages/email/administration/contacts/edit.jsx new file mode 100644 index 000000000000..87e9febc70f9 --- /dev/null +++ b/src/pages/email/administration/contacts/edit.jsx @@ -0,0 +1,255 @@ +import React, { useEffect } from "react"; +import { useRouter } from "next/router"; +import { Grid, Divider } from "@mui/material"; +import { useForm } from "react-hook-form"; +import { useSelector } from "react-redux"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import CippFormPage from "/src/components/CippFormPages/CippFormPage"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; +import { useSettings } from "../../../../hooks/use-settings"; +import { ApiGetCall } from "../../../../api/ApiCall"; +import countryList from "/src/data/countryList.json"; + +const EditContact = () => { + const tenantDomain = useSettings().currentTenant; + const router = useRouter(); + const { id } = router.query; + + const contactInfo = ApiGetCall({ + url: `/api/ListContacts?tenantFilter=${tenantDomain}&id=${id}`, + queryKey: `ListContacts-${id}`, + waiting: false, + }); + + useEffect(() => { + if (id) { + contactInfo.refetch(); + } + }, [router.query, id, tenantDomain]); + + const formControl = useForm({ + mode: "onChange", + defaultValues: { + displayName: "", + firstName: "", + lastName: "", + email: "", + hidefromGAL: false, + streetAddress: "", + postalCode: "", + city: "", + country: "", + companyName: "", + mobilePhone: "", + businessPhone: "", + jobTitle: "", + }, + }); + + useEffect(() => { + if (contactInfo.isSuccess && contactInfo.data?.[0]) { + const contact = contactInfo.data[0]; + // Get the address info from the first address entry + const address = contact.addresses?.[0] || {}; + + // Find phone numbers by type + const phones = contact.phones || []; + const mobilePhone = phones.find((p) => p.type === "mobile")?.number; + const businessPhone = phones.find((p) => p.type === "business")?.number; + + formControl.reset({ + displayName: contact.displayName || "", + firstName: contact.givenName || "", + lastName: contact.surname || "", + email: contact.mail || "", + hidefromGAL: contact.hidefromGAL || false, + streetAddress: address.street || "", + postalCode: address.postalCode || "", + city: address.city || "", + country: address.countryOrRegion + ? countryList.find((c) => c.Name === address.countryOrRegion)?.Code || "" + : "", + companyName: contact.companyName || "", + mobilePhone: mobilePhone || "", + businessPhone: businessPhone || "", + jobTitle: contact.jobTitle || "", + }); + } + }, [contactInfo.isSuccess, contactInfo.data, contactInfo.isFetching]); + + if (contactInfo.isLoading) { + return
    Loading...
    ; + } + + return ( + { + return { + tenantID: tenantDomain, + ContactID: contactInfo.data?.[0]?.id, + DisplayName: values.displayName, + hidefromGAL: values.hidefromGAL, + email: values.email, + FirstName: values.firstName, + LastName: values.lastName, + Title: values.jobTitle, + StreetAddress: values.streetAddress, + PostalCode: values.postalCode, + City: values.city, + CountryOrRegion: values.country?.value || values.country, + Company: values.companyName, + mobilePhone: values.mobilePhone, + phone: values.businessPhone, + }; + }} + > + + {/* Display Name */} + + + + + {/* First Name and Last Name */} + + + + + + + + + + {/* Email */} + + + + + {/* Hide from GAL */} + + + + + + + {/* Company Information */} + + + + + + + + + + {/* Address Information */} + + + + + + + + + + + ({ + label: Name, + value: Code, + }))} + formControl={formControl} + /> + + + + + {/* Phone Numbers */} + + + + + + + + + ); +}; + +EditContact.getLayout = (page) => {page}; + +export default EditContact; diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index ac22d6596579..9d75996d8652 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -3,12 +3,21 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Edit, PersonAdd } from "@mui/icons-material"; import { Button } from "@mui/material"; import Link from "next/link"; -import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; +import TrashIcon from "@heroicons/react/24/outline/TrashIcon"; const Page = () => { const pageTitle = "Contacts"; const actions = [ + { + label: "Edit Contact", + link: "/email/administration/contacts/edit?id=[id]", + multiPost: false, + postEntireRow: true, + icon: , + color: "warning", + condition: (row) => !row.onPremisesSyncEnabled, + }, { label: "Remove Contact", type: "GET", @@ -16,18 +25,12 @@ const Page = () => { data: { GUID: "id", }, - confirmText: "Are you sure you want to delete this contact?", + confirmText: + "Are you sure you want to delete this contact? Remember this will not work if the contact is AD Synced.", color: "danger", icon: , + condition: (row) => !row.onPremisesSyncEnabled, }, - /* TODO: Implement edit contact - { - label: "Edit Contact", - link: "/email/administration/edit-contact/[id]", - multiPost: false, - icon: , - color: "warning", - },*/ ]; const simpleColumns = ["displayName", "mail", "companyName", "onPremisesSyncEnabled"]; From e378097e14962207fd7179f5231392669d9b9c21 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Feb 2025 13:56:41 -0500 Subject: [PATCH 0089/1184] add sam wizard form validation --- .../CippWizard/CIPPDeploymentStep.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/components/CippWizard/CIPPDeploymentStep.js b/src/components/CippWizard/CIPPDeploymentStep.js index d0b17d45f13c..c5166f6fbe3e 100644 --- a/src/components/CippWizard/CIPPDeploymentStep.js +++ b/src/components/CippWizard/CIPPDeploymentStep.js @@ -284,6 +284,13 @@ export const CippDeploymentStep = (props) => { name="TenantID" label="Tenant ID" placeholder="Enter the Tenant ID. Leave blank to retain previous key." + validators={{ + validate: (value) => { + const guidRegex = + /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; + return value === "" || guidRegex.test(value) || "Invalid Tenant ID"; + }, + }} /> { name="ApplicationID" label="Application ID" placeholder="Enter the Application ID. Leave blank to retain previous key." + validators={{ + validate: (value) => { + const guidRegex = + /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; + return value === "" || guidRegex.test(value) || "Invalid Application ID"; + }, + }} /> { name="ApplicationSecret" label="Application Secret" placeholder="Enter the application secret. Leave blank to retain previous key." + validators={{ + validate: (value) => { + const secretRegex = /^(?![0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$)[0-9a-zA-Z]{40}$/; + return value === "" || secretRegex.test(value) || "This should be the secret value, not the secret ID"; + }, + }} /> { name="RefreshToken" label="Refresh Token" placeholder="Enter the refresh token. Leave blank to retain previous key." + validators={{ + validate: (value) => { + const jwtRegex = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+$/; + return value === "" || jwtRegex.test(value) || "Invalid Refresh Token"; + } + }} /> )} From 0bcf8944d54009e89de000f8bb2f16043de85c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 4 Feb 2025 21:22:09 +0100 Subject: [PATCH 0090/1184] add conditional --- src/pages/email/transport/list-connectors/index.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/pages/email/transport/list-connectors/index.js b/src/pages/email/transport/list-connectors/index.js index 477b191fdff5..c77da7d7ece4 100644 --- a/src/pages/email/transport/list-connectors/index.js +++ b/src/pages/email/transport/list-connectors/index.js @@ -22,6 +22,7 @@ const Page = () => { type: "POST", url: "/api/EditExConnector", icon: , + condition: (row) => !row.Enabled, data: { State: "Enable", GUID: "Guid", @@ -35,6 +36,7 @@ const Page = () => { type: "POST", url: "/api/EditExConnector", icon: , + condition: (row) => row.Enabled, data: { State: "Disable", GUID: "Guid", @@ -82,11 +84,6 @@ const Page = () => { actions={actions} offCanvas={offCanvas} simpleColumns={simpleColumns} - titleButton={{ - label: "Deploy Connector", - href: "/email/connectors/deploy-connector", - startIcon: , // Added icon - }} cardButton={ <> + <> + + {!/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( + appId.data.applicationId + ) && ( + + The Application ID is not valid. Please return to the first page of the SAM wizard and use the Manual . + + )} + } > @@ -314,8 +328,13 @@ export const CippDeploymentStep = (props) => { placeholder="Enter the application secret. Leave blank to retain previous key." validators={{ validate: (value) => { - const secretRegex = /^(?![0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$)[0-9a-zA-Z]{40}$/; - return value === "" || secretRegex.test(value) || "This should be the secret value, not the secret ID"; + const secretRegex = + /^(?![0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$)[0-9a-zA-Z]{40}$/; + return ( + value === "" || + secretRegex.test(value) || + "This should be the secret value, not the secret ID" + ); }, }} /> @@ -329,7 +348,7 @@ export const CippDeploymentStep = (props) => { validate: (value) => { const jwtRegex = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+$/; return value === "" || jwtRegex.test(value) || "Invalid Refresh Token"; - } + }, }} /> From 50f6adaea27c974031dee0e6c2d5a70c2139cc63 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Feb 2025 22:32:25 -0500 Subject: [PATCH 0094/1184] feat: CIPP-API Integration v2 Update extension configuration for cippapi Add new CippApiClientManagement component to handle multiple App registrations with different permissions New formatters for API client details Adding ability to pass row values to CippApiDialog with setDefaultValues flag on action --- .../CippComponents/CippApiDialog.jsx | 34 ++ .../CippComponents/CippTranslations.jsx | 1 + .../CippApiClientManagement.jsx | 348 ++++++++++++++++++ src/data/Extensions.json | 50 ++- src/pages/cipp/integrations/configure.js | 16 +- src/pages/cipp/integrations/index.js | 4 +- src/utils/get-cipp-formatting.js | 4 + 7 files changed, 434 insertions(+), 23 deletions(-) create mode 100644 src/components/CippIntegrations/CippApiClientManagement.jsx diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index bd6348868c8b..99c5bcc455c9 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -207,6 +207,40 @@ export const CippApiDialog = (props) => { const onSubmit = (data) => handleActionClick(row, api, data); const selectedType = api.type === "POST" ? actionPostRequest : actionGetRequest; + if (api?.setDefaultValues) { + fields.map((field) => { + if ( + ((typeof row[field.name] === "string" && field.type === "textField") || + (typeof row[field.name] === "boolean" && field.type === "switch")) && + row[field.name] !== undefined && + row[field.name] !== null && + row[field.name] !== "" + ) { + formHook.setValue(field.name, row[field.name]); + } else if (Array.isArray(row[field.name]) && field.type === "autoComplete") { + var values = []; + row[field.name].map((element) => { + values.push({ + label: element, + value: element, + }); + }); + formHook.setValue(field.name, values); + } else if ( + field.type === "autoComplete" && + row[field.name] !== undefined && + row[field.name] !== null && + row[field.name] !== "" && + typeof row[field.name] === "string" + ) { + formHook.setValue(field.name, { + label: row[field.name], + value: row[field.name], + }); + } + }); + } + // Handling link navigation if (api.link) { const getNestedValue = (obj, path) => { diff --git a/src/components/CippComponents/CippTranslations.jsx b/src/components/CippComponents/CippTranslations.jsx index 0876bded5bd2..7761362d09ed 100644 --- a/src/components/CippComponents/CippTranslations.jsx +++ b/src/components/CippComponents/CippTranslations.jsx @@ -44,4 +44,5 @@ export const CippTranslations = { "commitmentTerm.renewalConfiguration.renewalDate": "Renewal Date", storageUsedInBytes: "Storage Used", prohibitSendReceiveQuotaInBytes: "Quota", + ClientId: "Client ID", }; diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx new file mode 100644 index 000000000000..df348b460aec --- /dev/null +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -0,0 +1,348 @@ +import { Button, Stack, SvgIcon, Menu, MenuItem, ListItemText } from "@mui/material"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; +import { ApiGetCall, ApiPostCall } from "/src/api/ApiCall"; +import { CippDataTable } from "../CippTable/CippDataTable"; +import { + ChevronDownIcon, + ClipboardDocumentIcon, + PencilIcon, + PlusSmallIcon, + TrashIcon, +} from "@heroicons/react/24/outline"; +import { CippApiResults } from "../CippComponents/CippApiResults"; +import { CippApiDialog } from "../CippComponents/CippApiDialog"; +import { Create, Key, Save } from "@mui/icons-material"; +import { CippPropertyListCard } from "../CippCards/CippPropertyListCard"; +import { CippCopyToClipBoard } from "../CippComponents/CippCopyToClipboard"; + +const CippApiClientManagement = () => { + const [openAddClientDialog, setOpenAddClientDialog] = useState(false); + const [openAddExistingAppDialog, setOpenAddExistingAppDialog] = useState(false); + const [menuAnchorEl, setMenuAnchorEl] = useState(null); + + const formControl = useForm({ + mode: "onChange", + }); + + const postCall = ApiPostCall({ + datafromUrl: true, + relatedQueryKeys: ["ApiClients", "AzureConfiguration"], + }); + + const azureConfig = ApiGetCall({ + url: "/api/ExecApiClient", + data: { Action: "GetAzureConfiguration" }, + queryKey: "AzureConfiguration", + }); + + const handleMenuOpen = (event) => { + setMenuAnchorEl(event.currentTarget); + }; + + const handleMenuClose = () => { + setMenuAnchorEl(null); + }; + + const handleSaveToAzure = () => { + postCall.mutate({ + url: `/api/ExecApiClient?action=SaveToAzure`, + data: {}, + }); + handleMenuClose(); + }; + + const actions = [ + { + label: "Edit", + icon: ( + + + + ), + confirmText: "Update the API client settings:", + hideBulk: true, + setDefaultValues: true, + fields: [ + { + type: "autoComplete", + name: "Role", + multiple: false, + creatable: false, + placeholder: "Select Role", + api: { + url: "/api/ListCustomRole", + queryKey: "CustomRoleList", + labelField: "RowKey", + valueField: "RowKey", + }, + }, + { + type: "autoComplete", + name: "IpRange", + multiple: true, + freeSolo: true, + creatable: true, + options: [], + placeholder: "Enter IP Range (Single hosts or CIDR notation)", + }, + { + type: "switch", + name: "Enabled", + label: "Enable this client", + }, + ], + type: "POST", + url: "/api/ExecApiClient", + data: { + Action: "AddUpdate", + ClientId: "ClientId", + }, + relatedQueryKeys: ["ApiClients"], + }, + { + label: "Reset Application Secret", + icon: , + confirmText: "Are you sure you want to reset the application secret?", + type: "POST", + url: "/api/ExecApiClient", + data: { + Action: "ResetSecret", + ClientId: "ClientId", + }, + }, + { + label: "Copy API Scope", + icon: , + noConfirm: true, + customFunction: (row, action, formData) => { + var scope = `api://${row.ClientId}/.default`; + navigator.clipboard.writeText(scope); + }, + }, + { + label: "Delete Client", + icon: , + confirmText: "Are you sure you want to delete this client?", + type: "POST", + url: "/api/ExecApiClient", + data: { + Action: "Delete", + ClientId: "ClientId", + }, + fields: [ + { + type: "switch", + name: "RemoveAppReg", + label: "Remove App Registration", + }, + ], + relatedQueryKeys: ["ApiClients"], + }, + ]; + + return ( + <> + + + ) : ( + "Not Available" + ), + }, + { + label: "Token URL", + value: azureConfig.data?.Results?.TenantID ? ( + + ) : ( + "Not Available" + ), + }, + ]} + layout="dual" + showDivider={false} + isFetching={azureConfig.isFetching} + /> + + + + { + handleMenuClose(); + setOpenAddClientDialog(true); + }} + > + + + + Create New Client + + { + handleMenuClose(); + setOpenAddExistingAppDialog(true); + }} + > + + + + Add Existing Client + + + + + + Save to Azure + + + + } + /> + + + + setOpenAddClientDialog(false), + }} + title="Add Client" + fields={[ + { + type: "textField", + name: "AppName", + placeholder: "Enter App Name", + formControl: formControl, + }, + { + type: "autoComplete", + name: "Role", + multiple: false, + creatable: false, + placeholder: "Select Role", + api: { + url: "/api/ListCustomRole", + queryKey: "CustomRoleList", + labelField: "RowKey", + valueField: "RowKey", + }, + }, + { + type: "autoComplete", + name: "IpRange", + multiple: true, + freeSolo: true, + creatable: true, + options: [], + placeholder: "Enter IP Range (Single hosts or CIDR notation)", + }, + { + type: "switch", + name: "Enabled", + label: "Enable this client", + }, + ]} + api={{ + type: "POST", + url: "/api/ExecApiClient", + data: { Action: "AddUpdate" }, + relatedQueryKeys: [`ApiClients`], + }} + /> + setOpenAddExistingAppDialog(false), + }} + title="Add Existing App" + fields={[ + { + type: "autoComplete", + name: "ClientId", + placeholder: "Select Existing App", + api: { + type: "GET", + url: "/api/ExecApiClient", + data: { Action: "ListAvailable" }, + queryKey: `AvailableApiApps`, + dataKey: "Results", + labelField: (app) => `${app.displayName} (${app.appId})`, + valueField: "appId", + addedField: { + displayName: "displayName", + createdDateTime: "createdDateTime", + }, + }, + creatable: false, + multiple: false, + }, + { + type: "autoComplete", + name: "Role", + multiple: false, + creatable: false, + placeholder: "Select Role", + api: { + url: "/api/ListCustomRole", + queryKey: "CustomRoleList", + labelField: "RowKey", + valueField: "RowKey", + }, + }, + { + type: "autoComplete", + name: "IpRange", + multiple: true, + freeSolo: true, + creatable: true, + options: [], + placeholder: "Enter IP Range(s)", + }, + { + type: "switch", + name: "Enabled", + label: "Enable this client", + }, + ]} + api={{ + type: "POST", + url: "/api/ExecApiClient", + data: { Action: "!AddUpdate" }, + relatedQueryKeys: [`ApiClients`], + }} + /> + + ); +}; + +export default CippApiClientManagement; diff --git a/src/data/Extensions.json b/src/data/Extensions.json index 0110e7d63729..e81d25cf3468 100644 --- a/src/data/Extensions.json +++ b/src/data/Extensions.json @@ -7,19 +7,12 @@ "logo": "/assets/integrations/cipp-api.png", "forceSyncButton": false, "hideTestButton": true, - "disableWhenhosted": true, - "description": "Enable the CIPP API to access CIPP data outside of CIPP using a RESTful API.", - "helpText": "This integration allows you to enable CIPP-API access outside of CIPP. Requires Global Administrator permissions inside your tenant for activation of the API. The API credentials will only be shown once.", - "SettingOptions": [ - { - "type": "switch", - "name": "cippapi.ResetPassword", - "label": "Reset application secret - this will invalidate all existing API tokens" - }, + "description": "The CIPP API allows you to access CIPP data outside of CIPP using a RESTful API.", + "helpText": "This integration allows you to enable CIPP-API access outside of CIPP. This is useful for integrations with other systems or custom scripts.", + "links": [ { - "type": "switch", - "name": "cippapi.Enabled", - "label": "Enable Integration" + "name": "CIPP API Documentation", + "url": "https://docs.cipp.app/api-documentation/setup-and-authentication" } ], "mappingRequired": false @@ -76,7 +69,7 @@ "name": "Sherweb.AllowedCustomRoles", "label": "Select custom roles that are allowed to purchase licenses", "api": { - "url": "/api/ExecCustomRole", + "url": "/api/ListCustomRole", "queryKey": "CustomRoles", "labelField": "RowKey", "valueField": "RowKey" @@ -463,5 +456,36 @@ } ], "mappingRequired": false + }, + { + "name": "GitHub", + "id": "GitHub", + "type": "DevOps", + "cat": "Source Control", + "logo": "/assets/integrations/github.png", + "logoDark": "/assets/integrations/github_dark.png", + "description": "Enable the GitHub integration to manage your repositories from CIPP.", + "helpText": "This integration allows you to manage your GitHub repositories from CIPP. Requires a GitHub Fine Grained Personal Access Token (PAT).", + "links": [ + { + "name": "GitHub Token", + "url": "https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token" + } + ], + "SettingOptions": [ + { + "type": "password", + "name": "GitHub.APIKey", + "label": "GitHub Fine Grained Personal Access Token", + "placeholder": "Enter your GitHub PAT", + "required": true + }, + { + "type": "switch", + "name": "GitHub.Enabled", + "label": "Enable Integration" + } + ], + "mappingRequired": false } ] diff --git a/src/pages/cipp/integrations/configure.js b/src/pages/cipp/integrations/configure.js index e45bf0fd4489..1995566ddd38 100644 --- a/src/pages/cipp/integrations/configure.js +++ b/src/pages/cipp/integrations/configure.js @@ -15,6 +15,7 @@ import CippPageCard from "../../../components/CippCards/CippPageCard"; import CippIntegrationTenantMapping from "../../../components/CippIntegrations/CippIntegrationTenantMapping"; import CippIntegrationFieldMapping from "../../../components/CippIntegrations/CippIntegrationFieldMapping"; import { CippCardTabPanel } from "../../../components/CippComponents/CippCardTabPanel"; +import CippApiClientManagement from "../../../components/CippIntegrations/CippApiClientManagement"; function tabProps(index) { return { @@ -77,7 +78,7 @@ const Page = () => { defaultValues: integrations?.data, }); - const extension = extensions.find((extension) => extension.id === router.query.id); + const extension = extensions.find((extension) => extension.id === router.query.id) || {}; var logo = extension?.logo; if (preferredTheme === "dark" && extension?.logoDark) { @@ -185,12 +186,16 @@ const Page = () => { {extension?.mappingRequired && } {extension?.fieldMapping && } - {extension?.id === "cippapi" && }
    - + {extension?.id === "cippapi" ? ( + + ) : ( + + )} + {extension?.mappingRequired && ( @@ -201,11 +206,6 @@ const Page = () => { )} - {extension?.id === "cippapi" && ( - - API Client component to go here - - )} )} diff --git a/src/pages/cipp/integrations/index.js b/src/pages/cipp/integrations/index.js index 241ced5c4792..4bf582e23432 100644 --- a/src/pages/cipp/integrations/index.js +++ b/src/pages/cipp/integrations/index.js @@ -56,11 +56,11 @@ const Page = () => { } var integrationConfig = integrations?.data?.[extension.id]; - var isEnabled = integrationConfig?.Enabled; + var isEnabled = integrationConfig?.Enabled || extension.id === "cippapi"; var status = "Unconfigured"; if (integrationConfig && !isEnabled) { status = "Disabled"; - } else if (integrationConfig && isEnabled) { + } else if ((integrationConfig && isEnabled) || extension.id === "cippapi") { status = "Enabled"; } diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 73c65b8dbdad..2feaacacf94d 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -219,6 +219,10 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { } } + if (cellName === "ClientId") { + return isText ? data : ; + } + if (cellName === "excludedTenants") { //check if data is an array. if (Array.isArray(data)) { From a4377ef9e471efda97df1ed437491ef8719d62c9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Feb 2025 23:03:41 -0500 Subject: [PATCH 0095/1184] Update CippApiClientManagement.jsx --- src/components/CippIntegrations/CippApiClientManagement.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index df348b460aec..1a2635f40535 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -242,7 +242,6 @@ const CippApiClientManagement = () => { type: "textField", name: "AppName", placeholder: "Enter App Name", - formControl: formControl, }, { type: "autoComplete", From 0584d61e90b27337ecf89272fde58306a37f2ed1 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 5 Feb 2025 00:06:32 -0500 Subject: [PATCH 0096/1184] move actions add refresh config button --- .../CippApiClientManagement.jsx | 83 ++++++++++--------- 1 file changed, 45 insertions(+), 38 deletions(-) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 1a2635f40535..01e174c64e46 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -12,7 +12,7 @@ import { } from "@heroicons/react/24/outline"; import { CippApiResults } from "../CippComponents/CippApiResults"; import { CippApiDialog } from "../CippComponents/CippApiDialog"; -import { Create, Key, Save } from "@mui/icons-material"; +import { Create, Key, Save, Sync } from "@mui/icons-material"; import { CippPropertyListCard } from "../CippCards/CippPropertyListCard"; import { CippCopyToClipBoard } from "../CippComponents/CippCopyToClipboard"; @@ -146,43 +146,7 @@ const CippApiClientManagement = () => { - ) : ( - "Not Available" - ), - }, - { - label: "Token URL", - value: azureConfig.data?.Results?.TenantID ? ( - - ) : ( - "Not Available" - ), - }, - ]} - layout="dual" - showDivider={false} - isFetching={azureConfig.isFetching} - /> - + + +
  • + + ); +}; + +Page.getLayout = (page) => {page}; +export default Page; \ No newline at end of file From 1779fbaec58144902cbbf7abeb0ce162efd6568f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 6 Feb 2025 15:09:45 -0500 Subject: [PATCH 0104/1184] extension updates fix api results for new object format prevent error fields from being selected in CippAutocomplete add halo ticket type selection --- .../CippComponents/CippApiResults.jsx | 63 ++++++++++--------- .../CippComponents/CippAutocomplete.jsx | 14 ++++- src/data/Extensions.json | 53 +++++++++++++--- 3 files changed, 90 insertions(+), 40 deletions(-) diff --git a/src/components/CippComponents/CippApiResults.jsx b/src/components/CippComponents/CippApiResults.jsx index b1fee51f09de..3ef597b2ddb1 100644 --- a/src/components/CippComponents/CippApiResults.jsx +++ b/src/components/CippComponents/CippApiResults.jsx @@ -52,40 +52,47 @@ const extractAllResults = (data) => { return; } - const ignoreKeys = ["metadata", "Metadata"]; - - if (typeof obj === "object") { - Object.keys(obj).forEach((key) => { - const value = obj[key]; - if (ignoreKeys.includes(key)) return; - if (["Results", "Result", "results", "result"].includes(key)) { - if (Array.isArray(value)) { - value.forEach((valItem) => { - const processed = processResultItem(valItem); + if (obj?.resultText) { + const processed = processResultItem(obj); + if (processed) { + results.push(processed); + } + } else { + const ignoreKeys = ["metadata", "Metadata"]; + + if (typeof obj === "object") { + Object.keys(obj).forEach((key) => { + const value = obj[key]; + if (ignoreKeys.includes(key)) return; + if (["Results", "Result", "results", "result"].includes(key)) { + if (Array.isArray(value)) { + value.forEach((valItem) => { + const processed = processResultItem(valItem); + if (processed) { + results.push(processed); + } else { + extractFrom(valItem); + } + }); + } else if (typeof value === "object") { + const processed = processResultItem(value); if (processed) { results.push(processed); } else { - extractFrom(valItem); + extractFrom(value); } - }); - } else if (typeof value === "object") { - const processed = processResultItem(value); - if (processed) { - results.push(processed); - } else { - extractFrom(value); + } else if (typeof value === "string") { + results.push({ + text: value, + copyField: value, + severity: getSeverity(value), + }); } - } else if (typeof value === "string") { - results.push({ - text: value, - copyField: value, - severity: getSeverity(value), - }); + } else { + extractFrom(value); } - } else { - extractFrom(value); - } - }); + }); + } } }; diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 0cb207b835dc..1742ab9c17f2 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -1,5 +1,11 @@ import { ArrowDropDown } from "@mui/icons-material"; -import { Autocomplete, CircularProgress, createFilterOptions, TextField, IconButton } from "@mui/material"; +import { + Autocomplete, + CircularProgress, + createFilterOptions, + TextField, + IconButton, +} from "@mui/material"; import { useEffect, useState } from "react"; import { useSettings } from "../../hooks/use-settings"; import { getCippError } from "../../utils/get-cipp-error"; @@ -189,7 +195,9 @@ export const CippAutoComplete = (props) => { } return item; }); - newValue = newValue.filter((item) => item.value && item.value.trim() !== "" && item.value !== "error"); + newValue = newValue.filter( + (item) => item.value && item.value !== "" && item.value !== "error" && item.value !== -1 + ); } else { if (newValue?.manual || !newValue?.label) { newValue = { @@ -200,7 +208,7 @@ export const CippAutoComplete = (props) => { onCreateOption(newValue, newValue?.addedFields); } } - if (!newValue?.value || !newValue.value.trim() || newValue.value === "error") { + if (!newValue?.value || newValue.value === "error") { newValue = null; } } diff --git a/src/data/Extensions.json b/src/data/Extensions.json index e81d25cf3468..9fe08b00eb57 100644 --- a/src/data/Extensions.json +++ b/src/data/Extensions.json @@ -156,15 +156,25 @@ "type": "textField", "name": "HaloPSA.Tenant", "label": "HaloPSA Tenant", - "placeholder": "Enter your HaloPSA Tenant (Leave blank if self-hosted", + "placeholder": "Enter your HaloPSA Tenant (Leave blank if self-hosted)", "required": true }, { - "type": "textField", + "type": "autoComplete", "name": "HaloPSA.TicketType", - "label": "HaloPSA Ticket Type ID", - "placeholder": "Enter your HaloPSA ticket type to use for CIPP Tickets. Leave blank for default.", - "required": true + "label": "Select your HaloPSA Ticket Type, leave blank for default.", + "multiple": false, + "api": { + "url": "/api/ExecExtensionMapping", + "data": { + "List": "HaloPSAFields" + }, + "queryKey": "HaloTicketTypes", + "dataKey": "TicketTypes", + "labelField": "name", + "valueField": "id", + "showRefresh": true + } }, { "type": "textField", @@ -344,6 +354,11 @@ "name": "PWPush.Enabled", "label": "Enable Integration - Replace passwords with PWPush links" }, + { + "type": "switch", + "name": "PWPush.PWPushPro", + "label": "PWPush Pro/Premium account" + }, { "type": "textField", "name": "PWPush.BaseUrl", @@ -354,7 +369,7 @@ "type": "textField", "name": "PWPush.EmailAddress", "label": "PWPush email address", - "placeholder": "Enter your email address for PWPush. (optional)" + "placeholder": "Enter your email address for PWPush. (Free/Self-Hosted only)" }, { "type": "password", @@ -363,10 +378,25 @@ "placeholder": "Enter your PWPush API Key. (optional)" }, { - "type": "switch", - "name": "PWPush.RetrievalStep", - "label": "Click to retrieve password (recommended)" + "type": "autoComplete", + "name": "PWPush.AccountId", + "label": "Select your PWPush Account for branding (Pro/Premium only)", + "multiple": false, + "api": { + "url": "/api/ExecExtensionMapping?List=PWPushFields", + "queryKey": "PWPushAccounts", + "dataKey": "Accounts", + "labelField": "name", + "valueField": "id", + "showRefresh": true + }, + "condition": { + "field": "PWPush.PWPushPro", + "compareType": "is", + "compareValue": true + } }, + { "type": "number", "name": "PWPush.ExpireAfterDays", @@ -379,6 +409,11 @@ "label": "Expiration after views", "placeholder": "Expiration after views. (optional)" }, + { + "type": "switch", + "name": "PWPush.RetrievalStep", + "label": "Click to retrieve password (recommended)" + }, { "type": "switch", "name": "PWPush.DeletableByViewer", From 97afe05be71926dfe980f141814589ab80e1b190 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Thu, 6 Feb 2025 23:05:53 +0100 Subject: [PATCH 0105/1184] template repo --- src/pages/tools/templatelib/index.jsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/pages/tools/templatelib/index.jsx b/src/pages/tools/templatelib/index.jsx index 2b46fde8cb9e..060ad05d7630 100644 --- a/src/pages/tools/templatelib/index.jsx +++ b/src/pages/tools/templatelib/index.jsx @@ -35,7 +35,7 @@ const TemplateLibrary = () => { Command: { value: `New-CIPPTemplateRun` }, Parameters: { TemplateSettings: { ...values } }, ScheduledTime: unixTime, - Recurrence: { value: "4h" }, + Recurrence: { value: values.tenantFilter?.value ? "4h" : "7d" }, }; }; @@ -160,6 +160,18 @@ const TemplateLibrary = () => { label="Create Group Templates" formControl={formControl} /> + + From 782fa768eccdc307c9725dbf98ee5988feb4f17f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 6 Feb 2025 17:09:41 -0500 Subject: [PATCH 0106/1184] Update CippApiClientManagement.jsx --- .../CippApiClientManagement.jsx | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 01e174c64e46..067cae539a05 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -1,7 +1,8 @@ -import { Button, Stack, SvgIcon, Menu, MenuItem, ListItemText } from "@mui/material"; +import { Button, Stack, SvgIcon, Menu, MenuItem, ListItemText, Alert } from "@mui/material"; import { useState } from "react"; +import isEqual from "lodash/isEqual"; import { useForm } from "react-hook-form"; -import { ApiGetCall, ApiPostCall } from "/src/api/ApiCall"; +import { ApiGetCall, ApiGetCallWithPagination, ApiPostCall } from "/src/api/ApiCall"; import { CippDataTable } from "../CippTable/CippDataTable"; import { ChevronDownIcon, @@ -15,6 +16,7 @@ import { CippApiDialog } from "../CippComponents/CippApiDialog"; import { Create, Key, Save, Sync } from "@mui/icons-material"; import { CippPropertyListCard } from "../CippCards/CippPropertyListCard"; import { CippCopyToClipBoard } from "../CippComponents/CippCopyToClipboard"; +import { Box } from "@mui/system"; const CippApiClientManagement = () => { const [openAddClientDialog, setOpenAddClientDialog] = useState(false); @@ -36,6 +38,12 @@ const CippApiClientManagement = () => { queryKey: "AzureConfiguration", }); + const apiClients = ApiGetCallWithPagination({ + url: "/api/ExecApiClient", + data: { Action: "List" }, + queryKey: "ApiClients", + }); + const handleMenuOpen = (event) => { setMenuAnchorEl(event.currentTarget); }; @@ -223,7 +231,27 @@ const CippApiClientManagement = () => { showDivider={false} isFetching={azureConfig.isFetching} /> - + {azureConfig.isSuccess && Array.isArray(azureConfig.data?.Results?.ClientIDs) && ( + <> + {!isEqual( + apiClients.data?.pages?.[0]?.Results?.filter((c) => c.Enabled) + .map((c) => c.ClientId) + .sort(), + azureConfig.data?.Results?.ClientIDs?.sort() + ) && ( + + + You have unsaved changes. Click Actions > Save Azure Configuration to update + the allowed API Clients. + + + )} + + )} + {} + + + { simpleColumns={["Enabled", "AppName", "ClientId", "Role", "IPRange"]} queryKey={`ApiClients`} /> -
    Date: Fri, 7 Feb 2025 00:44:10 +0100 Subject: [PATCH 0107/1184] minor updates --- src/pages/tools/templatelib/index.jsx | 68 +++++++++++++++------------ 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/src/pages/tools/templatelib/index.jsx b/src/pages/tools/templatelib/index.jsx index 060ad05d7630..85c50646bc50 100644 --- a/src/pages/tools/templatelib/index.jsx +++ b/src/pages/tools/templatelib/index.jsx @@ -108,38 +108,44 @@ const TemplateLibrary = () => { + + + Conditional Access + + - - Conditional Access - - - - - Intune - - - - + + Intune + + + + + Date: Thu, 6 Feb 2025 22:53:59 -0500 Subject: [PATCH 0108/1184] Update CippApiClientManagement.jsx --- src/components/CippIntegrations/CippApiClientManagement.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 067cae539a05..69afd6808109 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -231,7 +231,7 @@ const CippApiClientManagement = () => { showDivider={false} isFetching={azureConfig.isFetching} /> - {azureConfig.isSuccess && Array.isArray(azureConfig.data?.Results?.ClientIDs) && ( + {azureConfig.isSuccess && azureConfig.data?.Results?.ClientIDs && ( <> {!isEqual( apiClients.data?.pages?.[0]?.Results?.filter((c) => c.Enabled) @@ -249,7 +249,7 @@ const CippApiClientManagement = () => { )} {} - + Date: Thu, 6 Feb 2025 23:15:33 -0500 Subject: [PATCH 0109/1184] fix geo ip lookup actions --- src/pages/tenant/tools/geoiplookup/index.js | 42 +++++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/pages/tenant/tools/geoiplookup/index.js b/src/pages/tenant/tools/geoiplookup/index.js index c1d68fa0b041..df8c10702556 100644 --- a/src/pages/tenant/tools/geoiplookup/index.js +++ b/src/pages/tenant/tools/geoiplookup/index.js @@ -3,7 +3,7 @@ import { Grid, Stack } from "@mui/system"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { useForm, useWatch } from "react-hook-form"; import CippButtonCard from "../../../../components/CippCards/CippButtonCard"; -import { Delete, Search } from "@mui/icons-material"; +import { Add, Delete, Search } from "@mui/icons-material"; import CippFormComponent from "../../../../components/CippComponents/CippFormComponent"; import { ApiPostCall } from "../../../../api/ApiCall"; import { getCippValidator } from "../../../../utils/get-cipp-validator"; @@ -26,15 +26,33 @@ const Page = () => { customFunction: (row) => setIpAddress(row.RowKey), noConfirm: true, icon: , + hideBulk: true, + }, + { + label: "Add to Whitelist", + url: `/api/ExecAddTrustedIP`, + type: "POST", + data: { + IP: "RowKey", + State: "!Trusted", + }, + icon: , + confirmText: "Are you sure you want to add this IP to the whitelist?", + multiPost: false, + condition: (row) => row.state !== "Trusted", }, { label: "Remove from Whitelist", - customFunction: (row) => - addGeoIP.mutate({ - url: `/api/ExecAddTrustedIP?IP=${row.RowKey}&TenantFilter=${currentTenant}&State=NotTrusted`, - }), + url: `/api/ExecAddTrustedIP`, + type: "POST", + data: { + IP: "RowKey", + State: "!NotTrusted", + }, icon: , confirmText: "Are you sure you want to remove this IP from the whitelist?", + multiPost: false, + condition: (row) => row.state !== "NotTrusted", }, ]; @@ -44,13 +62,23 @@ const Page = () => { const handleAddToWhitelist = () => { addGeoIP.mutate({ - url: `/api/ExecAddTrustedIP?IP=${ip}&TenantFilter=${currentTenant}&State=Trusted`, + url: `/api/ExecAddTrustedIP`, + data: { + IP: ip, + State: "Trusted", + tenantFilter: currentTenant, + } }); }; const handleRemoveFromWhitelist = () => { addGeoIP.mutate({ - url: `/api/ExecAddTrustedIP?IP=${ip}&TenantFilter=${currentTenant}&State=NotTrusted`, + url: `/api/ExecAddTrustedIP`, + data: { + IP: ip, + State: "NotTrusted", + tenantFilter: currentTenant, + } }); }; From bb53d631f1f847e63010245483a5b6a2953dd9d0 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 6 Feb 2025 23:51:33 -0500 Subject: [PATCH 0110/1184] Update CippApiClientManagement.jsx --- src/components/CippIntegrations/CippApiClientManagement.jsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 69afd6808109..73d218360df0 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -118,6 +118,7 @@ const CippApiClientManagement = () => { Action: "ResetSecret", ClientId: "ClientId", }, + hideBulk: true, }, { label: "Copy API Scope", @@ -127,6 +128,7 @@ const CippApiClientManagement = () => { var scope = `api://${row.ClientId}/.default`; navigator.clipboard.writeText(scope); }, + hideBulk: true, }, { label: "Delete Client", @@ -146,6 +148,7 @@ const CippApiClientManagement = () => { }, ], relatedQueryKeys: ["ApiClients"], + multiPost: false, }, ]; From 0504105783c05bac9f61f04632bc569573f22a6a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 00:07:38 -0500 Subject: [PATCH 0111/1184] Update CippApiClientManagement.jsx --- src/components/CippIntegrations/CippApiClientManagement.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 73d218360df0..09acfbd9e4f0 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -193,7 +193,10 @@ const CippApiClientManagement = () => { Add Existing Client - azureConfig.refetch()}> + { + azureConfig.refetch(); + handleMenuClose(); + }}> From 183ce29e84b9512f593be8c9927fc4f40b73e03a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 01:00:21 -0500 Subject: [PATCH 0112/1184] ui tweaks --- .../CippApiClientManagement.jsx | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 09acfbd9e4f0..b85bd8e907a1 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -193,10 +193,12 @@ const CippApiClientManagement = () => { Add Existing Client - { - azureConfig.refetch(); - handleMenuClose(); - }}> + { + azureConfig.refetch(); + handleMenuClose(); + }} + > @@ -212,7 +214,10 @@ const CippApiClientManagement = () => { } propertyItems={[ - { label: "API Auth Enabled", value: azureConfig.data?.Results?.Enabled }, + { + label: "Microsoft Authentication Enabled", + value: azureConfig.data?.Results?.Enabled, + }, { label: "API Url", value: azureConfig.data?.Results?.ApiUrl ? ( @@ -232,6 +237,14 @@ const CippApiClientManagement = () => { "Not Available" ), }, + { + label: "Tenant ID", + value: azureConfig.data?.Results?.TenantID ? ( + + ) : ( + "Not Available" + ), + }, ]} layout="dual" showDivider={false} @@ -254,7 +267,14 @@ const CippApiClientManagement = () => { )} )} - {} + {azureConfig.isSuccess && azureConfig.data?.Results?.Enabled === false && ( + + + Microsoft Authentication is disabled. Configure API Clients and click Actions > + Save Azure Configuration. + + + )} From be74657432a663ae52364ff6ffe2f9cbb107d00a Mon Sep 17 00:00:00 2001 From: Esco Date: Fri, 7 Feb 2025 10:18:29 +0100 Subject: [PATCH 0113/1184] feat: added View in Entra button to user page --- .../identity/administration/users/user/bec.jsx | 17 ++++++++++++++++- .../users/user/conditional-access.jsx | 17 ++++++++++++++++- .../administration/users/user/edit.jsx | 18 +++++++++++++++++- .../administration/users/user/exchange.jsx | 17 ++++++++++++++++- .../administration/users/user/index.jsx | 17 ++++++++++++++++- 5 files changed, 81 insertions(+), 5 deletions(-) diff --git a/src/pages/identity/administration/users/user/bec.jsx b/src/pages/identity/administration/users/user/bec.jsx index 74c8364c4ddb..5e29d93cc09b 100644 --- a/src/pages/identity/administration/users/user/bec.jsx +++ b/src/pages/identity/administration/users/user/bec.jsx @@ -5,7 +5,7 @@ import { useRouter } from "next/router"; import { ApiGetCall } from "/src/api/ApiCall"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { CheckCircle, Download, Mail, Fingerprint } from "@mui/icons-material"; +import { CheckCircle, Download, Mail, Fingerprint, Launch } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import ReactTimeAgo from "react-time-ago"; @@ -160,6 +160,21 @@ const Page = () => { ), }, + { + icon: , + text: ( + + ), + }, ] : []; diff --git a/src/pages/identity/administration/users/user/conditional-access.jsx b/src/pages/identity/administration/users/user/conditional-access.jsx index 5d85ae736cff..d11ba05bc1ba 100644 --- a/src/pages/identity/administration/users/user/conditional-access.jsx +++ b/src/pages/identity/administration/users/user/conditional-access.jsx @@ -4,7 +4,7 @@ import { useSettings } from "/src/hooks/use-settings"; import { useRouter } from "next/router"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { Mail, Forward, Fingerprint } from "@mui/icons-material"; +import { Mail, Forward, Fingerprint, Launch } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import ReactTimeAgo from "react-time-ago"; @@ -53,6 +53,21 @@ const Page = () => { ), }, + { + icon: , + text: ( + + ), + }, ] : []; diff --git a/src/pages/identity/administration/users/user/edit.jsx b/src/pages/identity/administration/users/user/edit.jsx index 76998a10094b..2d793752dfd9 100644 --- a/src/pages/identity/administration/users/user/edit.jsx +++ b/src/pages/identity/administration/users/user/edit.jsx @@ -9,11 +9,12 @@ import { useEffect } from "react"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import { getCippLicenseTranslation } from "/src/utils/get-cipp-license-translation"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { Mail, Fingerprint } from "@mui/icons-material"; +import { Mail, Fingerprint, Launch } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import { CippCopyToClipBoard } from "../../../../../components/CippComponents/CippCopyToClipboard"; import { CippTimeAgo } from "../../../../../components/CippComponents/CippTimeAgo"; +import { Button } from "@mui/material"; const Page = () => { const userSettingsDefaults = useSettings(); const router = useRouter(); @@ -76,6 +77,21 @@ const Page = () => { ), }, + { + icon: , + text: ( + + ), + }, ] : []; diff --git a/src/pages/identity/administration/users/user/exchange.jsx b/src/pages/identity/administration/users/user/exchange.jsx index beccf92393e2..9b22c6ec415f 100644 --- a/src/pages/identity/administration/users/user/exchange.jsx +++ b/src/pages/identity/administration/users/user/exchange.jsx @@ -4,7 +4,7 @@ import { useRouter } from "next/router"; import { ApiGetCall } from "/src/api/ApiCall"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { Check, Error, Mail, Fingerprint } from "@mui/icons-material"; +import { Check, Error, Mail, Fingerprint, Launch } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import { CippTimeAgo } from "../../../../../components/CippComponents/CippTimeAgo"; @@ -113,6 +113,21 @@ const Page = () => { ), }, + { + icon: , + text: ( + + ), + }, ] : []; diff --git a/src/pages/identity/administration/users/user/index.jsx b/src/pages/identity/administration/users/user/index.jsx index f7d8937590d5..0d8628fdd9d5 100644 --- a/src/pages/identity/administration/users/user/index.jsx +++ b/src/pages/identity/administration/users/user/index.jsx @@ -4,7 +4,7 @@ import { useRouter } from "next/router"; import { ApiGetCall } from "/src/api/ApiCall"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; -import { AdminPanelSettings, Check, Group, Mail, Fingerprint } from "@mui/icons-material"; +import { AdminPanelSettings, Check, Group, Mail, Fingerprint, Launch } from "@mui/icons-material"; import { HeaderedTabbedLayout } from "../../../../../layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions"; import { CippCopyToClipBoard } from "../../../../../components/CippComponents/CippCopyToClipboard"; @@ -134,6 +134,21 @@ const Page = () => { ), }, + { + icon: , + text: ( + + ), + }, ] : []; From 355afec6b361b742959ee62bc63b872de0849d73 Mon Sep 17 00:00:00 2001 From: Esco Date: Fri, 7 Feb 2025 11:54:40 +0100 Subject: [PATCH 0114/1184] feat: Enterprise Application Links --- .../administration/enterprise-apps/index.js | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/pages/tenant/administration/enterprise-apps/index.js b/src/pages/tenant/administration/enterprise-apps/index.js index 58fa6b2ddf5f..258e09ce23d8 100644 --- a/src/pages/tenant/administration/enterprise-apps/index.js +++ b/src/pages/tenant/administration/enterprise-apps/index.js @@ -1,11 +1,33 @@ // this page is going to need some love for accounting for filters: https://github.com/KelvinTegelaar/CIPP/blob/main/src/views/tenant/administration/ListEnterpriseApps.jsx#L83 import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Launch } from "@mui/icons-material"; const Page = () => { const pageTitle = "Enterprise Applications"; const apiUrl = "/api/ListGraphRequest"; - const actions = []; + + const actions = [ + { + icon: , + label: "View Application", + link: `https://entra.microsoft.com/[Tenant]/#view/Microsoft_AAD_IAM/ManagedAppMenuBlade/~/Overview/objectId/[id]/appId/[appId]`, + color: "info", + target: "_blank", + multiPost: false, + external: true, + }, + { + icon: , + label: "View App Registration", + link: `https://entra.microsoft.com/[Tenant]/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/[appId]`, + color: "info", + target: "_blank", + multiPost: false, + external: true, + condition: (row) => row.tags.includes("WindowsAzureActiveDirectoryIntegratedApp"), + }, + ]; const offCanvas = { extendedInfoFields: [ @@ -31,7 +53,7 @@ const Page = () => { const apiParams = { Endpoint: "servicePrincipals", $select: - "appId,displayName,createdDateTime,accountEnabled,homepage,publisherName,signInAudience,replyUrls,verifiedPublisher,info,api,appOwnerOrganizationId,tags", + "id,appId,displayName,createdDateTime,accountEnabled,homepage,publisherName,signInAudience,replyUrls,verifiedPublisher,info,api,appOwnerOrganizationId,tags", $count: true, $top: 999, }; From 4e73dd43855100c1bc88fa1908452774146f332a Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 7 Feb 2025 12:54:29 +0100 Subject: [PATCH 0115/1184] fix cal permissions if folder is empty --- src/components/CippComponents/CippFormCondition.jsx | 3 +++ src/components/CippFormPages/CippExchangeSettingsForm.jsx | 2 +- src/pages/tools/templatelib/index.jsx | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/CippComponents/CippFormCondition.jsx b/src/components/CippComponents/CippFormCondition.jsx index 7d3dfd029b68..f6e3bdd4fdf2 100644 --- a/src/components/CippComponents/CippFormCondition.jsx +++ b/src/components/CippComponents/CippFormCondition.jsx @@ -66,6 +66,9 @@ export const CippFormCondition = (props) => { if (!watcher.includes(compareValue)) { return children; } + //extra elsseif; if the value is undefined or null, return children because it does not contain the compareValue + } else if (watcher === undefined || watcher === null) { + return children; } else if (typeof watcher === "object" && !(compareValue in watcher)) { // Check if object does not contain the key return children; diff --git a/src/components/CippFormPages/CippExchangeSettingsForm.jsx b/src/components/CippFormPages/CippExchangeSettingsForm.jsx index e46b0ab157f6..3f755ca3b804 100644 --- a/src/components/CippFormPages/CippExchangeSettingsForm.jsx +++ b/src/components/CippFormPages/CippExchangeSettingsForm.jsx @@ -257,7 +257,7 @@ const CippExchangeSettingsForm = (props) => { { Conditional Access From 2d921259891c5fbe50087ebe8b2b7caec0bfdb85 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 7 Feb 2025 14:38:20 +0100 Subject: [PATCH 0116/1184] text update --- src/pages/onboarding.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/onboarding.js b/src/pages/onboarding.js index ffe3018ddd58..ee61bbe28261 100644 --- a/src/pages/onboarding.js +++ b/src/pages/onboarding.js @@ -24,8 +24,7 @@ const Page = () => { value: "CreateApp", }, { - description: - "I would like to refresh my token or replace the user I've used for my previous token.", + description: "I would like to refresh my token or replace the account I've used.", icon: , label: "Refresh Tokens for existing application ", value: "UpdateTokens", From a7ca562d109ef2d7c72a285bc7c178dca2dad61c Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:27:28 +0100 Subject: [PATCH 0117/1184] add standard --- src/data/standards.json | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index cd56b3a69e2f..34db101496e7 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1201,6 +1201,31 @@ "powershellEquivalent": "Get-SharingPolicy | Set-SharingPolicy -Enabled $False", "recommendedBy": ["CIS"] }, + { + "name": "standards.DisableExternalCalendarSharing", + "cat": "Exchange Standards", + "tag": ["lowimpact", "CIS", "exo_individualsharing"], + "helpText": "Disables the ability for users to share their calendar with external users. Only for the default policy, so exclusions can be made if needed.", + "docsDescription": "Disables external calendar sharing for the entire tenant. This is not a widely used feature, and it's therefore unlikely that this will impact users. Only for the default policy, so exclusions can be made if needed by making a new policy and assigning it to users.", + "addedComponent": [], + "label": "Disable external calendar sharing", + "impact": "Low Impact", + "impactColour": "info", + "powershellEquivalent": "Get-SharingPolicy | Set-SharingPolicy -Enabled $False", + "recommendedBy": ["CIS"] + }, + { + "name": "standardsAutoAddProxy", + "cat": "Exchange Standards", + "tag": ["lowimpact", "CIS"], + "helpText": "Automatically adds all available domains as a proxy address.", + "docsDescription": "Automatically finds all available domain names in the tenant, and tries to add proxyaddresses based on the users UPN to each of these.", + "addedComponent": [], + "label": "Automatically deploy proxy addresses", + "impact": "Medium Impact", + "impactColour": "warning", + "powershellEquivalent": "set-mailbox -emailaddresses @{add=$emailaddress}" + }, { "name": "standards.DisableAdditionalStorageProviders", "cat": "Exchange Standards", @@ -1421,10 +1446,10 @@ "docsDescription": "Creates a CIPP - Deleted Items retention policy tag that permanently deletes items in the Deleted Items folder after X days.", "addedComponent": [ { - "type": "number", - "name": "standards.RetentionPolicyTag.AgeLimitForRetention", - "label": "Retention Days", - "required": true + "type": "number", + "name": "standards.RetentionPolicyTag.AgeLimitForRetention", + "label": "Retention Days", + "required": true } ], "label": "Retention Policy, permanently delete items in Deleted Items after X days", @@ -2791,7 +2816,7 @@ }, { "type": "autoComplete", - "required" : true, + "required": true, "multiple": false, "name": "standards.TeamsFederationConfiguration.DomainControl", "label": "Communication Mode", From aa156e959dd7f26c7bd602516d8b7fa6613b5aa8 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:46:24 +0100 Subject: [PATCH 0118/1184] available units update and correct url --- .../CippComponents/CippFormLicenseSelector.jsx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/components/CippComponents/CippFormLicenseSelector.jsx b/src/components/CippComponents/CippFormLicenseSelector.jsx index e435c1b467e1..0f8e1a6b867b 100644 --- a/src/components/CippComponents/CippFormLicenseSelector.jsx +++ b/src/components/CippComponents/CippFormLicenseSelector.jsx @@ -24,14 +24,11 @@ export const CippFormLicenseSelector = ({ api={{ addedField: addedField, tenantFilter: userSettingsDefaults.currentTenant ?? undefined, - url: "/api/ListGraphRequest", - dataKey: "Results", + url: "/api/ListLicenses", labelField: (option) => - `${getCippLicenseTranslation([option])} (${ - option.prepaidUnits.enabled - option.consumedUnits - } available)`, + `${getCippLicenseTranslation([option])} (${option?.availableUnits} available)`, valueField: "skuId", - queryKey: `ListLicenses-${userSettingsDefaults.currentTenant ?? undefined}`, + queryKey: `ListLicenses-${userSettingsDefaults?.currentTenant ?? undefined}`, data: { Endpoint: "subscribedSkus", $count: true, From c2477ce6d70329a62cb23680d4a6056fa3a04d28 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 7 Feb 2025 16:40:48 +0100 Subject: [PATCH 0119/1184] thanks esco --- src/data/standards.json | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index 34db101496e7..5f4c8e681986 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1201,19 +1201,6 @@ "powershellEquivalent": "Get-SharingPolicy | Set-SharingPolicy -Enabled $False", "recommendedBy": ["CIS"] }, - { - "name": "standards.DisableExternalCalendarSharing", - "cat": "Exchange Standards", - "tag": ["lowimpact", "CIS", "exo_individualsharing"], - "helpText": "Disables the ability for users to share their calendar with external users. Only for the default policy, so exclusions can be made if needed.", - "docsDescription": "Disables external calendar sharing for the entire tenant. This is not a widely used feature, and it's therefore unlikely that this will impact users. Only for the default policy, so exclusions can be made if needed by making a new policy and assigning it to users.", - "addedComponent": [], - "label": "Disable external calendar sharing", - "impact": "Low Impact", - "impactColour": "info", - "powershellEquivalent": "Get-SharingPolicy | Set-SharingPolicy -Enabled $False", - "recommendedBy": ["CIS"] - }, { "name": "standardsAutoAddProxy", "cat": "Exchange Standards", From a5d239b8086cd6287244a8dee41cf380e59b5330 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 13:32:41 -0500 Subject: [PATCH 0120/1184] Community Repos page --- src/pages/tools/community-repos/index.js | 235 +++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 src/pages/tools/community-repos/index.js diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js new file mode 100644 index 000000000000..04c3e7257037 --- /dev/null +++ b/src/pages/tools/community-repos/index.js @@ -0,0 +1,235 @@ +import { useState } from "react"; +import { Layout as DashboardLayout } from "/src/layouts"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { + Button, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + TextField, + Stack, + Card, + CardContent, + Divider, + Skeleton, + IconButton, + Tooltip, + Typography, + Alert, + Link, +} from "@mui/material"; +import { TrashIcon } from "@heroicons/react/24/outline"; +import { ApiPostCall } from "/src/api/ApiCall"; +import { useForm, FormProvider } from "react-hook-form"; +import { Radio, RadioGroup, FormControlLabel } from "@mui/material"; +import { CippFormCondition } from "/src/components/CippComponents/CippFormCondition"; +import AddIcon from "@mui/icons-material/Add"; +import { Box } from "@mui/system"; +import { Add, OpenInNew } from "@mui/icons-material"; +import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; +import { ApiGetCall } from "../../../api/ApiCall"; +import NextLink from "next/link"; +import CippFormComponent from "../../../components/CippComponents/CippFormComponent"; + +const Page = () => { + const [openSearch, setOpenSearch] = useState(false); + const [results, setResults] = useState([]); + const [repo, setRepo] = useState(""); + const [user, setUser] = useState(""); + + const actions = [ + { + label: "Delete", + type: "POST", + url: "/api/ExecCommunityRepo", + data: { Action: "Delete", Id: "Id" }, + confirmText: "Are you sure you want to delete this repo?", + icon: , + queryKey: "CommunityRepos", + }, + ]; + + const offCanvas = { + extendedInfoFields: ["Owner", "Name", "Description", "URL", "Visibility", "Permissions"], + actions: actions, + }; + + const integrations = ApiGetCall({ + url: "/api/ListExtensionsConfig", + queryKey: "Integrations", + }); + + const searchMutation = ApiPostCall({ + onResult: (resp) => { + setResults(resp?.Results || []); + }, + }); + + const searchForm = useForm({ defaultValues: { searchType: "user", searchTerm: [] } }); + const watchSearchTerm = searchForm.watch("searchTerm"); + + const handleSearch = () => { + const searchTerms = watchSearchTerm.map((t) => t.value) ?? []; + searchMutation.mutate({ + url: "/api/ExecGitHubAction", + data: { + Search: { + Repository: repo ? [repo] : [], + User: user ? [user] : [], + SearchTerm: searchTerms, + Type: "repositories", + }, + }, + }); + }; + + const addMutation = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: ["CommunityRepos"], + }); + + const handleAdd = (repoId) => { + addMutation.mutate({ + url: "/api/ExecCommunityRepo", + data: { Action: "Add", Id: repoId }, + }); + }; + + return ( + <> + + {integrations.isSuccess && !integrations.data?.GitHub?.Enabled && ( + + The community repositories feature requires the GitHub Integration to be enabled. Go + to the{" "} + + GitHub Integration + {" "} + page to enable it. + + )} + + } + apiUrl="/api/ListCommunityRepos" + apiDataKey="Results" + queryKey="CommunityRepos" + actions={actions} + offCanvas={offCanvas} + simpleColumns={["Owner", "Name", "URL", "Visibility", "WriteAccess"]} + cardButton={ + + } + /> + setOpenSearch(false)}> + Add Community Repositories from GitHub + + + + searchForm.setValue("searchType", e.target.value)} + > + } label="User" /> + } label="Repository" /> + + + + setRepo(e.target.value)} + /> + + + setUser(e.target.value)} + /> + + + + + + + + {searchMutation.isPending || + (searchMutation.isSuccess && Search Results)} + {searchMutation.isPending ? ( + + + + ) : ( + results.map((r) => ( + + + + + handleAdd(r.id)}> + + + + + window.open(r.html_url, "_blank")}> + + + + + {r.full_name} + + {r.html_url} + + + + + + )) + )} + + + + + + + + + + + + ); +}; + +Page.getLayout = (page) => {page}; +export default Page; From 01a17ab855945a6506af5486d328350b7d287784 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 14:54:55 -0500 Subject: [PATCH 0121/1184] control accordion state --- src/components/CippFormPages/CippJSONView.jsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/CippFormPages/CippJSONView.jsx b/src/components/CippFormPages/CippJSONView.jsx index 8fa0d5532484..90ba35c1464c 100644 --- a/src/components/CippFormPages/CippJSONView.jsx +++ b/src/components/CippFormPages/CippJSONView.jsx @@ -76,8 +76,13 @@ const renderListItems = (data, onItemClick) => { }); }; -function CippJsonView({ object = { "No Data Selected": "No Data Selected" }, type }) { +function CippJsonView({ + object = { "No Data Selected": "No Data Selected" }, + type, + defaultOpen = false, +}) { const [viewJson, setViewJson] = useState(false); + const [accordionOpen, setAccordionOpen] = useState(defaultOpen); const [drilldownData, setDrilldownData] = useState([]); const renderIntuneItems = (data) => { @@ -209,7 +214,11 @@ function CippJsonView({ object = { "No Data Selected": "No Data Selected" }, typ }; return ( - + setAccordionOpen(!accordionOpen)} + > } sx={{ display: "flex", alignItems: "center" }} From 1cdfeaa42a2ff5de98d7a64537a60439aef54929 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 14:55:24 -0500 Subject: [PATCH 0122/1184] update search results dialog --- src/pages/tools/community-repos/index.js | 65 +++++++++++++++--------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index 04c3e7257037..e02fe77dec2d 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -48,6 +48,11 @@ const Page = () => { icon: , queryKey: "CommunityRepos", }, + { + label: "View Templates", + link: "/tools/community-repos/repo?name=[FullName]", + icon: , + }, ]; const offCanvas = { @@ -188,30 +193,42 @@ const Page = () => { ) : ( - results.map((r) => ( - - - - - handleAdd(r.id)}> - - - - - window.open(r.html_url, "_blank")}> - - - - - {r.full_name} - - {r.html_url} - - - - - - )) + <> + {results.length === 0 && ( + + No search results found. Refine your query and try again. + + )} + + {results.map((r) => ( + + + + + handleAdd(r.id)}> + + + + + window.open(r.html_url, "_blank")} + > + + + + + {r.full_name} + + {r.html_url} + + + + + + ))} + + )} From 7ec50aa305ee289c2ffa5d7d6326bacc345c0d3a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 14:55:37 -0500 Subject: [PATCH 0123/1184] add view repository page --- src/pages/tools/community-repos/repo.js | 112 ++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 src/pages/tools/community-repos/repo.js diff --git a/src/pages/tools/community-repos/repo.js b/src/pages/tools/community-repos/repo.js new file mode 100644 index 000000000000..fec0db2e7078 --- /dev/null +++ b/src/pages/tools/community-repos/repo.js @@ -0,0 +1,112 @@ +import { useRouter } from "next/router"; +import { Layout as DashboardLayout } from "/src/layouts"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { useState, useEffect } from "react"; +import { ApiPostCall } from "/src/api/ApiCall"; +import { + Button, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Box, + Skeleton, + Alert, +} from "@mui/material"; +import { OpenInNew } from "@mui/icons-material"; +import CippJSONView from "/src/components/CippFormPages/CippJSONView"; +import { EyeIcon } from "@heroicons/react/24/outline"; + +const Page = () => { + const router = useRouter(); + const { name } = router.query; + const [openJsonDialog, setOpenJsonDialog] = useState(false); + const [fileResults, setFileResults] = useState([]); + const [jsonContent, setJsonContent] = useState({}); + + const searchMutation = ApiPostCall({ + onResult: (resp) => { + setFileResults(resp?.Results || []); + }, + }); + + const fileMutation = ApiPostCall({ + onResult: (resp) => { + setJsonContent(JSON.parse(resp?.Results?.content || "{}")); + }, + }); + + const handleJsonView = (url) => { + fileMutation.mutate({ + url: "/api/ExecGitHubAction", + data: { + GetFileContents: { + Url: url, + }, + }, + }); + setOpenJsonDialog(true); + }; + + useEffect(() => { + if (name) { + searchMutation.mutate({ + url: "/api/ExecGitHubAction", + data: { + Search: { + Repository: [name], + Type: "code", + Language: "json", + }, + }, + }); + } + }, [name]); + + return ( + <> + handleJsonView(row.url), + noConfirm: true, + icon: , + }, + ]} + /> + setOpenJsonDialog(false)} + > + Template Details + + {fileMutation.isPending ? ( + + + + ) : ( + + )} + + + + + + + ); +}; + +Page.getLayout = (page) => {page}; +export default Page; From ffdb671567bf9a1d0e53cad840845b54c5922acf Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 15:07:03 -0500 Subject: [PATCH 0124/1184] repo page tweakl --- src/pages/tools/community-repos/repo.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/tools/community-repos/repo.js b/src/pages/tools/community-repos/repo.js index fec0db2e7078..5fd76a9f983f 100644 --- a/src/pages/tools/community-repos/repo.js +++ b/src/pages/tools/community-repos/repo.js @@ -68,7 +68,6 @@ const Page = () => { { customFunction: (row) => handleJsonView(row.url), noConfirm: true, icon: , + hideBulk: true, }, ]} /> @@ -92,7 +92,7 @@ const Page = () => { {fileMutation.isPending ? ( - + ) : ( From 3f58396dad39168e4408decfa28999ca52ad5df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 7 Feb 2025 19:07:04 +0100 Subject: [PATCH 0125/1184] Add edit page and refactor other pages to fit add actions feat: Improve room mailbox edit page query handling Move around to make more sense --- .../resources/management/list-rooms/edit.jsx | 311 ++++++++++++++++++ .../resources/management/list-rooms/index.js | 56 +++- .../resources/management/room-lists/index.js | 1 + 3 files changed, 366 insertions(+), 2 deletions(-) create mode 100644 src/pages/email/resources/management/list-rooms/edit.jsx diff --git a/src/pages/email/resources/management/list-rooms/edit.jsx b/src/pages/email/resources/management/list-rooms/edit.jsx new file mode 100644 index 000000000000..91e9ecd66b11 --- /dev/null +++ b/src/pages/email/resources/management/list-rooms/edit.jsx @@ -0,0 +1,311 @@ +import React, { useEffect } from "react"; +import { Grid, Divider, Typography } from "@mui/material"; +import { useForm } from "react-hook-form"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import CippFormPage from "/src/components/CippFormPages/CippFormPage"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; +import { useSettings } from "/src/hooks/use-settings"; +import { useRouter } from "next/router"; +import { ApiGetCall } from "/src/api/ApiCall"; +import countryList from "/src/data/countryList.json"; + +const EditRoomMailbox = () => { + const router = useRouter(); + const { roomId } = router.query; + const tenantDomain = useSettings().currentTenant; + const formControl = useForm({ + mode: "onChange", + }); + + const roomInfo = ApiGetCall({ + url: `/api/ListRooms?roomId=${roomId}&tenantFilter=${tenantDomain}`, + queryKey: `Room-${roomId}`, + waiting: false, + }); + + useEffect(() => { + if (roomInfo.isSuccess && roomInfo.data?.[0]) { + const room = roomInfo.data[0]; + formControl.reset({ + // Core Properties + displayName: room.displayName, + hiddenFromAddressListsEnabled: room.hiddenFromAddressListsEnabled, + + // Room Booking Settings + capacity: room.capacity, + + // Location Information + building: room.building, + floor: room.floor, + floorLabel: room.floorLabel, + street: room.street, + city: room.city, + state: room.state, + postalCode: room.postalCode, + countryOrRegion: room.countryOrRegion + ? countryList.find((c) => c.Name === room.countryOrRegion)?.Code || "" + : "", + + // Room Equipment + audioDeviceName: room.audioDeviceName, + videoDeviceName: room.videoDeviceName, + displayDeviceName: room.displayDeviceName, + + // Room Features + isWheelChairAccessible: room.isWheelChairAccessible, + phone: room.phone, + tags: room.tags?.map(tag => ({ label: tag, value: tag })) || [], + }); + } + }, [roomInfo.isSuccess, roomInfo.data]); + + useEffect(() => { + if (roomId) { + roomInfo.refetch(); + } + }, [router.query, roomId, tenantDomain]); + + return ( + ({ + tenantID: tenantDomain, + roomId: roomId, + displayName: values.displayName?.trim(), + hiddenFromAddressListsEnabled: values.hiddenFromAddressListsEnabled, + + // Room Booking Settings + capacity: values.capacity, + + // Location Information + building: values.building?.trim(), + floor: values.floor, + floorLabel: values.floorLabel?.trim(), + street: values.street?.trim(), + city: values.city?.trim(), + state: values.state?.trim(), + postalCode: values.postalCode?.trim(), + countryOrRegion: values.countryOrRegion?.value || values.countryOrRegion, + + // Room Equipment + audioDeviceName: values.audioDeviceName?.trim(), + videoDeviceName: values.videoDeviceName?.trim(), + displayDeviceName: values.displayDeviceName?.trim(), + + // Room Features + isWheelChairAccessible: values.isWheelChairAccessible, + phone: values.phone?.trim(), + tags: values.tags?.map(tag => tag.value), + })} + > + + {/* Core & Booking Settings */} + + + + + + + + + + + + + + + + + + + {/* Location Information */} + + Location Information + + + {/* Building and Floor Info */} + + + + + + + + + + + + + + + + {/* Address Fields */} + + + + + + {/* City and Postal Code */} + + + + + + + + + {/* State and Country */} + + + + + + ({ + label: Name, + value: Code, + }))} + formControl={formControl} + /> + + + + + + + {/* Room Equipment */} + + Room Equipment + + + + + + + + + + + + + + + + + {/* Room Features */} + + Room Features + + + + + + + + + + + + ); +}; + +EditRoomMailbox.getLayout = (page) => {page}; + +export default EditRoomMailbox; \ No newline at end of file diff --git a/src/pages/email/resources/management/list-rooms/index.js b/src/pages/email/resources/management/list-rooms/index.js index a3fe7dab1547..9fc307d60e63 100644 --- a/src/pages/email/resources/management/list-rooms/index.js +++ b/src/pages/email/resources/management/list-rooms/index.js @@ -2,16 +2,68 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; -import { AddHomeWork } from "@mui/icons-material"; +import { AddHomeWork, Edit, Block, LockOpen } from "@mui/icons-material"; +import { TrashIcon } from "@heroicons/react/24/outline"; const Page = () => { const pageTitle = "Rooms"; + const actions = [ + { + label: "Edit Room", + link: `/email/resources/management/list-rooms/edit?roomId=[id]`, + icon: , + color: "info", + condition: (row) => !row.isDirSynced, + }, + { + label: "Block Sign In", + type: "GET", + icon: , + url: "/api/ExecDisableUser", + data: { ID: "id" }, + confirmText: "Are you sure you want to block the sign-in for this room mailbox?", + multiPost: false, + condition: (row) => !row.accountDisabled && !row.isDirSynced, + }, + { + label: "Unblock Sign In", + type: "GET", + icon: , + url: "/api/ExecDisableUser", + data: { ID: "id", Enable: true }, + confirmText: "Are you sure you want to unblock sign-in for this room mailbox?", + multiPost: false, + condition: (row) => row.accountDisabled && !row.isDirSynced, + }, + { + label: "Delete Room", + type: "GET", + icon: , + url: "/api/RemoveMailbox", + data: { ID: "mail" }, + confirmText: "Are you sure you want to delete this room mailbox?", + multiPost: false, + condition: (row) => !row.isDirSynced, + }, + ]; + return ( { title={pageTitle} apiUrl={apiUrl} actions={actions} + apiDataKey="ListRoomListsResults" offCanvas={offCanvas} simpleColumns={simpleColumns} /> From 7e2061a6aa91370bc12ee010d265a4a2421a7e7c Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 15:33:11 -0500 Subject: [PATCH 0126/1184] tweak community repos --- src/components/CippComponents/CippTranslations.jsx | 1 + src/layouts/config.js | 5 +++++ src/pages/tools/community-repos/index.js | 10 +++++----- src/pages/tools/community-repos/repo.js | 13 +++++++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/components/CippComponents/CippTranslations.jsx b/src/components/CippComponents/CippTranslations.jsx index 7761362d09ed..fef71fa8ccb0 100644 --- a/src/components/CippComponents/CippTranslations.jsx +++ b/src/components/CippComponents/CippTranslations.jsx @@ -45,4 +45,5 @@ export const CippTranslations = { storageUsedInBytes: "Storage Used", prohibitSendReceiveQuotaInBytes: "Quota", ClientId: "Client ID", + html_url: "URL", }; diff --git a/src/layouts/config.js b/src/layouts/config.js index b31f11be6088..e7093b9f1883 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -441,6 +441,11 @@ export const nativeMenuItems = [ path: "/tools/templatelib", roles: ["editor", "admin", "superadmin"], }, + { + title: "Community Repositories", + path: "/tools/community-repos", + roles: ["editor", "admin", "superadmin"], + }, { title: "Scheduler", path: "/cipp/scheduler", diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index e02fe77dec2d..d00432586c73 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -39,6 +39,11 @@ const Page = () => { const [user, setUser] = useState(""); const actions = [ + { + label: "View Templates", + link: "/tools/community-repos/repo?name=[FullName]", + icon: , + }, { label: "Delete", type: "POST", @@ -48,11 +53,6 @@ const Page = () => { icon: , queryKey: "CommunityRepos", }, - { - label: "View Templates", - link: "/tools/community-repos/repo?name=[FullName]", - icon: , - }, ]; const offCanvas = { diff --git a/src/pages/tools/community-repos/repo.js b/src/pages/tools/community-repos/repo.js index 5fd76a9f983f..c15b610b5f3d 100644 --- a/src/pages/tools/community-repos/repo.js +++ b/src/pages/tools/community-repos/repo.js @@ -81,6 +81,19 @@ const Page = () => { hideBulk: true, }, ]} + isFetching={searchMutation.isPending} + refreshFunction={() => + searchMutation.mutate({ + url: "/api/ExecGitHubAction", + data: { + Search: { + Repository: [name], + Type: "code", + Language: "json", + }, + }, + }) + } /> Date: Fri, 7 Feb 2025 23:19:50 +0100 Subject: [PATCH 0127/1184] FEAT: add alert for Entra ID license over-utilization --- src/data/alerts.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/data/alerts.json b/src/data/alerts.json index 1e2b8bdc0fc8..60d288d7329e 100644 --- a/src/data/alerts.json +++ b/src/data/alerts.json @@ -81,6 +81,15 @@ "label": "Alert on overused licenses", "recommendedRunInterval": "7d" }, + { + "name": "EntraLicenseUtilization", + "label": "Alert on Entra ID P1/P2 license over-utilization", + "recommendedRunInterval": "7d", + "requiresInput": true, + "inputType": "textField", + "inputLabel": "Alert when utilization exceeds % (default: 110)", + "inputName": "EntraLicenseUtilizationThreshold" + }, { "name": "AppSecretExpiry", "label": "Alert on expiring application secrets", From c2bd07042f8b3287752f218b430382722ebae6a6 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 7 Feb 2025 23:45:33 -0500 Subject: [PATCH 0128/1184] Update index.js --- src/pages/tools/community-repos/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index d00432586c73..8fe3c2b65da1 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -125,7 +125,7 @@ const Page = () => { queryKey="CommunityRepos" actions={actions} offCanvas={offCanvas} - simpleColumns={["Owner", "Name", "URL", "Visibility", "WriteAccess"]} + simpleColumns={["Name", "Owner", "URL", "Visibility", "WriteAccess"]} cardButton={ + color="muted" + style={{ paddingLeft: 0 }} + size="small" + href={`https://entra.microsoft.com/${userSettingsDefaults.currentTenant}/#view/Microsoft_AAD_UsersAndTenants/UserProfileMenuBlade/~/overview/userId/${userId}`} + target="_blank" + rel="noopener noreferrer" + > + View in Entra + ), }, ] @@ -113,11 +114,13 @@ const Page = () => { > {userRequest.isLoading && } {userRequest.isSuccess && ( - + + + )} From 085f8cc55f616ba9d039f8ba9a127757e8bfa6f7 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 8 Feb 2025 18:00:26 -0500 Subject: [PATCH 0133/1184] disable option creation on tenant selector --- src/components/CippComponents/CippFormTenantSelector.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/CippComponents/CippFormTenantSelector.jsx b/src/components/CippComponents/CippFormTenantSelector.jsx index 032d4d6ad96f..d4e0b6587c76 100644 --- a/src/components/CippComponents/CippFormTenantSelector.jsx +++ b/src/components/CippComponents/CippFormTenantSelector.jsx @@ -38,6 +38,7 @@ export const CippFormTenantSelector = ({ customerId: "customerId", }, }} + creatable={false} multiple={type === "single" ? false : true} disableClearable={disableClearable} validators={validators} From eb903beb377dcbbb7a88b4204075377f90fa8365 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 8 Feb 2025 18:01:07 -0500 Subject: [PATCH 0134/1184] Scheduler: default to textField values on --- src/components/CippFormPages/CippSchedulerForm.jsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/CippFormPages/CippSchedulerForm.jsx b/src/components/CippFormPages/CippSchedulerForm.jsx index 5bc71dd02211..b0296ce1f723 100644 --- a/src/components/CippFormPages/CippSchedulerForm.jsx +++ b/src/components/CippFormPages/CippSchedulerForm.jsx @@ -230,7 +230,16 @@ const CippSchedulerForm = (props) => { placeholder={`Enter a value for ${param.Name}`} validators={fieldRequired(param)} /> - ) : null} + ) : ( + + )} ))} From cbd0261f811dec264069dd2ea952eda5ec4ca3dc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 8 Feb 2025 19:52:16 -0500 Subject: [PATCH 0135/1184] add filters --- src/pages/cipp/scheduler/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/pages/cipp/scheduler/index.js b/src/pages/cipp/scheduler/index.js index 18b0d01a89b5..97abcc20b602 100644 --- a/src/pages/cipp/scheduler/index.js +++ b/src/pages/cipp/scheduler/index.js @@ -34,6 +34,29 @@ const Page = () => { }, ]; + const filterList = [ + { + filterName: "Running", + value: [{ id: "TaskState", value: "Running" }], + type: "column", + }, + { + filterName: "Planned", + value: [{ id: "TaskState", value: "Planned" }], + type: "column", + }, + { + filterName: "Failed", + value: [{ id: "TaskState", value: "Failed" }], + type: "column", + }, + { + filterName: "Completed", + value: [{ id: "TaskState", value: "Completed" }], + type: "column", + }, + ]; + const offCanvas = { children: (extendedData) => ( <> @@ -75,6 +98,7 @@ const Page = () => { ]} actions={actions} offCanvas={offCanvas} + filters={filterList} /> ); }; From bde053a3d2729e2967a10d8ed42550612aa42ffc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 8 Feb 2025 20:56:21 -0500 Subject: [PATCH 0136/1184] scheduler form fixes reduce rerenders on autocompletes remove transition animations memoize components --- .../CippComponents/CippAutocomplete.jsx | 62 ++- .../CippComponents/CippFormComponent.jsx | 24 +- .../CippFormPages/CippSchedulerForm.jsx | 382 ++++++++++-------- 3 files changed, 265 insertions(+), 203 deletions(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 1742ab9c17f2..7ce4c872f45a 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -6,12 +6,42 @@ import { TextField, IconButton, } from "@mui/material"; -import { useEffect, useState } from "react"; +import { useEffect, useState, useMemo, useCallback } from "react"; import { useSettings } from "../../hooks/use-settings"; import { getCippError } from "../../utils/get-cipp-error"; import { ApiGetCallWithPagination } from "../../api/ApiCall"; import { Sync } from "@mui/icons-material"; import { Stack } from "@mui/system"; +import React from "react"; + +const MemoTextField = React.memo(function MemoTextField({ params, label, ...otherProps }) { + const { InputProps, ...otherParams } = params; + + return ( + + ); +}); export const CippAutoComplete = (props) => { const { @@ -136,6 +166,8 @@ export const CippAutoComplete = (props) => { } }, [api, actionGetRequest.data, actionGetRequest.isSuccess, actionGetRequest.isError]); + const memoizedOptions = useMemo(() => (api ? usedOptions : options), [api, usedOptions, options]); + const rand = Math.random().toString(36).substring(5); return ( @@ -143,7 +175,7 @@ export const CippAutoComplete = (props) => { key={`${defaultValue}-${rand}`} disabled={disabled || actionGetRequest.isFetching || isFetching} popupIcon={ - actionGetRequest.isFetching ? ( + actionGetRequest.isFetching || isFetching ? ( ) : ( @@ -216,24 +248,20 @@ export const CippAutoComplete = (props) => { onChange(newValue, newValue?.addedFields); } }} - options={api ? usedOptions : options} - getOptionLabel={(option) => - option - ? option.label === null - ? "" - : option.label || "Label not found - Are you missing a labelField?" - : "" - } + options={memoizedOptions} + getOptionLabel={useCallback( + (option) => + option + ? option.label === null + ? "" + : option.label || "Label not found - Are you missing a labelField?" + : "", + [] + )} sx={sx} renderInput={(params) => ( - + {api?.url && api?.showRefresh && ( { name={convertedName} control={formControl.control} rules={validators} - render={({ field }) => ( - field.onChange(value.value)} - /> - )} + render={({ field }) => + React.memo( + field.onChange(value.value)} + /> + ) + } /> diff --git a/src/components/CippFormPages/CippSchedulerForm.jsx b/src/components/CippFormPages/CippSchedulerForm.jsx index b0296ce1f723..03579b6cd2e4 100644 --- a/src/components/CippFormPages/CippSchedulerForm.jsx +++ b/src/components/CippFormPages/CippSchedulerForm.jsx @@ -1,5 +1,5 @@ import React from "react"; -import { Box, Button, Grid, Skeleton, SvgIcon, Typography } from "@mui/material"; +import { Box, Button, Divider, Grid, Skeleton, SvgIcon, Typography } from "@mui/material"; import { useWatch } from "react-hook-form"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { CippFormTenantSelector } from "/src/components/CippComponents/CippFormTenantSelector"; @@ -112,200 +112,232 @@ const CippSchedulerForm = (props) => { commands.isSuccess, ]); + const advancedParameters = useWatch({ control: formControl.control, name: "advancedParameters" }); + + useEffect(() => { + if (advancedParameters === true) { + var schedulerValues = formControl.getValues("parameters"); + Object.keys(schedulerValues).forEach((key) => { + if (schedulerValues[key] === "" || schedulerValues[key] === null) { + delete schedulerValues[key]; + } + }); + const jsonString = JSON.stringify(schedulerValues, null, 2); + formControl.setValue("RawJsonParameters", jsonString); + } + }, [advancedParameters]); + const gridSize = fullWidth ? 12 : 4; // Adjust size based on fullWidth prop return ( - - {(scheduledTaskList.isFetching || tenantList.isLoading || commands.isLoading) && ( - - )} - - - - - - - + <> + + {(scheduledTaskList.isFetching || tenantList.isLoading || commands.isLoading) && ( + + )} + + + - - { - return { - label: command.Function, - value: command.Function, - addedFields: command, - }; - }) || [] - } - validators={{ - validate: (value) => { - if (!value) { - return "Please select a Command"; - } - return true; - }, - }} - /> - - - - - - - - {selectedCommand?.addedFields?.Synopsis && ( - - PowerShell Command: - - {selectedCommand.addedFields.Synopsis} - - + + + + + { + return { + label: command.Function, + value: command.Function, + addedFields: command, + }; + }) || [] + } + validators={{ + validate: (value) => { + if (!value) { + return "Please select a Command"; + } + return true; + }, + }} + /> + + + + + + - )} + {selectedCommand?.addedFields?.Synopsis && ( + + + PowerShell Command: + + {selectedCommand.addedFields.Synopsis} + + + + )} - {selectedCommand?.addedFields?.Parameters?.map((param, idx) => ( + {selectedCommand?.addedFields?.Parameters?.map((param, idx) => ( + + + {param.Type === "System.Boolean" || + param.Type === "System.Management.Automation.SwitchParameter" ? ( + + ) : param.Type === "System.Collections.Hashtable" ? ( + + ) : param.Type?.startsWith("System.String") ? ( + + ) : ( + + )} + + + ))} + + + + + + - - {param.Type === "System.Boolean" || - param.Type === "System.Management.Automation.SwitchParameter" ? ( - - ) : param.Type === "System.Collections.Hashtable" ? ( - - ) : param.Type?.startsWith("System.String") ? ( - - ) : ( - - )} + + getCippValidator(value, "json"), + }} + formControl={formControl} + multiline + rows={4} + placeholder={`Enter a JSON object`} + /> - ))} - - - - getCippValidator(value, "json"), - }} + type="autoComplete" + name="postExecution" + label="Post Execution Actions" formControl={formControl} - multiline - rows={4} - placeholder={`Enter a JSON object`} + multiple + creatable={false} + options={[ + { label: "Webhook", value: "Webhook" }, + { label: "Email", value: "Email" }, + { label: "PSA", value: "PSA" }, + ]} /> - - - - - - + + + - + + ); }; From b1931561f6721d530b4becb5bbc193d9c88ccdc5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 8 Feb 2025 21:21:03 -0500 Subject: [PATCH 0137/1184] CippApiDialog memoize in CippDatatable disable confirm button after submission add new parameter allowResubmit (default false) --- .../CippComponents/CippApiDialog.jsx | 15 ++++++++++-- src/components/CippTable/CippDataTable.js | 23 +++++++++++-------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 99c5bcc455c9..f8f7b00b57e6 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -17,11 +17,20 @@ export const CippApiDialog = (props) => { row = {}, relatedQueryKeys, dialogAfterEffect, + allowResubmit = false, ...other } = props; const router = useRouter(); const [addedFieldData, setAddedFieldData] = useState({}); const [partialResults, setPartialResults] = useState([]); + const [isFormSubmitted, setIsFormSubmitted] = useState(false); + + useEffect(() => { + if (createDialog.open) { + setIsFormSubmitted(false); + } + }, [createDialog.open]); + const [getRequestInfo, setGetRequestInfo] = useState({ url: "", waiting: false, @@ -103,6 +112,7 @@ export const CippApiDialog = (props) => { }; const tenantFilter = useSettings().currentTenant; const handleActionClick = (row, action, formData) => { + setIsFormSubmitted(true); if (action.multiPost === undefined) { action.multiPost = false; } @@ -304,9 +314,10 @@ export const CippApiDialog = (props) => { - + {console.log("isFormSubmitted", isFormSubmitted)} diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 005678d16998..bd95a9baa393 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -358,16 +358,19 @@ export const CippDataTable = (props) => { customComponent={offCanvas?.customComponent} {...offCanvas} /> - {actionData.ready && ( - - )} + {useMemo(() => { + if (!actionData.ready) return null; + return ( + + ); + }, [actionData.ready, createDialog, actionData.action, actionData.data, queryKey, title])} ); }; From db0e254d89c9ab6012508f51094aedeebd45fb6b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 8 Feb 2025 21:54:39 -0500 Subject: [PATCH 0138/1184] fix form state changes on save --- src/components/CippSettings/CippCustomRoles.jsx | 7 ++----- src/pages/cipp/super-admin/function-offloading.js | 2 +- src/pages/cipp/super-admin/tenant-mode.js | 2 +- src/pages/tenant/gdap-management/offboarding.js | 1 + 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/components/CippSettings/CippCustomRoles.jsx b/src/components/CippSettings/CippCustomRoles.jsx index 6387ae339a4f..a71d3f0b7ea2 100644 --- a/src/components/CippSettings/CippCustomRoles.jsx +++ b/src/components/CippSettings/CippCustomRoles.jsx @@ -67,10 +67,7 @@ export const CippCustomRoles = () => { queryKey: "customRoleList", }); - const { - data: { pages = [] } = {}, - isSuccess: tenantsSuccess, - } = ApiGetCallWithPagination({ + const { data: { pages = [] } = {}, isSuccess: tenantsSuccess } = ApiGetCallWithPagination({ url: "/api/ListTenants?AllTenantSelector=true", queryKey: "ListTenants-AllTenantSelector", }); @@ -280,7 +277,7 @@ export const CippCustomRoles = () => { label: role.RowKey, value: role.RowKey, }))} - isLoading={customRoleListFetching} + isFetching={customRoleListFetching} refreshFunction={() => refetchCustomRoleList()} creatable={true} formControl={formControl} diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 489785fa9274..904c5640f0db 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -31,7 +31,7 @@ const Page = () => { OffloadFunctions: execOffloadFunctions.data?.OffloadFunctions, }); } - }, [execOffloadFunctions.isSuccess]); + }, [execOffloadFunctions.isSuccess, execOffloadFunctions.data]); return ( { TenantMode: execPartnerMode.data?.TenantMode, }); } - }, [execPartnerMode.isSuccess]); + }, [execPartnerMode.isSuccess, execPartnerMode.data]); return ( { hideBackButton={true} hidePageType={true} postUrl="/api/ExecOffboardTenant" + resetForm={true} > From 1f046acecc83569c5b0b975b84e3817b3f035033 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 8 Feb 2025 21:56:05 -0500 Subject: [PATCH 0139/1184] prevent resubmit on cippformpage --- src/components/CippFormPages/CippFormPage.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/CippFormPages/CippFormPage.jsx b/src/components/CippFormPages/CippFormPage.jsx index 7db1575e9620..71b0cf5e7682 100644 --- a/src/components/CippFormPages/CippFormPage.jsx +++ b/src/components/CippFormPages/CippFormPage.jsx @@ -32,6 +32,7 @@ const CippFormPage = (props) => { hidePageType = false, hideTitle = false, hideSubmit = false, + allowResubmit = false, addedButtons, ...other } = props; @@ -42,7 +43,7 @@ const CippFormPage = (props) => { relatedQueryKeys: queryKey, }); - const { isValid } = useFormState({ control: formControl.control }); + const { isValid, isDirty } = useFormState({ control: formControl.control }); useEffect(() => { delete router.query.tenantFilter; @@ -133,7 +134,7 @@ const CippFormPage = (props) => { {addedButtons && addedButtons} - {console.log("isFormSubmitted", isFormSubmitted)} diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 9f51d6aa0c9a..2dc0d021e1cd 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -89,7 +89,7 @@ const CippApiClientManagement = () => { }, { type: "autoComplete", - name: "IpRange", + name: "IPRange", multiple: true, freeSolo: true, creatable: true, @@ -324,7 +324,7 @@ const CippApiClientManagement = () => { }, { type: "autoComplete", - name: "IpRange", + name: "IPRange", multiple: true, freeSolo: true, creatable: true, @@ -391,7 +391,7 @@ const CippApiClientManagement = () => { }, { type: "autoComplete", - name: "IpRange", + name: "IPRange", multiple: true, freeSolo: true, creatable: true, From 0cf18352d0d99e60e08ef937e3b4e8f4935986e7 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 9 Feb 2025 19:49:06 -0500 Subject: [PATCH 0151/1184] fix skeleton loading for second half --- .../CippCards/CippPropertyListCard.jsx | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/components/CippCards/CippPropertyListCard.jsx b/src/components/CippCards/CippPropertyListCard.jsx index ff7cdcd92a64..136d77e61635 100644 --- a/src/components/CippCards/CippPropertyListCard.jsx +++ b/src/components/CippCards/CippPropertyListCard.jsx @@ -122,15 +122,25 @@ export const CippPropertyListCard = (props) => { )} - {secondHalf.map((item, index) => ( + {isFetching ? ( } /> - ))} + ) : ( + secondHalf.map((item, index) => ( + + )) + )} )} From 92e0c42aa164bc214a53208b515a801472049b8a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 9 Feb 2025 19:56:09 -0500 Subject: [PATCH 0152/1184] fix CippApiResults reopen --- src/components/CippComponents/CippApiResults.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/CippComponents/CippApiResults.jsx b/src/components/CippComponents/CippApiResults.jsx index 3ef597b2ddb1..21af58b8cc39 100644 --- a/src/components/CippComponents/CippApiResults.jsx +++ b/src/components/CippComponents/CippApiResults.jsx @@ -1,6 +1,6 @@ -import { Close, ContentCopy } from "@mui/icons-material"; +import { Close } from "@mui/icons-material"; import { Alert, CircularProgress, Collapse, IconButton, Typography } from "@mui/material"; -import { useEffect, useState, useMemo } from "react"; +import { useEffect, useState, useMemo, useCallback } from "react"; import { getCippError } from "../../utils/get-cipp-error"; import { CippCopyToClipBoard } from "./CippCopyToClipboard"; import { Grid } from "@mui/system"; @@ -136,7 +136,7 @@ export const CippApiResults = (props) => { const allResults = useMemo(() => { const apiResults = extractAllResults(correctResultObj); return apiResults; - }, [apiObject]); + }, [correctResultObj]); useEffect(() => { setErrorVisible(!!apiObject.isError); @@ -170,9 +170,9 @@ export const CippApiResults = (props) => { errorsOnly, ]); - const handleCloseResult = (id) => { + const handleCloseResult = useCallback((id) => { setFinalResults((prev) => prev.map((r) => (r.id === id ? { ...r, visible: false } : r))); - }; + }, []); const hasVisibleResults = finalResults.some((r) => r.visible); return ( From d777103586c6ccc00de890db61a81bfa805abd21 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 9 Feb 2025 20:40:21 -0500 Subject: [PATCH 0153/1184] remove mapped tenants from integration map --- src/components/CippComponents/CippAutocomplete.jsx | 13 +++++++++++-- .../CippComponents/CippFormTenantSelector.jsx | 2 ++ .../CippIntegrationTenantMapping.jsx | 4 +++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 6747ae0c896b..6bc938b1bf81 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -68,6 +68,7 @@ export const CippAutoComplete = (props) => { required = false, isFetching = false, sx, + removeOptions = [], ...other } = props; @@ -172,7 +173,15 @@ export const CippAutoComplete = (props) => { } }, [api, actionGetRequest.data, actionGetRequest.isSuccess, actionGetRequest.isError]); - const memoizedOptions = useMemo(() => (api ? usedOptions : options), [api, usedOptions, options]); + const memoizedOptions = useMemo(() => { + let finalOptions = api ? usedOptions : options; + if (removeOptions && removeOptions.length) { + finalOptions = finalOptions.filter( + (o) => !removeOptions.includes(o.value) + ); + } + return finalOptions; + }, [api, usedOptions, options, removeOptions]); const rand = Math.random().toString(36).substring(5); @@ -201,7 +210,7 @@ export const CippAutoComplete = (props) => { options.some( (option) => params.inputValue === option.value || params.inputValue === option.label ); - + console.log(removeOptions); if (params.inputValue !== "" && creatable && !isExisting) { filtered.push({ label: `Add option: "${params.inputValue}"`, diff --git a/src/components/CippComponents/CippFormTenantSelector.jsx b/src/components/CippComponents/CippFormTenantSelector.jsx index d4e0b6587c76..9a8746e5ea4e 100644 --- a/src/components/CippComponents/CippFormTenantSelector.jsx +++ b/src/components/CippComponents/CippFormTenantSelector.jsx @@ -9,6 +9,7 @@ export const CippFormTenantSelector = ({ valueField = "defaultDomainName", required = true, disableClearable = true, + removeOptions = [], ...other }) => { const validators = () => { @@ -42,6 +43,7 @@ export const CippFormTenantSelector = ({ multiple={type === "single" ? false : true} disableClearable={disableClearable} validators={validators} + removeOptions={removeOptions} {...other} /> ); diff --git a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx index 6bc3e95caea6..179f057db2d2 100644 --- a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx +++ b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx @@ -85,7 +85,7 @@ const CippIntegrationSettings = ({ children }) => { if (tableData?.find((item) => item.TenantId === selectedTenant.addedFields.customerId)) return; const newRowData = { - TenantId: selectedTenant.addedFields.customerId, + TenantId: selectedTenant.value, Tenant: selectedTenant.label, IntegrationName: selectedCompany.label, IntegrationId: selectedCompany.value, @@ -167,6 +167,8 @@ const CippIntegrationSettings = ({ children }) => { multiple={false} required={false} disableClearable={false} + removeOptions={tableData.map((item) => item.TenantId)} + valueField="customerId" /> From ee8ccebe45c72adde3ce0d9c1638bfd0c329ee61 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 9 Feb 2025 21:14:28 -0500 Subject: [PATCH 0154/1184] CippApiDialog add variable replace in confirmText --- .../CippComponents/CippApiDialog.jsx | 31 ++++++++++++++----- .../CippApiClientManagement.jsx | 6 ++-- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 0b5811578679..dc75f5b54781 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -268,14 +268,14 @@ export const CippApiDialog = (props) => { } }, [createDialog.open, api?.setDefaultValues]); + const getNestedValue = (obj, path) => { + return path + .split(".") + .reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj); + }; + // Handling link navigation if (api.link) { - const getNestedValue = (obj, path) => { - return path - .split(".") - .reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj); - }; - const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { return getNestedValue(row, key) || `[${key}]`; }); @@ -300,12 +300,29 @@ export const CippApiDialog = (props) => { setPartialResults([]); }; + var confirmText; + console.log(row); + if (typeof api?.confirmText === "string" && !Array.isArray(row)) { + confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, (_, key) => { + return getNestedValue(row, key) || `[${key}]`; + }); + } else if (Array.isArray(row) && row.length > 1) { + confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, "the selected rows"); + } else if (Array.isArray(row) && row.length === 1) { + console.log("single row in array"); + confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, (_, key) => { + return getNestedValue(row[0], key) || `[${key}]`; + }); + } else { + confirmText = api.confirmText; + } + return (
    {title} - {api.confirmText} + {confirmText} diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 2dc0d021e1cd..71b60116dd50 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -68,7 +68,7 @@ const CippApiClientManagement = () => { ), - confirmText: "Update the API client settings:", + confirmText: "Update the API client settings for [AppName]?", hideBulk: true, setDefaultValues: true, fields: [ @@ -114,7 +114,7 @@ const CippApiClientManagement = () => { { label: "Reset Application Secret", icon: , - confirmText: "Are you sure you want to reset the application secret?", + confirmText: "Are you sure you want to reset the application secret for [AppName]?", type: "POST", url: "/api/ExecApiClient", data: { @@ -136,7 +136,7 @@ const CippApiClientManagement = () => { { label: "Delete Client", icon: , - confirmText: "Are you sure you want to delete this client?", + confirmText: "Are you sure you want to delete [AppName]?", type: "POST", url: "/api/ExecApiClient", data: { From dc07d6d32b679313043578e3a4cc50bb60d53383 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 9 Feb 2025 21:44:17 -0500 Subject: [PATCH 0155/1184] clear search query on close dialog --- src/pages/tenant/standards/template.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/tenant/standards/template.jsx b/src/pages/tenant/standards/template.jsx index 2a5934014bc6..e9319bd742b8 100644 --- a/src/pages/tenant/standards/template.jsx +++ b/src/pages/tenant/standards/template.jsx @@ -74,7 +74,10 @@ const Page = () => { }, {}); const handleOpenDialog = () => setDialogOpen(true); - const handleCloseDialog = () => setDialogOpen(false); + const handleCloseDialog = () => { + setDialogOpen(false); + setSearchQuery(""); + }; const filterStandards = (standardsList) => standardsList.filter( From 11fd2bbf072ade0354f5823415657d3b04c363b3 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 9 Feb 2025 21:58:53 -0500 Subject: [PATCH 0156/1184] scroll standards and keep search box at the top --- .../CippComponents/CippApiDialog.jsx | 1 - .../CippStandards/CippStandardDialog.jsx | 31 +++++++------------ 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index dc75f5b54781..653c69541dca 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -301,7 +301,6 @@ export const CippApiDialog = (props) => { }; var confirmText; - console.log(row); if (typeof api?.confirmText === "string" && !Array.isArray(row)) { confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, (_, key) => { return getNestedValue(row, key) || `[${key}]`; diff --git a/src/components/CippStandards/CippStandardDialog.jsx b/src/components/CippStandards/CippStandardDialog.jsx index d2b94853e6ee..69b014d723e4 100644 --- a/src/components/CippStandards/CippStandardDialog.jsx +++ b/src/components/CippStandards/CippStandardDialog.jsx @@ -48,21 +48,25 @@ const CippStandardDialog = ({ ); return ( - + }} + > Select a Standard to Add handleSearchQueryChange(e.target.value.toLowerCase())} /> - + {Object.keys(categories).every( (category) => filterStandards(categories[category]).length === 0 ) ? ( @@ -101,12 +105,7 @@ const CippStandardDialog = ({ Category: - + {standard.tag?.filter((tag) => !tag.toLowerCase().includes("impact")).length > 0 && ( <> @@ -147,11 +146,7 @@ const CippStandardDialog = ({ Recommended By: - + {standard.recommendedBy.join(", ")} @@ -172,9 +167,7 @@ const CippStandardDialog = ({ control={ - handleToggleSingleStandard(standard.name) - } + onChange={() => handleToggleSingleStandard(standard.name)} /> } label="Add this standard to the template" From 95514f81572b6b4ea157c0f2472bd104dfff5fe1 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 9 Feb 2025 23:19:15 -0500 Subject: [PATCH 0157/1184] fix securescore add actionLink handler to Remediate fix text decoration on links in html --- .../administration/securescore/index.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/pages/tenant/administration/securescore/index.js b/src/pages/tenant/administration/securescore/index.js index 432b4946e82f..b84506ca01c7 100644 --- a/src/pages/tenant/administration/securescore/index.js +++ b/src/pages/tenant/administration/securescore/index.js @@ -28,6 +28,14 @@ const Page = () => { TimeAgo.addLocale(en); const timeAgo = new TimeAgo("en-US"); + + const openRemediation = (url) => { + if (url.startsWith("https")) { + window.open(url, "_blank"); + } else { + navigate(url); + } + }; return ( { CardButton={ <> - + {secureScoreControl.controlStateUpdates?.length > 0 && ( - + { ))} )} - {apiObject.isSuccess || apiObject.isError ? ( + {(apiObject.isSuccess || apiObject.isError) && !errorsOnly ? ( tableDialog.handleOpen()}> diff --git a/src/components/CippFormPages/CippExchangeSettingsForm.jsx b/src/components/CippFormPages/CippExchangeSettingsForm.jsx index 3f755ca3b804..66d8bb4b6ecb 100644 --- a/src/components/CippFormPages/CippExchangeSettingsForm.jsx +++ b/src/components/CippFormPages/CippExchangeSettingsForm.jsx @@ -515,7 +515,7 @@ const CippExchangeSettingsForm = (props) => { - + {section.formContent} diff --git a/src/components/CippSettings/CippPermissionCheck.jsx b/src/components/CippSettings/CippPermissionCheck.jsx index 5ad0f5d0a502..db0c81c7ad38 100644 --- a/src/components/CippSettings/CippPermissionCheck.jsx +++ b/src/components/CippSettings/CippPermissionCheck.jsx @@ -142,7 +142,7 @@ const CippPermissionCheck = (props) => { {(executeCheck.isSuccess || executeCheck.isLoading) && ( <> {executeCheck.data?.Metadata?.AlertMessage && ( - + - + diff --git a/src/data/Extensions.json b/src/data/Extensions.json index 64c5bb8f59df..ab1dc4c20c95 100644 --- a/src/data/Extensions.json +++ b/src/data/Extensions.json @@ -515,7 +515,7 @@ "logo": "/assets/integrations/github.png", "logoDark": "/assets/integrations/github_dark.png", "description": "Enable the GitHub integration to manage your repositories from CIPP.", - "helpText": "This integration allows you to manage GitHub repositories from CIPP, including the Community Repositorities functionality. Requires a GitHub Personal Access Token (PAT) with a minimum of repo:public_repo permissions. You can create a PAT in your GitHub account settings, see the GitHub Token documentation for more info.", + "helpText": "This integration allows you to manage GitHub repositories from CIPP, including the Community Repositorities functionality. Requires a GitHub Personal Access Token (PAT) with a minimum of repo:public_repo permissions. If you plan on saving your templates to GitHub or accessing private/internal repositories, you will need to grant the whole repo scope. You can create a PAT in your GitHub account settings, see the GitHub Token documentation for more info. If you do not enable the extension, a read-only API will be provided.", "links": [ { "name": "GitHub Token", diff --git a/src/pages/tenant/standards/list-standards/index.js b/src/pages/tenant/standards/list-standards/index.js index 2d9b4493d975..40a215deac87 100644 --- a/src/pages/tenant/standards/list-standards/index.js +++ b/src/pages/tenant/standards/list-standards/index.js @@ -3,7 +3,7 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Layout as DashboardLayout } from "/src/layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative. import Link from "next/link"; import { EyeIcon } from "@heroicons/react/24/outline"; -import { CopyAll, Delete, PlayArrow, AddBox, Visibility, Edit } from "@mui/icons-material"; +import { CopyAll, Delete, PlayArrow, AddBox, Visibility, Edit, GitHub } from "@mui/icons-material"; import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall"; import { Grid } from "@mui/system"; import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; @@ -51,6 +51,37 @@ const Page = () => { confirmText: "Are you sure you want to force a run of this template?", multiPost: false, }, + { + label: "Save to GitHub", + type: "POST", + url: "/api/ExecCommunityRepo", + icon: , + data: { + Action: "UploadTemplate", + GUID: "GUID", + }, + fields: [ + { + label: "Repository", + name: "FullName", + type: "select", + api: { + url: "/api/ListCommunityRepos", + data: { + WriteAccess: true, + }, + queryKey: "CommunityRepos-Write", + dataKey: "Results", + valueField: "FullName", + labelField: "FullName", + }, + multiple: false, + createable: false, + }, + + ], + confirmText: "Are you sure you want to save this template to the selected repository?", + }, { label: "Delete Template", type: "POST", diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index 044fe1c8e035..9faebdc1a1f6 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -39,6 +39,28 @@ const Page = () => { const [repo, setRepo] = useState(""); const [user, setUser] = useState(""); const [org, setOrg] = useState(""); + const [openCreate, setOpenCreate] = useState(false); + const createForm = useForm({ mode: "onChange", defaultValues: { Type: "user" } }); + + const createMutation = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: ["CommunityRepos"], + }); + + const handleCreateRepo = (values) => { + console.log(values); + createMutation.mutate({ + url: "/api/ExecGitHubAction", + data: { + Action: "CreateRepo", + Type: values.type, + Name: values.repoName, + Org: values.orgName?.value, + Description: values.Description, + Private: values.Private, + }, + }); + }; const actions = [ { @@ -63,12 +85,8 @@ const Page = () => { actions: actions, }; - const integrations = ApiGetCall({ - url: "/api/ListExtensionsConfig", - queryKey: "Integrations", - }); - const searchMutation = ApiPostCall({ + urlFromData: true, onResult: (resp) => { setResults(resp?.Results || []); }, @@ -109,20 +127,6 @@ const Page = () => { - {integrations.isSuccess && !integrations.data?.GitHub?.Enabled && ( - - The community repositories feature requires the GitHub Integration to be enabled. Go - to the{" "} - - GitHub Integration - {" "} - page to enable it. - - )} - - } apiUrl="/api/ListCommunityRepos" apiDataKey="Results" queryKey="CommunityRepos" @@ -130,11 +134,90 @@ const Page = () => { offCanvas={offCanvas} simpleColumns={["Name", "Owner", "URL", "Visibility", "WriteAccess"]} cardButton={ - + <> + + + } /> + setOpenCreate(false)}> + Create New Repository + + + { + createForm.setValue("Type", e.target.value); + }} + > + } label="User" /> + } label="Org" /> + + + + + + + + + + + + + + + + + setOpenSearch(false)}> Add Community Repositories from GitHub diff --git a/src/pages/tools/templatelib/index.jsx b/src/pages/tools/templatelib/index.jsx index e05689adf61f..5fa63b3bbf9b 100644 --- a/src/pages/tools/templatelib/index.jsx +++ b/src/pages/tools/templatelib/index.jsx @@ -24,11 +24,6 @@ const TemplateLibrary = () => { }, }); - const integrations = ApiGetCall({ - url: "/api/ListExtensionsConfig", - queryKey: "Integrations", - }); - const templateRepo = useWatch({ control: formControl.control, name: "templateRepo" }); const customDataFormatter = (values) => { @@ -81,17 +76,6 @@ const TemplateLibrary = () => { Enabling this feature will overwrite templates with the same name. - - {integrations.isSuccess && !integrations.data?.GitHub?.Enabled && ( - - The community repositories feature requires the GitHub Integration to be enabled. Go - to the{" "} - - GitHub Integration - {" "} - page to enable it. - - )} @@ -136,7 +120,6 @@ const TemplateLibrary = () => { }} formControl={formControl} multiple={false} - disabled={!integrations.data?.GitHub?.Enabled} /> From 89c860ec50554f0ce591636e20c9585789a6e8a4 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 11 Feb 2025 21:10:03 -0500 Subject: [PATCH 0190/1184] Add Set Upload Branch action Tweak API dialog Tweak API results --- .../CippComponents/CippApiDialog.jsx | 3 ++ .../CippComponents/CippApiResults.jsx | 2 +- src/pages/tools/community-repos/index.js | 44 +++++++++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 0a23dc3cb982..d5e15d9bccff 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -325,6 +325,9 @@ export const CippApiDialog = (props) => { {fields && fields.map((fieldProps, index) => { + if (fieldProps?.api?.processFieldData) { + fieldProps.api.data = processActionData(fieldProps.api.data, row); + } return ( { ))} )} - {(apiObject.isSuccess || apiObject.isError) && !errorsOnly ? ( + {(apiObject.isSuccess || apiObject.isError) && finalResults.length > 0 ? ( tableDialog.handleOpen()}> diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index 9faebdc1a1f6..56cfd7a62e30 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -27,7 +27,7 @@ import { Radio, RadioGroup, FormControlLabel } from "@mui/material"; import { CippFormCondition } from "/src/components/CippComponents/CippFormCondition"; import AddIcon from "@mui/icons-material/Add"; import { Box } from "@mui/system"; -import { Add, OpenInNew } from "@mui/icons-material"; +import { Add, ForkLeft, OpenInNew } from "@mui/icons-material"; import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; import { ApiGetCall } from "../../../api/ApiCall"; import NextLink from "next/link"; @@ -78,10 +78,48 @@ const Page = () => { multiPost: false, queryKey: "CommunityRepos", }, + { + label: "Set Upload Branch", + type: "POST", + url: "/api/ExecCommunityRepo", + data: { Action: "SetBranch", Id: "Id" }, + icon: , + fields: [ + { + type: "select", + name: "Branch", + label: "Branch", + api: { + url: "/api/ExecGitHubAction", + type: "GET", + data: { + Action: "GetBranches", + FullName: "FullName", + }, + dataKey: "Results", + labelField: "name", + valueField: "name", + processFieldData: true, + }, + }, + ], + hideBulk: true, + confirmText: "Are you sure you want to set the branch for this repository?", + condition: (row) => row.WriteAccess === true, + }, ]; const offCanvas = { - extendedInfoFields: ["Owner", "Name", "Description", "URL", "Visibility", "Permissions"], + extendedInfoFields: [ + "Owner", + "Name", + "Description", + "URL", + "Visibility", + "DefaultBranch", + "UploadBranch", + "Permissions", + ], actions: actions, }; @@ -132,7 +170,7 @@ const Page = () => { queryKey="CommunityRepos" actions={actions} offCanvas={offCanvas} - simpleColumns={["Name", "Owner", "URL", "Visibility", "WriteAccess"]} + simpleColumns={["Name", "Owner", "URL", "Visibility", "WriteAccess", "UploadBranch"]} cardButton={ <> - From be8595eafdfcf6cbfdf01054df0eee09db6f45c5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Feb 2025 14:49:34 -0500 Subject: [PATCH 0197/1184] UI tweaks --- src/pages/tools/community-repos/index.js | 315 +++++++++++++---------- 1 file changed, 173 insertions(+), 142 deletions(-) diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index 34a5bd9b8510..433f1559cdd6 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -18,15 +18,16 @@ import { Typography, Alert, Chip, + SvgIcon, } from "@mui/material"; -import { TrashIcon } from "@heroicons/react/24/outline"; +import { MagnifyingGlassIcon, TrashIcon } from "@heroicons/react/24/outline"; import { ApiPostCall } from "/src/api/ApiCall"; import { useForm, FormProvider } from "react-hook-form"; import { Radio, RadioGroup, FormControlLabel } from "@mui/material"; import { CippFormCondition } from "/src/components/CippComponents/CippFormCondition"; import AddIcon from "@mui/icons-material/Add"; import { Box } from "@mui/system"; -import { Add, ForkLeft, OpenInNew } from "@mui/icons-material"; +import { Add, AddBox, ForkLeft, OpenInNew } from "@mui/icons-material"; import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; import CippFormComponent from "../../../components/CippComponents/CippFormComponent"; import { ApiGetCall } from "../../../api/ApiCall"; @@ -176,15 +177,22 @@ const Page = () => { simpleColumns={["Name", "Owner", "URL", "Visibility", "WriteAccess", "UploadBranch"]} cardButton={ <> - } @@ -226,6 +234,10 @@ const Page = () => { valueField: "login", }} multiple={false} + required={true} + validators={{ + required: { value: true, message: "Organization is required" }, + }} /> { name="repoName" label="Repository Name" formControl={createForm} + required={true} /> { setOpenSearch(false)}> Add Community Repositories from GitHub - - - searchForm.setValue("searchType", e.target.value)} + + searchForm.setValue("searchType", e.target.value)} + > + } label="User" /> + } label="Org" /> + } label="Repository" /> + + + - } label="User" /> - } label="Org" /> - } label="Repository" /> - - - setRepo(e.target.value)} + required={true} + /> + + + setUser(e.target.value)} + required={true} + /> + + - setRepo(e.target.value)} - /> - - + + + setOrg(e.target.value)} + required={true} + /> + - setUser(e.target.value)} - /> + freeSolo + fullWidth + options={[]} + label="Search Terms" + /> + + + - - - - setOrg(e.target.value)} - /> - - + {searchMutation.isPending || + (searchMutation.isSuccess && ( + + + Search Results - - - - {searchMutation.isPending || - (searchMutation.isSuccess && Search Results)} - {searchMutation.isPending ? ( - - - - ) : ( - <> - {searchMutation.isSuccess && results.length === 0 && ( + ))} + {searchMutation.isPending ? ( + <> + + + Searching... + + + + + + + + + + + + ) : ( + <> + {(searchMutation.isSuccess && results.length === 0) || + (searchMutation.isError && ( No search results found. Refine your query and try again. - )} - - {results.map((r) => ( - - - - - handleAdd(r.id)}> - - - - - window.open(r.html_url, "_blank")} - > - - - - - - - {r.full_name} - - - - - {r.html_url} + ))} + + {results.map((r) => ( + + + + + handleAdd(r.id)}> + + + + + window.open(r.html_url, "_blank")} + > + + + + + + + {r.full_name} + - - - - ))} - - - )} - - - - + + {r.html_url} + + + + + + ))} + + + )} + + + @@ -445,10 +446,18 @@ const Page = () => { - - From 211e37943e23c6190378a3842c1104a48fbc17b5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Feb 2025 17:01:35 -0500 Subject: [PATCH 0199/1184] Update index.js --- src/pages/tools/community-repos/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index f0fb433cab70..6fb4a0137fa6 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -52,7 +52,6 @@ const Page = () => { }); const handleCreateRepo = (values) => { - console.log(values); createMutation.mutate({ url: "/api/ExecGitHubAction", data: { @@ -265,13 +264,14 @@ const Page = () => { @@ -386,7 +386,7 @@ const Page = () => { No search results found. Refine your query and try again. ))} - + {results.map((r) => ( From 8e622cf7e796d986dec79a0bcb536d58dbf9cc94 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Feb 2025 17:20:19 -0500 Subject: [PATCH 0200/1184] add import template button --- src/pages/tools/community-repos/repo.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/pages/tools/community-repos/repo.js b/src/pages/tools/community-repos/repo.js index 7b4772561f1d..37d0e9f0c6ca 100644 --- a/src/pages/tools/community-repos/repo.js +++ b/src/pages/tools/community-repos/repo.js @@ -17,6 +17,7 @@ import CippJSONView from "/src/components/CippFormPages/CippJSONView"; import { EyeIcon } from "@heroicons/react/24/outline"; import { CippAutoComplete } from "/src/components/CippComponents/CippAutocomplete"; import React from "react"; +import { CloudDownload } from "@mui/icons-material"; const Page = () => { const router = useRouter(); @@ -202,6 +203,19 @@ const Page = () => { icon: , hideBulk: true, }, + { + label: "Import Template", + url: "/api/ExecCommunityRepo", + icon: , + type: "POST", + data: { + Action: "ImportTemplate", + FullName: selectedRepo, + Path: "path", + Branch: selectedBranch, + }, + confirmText: "Are you sure you want to import [path]?", + }, ]} isFetching={fileTreeQuery.isFetching} refreshFunction={() => fetchFileTree(selectedBranch)} From 7ce94e72b86924f45a467c0f6bc78c5bca60f744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 12 Feb 2025 23:25:33 +0100 Subject: [PATCH 0201/1184] fix casing --- src/components/CippFormPages/CippAddGroupForm.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippFormPages/CippAddGroupForm.jsx b/src/components/CippFormPages/CippAddGroupForm.jsx index 49be141db5dd..daac5f7aef7f 100644 --- a/src/components/CippFormPages/CippAddGroupForm.jsx +++ b/src/components/CippFormPages/CippAddGroupForm.jsx @@ -76,7 +76,7 @@ const CippAddGroupForm = (props) => { { label: "Security Group", value: "generic" }, { label: "Microsoft 365 Group", value: "m365" }, { label: "Dynamic Group", value: "dynamic" }, - { label: "Dynamic Distribution Group", value: "dynamicdistribution" }, + { label: "Dynamic Distribution Group", value: "dynamicDistribution" }, { label: "Distribution List", value: "distribution" }, { label: "Mail Enabled Security Group", value: "security" }, ]} From 21168314014ae3321acc2f60d6049a458e26940a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Feb 2025 18:03:56 -0500 Subject: [PATCH 0202/1184] json view tweak --- src/components/CippFormPages/CippJSONView.jsx | 2 +- src/pages/tools/community-repos/repo.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippFormPages/CippJSONView.jsx b/src/components/CippFormPages/CippJSONView.jsx index 5abb73e8ee37..e90fc8732c13 100644 --- a/src/components/CippFormPages/CippJSONView.jsx +++ b/src/components/CippFormPages/CippJSONView.jsx @@ -235,7 +235,7 @@ function CippJsonView({ {viewJson ? : } {viewJson ? ( - + ) : ( {drilldownData.slice(0, 4).map((data, index) => ( diff --git a/src/pages/tools/community-repos/repo.js b/src/pages/tools/community-repos/repo.js index 37d0e9f0c6ca..8b93c7dae27e 100644 --- a/src/pages/tools/community-repos/repo.js +++ b/src/pages/tools/community-repos/repo.js @@ -230,7 +230,7 @@ const Page = () => { {fileQuery.isPending ? ( - + ) : ( From bb2209a96759f48625f25b5944b7705546ea99a2 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Thu, 13 Feb 2025 00:42:16 +0100 Subject: [PATCH 0203/1184] fixes escos whining --- src/pages/identity/administration/groups/index.js | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/pages/identity/administration/groups/index.js b/src/pages/identity/administration/groups/index.js index 7915d4656404..03d36a08a198 100644 --- a/src/pages/identity/administration/groups/index.js +++ b/src/pages/identity/administration/groups/index.js @@ -107,17 +107,7 @@ const Page = () => { } - apiUrl="/api/ListGraphRequest" - apiData={{ - Endpoint: "groups", - $select: - "id,createdDateTime,displayName,description,mail,mailEnabled,mailNickname,resourceProvisioningOptions,securityEnabled,visibility,organizationId,onPremisesSamAccountName,membershipRule,grouptypes,onPremisesSyncEnabled,resourceProvisioningOptions,userPrincipalName,assignedLicenses", - $count: true, - $orderby: "displayName", - $top: 999, - manualPagination: true, - }} - apiDataKey="Results" + apiUrl="/api/ListGroups" actions={actions} offCanvas={offCanvas} simpleColumns={[ From a5f454525fa29d3f6abe01dc9f7fd3b06f938844 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Feb 2025 18:46:02 -0500 Subject: [PATCH 0204/1184] up version --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index 795806e4fd04..7ffa464d8338 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.1.3" + "version": "7.2.0" } From ec49fb71caa9d607a0b35d86e9ec0e89345d1ebd Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Feb 2025 20:03:11 -0500 Subject: [PATCH 0205/1184] github null safety --- public/version.json | 2 +- .../email/spamfilter/list-connectionfilter-templates/index.js | 2 +- src/pages/email/spamfilter/list-templates/index.js | 2 +- src/pages/email/transport/list-connector-templates/index.js | 2 +- src/pages/email/transport/list-templates/index.js | 2 +- src/pages/endpoint/MEM/list-templates/index.js | 2 +- src/pages/identity/administration/group-templates/index.js | 2 +- src/pages/tenant/conditional/list-template/index.js | 2 +- src/pages/tenant/standards/bpa-report/index.js | 2 +- src/pages/tenant/standards/list-standards/index.js | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/public/version.json b/public/version.json index 7ffa464d8338..9e50dd4377c9 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.2.0" + "version": "7.2.1" } diff --git a/src/pages/email/spamfilter/list-connectionfilter-templates/index.js b/src/pages/email/spamfilter/list-connectionfilter-templates/index.js index 9eeb2638a408..ca0ced2e75ea 100644 --- a/src/pages/email/spamfilter/list-connectionfilter-templates/index.js +++ b/src/pages/email/spamfilter/list-connectionfilter-templates/index.js @@ -53,7 +53,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", diff --git a/src/pages/email/spamfilter/list-templates/index.js b/src/pages/email/spamfilter/list-templates/index.js index ce86b031198c..ad1e87195129 100644 --- a/src/pages/email/spamfilter/list-templates/index.js +++ b/src/pages/email/spamfilter/list-templates/index.js @@ -53,7 +53,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", diff --git a/src/pages/email/transport/list-connector-templates/index.js b/src/pages/email/transport/list-connector-templates/index.js index 567eac960f94..7f35e6629322 100644 --- a/src/pages/email/transport/list-connector-templates/index.js +++ b/src/pages/email/transport/list-connector-templates/index.js @@ -57,7 +57,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", diff --git a/src/pages/email/transport/list-templates/index.js b/src/pages/email/transport/list-templates/index.js index 5e9e8d12e90e..58340c19ff38 100644 --- a/src/pages/email/transport/list-templates/index.js +++ b/src/pages/email/transport/list-templates/index.js @@ -55,7 +55,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", diff --git a/src/pages/endpoint/MEM/list-templates/index.js b/src/pages/endpoint/MEM/list-templates/index.js index 9a1dfc6e3264..d87b2243c259 100644 --- a/src/pages/endpoint/MEM/list-templates/index.js +++ b/src/pages/endpoint/MEM/list-templates/index.js @@ -77,7 +77,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", diff --git a/src/pages/identity/administration/group-templates/index.js b/src/pages/identity/administration/group-templates/index.js index d1d047594a89..497f3ce71b6c 100644 --- a/src/pages/identity/administration/group-templates/index.js +++ b/src/pages/identity/administration/group-templates/index.js @@ -55,7 +55,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", diff --git a/src/pages/tenant/conditional/list-template/index.js b/src/pages/tenant/conditional/list-template/index.js index fbfb20795f40..8db07cbdca14 100644 --- a/src/pages/tenant/conditional/list-template/index.js +++ b/src/pages/tenant/conditional/list-template/index.js @@ -54,7 +54,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", diff --git a/src/pages/tenant/standards/bpa-report/index.js b/src/pages/tenant/standards/bpa-report/index.js index 1bb4a6cca89b..d80e5eb5ae1c 100644 --- a/src/pages/tenant/standards/bpa-report/index.js +++ b/src/pages/tenant/standards/bpa-report/index.js @@ -77,7 +77,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", diff --git a/src/pages/tenant/standards/list-standards/index.js b/src/pages/tenant/standards/list-standards/index.js index 023e58df5071..6dcc15daeb7f 100644 --- a/src/pages/tenant/standards/list-standards/index.js +++ b/src/pages/tenant/standards/list-standards/index.js @@ -95,7 +95,7 @@ const Page = () => { }, ], confirmText: "Are you sure you want to save this template to the selected repository?", - condition: () => integrations.isSuccess && integrations?.data?.GitHub.Enabled, + condition: () => integrations.isSuccess && integrations?.data?.GitHub?.Enabled, }, { label: "Delete Template", From a279d8b96dc57515c33636ace6f26abd0545a6d5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Feb 2025 20:23:35 -0500 Subject: [PATCH 0206/1184] null safety sam wizard --- .../CippWizard/CIPPDeploymentStep.js | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/components/CippWizard/CIPPDeploymentStep.js b/src/components/CippWizard/CIPPDeploymentStep.js index 5ebc0ecf67fd..90a0840fc16e 100644 --- a/src/components/CippWizard/CIPPDeploymentStep.js +++ b/src/components/CippWizard/CIPPDeploymentStep.js @@ -16,7 +16,7 @@ import { CippWizardStepButtons } from "./CippWizardStepButtons"; import { ApiGetCall } from "../../api/ApiCall"; import CippButtonCard from "../CippCards/CippButtonCard"; import { CippCopyToClipBoard } from "../CippComponents/CippCopyToClipboard"; -import { CheckCircle } from "@mui/icons-material"; +import { CheckCircle, Sync } from "@mui/icons-material"; import CippPermissionCheck from "../CippSettings/CippPermissionCheck"; import { useQueryClient } from "@tanstack/react-query"; import { CippApiResults } from "../CippComponents/CippApiResults"; @@ -43,7 +43,7 @@ export const CippDeploymentStep = (props) => { const appId = ApiGetCall({ url: `/api/ExecListAppId`, queryKey: `ExecListAppId`, - waiting: values.selectedOption !== "UpdateTokens" ? false : true, + waiting: true, }); useEffect(() => { if ( @@ -260,19 +260,29 @@ export const CippDeploymentStep = (props) => { disabled={ appId.isLoading || !/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( - appId.data.applicationId + appId?.data?.applicationId ) } - onClick={() => openPopup(appId.data.refreshUrl)} + onClick={() => openPopup(appId?.data?.refreshUrl)} color="primary" > Refresh Graph Token + {!/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( - appId.data.applicationId + appId?.data?.applicationId ) && ( - The Application ID is not valid. Please return to the first page of the SAM wizard and use the Manual . + The Application ID is not valid. Please return to the first page of the SAM + wizard and use the Manual . )} From 4d7dea81d96294539be6e9d8e09015e5936d7cad Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Feb 2025 20:39:38 -0500 Subject: [PATCH 0207/1184] Update CIPPDeploymentStep.js --- src/components/CippWizard/CIPPDeploymentStep.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/CippWizard/CIPPDeploymentStep.js b/src/components/CippWizard/CIPPDeploymentStep.js index 90a0840fc16e..3ba090c1a75e 100644 --- a/src/components/CippWizard/CIPPDeploymentStep.js +++ b/src/components/CippWizard/CIPPDeploymentStep.js @@ -16,7 +16,7 @@ import { CippWizardStepButtons } from "./CippWizardStepButtons"; import { ApiGetCall } from "../../api/ApiCall"; import CippButtonCard from "../CippCards/CippButtonCard"; import { CippCopyToClipBoard } from "../CippComponents/CippCopyToClipboard"; -import { CheckCircle, Sync } from "@mui/icons-material"; +import { CheckCircle, OpenInNew, Sync } from "@mui/icons-material"; import CippPermissionCheck from "../CippSettings/CippPermissionCheck"; import { useQueryClient } from "@tanstack/react-query"; import { CippApiResults } from "../CippComponents/CippApiResults"; @@ -265,12 +265,15 @@ export const CippDeploymentStep = (props) => { } onClick={() => openPopup(appId?.data?.refreshUrl)} color="primary" + startIcon={ + + } > Refresh Graph Token + color="muted" + style={{ paddingLeft: 0 }} + size="small" + href={`https://entra.microsoft.com/${userSettingsDefaults.currentTenant}/#view/Microsoft_AAD_UsersAndTenants/UserProfileMenuBlade/~/overview/userId/${userId}`} + target="_blank" + rel="noopener noreferrer" + > + View in Entra + ), }, ] @@ -189,7 +189,7 @@ const Page = () => { const mailboxRuleActions = [ { label: "Remove Mailbox Rule", - type: "GET", + type: "POST", icon: , url: "/api/ExecRemoveMailboxRule", data: { diff --git a/src/pages/tenant/administration/alert-configuration/index.js b/src/pages/tenant/administration/alert-configuration/index.js index 1544d84c8e39..41f76c7dac2e 100644 --- a/src/pages/tenant/administration/alert-configuration/index.js +++ b/src/pages/tenant/administration/alert-configuration/index.js @@ -24,7 +24,7 @@ const Page = () => { }, { label: "Delete Alert", - type: "GET", + type: "POST", url: "/api/RemoveQueuedAlert", data: { ID: "RowKey", diff --git a/src/pages/tenant/conditional/list-named-locations/index.js b/src/pages/tenant/conditional/list-named-locations/index.js index 834efd07eb32..a53610c35926 100644 --- a/src/pages/tenant/conditional/list-named-locations/index.js +++ b/src/pages/tenant/conditional/list-named-locations/index.js @@ -11,7 +11,7 @@ const Page = () => { const actions = [ { label: "Add location to named location", - type: "GET", + type: "POST", url: "/api/ExecNamedLocation", icon: , data: { diff --git a/src/pages/tenant/conditional/list-policies/index.js b/src/pages/tenant/conditional/list-policies/index.js index 8d4b4af2d867..8c021df61319 100644 --- a/src/pages/tenant/conditional/list-policies/index.js +++ b/src/pages/tenant/conditional/list-policies/index.js @@ -32,34 +32,40 @@ const Page = () => { }, { label: "Enable policy", - type: "GET", - url: "/api/EditCAPolicy?State=Enabled", + type: "POST", + url: "/api/EditCAPolicy", data: { GUID: "id", + State: "!Enabled", }, confirmText: "Are you sure you want to enable this policy?", + condition: (row) => row.state !== "enabled", icon: , color: "info", }, { label: "Disable policy", - type: "GET", - url: "/api/EditCAPolicy?State=Disabled", + type: "POST", + url: "/api/EditCAPolicy", data: { GUID: "id", + State: "!Disabled", }, confirmText: "Are you sure you want to disable this policy?", + condition: (row) => row.state !== "disabled", icon: , color: "info", }, { label: "Set policy to report only", - type: "GET", - url: "/api/EditCAPolicy?State=enabledForReportingButNotEnforced", + type: "POST", + url: "/api/EditCAPolicy", data: { GUID: "id", + State: "!enabledForReportingButNotEnforced", }, confirmText: "Are you sure you want to set this policy to report only?", + condition: (row) => row.state !== "enabledForReportingButNotEnforced", icon: , color: "info", }, From b05272c6a306df7153a887af9921814bf97d385c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Mon, 24 Feb 2025 17:26:32 +0100 Subject: [PATCH 0265/1184] Update src/data/standards.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Esco Signed-off-by: Kristian Kjærgård <31723128+kris6673@users.noreply.github.com> --- src/data/standards.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/standards.json b/src/data/standards.json index 8cc6be4216b3..c41d979fdc0b 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -2493,7 +2493,7 @@ "impact": "Medium Impact", "impactColour": "warning", "powershellEquivalent": "Set-SPOTenant -EmailAttestationRequired $true -EmailAttestationReAuthDays 15", - "recommendedBy": ["CIS 3.0", "CIPP"] + "recommendedBy": ["CIS", "CIPP"] }, { "name": "standards.DisableAddShortcutsToOneDrive", From 65203d75b36df506dfdd8cc1d0ceaf3acf1f73c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Mon, 24 Feb 2025 17:26:45 +0100 Subject: [PATCH 0266/1184] Update src/data/standards.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Esco Signed-off-by: Kristian Kjærgård <31723128+kris6673@users.noreply.github.com> --- src/data/standards.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/standards.json b/src/data/standards.json index c41d979fdc0b..d05130e9a626 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1326,6 +1326,7 @@ "label": "Set Anti-Spam Connection Filter Safe List", "impact": "Medium Impact", "impactColour": "info", + "addedDate": "2025-02-15", "powershellEquivalent": "Set-HostedConnectionFilterPolicy \"Default\" -EnableSafeList $true", "recommendedBy": [] }, From ff65d4814c11dd3c3a29c776ba2af4c5a0ef0f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Mon, 24 Feb 2025 17:26:54 +0100 Subject: [PATCH 0267/1184] Update src/data/standards.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Esco Signed-off-by: Kristian Kjærgård <31723128+kris6673@users.noreply.github.com> --- src/data/standards.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/standards.json b/src/data/standards.json index d05130e9a626..20c728c6a5df 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -2434,7 +2434,7 @@ "impact": "Low Impact", "impactColour": "info", "powershellEquivalent": "Set-SPOTenant -DisallowInfectedFileDownload $true", - "recommendedBy": ["CIS 3.0", "CIPP"] + "recommendedBy": ["CIS", "CIPP"] }, { "name": "standards.SPDisableLegacyWorkflows", From 8602d02320c1a53c683015e97ce71eb901149795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Mon, 24 Feb 2025 17:29:31 +0100 Subject: [PATCH 0268/1184] Update src/data/standards.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Esco Signed-off-by: Kristian Kjærgård <31723128+kris6673@users.noreply.github.com> --- src/data/standards.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/standards.json b/src/data/standards.json index 20c728c6a5df..80368e71d88d 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -2458,7 +2458,7 @@ "impact": "Medium Impact", "impactColour": "warning", "powershellEquivalent": "Set-SPOTenant -DefaultSharingLinkType Direct", - "recommendedBy": ["CIS 3.0", "CIPP"] + "recommendedBy": ["CIS", "CIPP"] }, { "name": "standards.SPExternalUserExpiration", From bff556ea0a5b23fa8935c5a85e48e4df4bb049f1 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Feb 2025 12:23:39 -0500 Subject: [PATCH 0269/1184] fix version number in build steps --- .github/workflows/cipp_dev_build.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cipp_dev_build.yml b/.github/workflows/cipp_dev_build.yml index 834f1995b668..dad0dbebe307 100644 --- a/.github/workflows/cipp_dev_build.yml +++ b/.github/workflows/cipp_dev_build.yml @@ -18,10 +18,17 @@ jobs: uses: actions/checkout@v4.2.2 # Set up Node.js + - name: Get Node version + id: get_node_version + run: | + node_raw_version=$(node -p "require('./package.json').engines.node") + node_sanitized_version=$(echo $node_raw_version | sed -E 's/[^0-9.]+//g') + echo "node_version=$node_sanitized_version" >> $GITHUB_OUTPUT + - name: Set up Node.js uses: actions/setup-node@v4.2.0 with: - node-version: '20.18.1' + node-version: ${{ steps.get_node_version.outputs.node_version }} # Install dependencies - name: Install Dependencies From 33ac08f539de7abd3f0a875ac76de7284725f29d Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Feb 2025 12:39:28 -0500 Subject: [PATCH 0270/1184] make build process get node version --- .github/workflows/cipp_frontend_build.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cipp_frontend_build.yml b/.github/workflows/cipp_frontend_build.yml index 3d6d1c79550e..76a7dbb2fbbf 100644 --- a/.github/workflows/cipp_frontend_build.yml +++ b/.github/workflows/cipp_frontend_build.yml @@ -18,10 +18,17 @@ jobs: uses: actions/checkout@v4.2.2 # Set up Node.js + - name: Get Node version + id: get_node_version + run: | + node_raw_version=$(node -p "require('./package.json').engines.node") + node_sanitized_version=$(echo $node_raw_version | sed -E 's/[^0-9.]+//g') + echo "node_version=$node_sanitized_version" >> $GITHUB_OUTPUT + - name: Set up Node.js uses: actions/setup-node@v4.2.0 with: - node-version: '20.18.1' + node-version: ${{ steps.get_node_version.outputs.node_version }} # Install dependencies - name: Install Dependencies From 980738b8ec136ebda978e0200ffc413f188e23ea Mon Sep 17 00:00:00 2001 From: Esco Date: Tue, 25 Feb 2025 09:35:29 +0100 Subject: [PATCH 0271/1184] feat: readd defaultValue to Standards --- .../CippComponents/CippFormComponent.jsx | 4 + src/data/standards.json | 76 +++++++++---------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/components/CippComponents/CippFormComponent.jsx b/src/components/CippComponents/CippFormComponent.jsx index c353ac89f71b..5ba298a7be3e 100644 --- a/src/components/CippComponents/CippFormComponent.jsx +++ b/src/components/CippComponents/CippFormComponent.jsx @@ -43,6 +43,7 @@ export const CippFormComponent = (props) => { name, // The name that may have bracket notation label, labelLocation = "behind", // Default location for switches + defaultValue, ...other } = props; const { errors } = useFormState({ control: formControl.control }); @@ -121,6 +122,7 @@ export const CippFormComponent = (props) => { {...other} {...formControl.register(convertedName, { ...validators })} label={label} + defaultValue={defaultValue} /> @@ -156,6 +158,7 @@ export const CippFormComponent = (props) => { {...other} {...formControl.register(convertedName, { ...validators })} label={label} + defaultValue={defaultValue} /> @@ -171,6 +174,7 @@ export const CippFormComponent = (props) => { renderSwitchWithLabel( Date: Tue, 25 Feb 2025 14:45:30 -0500 Subject: [PATCH 0272/1184] fix offboarding job nest actions in postExecution object --- src/components/CippWizard/CippWizardOffboarding.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/CippWizard/CippWizardOffboarding.jsx b/src/components/CippWizard/CippWizardOffboarding.jsx index 6c79070dcd81..bfc00908777d 100644 --- a/src/components/CippWizard/CippWizardOffboarding.jsx +++ b/src/components/CippWizard/CippWizardOffboarding.jsx @@ -292,18 +292,18 @@ export const CippWizardOffboarding = (props) => { Send results to: - + From 16400f3522695cb40433d21fa36b4655f62dc84e Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 18:05:07 -0500 Subject: [PATCH 0273/1184] feat: disable form elements in cippformcondition default action=hide Added to integration definitions to ensure that integrations are enabled before navigating to tenant/field mapping or filling out API details --- .../CippComponents/CippFormCondition.jsx | 60 ++- src/data/Extensions.json | 348 +++++++++++++++--- src/pages/cipp/integrations/configure.js | 25 +- 3 files changed, 369 insertions(+), 64 deletions(-) diff --git a/src/components/CippComponents/CippFormCondition.jsx b/src/components/CippComponents/CippFormCondition.jsx index f6e3bdd4fdf2..45ea1c016cac 100644 --- a/src/components/CippComponents/CippFormCondition.jsx +++ b/src/components/CippComponents/CippFormCondition.jsx @@ -1,8 +1,9 @@ import { useWatch } from "react-hook-form"; import isEqual from "lodash/isEqual"; // lodash for deep comparison +import React from "react"; export const CippFormCondition = (props) => { - let { field, compareType = "is", compareValue, children, formControl } = props; + let { field, compareType = "is", compareValue, action = 'hide', children, formControl } = props; if ( field === undefined || @@ -22,17 +23,38 @@ export const CippFormCondition = (props) => { compareValue = compareValue.value; } + const disableChildren = (children) => { + return React.Children.map(children, (child) => { + if (React.isValidElement(child)) { + if (child.props?.children && child.type.name !== "CippFormCondition") { + return React.cloneElement(child, { + children: disableChildren(child.props.children), + disabled: true, + }); + } + return React.cloneElement(child, { disabled: true }); + } + return child; + }); + }; + switch (compareType) { case "regex": if (watcher?.match(new RegExp(compareValue))) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "is": // Deep comparison for objects and arrays if (isEqual(watcher, compareValue)) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "isNot": @@ -40,6 +62,9 @@ export const CippFormCondition = (props) => { if (!isEqual(watcher, compareValue)) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "contains": @@ -55,6 +80,9 @@ export const CippFormCondition = (props) => { // Check if object contains the key return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "doesNotContain": @@ -73,6 +101,9 @@ export const CippFormCondition = (props) => { // Check if object does not contain the key return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "greaterThan": @@ -83,6 +114,9 @@ export const CippFormCondition = (props) => { ) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "lessThan": @@ -93,6 +127,9 @@ export const CippFormCondition = (props) => { ) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "arrayLength": @@ -103,12 +140,18 @@ export const CippFormCondition = (props) => { ) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "hasValue": if (watcher !== undefined && watcher !== null && watcher !== "") { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; /* @@ -119,6 +162,9 @@ export const CippFormCondition = (props) => { if (Array.isArray(watcher) && watcher.some((item) => item?.label === compareValue)) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "labelContains": @@ -129,6 +175,9 @@ export const CippFormCondition = (props) => { ) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "valueEq": @@ -136,6 +185,9 @@ export const CippFormCondition = (props) => { if (Array.isArray(watcher) && watcher.some((item) => item?.value === compareValue)) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; case "valueContains": @@ -146,9 +198,15 @@ export const CippFormCondition = (props) => { ) { return children; } + if (action === "disable") { + return disableChildren(children); + } return null; default: + if (action === "disable") { + return disableChildren(children); + } return null; } }; diff --git a/src/data/Extensions.json b/src/data/Extensions.json index 7f9d8ddcb38e..708cbc6f17db 100644 --- a/src/data/Extensions.json +++ b/src/data/Extensions.json @@ -44,21 +44,39 @@ "name": "Sherweb.clientId", "label": "Client ID", "placeholder": "Enter your Sherweb Client ID", - "required": true + "required": true, + "condition": { + "field": "Sherweb.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "textField", "name": "Sherweb.SubscriptionKey", "label": "Subscription Key", "placeholder": "Enter your Sherweb Subscription Key", - "required": true + "required": true, + "condition": { + "field": "Sherweb.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "password", "name": "Sherweb.APIKey", "label": "Client Secret", "placeholder": "Enter your Sherweb Client Secret", - "required": true + "required": true, + "condition": { + "field": "Sherweb.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "autoComplete", @@ -70,7 +88,13 @@ "labelField": "RowKey", "valueField": "RowKey" }, - "multiple": true + "multiple": true, + "condition": { + "field": "Sherweb.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } } ] }, @@ -91,29 +115,47 @@ } ], "SettingOptions": [ + { + "type": "switch", + "name": "Gradient.Enabled", + "label": "Enable Integration" + }, { "type": "textField", "name": "Gradient.VendorKey", "label": "Gradient Vendor API Key", "placeholder": "Enter your Gradient Vendor Key.", - "required": true + "required": true, + "condition": { + "field": "Gradient.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "password", "name": "Gradient.APIKey", "label": "Gradient Partner API Key", "placeholder": "Enter your Gradient Partner Key. Leave blank to keep your current key.", - "required": true + "required": true, + "condition": { + "field": "Gradient.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "Gradient.BillingEnabled", - "label": "Enable sending all license information to Gradient" - }, - { - "type": "switch", - "name": "Gradient.Enabled", - "label": "Enable Integration" + "label": "Enable sending all license information to Gradient", + "condition": { + "field": "Gradient.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } } ], "mappingRequired": false @@ -134,26 +176,61 @@ } ], "SettingOptions": [ + { + "type": "switch", + "name": "HaloPSA.Enabled", + "label": "Enable Integration" + }, + { + "type": "switch", + "name": "HaloPSA.ConsolidateTickets", + "label": "Consolidate Tickets", + "placeholder": "Consolidate tickets for the same alert into one ticket.", + "condition": { + "field": "HaloPSA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } + }, { "type": "textField", "name": "HaloPSA.ResourceURL", "label": "HaloPSA Resource Server URL", "placeholder": "Enter your HaloPSA Resource Server URL.", - "required": true + "required": true, + "condition": { + "field": "HaloPSA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "textField", "name": "HaloPSA.AuthURL", "label": "HaloPSA Authorisation Endpoint URL", "placeholder": "Enter your HaloPSA Authorisation Endpoint URL.", - "required": true + "required": true, + "condition": { + "field": "HaloPSA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "textField", "name": "HaloPSA.Tenant", "label": "HaloPSA Tenant", "placeholder": "Enter your HaloPSA Tenant (Leave blank if self-hosted)", - "required": true + "required": true, + "condition": { + "field": "HaloPSA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "autoComplete", @@ -170,6 +247,12 @@ "labelField": "name", "valueField": "id", "showRefresh": true + }, + "condition": { + "field": "HaloPSA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" } }, { @@ -177,19 +260,26 @@ "name": "HaloPSA.ClientID", "label": "HaloPSA Client ID", "placeholder": "Enter your HaloPSA Client ID", - "required": true + "required": true, + "condition": { + "field": "HaloPSA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "password", "name": "HaloPSA.APIKey", "label": "HaloPSA Client Secret", "placeholder": "Enter your client Secret. Leave blank to keep your current key.", - "required": true - }, - { - "type": "switch", - "name": "HaloPSA.Enabled", - "label": "Enable Integration" + "required": true, + "condition": { + "field": "HaloPSA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } } ], "mappingRequired": true @@ -211,46 +301,82 @@ } ], "SettingOptions": [ + { + "type": "switch", + "name": "NinjaOne.Enabled", + "label": "Enable Integration" + }, { "type": "textField", "name": "NinjaOne.Instance", "label": "Please enter your NinjaOne Instance hostname", "placeholder": "app.ninjarmm.com, eu.ninjarmm.com, oc.ninjarmm.com, ca.ninjarmm.com, us2.ninjarmm.com", - "required": true + "required": true, + "condition": { + "field": "NinjaOne.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "textField", "name": "NinjaOne.ClientID", "label": "NinjaOne API Client ID", "placeholder": "Enter your NinjaOne API Client ID", - "required": true + "required": true, + "condition": { + "field": "NinjaOne.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "password", "name": "NinjaOne.APIKey", "label": "NinjaOne API Client Secret", "placeholder": "Enter your NinjaOne API Client Secret", - "required": true + "required": true, + "condition": { + "field": "NinjaOne.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "NinjaOne.LicenseDocumentsEnabled", - "label": "Sync Licenses (Requires NinjaOne Documentation)" + "label": "Sync Licenses (Requires NinjaOne Documentation)", + "condition": { + "field": "NinjaOne.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "NinjaOne.UserDocumentsEnabled", - "label": "Sync Users (Requires NinjaOne Documentation)" + "label": "Sync Users (Requires NinjaOne Documentation)", + "condition": { + "field": "NinjaOne.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "NinjaOne.LicensedOnly", - "label": "Only Sync Licensed Users (Requires NinjaOne Documentation)" - }, - { - "type": "switch", - "name": "NinjaOne.Enabled", - "label": "Enable Integration" + "label": "Only Sync Licensed Users (Requires NinjaOne Documentation)", + "condition": { + "field": "NinjaOne.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } } ], "mappingRequired": true, @@ -275,49 +401,91 @@ } ], "SettingOptions": [ + { + "type": "switch", + "name": "Hudu.Enabled", + "label": "Enable Integration" + }, { "type": "textField", "name": "Hudu.BaseUrl", "label": "Please enter your Hudu URL", "placeholder": "https://yourcompany.huducloud.com", - "required": true + "required": true, + "condition": { + "field": "Hudu.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "password", "name": "Hudu.APIKey", "label": "Hudu API Key", "placeholder": "Enter your Hudu API Key", - "required": true - }, - { - "type": "switch", - "name": "Hudu.Enabled", - "label": "Enable Integration" + "required": true, + "condition": { + "field": "Hudu.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "Hudu.CreateMissingUsers", - "label": "Create missing users in Hudu" + "label": "Create missing users in Hudu", + "condition": { + "field": "Hudu.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "Hudu.CreateMissingDevices", - "label": "Create missing devices in Hudu" + "label": "Create missing devices in Hudu", + "condition": { + "field": "Hudu.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "textField", "name": "Hudu.ExcludeSerials", - "label": "Exclude device serials (comma separated)" + "label": "Exclude device serials (comma separated)", + "condition": { + "field": "Hudu.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "Hudu.ImportDomains", - "label": "Import domains from M365" + "label": "Import domains from M365", + "condition": { + "field": "Hudu.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "Hudu.MonitorDomains", - "label": "Monitor domains in Hudu" + "label": "Monitor domains in Hudu", + "condition": { + "field": "Hudu.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "_comment": "I have added this switch as a logic check for the Hudu integration script to check against when CIPP first connects to the Hudu Instance via Connect-HuduAPI.ps1", @@ -370,13 +538,25 @@ "type": "textField", "name": "PWPush.BaseUrl", "label": "PWPush URL", - "placeholder": "Enter your PWPush URL. (default: https://pwpush.com)" + "placeholder": "Enter your PWPush URL. (default: https://pwpush.com)", + "condition": { + "field": "PWPush.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "password", "name": "PWPush.APIKey", "label": "PWPush API Key", - "placeholder": "Enter your PWPush API Key. (optional)" + "placeholder": "Enter your PWPush API Key. (optional)", + "condition": { + "field": "PWPush.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "textField", @@ -413,23 +593,47 @@ "type": "number", "name": "PWPush.ExpireAfterDays", "label": "Expiration in Days", - "placeholder": "Expiration time in days. (optional)" + "placeholder": "Expiration time in days. (optional)", + "condition": { + "field": "PWPush.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "number", "name": "PWPush.ExpireAfterViews", "label": "Expiration after views", - "placeholder": "Expiration after views. (optional)" + "placeholder": "Expiration after views. (optional)", + "condition": { + "field": "PWPush.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "PWPush.RetrievalStep", - "label": "Click to retrieve password (recommended)" + "label": "Click to retrieve password (recommended)", + "condition": { + "field": "PWPush.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", "name": "PWPush.DeletableByViewer", - "label": "Allow deletion of passwords" + "label": "Allow deletion of passwords", + "condition": { + "field": "PWPush.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } } ], "mappingRequired": false @@ -454,7 +658,13 @@ { "type": "password", "name": "HIBP.APIKey", - "label": "Enter your own HIBP API Key. When you are a CyberDrain hosted partner, leave this key blank." + "label": "Enter your own HIBP API Key. When you are a CyberDrain hosted partner, leave this key blank.", + "condition": { + "field": "HIBP.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "switch", @@ -493,12 +703,24 @@ { "type": "textField", "name": "CFZTNA.ClientID", - "label": "CloudFlare Tunnel Service Account Client ID" + "label": "CloudFlare Tunnel Service Account Client ID", + "condition": { + "field": "CFZTNA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } }, { "type": "password", "name": "CFZTNA.APIKey", - "label": "CloudFlare Tunnel Service Account Client Secret" + "label": "CloudFlare Tunnel Service Account Client Secret", + "condition": { + "field": "CFZTNA.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } } ], "mappingRequired": false @@ -519,17 +741,23 @@ } ], "SettingOptions": [ + { + "type": "switch", + "name": "GitHub.Enabled", + "label": "Enable Integration" + }, { "type": "password", "name": "GitHub.APIKey", "label": "GitHub Personal Access Token", "placeholder": "Enter your GitHub PAT", - "required": true - }, - { - "type": "switch", - "name": "GitHub.Enabled", - "label": "Enable Integration" + "required": true, + "condition": { + "field": "GitHub.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } } ], "mappingRequired": false diff --git a/src/pages/cipp/integrations/configure.js b/src/pages/cipp/integrations/configure.js index 9eed557868ab..e65e27607f5a 100644 --- a/src/pages/cipp/integrations/configure.js +++ b/src/pages/cipp/integrations/configure.js @@ -200,13 +200,32 @@ const Page = () => { - - {extension?.mappingRequired && } - {extension?.fieldMapping && } + {extension?.mappingRequired && ( + setting?.name === `${extension.id}.Enabled` + ) && integrations?.data?.[extension.id]?.Enabled !== true + } + /> + )} + {extension?.fieldMapping && ( + setting.name === `${extension.id}.Enabled` + ) && integrations?.data?.[extension.id]?.Enabled !== true + } + /> + )} From c14f506a5be57536c5e316177126fae08299bbb4 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 18:57:20 -0500 Subject: [PATCH 0274/1184] Update CippSchedulerForm.jsx --- src/components/CippFormPages/CippSchedulerForm.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/CippFormPages/CippSchedulerForm.jsx b/src/components/CippFormPages/CippSchedulerForm.jsx index 03579b6cd2e4..325fd788757e 100644 --- a/src/components/CippFormPages/CippSchedulerForm.jsx +++ b/src/components/CippFormPages/CippSchedulerForm.jsx @@ -203,7 +203,6 @@ const CippSchedulerForm = (props) => { options={recurrenceOptions} multiple={false} disableClearable={true} - creatable={false} /> {selectedCommand?.addedFields?.Synopsis && ( From 37f39176fe11a02deb9e60c1ad7c43e6c396509e Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 22:11:04 -0500 Subject: [PATCH 0275/1184] Create dev_deploy.yml Signed-off-by: John Duprey --- .github/workflows/dev_deploy.yml | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/dev_deploy.yml diff --git a/.github/workflows/dev_deploy.yml b/.github/workflows/dev_deploy.yml new file mode 100644 index 000000000000..01fd002acea0 --- /dev/null +++ b/.github/workflows/dev_deploy.yml @@ -0,0 +1,41 @@ +name: CIPP Development Frontend CI/CD + +on: + push: + branches: + - dev + +jobs: + build_and_deploy_job: + if: github.event.repository.fork == false && github.event_name == 'push' + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_MOSS_0A047A40F }} # change this to your repository secret name + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: 'upload' + ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### + # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig + app_location: '/' # App source code path + api_location: '' # Api source code path - optional + output_location: 'out' # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + + close_pull_request_job: + if: github.event.repository.fork == false && github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + id: closepullrequest + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_MOSS_0A047A40F }} # change this to your repository secret name + action: 'close' From c6b6408689ec43b5cb4a2e282905b581a6b43292 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 22:27:34 -0500 Subject: [PATCH 0276/1184] Update settings-context.js --- src/contexts/settings-context.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/contexts/settings-context.js b/src/contexts/settings-context.js index 76a29de26948..49b3eafedc6c 100644 --- a/src/contexts/settings-context.js +++ b/src/contexts/settings-context.js @@ -72,6 +72,7 @@ const initialSettings = { paletteMode: "light", pinNav: true, currentTenant: null, + showDevtools: false, }; const initialState = { From ed0c7d6adf4d07be07f2dcb178a4b73d90d4f2ca Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 22:37:58 -0500 Subject: [PATCH 0277/1184] fix tanstack tools --- src/pages/_app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/_app.js b/src/pages/_app.js index e520d50c5822..e5934e9bdf6b 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -111,11 +111,11 @@ const App = (props) => { /> - {settings?.showDevtools && ( + {settings?.showDevtools ? ( - )} + ) : null} ); }} From e8a15e93f4fcbae1cce3d43f001e1120cd1e149a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 22:38:14 -0500 Subject: [PATCH 0278/1184] add default domain name --- .../CippIntegrations/CippIntegrationTenantMapping.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx index 179f057db2d2..5ad81d9ade01 100644 --- a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx +++ b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx @@ -89,6 +89,7 @@ const CippIntegrationSettings = ({ children }) => { Tenant: selectedTenant.label, IntegrationName: selectedCompany.label, IntegrationId: selectedCompany.value, + TenantDomain: selectedTenant.addedFields.defaultDomainName, }; setTableData([...tableData, newRowData]); @@ -109,6 +110,7 @@ const CippIntegrationSettings = ({ children }) => { newTableData.push({ TenantId: tenant.customerId, Tenant: tenant.displayName, + TenantDomain: tenant.defaultDomainName, IntegrationName: matchingCompany.name, IntegrationId: matchingCompany.value, }); From 1cbacd74e3fefa5e3b514257b6dac4901dd213f8 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 23:10:27 -0500 Subject: [PATCH 0279/1184] Update CippIntegrationTenantMapping.jsx --- .../CippIntegrations/CippIntegrationTenantMapping.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx index 5ad81d9ade01..53ed74c6e822 100644 --- a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx +++ b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx @@ -239,7 +239,7 @@ const CippIntegrationSettings = ({ children }) => { reportTitle={`${extension.id}-tenant-map`} data={tableData} simple={false} - simpleColumns={["Tenant", "IntegrationName"]} + simpleColumns={["IntegrationName", "Tenant", "TenantDomain"]} isFetching={mappings.isFetching} refreshFunction={() => mappings.refetch()} /> From 88fd0f6dca1984c00c65e40271facf2f71384e2f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 23:20:41 -0500 Subject: [PATCH 0280/1184] Update _app.js --- src/pages/_app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/_app.js b/src/pages/_app.js index e5934e9bdf6b..69f35059554e 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -111,7 +111,7 @@ const App = (props) => { /> - {settings?.showDevtools ? ( + {settings.isInitialized && settings?.showDevtools === true ? ( From 94ea962755febfdfbef9a1d48999aa98e27cf780 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Feb 2025 23:46:48 -0500 Subject: [PATCH 0281/1184] feat: check auth more frequently trigger logon page after 2 minutes if session times out and window focus changes --- src/api/ApiCall.jsx | 6 ++++-- src/components/CippComponents/CippSettingsSideBar.jsx | 3 +++ src/components/PrivateRoute.js | 6 ++++-- src/layouts/account-popover.js | 7 +++---- src/layouts/index.js | 2 ++ src/pages/unauthenticated.js | 4 +++- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/api/ApiCall.jsx b/src/api/ApiCall.jsx index fa953247204c..b8a38648769a 100644 --- a/src/api/ApiCall.jsx +++ b/src/api/ApiCall.jsx @@ -16,6 +16,8 @@ export function ApiGetCall(props) { bulkRequest = false, toast = false, onResult, + staleTime = 600000, // 10 minutes + refetchOnWindowFocus = false, } = props; const queryClient = useQueryClient(); const dispatch = useDispatch(); @@ -93,8 +95,8 @@ export function ApiGetCall(props) { return response.data; } }, - staleTime: 600000, // 10 minutes - refetchOnWindowFocus: false, + staleTime: staleTime, + refetchOnWindowFocus: refetchOnWindowFocus, retry: retryFn, }); return queryInfo; diff --git a/src/components/CippComponents/CippSettingsSideBar.jsx b/src/components/CippComponents/CippSettingsSideBar.jsx index 14c3ede87846..cb08993a8ea1 100644 --- a/src/components/CippComponents/CippSettingsSideBar.jsx +++ b/src/components/CippComponents/CippSettingsSideBar.jsx @@ -21,6 +21,9 @@ export const CippSettingsSideBar = (props) => { const currentUser = ApiGetCall({ url: "/.auth/me", + queryKey: "authmecipp", + staleTime: 120000, + refetchOnWindowFocus: true, }); const saveSettingsPost = ApiPostCall({ diff --git a/src/components/PrivateRoute.js b/src/components/PrivateRoute.js index 4c77fa33627c..011886bc4499 100644 --- a/src/components/PrivateRoute.js +++ b/src/components/PrivateRoute.js @@ -5,13 +5,15 @@ export const PrivateRoute = ({ children, routeType }) => { const { data: profile, error, - isFetching, + isLoading, } = ApiGetCall({ url: "/.auth/me", queryKey: "authmecipp", + refetchOnWindowFocus: true, + staleTime: 120000, // 2 minutes }); - if (isFetching) { + if (isLoading) { return "Loading..."; } diff --git a/src/layouts/account-popover.js b/src/layouts/account-popover.js index a8682abefa70..ab6b9a11155b 100644 --- a/src/layouts/account-popover.js +++ b/src/layouts/account-popover.js @@ -9,7 +9,6 @@ import SunIcon from "@heroicons/react/24/outline/SunIcon"; import { Avatar, Box, - FormControlLabel, List, ListItem, ListItemButton, @@ -18,10 +17,8 @@ import { Popover, Stack, SvgIcon, - Switch, Typography, useMediaQuery, - IconButton, } from "@mui/material"; import { usePopover } from "../hooks/use-popover"; import { paths } from "../paths"; @@ -42,7 +39,9 @@ export const AccountPopover = (props) => { const orgData = ApiGetCall({ url: "/.auth/me", - queryKey: "me", + queryKey: "authmecipp", + staleTime: 120000, + refetchOnWindowFocus: true, }); const handleLogout = useCallback(async () => { diff --git a/src/layouts/index.js b/src/layouts/index.js index 33ffc87aa2eb..892e54e4c485 100644 --- a/src/layouts/index.js +++ b/src/layouts/index.js @@ -83,6 +83,8 @@ export const Layout = (props) => { const currentRole = ApiGetCall({ url: "/.auth/me", queryKey: "authmecipp", + staleTime: 120000, + refetchOnWindowFocus: true, }); const [hideSidebar, setHideSidebar] = useState(false); diff --git a/src/pages/unauthenticated.js b/src/pages/unauthenticated.js index 6c06e2ca3a80..5543103d52d5 100644 --- a/src/pages/unauthenticated.js +++ b/src/pages/unauthenticated.js @@ -8,7 +8,9 @@ import { useState, useEffect } from "react"; const Page = () => { const orgData = ApiGetCall({ url: "/.auth/me", - queryKey: "me", + queryKey: "authmecipp", + staleTime: 120000, + refetchOnWindowFocus: true, }); const blockedRoles = ["anonymous", "authenticated"]; const [userRoles, setUserRoles] = useState([]); From 9f4c8f061c11e9cebfbbb2099e303ebb5fb2fe87 Mon Sep 17 00:00:00 2001 From: Esco Date: Wed, 26 Feb 2025 11:51:49 +0100 Subject: [PATCH 0282/1184] feat: new UserPreferredLanguage standard --- src/data/standards.json | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index d9d135ca79c7..f86d36e285e9 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -909,6 +909,33 @@ "powershellEquivalent": "Graph API", "recommendedBy": [] }, + { + "name": "standards.UserPreferredLanguage", + "cat": "Entra (AAD) Standards", + "tag": [], + "helpText": "Sets the preferred language property for all users in the tenant. This will override the user's language settings.", + "docsDescription": "Sets the preferred language property for all users in the tenant. This will override the user's language settings.", + "addedComponent": [ + { + "type": "autoComplete", + "multiple": false, + "creatable": false, + "name": "standards.UserPreferredLanguage.preferredLanguage", + "label": "Preferred Language", + "api": { + "url": "/languageList.json", + "labelField": "language", + "valueField": "tag" + } + } + ], + "label": "Preferred language for all users", + "impact": "High Impact", + "impactColour": "info", + "addedDate": "2025-02-26", + "powershellEquivalent": "Update-MgUser -UserId user@domain.com -BodyParameter @{preferredLanguage='en-US'}", + "recommendedBy": [] + }, { "name": "standards.OutBoundSpamAlert", "cat": "Exchange Standards", From c7ca93cc691f2ee9848486df7cdbbb3ab69d1ea8 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 26 Feb 2025 16:52:33 -0500 Subject: [PATCH 0283/1184] Update standards.json --- src/data/standards.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/standards.json b/src/data/standards.json index d9d135ca79c7..b40aefec3cd2 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -3206,7 +3206,8 @@ { "type": "textField", "name": "standards.AutopilotStatusPage.ErrorMessage", - "label": "Custom Error Message" + "label": "Custom Error Message", + "required": false }, { "type": "switch", From 7d0e29559badf44e3777c8559a946f1d9e936f30 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 26 Feb 2025 17:24:20 -0500 Subject: [PATCH 0284/1184] fix tenant setting actions --- src/pages/cipp/settings/tenants.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pages/cipp/settings/tenants.js b/src/pages/cipp/settings/tenants.js index 529e7c413a18..320e22fa5add 100644 --- a/src/pages/cipp/settings/tenants.js +++ b/src/pages/cipp/settings/tenants.js @@ -21,6 +21,7 @@ const Page = () => { data: { value: "customerId" }, confirmText: "Are you sure you want to exclude these tenants?", multiPost: false, + condition: (row) => row.displayName !== '*Partner Tenant', }, { label: "Include Tenants", @@ -30,13 +31,14 @@ const Page = () => { data: { value: "customerId" }, confirmText: "Are you sure you want to include these tenants?", multiPost: false, + condition: (row) => row.displayName !== '*Partner Tenant', }, { label: "Refresh CPV Permissions", type: "POST", url: `/api/ExecCPVPermissions`, icon: , - data: { TenantFilter: "customerId" }, + data: { tenantFilter: "customerId" }, confirmText: "Are you sure you want to refresh the CPV permissions for these tenants?", multiPost: false, }, @@ -45,10 +47,11 @@ const Page = () => { type: "POST", url: `/api/ExecCPVPermissions?&ResetSP=true`, icon: , - data: { TenantFilter: "customerId" }, + data: { tenantFilter: "customerId" }, confirmText: "Are you sure you want to reset the CPV permissions for these tenants? (This will delete the Service Principal and re-add it.)", multiPost: false, + condition: (row) => row.displayName !== '*Partner Tenant', }, { label: "Remove Tenant", @@ -58,6 +61,7 @@ const Page = () => { data: { TenantID: "customerId" }, confirmText: "Are you sure you want to remove this tenant?", multiPost: false, + condition: (row) => row.displayName !== '*Partner Tenant', }, ]; From c8a21c4f26c04a1b9a001fcffdedd641a4db524c Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 26 Feb 2025 18:54:39 -0500 Subject: [PATCH 0285/1184] fix: external link turbo mode --- .../CippComponents/CippApiDialog.jsx | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index d5e15d9bccff..a85e0e5a4830 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -274,19 +274,21 @@ export const CippApiDialog = (props) => { }; // Handling link navigation - if (api.link) { - const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { - return getNestedValue(row, key) || `[${key}]`; - }); + useEffect(() => { + if (api.link && createDialog.open) { + const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { + return getNestedValue(row, key) || `[${key}]`; + }); - if (linkWithRowData.startsWith("/")) { - router.push(linkWithRowData, undefined, { shallow: true }); - } else { - window.open(linkWithRowData, api.target || "_blank"); + if (linkWithRowData.startsWith("/")) { + router.push(linkWithRowData, undefined, { shallow: true }); + } else { + window.open(linkWithRowData, api.target || "_blank"); + } + createDialog.handleClose(); } + }, [api.link, createDialog.open]); - return null; - } useEffect(() => { if (api.noConfirm) { formHook.handleSubmit(onSubmit)(); // Submits the form on mount From 6f95ab364e065dab7de2699adb5baa349d997043 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 26 Feb 2025 19:06:02 -0500 Subject: [PATCH 0286/1184] feat: add role list back to user preferences page --- src/pages/cipp/preferences.js | 20 ++++++++++++++++++++ src/utils/get-cipp-formatting.js | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/pages/cipp/preferences.js b/src/pages/cipp/preferences.js index a6c34d96bbab..2653b577399d 100644 --- a/src/pages/cipp/preferences.js +++ b/src/pages/cipp/preferences.js @@ -9,11 +9,20 @@ import { useSettings } from "../../hooks/use-settings"; import countryList from "../../data/countryList.json"; import { CippSettingsSideBar } from "../../components/CippComponents/CippSettingsSideBar"; import CippDevOptions from "/src/components/CippComponents/CippDevOptions"; +import { ApiGetCall } from "../../api/ApiCall"; +import { getCippFormatting } from "../../utils/get-cipp-formatting"; const Page = () => { const settings = useSettings(); const formcontrol = useForm({ mode: "onChange", defaultValues: settings }); + const auth = ApiGetCall({ + url: "/.auth/me", + queryKey: "authmecipp", + staleTime: 120000, + refetchOnWindowFocus: true, + }); + const addedAttributes = [ { value: "consentProvidedForMinor", label: "consentProvidedForMinor" }, { value: "employeeId", label: "employeeId" }, @@ -281,6 +290,17 @@ const Page = () => { + !['anonymous', 'authenticated'].includes(role)) + .map((role) => ({ + label: "", + value: getCippFormatting(role,"role"), + }))} + showDivider={false} + /> + diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 3d6841d267b4..25b1cd58c7ec 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -219,7 +219,7 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { } } - if (cellName === "ClientId") { + if (cellName === "ClientId" || cellName === "role") { return isText ? data : ; } From 252b40e96f217623ef379857ac0ffa9d1c88add6 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 27 Feb 2025 13:13:41 +0100 Subject: [PATCH 0287/1184] feat: more SpamFilter options --- src/data/standards.json | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index b4eb7e73eab0..de8a4c8a2724 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -2268,6 +2268,82 @@ "value": "DefaultFullAccessWithNotificationPolicy" } ] + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.IncreaseScoreWithImageLinks", + "label": "Increase score if message contains image links to remote websites", + "defaultValue": false + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.IncreaseScoreWithBizOrInfoUrls", + "label": "Increase score if message contains links to .biz or .info domains", + "defaultValue": false + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.MarkAsSpamFramesInHtml", + "label": "Mark as spam if message contains HTML or iframe tags", + "defaultValue": false + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.MarkAsSpamObjectTagsInHtml", + "label": "Mark as spam if message contains HTML object tags", + "defaultValue": false + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.MarkAsSpamEmbedTagsInHtml", + "label": "Mark as spam if message contains HTML embed tags", + "defaultValue": false + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.MarkAsSpamFormTagsInHtml", + "label": "Mark as spam if message contains HTML form tags", + "defaultValue": false + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.MarkAsSpamWebBugsInHtml", + "label": "Mark as spam if message contains web bugs (also known as web beacons)", + "defaultValue": false + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.MarkAsSpamSensitiveWordList", + "label": "Mark as spam if message contains words from the sensitive words list", + "defaultValue": false + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.EnableLanguageBlockList", + "label": "Enable language block list", + "defaultValue": false + }, + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": false, + "name": "standards.SpamFilterPolicy.LanguageBlockList", + "label": "Languages to block (uppercase ISO 639-1 two-letter)" + }, + { + "type": "switch", + "name": "standards.SpamFilterPolicy.EnableRegionBlockList", + "label": "Enable region block list", + "defaultValue": false + }, + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": false, + "name": "standards.SpamFilterPolicy.RegionBlockList", + "label": "Regions to block (uppercase ISO 3166-1 two-letter)" } ], "label": "Default Spam Filter Policy", From dd1c132defb3f6368e9d48a21d49164221effa6a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Feb 2025 12:10:32 -0500 Subject: [PATCH 0288/1184] feat: add docs link to speed dial --- src/pages/_app.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/pages/_app.js b/src/pages/_app.js index 69f35059554e..00cfbe97275a 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -12,7 +12,6 @@ import { createEmotionCache } from "../utils/create-emotion-cache"; import "../libs/nprogress"; import { PrivateRoute } from "../components/PrivateRoute"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { useMediaPredicate } from "react-media-hook"; import Error500 from "./500"; import { ErrorBoundary } from "react-error-boundary"; @@ -25,10 +24,12 @@ import { Help as HelpIcon, BugReport as BugReportIcon, Feedback as FeedbackIcon, + AutoStories, } from "@mui/icons-material"; import { SvgIcon } from "@mui/material"; import discordIcon from "../../public/discord-mark-blue.svg"; import React from "react"; +import { usePathname } from "next/navigation"; TimeAgo.addDefaultLocale(en); const ReactQueryDevtoolsProduction = React.lazy(() => @@ -43,6 +44,7 @@ const App = (props) => { const { Component, emotionCache = clientSideEmotionCache, pageProps } = props; const getLayout = Component.getLayout ?? ((page) => page); const preferredTheme = useMediaPredicate("(prefers-color-scheme: dark)") ? "dark" : "light"; + const pathname = usePathname(); const speedDialActions = [ { @@ -69,6 +71,13 @@ const App = (props) => { href: "https://discord.gg/cyberdrain", onClick: () => window.open("https://discord.gg/cyberdrain", "_blank") }, + { + id: "documentation", + icon: , + name: "Check the Documentation", + href: `https://docs.cipp.app/user-documentation/${pathname}`, + onClick: () => window.open(`https://docs.cipp.app/user-documentation/${pathname}`, "_blank") + } ]; return ( From 4e0242c51b762c53b0528c00fada00fe248c74fe Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Feb 2025 23:12:48 -0500 Subject: [PATCH 0289/1184] form tweaks --- src/components/CippStandards/CippStandardAccordion.jsx | 1 + src/pages/cipp/settings/partner-webhooks.js | 1 + 2 files changed, 2 insertions(+) diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx index 4fc8eb1011d3..2d1ff418b693 100644 --- a/src/components/CippStandards/CippStandardAccordion.jsx +++ b/src/components/CippStandards/CippStandardAccordion.jsx @@ -49,6 +49,7 @@ const CippAddedComponent = React.memo(({ standardName, component, formControl }) label: tz.timezone, value: tz.timezone, })); + updatedComponent.multiple = false; } else { updatedComponent.type = component.type; } diff --git a/src/pages/cipp/settings/partner-webhooks.js b/src/pages/cipp/settings/partner-webhooks.js index d44f24c690a8..2a5c38ddae47 100644 --- a/src/pages/cipp/settings/partner-webhooks.js +++ b/src/pages/cipp/settings/partner-webhooks.js @@ -120,6 +120,7 @@ const Page = () => { title={pageTitle} hideBackButton={true} hidePageType={true} + allowResubmit={true} formControl={formControl} resetForm={false} postUrl="/api/ExecPartnerWebhook?Action=CreateSubscription" From 93ac677c1eec9a40c7fa8b0a012408d25a216bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 28 Feb 2025 16:22:35 +0100 Subject: [PATCH 0290/1184] feat: update mailbox API data structure to use ExchangeGuid so it dosnt fail when the user has a personal MS account --- src/pages/email/administration/mailboxes/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/email/administration/mailboxes/index.js b/src/pages/email/administration/mailboxes/index.js index 128fd39dd175..716f1abb4c53 100644 --- a/src/pages/email/administration/mailboxes/index.js +++ b/src/pages/email/administration/mailboxes/index.js @@ -121,14 +121,15 @@ const Page = () => { url: "/api/ExecStartManagedFolderAssistant", icon: , data: { - ID: "UPN", + ID: "ExchangeGuid", + UserPrincipalName: "UPN", }, confirmText: "Are you sure you want to start the managed folder assistant for this user?", }, { label: "Delete Mailbox", type: "POST", - icon: , // Added + icon: , url: "/api/RemoveUser", data: { ID: "UPN" }, confirmText: "Are you sure you want to delete this mailbox?", From 155954c5018f51a95e56da732d536c15b06904f0 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 28 Feb 2025 16:42:51 +0100 Subject: [PATCH 0291/1184] CIPP now gives head --- src/components/CippCards/CippPageCard.jsx | 5 ++--- src/components/CippComponents/CippHead.jsx | 11 +++++++++++ src/components/CippComponents/CippTablePage.jsx | 5 ++--- src/components/CippComponents/CippTenantSelector.jsx | 1 + src/components/CippFormPages/CippFormPage.jsx | 7 +++---- src/components/CippWizard/CippWizardPage.jsx | 5 ++--- src/pages/tenant/standards/bpa-report/builder.js | 5 ++--- 7 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 src/components/CippComponents/CippHead.jsx diff --git a/src/components/CippCards/CippPageCard.jsx b/src/components/CippCards/CippPageCard.jsx index 9c1e1bce81b7..72f44a95b09b 100644 --- a/src/components/CippCards/CippPageCard.jsx +++ b/src/components/CippCards/CippPageCard.jsx @@ -2,6 +2,7 @@ import { useRouter } from "next/router"; import { Box, Container, Stack, Button, SvgIcon, Typography, Card } from "@mui/material"; import ArrowLeftIcon from "@mui/icons-material/ArrowLeft"; import Head from "next/head"; +import { CippHead } from "../CippComponents/CippHead"; const CippPageCard = (props) => { const { title, @@ -20,9 +21,7 @@ const CippPageCard = (props) => { return ( <> - - {title} - + { + const tenant = useSettings().currentTenant; + return ( + + {tenant ? `${tenant} - ${title}` : title} + + ); +}; diff --git a/src/components/CippComponents/CippTablePage.jsx b/src/components/CippComponents/CippTablePage.jsx index 61f5e89cac86..37a3a9d44ccc 100644 --- a/src/components/CippComponents/CippTablePage.jsx +++ b/src/components/CippComponents/CippTablePage.jsx @@ -3,6 +3,7 @@ import { Box, Container, Stack } from "@mui/system"; import Head from "next/head"; import { CippDataTable } from "../CippTable/CippDataTable"; import { useSettings } from "../../hooks/use-settings"; +import { CippHead } from "./CippHead"; export const CippTablePage = (props) => { const { @@ -28,9 +29,7 @@ export const CippTablePage = (props) => { const tenant = useSettings().currentTenant; return ( <> - - {title} - + diff --git a/src/components/CippComponents/CippTenantSelector.jsx b/src/components/CippComponents/CippTenantSelector.jsx index 4471a2442415..9db78af9b6b4 100644 --- a/src/components/CippComponents/CippTenantSelector.jsx +++ b/src/components/CippComponents/CippTenantSelector.jsx @@ -58,6 +58,7 @@ export const CippTenantSelector = (props) => { settings.handleUpdate({ currentTenant: currentTenant.value, }); + //if we have a tenantfilter, we add the tenantfilter to the title of the tab/page so its "Tenant - original title". } }, [currentTenant?.value]); diff --git a/src/components/CippFormPages/CippFormPage.jsx b/src/components/CippFormPages/CippFormPage.jsx index baae183502a4..d22877dfb139 100644 --- a/src/components/CippFormPages/CippFormPage.jsx +++ b/src/components/CippFormPages/CippFormPage.jsx @@ -16,6 +16,7 @@ import { ApiPostCall } from "../../api/ApiCall"; import { CippApiResults } from "../CippComponents/CippApiResults"; import { useEffect } from "react"; import { useFormState } from "react-hook-form"; +import { CippHead } from "../CippComponents/CippHead"; const CippFormPage = (props) => { const { @@ -86,9 +87,7 @@ const CippFormPage = (props) => { }; return ( <> - - {title} - + { {addedButtons && addedButtons} } title="Report Settings" > - + {/* First item for Report Name and Layout Mode */} - - Layout Mode - - + - - {/* Third item for Buttons */} - {layoutMode === "Tenant" && ( - - - - - - )} - {/* Canvas Area */} - - Canvas - + + Fields + + {blockCards.map((block, index) => ( @@ -269,16 +270,16 @@ const Page = () => { key={block.id} > handleRemoveBlock(block.id)} // Remove block on click - > - - - ) + handleRemoveBlock(block.id)} // Remove block on click + > + + } > {/* Form inside each card */} @@ -310,7 +311,8 @@ const Page = () => { @@ -477,13 +479,17 @@ const Page = () => { type="autoComplete" formControl={formControl} multiple={false} - api={{ - queryKey: `ListBPA`, - url: "/api/ListBPA", - dataKey: "Keys", - labelField: (option) => `${option}`, - valueField: (option) => `${option}`, - }} + options={ + bpaTemplateList.data + ?.flatMap( + (template) => template.Fields?.map((field) => field.name) ?? [] + ) + .filter( + (value, index, self) => value && self.indexOf(value) === index + ) + .map((field) => ({ label: field, value: field })) + .sort((a, b) => a.label.localeCompare(b.label)) ?? [] + } /> From 65e06bcd6508b79c3ebc6832302eb7ad5002f1e5 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sat, 1 Mar 2025 14:06:19 +0100 Subject: [PATCH 0295/1184] corrected tthe head --- src/components/CippComponents/CippHead.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippHead.jsx b/src/components/CippComponents/CippHead.jsx index f71bce87349d..f48eb6b09321 100644 --- a/src/components/CippComponents/CippHead.jsx +++ b/src/components/CippComponents/CippHead.jsx @@ -5,7 +5,7 @@ export const CippHead = ({ title }) => { const tenant = useSettings().currentTenant; return ( - {tenant ? `${tenant} - ${title}` : title} + {tenant ? `${title} - ${tenant}` : title} ); }; From 01e8f52128a832c96fc11d680af5ed29df738604 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 1 Mar 2025 21:07:07 -0500 Subject: [PATCH 0296/1184] update help text for viva --- src/data/standards.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/standards.json b/src/data/standards.json index de8a4c8a2724..441c0a3d9b2e 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1207,7 +1207,7 @@ "name": "standards.DisableViva", "cat": "Exchange Standards", "tag": [], - "helpText": "Disables the daily viva reports for all users.", + "helpText": "Disables the daily viva reports for all users. This standard requires the CIPP-SAM application to have the Company Administrator (Global Admin) role in the tenant. Enable this using CIPP > Advanced > Super Admin > SAM App Roles. Activate the roles with a CPV refresh.", "docsDescription": "", "addedComponent": [], "label": "Disable daily Insight/Viva reports", From ee660aedc5eb694f7f32a4c9bfafb209d8826cc7 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 2 Mar 2025 13:46:38 -0500 Subject: [PATCH 0297/1184] fix: remove required property on field mapping --- .../CippIntegrations/CippIntegrationFieldMapping.jsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/components/CippIntegrations/CippIntegrationFieldMapping.jsx b/src/components/CippIntegrations/CippIntegrationFieldMapping.jsx index 8b46afd209f7..54ace0e41464 100644 --- a/src/components/CippIntegrations/CippIntegrationFieldMapping.jsx +++ b/src/components/CippIntegrations/CippIntegrationFieldMapping.jsx @@ -140,12 +140,6 @@ const CippIntegrationFieldMapping = () => { fullWidth isFetching={fieldMapping.isFetching} disableClearable={true} - required={true} - validators={{ - validate: (value) => { - return value ? true : "Please select a value"; - }, - }} /> From dd2b13950b52fccd42dc48d481d90fa786644b11 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 2 Mar 2025 14:01:02 -0500 Subject: [PATCH 0298/1184] chore: update Grid to use mui/system --- .../CippIntegrationFieldMapping.jsx | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/src/components/CippIntegrations/CippIntegrationFieldMapping.jsx b/src/components/CippIntegrations/CippIntegrationFieldMapping.jsx index 54ace0e41464..0d8c98d4000f 100644 --- a/src/components/CippIntegrations/CippIntegrationFieldMapping.jsx +++ b/src/components/CippIntegrations/CippIntegrationFieldMapping.jsx @@ -1,12 +1,10 @@ import { Box, - Grid, CardContent, Skeleton, Typography, Divider, Tooltip, - IconButton, Button, Alert, } from "@mui/material"; @@ -18,7 +16,7 @@ import extensions from "/src/data/Extensions.json"; import React, { useEffect, useState } from "react"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { Sync } from "@mui/icons-material"; -import { Stack } from "@mui/system"; +import { Stack, Grid } from "@mui/system"; const CippIntegrationFieldMapping = () => { const router = useRouter(); @@ -113,35 +111,33 @@ const CippIntegrationFieldMapping = () => { )} - + {fieldMapping?.data?.CIPPFields?.filter( (field) => field.FieldType === header.FieldType ).map((field, fieldIndex) => ( - - - - (integrationField?.type === field.Type && - integrationField?.FieldType === field.FieldType) || - integrationField?.type === "unset" - )?.map((integrationField) => { - return { - label: integrationField?.name, - value: integrationField?.value, - }; - })} - formControl={formControl} - multiple={false} - creatable={false} - fullWidth - isFetching={fieldMapping.isFetching} - disableClearable={true} - /> - + + + (integrationField?.type === field.Type && + integrationField?.FieldType === field.FieldType) || + integrationField?.type === "unset" + )?.map((integrationField) => { + return { + label: integrationField?.name, + value: integrationField?.value, + }; + })} + formControl={formControl} + multiple={false} + creatable={false} + fullWidth + isFetching={fieldMapping.isFetching} + disableClearable={true} + /> ))} From 71d98ef8d1de25b3c2bd3a531a599fc6ca8973c2 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 2 Mar 2025 14:41:32 -0500 Subject: [PATCH 0299/1184] feat: improve cippformcondition add the ability to disable cippformcondition externally --- .../CippComponents/CippFormCondition.jsx | 19 ++++++++++++++++--- .../CippIntegrationSettings.jsx | 4 ++-- src/data/Extensions.json | 8 +++++++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/components/CippComponents/CippFormCondition.jsx b/src/components/CippComponents/CippFormCondition.jsx index 45ea1c016cac..8cf9a1040728 100644 --- a/src/components/CippComponents/CippFormCondition.jsx +++ b/src/components/CippComponents/CippFormCondition.jsx @@ -3,7 +3,15 @@ import isEqual from "lodash/isEqual"; // lodash for deep comparison import React from "react"; export const CippFormCondition = (props) => { - let { field, compareType = "is", compareValue, action = 'hide', children, formControl } = props; + let { + field, + compareType = "is", + compareValue, + action = "hide", + children, + formControl, + disabled = false, + } = props; if ( field === undefined || @@ -26,18 +34,23 @@ export const CippFormCondition = (props) => { const disableChildren = (children) => { return React.Children.map(children, (child) => { if (React.isValidElement(child)) { - if (child.props?.children && child.type.name !== "CippFormCondition") { + if (child.props?.children) { return React.cloneElement(child, { children: disableChildren(child.props.children), disabled: true, }); + } else { + return React.cloneElement(child, { disabled: true }); } - return React.cloneElement(child, { disabled: true }); } return child; }); }; + if (disabled) { + return disableChildren(children); + } + switch (compareType) { case "regex": if (watcher?.match(new RegExp(compareValue))) { diff --git a/src/components/CippIntegrations/CippIntegrationSettings.jsx b/src/components/CippIntegrations/CippIntegrationSettings.jsx index 07731168d0be..47b99c451510 100644 --- a/src/components/CippIntegrations/CippIntegrationSettings.jsx +++ b/src/components/CippIntegrations/CippIntegrationSettings.jsx @@ -26,6 +26,7 @@ const CippIntegrationSettings = ({ children }) => { }); const extension = extensions.find((extension) => extension.id === router.query.id); + const enabled = formControl.watch(`${extension?.id}.Enabled`); var logo = extension?.logo; if (preferredTheme === "dark" && extension?.logoDark) { @@ -54,12 +55,11 @@ const CippIntegrationSettings = ({ children }) => { resetForm={false} > {children} - {extension.SettingOptions.map((setting, index) => ( {setting?.condition ? ( - + s.name === `${extension.id}.Enabled`) && !enabled}> Date: Sun, 2 Mar 2025 19:32:13 -0500 Subject: [PATCH 0300/1184] test invalidate auth querykey on redirect --- src/api/ApiCall.jsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/api/ApiCall.jsx b/src/api/ApiCall.jsx index b8a38648769a..e7feb6f5748f 100644 --- a/src/api/ApiCall.jsx +++ b/src/api/ApiCall.jsx @@ -3,7 +3,6 @@ import axios, { isAxiosError } from "axios"; import { useDispatch } from "react-redux"; import { showToast } from "../store/toasts"; import { getCippError } from "../utils/get-cipp-error"; -import { useRouter } from "next/router"; export function ApiGetCall(props) { const { @@ -29,6 +28,12 @@ export function ApiGetCall(props) { returnRetry = false; } if (isAxiosError(error) && HTTP_STATUS_TO_NOT_RETRY.includes(error.response?.status ?? 0)) { + if ( + error.response?.status === 302 && + error.response?.headers.get("location").includes("/.auth/login/aad") + ) { + queryClient.invalidateQueries({ queryKey: ["authmecipp"] }); + } returnRetry = false; } if (returnRetry === false && toast) { From e6873838fea2e97d1d526f4e979ec8cac3d2f174 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 2 Mar 2025 21:10:32 -0500 Subject: [PATCH 0301/1184] fix: addtogroup functionality --- .../CippFormPages/CippAddEditUser.jsx | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx index f772ae0e8e0e..5aeab622c02c 100644 --- a/src/components/CippFormPages/CippAddEditUser.jsx +++ b/src/components/CippFormPages/CippAddEditUser.jsx @@ -291,7 +291,6 @@ const CippAddEditUser = (props) => { multiple={false} /> - {/* Schedule User Creation */} { multiple={false} /> + {formType === "edit" && ( + + + + )} + {/* Schedule User Creation */} {formType === "add" && ( Date: Mon, 3 Mar 2025 12:42:52 +0100 Subject: [PATCH 0302/1184] usability --- .../CippComponents/CippCentralSearch.jsx | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/components/CippComponents/CippCentralSearch.jsx b/src/components/CippComponents/CippCentralSearch.jsx index c710a8d2d49b..6a90c4e35b9d 100644 --- a/src/components/CippComponents/CippCentralSearch.jsx +++ b/src/components/CippComponents/CippCentralSearch.jsx @@ -9,6 +9,7 @@ import { Grid, Card, CardContent, + CardActionArea, Typography, Box, } from "@mui/material"; @@ -107,15 +108,19 @@ export const CippCentralSearch = ({ handleClose, open }) => { handleCardClick(item.path)} + sx={{ height: "100%" }} > - - {highlightMatch(item.title)} - - Path: {highlightMatch(item.path)} - - + handleCardClick(item.path)} + aria-label={`Navigate to ${item.title}`} + > + + {highlightMatch(item.title)} + + Path: {highlightMatch(item.path)} + + + ))} From 766e14e4ae2a5ca3faf35bb9d5db3037dbb97ac6 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 3 Mar 2025 11:40:47 -0500 Subject: [PATCH 0303/1184] fix: boolean support for cippapidialog --- src/components/CippComponents/CippApiDialog.jsx | 2 ++ src/components/CippSettings/CippCacheSettings.jsx | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index a85e0e5a4830..347fa1eb9476 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -97,6 +97,8 @@ export const CippApiDialog = (props) => { } else { newData[key] = value; } + } else if (typeof value === 'boolean') { + newData[key] = value; } else if (typeof value === "object" && value !== null) { const processedValue = processActionData(value, row, replacementBehaviour); if (replacementBehaviour !== "removeNulls" || Object.keys(processedValue).length > 0) { diff --git a/src/components/CippSettings/CippCacheSettings.jsx b/src/components/CippSettings/CippCacheSettings.jsx index 5a2e97622056..a427ddd3acfe 100644 --- a/src/components/CippSettings/CippCacheSettings.jsx +++ b/src/components/CippSettings/CippCacheSettings.jsx @@ -69,8 +69,8 @@ const CippCacheSettings = () => { url: "/api/ListTenants", confirmText: "This will clear the cache used by CIPP. This will slow down some aspects of the application, and should only be used when instructed to do so by support.", - type: "GET", - data: { ClearCache: "!true", TenantsOnly: "tenantsOnly" }, + type: "POST", + data: { ClearCache: true }, replacementBehaviour: "removeNulls", }} row={{}} From b86fa06a14f9cf3444ea9104cf3023ae4f3c080b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 3 Mar 2025 11:41:02 -0500 Subject: [PATCH 0304/1184] fix: add redirect url to unauthenticated page --- src/pages/unauthenticated.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/unauthenticated.js b/src/pages/unauthenticated.js index 5543103d52d5..c9999fa4c155 100644 --- a/src/pages/unauthenticated.js +++ b/src/pages/unauthenticated.js @@ -50,10 +50,10 @@ const Page = () => { 0 ? "Return" : "Login"} - link={userRoles.length > 0 ? "/" : "/.auth/login/aad"} + linkText={userRoles.length > 0 ? "Return to Home" : "Login"} + link={userRoles.length > 0 ? "/" : `/.auth/login/aad?post_login_redirect_uri=${encodeURIComponent(window.location.href)}`} /> )} From d6732b5d03666b9b9a953ff5edbf10549cec0abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 3 Mar 2025 18:24:13 +0100 Subject: [PATCH 0305/1184] feat: add functionality to enable auto-expanding archive for users --- .../email/administration/mailboxes/index.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/pages/email/administration/mailboxes/index.js b/src/pages/email/administration/mailboxes/index.js index 716f1abb4c53..c4014ca25d38 100644 --- a/src/pages/email/administration/mailboxes/index.js +++ b/src/pages/email/administration/mailboxes/index.js @@ -2,8 +2,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import Link from "next/link"; import { Button } from "@mui/material"; -import { Add, Mail } from "@mui/icons-material"; - import { Archive, MailOutline, @@ -13,6 +11,8 @@ import { VisibilityOff, PhonelinkLock, Key, + PostAdd, + Add, } from "@mui/icons-material"; import { TrashIcon, MagnifyingGlassIcon, PlayCircleIcon } from "@heroicons/react/24/outline"; @@ -85,11 +85,22 @@ const Page = () => { type: "POST", icon: , url: "/api/ExecEnableArchive", - data: { ID: "UPN" }, + data: { ID: "Id", username: "UPN" }, confirmText: "Are you sure you want to enable the online archive for this user?", multiPost: false, condition: (row) => row.ArchiveGuid === "00000000-0000-0000-0000-000000000000", }, + { + label: "Enable Auto-Expanding Archive", + type: "POST", + icon: , + url: "/api/ExecEnableAutoExpandingArchive", + data: { ID: "Id", username: "UPN" }, + confirmText: + "Are you sure you want to enable auto-expanding archive for this user? The archive must already be enabled.", + multiPost: false, + condition: (row) => row.ArchiveGuid !== "00000000-0000-0000-0000-000000000000", + }, { label: "Hide from Global Address List", type: "POST", From 976dfb309a04be46dc5a39fcf6e1b91b27cdddba Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 3 Mar 2025 13:26:10 -0500 Subject: [PATCH 0306/1184] feat: add bookmarks --- src/layouts/index.js | 13 +- src/layouts/side-nav-item.js | 244 +++++++++++++++++++++-------------- src/layouts/side-nav.js | 50 +++---- src/layouts/top-nav.js | 80 +++++++++++- 4 files changed, 262 insertions(+), 125 deletions(-) diff --git a/src/layouts/index.js b/src/layouts/index.js index 892e54e4c485..fa6e9812d5b6 100644 --- a/src/layouts/index.js +++ b/src/layouts/index.js @@ -135,14 +135,23 @@ export const Layout = (props) => { useEffect(() => { if (userSettingsAPI.isSuccess && !userSettingsAPI.isFetching && !userSettingsComplete) { - //if usersettingsAPI.data contains offboardingDefaults.user, delete that specific key. + //if userSettingsAPI.data contains offboardingDefaults.user, delete that specific key. if (userSettingsAPI.data.offboardingDefaults?.user) { delete userSettingsAPI.data.offboardingDefaults.user; } if (userSettingsAPI?.data?.currentTheme) { delete userSettingsAPI.data.currentTheme; } - settings.handleUpdate(userSettingsAPI.data); + // get current devtools settings + var showDevtools = settings.showDevtools; + // get current bookmarks + var bookmarks = settings.bookmarks; + + settings.handleUpdate({ + ...userSettingsAPI.data, + bookmarks, + showDevtools, + }); setUserSettingsComplete(true); } }, [ diff --git a/src/layouts/side-nav-item.js b/src/layouts/side-nav-item.js index 750dcbf3f653..05bc97972da2 100644 --- a/src/layouts/side-nav-item.js +++ b/src/layouts/side-nav-item.js @@ -4,7 +4,10 @@ import PropTypes from "prop-types"; import ChevronRightIcon from "@heroicons/react/24/outline/ChevronRightIcon"; import ChevronDownIcon from "@heroicons/react/24/outline/ChevronDownIcon"; import ArrowTopRightOnSquareIcon from "@heroicons/react/24/outline/ArrowTopRightOnSquareIcon"; -import { Box, ButtonBase, Collapse, SvgIcon } from "@mui/material"; +import { Box, ButtonBase, Collapse, SvgIcon, Stack } from "@mui/material"; +import BookmarkBorderIcon from "@mui/icons-material/BookmarkBorder"; +import BookmarkIcon from "@mui/icons-material/Bookmark"; +import { useSettings } from "../hooks/use-settings"; export const SideNavItem = (props) => { const { @@ -20,11 +23,26 @@ export const SideNavItem = (props) => { } = props; const [open, setOpen] = useState(openImmediately); + const [hovered, setHovered] = useState(false); + const { handleUpdate, bookmarks = [] } = useSettings(); + const isBookmarked = bookmarks.some((bookmark) => bookmark.path === path); const handleToggle = useCallback(() => { setOpen((prevOpen) => !prevOpen); }, []); + const handleBookmarkToggle = useCallback( + (event) => { + event.stopPropagation(); + handleUpdate({ + bookmarks: isBookmarked + ? bookmarks.filter((bookmark) => bookmark.path !== path) + : [...bookmarks, { label: title, path }], + }); + }, + [isBookmarked, bookmarks, handleUpdate, path, title] + ); + // Dynamic spacing and font sizing based on depth const indent = depth > 0 ? depth * 1.5 : 1; // adjust multiplication factor as needed const fontSize = depth === 0 ? 14 : 13; // top-level 14, nested 13 @@ -32,8 +50,109 @@ export const SideNavItem = (props) => { if (children) { return (
  • + setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + theme.typography.fontFamily, + fontSize: fontSize, + fontWeight: 500, + justifyContent: "flex-start", + px: `${indent * 6}px`, + py: "12px", + textAlign: "left", + whiteSpace: "nowrap", + width: "100%", + }} + > + + {icon} + + + {title} + + + {open ? : } + + + + + {children} + +
  • + ); + } + + // Leaf + const linkProps = path + ? external + ? { + component: "a", + href: path, + target: "_blank", + } + : { + component: NextLink, + href: path, + } + : {}; + + return ( +
  • + setHovered(true)} + onMouseLeave={() => setHovered(false)} + sx={{ + display: "flex", + alignItems: "center", + }} + > { whiteSpace: "nowrap", width: "100%", }} + {...linkProps} > { sx={{ color: depth === 0 ? "text.primary" : "text.secondary", flexGrow: 1, - fontSize: fontSize, mx: "12px", transition: "opacity 250ms ease-in-out", ...(active && { @@ -82,106 +201,35 @@ export const SideNavItem = (props) => { > {title} - - {open ? : } - + {external && ( + + + + )} - - {children} - -
  • - ); - } - - // Leaf - const linkProps = path - ? external - ? { - component: "a", - href: path, - target: "_blank", - } - : { - component: NextLink, - href: path, - } - : {}; - - return ( -
  • - theme.typography.fontFamily, - fontSize: fontSize, - fontWeight: 500, - justifyContent: "flex-start", - px: `${indent * 6}px`, - py: "12px", - textAlign: "left", - whiteSpace: "nowrap", - width: "100%", - }} - {...linkProps} - > - - {icon} - - - {title} - - {external && ( - - - - )} - + {isBookmarked ? : } + +
  • ); }; diff --git a/src/layouts/side-nav.js b/src/layouts/side-nav.js index b2967a01a548..ca6d32b13ed8 100644 --- a/src/layouts/side-nav.js +++ b/src/layouts/side-nav.js @@ -5,6 +5,7 @@ import { Box, Divider, Drawer, Stack, Typography } from "@mui/material"; import { Scrollbar } from "../components/scrollbar"; import { SideNavItem } from "./side-nav-item"; import { useSettings } from "../hooks/use-settings"; +import { ApiGetCall } from "../api/ApiCall.jsx"; const SIDE_NAV_WIDTH = 270; const SIDE_NAV_COLLAPSED_WIDTH = 73; // icon size + padding + border right @@ -106,6 +107,7 @@ export const SideNav = (props) => { const pathname = usePathname(); const [hovered, setHovered] = useState(false); const collapse = !(pinned || hovered); + const { data: profile } = ApiGetCall({ url: "/.auth/me", queryKey: "authmecipp" }); // Preprocess items to mark which should be open const processedItems = markOpenItems(items, pathname); @@ -212,28 +214,32 @@ export const SideNav = (props) => { pathname, })}
    - - - This application is sponsored by - - - sponsor window.open(randomimg.link)} - width={"100px"} - /> - + {profile?.clientPrincipal && ( + <> + + + This application is sponsored by + + + sponsor window.open(randomimg.link)} + width={"100px"} + /> + + + )}
    diff --git a/src/layouts/top-nav.js b/src/layouts/top-nav.js index b92b1ace3d31..73e66f841a26 100644 --- a/src/layouts/top-nav.js +++ b/src/layouts/top-nav.js @@ -1,10 +1,23 @@ -import { useCallback, useEffect } from "react"; +import { useCallback, useEffect, useState } from "react"; import NextLink from "next/link"; import PropTypes from "prop-types"; import Bars3Icon from "@heroicons/react/24/outline/Bars3Icon"; import MoonIcon from "@heroicons/react/24/outline/MoonIcon"; import SunIcon from "@heroicons/react/24/outline/SunIcon"; -import { Box, Divider, IconButton, Stack, SvgIcon, useMediaQuery } from "@mui/material"; +import BookmarkIcon from "@mui/icons-material/Bookmark"; +import { + Box, + Divider, + IconButton, + Stack, + SvgIcon, + useMediaQuery, + Popover, + List, + ListItem, + ListItemText, + Typography, +} from "@mui/material"; import { Logo } from "../components/logo"; import { useSettings } from "../hooks/use-settings"; import { paths } from "../paths"; @@ -12,7 +25,7 @@ import { AccountPopover } from "./account-popover"; import { CippTenantSelector } from "../components/CippComponents/CippTenantSelector"; import { NotificationsPopover } from "./notifications-popover"; import { useDialog } from "../hooks/use-dialog"; -import { MagnifyingGlassCircleIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline"; +import { MagnifyingGlassIcon } from "@heroicons/react/24/outline"; import { CippCentralSearch } from "../components/CippComponents/CippCentralSearch"; const TOP_NAV_HEIGHT = 64; @@ -28,6 +41,19 @@ export const TopNav = (props) => { }); }, [settings]); + const [anchorEl, setAnchorEl] = useState(null); + + const handleBookmarkClick = (event) => { + setAnchorEl(event.currentTarget); + }; + + const handleBookmarkClose = () => { + setAnchorEl(null); + }; + + const open = Boolean(anchorEl); + const id = open ? "bookmark-popover" : undefined; + useEffect(() => { const handleKeyDown = (event) => { if ((event.metaKey || event.ctrlKey) && event.key === "k") { @@ -111,8 +137,56 @@ export const TopNav = (props) => { + + + + + + + + {(settings.bookmarks || []).length === 0 ? ( + + No bookmarks added yet + } + /> + + ) : ( + settings.bookmarks.map((bookmark, idx) => ( + + {bookmark.label} + } + /> + + )) + )} + + + Date: Mon, 3 Mar 2025 14:34:12 -0500 Subject: [PATCH 0307/1184] add close nav --- src/layouts/top-nav.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/layouts/top-nav.js b/src/layouts/top-nav.js index 73e66f841a26..ea2e7d4d0a86 100644 --- a/src/layouts/top-nav.js +++ b/src/layouts/top-nav.js @@ -173,6 +173,7 @@ export const TopNav = (props) => { href={bookmark.path} key={idx} sx={{ color: "inherit" }} + onClick={() => handleBookmarkClose()} > Date: Mon, 3 Mar 2025 20:40:02 +0100 Subject: [PATCH 0308/1184] feat: add disable forwarding functionality in CippWizardOffboarding --- .../CippWizard/CippWizardOffboarding.jsx | 81 ++++++++++++------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/src/components/CippWizard/CippWizardOffboarding.jsx b/src/components/CippWizard/CippWizardOffboarding.jsx index bfc00908777d..64ac7cdc602f 100644 --- a/src/components/CippWizard/CippWizardOffboarding.jsx +++ b/src/components/CippWizard/CippWizardOffboarding.jsx @@ -13,6 +13,7 @@ export const CippWizardOffboarding = (props) => { const selectedUsers = useWatch({ control: formControl.control, name: "user" }); const [showAlert, setShowAlert] = useState(false); const userSettingsDefaults = useSettings().userSettingsDefaults; + const disableForwarding = useWatch({ control: formControl.control, name: "disableForwarding" }); useEffect(() => { if (selectedUsers.length >= 4) { @@ -29,6 +30,13 @@ export const CippWizardOffboarding = (props) => { } }, [userSettingsDefaults]); + useEffect(() => { + if (disableForwarding) { + formControl.setValue("forward", null); + formControl.setValue("keepCopy", false); + } + }, [disableForwarding, formControl]); + return ( @@ -210,36 +218,50 @@ export const CippWizardOffboarding = (props) => { Email Forwarding `${option.displayName} (${option.userPrincipalName})`, - valueField: "id", - url: "/api/ListGraphRequest", - dataKey: "Results", - data: { - Endpoint: "users", - manualPagination: true, - $select: "id,userPrincipalName,displayName", - $count: true, - $orderby: "displayName", - $top: 999, - }, - }} /> - + field={"disableForwarding"} + compareType="isNot" + compareValue={true} + > + `${option.displayName} (${option.userPrincipalName})`, + valueField: "id", + url: "/api/ListGraphRequest", + dataKey: "Results", + data: { + Endpoint: "users", + manualPagination: true, + $select: "id,userPrincipalName,displayName", + $count: true, + $orderby: "displayName", + $top: 999, + }, + }} + /> + + + { type="switch" formControl={formControl} /> - + From 0b6eebab879da517ae8e1d05df4b3e909689cc55 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 3 Mar 2025 20:21:40 -0500 Subject: [PATCH 0309/1184] fix: casing --- src/pages/tenant/standards/bpa-report/builder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tenant/standards/bpa-report/builder.js b/src/pages/tenant/standards/bpa-report/builder.js index b943e243ec21..e36427aaa479 100644 --- a/src/pages/tenant/standards/bpa-report/builder.js +++ b/src/pages/tenant/standards/bpa-report/builder.js @@ -352,7 +352,7 @@ const Page = () => { From 9a73a158165684163163756923a602a0f5a2ab01 Mon Sep 17 00:00:00 2001 From: Esco Date: Tue, 4 Mar 2025 14:50:10 +0100 Subject: [PATCH 0310/1184] feat: display manager in view user --- src/components/CippCards/CippUserInfoCard.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/CippCards/CippUserInfoCard.jsx b/src/components/CippCards/CippUserInfoCard.jsx index 49c0ec716ab1..f0de3777f71a 100644 --- a/src/components/CippCards/CippUserInfoCard.jsx +++ b/src/components/CippCards/CippUserInfoCard.jsx @@ -112,10 +112,14 @@ export const CippUserInfoCard = (props) => { value={isFetching ? : user?.jobTitle || "N/A"} /> : user?.department || "N/A"} /> + : user?.manager?.displayName || "N/A"} + /> Date: Tue, 4 Mar 2025 09:41:08 -0500 Subject: [PATCH 0311/1184] feat: add application roles to permission check --- .../CippSettings/CippPermissionResults.jsx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/components/CippSettings/CippPermissionResults.jsx b/src/components/CippSettings/CippPermissionResults.jsx index 57745d6d6760..2031b267d70d 100644 --- a/src/components/CippSettings/CippPermissionResults.jsx +++ b/src/components/CippSettings/CippPermissionResults.jsx @@ -231,6 +231,21 @@ export const CippPermissionResults = (props) => { /> )} + {results?.Results?.ApplicationTokenDetails?.Roles.length > 0 && ( + <> + { + return { + Role: role, + }; + })} + simpleColumns={["Role"]} + /> + + )} )} From 98d817d6ba3ad6455fb747876210de1b89b6ed5b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 09:43:52 -0500 Subject: [PATCH 0312/1184] fix: remove internal link routing from useEffect --- .../CippComponents/CippApiDialog.jsx | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 347fa1eb9476..3a49fbee62be 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -275,22 +275,32 @@ export const CippApiDialog = (props) => { .reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj); }; - // Handling link navigation + // Handling external link navigation useEffect(() => { if (api.link && createDialog.open) { const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { return getNestedValue(row, key) || `[${key}]`; }); - if (linkWithRowData.startsWith("/")) { - router.push(linkWithRowData, undefined, { shallow: true }); - } else { + if (!linkWithRowData.startsWith("/")) { window.open(linkWithRowData, api.target || "_blank"); + createDialog.handleClose(); } - createDialog.handleClose(); } }, [api.link, createDialog.open]); + // Handling internal link navigation + if (api.link && createDialog.open) { + const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { + return getNestedValue(row, key) || `[${key}]`; + }); + + if (linkWithRowData.startsWith("/")) { + router.push(linkWithRowData, undefined, { shallow: true }); + createDialog.handleClose(); + } + } + useEffect(() => { if (api.noConfirm) { formHook.handleSubmit(onSubmit)(); // Submits the form on mount From 4a319e214262953c26f3c3d3ddd12705238143b1 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 10:00:24 -0500 Subject: [PATCH 0313/1184] fix: tenant list links --- .../tenant/administration/tenants/index.js | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/src/pages/tenant/administration/tenants/index.js b/src/pages/tenant/administration/tenants/index.js index 1fba7f387944..ee07d9b30096 100644 --- a/src/pages/tenant/administration/tenants/index.js +++ b/src/pages/tenant/administration/tenants/index.js @@ -6,28 +6,6 @@ import { useEffect } from "react"; const Page = () => { //this page is special and requires us to craft the columns and DashboardLayout const pageTitle = "Tenants"; - const tenantData = ApiGetCall({ - url: "/api/listTenants", - queryKey: "ListTenants", - }); - - useEffect(() => { - if (tenantData.isSuccess) { - tenantData.data.forEach((tenant) => { - Object.assign(tenant, { - portal_m365: `https://admin.microsoft.com/Partner/BeginClientSession.aspx?CTID=${tenant.customerId}&CSDEST=o365admincenter`, - portal_exchange: `https://admin.exchange.microsoft.com/?landingpage=homepage&form=mac_sidebar&delegatedOrg=${tenant.defaultDomainName}`, - portal_entra: `https://entra.microsoft.com/${tenant.defaultDomainName}`, - portal_teams: `https://admin.teams.microsoft.com/?delegatedOrg=${tenant.defaultDomainName}`, - portal_azure: `https://portal.azure.com/${tenant.defaultDomainName}`, - portal_intune: `https://intune.microsoft.com/${tenant.defaultDomainName}`, - portal_security: `https://security.microsoft.com/?tid=${tenant.customerId}`, - portal_compliance: `https://purview.microsoft.com/?tid=${tenant.customerId}`, - portal_sharepoint: `https://admin.microsoft.com/Partner/beginclientsession.aspx?CTID=${tenant.customerId}&CSDEST=SharePoint`, - }); - }); - } - }, [tenantData.isSuccess]); const simpleColumns = [ "displayName", @@ -46,7 +24,12 @@ const Page = () => { title={pageTitle} tenantInTitle={false} simpleColumns={simpleColumns} - data={tenantData.data} + apiUrl="/api/ListTenants" + queryKey="TenantListPage" + apiData={{ + Mode: "TenantList", + tenantFilter: null, + }} /> ); }; From 21e555ab6d8ee7cdd814af1a29ac753a39e88ff3 Mon Sep 17 00:00:00 2001 From: Esco Date: Tue, 4 Mar 2025 12:30:20 +0100 Subject: [PATCH 0314/1184] feat: added set sponsor in edit user chore: make setSponsor a userAttributes fix --- src/components/CippFormPages/CippAddEditUser.jsx | 11 +++++++++++ src/pages/cipp/preferences.js | 1 + 2 files changed, 12 insertions(+) diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx index 5aeab622c02c..0a4d57feba1d 100644 --- a/src/components/CippFormPages/CippAddEditUser.jsx +++ b/src/components/CippFormPages/CippAddEditUser.jsx @@ -291,6 +291,17 @@ const CippAddEditUser = (props) => { multiple={false} /> + {userSettingsDefaults?.userAttributes?.some(attribute => attribute.value === "sponsor") && ( + + + + )} { { value: "otherMails", label: "otherMails" }, { value: "showInAddressList", label: "showInAddressList" }, { value: "state", label: "state" }, + { value: "sponsor", label: "sponsor" }, ]; const pageSizes = [ From a121a37e6d43f959686c9fda71a217b293bc4957 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 11:07:30 -0500 Subject: [PATCH 0315/1184] chore: cleanup user preferences --- src/pages/cipp/preferences.js | 37 ++++++++--------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/src/pages/cipp/preferences.js b/src/pages/cipp/preferences.js index 2653b577399d..fa8d47b65746 100644 --- a/src/pages/cipp/preferences.js +++ b/src/pages/cipp/preferences.js @@ -65,30 +65,15 @@ const Page = () => { - ), - }, { label: "Default new user usage location", value: ( { value: ( { ), }, { - label: "Menu Favourites", + label: "Added Attributes when creating a new user", value: ( ), }, @@ -293,10 +272,10 @@ const Page = () => { !['anonymous', 'authenticated'].includes(role)) + .filter((role) => !["anonymous", "authenticated"].includes(role)) .map((role) => ({ label: "", - value: getCippFormatting(role,"role"), + value: getCippFormatting(role, "role"), }))} showDivider={false} /> From 364349191f2148be5d22a2e6c963fa2bbc774389 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 12:06:57 -0500 Subject: [PATCH 0316/1184] chore: add license page back --- src/pages/_app.js | 33 +- src/pages/license.js | 714 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 740 insertions(+), 7 deletions(-) create mode 100644 src/pages/license.js diff --git a/src/pages/_app.js b/src/pages/_app.js index 00cfbe97275a..ba282a7fb405 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -25,11 +25,14 @@ import { BugReport as BugReportIcon, Feedback as FeedbackIcon, AutoStories, + Gavel, } from "@mui/icons-material"; import { SvgIcon } from "@mui/material"; import discordIcon from "../../public/discord-mark-blue.svg"; import React from "react"; import { usePathname } from "next/navigation"; +import { icon } from "leaflet"; +import { useRouter } from "next/router"; TimeAgo.addDefaultLocale(en); const ReactQueryDevtoolsProduction = React.lazy(() => @@ -45,39 +48,55 @@ const App = (props) => { const getLayout = Component.getLayout ?? ((page) => page); const preferredTheme = useMediaPredicate("(prefers-color-scheme: dark)") ? "dark" : "light"; const pathname = usePathname(); + const route = useRouter(); const speedDialActions = [ + { + id: "license", + icon: , + name: "License", + href: "/license", + onClick: () => route.push("/license"), + }, { id: "bug-report", icon: , name: "Report Bug", href: "https://github.com/KelvinTegelaar/CIPP/issues/new?template=bug.yml", - onClick: () => window.open("https://github.com/KelvinTegelaar/CIPP/issues/new?template=bug.yml", "_blank") + onClick: () => + window.open("https://github.com/KelvinTegelaar/CIPP/issues/new?template=bug.yml", "_blank"), }, { id: "feature-request", icon: , name: "Request Feature", href: "https://github.com/KelvinTegelaar/CIPP/issues/new?template=feature.yml", - onClick: () => window.open("https://github.com/KelvinTegelaar/CIPP/issues/new?template=feature.yml", "_blank") + onClick: () => + window.open( + "https://github.com/KelvinTegelaar/CIPP/issues/new?template=feature.yml", + "_blank" + ), }, { id: "discord", icon: ( - - + ), name: "Join the Discord!", href: "https://discord.gg/cyberdrain", - onClick: () => window.open("https://discord.gg/cyberdrain", "_blank") + onClick: () => window.open("https://discord.gg/cyberdrain", "_blank"), }, { id: "documentation", icon: , name: "Check the Documentation", href: `https://docs.cipp.app/user-documentation/${pathname}`, - onClick: () => window.open(`https://docs.cipp.app/user-documentation/${pathname}`, "_blank") - } + onClick: () => window.open(`https://docs.cipp.app/user-documentation/${pathname}`, "_blank"), + }, ]; return ( diff --git a/src/pages/license.js b/src/pages/license.js new file mode 100644 index 000000000000..442aede25829 --- /dev/null +++ b/src/pages/license.js @@ -0,0 +1,714 @@ +import { Container } from "@mui/system"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { Link } from "@mui/material"; + +const Page = () => { + const pageTitle = "License"; + + return ( + +

    GNU AFFERO GENERAL PUBLIC LICENSE

    +

    Version 3, 19 November 2007

    + +

    + Copyright © 2007 Free Software Foundation, Inc. < + https://fsf.org/> +
    + Everyone is permitted to copy and distribute verbatim copies of this license document, but + changing it is not allowed. +

    + +

    Preamble

    + +

    + The GNU Affero General Public License is a free, copyleft license for software and other + kinds of works, specifically designed to ensure cooperation with the community in the case + of network server software. +

    + +

    + The licenses for most software and other practical works are designed to take away your + freedom to share and change the works. By contrast, our General Public Licenses are intended + to guarantee your freedom to share and change all versions of a program--to make sure it + remains free software for all its users. +

    + +

    + When we speak of free software, we are referring to freedom, not price. Our General Public + Licenses are designed to make sure that you have the freedom to distribute copies of free + software (and charge for them if you wish), that you receive source code or can get it if + you want it, that you can change the software or use pieces of it in new free programs, and + that you know you can do these things. +

    + +

    + Developers that use our General Public Licenses protect your rights with two steps: (1) + assert copyright on the software, and (2) offer you this License which gives you legal + permission to copy, distribute and/or modify the software. +

    + +

    + A secondary benefit of defending all users' freedom is that improvements made in + alternate versions of the program, if they receive widespread use, become available for + other developers to incorporate. Many developers of free software are heartened and + encouraged by the resulting cooperation. However, in the case of software used on network + servers, this result may fail to come about. The GNU General Public License permits making a + modified version and letting the public access it on a server without ever releasing its + source code to the public. +

    + +

    + The GNU Affero General Public License is designed specifically to ensure that, in such + cases, the modified source code becomes available to the community. It requires the operator + of a network server to provide the source code of the modified version running there to the + users of that server. Therefore, public use of a modified version, on a publicly accessible + server, gives the public access to the source code of the modified version. +

    + +

    + An older license, called the Affero General Public License and published by Affero, was + designed to accomplish similar goals. This is a different license, not a version of the + Affero GPL, but Affero has released a new version of the Affero GPL which permits + relicensing under this license. +

    + +

    The precise terms and conditions for copying, distribution and modification follow.

    + +

    TERMS AND CONDITIONS

    + +

    0. Definitions.

    + +

    "This License" refers to version 3 of the GNU Affero General Public License.

    + +

    + "Copyright" also means copyright-like laws that apply to other kinds of works, + such as semiconductor masks. +

    + +

    + "The Program" refers to any copyrightable work licensed under this License. Each + licensee is addressed as "you". "Licensees" and "recipients" + may be individuals or organizations. +

    + +

    + To "modify" a work means to copy from or adapt all or part of the work in a + fashion requiring copyright permission, other than the making of an exact copy. The + resulting work is called a "modified version" of the earlier work or a work + "based on" the earlier work. +

    + +

    + A "covered work" means either the unmodified Program or a work based on the + Program. +

    + +

    + To "propagate" a work means to do anything with it that, without permission, would + make you directly or secondarily liable for infringement under applicable copyright law, + except executing it on a computer or modifying a private copy. Propagation includes copying, + distribution (with or without modification), making available to the public, and in some + countries other activities as well. +

    + +

    + To "convey" a work means any kind of propagation that enables other parties to + make or receive copies. Mere interaction with a user through a computer network, with no + transfer of a copy, is not conveying. +

    + +

    + An interactive user interface displays "Appropriate Legal Notices" to the extent + that it includes a convenient and prominently visible feature that (1) displays an + appropriate copyright notice, and (2) tells the user that there is no warranty for the work + (except to the extent that warranties are provided), that licensees may convey the work + under this License, and how to view a copy of this License. If the interface presents a list + of user commands or options, such as a menu, a prominent item in the list meets this + criterion. +

    + +

    1. Source Code.

    + +

    + The "source code" for a work means the preferred form of the work for making + modifications to it. "Object code" means any non-source form of a work. +

    + +

    + A "Standard Interface" means an interface that either is an official standard + defined by a recognized standards body, or, in the case of interfaces specified for a + particular programming language, one that is widely used among developers working in that + language. +

    + +

    + The "System Libraries" of an executable work include anything, other than the work + as a whole, that (a) is included in the normal form of packaging a Major Component, but + which is not part of that Major Component, and (b) serves only to enable use of the work + with that Major Component, or to implement a Standard Interface for which an implementation + is available to the public in source code form. A "Major Component", in this + context, means a major essential component (kernel, window system, and so on) of the + specific operating system (if any) on which the executable work runs, or a compiler used to + produce the work, or an object code interpreter used to run it. +

    + +

    + The "Corresponding Source" for a work in object code form means all the source + code needed to generate, install, and (for an executable work) run the object code and to + modify the work, including scripts to control those activities. However, it does not include + the work's System Libraries, or general-purpose tools or generally available free + programs which are used unmodified in performing those activities but which are not part of + the work. For example, Corresponding Source includes interface definition files associated + with source files for the work, and the source code for shared libraries and dynamically + linked subprograms that the work is specifically designed to require, such as by intimate + data communication or control flow between those subprograms and other parts of the work. +

    + +

    + The Corresponding Source need not include anything that users can regenerate automatically + from other parts of the Corresponding Source. +

    + +

    The Corresponding Source for a work in source code form is that same work.

    + +

    2. Basic Permissions.

    + +

    + All rights granted under this License are granted for the term of copyright on the Program, + and are irrevocable provided the stated conditions are met. This License explicitly affirms + your unlimited permission to run the unmodified Program. The output from running a covered + work is covered by this License only if the output, given its content, constitutes a covered + work. This License acknowledges your rights of fair use or other equivalent, as provided by + copyright law. +

    + +

    + You may make, run and propagate covered works that you do not convey, without conditions so + long as your license otherwise remains in force. You may convey covered works to others for + the sole purpose of having them make modifications exclusively for you, or provide you with + facilities for running those works, provided that you comply with the terms of this License + in conveying all material for which you do not control copyright. Those thus making or + running the covered works for you must do so exclusively on your behalf, under your + direction and control, on terms that prohibit them from making any copies of your + copyrighted material outside their relationship with you. +

    + +

    + Conveying under any other circumstances is permitted solely under the conditions stated + below. Sublicensing is not allowed; section 10 makes it unnecessary. +

    + +

    3. Protecting Users' Legal Rights From Anti-Circumvention Law.

    + +

    + No covered work shall be deemed part of an effective technological measure under any + applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted + on 20 December 1996, or similar laws prohibiting or restricting circumvention of such + measures. +

    + +

    + When you convey a covered work, you waive any legal power to forbid circumvention of + technological measures to the extent such circumvention is effected by exercising rights + under this License with respect to the covered work, and you disclaim any intention to limit + operation or modification of the work as a means of enforcing, against the work's + users, your or third parties' legal rights to forbid circumvention of technological + measures. +

    + +

    4. Conveying Verbatim Copies.

    + +

    + You may convey verbatim copies of the Program's source code as you receive it, in any + medium, provided that you conspicuously and appropriately publish on each copy an + appropriate copyright notice; keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the code; keep intact all + notices of the absence of any warranty; and give all recipients a copy of this License along + with the Program. +

    + +

    + You may charge any price or no price for each copy that you convey, and you may offer + support or warranty protection for a fee. +

    + +

    5. Conveying Modified Source Versions.

    + +

    + You may convey a work based on the Program, or the modifications to produce it from the + Program, in the form of source code under the terms of section 4, provided that you also + meet all of these conditions: +

    + +
      +
    • + a) The work must carry prominent notices stating that you modified it, and giving a + relevant date. +
    • + +
    • + b) The work must carry prominent notices stating that it is released under this License + and any conditions added under section 7. This requirement modifies the requirement in + section 4 to "keep intact all notices". +
    • + +
    • + c) You must license the entire work, as a whole, under this License to anyone who comes + into possession of a copy. This License will therefore apply, along with any applicable + section 7 additional terms, to the whole of the work, and all its parts, regardless of how + they are packaged. This License gives no permission to license the work in any other way, + but it does not invalidate such permission if you have separately received it. +
    • + +
    • + d) If the work has interactive user interfaces, each must display Appropriate Legal + Notices; however, if the Program has interactive interfaces that do not display + Appropriate Legal Notices, your work need not make them do so. +
    • +
    + +

    + A compilation of a covered work with other separate and independent works, which are not by + their nature extensions of the covered work, and which are not combined with it such as to + form a larger program, in or on a volume of a storage or distribution medium, is called an + "aggregate" if the compilation and its resulting copyright are not used to limit + the access or legal rights of the compilation's users beyond what the individual works + permit. Inclusion of a covered work in an aggregate does not cause this License to apply to + the other parts of the aggregate. +

    + +

    6. Conveying Non-Source Forms.

    + +

    + You may convey a covered work in object code form under the terms of sections 4 and 5, + provided that you also convey the machine-readable Corresponding Source under the terms of + this License, in one of these ways: +

    + +
      +
    • + a) Convey the object code in, or embodied in, a physical product (including a physical + distribution medium), accompanied by the Corresponding Source fixed on a durable physical + medium customarily used for software interchange. +
    • + +
    • + b) Convey the object code in, or embodied in, a physical product (including a physical + distribution medium), accompanied by a written offer, valid for at least three years and + valid for as long as you offer spare parts or customer support for that product model, to + give anyone who possesses the object code either (1) a copy of the Corresponding Source + for all the software in the product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no more than your reasonable + cost of physically performing this conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. +
    • + +
    • + c) Convey individual copies of the object code with a copy of the written offer to provide + the Corresponding Source. This alternative is allowed only occasionally and + noncommercially, and only if you received the object code with such an offer, in accord + with subsection 6b. +
    • + +
    • + d) Convey the object code by offering access from a designated place (gratis or for a + charge), and offer equivalent access to the Corresponding Source in the same way through + the same place at no further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to copy the object code is a + network server, the Corresponding Source may be on a different server (operated by you or + a third party) that supports equivalent copying facilities, provided you maintain clear + directions next to the object code saying where to find the Corresponding Source. + Regardless of what server hosts the Corresponding Source, you remain obligated to ensure + that it is available for as long as needed to satisfy these requirements. +
    • + +
    • + e) Convey the object code using peer-to-peer transmission, provided you inform other peers + where the object code and Corresponding Source of the work are being offered to the + general public at no charge under subsection 6d. +
    • +
    + +

    + A separable portion of the object code, whose source code is excluded from the Corresponding + Source as a System Library, need not be included in conveying the object code work. +

    + +

    + A "User Product" is either (1) a "consumer product", which means any + tangible personal property which is normally used for personal, family, or household + purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining + whether a product is a consumer product, doubtful cases shall be resolved in favor of + coverage. For a particular product received by a particular user, "normally used" + refers to a typical or common use of that class of product, regardless of the status of the + particular user or of the way in which the particular user actually uses, or expects or is + expected to use, the product. A product is a consumer product regardless of whether the + product has substantial commercial, industrial or non-consumer uses, unless such uses + represent the only significant mode of use of the product. +

    + +

    + "Installation Information" for a User Product means any methods, procedures, + authorization keys, or other information required to install and execute modified versions + of a covered work in that User Product from a modified version of its Corresponding Source. + The information must suffice to ensure that the continued functioning of the modified object + code is in no case prevented or interfered with solely because modification has been made. +

    + +

    + If you convey an object code work under this section in, or with, or specifically for use + in, a User Product, and the conveying occurs as part of a transaction in which the right of + possession and use of the User Product is transferred to the recipient in perpetuity or for + a fixed term (regardless of how the transaction is characterized), the Corresponding Source + conveyed under this section must be accompanied by the Installation Information. But this + requirement does not apply if neither you nor any third party retains the ability to install + modified object code on the User Product (for example, the work has been installed in ROM). +

    + +

    + The requirement to provide Installation Information does not include a requirement to + continue to provide support service, warranty, or updates for a work that has been modified + or installed by the recipient, or for the User Product in which it has been modified or + installed. Access to a network may be denied when the modification itself materially and + adversely affects the operation of the network or violates the rules and protocols for + communication across the network. +

    + +

    + Corresponding Source conveyed, and Installation Information provided, in accord with this + section must be in a format that is publicly documented (and with an implementation + available to the public in source code form), and must require no special password or key + for unpacking, reading or copying. +

    + +

    7. Additional Terms.

    + +

    + "Additional permissions" are terms that supplement the terms of this License by + making exceptions from one or more of its conditions. Additional permissions that are + applicable to the entire Program shall be treated as though they were included in this + License, to the extent that they are valid under applicable law. If additional permissions + apply only to part of the Program, that part may be used separately under those permissions, + but the entire Program remains governed by this License without regard to the additional + permissions. +

    + +

    + When you convey a copy of a covered work, you may at your option remove any additional + permissions from that copy, or from any part of it. (Additional permissions may be written + to require their own removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, for which you have or + can give appropriate copyright permission. +

    + +

    + Notwithstanding any other provision of this License, for material you add to a covered work, + you may (if authorized by the copyright holders of that material) supplement the terms of + this License with terms: +

    + +
      +
    • + a) Disclaiming warranty or limiting liability differently from the terms of sections 15 + and 16 of this License; or +
    • + +
    • + b) Requiring preservation of specified reasonable legal notices or author attributions in + that material or in the Appropriate Legal Notices displayed by works containing it; or +
    • + +
    • + c) Prohibiting misrepresentation of the origin of that material, or requiring that + modified versions of such material be marked in reasonable ways as different from the + original version; or +
    • + +
    • + d) Limiting the use for publicity purposes of names of licensors or authors of the + material; or +
    • + +
    • + e) Declining to grant rights under trademark law for use of some trade names, trademarks, + or service marks; or +
    • + +
    • + f) Requiring indemnification of licensors and authors of that material by anyone who + conveys the material (or modified versions of it) with contractual assumptions of + liability to the recipient, for any liability that these contractual assumptions directly + impose on those licensors and authors. +
    • +
    + +

    + All other non-permissive additional terms are considered "further restrictions" + within the meaning of section 10. If the Program as you received it, or any part of it, + contains a notice stating that it is governed by this License along with a term that is a + further restriction, you may remove that term. If a license document contains a further + restriction but permits relicensing or conveying under this License, you may add to a + covered work material governed by the terms of that license document, provided that the + further restriction does not survive such relicensing or conveying. +

    + +

    + If you add terms to a covered work in accord with this section, you must place, in the + relevant source files, a statement of the additional terms that apply to those files, or a + notice indicating where to find the applicable terms. +

    + +

    + Additional terms, permissive or non-permissive, may be stated in the form of a separately + written license, or stated as exceptions; the above requirements apply either way. +

    + +

    8. Termination.

    + +

    + You may not propagate or modify a covered work except as expressly provided under this + License. Any attempt otherwise to propagate or modify it is void, and will automatically + terminate your rights under this License (including any patent licenses granted under the + third paragraph of section 11). +

    + +

    + However, if you cease all violation of this License, then your license from a particular + copyright holder is reinstated (a) provisionally, unless and until the copyright holder + explicitly and finally terminates your license, and (b) permanently, if the copyright holder + fails to notify you of the violation by some reasonable means prior to 60 days after the + cessation. +

    + +

    + Moreover, your license from a particular copyright holder is reinstated permanently if the + copyright holder notifies you of the violation by some reasonable means, this is the first + time you have received notice of violation of this License (for any work) from that + copyright holder, and you cure the violation prior to 30 days after your receipt of the + notice. +

    + +

    + Termination of your rights under this section does not terminate the licenses of parties who + have received copies or rights from you under this License. If your rights have been + terminated and not permanently reinstated, you do not qualify to receive new licenses for + the same material under section 10. +

    + +

    9. Acceptance Not Required for Having Copies.

    + +

    + You are not required to accept this License in order to receive or run a copy of the + Program. Ancillary propagation of a covered work occurring solely as a consequence of using + peer-to-peer transmission to receive a copy likewise does not require acceptance. However, + nothing other than this License grants you permission to propagate or modify any covered + work. These actions infringe copyright if you do not accept this License. Therefore, by + modifying or propagating a covered work, you indicate your acceptance of this License to do + so. +

    + +

    10. Automatic Licensing of Downstream Recipients.

    + +

    + Each time you convey a covered work, the recipient automatically receives a license from the + original licensors, to run, modify and propagate that work, subject to this License. You are + not responsible for enforcing compliance by third parties with this License. +

    + +

    + An "entity transaction" is a transaction transferring control of an organization, + or substantially all assets of one, or subdividing an organization, or merging + organizations. If propagation of a covered work results from an entity transaction, each + party to that transaction who receives a copy of the work also receives whatever licenses to + the work the party's predecessor in interest had or could give under the previous + paragraph, plus a right to possession of the Corresponding Source of the work from the + predecessor in interest, if the predecessor has it or can get it with reasonable efforts. +

    + +

    + You may not impose any further restrictions on the exercise of the rights granted or + affirmed under this License. For example, you may not impose a license fee, royalty, or + other charge for exercise of rights granted under this License, and you may not initiate + litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent + claim is infringed by making, using, selling, offering for sale, or importing the Program or + any portion of it. +

    + +

    11. Patents.

    + +

    + A "contributor" is a copyright holder who authorizes use under this License of the + Program or a work on which the Program is based. The work thus licensed is called the + contributor's "contributor version". +

    + +

    + A contributor's "essential patent claims" are all patent claims owned or + controlled by the contributor, whether already acquired or hereafter acquired, that would be + infringed by some manner, permitted by this License, of making, using, or selling its + contributor version, but do not include claims that would be infringed only as a consequence + of further modification of the contributor version. For purposes of this definition, + "control" includes the right to grant patent sublicenses in a manner consistent + with the requirements of this License. +

    + +

    + Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under + the contributor's essential patent claims, to make, use, sell, offer for sale, import + and otherwise run, modify and propagate the contents of its contributor version. +

    + +

    + In the following three paragraphs, a "patent license" is any express agreement or + commitment, however denominated, not to enforce a patent (such as an express permission to + practice a patent or covenant not to sue for patent infringement). To "grant" such + a patent license to a party means to make such an agreement or commitment not to enforce a + patent against the party. +

    + +

    + If you convey a covered work, knowingly relying on a patent license, and the Corresponding + Source of the work is not available for anyone to copy, free of charge and under the terms + of this License, through a publicly available network server or other readily accessible + means, then you must either (1) cause the Corresponding Source to be so available, or (2) + arrange to deprive yourself of the benefit of the patent license for this particular work, + or (3) arrange, in a manner consistent with the requirements of this License, to extend the + patent license to downstream recipients. "Knowingly relying" means you have actual + knowledge that, but for the patent license, your conveying the covered work in a country, or + your recipient's use of the covered work in a country, would infringe one or more + identifiable patents in that country that you have reason to believe are valid. +

    + +

    + If, pursuant to or in connection with a single transaction or arrangement, you convey, or + propagate by procuring conveyance of, a covered work, and grant a patent license to some of + the parties receiving the covered work authorizing them to use, propagate, modify or convey + a specific copy of the covered work, then the patent license you grant is automatically + extended to all recipients of the covered work and works based on it. +

    + +

    + A patent license is "discriminatory" if it does not include within the scope of + its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or + more of the rights that are specifically granted under this License. You may not convey a + covered work if you are a party to an arrangement with a third party that is in the business + of distributing software, under which you make payment to the third party based on the + extent of your activity of conveying the work, and under which the third party grants, to + any of the parties who would receive the covered work from you, a discriminatory patent + license (a) in connection with copies of the covered work conveyed by you (or copies made + from those copies), or (b) primarily for and in connection with specific products or + compilations that contain the covered work, unless you entered into that arrangement, or + that patent license was granted, prior to 28 March 2007. +

    + +

    + Nothing in this License shall be construed as excluding or limiting any implied license or + other defenses to infringement that may otherwise be available to you under applicable + patent law. +

    + +

    12. No Surrender of Others' Freedom.

    + +

    + If conditions are imposed on you (whether by court order, agreement or otherwise) that + contradict the conditions of this License, they do not excuse you from the conditions of + this License. If you cannot convey a covered work so as to satisfy simultaneously your + obligations under this License and any other pertinent obligations, then as a consequence + you may not convey it at all. For example, if you agree to terms that obligate you to + collect a royalty for further conveying from those to whom you convey the Program, the only + way you could satisfy both those terms and this License would be to refrain entirely from + conveying the Program. +

    + +

    + 13. Remote Network Interaction; Use with the GNU General Public License. +

    + +

    + Notwithstanding any other provision of this License, if you modify the Program, your + modified version must prominently offer all users interacting with it remotely through a + computer network (if your version supports such interaction) an opportunity to receive the + Corresponding Source of your version by providing access to the Corresponding Source from a + network server at no charge, through some standard or customary means of facilitating + copying of software. This Corresponding Source shall include the Corresponding Source for + any work covered by version 3 of the GNU General Public License that is incorporated + pursuant to the following paragraph. +

    + +

    + Notwithstanding any other provision of this License, you have permission to link or combine + any covered work with a work licensed under version 3 of the GNU General Public License into + a single combined work, and to convey the resulting work. The terms of this License will + continue to apply to the part which is the covered work, but the work with which it is + combined will remain governed by version 3 of the GNU General Public License. +

    + +

    14. Revised Versions of this License.

    + +

    + The Free Software Foundation may publish revised and/or new versions of the GNU Affero + General Public License from time to time. Such new versions will be similar in spirit to the + present version, but may differ in detail to address new problems or concerns. +

    + +

    + Each version is given a distinguishing version number. If the Program specifies that a + certain numbered version of the GNU Affero General Public License "or any later + version" applies to it, you have the option of following the terms and conditions + either of that numbered version or of any later version published by the Free Software + Foundation. If the Program does not specify a version number of the GNU Affero General + Public License, you may choose any version ever published by the Free Software Foundation. +

    + +

    + If the Program specifies that a proxy can decide which future versions of the GNU Affero + General Public License can be used, that proxy's public statement of acceptance of a + version permanently authorizes you to choose that version for the Program. +

    + +

    + Later license versions may give you additional or different permissions. However, no + additional obligations are imposed on any author or copyright holder as a result of your + choosing to follow a later version. +

    + +

    15. Disclaimer of Warranty.

    + +

    + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN + OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM + "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. + SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR + OR CORRECTION. +

    + +

    16. Limitation of Liability.

    + +

    + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT + HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO + LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES + OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +

    + +

    17. Interpretation of Sections 15 and 16.

    + +

    + If the disclaimer of warranty and limitation of liability provided above cannot be given + local legal effect according to their terms, reviewing courts shall apply local law that + most closely approximates an absolute waiver of all civil liability in connection with the + Program, unless a warranty or assumption of liability accompanies a copy of the Program in + return for a fee. +

    +
    + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; From bd034d567a5db745ed3a22b7a1c5afd042bd0cca Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 12:24:41 -0500 Subject: [PATCH 0317/1184] Update _app.js --- src/pages/_app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/_app.js b/src/pages/_app.js index ba282a7fb405..0b1831c98f73 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -31,7 +31,6 @@ import { SvgIcon } from "@mui/material"; import discordIcon from "../../public/discord-mark-blue.svg"; import React from "react"; import { usePathname } from "next/navigation"; -import { icon } from "leaflet"; import { useRouter } from "next/router"; TimeAgo.addDefaultLocale(en); From 172bdb41b6e940c61f4bd67c37c6c23f649fa59c Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 4 Mar 2025 18:37:58 +0100 Subject: [PATCH 0318/1184] fixes edit user bugs --- src/components/CippFormPages/CippAddEditUser.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx index 0a4d57feba1d..5087d40456fa 100644 --- a/src/components/CippFormPages/CippAddEditUser.jsx +++ b/src/components/CippFormPages/CippAddEditUser.jsx @@ -64,7 +64,7 @@ const CippAddEditUser = (props) => { InputProps={{ endAdornment: @, }} - name="mailNickname" + name="username" formControl={formControl} />
    @@ -291,7 +291,7 @@ const CippAddEditUser = (props) => { multiple={false} />
    - {userSettingsDefaults?.userAttributes?.some(attribute => attribute.value === "sponsor") && ( + {userSettingsDefaults?.userAttributes?.some((attribute) => attribute.value === "sponsor") && ( Date: Tue, 4 Mar 2025 12:39:28 -0500 Subject: [PATCH 0319/1184] fix: bookmarking with long titles --- src/layouts/side-nav-item.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/layouts/side-nav-item.js b/src/layouts/side-nav-item.js index 05bc97972da2..a3f5e73b79eb 100644 --- a/src/layouts/side-nav-item.js +++ b/src/layouts/side-nav-item.js @@ -150,6 +150,9 @@ export const SideNavItem = (props) => { sx={{ display: "flex", alignItems: "center", + width: "100%", + px: `${indent * 6}px`, + py: "12px", }} > { fontSize: fontSize, fontWeight: 500, justifyContent: "flex-start", - px: `${indent * 6}px`, - py: "12px", textAlign: "left", whiteSpace: "nowrap", - width: "100%", + width: "calc(100% - 20px)", // Adjust the width to leave space for the bookmark icon }} {...linkProps} > @@ -191,6 +192,12 @@ export const SideNavItem = (props) => { flexGrow: 1, mx: "12px", transition: "opacity 250ms ease-in-out", + whiteSpace: "nowrap", + ...(hovered && { + maxWidth: "calc(100% - 45px)", // Adjust the width to leave space for the bookmark icon + overflow: "hidden", + textOverflow: "ellipsis", + }), ...(active && { color: "primary.main", }), @@ -223,7 +230,7 @@ export const SideNavItem = (props) => { fontSize: 16, transition: "opacity 250ms ease-in-out", cursor: "pointer", - mx: 1, + mr: 1, display: hovered ? "block" : "none", }} > From dab5f7f48c55527af1a3f0dca6f26a07d49d7bd5 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 4 Mar 2025 18:51:33 +0100 Subject: [PATCH 0320/1184] up version --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index 542517aee22f..712c1fd057e1 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.2.3" + "version": "7.3.0" } From 6a349d74ca4d01a0cb9b0ba67d50a3d020eb732f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 12:51:53 -0500 Subject: [PATCH 0321/1184] update confirm text --- src/components/CippSettings/CippCacheSettings.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippSettings/CippCacheSettings.jsx b/src/components/CippSettings/CippCacheSettings.jsx index a427ddd3acfe..ad736adf604f 100644 --- a/src/components/CippSettings/CippCacheSettings.jsx +++ b/src/components/CippSettings/CippCacheSettings.jsx @@ -68,7 +68,7 @@ const CippCacheSettings = () => { api={{ url: "/api/ListTenants", confirmText: - "This will clear the cache used by CIPP. This will slow down some aspects of the application, and should only be used when instructed to do so by support.", + "This will clear the cache used by CIPP. This will slow down some aspects of the application, and should only be used when instructed to do so by support. This will delete any cache tables including pending audit logs that have not yet been processed. Are you sure you want to continue?", type: "POST", data: { ClearCache: true }, replacementBehaviour: "removeNulls", From 091055d55c1f129769ee1ea95d39bc00bebd8c74 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 15:18:25 -0500 Subject: [PATCH 0322/1184] fix: move y padding back to buttonbase --- src/layouts/side-nav-item.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/side-nav-item.js b/src/layouts/side-nav-item.js index a3f5e73b79eb..74ad14f6969d 100644 --- a/src/layouts/side-nav-item.js +++ b/src/layouts/side-nav-item.js @@ -152,7 +152,6 @@ export const SideNavItem = (props) => { alignItems: "center", width: "100%", px: `${indent * 6}px`, - py: "12px", }} > { textAlign: "left", whiteSpace: "nowrap", width: "calc(100% - 20px)", // Adjust the width to leave space for the bookmark icon + py: "12px", }} {...linkProps} > From 7e0ef973787577abbf872246e45f2af8676c92e4 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 15:36:31 -0500 Subject: [PATCH 0323/1184] fix: don't show table skeletons after first page --- src/components/CippTable/CippDataTable.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 3a040dd4c1eb..307106098392 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -178,7 +178,11 @@ export const CippDataTable = (props) => { data: memoizedData, state: { columnVisibility, - showSkeletons: getRequestData.isFetching ? getRequestData.isFetching : isFetching, + showSkeletons: getRequestData.isFetchingNextPage + ? false + : getRequestData.isFetching + ? getRequestData.isFetching + : isFetching, }, renderEmptyRowsFallback: ({ table }) => getRequestData.data?.pages?.[0].Metadata?.QueueMessage ? ( From 570305ecf5cc45f1d496b6c2bf53c4af81286339 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 16:25:50 -0500 Subject: [PATCH 0324/1184] fix: prevent refetch for alltenants --- src/components/CippComponents/CippTenantSelector.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippTenantSelector.jsx b/src/components/CippComponents/CippTenantSelector.jsx index 9db78af9b6b4..67b66eded8ca 100644 --- a/src/components/CippComponents/CippTenantSelector.jsx +++ b/src/components/CippComponents/CippTenantSelector.jsx @@ -63,7 +63,7 @@ export const CippTenantSelector = (props) => { }, [currentTenant?.value]); useEffect(() => { - if (tenant && currentTenant?.value) { + if (tenant && currentTenant?.value && currentTenant?.value !== 'AllTenants') { tenantDetails.refetch(); } }, [tenant, offcanvasVisible]); From c02e8a7504bca665e010cbbf67938902f32fe5a9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 16:41:28 -0500 Subject: [PATCH 0325/1184] tweak spacing --- src/layouts/top-nav.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/layouts/top-nav.js b/src/layouts/top-nav.js index ea2e7d4d0a86..0cebc1ac3acd 100644 --- a/src/layouts/top-nav.js +++ b/src/layouts/top-nav.js @@ -124,7 +124,7 @@ export const TopNav = (props) => { )}
    - + {!mdDown && ( @@ -187,7 +187,6 @@ export const TopNav = (props) => { - Date: Tue, 4 Mar 2025 19:01:59 -0500 Subject: [PATCH 0326/1184] Update version.json --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index 712c1fd057e1..c0ab80971e47 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.3.0" + "version": "7.3.1" } From 7b8af70d08c878a22f8bcb8b25401c2dcdcd83d9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 4 Mar 2025 21:46:29 -0500 Subject: [PATCH 0327/1184] fix: update layout adjust logic to check for when no tenant is selected --- src/layouts/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/index.js b/src/layouts/index.js index fa6e9812d5b6..c2f49483f74a 100644 --- a/src/layouts/index.js +++ b/src/layouts/index.js @@ -231,7 +231,7 @@ export const Layout = (props) => { }} > - {currentTenant === "AllTenants" && !allTenantsSupport ? ( + {(currentTenant === "AllTenants" || !currentTenant) && !allTenantsSupport ? ( From 61044eb0da4aa321d7b1deb5c39f5d11963c7c45 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 5 Mar 2025 10:50:44 -0500 Subject: [PATCH 0328/1184] feat: add filter modes to global search --- src/components/CippTable/CippDataTable.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 307106098392..0d7f77f0bcb3 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -287,6 +287,7 @@ export const CippDataTable = (props) => { ); }, + enableGlobalFilterModes: true, }); useEffect(() => { From 2f8aae04de2c5c4e1cc7cfc9e663756ecb763bf5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 5 Mar 2025 12:25:47 -0500 Subject: [PATCH 0329/1184] fix tenantFilter casing --- src/components/CippComponents/CippAutocomplete.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 94b71886d005..4fb8c073086c 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -99,7 +99,7 @@ export const CippAutoComplete = (props) => { setGetRequestInfo({ url: api.url, data: { - ...(!api.excludeTenantFilter ? { TenantFilter: currentTenant } : null), + ...(!api.excludeTenantFilter ? { tenantFilter: currentTenant } : null), ...api.data, }, waiting: true, From c8cc1775f1887a3dc97602ce4d47dd98d4613f42 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 5 Mar 2025 12:25:57 -0500 Subject: [PATCH 0330/1184] fix: sherweb link --- src/pages/tenant/reports/list-csp-licenses/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tenant/reports/list-csp-licenses/index.jsx b/src/pages/tenant/reports/list-csp-licenses/index.jsx index 9e6264df4c74..b046b6ea275c 100644 --- a/src/pages/tenant/reports/list-csp-licenses/index.jsx +++ b/src/pages/tenant/reports/list-csp-licenses/index.jsx @@ -93,7 +93,7 @@ const Page = () => { simpleColumns={simpleColumns} cardButton={ <> - From f60b06ac99c5409ee0adf10c92e2fcccb2f47783 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 5 Mar 2025 17:13:01 -0500 Subject: [PATCH 0331/1184] fix: backups and scheduler --- src/pages/cipp/scheduler/index.js | 11 ++-- src/pages/tenant/backup/backup-wizard/add.jsx | 13 +--- .../tenant/backup/backup-wizard/restore.jsx | 63 +++++++++++-------- 3 files changed, 44 insertions(+), 43 deletions(-) diff --git a/src/pages/cipp/scheduler/index.js b/src/pages/cipp/scheduler/index.js index 97abcc20b602..81cf3213ed02 100644 --- a/src/pages/cipp/scheduler/index.js +++ b/src/pages/cipp/scheduler/index.js @@ -82,19 +82,20 @@ const Page = () => { tenantInTitle={false} title="Scheduled Tasks" apiUrl={ - showHiddenJobs ? "/api/ListScheduledItems?ListHidden=True" : "/api/ListScheduledItems" + showHiddenJobs ? "/api/ListScheduledItems?ShowHidden=true" : "/api/ListScheduledItems" } queryKey={showHiddenJobs ? `ListScheduledItems-hidden` : `ListScheduledItems`} simpleColumns={[ - "Name", - "Tenant", + "ExecutedTime", "TaskState", + "Tenant", + "Name", + "ScheduledTime", "Command", "Parameters", "PostExecution", "Recurrence", - "ExecutedTime", - "ScheduledTime", + "Results", ]} actions={actions} offCanvas={offCanvas} diff --git a/src/pages/tenant/backup/backup-wizard/add.jsx b/src/pages/tenant/backup/backup-wizard/add.jsx index 90d58127a11a..86ec994ca6c4 100644 --- a/src/pages/tenant/backup/backup-wizard/add.jsx +++ b/src/pages/tenant/backup/backup-wizard/add.jsx @@ -1,12 +1,12 @@ import React from "react"; import { Grid, Typography } from "@mui/material"; import { useForm } from "react-hook-form"; +import { omit } from "lodash"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { useSettings } from "/src/hooks/use-settings"; import { CippFormTenantSelector } from "../../../../components/CippComponents/CippFormTenantSelector"; -import { te } from "date-fns/locale"; const CreateBackup = () => { const userSettingsDefaults = useSettings(); @@ -26,7 +26,6 @@ const CreateBackup = () => { antiphishing: true, CippWebhookAlerts: true, CippScriptedAlerts: true, - CippStandards: true, }, }); @@ -45,7 +44,7 @@ const CreateBackup = () => { TenantFilter: tenantFilter, Name: `CIPP Backup - ${tenantFilter}`, Command: { value: `New-CIPPBackup` }, - Parameters: { backupType: "Scheduled", ScheduledBackupValues: { ...values } }, + Parameters: { backupType: "Scheduled", ScheduledBackupValues: { ...omit(values, ['tenantFilter']) } }, ScheduledTime: unixTime, Recurrence: { value: "1d" }, }; @@ -168,14 +167,6 @@ const CreateBackup = () => { formControl={formControl} /> - - - {/* Add an empty Grid item to fill the second column */} diff --git a/src/pages/tenant/backup/backup-wizard/restore.jsx b/src/pages/tenant/backup/backup-wizard/restore.jsx index 2a332140b139..d7d8c1f16c37 100644 --- a/src/pages/tenant/backup/backup-wizard/restore.jsx +++ b/src/pages/tenant/backup/backup-wizard/restore.jsx @@ -1,11 +1,12 @@ import React, { useState, useEffect } from "react"; -import { Alert, Grid, Typography } from "@mui/material"; +import { Alert, Divider, Grid, Typography } from "@mui/material"; import { useForm, useWatch } from "react-hook-form"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { useSettings } from "/src/hooks/use-settings"; import { CippFormCondition } from "/src/components/CippComponents/CippFormCondition"; +import { Chip, Stack } from "@mui/material"; const RestoreBackupForm = () => { const userSettingsDefaults = useSettings(); @@ -85,7 +86,6 @@ const RestoreBackupForm = () => { antiphishing: values.antiphishing, CippWebhookAlerts: values.CippWebhookAlerts, CippScriptedAlerts: values.CippScriptedAlerts, - CippStandards: values.CippStandards, overwrite: values.overwrite, }, }, @@ -95,6 +95,7 @@ const RestoreBackupForm = () => { Email: values.email, PSA: values.psa, }, + DisallowDuplicateName: true, }; return shippedValues; }} @@ -104,7 +105,7 @@ const RestoreBackupForm = () => { Use this form to restore a backup for a tenant. Please select the tenant, backup, and restore options. - + {/* Backup Selector */} { name="backup" multiple={false} api={{ - tenantFilter: tenantFilter, url: "/api/ExecListBackup", queryKey: `BackupList-${tenantFilter}`, - labelField: (option) => `${option.RowKey}`, - valueField: "RowKey", + labelField: (option) => { + const match = option.BackupName.match(/.*_(\d{4}-\d{2}-\d{2})-(\d{2})(\d{2})/); + return match ? `${match[1]} @ ${match[2]}:${match[3]}` : option.BackupName; + }, + valueField: "BackupName", data: { Type: "Scheduled", - TenantFilter: tenantFilter, + NameOnly: true, }, }} formControl={formControl} + required={true} + validators={{ + validate: (value) => !!value || "Please select a backup", + }} /> @@ -210,12 +217,6 @@ const RestoreBackupForm = () => { name="CippScriptedAlerts" formControl={formControl} /> - {/* Overwrite Existing Entries */} @@ -262,38 +263,46 @@ const RestoreBackupForm = () => { - + + + {/* Review and Confirm */} - Review and Confirm - + Review and Confirm + Please review the selected options before submitting. Selected Tenant: - {tenantFilter} + + {tenantFilter} + Selected Backup: - + {formControl.watch("backup")?.label || "None selected"} Overwrite Existing Configuration: - {formControl.watch("overwrite") ? "Yes" : "No"} + + {formControl.watch("overwrite") ? "Yes" : "No"} + + Send Results To: - - {formControl.watch("webhook") && "Webhook "} - {formControl.watch("email") && "E-mail "} - {formControl.watch("psa") && "PSA "} - {!formControl.watch("webhook") && - !formControl.watch("email") && - !formControl.watch("psa") && - "None"} + + + {formControl.watch("webhook") && } + {formControl.watch("email") && } + {formControl.watch("psa") && } + {!formControl.watch("webhook") && + !formControl.watch("email") && + !formControl.watch("psa") && } + From 63f4356966d5df79221cd6a6be9321fb6d26ea7b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 5 Mar 2025 17:25:54 -0500 Subject: [PATCH 0332/1184] display post execution cleanly --- src/utils/get-cipp-formatting.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 25b1cd58c7ec..48e57d972f1a 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -219,6 +219,24 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { } } + if (cellName === "PostExecution") { + const values = data ? data?.split(",").map((item) => item.trim()) : []; + if (values.length > 0) { + return isText + ? data + : values.map((value, index) => ( + + )); + } + } + if (cellName === "ClientId" || cellName === "role") { return isText ? data : ; } From b4758f537db29e18dea28b69acadf515e568cc6b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 5 Mar 2025 18:05:19 -0500 Subject: [PATCH 0333/1184] add city --- src/pages/cipp/preferences.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/cipp/preferences.js b/src/pages/cipp/preferences.js index 81fd6d446bbf..40ccac234133 100644 --- a/src/pages/cipp/preferences.js +++ b/src/pages/cipp/preferences.js @@ -35,6 +35,7 @@ const Page = () => { { value: "otherMails", label: "otherMails" }, { value: "showInAddressList", label: "showInAddressList" }, { value: "state", label: "state" }, + { value: "city", label: "city" }, { value: "sponsor", label: "sponsor" }, ]; From d43edb2392306e29727612df4245eeedf840c695 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 6 Mar 2025 11:43:39 +0100 Subject: [PATCH 0334/1184] fix: hide duplicate sponsor field --- src/components/CippFormPages/CippAddEditUser.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx index 5087d40456fa..9cee72637872 100644 --- a/src/components/CippFormPages/CippAddEditUser.jsx +++ b/src/components/CippFormPages/CippAddEditUser.jsx @@ -269,7 +269,7 @@ const CippAddEditUser = (props) => { formControl={formControl} /> - {userSettingsDefaults?.userAttributes?.map((attribute, idx) => ( + {userSettingsDefaults?.userAttributes?.filter((attribute) => attribute.value !== "sponsor").map((attribute, idx) => ( Date: Thu, 6 Mar 2025 21:48:53 +0100 Subject: [PATCH 0335/1184] feat: add CippExchangeActions component with mailbox management actions --- .../CippComponents/CippExchangeActions.jsx | 240 ++++++++++++++++++ .../email/administration/mailboxes/index.js | 235 +---------------- .../administration/users/user/exchange.jsx | 3 + 3 files changed, 247 insertions(+), 231 deletions(-) create mode 100644 src/components/CippComponents/CippExchangeActions.jsx diff --git a/src/components/CippComponents/CippExchangeActions.jsx b/src/components/CippComponents/CippExchangeActions.jsx new file mode 100644 index 000000000000..329fb3492eed --- /dev/null +++ b/src/components/CippComponents/CippExchangeActions.jsx @@ -0,0 +1,240 @@ +import { + EyeIcon, + TrashIcon, + MagnifyingGlassIcon, + PlayCircleIcon, +} from "@heroicons/react/24/outline"; +import { + Archive, + MailOutline, + Person, + Room, + Visibility, + VisibilityOff, + PhonelinkLock, + Key, + PostAdd, + Add, +} from "@mui/icons-material"; +import { useSettings } from "/src/hooks/use-settings.js"; + +export const CippExchangeActions = () => { + // const tenant = useSettings().currentTenant; + return [ + { + label: "Edit permissions", + link: "/identity/administration/users/user/exchange?userId=[ExternalDirectoryObjectId]", + color: "info", + icon: , + }, + { + label: "Research Compromised Account", + link: "/identity/administration/users/user/bec?userId=[ExternalDirectoryObjectId]", + color: "info", + icon: , + }, + { + label: "Send MFA Push", + type: "POST", + url: "/api/ExecSendPush", + data: { + UserEmail: "UPN", + }, + confirmText: "Are you sure you want to send an MFA request?", + icon: , + }, + { + label: "Convert to User Mailbox", + type: "POST", + url: "/api/ExecConvertMailbox", + icon: , + data: { + ID: "UPN", + MailboxType: "!Regular", + }, + confirmText: "Are you sure you want to convert this mailbox to a user mailbox?", + condition: (row) => row.recipientTypeDetails !== "UserMailbox", + }, + { + label: "Convert to Shared Mailbox", + type: "POST", + icon: , + url: "/api/ExecConvertMailbox", + data: { + ID: "UPN", + MailboxType: "!Shared", + }, + confirmText: "Are you sure you want to convert this mailbox to a shared mailbox?", + condition: (row) => row.recipientTypeDetails !== "SharedMailbox", + }, + { + label: "Convert to Room Mailbox", + type: "POST", + url: "/api/ExecConvertMailbox", + icon: , + data: { + ID: "UPN", + MailboxType: "!Room", + }, + confirmText: "Are you sure you want to convert this mailbox to a room mailbox?", + condition: (row) => row.recipientTypeDetails !== "RoomMailbox", + }, + { + //tested + label: "Enable Online Archive", + type: "POST", + icon: , + url: "/api/ExecEnableArchive", + data: { ID: "Id", username: "UPN" }, + confirmText: "Are you sure you want to enable the online archive for this user?", + multiPost: false, + condition: (row) => row.ArchiveGuid === "00000000-0000-0000-0000-000000000000", + }, + { + label: "Enable Auto-Expanding Archive", + type: "POST", + icon: , + url: "/api/ExecEnableAutoExpandingArchive", + data: { ID: "Id", username: "UPN" }, + confirmText: + "Are you sure you want to enable auto-expanding archive for this user? The archive must already be enabled.", + multiPost: false, + condition: (row) => row.ArchiveGuid !== "00000000-0000-0000-0000-000000000000", + }, + { + label: "Hide from Global Address List", + type: "POST", + url: "/api/ExecHideFromGAL", + icon: , + data: { + ID: "UPN", + HidefromGAL: true, + }, + confirmText: + "Are you sure you want to hide this mailbox from the global address list? This will not work if the user is AD Synced.", + condition: (row) => row.HiddenFromAddressListsEnabled === false, + }, + { + label: "Unhide from Global Address List", + type: "POST", + url: "/api/ExecHideFromGAL", + icon: , + data: { + ID: "UPN", + HidefromGAL: false, + }, + confirmText: + "Are you sure you want to unhide this mailbox from the global address list? This will not work if the user is AD Synced.", + condition: (row) => row.HiddenFromAddressListsEnabled === true, + }, + { + label: "Start Managed Folder Assistant", + type: "POST", + url: "/api/ExecStartManagedFolderAssistant", + icon: , + data: { + ID: "ExchangeGuid", + UserPrincipalName: "UPN", + }, + confirmText: "Are you sure you want to start the managed folder assistant for this user?", + }, + { + label: "Delete Mailbox", + type: "POST", + icon: , + url: "/api/RemoveUser", + data: { ID: "UPN" }, + confirmText: "Are you sure you want to delete this mailbox?", + multiPost: false, + }, + { + label: "Copy Sent Items to Shared Mailbox", + type: "POST", + url: "/api/ExecCopyForSent", + data: { ID: "UPN" }, + confirmText: "Are you sure you want to enable Copy Sent Items to Shared Mailbox?", + icon: , + condition: (row) => + row.MessageCopyForSentAsEnabled === false && row.recipientTypeDetails === "SharedMailbox", + }, + { + label: "Disable Copy Sent Items to Shared Mailbox", + type: "POST", + url: "/api/ExecCopyForSent", + data: { ID: "UPN", MessageCopyForSentAsEnabled: false }, + confirmText: "Are you sure you want to disable Copy Sent Items to Shared Mailbox?", + icon: , + condition: (row) => + row.MessageCopyForSentAsEnabled === true && row.recipientTypeDetails === "SharedMailbox", + }, + { + label: "Set mailbox locale", + type: "POST", + url: "/api/ExecSetMailboxLocale", + data: { user: "UPN", ProhibitSendQuota: true }, + confirmText: "Enter a locale, e.g. en-US", + icon: , + fields: [ + { + label: "Locale", + name: "locale", + type: "textField", + placeholder: "e.g. en-US", + }, + ], + }, + { + label: "Set Send Quota", + type: "POST", + url: "/api/ExecSetMailboxQuota", + data: { user: "UPN", ProhibitSendQuota: true }, + confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", + icon: , + fields: [ + { + label: "Quota", + name: "quota", + type: "textField", + placeholder: "e.g. 1000MB, 10GB,1TB", + }, + ], + }, + { + label: "Set Send and Receive Quota", + type: "POST", + url: "/api/ExecSetMailboxQuota", + data: { + user: "UPN", + ProhibitSendReceiveQuota: true, + }, + confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", + icon: , + fields: [ + { + label: "Quota", + name: "quota", + type: "textField", + placeholder: "e.g. 1000MB, 10GB,1TB", + }, + ], + }, + { + label: "Set Quota Warning Level", + type: "POST", + url: "/api/ExecSetMailboxQuota", + data: { user: "UPN", IssueWarningQuota: true }, + confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", + icon: , + fields: [ + { + label: "Quota", + name: "quota", + type: "textField", + placeholder: "e.g. 1000MB, 10GB,1TB", + }, + ], + }, + ]; +}; + +export default CippExchangeActions; diff --git a/src/pages/email/administration/mailboxes/index.js b/src/pages/email/administration/mailboxes/index.js index c4014ca25d38..da5479b87fb4 100644 --- a/src/pages/email/administration/mailboxes/index.js +++ b/src/pages/email/administration/mailboxes/index.js @@ -2,243 +2,16 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import Link from "next/link"; import { Button } from "@mui/material"; -import { - Archive, - MailOutline, - Person, - Room, - Visibility, - VisibilityOff, - PhonelinkLock, - Key, - PostAdd, - Add, -} from "@mui/icons-material"; -import { TrashIcon, MagnifyingGlassIcon, PlayCircleIcon } from "@heroicons/react/24/outline"; +import { Add } from "@mui/icons-material"; +import CippExchangeActions from "../../../../components/CippComponents/CippExchangeActions"; const Page = () => { const pageTitle = "Mailboxes"; - // Define actions for mailboxes - const actions = [ - { - label: "Edit permissions", - link: "/identity/administration/users/user/exchange?userId=[ExternalDirectoryObjectId]", - color: "info", - icon: , - }, - { - label: "Research Compromised Account", - link: "/identity/administration/users/user/bec?userId=[ExternalDirectoryObjectId]", - color: "info", - icon: , - }, - { - label: "Send MFA Push", - type: "POST", - url: "/api/ExecSendPush", - data: { - UserEmail: "UPN", - }, - confirmText: "Are you sure you want to send an MFA request?", - icon: , - }, - { - label: "Convert to User Mailbox", - type: "POST", - url: "/api/ExecConvertMailbox", - icon: , - data: { - ID: "UPN", - MailboxType: "!Regular", - }, - confirmText: "Are you sure you want to convert this mailbox to a user mailbox?", - condition: (row) => row.recipientTypeDetails !== "UserMailbox", - }, - { - label: "Convert to Shared Mailbox", - type: "POST", - icon: , - url: "/api/ExecConvertMailbox", - data: { - ID: "UPN", - MailboxType: "!Shared", - }, - confirmText: "Are you sure you want to convert this mailbox to a shared mailbox?", - condition: (row) => row.recipientTypeDetails !== "SharedMailbox", - }, - { - label: "Convert to Room Mailbox", - type: "POST", - url: "/api/ExecConvertMailbox", - icon: , - data: { - ID: "UPN", - MailboxType: "!Room", - }, - confirmText: "Are you sure you want to convert this mailbox to a room mailbox?", - condition: (row) => row.recipientTypeDetails !== "RoomMailbox", - }, - { - //tested - label: "Enable Online Archive", - type: "POST", - icon: , - url: "/api/ExecEnableArchive", - data: { ID: "Id", username: "UPN" }, - confirmText: "Are you sure you want to enable the online archive for this user?", - multiPost: false, - condition: (row) => row.ArchiveGuid === "00000000-0000-0000-0000-000000000000", - }, - { - label: "Enable Auto-Expanding Archive", - type: "POST", - icon: , - url: "/api/ExecEnableAutoExpandingArchive", - data: { ID: "Id", username: "UPN" }, - confirmText: - "Are you sure you want to enable auto-expanding archive for this user? The archive must already be enabled.", - multiPost: false, - condition: (row) => row.ArchiveGuid !== "00000000-0000-0000-0000-000000000000", - }, - { - label: "Hide from Global Address List", - type: "POST", - url: "/api/ExecHideFromGAL", - icon: , - data: { - ID: "UPN", - HidefromGAL: true, - }, - confirmText: - "Are you sure you want to hide this mailbox from the global address list? This will not work if the user is AD Synced.", - condition: (row) => row.HiddenFromAddressListsEnabled === false, - }, - { - label: "Unhide from Global Address List", - type: "POST", - url: "/api/ExecHideFromGAL", - icon: , - data: { - ID: "UPN", - }, - confirmText: - "Are you sure you want to unhide this mailbox from the global address list? This will not work if the user is AD Synced.", - condition: (row) => row.HiddenFromAddressListsEnabled === true, - }, - { - label: "Start Managed Folder Assistant", - type: "POST", - url: "/api/ExecStartManagedFolderAssistant", - icon: , - data: { - ID: "ExchangeGuid", - UserPrincipalName: "UPN", - }, - confirmText: "Are you sure you want to start the managed folder assistant for this user?", - }, - { - label: "Delete Mailbox", - type: "POST", - icon: , - url: "/api/RemoveUser", - data: { ID: "UPN" }, - confirmText: "Are you sure you want to delete this mailbox?", - multiPost: false, - }, - { - label: "Copy Sent Items to Shared Mailbox", - type: "POST", - url: "/api/ExecCopyForSent", - data: { ID: "UPN" }, - confirmText: "Are you sure you want to enable Copy Sent Items to Shared Mailbox?", - icon: , - condition: (row) => - row.MessageCopyForSentAsEnabled === false && row.recipientTypeDetails === "SharedMailbox", - }, - { - label: "Disable Copy Sent Items to Shared Mailbox", - type: "POST", - url: "/api/ExecCopyForSent", - data: { ID: "UPN", MessageCopyForSentAsEnabled: false }, - confirmText: "Are you sure you want to disable Copy Sent Items to Shared Mailbox?", - icon: , - condition: (row) => - row.MessageCopyForSentAsEnabled === true && row.recipientTypeDetails === "SharedMailbox", - }, - { - label: "Set mailbox locale", - type: "POST", - url: "/api/ExecSetMailboxLocale", - data: { user: "UPN", ProhibitSendQuota: true }, - confirmText: "Enter a locale, e.g. en-US", - icon: , - fields: [ - { - label: "Locale", - name: "locale", - type: "textField", - placeholder: "e.g. en-US", - }, - ], - }, - { - label: "Set Send Quota", - type: "POST", - url: "/api/ExecSetMailboxQuota", - data: { user: "UPN", ProhibitSendQuota: true }, - confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", - icon: , - fields: [ - { - label: "Quota", - name: "quota", - type: "textField", - placeholder: "e.g. 1000MB, 10GB,1TB", - }, - ], - }, - { - label: "Set Send and Receive Quota", - type: "POST", - url: "/api/ExecSetMailboxQuota", - data: { - user: "UPN", - ProhibitSendReceiveQuota: true, - }, - confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", - icon: , - fields: [ - { - label: "Quota", - name: "quota", - type: "textField", - placeholder: "e.g. 1000MB, 10GB,1TB", - }, - ], - }, - { - label: "Set Quota Warning Level", - type: "POST", - url: "/api/ExecSetMailboxQuota", - data: { user: "UPN", IssueWarningQuota: true }, - confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", - icon: , - fields: [ - { - label: "Quota", - name: "quota", - type: "textField", - placeholder: "e.g. 1000MB, 10GB,1TB", - }, - ], - }, - ]; - // Define off-canvas details const offCanvas = { extendedInfoFields: ["displayName", "UPN", "AdditionalEmailAddresses", "recipientTypeDetails"], - actions: actions, + actions: CippExchangeActions(), }; const filterList = [ @@ -278,7 +51,7 @@ const Page = () => { { const userSettingsDefaults = useSettings(); @@ -261,6 +262,8 @@ const Page = () => { tabOptions={tabOptions} title={title} subtitle={subtitle} + actions={CippExchangeActions()} + actionsData={userRequest.data?.[0]?.MailboxActionsData} isFetching={graphUserRequest.isLoading} > From ca2c0cd2c9998b789c564638c023b3d6bcc20a98 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 6 Mar 2025 17:30:07 -0500 Subject: [PATCH 0336/1184] feat: bulk requests on users page --- .../administration/users/user/index.jsx | 198 ++++++++---------- 1 file changed, 93 insertions(+), 105 deletions(-) diff --git a/src/pages/identity/administration/users/user/index.jsx b/src/pages/identity/administration/users/user/index.jsx index 0d8628fdd9d5..0e6aa451885e 100644 --- a/src/pages/identity/administration/users/user/index.jsx +++ b/src/pages/identity/administration/users/user/index.jsx @@ -1,7 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { useSettings } from "/src/hooks/use-settings"; import { useRouter } from "next/router"; -import { ApiGetCall } from "/src/api/ApiCall"; +import { ApiGetCall, ApiPostCall } from "/src/api/ApiCall"; import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import CalendarIcon from "@heroicons/react/24/outline/CalendarIcon"; import { AdminPanelSettings, Check, Group, Mail, Fingerprint, Launch } from "@mui/icons-material"; @@ -85,33 +85,44 @@ const Page = () => { waiting: waiting, }); - const userMemberOf = ApiGetCall({ - url: "/api/ListGraphRequest", - data: { - Endpoint: `/users/${userId}/memberOf`, - tenantFilter: userSettingsDefaults.currentTenant, - $top: 99, - }, - queryKey: `UserMemberOf-${userId}`, + const userBulkRequest = ApiPostCall({ + urlfromdata: true, }); - const MFARequest = ApiGetCall({ - url: "/api/ListGraphRequest", - data: { - Endpoint: `/users/${userId}/authentication/methods`, - tenantFilter: userSettingsDefaults.currentTenant, - noPagination: true, - $top: 99, - }, - queryKey: `MFA-${userId}`, - waiting: waiting, - }); + useEffect(() => { + if (userId && userSettingsDefaults.currentTenant && !userBulkRequest.isSuccess) { + userBulkRequest.mutate({ + url: "/api/ListGraphBulkRequest", + data: { + Requests: [ + { + id: "userMemberOf", + url: `/users/${userId}/memberOf`, + method: "GET", + }, + { + id: "mfaDevices", + url: `/users/${userId}/authentication/methods?$top=99`, + method: "GET", + }, + { + id: "signInLogs", + url: `/auditLogs/signIns?$filter=(userId eq '${userId}')&$top=1`, + method: "GET", + }, + ], + tenantFilter: userSettingsDefaults.currentTenant, + noPaginateIds: ["signInLogs"], + }, + }); + } + }, [userId, userSettingsDefaults.currentTenant, userBulkRequest.isSuccess]); - const signInLogs = ApiGetCall({ - url: `/api/ListUserSigninLogs?UserId=${userId}&tenantFilter=${userSettingsDefaults.currentTenant}&top=1`, - queryKey: `ListSignIns-${userId}`, - waiting: waiting, - }); + const bulkData = userBulkRequest?.data?.data ?? []; + const signInLogs = bulkData?.find((item) => item.id === "signInLogs")?.body?.value || []; + const userMemberOf = bulkData?.find((item) => item.id === "userMemberOf")?.body?.value || []; + const mfaDevices = bulkData?.find((item) => item.id === "mfaDevices")?.body?.value || []; + console.log(bulkData); // Set the title and subtitle for the layout const title = userRequest.isSuccess ? <>{userRequest.data?.[0]?.displayName} : "Loading..."; @@ -138,15 +149,15 @@ const Page = () => { icon: , text: ( + color="muted" + style={{ paddingLeft: 0 }} + size="small" + href={`https://entra.microsoft.com/${userSettingsDefaults.currentTenant}/#view/Microsoft_AAD_UsersAndTenants/UserProfileMenuBlade/~/overview/userId/${userId}`} + target="_blank" + rel="noopener noreferrer" + > + View in Entra + ), }, ] @@ -159,8 +170,8 @@ const Page = () => { let conditionalAccessPoliciesItems = []; let mfaDevicesItems = []; - if (signInLogs.isSuccess && signInLogs.data && signInLogs.data.length > 0) { - const signInData = signInLogs.data[0]; + if (signInLogs.length > 0) { + const signInData = signInLogs[0]; signInLogItem = { id: 1, @@ -330,12 +341,12 @@ const Page = () => { }, ]; } - } else if (signInLogs.isError) { + } else if (userBulkRequest.isError) { signInLogItem = { id: 1, cardLabelBox: "!", text: "Error loading sign-in logs. Do you have a P1 license?", - subtext: signInLogs.error.message, + subtext: userBulkRequest.error.message, statusColor: "error.main", statusText: "Error", propertyItems: [], @@ -347,13 +358,13 @@ const Page = () => { id: 1, cardLabelBox: "!", text: "Error loading conditional access policies. Do you have a P1 license?", - subtext: signInLogs.error.message, + subtext: userBulkRequest.error.message, statusColor: "error.main", statusText: "Error", propertyItems: [], }, ]; - } else if (signInLogs.isSuccess && (!signInLogs.data || signInLogs.data.length === 0)) { + } else if (signInLogs.length === 0) { signInLogItem = { id: 1, cardLabelBox: "-", @@ -380,16 +391,14 @@ const Page = () => { } // Prepare MFA devices items - if (MFARequest.isSuccess && MFARequest.data) { - const mfaResults = MFARequest.data.Results || []; - + if (mfaDevices.length > 0) { // Exclude password authentication method - const mfaDevices = mfaResults.filter( + const mfaDevicesFiltered = mfaDevices.filter( (method) => method["@odata.type"] !== "#microsoft.graph.passwordAuthenticationMethod" ); - if (mfaDevices.length > 0) { - mfaDevicesItems = mfaDevices.map((device, index) => ({ + if (mfaDevicesFiltered.length > 0) { + mfaDevicesItems = mfaDevicesFiltered.map((device, index) => ({ id: index, cardLabelBox: { cardLabelBoxHeader: , @@ -433,20 +442,20 @@ const Page = () => { }, ]; } - } else if (MFARequest.isError) { + } else if (userBulkRequest.isError) { // Error fetching MFA devices mfaDevicesItems = [ { id: 1, cardLabelBox: "!", text: "Error loading MFA devices", - subtext: MFARequest.error.message, + subtext: userBulkRequest.error.message, statusColor: "error.main", statusText: "Error", propertyItems: [], }, ]; - } else if (MFARequest.isSuccess && (!MFARequest.data || !MFARequest.data.Results)) { + } else if (mfaDevices.length === 0) { // No MFA devices data available mfaDevicesItems = [ { @@ -461,54 +470,33 @@ const Page = () => { ]; } - const groupMembershipItems = userMemberOf.isSuccess - ? [ - { - id: 1, - cardLabelBox: { - cardLabelBoxHeader: , - }, - text: "Groups", - subtext: "List of groups the user is a member of", - table: { - title: "Group Memberships", - hideTitle: true, - actions: [ - { - icon: , - label: "Edit Group", - link: "/identity/administration/groups/edit?groupId=[id]", - }, - ], - data: userMemberOf?.data?.Results.filter( - (item) => item?.["@odata.type"] === "#microsoft.graph.group" - ), - simpleColumns: ["displayName", "groupTypes", "securityEnabled", "mailEnabled"], - }, - }, - ] - : []; + const groupMembershipItems = userMemberOf + .filter((item) => item["@odata.type"] === "#microsoft.graph.group") + .map((group, index) => ({ + id: index, + cardLabelBox: { + cardLabelBoxHeader: , + }, + text: group.displayName, + subtext: "Group", + propertyItems: [ + { label: "Group Types", value: group.groupTypes.join(", ") || "N/A" }, + { label: "Security Enabled", value: group.securityEnabled ? "Yes" : "No" }, + { label: "Mail Enabled", value: group.mailEnabled ? "Yes" : "No" }, + ], + })); - const roleMembershipItems = userMemberOf.isSuccess - ? [ - { - id: 1, - cardLabelBox: { - cardLabelBoxHeader: , - }, - text: "Admin Roles", - subtext: "List of roles the user is a member of", - table: { - title: "Admin Roles", - hideTitle: true, - data: userMemberOf?.data?.Results.filter( - (item) => item?.["@odata.type"] === "#microsoft.graph.directoryRole" - ), - simpleColumns: ["displayName", "description"], - }, - }, - ] - : []; + const roleMembershipItems = userMemberOf + .filter((item) => item["@odata.type"] === "#microsoft.graph.directoryRole") + .map((role, index) => ({ + id: index, + cardLabelBox: { + cardLabelBoxHeader: , + }, + text: role.displayName, + subtext: "Admin Role", + propertyItems: [{ label: "Description", value: role.description || "N/A" }], + })); return ( { Latest Logon Applied Conditional Access Policies 0 ? true : false} /> Multi-Factor Authentication Devices 0 ? true : false} /> Memberships 0 ? true : false} - /> - 0 ? true : false} /> + 0 ? true : false} + /> From a15a452ad683035a5e40d64f359501b411df5231 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 6 Mar 2025 18:10:26 -0500 Subject: [PATCH 0337/1184] fix: pretty responses on user page --- .../administration/users/user/index.jsx | 134 +++++++++++++----- 1 file changed, 95 insertions(+), 39 deletions(-) diff --git a/src/pages/identity/administration/users/user/index.jsx b/src/pages/identity/administration/users/user/index.jsx index 0e6aa451885e..b36347b4a1f3 100644 --- a/src/pages/identity/administration/users/user/index.jsx +++ b/src/pages/identity/administration/users/user/index.jsx @@ -24,6 +24,7 @@ const CippMap = dynamic(() => import("/src/components/CippComponents/CippMap"), import { Button, Dialog, DialogTitle, DialogContent, IconButton } from "@mui/material"; import { Close } from "@mui/icons-material"; import { CippPropertyList } from "../../../../../components/CippComponents/CippPropertyList"; +import { CippCodeBlock } from "../../../../../components/CippComponents/CippCodeBlock"; const SignInLogsDialog = ({ open, onClose, userId, tenantFilter }) => { return ( @@ -119,10 +120,13 @@ const Page = () => { }, [userId, userSettingsDefaults.currentTenant, userBulkRequest.isSuccess]); const bulkData = userBulkRequest?.data?.data ?? []; - const signInLogs = bulkData?.find((item) => item.id === "signInLogs")?.body?.value || []; - const userMemberOf = bulkData?.find((item) => item.id === "userMemberOf")?.body?.value || []; - const mfaDevices = bulkData?.find((item) => item.id === "mfaDevices")?.body?.value || []; - console.log(bulkData); + const signInLogsData = bulkData?.find((item) => item.id === "signInLogs"); + const userMemberOfData = bulkData?.find((item) => item.id === "userMemberOf"); + const mfaDevicesData = bulkData?.find((item) => item.id === "mfaDevices"); + + const signInLogs = signInLogsData?.body?.value || []; + const userMemberOf = userMemberOfData?.body?.value || []; + const mfaDevices = mfaDevicesData?.body?.value || []; // Set the title and subtitle for the layout const title = userRequest.isSuccess ? <>{userRequest.data?.[0]?.displayName} : "Loading..."; @@ -341,12 +345,12 @@ const Page = () => { }, ]; } - } else if (userBulkRequest.isError) { + } else if (signInLogsData?.status !== 200) { signInLogItem = { id: 1, cardLabelBox: "!", text: "Error loading sign-in logs. Do you have a P1 license?", - subtext: userBulkRequest.error.message, + subtext: signInLogsData?.error?.message || "Unknown error", statusColor: "error.main", statusText: "Error", propertyItems: [], @@ -358,7 +362,7 @@ const Page = () => { id: 1, cardLabelBox: "!", text: "Error loading conditional access policies. Do you have a P1 license?", - subtext: userBulkRequest.error.message, + subtext: signInLogsData?.error?.message || "Unknown error", statusColor: "error.main", statusText: "Error", propertyItems: [], @@ -373,7 +377,21 @@ const Page = () => { "There are no sign-in logs for this user, or you do not have a P1 license to detect this data.", statusColor: "warning.main", statusText: "No Data", - propertyItems: [], + propertyItems: [ + { + label: "Error", + value: signInLogsData?.error?.message || "Unknown error", + }, + { + label: "Inner Error", + value: ( + + ), + }, + ], }; conditionalAccessPoliciesItems = [ @@ -442,17 +460,34 @@ const Page = () => { }, ]; } - } else if (userBulkRequest.isError) { + } else if (mfaDevicesData?.status !== 200) { // Error fetching MFA devices mfaDevicesItems = [ { id: 1, cardLabelBox: "!", text: "Error loading MFA devices", - subtext: userBulkRequest.error.message, + subtext: `Status code: ${mfaDevicesData?.status}`, statusColor: "error.main", statusText: "Error", - propertyItems: [], + propertyItems: [ + { + label: "Error", + value: mfaDevicesData?.body?.error?.message || "Unknown Error", + }, + { + label: "Inner Error", + value: ( + + ), + }, + ], }, ]; } else if (mfaDevices.length === 0) { @@ -471,32 +506,53 @@ const Page = () => { } const groupMembershipItems = userMemberOf - .filter((item) => item["@odata.type"] === "#microsoft.graph.group") - .map((group, index) => ({ - id: index, - cardLabelBox: { - cardLabelBoxHeader: , - }, - text: group.displayName, - subtext: "Group", - propertyItems: [ - { label: "Group Types", value: group.groupTypes.join(", ") || "N/A" }, - { label: "Security Enabled", value: group.securityEnabled ? "Yes" : "No" }, - { label: "Mail Enabled", value: group.mailEnabled ? "Yes" : "No" }, - ], - })); + ? [ + { + id: 1, + cardLabelBox: { + cardLabelBoxHeader: , + }, + text: "Groups", + subtext: "List of groups the user is a member of", + table: { + title: "Group Memberships", + hideTitle: true, + actions: [ + { + icon: , + label: "Edit Group", + link: "/identity/administration/groups/edit?groupId=[id]", + }, + ], + data: userMemberOf?.filter( + (item) => item?.["@odata.type"] === "#microsoft.graph.group" + ), + simpleColumns: ["displayName", "groupTypes", "securityEnabled", "mailEnabled"], + }, + }, + ] + : []; const roleMembershipItems = userMemberOf - .filter((item) => item["@odata.type"] === "#microsoft.graph.directoryRole") - .map((role, index) => ({ - id: index, - cardLabelBox: { - cardLabelBoxHeader: , - }, - text: role.displayName, - subtext: "Admin Role", - propertyItems: [{ label: "Description", value: role.description || "N/A" }], - })); + ? [ + { + id: 1, + cardLabelBox: { + cardLabelBoxHeader: , + }, + text: "Admin Roles", + subtext: "List of roles the user is a member of", + table: { + title: "Admin Roles", + hideTitle: true, + data: userMemberOf?.filter( + (item) => item?.["@odata.type"] === "#microsoft.graph.directoryRole" + ), + simpleColumns: ["displayName", "description"], + }, + }, + ] + : []; return ( { Memberships 0 ? true : false} + items={groupMembershipItems} + isCollapsible={groupMembershipItems.length > 0 ? true : false} /> 0 ? true : false} + items={roleMembershipItems} + isCollapsible={roleMembershipItems.length > 0 ? true : false} /> From c77f47aeecd51949c1848c356fd770b130bfbfd5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 6 Mar 2025 18:33:59 -0500 Subject: [PATCH 0338/1184] Update version.json --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index c0ab80971e47..ba547756572f 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.3.1" + "version": "7.3.2" } From ab5a1ec9ea45ed0c69a36f6dde34c99684949f56 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 6 Mar 2025 18:41:00 -0500 Subject: [PATCH 0339/1184] Update config.js --- src/layouts/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/config.js b/src/layouts/config.js index e7093b9f1883..812b5639f999 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -463,7 +463,7 @@ export const nativeMenuItems = [ ), items: [ { title: "Application Settings", path: "/cipp/settings", roles: ["admin", "superadmin"] }, - { title: "Logbook", path: "/cipp/logs", roles: ["admin", "superadmin"] }, + { title: "Logbook", path: "/cipp/logs", roles: ["editor", "admin", "superadmin"] }, { title: "SAM Setup Wizard", path: "/onboarding", roles: ["admin", "superadmin"] }, { title: "Integrations", path: "/cipp/integrations", roles: ["admin", "superadmin"] }, { From 33575ed69ce26347d812097e0ba567d7cc0e3b46 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 7 Mar 2025 15:02:16 +0100 Subject: [PATCH 0340/1184] excluded tennats alerts --- .../CippComponents/CippFormCondition.jsx | 1 - .../alert-configuration/alert.jsx | 70 ++++++++++++++----- 2 files changed, 54 insertions(+), 17 deletions(-) diff --git a/src/components/CippComponents/CippFormCondition.jsx b/src/components/CippComponents/CippFormCondition.jsx index 8cf9a1040728..6ab7345833a9 100644 --- a/src/components/CippComponents/CippFormCondition.jsx +++ b/src/components/CippComponents/CippFormCondition.jsx @@ -12,7 +12,6 @@ export const CippFormCondition = (props) => { formControl, disabled = false, } = props; - if ( field === undefined || compareValue === undefined || diff --git a/src/pages/tenant/administration/alert-configuration/alert.jsx b/src/pages/tenant/administration/alert-configuration/alert.jsx index 510c9c598b27..ff2ec105024b 100644 --- a/src/pages/tenant/administration/alert-configuration/alert.jsx +++ b/src/pages/tenant/administration/alert-configuration/alert.jsx @@ -12,6 +12,7 @@ import { SvgIcon, IconButton, Skeleton, + Divider, } from "@mui/material"; import { ArrowLeftIcon } from "@mui/x-date-pickers"; import { useRouter } from "next/router"; @@ -218,6 +219,7 @@ const AlertWizard = () => { const postObject = { RowKey: router.query.clone ? undefined : router.query.id ? router.query.id : undefined, tenantFilter: values.tenantFilter?.value, + excludedTenants: values.excludedTenants, Name: `${values.tenantFilter.value}: ${values.command.label}`, Command: { value: `Get-CIPPAlert${values.command.value.name}` }, Parameters: getInputParams(), @@ -297,14 +299,32 @@ const AlertWizard = () => { - - Select the tenants you want to include in this Alert. - - + + + + + + + + + + @@ -469,14 +489,32 @@ const AlertWizard = () => { - - Select the tenants you want to include in this Alert. - - + + + + + + + + + + From 6d17bb10a5e0c11aeb2fec34f2e7c8f43cb4b934 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 7 Mar 2025 15:05:57 +0100 Subject: [PATCH 0341/1184] add to list --- .../tenant/administration/alert-configuration/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pages/tenant/administration/alert-configuration/index.js b/src/pages/tenant/administration/alert-configuration/index.js index 41f76c7dac2e..e665b31b5228 100644 --- a/src/pages/tenant/administration/alert-configuration/index.js +++ b/src/pages/tenant/administration/alert-configuration/index.js @@ -52,7 +52,14 @@ const Page = () => { } actions={actions} - simpleColumns={["Tenants", "EventType", "Conditions", "RepeatsEvery", "Actions"]} + simpleColumns={[ + "Tenants", + "EventType", + "Conditions", + "RepeatsEvery", + "Actions", + "excludedTenants", + ]} queryKey="ListAlertsQueue" /> ); From 3bc9b04423009acc25c74d0a5d02ef453caa8ffc Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 7 Mar 2025 15:13:38 +0100 Subject: [PATCH 0342/1184] add amount of rows selected --- src/components/CippTable/CIPPTableToptoolbar.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/components/CippTable/CIPPTableToptoolbar.js b/src/components/CippTable/CIPPTableToptoolbar.js index 7a135e9335d5..862f902ea386 100644 --- a/src/components/CippTable/CIPPTableToptoolbar.js +++ b/src/components/CippTable/CIPPTableToptoolbar.js @@ -429,6 +429,14 @@ export const CIPPTableToptoolbar = ({ + { + //add a little icon with how many rows are selected + (table.getIsAllRowsSelected() || table.getIsSomeRowsSelected()) && ( + + {table.getSelectedRowModel().rows.length} rows selected + + ) + } Date: Sat, 8 Mar 2025 14:44:42 -0500 Subject: [PATCH 0343/1184] add sku details to sherweb license add add sortOptions param to CippAutocomplete add html parsing to cipp-formatting --- .../CippComponents/CippAutocomplete.jsx | 4 ++ .../administration/add-subscription/index.jsx | 71 +++++++++++++++++-- src/utils/get-cipp-formatting.js | 15 ++++ 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 4fb8c073086c..c2fd56295bc8 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -69,6 +69,7 @@ export const CippAutoComplete = (props) => { isFetching = false, sx, removeOptions = [], + sortOptions = false, ...other } = props; @@ -178,6 +179,9 @@ export const CippAutoComplete = (props) => { if (removeOptions && removeOptions.length) { finalOptions = finalOptions.filter((o) => !removeOptions.includes(o.value)); } + if (sortOptions) { + finalOptions.sort((a, b) => a.label?.localeCompare(b.label)); + } return finalOptions; }, [api, usedOptions, options, removeOptions]); diff --git a/src/pages/tenant/administration/add-subscription/index.jsx b/src/pages/tenant/administration/add-subscription/index.jsx index 5d0d64a6dbbc..43e3e07b61ff 100644 --- a/src/pages/tenant/administration/add-subscription/index.jsx +++ b/src/pages/tenant/administration/add-subscription/index.jsx @@ -1,11 +1,15 @@ import React from "react"; -import { Box, Divider, Grid } from "@mui/material"; +import { Box, Typography } from "@mui/material"; import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; -import { useForm } from "react-hook-form"; +import { useForm, useWatch } from "react-hook-form"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { useSettings } from "/src/hooks/use-settings"; -import { darken, lighten, styled } from "@mui/system"; +import { Grid, darken, lighten, styled } from "@mui/system"; +import { CippPropertyList } from "/src/components/CippComponents/CippPropertyList"; +import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard"; +import { getCippFormatting } from "../../../../utils/get-cipp-formatting"; +import { getCippTranslation } from "../../../../utils/get-cipp-translation"; const Page = () => { const userSettingsDefaults = useSettings(); @@ -19,6 +23,12 @@ const Page = () => { iagree: false, }, }); + + const selectedSku = useWatch({ + control: formControl.control, + name: "sku", + }); + const GroupHeader = styled("div")(({ theme }) => ({ position: "sticky", top: "-8px", @@ -46,7 +56,7 @@ const Page = () => { {/* Conditional Access Policy Selector */} - + { url: "/api/ListCSPsku", labelField: (option) => `${option?.name[0]?.value} (${option?.sku})`, valueField: "sku", + + addedField: { + billingCycle: "billingCycle", + commitmentTerm: "commitmentTerm", + description: "description", + }, }} multiple={false} formControl={formControl} + required={true} + validators={{ + validate: (option) => { + return option?.value ? true : "This field is required."; + }, + }} + sortOptions={true} /> - + - + {selectedSku?.value && ( + + {console.log(selectedSku)} + + + )} + { @@ -432,6 +433,20 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { ); } + // handle htmlDescription + if (cellName === "htmlDescription") { + return isText ? ( + data + ) : ( + + ); + } + const durationArray = ["autoExtendDuration"]; if (durationArray.includes(cellName)) { isoDuration.setLocales( From 4a7f1f0e7886b4a2b0d26e1069cf606c75e3bfca Mon Sep 17 00:00:00 2001 From: Esco Date: Sat, 8 Mar 2025 20:56:21 +0100 Subject: [PATCH 0344/1184] feat: Added DoNotRewriteUrls to SafeLinks Update standards.json --- src/data/standards.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 441c0a3d9b2e..3ae4533e9412 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1691,6 +1691,14 @@ "type": "switch", "label": "EnableOrganizationBranding", "name": "standards.SafeLinksPolicy.EnableOrganizationBranding" + }, + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": false, + "name": "standards.SafeLinksPolicy.DoNotRewriteUrls", + "label": "Do not rewrite the following URLs in email" } ], "label": "Default SafeLinks Policy", From f5bb12cd2bc6a58e8ff8bb052e185d4ce069eddb Mon Sep 17 00:00:00 2001 From: Esco Date: Sat, 8 Mar 2025 21:30:45 +0100 Subject: [PATCH 0345/1184] feat: Added AllowedSenderDomains to SpamFilter --- src/data/standards.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 3ae4533e9412..bcb7e6afe138 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -2352,6 +2352,14 @@ "required": false, "name": "standards.SpamFilterPolicy.RegionBlockList", "label": "Regions to block (uppercase ISO 3166-1 two-letter)" + }, + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": false, + "name": "standards.SpamFilterPolicy.AllowedSenderDomains", + "label": "Allowed sender domains" } ], "label": "Default Spam Filter Policy", From ee9dd5e877f44172af4e2935b3ae16b8d4a48b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Sat, 8 Mar 2025 13:02:56 +0100 Subject: [PATCH 0346/1184] Fix actions and casing of the properties --- .../security/incidents/list-alerts/index.js | 33 ++++++++++--------- .../incidents/list-incidents/index.js | 32 +++++++++++------- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/pages/security/incidents/list-alerts/index.js b/src/pages/security/incidents/list-alerts/index.js index 444459c102ec..9379da71347d 100644 --- a/src/pages/security/incidents/list-alerts/index.js +++ b/src/pages/security/incidents/list-alerts/index.js @@ -13,10 +13,10 @@ const Page = () => { icon: , url: "/api/ExecSetSecurityAlert", data: { - GUID: "id", - Status: "inProgress", - Vendor: "vendorInformation.vendor", - Provider: "vendorInformation.provider", + GUID: "Id", + Status: "!inProgress", + Vendor: "RawResult.vendorInformation.vendor", + Provider: "RawResult.vendorInformation.provider", }, confirmText: "Are you sure you want to set the status to in progress?", }, @@ -26,10 +26,10 @@ const Page = () => { icon: , url: "/api/ExecSetSecurityAlert", data: { - GUID: "id", - Status: "resolved", - Vendor: "vendorInformation.vendor", - Provider: "vendorInformation.provider", + GUID: "Id", + Status: "!resolved", + Vendor: "RawResult.vendorInformation.vendor", + Provider: "RawResult.vendorInformation.provider", }, confirmText: "Are you sure you want to set the status to resolved?", }, @@ -38,9 +38,9 @@ const Page = () => { // Define off-canvas details const offCanvas = { extendedInfoFields: [ - "eventDateTime", // Created on - "title", // Title - "category", // Category + "EventDateTime", // Created on + "Title", // Title + "Category", // Category "Status", // Status "Severity", // Severity "Tenant", // Tenant @@ -51,18 +51,19 @@ const Page = () => { // Simplified columns for the table const simpleColumns = [ - "eventDateTime", // Created Date (Local) - "Tenant", // Tenant - "title", // Title - "Severity", // Severity + "EventDateTime", // Created Date (Local) "Status", // Status + "Title", // Title + "Severity", // Severity + "Category", // Category + "Tenant", // Tenant ]; return ( { const pageTitle = "Incidents List"; @@ -13,7 +14,7 @@ const Page = () => { icon: , url: "/api/ExecSetSecurityIncident", data: { - GUID: "id", + GUID: "Id", Assigned: "currentUserId", }, confirmText: "Are you sure you want to assign this incident to yourself?", @@ -24,9 +25,9 @@ const Page = () => { icon: , url: "/api/ExecSetSecurityIncident", data: { - GUID: "id", - Status: "active", - Assigned: "currentAssignedUser", + GUID: "Id", + Status: "!active", + Assigned: "AssignedTo", }, confirmText: "Are you sure you want to set the status to active?", }, @@ -36,9 +37,9 @@ const Page = () => { icon: , url: "/api/ExecSetSecurityIncident", data: { - GUID: "id", - Status: "inProgress", - Assigned: "currentAssignedUser", + GUID: "Id", + Status: "!inProgress", + Assigned: "AssignedTo", }, confirmText: "Are you sure you want to set the status to in progress?", }, @@ -48,9 +49,9 @@ const Page = () => { icon: , url: "/api/ExecSetSecurityIncident", data: { - GUID: "id", - Status: "resolved", - Assigned: "currentAssignedUser", + GUID: "Id", + Status: "!resolved", + Assigned: "AssignedTo", }, confirmText: "Are you sure you want to set the status to resolved?", }, @@ -77,7 +78,16 @@ const Page = () => { }; // Simplified columns for the table - const simpleColumns = ["Created", "Tenant", "Id", "DisplayName", "Status", "Severity", "Tags"]; + const simpleColumns = [ + "Created", + "Tenant", + "Id", + "DisplayName", + "Status", + "Severity", + "Tags", + "IncidentUrl", + ]; return ( Date: Sat, 8 Mar 2025 16:06:17 +0100 Subject: [PATCH 0347/1184] fix assign to current user --- src/pages/security/incidents/list-incidents/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/security/incidents/list-incidents/index.js b/src/pages/security/incidents/list-incidents/index.js index 7a86c623cc36..94019e739c54 100644 --- a/src/pages/security/incidents/list-incidents/index.js +++ b/src/pages/security/incidents/list-incidents/index.js @@ -15,7 +15,6 @@ const Page = () => { url: "/api/ExecSetSecurityIncident", data: { GUID: "Id", - Assigned: "currentUserId", }, confirmText: "Are you sure you want to assign this incident to yourself?", }, From 75a1c4277e7a11fe14e6bf2807624587752d1376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Sat, 8 Mar 2025 16:09:22 +0100 Subject: [PATCH 0348/1184] remove unused import for useSettings in incidents list page --- src/pages/security/incidents/list-incidents/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/security/incidents/list-incidents/index.js b/src/pages/security/incidents/list-incidents/index.js index 94019e739c54..8db8ce596132 100644 --- a/src/pages/security/incidents/list-incidents/index.js +++ b/src/pages/security/incidents/list-incidents/index.js @@ -1,7 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { PersonAdd, PlayArrow, Assignment, Done } from "@mui/icons-material"; -import { useSettings } from "/src/hooks/use-settings"; const Page = () => { const pageTitle = "Incidents List"; From 7da8c16348909f1aa6cf9409ba203206b9290824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Sat, 8 Mar 2025 17:55:02 +0100 Subject: [PATCH 0349/1184] move a few things around to make it more pleasing to the eye --- .../email/administration/quarantine/index.js | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/pages/email/administration/quarantine/index.js b/src/pages/email/administration/quarantine/index.js index 7415aa9dc5d0..fc27b982cfcc 100644 --- a/src/pages/email/administration/quarantine/index.js +++ b/src/pages/email/administration/quarantine/index.js @@ -1,7 +1,15 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { useEffect, useState } from "react"; -import { Dialog, DialogTitle, DialogContent, IconButton, Skeleton, Typography, CircularProgress } from "@mui/material"; +import { + Dialog, + DialogTitle, + DialogContent, + IconButton, + Skeleton, + Typography, + CircularProgress, +} from "@mui/material"; import { Block, Close, Done, DoneAll, Subject } from "@mui/icons-material"; import { CippMessageViewer } from "/src/components/CippComponents/CippMessageViewer.jsx"; import { ApiGetCall, ApiPostCall } from "/src/api/ApiCall"; @@ -10,13 +18,14 @@ import { EyeIcon, DocumentTextIcon } from "@heroicons/react/24/outline"; import { CippDataTable } from "/src/components/CippTable/CippDataTable"; const simpleColumns = [ + "ReceivedTime", + "ReleaseStatus", + "Subject", "SenderAddress", "RecipientAddress", - "Subject", "Type", - "ReceivedTime", - "ReleaseStatus", "PolicyName", + "Tenant", ]; const detailColumns = ["Received", "Status", "SenderAddress", "RecipientAddress"]; const pageTitle = "Quarantine Management"; @@ -97,7 +106,7 @@ const Page = () => { url: "/api/ExecQuarantineManagement", data: { Identity: "Identity", - Type: "Release", + Type: "!Release", }, confirmText: "Are you sure you want to release this message?", icon: , @@ -109,7 +118,7 @@ const Page = () => { url: "/api/ExecQuarantineManagement", data: { Identity: "Identity", - Type: "Deny", + Type: "!Deny", }, confirmText: "Are you sure you want to deny this message?", icon: , @@ -121,7 +130,7 @@ const Page = () => { url: "/api/ExecQuarantineManagement", data: { Identity: "Identity", - Type: "Release", + Type: "!Release", AllowSender: true, }, confirmText: @@ -154,6 +163,7 @@ const Page = () => { Date: Sat, 8 Mar 2025 21:39:56 +0100 Subject: [PATCH 0350/1184] add alert for new Defender Incidents --- src/data/alerts.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/data/alerts.json b/src/data/alerts.json index 60d288d7329e..4779d23e58e1 100644 --- a/src/data/alerts.json +++ b/src/data/alerts.json @@ -71,6 +71,11 @@ "label": "Alert on Defender Malware found (Tenant must be on-boarded in Lighthouse)", "recommendedRunInterval": "4h" }, + { + "name": "DefenderIncidents", + "label": "Alert on new Defender Incidents found", + "recommendedRunInterval": "4h" + }, { "name": "UnusedLicenses", "label": "Alert on unused licenses", From b8037fe4fb8948c2a1f841c1ad205609f5644744 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 9 Mar 2025 12:45:40 +0100 Subject: [PATCH 0351/1184] #3741 --- src/components/CippCards/CippExchangeInfoCard.jsx | 3 +++ src/components/linearProgressWithLabel.jsx | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/CippCards/CippExchangeInfoCard.jsx b/src/components/CippCards/CippExchangeInfoCard.jsx index b206ef91e069..00dbd2f6e56d 100644 --- a/src/components/CippCards/CippExchangeInfoCard.jsx +++ b/src/components/CippCards/CippExchangeInfoCard.jsx @@ -45,6 +45,9 @@ export const CippExchangeInfoCard = (props) => { { - {`${Math.round(props.value)}%`} + {`${Math.round(props.value)}% ${props?.addedLabel}`} ); }; From 9d6c5c56e7a4c3c69ed8da9f837308a28de27693 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 9 Mar 2025 16:22:52 +0100 Subject: [PATCH 0352/1184] added dates to lit hold --- src/data/standards.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/data/standards.json b/src/data/standards.json index bcb7e6afe138..75d677313aaa 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1113,7 +1113,14 @@ "cat": "Exchange Standards", "tag": [], "helpText": "Enables litigation hold for all UserMailboxes with a valid license.", - "addedComponent": [], + "addedComponent": [ + { + "type": "textField", + "name": "standards.EnableLitigationHold.days", + "required": false, + "label": "Days to apply for litigation hold" + } + ], "label": "Enable Litigation Hold for all users", "impact": "Low Impact", "impactColour": "info", From a28fe181c410a01f4336aaa1fe7bd61aca6ec181 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 9 Mar 2025 16:39:05 +0100 Subject: [PATCH 0353/1184] delete device --- src/pages/endpoint/MEM/devices/index.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/pages/endpoint/MEM/devices/index.js b/src/pages/endpoint/MEM/devices/index.js index a381de6b12df..1cbe998d8d92 100644 --- a/src/pages/endpoint/MEM/devices/index.js +++ b/src/pages/endpoint/MEM/devices/index.js @@ -128,7 +128,8 @@ const Page = () => { GUID: "id", Action: "windowsDefenderUpdateSignatures", }, - confirmText: "Are you sure you want to update the Windows Defender signatures for this device?", + confirmText: + "Are you sure you want to update the Windows Defender signatures for this device?", }, { label: "Generate logs and ship to MEM", @@ -216,7 +217,8 @@ const Page = () => { keepUserData: false, useProtectedWipe: true, }, - confirmText: "Are you sure you want to wipe this device? This will retain enrollment data. Continuing at powerloss may cause boot issues if wipe is interrupted.", + confirmText: + "Are you sure you want to wipe this device? This will retain enrollment data. Continuing at powerloss may cause boot issues if wipe is interrupted.", }, { label: "Wipe Device, remove enrollment data, and continue at powerloss", @@ -230,7 +232,8 @@ const Page = () => { keepUserData: false, useProtectedWipe: true, }, - confirmText: "Are you sure you want to wipe this device? This will also remove enrollment data. Continuing at powerloss may cause boot issues if wipe is interrupted.", + confirmText: + "Are you sure you want to wipe this device? This will also remove enrollment data. Continuing at powerloss may cause boot issues if wipe is interrupted.", }, { label: "Autopilot Reset", @@ -245,6 +248,17 @@ const Page = () => { }, confirmText: "Are you sure you want to Autopilot Reset this device?", }, + { + label: "Delete device", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "delete", + }, + confirmText: "Are you sure you want to retire this device?", + }, { label: "Retire device", type: "POST", From 14d772933dcbdc96187fb6a76a15d880f09a5768 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 9 Mar 2025 18:22:58 +0100 Subject: [PATCH 0354/1184] add impact --- .../CippStandards/CippStandardAccordion.jsx | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx index 2d1ff418b693..5001238da6ec 100644 --- a/src/components/CippStandards/CippStandardAccordion.jsx +++ b/src/components/CippStandards/CippStandardAccordion.jsx @@ -159,17 +159,30 @@ const CippStandardAccordion = ({ {selectedActions && selectedActions?.length > 0 && ( {selectedActions?.map((action, index) => ( - + <> + + + ))} )} + { + //add a chip that shows the impact + } {standard.helpText} From 2f4081d17cdf7031e9be8bef0364beedf53629bb Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 10 Mar 2025 18:17:19 +0100 Subject: [PATCH 0355/1184] allow preselectedvalue for tenant selector. --- .../CippComponents/CippAutocomplete.jsx | 25 ++++++++++++++++++- .../CippComponents/CippFormTenantSelector.jsx | 7 ++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index c2fd56295bc8..3106eec4cd76 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -70,6 +70,7 @@ export const CippAutoComplete = (props) => { sx, removeOptions = [], sortOptions = false, + preselectedValue, ...other } = props; @@ -166,13 +167,35 @@ export const CippAutoComplete = (props) => { }; }); setUsedOptions(convertedOptions); + if (preselectedValue && !defaultValue && !value && convertedOptions.length > 0) { + const preselectedOption = convertedOptions.find( + (option) => option.value === preselectedValue + ); + + if (preselectedOption) { + const newValue = multiple ? [preselectedOption] : preselectedOption; + if (onChange) { + onChange(newValue, newValue?.addedFields); + } + } + } } } if (actionGetRequest.isError) { setUsedOptions([{ label: getCippError(actionGetRequest.error), value: "error" }]); } - }, [api, actionGetRequest.data, actionGetRequest.isSuccess, actionGetRequest.isError]); + }, [ + api, + actionGetRequest.data, + actionGetRequest.isSuccess, + actionGetRequest.isError, + preselectedValue, + defaultValue, + value, + multiple, + onChange, + ]); const memoizedOptions = useMemo(() => { let finalOptions = api ? usedOptions : options; diff --git a/src/components/CippComponents/CippFormTenantSelector.jsx b/src/components/CippComponents/CippFormTenantSelector.jsx index fdc3ab1264d5..5f295dece517 100644 --- a/src/components/CippComponents/CippFormTenantSelector.jsx +++ b/src/components/CippComponents/CippFormTenantSelector.jsx @@ -1,9 +1,10 @@ import React from "react"; import { CippFormComponent } from "./CippFormComponent"; +import { useSettings } from "../../hooks/use-settings"; export const CippFormTenantSelector = ({ formControl, - componentType='autoComplete', + componentType = "autoComplete", allTenants = false, type = "multiple", name = "tenantFilter", @@ -21,13 +22,15 @@ export const CippFormTenantSelector = ({ } return {}; }; - + const currentTenant = useSettings()?.currentTenant; return ( Date: Mon, 10 Mar 2025 22:16:19 +0100 Subject: [PATCH 0356/1184] add MessageCopyForSentAsEnabled property --- src/components/CippComponents/CippExchangeActions.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippExchangeActions.jsx b/src/components/CippComponents/CippExchangeActions.jsx index 329fb3492eed..667b5b6fd686 100644 --- a/src/components/CippComponents/CippExchangeActions.jsx +++ b/src/components/CippComponents/CippExchangeActions.jsx @@ -151,7 +151,7 @@ export const CippExchangeActions = () => { label: "Copy Sent Items to Shared Mailbox", type: "POST", url: "/api/ExecCopyForSent", - data: { ID: "UPN" }, + data: { ID: "UPN", MessageCopyForSentAsEnabled: true }, confirmText: "Are you sure you want to enable Copy Sent Items to Shared Mailbox?", icon: , condition: (row) => From 1612643ab9c7ddfbde6568ca7320579ef2af1740 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 11 Mar 2025 12:15:22 -0400 Subject: [PATCH 0357/1184] fix: bpa report refreshing --- src/pages/tenant/standards/bpa-report/view.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/tenant/standards/bpa-report/view.js b/src/pages/tenant/standards/bpa-report/view.js index 5720f5d6f049..46a47bc7d088 100644 --- a/src/pages/tenant/standards/bpa-report/view.js +++ b/src/pages/tenant/standards/bpa-report/view.js @@ -113,7 +113,7 @@ const Page = () => { } } } - }, [bpaTemplateList.isSuccess, bpaData.isSuccess, currentTenant, router]); + }, [bpaTemplateList.isSuccess, bpaData.isSuccess, bpaData.data, currentTenant, router]); const pageTitle = `BPA Report Viewer - ${currentTenant}`; return ( @@ -221,6 +221,8 @@ const Page = () => { noCard={true} incorrectDataMessage={"No data has been found for this report."} simpleColumns={block?.simpleColumns} + isFetching={bpaData.isFetching} + refreshFunction={() => bpaData.refetch()} /> ) : ( From 93c02541ed986d777cba7d5ba11d14bc7e2c462f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 11 Mar 2025 12:17:54 -0400 Subject: [PATCH 0358/1184] fix: add asapp to presets --- src/data/GraphExplorerPresets.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/data/GraphExplorerPresets.json b/src/data/GraphExplorerPresets.json index f6ed62774ab1..f5c549347713 100644 --- a/src/data/GraphExplorerPresets.json +++ b/src/data/GraphExplorerPresets.json @@ -105,7 +105,8 @@ "params": { "endpoint": "/reports/authenticationMethods/userRegistrationDetails", "$filter": "", - "$select": "" + "$select": "", + "AsApp": true }, "isBuiltin": true }, @@ -125,7 +126,8 @@ "params": { "endpoint": "/reports/authenticationMethods/userRegistrationDetails", "$filter": "IsAdmin eq true", - "$select": "" + "$select": "", + "AsApp": true }, "isBuiltin": true }, From c7b676edc15ca5209b64485b32e21801f6af5612 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 11 Mar 2025 19:43:05 +0100 Subject: [PATCH 0359/1184] minor fix --- .../CippStandards/CippStandardAccordion.jsx | 15 +++++++-------- src/data/standards.json | 4 ++-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx index 5001238da6ec..a84eb5e1435b 100644 --- a/src/components/CippStandards/CippStandardAccordion.jsx +++ b/src/components/CippStandards/CippStandardAccordion.jsx @@ -168,16 +168,15 @@ const CippStandardAccordion = ({ size="small" sx={{ mr: 1 }} /> - ))} + )} { diff --git a/src/data/standards.json b/src/data/standards.json index 75d677313aaa..218f6d6439a3 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -3490,8 +3490,8 @@ "label": "Intune Template", "multiple": true, "disabledFeatures": { - "report": true, - "warn": true, + "report": false, + "warn": false, "remediate": false }, "impact": "High Impact", From 25bf5f22b641f90de8352a985a1ef5b205b1cd26 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 11 Mar 2025 20:51:58 -0400 Subject: [PATCH 0360/1184] support fullscreen dialog boxes --- src/components/CippComponents/CippApiDialog.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 3a49fbee62be..5883821958b8 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -329,7 +329,7 @@ export const CippApiDialog = (props) => { } return ( - + {title} From e96a8f05f6486174b51c76b2c0baed11c4cad3a1 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Mar 2025 09:21:45 -0400 Subject: [PATCH 0361/1184] Update CippMessageViewer.jsx --- src/components/CippComponents/CippMessageViewer.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippMessageViewer.jsx b/src/components/CippComponents/CippMessageViewer.jsx index d4f2746fe8ea..0c20e154aea8 100644 --- a/src/components/CippComponents/CippMessageViewer.jsx +++ b/src/components/CippComponents/CippMessageViewer.jsx @@ -477,7 +477,7 @@ export const CippMessageViewer = ({ emailSource }) => { ) : (
    - Date: Wed, 12 Mar 2025 09:55:39 -0400 Subject: [PATCH 0362/1184] feat: anti-spam header parsing --- .../CippForefrontHeaderDialog.jsx | 166 ++++++++++++++++++ .../CippComponents/CippMessageViewer.jsx | 29 +++ 2 files changed, 195 insertions(+) create mode 100644 src/components/CippComponents/CippForefrontHeaderDialog.jsx diff --git a/src/components/CippComponents/CippForefrontHeaderDialog.jsx b/src/components/CippComponents/CippForefrontHeaderDialog.jsx new file mode 100644 index 000000000000..dd092f6b8dcb --- /dev/null +++ b/src/components/CippComponents/CippForefrontHeaderDialog.jsx @@ -0,0 +1,166 @@ +import React from "react"; +import { + Dialog, + DialogTitle, + DialogContent, + IconButton, + Typography, + Box, + Stack, +} from "@mui/material"; +import { Close, ReceiptLong } from "@mui/icons-material"; + +const forefrontHeaderMapping = { + ARC: { + label: "ARC Protocol", + values: { + AAR: "Records the content of the Authentication-results header from DMARC.", + AMS: "Includes cryptographic signatures of the message.", + AS: "Includes cryptographic signatures of the message headers", + }, + }, + CAT: { + label: "The category of protection policy", + values: { + BULK: "Bulk", + DIMP: "Domain Impersonation", + GIMP: "Mailbox intelligence based impersonation", + HPHSH: "High confidence phishing", + HPHISH: "High confidence phishing", + HSPM: "High confidence spam", + MALW: "Malware", + PHSH: "Phishing", + SPM: "Spam", + SPOOF: "Spoofing", + UIMP: "User Impersonation", + AMP: "Anti-malware", + SAP: "Safe attachments", + OSPM: "Outbound spam", + NONE: "Clean message", + }, + }, + CIP: { + label: "Connecting IP Address", + }, + CTRY: { + label: "The source country as determined by the connecting IP address", + }, + H: { + label: "The HELO or EHLO string of the connecting email server.", + }, + IPV: { + label: "Ingress Peer Verification status", + values: { + CAL: "Source IP address was Configured in Allowed List (CAL)", + NLI: "The IP address was not found on any IP reputation list.", + }, + }, + EFV: { + label: "Egress F(?) Verification status", + values: { + CAL: "Source IP address was Configured in Allowed List (CAL)", + NLI: "The IP address was not found on any IP reputation list.", + }, + }, + DIR: { + label: "Direction of email verification", + values: { + INB: "Inbound email verification", + OUT: "Outbound email verification", + OUB: "Outbound email verification", + OTB: "Outbound email verification", + }, + }, + LANG: { + label: "The language in which the message was written", + }, + PTR: { + label: "Reverse DNS of the Connecting IP peer's address", + }, + SFTY: { + label: "The message was identified as phishing", + values: { + 9.19: "Domain impersonation. The sending domain is attempting to impersonate a protected domain", + "9.20": + "User impersonation. The sending user is attempting to impersonate a user in the recipient's organization", + }, + }, + SRV: { + label: "Bulk Email analysis results", + values: { + BULK: "The message was identified as bulk email by spam filtering and the bulk complaint level (BCL) threshold", + }, + }, + SFV: { + label: "Message Filtering", + values: { + BLK: "Filtering was skipped and the message was blocked because it was sent from an address in a user's Blocked Senders list.", + NSPM: "Spam filtering marked the message as non-spam and the message was sent to the intended recipients.", + SFE: "Filtering was skipped and the message was allowed because it was sent from an address in a user's Safe Senders list.", + SKA: "The message skipped spam filtering and was delivered to the Inbox because the sender was in the allowed senders list or allowed domains list in an anti-spam policy.", + SKB: "The message was marked as spam because it matched a sender in the blocked senders list or blocked domains list in an anti-spam policy.", + SKI: "Similar to SFV:SKN, the message skipped spam filtering for another reason (for example, an intra-organizational email within a tenant).", + SKN: "The message was marked as non-spam prior to being processed by spam filtering. For example, the message was marked as SCL -1 or Bypass spam filtering by a mail flow rule.", + SKQ: "The message was released from the quarantine and was sent to the intended recipients.", + SKS: "The message was marked as spam prior to being processed by spam filtering. For example, the message was marked as SCL 5 to 9 by a mail flow rule.", + SPM: "The message was marked as spam by spam filtering.", + }, + }, + SCL: { + label: "Spam Confidence Level", + }, +}; + +const parseForefrontHeader = (header) => { + const fields = header.split(";"); + return fields.map((field) => { + const [key, value] = field.split(":"); + return { key: key.trim(), value: value?.trim() }; + }); +}; + +const CippForefrontHeaderDialog = ({ open, onClose, header }) => { + const parsedFields = parseForefrontHeader(header); + + return ( + + + Anti-Spam Report + theme.palette.grey[500], + }} + > + + + + + + {parsedFields.map( + (field, index) => + field.key && ( + + {console.log(field)} + + {forefrontHeaderMapping[field.key]?.label || field.key} + + + {forefrontHeaderMapping[field.key]?.values?.[field.value] || + field.value || + "N/A"} + + + ) + )} + + + + ); +}; + +export default CippForefrontHeaderDialog; diff --git a/src/components/CippComponents/CippMessageViewer.jsx b/src/components/CippComponents/CippMessageViewer.jsx index 0c20e154aea8..fb9d68c338f9 100644 --- a/src/components/CippComponents/CippMessageViewer.jsx +++ b/src/components/CippComponents/CippMessageViewer.jsx @@ -36,6 +36,7 @@ import { Visibility, AccountCircle, Close, + ReceiptLong, } from "@mui/icons-material"; import { CippTimeAgo } from "./CippTimeAgo"; @@ -51,6 +52,7 @@ import { SunIcon, } from "@heroicons/react/24/outline"; import { useSettings } from "/src/hooks/use-settings"; +import CippForefrontHeaderDialog from "./CippForefrontHeaderDialog"; export const CippMessageViewer = ({ emailSource }) => { const [emlContent, setEmlContent] = useState(null); @@ -61,6 +63,8 @@ export const CippMessageViewer = ({ emailSource }) => { const [dialogOpen, setDialogOpen] = useState(false); const [dialogContent, setDialogContent] = useState(null); const [dialogTitle, setDialogTitle] = useState(""); + const [forefrontDialogOpen, setForefrontDialogOpen] = useState(false); + const [forefrontHeader, setForefrontHeader] = useState(""); const currentTheme = useSettings()?.currentTheme?.value; const [darkMode, setDarkMode] = useState(currentTheme === "dark"); @@ -189,10 +193,16 @@ export const CippMessageViewer = ({ emailSource }) => { setDialogOpen(true); }; + const showForefrontDialog = (header) => { + setForefrontHeader(header); + setForefrontDialogOpen(true); + }; + const EmailButtons = (emailHeaders, emailSource) => { const emailSourceBytes = new TextEncoder().encode(emailSource); const blob = new Blob([emailSourceBytes], { type: "message/rfc822" }); const url = URL.createObjectURL(blob); + const forefrontHeader = emailHeaders?.match(/X-Forefront-Antispam-Report: (.*)/)?.[1]; return ( {emailHeaders && ( @@ -209,6 +219,20 @@ export const CippMessageViewer = ({ emailSource }) => { View Headers )} + {forefrontHeader && ( + + )}
    + setForefrontDialogOpen(false)} + header={forefrontHeader} + /> ); }; From f7acb2089b047cbf6ce1fc4478388806d25dfba3 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Mar 2025 10:58:46 -0400 Subject: [PATCH 0363/1184] Update CippForefrontHeaderDialog.jsx --- .../CippForefrontHeaderDialog.jsx | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/components/CippComponents/CippForefrontHeaderDialog.jsx b/src/components/CippComponents/CippForefrontHeaderDialog.jsx index dd092f6b8dcb..9280fecd0800 100644 --- a/src/components/CippComponents/CippForefrontHeaderDialog.jsx +++ b/src/components/CippComponents/CippForefrontHeaderDialog.jsx @@ -4,11 +4,9 @@ import { DialogTitle, DialogContent, IconButton, - Typography, - Box, - Stack, } from "@mui/material"; import { Close, ReceiptLong } from "@mui/icons-material"; +import { CippPropertyList } from "./CippPropertyList"; const forefrontHeaderMapping = { ARC: { @@ -46,7 +44,7 @@ const forefrontHeaderMapping = { label: "The source country as determined by the connecting IP address", }, H: { - label: "The HELO or EHLO string of the connecting email server.", + label: "The HELO or EHLO string of the connecting email server", }, IPV: { label: "Ingress Peer Verification status", @@ -56,7 +54,7 @@ const forefrontHeaderMapping = { }, }, EFV: { - label: "Egress F(?) Verification status", + label: "Egress Verification status", values: { CAL: "Source IP address was Configured in Allowed List (CAL)", NLI: "The IP address was not found on any IP reputation list.", @@ -80,7 +78,7 @@ const forefrontHeaderMapping = { SFTY: { label: "The message was identified as phishing", values: { - 9.19: "Domain impersonation. The sending domain is attempting to impersonate a protected domain", + "9.19": "Domain impersonation. The sending domain is attempting to impersonate a protected domain", "9.20": "User impersonation. The sending user is attempting to impersonate a user in the recipient's organization", }, @@ -108,6 +106,16 @@ const forefrontHeaderMapping = { }, SCL: { label: "Spam Confidence Level", + values: { + "-1": "-1: The message skipped spam filtering. Deliver the message to recipient Inbox folders.", + "0": "0: Spam filtering determined the message wasn't spam. Deliver the message to recipient Inbox folders.", + "1": "1: Spam filtering determined the message wasn't spam. Deliver the message to recipient Inbox folders.", + "5": "5: Spam filtering marked the message as Spam. Deliver the message to recipient Junk Email folders.", + "6": "6: Spam filtering marked the message as Spam. Deliver the message to recipient Junk Email folders.", + "7": "7: Spam filtering marked the message as High confidence spam. Deliver the message to recipient Junk Email folders.", + "8": "8: Spam filtering marked the message as High confidence spam. Deliver the message to recipient Junk Email folders.", + "9": "9: Spam filtering marked the message as High confidence spam. Deliver the message to recipient Junk Email folders.", + }, }, }; @@ -122,6 +130,13 @@ const parseForefrontHeader = (header) => { const CippForefrontHeaderDialog = ({ open, onClose, header }) => { const parsedFields = parseForefrontHeader(header); + const propertyItems = parsedFields + .filter((field) => field.key && field.value && field.key !== "SFS") + .map((field) => ({ + label: forefrontHeaderMapping[field.key]?.label || field.key, + value: forefrontHeaderMapping[field.key]?.values?.[field.value] || field.value || "N/A", + })); + return ( @@ -140,24 +155,7 @@ const CippForefrontHeaderDialog = ({ open, onClose, header }) => { - - {parsedFields.map( - (field, index) => - field.key && ( - - {console.log(field)} - - {forefrontHeaderMapping[field.key]?.label || field.key} - - - {forefrontHeaderMapping[field.key]?.values?.[field.value] || - field.value || - "N/A"} - - - ) - )} - + ); From 6fe1d8b525f30e21f885c23615236c8c31be53f4 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 12 Mar 2025 20:04:12 -0400 Subject: [PATCH 0364/1184] feat: edit tenant/tenant groups --- src/components/CippCards/CippPageCard.jsx | 3 +- .../CippAddEditTenantGroups.jsx | 46 +++ src/components/CippComponents/CippHead.jsx | 4 +- .../CippFormPages/CippFormSection.jsx | 4 +- .../tenant/administration/tenants/edit.js | 314 ++++++++++++++++++ .../administration/tenants/groups/add.js | 60 ++++ .../administration/tenants/groups/edit.js | 94 ++++++ .../administration/tenants/groups/index.js | 56 ++++ .../tenant/administration/tenants/index.js | 23 +- .../administration/tenants/tabOptions.js | 10 + 10 files changed, 604 insertions(+), 10 deletions(-) create mode 100644 src/components/CippComponents/CippAddEditTenantGroups.jsx create mode 100644 src/pages/tenant/administration/tenants/edit.js create mode 100644 src/pages/tenant/administration/tenants/groups/add.js create mode 100644 src/pages/tenant/administration/tenants/groups/edit.js create mode 100644 src/pages/tenant/administration/tenants/groups/index.js create mode 100644 src/pages/tenant/administration/tenants/tabOptions.js diff --git a/src/components/CippCards/CippPageCard.jsx b/src/components/CippCards/CippPageCard.jsx index 72f44a95b09b..fc5d5e7b1345 100644 --- a/src/components/CippCards/CippPageCard.jsx +++ b/src/components/CippCards/CippPageCard.jsx @@ -11,6 +11,7 @@ const CippPageCard = (props) => { cardSize = "xl", hideTitleText = false, hideBackButton = false, + noTenantInHead = false, infoBar, } = props; const router = useRouter(); @@ -21,7 +22,7 @@ const CippPageCard = (props) => { return ( <> - + { + return ( + + Properties + + + + + + + ); +}; + +export default CippAddEditTenantGroups; diff --git a/src/components/CippComponents/CippHead.jsx b/src/components/CippComponents/CippHead.jsx index f48eb6b09321..6e96b1eaea5c 100644 --- a/src/components/CippComponents/CippHead.jsx +++ b/src/components/CippComponents/CippHead.jsx @@ -1,11 +1,11 @@ import Head from "next/head"; import { useSettings } from "../../hooks/use-settings"; -export const CippHead = ({ title }) => { +export const CippHead = ({ title, noTenant=false }) => { const tenant = useSettings().currentTenant; return ( - {tenant ? `${title} - ${tenant}` : title} + {tenant && !noTenant ? `${title} - ${tenant}` : title} ); }; diff --git a/src/components/CippFormPages/CippFormSection.jsx b/src/components/CippFormPages/CippFormSection.jsx index 3bd2a7c94b8d..cb77e73b5d8d 100644 --- a/src/components/CippFormPages/CippFormSection.jsx +++ b/src/components/CippFormPages/CippFormSection.jsx @@ -34,9 +34,9 @@ const CippFormSection = (props) => { if (!isValid) { return; } - const values = formControl.getValues(); + let values = formControl.getValues(); if (customDataformatter) { - customDataformatter(values); + values = customDataformatter(values); } postCall.mutate({ url: postUrl, diff --git a/src/pages/tenant/administration/tenants/edit.js b/src/pages/tenant/administration/tenants/edit.js new file mode 100644 index 000000000000..899039491ff9 --- /dev/null +++ b/src/pages/tenant/administration/tenants/edit.js @@ -0,0 +1,314 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { useForm } from "react-hook-form"; +import { ApiGetCall } from "../../../../api/ApiCall"; +import { useEffect, useState } from "react"; +import { useRouter } from "next/router"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; +import { + Stack, + Box, + Tab, + Tabs, + CardContent, + Button, + SvgIcon, + Alert, + Typography, + Grid, +} from "@mui/material"; +import { CippCardTabPanel } from "/src/components/CippComponents/CippCardTabPanel"; +import { PlusIcon, TrashIcon, PencilIcon } from "@heroicons/react/24/outline"; +import { CippDataTable } from "/src/components/CippTable/CippDataTable"; +import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; +import { ApiPostCall } from "../../../../api/ApiCall"; +import CippFormSection from "/src/components/CippFormPages/CippFormSection"; +import CippPageCard from "../../../../components/CippCards/CippPageCard"; +import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog"; +import { CippPropertyListCard } from "/src/components/CippCards/CippPropertyListCard"; +import { getCippFormatting } from "../../../../utils/get-cipp-formatting"; + +function tabProps(index) { + return { + id: `simple-tab-${index}`, + "aria-controls": `simple-tabpanel-${index}`, + }; +} + +const Page = () => { + const router = useRouter(); + const { id } = router.query; + const formControl = useForm({ + mode: "onChange", + }); + const [value, setValue] = useState(0); + const [customVariables, setCustomVariables] = useState([]); + const [openAddDialog, setOpenAddDialog] = useState(false); + + const tenantDetails = ApiGetCall({ + url: id ? `/api/ListTenantDetails?tenantFilter=${id}` : null, + queryKey: id ? `TenantProperties_${id}` : null, + }); + + const updateCustomVariablesApi = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: [ + `CustomVariables_${id}`, + "TenantSelector", + "ListTenants-notAllTenants", + `TenantProperties-${id}`, + ], + }); + + useEffect(() => { + if (tenantDetails.isSuccess && tenantDetails.data) { + formControl.reset({ + customerId: id, + Alias: tenantDetails?.data?.customProperties?.Alias ?? "", + Groups: + tenantDetails.data.Groups?.map((group) => ({ + label: group.groupName, + value: group.groupId, + })) || [], + }); + } + }, [tenantDetails.isSuccess, tenantDetails.data]); + + const handleTabChange = (event, newValue) => { + setValue(newValue); + }; + + const handleAddVariable = () => { + setOpenAddDialog(true); + }; + + const actions = [ + { + label: "Edit", + icon: ( + + + + ), + confirmText: "Update the custom variable '[RowKey]'?", + hideBulk: true, + setDefaultValues: true, + fields: [ + { + type: "textField", + name: "RowKey", + label: "Key", + placeholder: "Enter the key for the custom variable.", + required: true, + validators: { + validate: (value) => { + if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { + return true; + } else { + return "The variable name must not contain spaces or special characters."; + } + }, + }, + }, + { + type: "textField", + name: "Value", + label: "Value", + placeholder: "Enter the value for the custom variable.", + required: true, + }, + ], + type: "POST", + url: "/api/ExecCippReplacemap", + data: { + Action: "!AddEdit", + customerId: id, + }, + relatedQueryKeys: [`CustomVariables_${id}`], + }, + { + label: "Delete", + icon: , + confirmText: "Are you sure you want to delete [RowKey]?", + type: "POST", + url: "/api/ExecCippReplacemap", + data: { + Action: "Delete", + RowKey: "RowKey", + customerId: id, + }, + relatedQueryKeys: [`CustomVariables_${id}`], + multiPost: false, + }, + ]; + + return ( + + + + + + + + + + + + + + + { + const formattedValues = { + tenantAlias: values.tenantAlias, + tenantGroups: values.Groups.map((group) => ({ + groupId: group.value, + groupName: group.label, + })), + }; + return formattedValues; + }} + > + Properties + + + ({ + label: group.groupName, + value: group.groupId, + })) || [] + } + disabled={tenantDetails.isFetching} + /> + + + + + + + + + Custom variables are key-value pairs that can be used to store additional information + about a tenant. These are applied to templates in standards using the format + %VariableName%. + + + + + } + > + Add Variable + + } + /> + + + + + + setOpenAddDialog(false), + }} + title="Add Variable" + fields={[ + { + type: "textField", + name: "RowKey", + label: "Key", + placeholder: "Enter the key for the custom variable.", + required: true, + validators: { + validate: (value) => { + if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { + return true; + } else { + return "The variable name must not contain spaces or special characters."; + } + }, + }, + }, + { + type: "textField", + name: "Value", + label: "Value", + placeholder: "Enter the value for the custom variable.", + required: true, + }, + ]} + api={{ + type: "POST", + url: "/api/ExecCippReplacemap", + data: { Action: "AddEdit", customerId: id }, + relatedQueryKeys: [`CustomVariables_${id}`], + }} + /> + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; diff --git a/src/pages/tenant/administration/tenants/groups/add.js b/src/pages/tenant/administration/tenants/groups/add.js new file mode 100644 index 000000000000..82681241d32a --- /dev/null +++ b/src/pages/tenant/administration/tenants/groups/add.js @@ -0,0 +1,60 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { useForm } from "react-hook-form"; +import { ApiPostCall } from "../../../../../api/ApiCall"; +import { useRouter } from "next/router"; +import { + Stack, + Box, + Typography, + Grid, +} from "@mui/material"; + +import CippPageCard from "../../../../../components/CippCards/CippPageCard"; +import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; +import CippAddEditTenantGroups from "/src/components/CippComponents/CippAddEditTenantGroups"; + +const Page = () => { + const router = useRouter(); + const formControl = useForm({ + mode: "onChange", + }); + + const addGroupApi = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: ["TenantGroupListPage"], + }); + + const handleAddGroup = (data) => { + addGroupApi.mutate({ + url: "/api/EditTenantGroup", + data: { + Action: "AddEdit", + groupName: data.groupName, + groupDescription: data.groupDescription, + }, + }); + }; + + return ( + + + + + + + + + + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; diff --git a/src/pages/tenant/administration/tenants/groups/edit.js b/src/pages/tenant/administration/tenants/groups/edit.js new file mode 100644 index 000000000000..80a9156be96a --- /dev/null +++ b/src/pages/tenant/administration/tenants/groups/edit.js @@ -0,0 +1,94 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { useForm } from "react-hook-form"; +import { ApiGetCall, ApiPostCall } from "/src/api/ApiCall"; +import { useEffect } from "react"; +import { useRouter } from "next/router"; +import { Box, Grid } from "@mui/material"; +import CippPageCard from "/src/components/CippCards/CippPageCard"; +import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; +import CippAddEditTenantGroups from "/src/components/CippComponents/CippAddEditTenantGroups"; +import CippFormComponent from "../../../../../components/CippComponents/CippFormComponent"; + +const Page = () => { + const router = useRouter(); + const { id } = router.query; + const formControl = useForm({ + mode: "onChange", + }); + + const groupDetails = ApiGetCall({ + url: id ? `/api/ListTenantGroups?groupId=${id}` : null, + queryKey: id ? `TenantGroupProperties_${id}` : null, + }); + + const updateGroupApi = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: [ + `TenantGroupProperties_${id}`, + "TenantGroupListPage", + ], + }); + + useEffect(() => { + if (groupDetails.isSuccess && groupDetails.data) { + formControl.reset({ + groupId: id, + groupName: groupDetails?.data?.groupName ?? "", + groupDescription: groupDetails?.data?.groupDescription ?? "", + members: groupDetails?.data?.members?.map((member) => ({ + label: member.displayName, + value: member.customerId, + })) || [], + }); + } + }, [groupDetails.isSuccess, groupDetails.data]); + + const handleUpdateGroup = (data) => { + updateGroupApi.mutate({ + url: "/api/EditTenantGroup", + data: { + Action: "AddEdit", + groupId: id, + groupName: data.groupName, + groupDescription: data.groupDescription, + membersToAdd: data.members.map((member) => member.value), + }, + }); + }; + + return ( + + + + + + + + + + + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; diff --git a/src/pages/tenant/administration/tenants/groups/index.js b/src/pages/tenant/administration/tenants/groups/index.js new file mode 100644 index 000000000000..7026d8410a94 --- /dev/null +++ b/src/pages/tenant/administration/tenants/groups/index.js @@ -0,0 +1,56 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { tabOptions } from "../tabOptions"; +import { Edit } from "@mui/icons-material"; +import { Button, SvgIcon } from "@mui/material"; +import { PlusIcon } from "@heroicons/react/24/outline"; + +const Page = () => { + const pageTitle = "Tenant Groups"; + + const simpleColumns = ["groupName", "groupDescription", "groupMembersCount"]; + + const actions = [ + { + label: "Edit Group", + link: "/tenant/administration/tenants/groups/edit?id=[groupId]", + icon: , + }, + ]; + + return ( + + + + } + > + Add Tenant Group + + } + /> + ); +}; + +Page.getLayout = (page) => ( + + {page} + +); + +export default Page; diff --git a/src/pages/tenant/administration/tenants/index.js b/src/pages/tenant/administration/tenants/index.js index ee07d9b30096..aef36a1a9e1b 100644 --- a/src/pages/tenant/administration/tenants/index.js +++ b/src/pages/tenant/administration/tenants/index.js @@ -1,10 +1,10 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import { ApiGetCall } from "../../../../api/ApiCall"; -import { useEffect } from "react"; +import { tabOptions } from "./tabOptions"; +import { Edit } from "@mui/icons-material"; const Page = () => { - //this page is special and requires us to craft the columns and DashboardLayout const pageTitle = "Tenants"; const simpleColumns = [ @@ -19,6 +19,15 @@ const Page = () => { "portal_security", "portal_compliance", ]; + + const actions = [ + { + label: "Edit Tenant", + link: "/tenant/administration/tenants/edit?id=[customerId]", + icon: , + }, + ]; + return ( { Mode: "TenantList", tenantFilter: null, }} + actions={actions} /> ); }; -// Adding the layout for Dashboard -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/src/pages/tenant/administration/tenants/tabOptions.js b/src/pages/tenant/administration/tenants/tabOptions.js new file mode 100644 index 000000000000..3d33bcba9725 --- /dev/null +++ b/src/pages/tenant/administration/tenants/tabOptions.js @@ -0,0 +1,10 @@ +export const tabOptions = [ + { + label: "Tenants", + path: "/tenant/administration/tenants", + }, + { + label: "Groups", + path: "/tenant/administration/tenants/groups", + }, +]; From 30d7b65ae6158bc251d11abdc74537e75bd07303 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 13 Mar 2025 16:27:59 +0100 Subject: [PATCH 0365/1184] fix: show the right domain and not just the first one --- src/pages/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pages/index.js b/src/pages/index.js index c5810877c598..91041ac208ea 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -80,7 +80,12 @@ const Page = () => { name: "Default Domain", data: ( <> - + domain.isDefault === true)?.name + } + type="chip" + /> ), }, From 0686adac9c82decdef24a9c3a9003ae6307d46fc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 13 Mar 2025 11:58:37 -0400 Subject: [PATCH 0366/1184] feat: global variables --- .../CippAddEditTenantGroups.jsx | 12 +- .../CippComponents/CippCustomVariables.jsx | 156 +++++++++++++++++ src/pages/cipp/settings/global-variables.js | 16 ++ src/pages/cipp/settings/tabOptions.json | 4 + .../tenant/administration/tenants/edit.js | 161 +----------------- 5 files changed, 189 insertions(+), 160 deletions(-) create mode 100644 src/components/CippComponents/CippCustomVariables.jsx create mode 100644 src/pages/cipp/settings/global-variables.js diff --git a/src/components/CippComponents/CippAddEditTenantGroups.jsx b/src/components/CippComponents/CippAddEditTenantGroups.jsx index dab047962ef7..d37b85e663e9 100644 --- a/src/components/CippComponents/CippAddEditTenantGroups.jsx +++ b/src/components/CippComponents/CippAddEditTenantGroups.jsx @@ -4,13 +4,20 @@ import { Stack, Typography, Grid } from "@mui/material"; import CippFormSection from "/src/components/CippFormPages/CippFormSection"; import { CippFormTenantSelector } from "./CippFormTenantSelector"; -const CippAddEditTenantGroups = ({ formControl, onSubmit, initialValues, title, backButtonTitle }) => { +const CippAddEditTenantGroups = ({ formControl, initialValues, title, backButtonTitle }) => { return ( { + return { + ...values, + Action: "AddEdit", + }; + }} initialValues={initialValues} > Properties @@ -35,6 +42,7 @@ const CippAddEditTenantGroups = ({ formControl, onSubmit, initialValues, title, multiple={true} required={false} disableClearable={false} + name="members" valueField="customerId" placeholder="Select members to add to this group." /> diff --git a/src/components/CippComponents/CippCustomVariables.jsx b/src/components/CippComponents/CippCustomVariables.jsx new file mode 100644 index 000000000000..96d2780b9a8b --- /dev/null +++ b/src/components/CippComponents/CippCustomVariables.jsx @@ -0,0 +1,156 @@ +import { useState } from "react"; +import { CardContent, Button, SvgIcon, Alert } from "@mui/material"; +import { PlusIcon, TrashIcon, PencilIcon } from "@heroicons/react/24/outline"; +import { CippDataTable } from "/src/components/CippTable/CippDataTable"; +import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; +import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog"; +import { ApiPostCall } from "/src/api/ApiCall"; + +const CippCustomVariables = ({ id }) => { + const [openAddDialog, setOpenAddDialog] = useState(false); + + const updateCustomVariablesApi = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: [`CustomVariables_${id}`], + }); + + const actions = [ + { + label: "Edit", + icon: ( + + + + ), + confirmText: "Update the custom variable '[RowKey]'?", + hideBulk: true, + setDefaultValues: true, + fields: [ + { + type: "textField", + name: "RowKey", + label: "Key", + placeholder: "Enter the key for the custom variable.", + required: true, + validators: { + validate: (value) => { + if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { + return true; + } else { + return "The variable name must not contain spaces or special characters."; + } + }, + }, + }, + { + type: "textField", + name: "Value", + label: "Value", + placeholder: "Enter the value for the custom variable.", + required: true, + }, + ], + type: "POST", + url: "/api/ExecCippReplacemap", + data: { + Action: "!AddEdit", + customerId: id, + }, + relatedQueryKeys: [`CustomVariables_${id}`], + }, + { + label: "Delete", + icon: , + confirmText: "Are you sure you want to delete [RowKey]?", + type: "POST", + url: "/api/ExecCippReplacemap", + data: { + Action: "Delete", + RowKey: "RowKey", + customerId: id, + }, + relatedQueryKeys: [`CustomVariables_${id}`], + multiPost: false, + }, + ]; + + const handleAddVariable = () => { + setOpenAddDialog(true); + }; + + return ( + + + {id === "AllTenants" + ? "Global variables are key-value pairs that can be used to store additional information for All Tenants. These are applied to templates in standards using the format %VariableName%. If a tenant has a custom variable with the same name, the tenant's variable will take precedence." + : "Custom variables are key-value pairs that can be used to store additional information about a tenant. These are applied to templates in standards using the format %VariableName%."} + + + + + } + > + Add Variable + + } + /> + + setOpenAddDialog(false), + }} + title="Add Variable" + fields={[ + { + type: "textField", + name: "RowKey", + label: "Key", + placeholder: "Enter the key for the custom variable.", + required: true, + validators: { + validate: (value) => { + if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { + return true; + } else { + return "The variable name must not contain spaces or special characters."; + } + }, + }, + }, + { + type: "textField", + name: "Value", + label: "Value", + placeholder: "Enter the value for the custom variable.", + required: true, + }, + ]} + api={{ + type: "POST", + url: "/api/ExecCippReplacemap", + data: { Action: "AddEdit", customerId: id }, + relatedQueryKeys: [`CustomVariables_${id}`], + }} + /> + + ); +}; + +export default CippCustomVariables; diff --git a/src/pages/cipp/settings/global-variables.js b/src/pages/cipp/settings/global-variables.js new file mode 100644 index 000000000000..96ffe712d0b3 --- /dev/null +++ b/src/pages/cipp/settings/global-variables.js @@ -0,0 +1,16 @@ +import tabOptions from "./tabOptions"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import CippCustomVariables from "/src/components/CippComponents/CippCustomVariables.jsx"; + +const Page = () => { + return ; +}; + +Page.getLayout = (page) => ( + + {page} + +); + +export default Page; diff --git a/src/pages/cipp/settings/tabOptions.json b/src/pages/cipp/settings/tabOptions.json index 6231cad32485..b68bec5eb43e 100644 --- a/src/pages/cipp/settings/tabOptions.json +++ b/src/pages/cipp/settings/tabOptions.json @@ -26,5 +26,9 @@ { "label": "Licenses", "path": "/cipp/settings/licenses" + }, + { + "label": "Global Variables", + "path": "/cipp/settings/global-variables" } ] diff --git a/src/pages/tenant/administration/tenants/edit.js b/src/pages/tenant/administration/tenants/edit.js index 899039491ff9..b2e058e8c9d0 100644 --- a/src/pages/tenant/administration/tenants/edit.js +++ b/src/pages/tenant/administration/tenants/edit.js @@ -9,23 +9,15 @@ import { Box, Tab, Tabs, - CardContent, - Button, - SvgIcon, - Alert, - Typography, Grid, + Typography, } from "@mui/material"; import { CippCardTabPanel } from "/src/components/CippComponents/CippCardTabPanel"; -import { PlusIcon, TrashIcon, PencilIcon } from "@heroicons/react/24/outline"; -import { CippDataTable } from "/src/components/CippTable/CippDataTable"; -import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; -import { ApiPostCall } from "../../../../api/ApiCall"; import CippFormSection from "/src/components/CippFormPages/CippFormSection"; import CippPageCard from "../../../../components/CippCards/CippPageCard"; -import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog"; import { CippPropertyListCard } from "/src/components/CippCards/CippPropertyListCard"; import { getCippFormatting } from "../../../../utils/get-cipp-formatting"; +import CippCustomVariables from "/src/components/CippComponents/CippCustomVariables"; function tabProps(index) { return { @@ -41,24 +33,12 @@ const Page = () => { mode: "onChange", }); const [value, setValue] = useState(0); - const [customVariables, setCustomVariables] = useState([]); - const [openAddDialog, setOpenAddDialog] = useState(false); const tenantDetails = ApiGetCall({ url: id ? `/api/ListTenantDetails?tenantFilter=${id}` : null, queryKey: id ? `TenantProperties_${id}` : null, }); - const updateCustomVariablesApi = ApiPostCall({ - urlFromData: true, - relatedQueryKeys: [ - `CustomVariables_${id}`, - "TenantSelector", - "ListTenants-notAllTenants", - `TenantProperties-${id}`, - ], - }); - useEffect(() => { if (tenantDetails.isSuccess && tenantDetails.data) { formControl.reset({ @@ -77,70 +57,6 @@ const Page = () => { setValue(newValue); }; - const handleAddVariable = () => { - setOpenAddDialog(true); - }; - - const actions = [ - { - label: "Edit", - icon: ( - - - - ), - confirmText: "Update the custom variable '[RowKey]'?", - hideBulk: true, - setDefaultValues: true, - fields: [ - { - type: "textField", - name: "RowKey", - label: "Key", - placeholder: "Enter the key for the custom variable.", - required: true, - validators: { - validate: (value) => { - if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { - return true; - } else { - return "The variable name must not contain spaces or special characters."; - } - }, - }, - }, - { - type: "textField", - name: "Value", - label: "Value", - placeholder: "Enter the value for the custom variable.", - required: true, - }, - ], - type: "POST", - url: "/api/ExecCippReplacemap", - data: { - Action: "!AddEdit", - customerId: id, - }, - relatedQueryKeys: [`CustomVariables_${id}`], - }, - { - label: "Delete", - icon: , - confirmText: "Are you sure you want to delete [RowKey]?", - type: "POST", - url: "/api/ExecCippReplacemap", - data: { - Action: "Delete", - RowKey: "RowKey", - customerId: id, - }, - relatedQueryKeys: [`CustomVariables_${id}`], - multiPost: false, - }, - ]; - return ( { - - - Custom variables are key-value pairs that can be used to store additional information - about a tenant. These are applied to templates in standards using the format - %VariableName%. - - - - - } - > - Add Variable - - } - /> - - + - - setOpenAddDialog(false), - }} - title="Add Variable" - fields={[ - { - type: "textField", - name: "RowKey", - label: "Key", - placeholder: "Enter the key for the custom variable.", - required: true, - validators: { - validate: (value) => { - if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { - return true; - } else { - return "The variable name must not contain spaces or special characters."; - } - }, - }, - }, - { - type: "textField", - name: "Value", - label: "Value", - placeholder: "Enter the value for the custom variable.", - required: true, - }, - ]} - api={{ - type: "POST", - url: "/api/ExecCippReplacemap", - data: { Action: "AddEdit", customerId: id }, - relatedQueryKeys: [`CustomVariables_${id}`], - }} - /> ); }; From 07a9991edea1e6fd8f980657666084ddd15a168b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 13 Mar 2025 14:41:40 -0400 Subject: [PATCH 0367/1184] feat: full tenant group management --- .../CippAddEditTenantGroups.jsx | 1 + .../tenant/administration/tenants/edit.js | 18 +++++----- .../administration/tenants/groups/edit.js | 35 +++++-------------- .../administration/tenants/groups/index.js | 17 +++++++-- 4 files changed, 33 insertions(+), 38 deletions(-) diff --git a/src/components/CippComponents/CippAddEditTenantGroups.jsx b/src/components/CippComponents/CippAddEditTenantGroups.jsx index d37b85e663e9..b07999089947 100644 --- a/src/components/CippComponents/CippAddEditTenantGroups.jsx +++ b/src/components/CippComponents/CippAddEditTenantGroups.jsx @@ -12,6 +12,7 @@ const CippAddEditTenantGroups = ({ formControl, initialValues, title, backButton backButtonTitle={backButtonTitle} postUrl="/api/ExecTenantGroup" relatedQueryKeys={["TenantGroupListPage"]} + resetForm={false} customDataformatter={(values) => { return { ...values, diff --git a/src/pages/tenant/administration/tenants/edit.js b/src/pages/tenant/administration/tenants/edit.js index b2e058e8c9d0..f0bcae884d06 100644 --- a/src/pages/tenant/administration/tenants/edit.js +++ b/src/pages/tenant/administration/tenants/edit.js @@ -46,8 +46,8 @@ const Page = () => { Alias: tenantDetails?.data?.customProperties?.Alias ?? "", Groups: tenantDetails.data.Groups?.map((group) => ({ - label: group.groupName, - value: group.groupId, + label: group.Name, + value: group.Id, })) || [], }); } @@ -111,6 +111,7 @@ const Page = () => { groupId: group.value, groupName: group.label, })), + customerId: id, }; return formattedValues; }} @@ -133,12 +134,13 @@ const Page = () => { placeholder="Select the groups this tenant belongs to." formControl={formControl} multiple - options={ - tenantDetails.data?.availableGroups?.map((group) => ({ - label: group.groupName, - value: group.groupId, - })) || [] - } + api={{ + url: "/api/ListTenantGroups", + queryKey: "AllTenantGroups", + dataKey: "Results", + labelField: "Name", + valueField: "Id", + }} disabled={tenantDetails.isFetching} /> diff --git a/src/pages/tenant/administration/tenants/groups/edit.js b/src/pages/tenant/administration/tenants/groups/edit.js index 80a9156be96a..69c7d1787657 100644 --- a/src/pages/tenant/administration/tenants/groups/edit.js +++ b/src/pages/tenant/administration/tenants/groups/edit.js @@ -7,7 +7,6 @@ import { Box, Grid } from "@mui/material"; import CippPageCard from "/src/components/CippCards/CippPageCard"; import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; import CippAddEditTenantGroups from "/src/components/CippComponents/CippAddEditTenantGroups"; -import CippFormComponent from "../../../../../components/CippComponents/CippFormComponent"; const Page = () => { const router = useRouter(); @@ -33,34 +32,22 @@ const Page = () => { if (groupDetails.isSuccess && groupDetails.data) { formControl.reset({ groupId: id, - groupName: groupDetails?.data?.groupName ?? "", - groupDescription: groupDetails?.data?.groupDescription ?? "", - members: groupDetails?.data?.members?.map((member) => ({ - label: member.displayName, - value: member.customerId, - })) || [], + groupName: groupDetails?.data?.Results?.[0]?.Name ?? "", + groupDescription: groupDetails?.data?.Results?.[0]?.Description ?? "", + members: + groupDetails?.data?.Results?.[0]?.Members?.map((member) => ({ + label: member.displayName, + value: member.customerId, + })) || [], }); } }, [groupDetails.isSuccess, groupDetails.data]); - const handleUpdateGroup = (data) => { - updateGroupApi.mutate({ - url: "/api/EditTenantGroup", - data: { - Action: "AddEdit", - groupId: id, - groupName: data.groupName, - groupDescription: data.groupDescription, - membersToAdd: data.members.map((member) => member.value), - }, - }); - }; - return ( { -
    diff --git a/src/pages/tenant/administration/tenants/groups/index.js b/src/pages/tenant/administration/tenants/groups/index.js index 7026d8410a94..3807a77e41b5 100644 --- a/src/pages/tenant/administration/tenants/groups/index.js +++ b/src/pages/tenant/administration/tenants/groups/index.js @@ -4,19 +4,29 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { tabOptions } from "../tabOptions"; import { Edit } from "@mui/icons-material"; import { Button, SvgIcon } from "@mui/material"; -import { PlusIcon } from "@heroicons/react/24/outline"; +import { PlusIcon, TrashIcon } from "@heroicons/react/24/outline"; +import NextLink from "next/link"; const Page = () => { const pageTitle = "Tenant Groups"; - const simpleColumns = ["groupName", "groupDescription", "groupMembersCount"]; + const simpleColumns = ["Name", "Description", "Members"]; const actions = [ { label: "Edit Group", - link: "/tenant/administration/tenants/groups/edit?id=[groupId]", + link: "/tenant/administration/tenants/groups/edit?id=[Id]", icon: , }, + { + label: "Delete Group", + icon: , + url: "/api/ExecTenantGroup", + type: "POST", + data: { action: "Delete", groupId: "Id" }, + queryKey: "TenantGroupListPage", + confirmText: "Are you sure you want to delete [Name]?", + } ]; return ( @@ -33,6 +43,7 @@ const Page = () => { variant="contained" color="primary" size="small" + component={NextLink} href="/tenant/administration/tenants/groups/add" startIcon={ From cc05e9ee6fbe5679815686ec91bed02f344a18d9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 13 Mar 2025 14:41:45 -0400 Subject: [PATCH 0368/1184] Update CippCustomVariables.jsx --- src/components/CippComponents/CippCustomVariables.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippCustomVariables.jsx b/src/components/CippComponents/CippCustomVariables.jsx index 96d2780b9a8b..1fa8ffae1a56 100644 --- a/src/components/CippComponents/CippCustomVariables.jsx +++ b/src/components/CippComponents/CippCustomVariables.jsx @@ -121,8 +121,8 @@ const CippCustomVariables = ({ id }) => { { type: "textField", name: "RowKey", - label: "Key", - placeholder: "Enter the key for the custom variable.", + label: "Variable Name", + placeholder: "Enter the name for the custom variable without %.", required: true, validators: { validate: (value) => { From a0834b95cab0c1112006065c15e791a305813391 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 13 Mar 2025 14:47:34 -0400 Subject: [PATCH 0369/1184] fix build error --- .../tenant/administration/tenants/groups/index.js | 2 +- src/pages/tenant/administration/tenants/index.js | 2 +- src/pages/tenant/administration/tenants/tabOptions.js | 10 ---------- .../tenant/administration/tenants/tabOptions.json | 10 ++++++++++ 4 files changed, 12 insertions(+), 12 deletions(-) delete mode 100644 src/pages/tenant/administration/tenants/tabOptions.js create mode 100644 src/pages/tenant/administration/tenants/tabOptions.json diff --git a/src/pages/tenant/administration/tenants/groups/index.js b/src/pages/tenant/administration/tenants/groups/index.js index 3807a77e41b5..8d3e4c328ceb 100644 --- a/src/pages/tenant/administration/tenants/groups/index.js +++ b/src/pages/tenant/administration/tenants/groups/index.js @@ -1,7 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { TabbedLayout } from "/src/layouts/TabbedLayout"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import { tabOptions } from "../tabOptions"; +import tabOptions from "../tabOptions"; import { Edit } from "@mui/icons-material"; import { Button, SvgIcon } from "@mui/material"; import { PlusIcon, TrashIcon } from "@heroicons/react/24/outline"; diff --git a/src/pages/tenant/administration/tenants/index.js b/src/pages/tenant/administration/tenants/index.js index aef36a1a9e1b..2c6f3f479210 100644 --- a/src/pages/tenant/administration/tenants/index.js +++ b/src/pages/tenant/administration/tenants/index.js @@ -1,7 +1,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { TabbedLayout } from "/src/layouts/TabbedLayout"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import { tabOptions } from "./tabOptions"; +import tabOptions from "./tabOptions"; import { Edit } from "@mui/icons-material"; const Page = () => { diff --git a/src/pages/tenant/administration/tenants/tabOptions.js b/src/pages/tenant/administration/tenants/tabOptions.js deleted file mode 100644 index 3d33bcba9725..000000000000 --- a/src/pages/tenant/administration/tenants/tabOptions.js +++ /dev/null @@ -1,10 +0,0 @@ -export const tabOptions = [ - { - label: "Tenants", - path: "/tenant/administration/tenants", - }, - { - label: "Groups", - path: "/tenant/administration/tenants/groups", - }, -]; diff --git a/src/pages/tenant/administration/tenants/tabOptions.json b/src/pages/tenant/administration/tenants/tabOptions.json new file mode 100644 index 000000000000..66f0af8440a1 --- /dev/null +++ b/src/pages/tenant/administration/tenants/tabOptions.json @@ -0,0 +1,10 @@ +[ + { + "label": "Tenants", + "path": "/tenant/administration/tenants" + }, + { + "label": "Groups", + "path": "/tenant/administration/tenants/groups" + } +] From eb002dc0003378bd0c885cbfe0b47ae473e914d5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 13 Mar 2025 14:59:40 -0400 Subject: [PATCH 0370/1184] Update edit.js --- src/pages/tenant/administration/tenants/edit.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/tenant/administration/tenants/edit.js b/src/pages/tenant/administration/tenants/edit.js index f0bcae884d06..bbb5d726c91a 100644 --- a/src/pages/tenant/administration/tenants/edit.js +++ b/src/pages/tenant/administration/tenants/edit.js @@ -62,7 +62,7 @@ const Page = () => { title={ tenantDetails.isSuccess ? `Edit Tenant - ${ - tenantDetails?.data?.customProperties?.tenantAlias ?? tenantDetails?.data?.displayName + tenantDetails?.data?.customProperties?.Alias ?? tenantDetails?.data?.displayName }` : "Loading..." } @@ -106,7 +106,7 @@ const Page = () => { postUrl="/api/EditTenant" customDataformatter={(values) => { const formattedValues = { - tenantAlias: values.tenantAlias, + tenantAlias: values.Alias, tenantGroups: values.Groups.map((group) => ({ groupId: group.value, groupName: group.label, From 1b8d608be83ce74c50648bbb7016fb8cb51ddc89 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 13 Mar 2025 17:12:55 -0400 Subject: [PATCH 0371/1184] feat: support groups in CippFormTenantSelector --- .../CippAutocompleteGrouping.jsx | 16 +++++ .../CippComponents/CippCopyToClipboard.jsx | 1 + .../CippComponents/CippFormTenantSelector.jsx | 68 +++++++++++++++---- .../CippStandards/CippStandardsSideBar.jsx | 1 + .../CippTable/CippGraphExplorerFilter.js | 18 +---- src/utils/get-cipp-formatting.js | 23 ++++++- 6 files changed, 96 insertions(+), 31 deletions(-) create mode 100644 src/components/CippComponents/CippAutocompleteGrouping.jsx diff --git a/src/components/CippComponents/CippAutocompleteGrouping.jsx b/src/components/CippComponents/CippAutocompleteGrouping.jsx new file mode 100644 index 000000000000..2f65687278dc --- /dev/null +++ b/src/components/CippComponents/CippAutocompleteGrouping.jsx @@ -0,0 +1,16 @@ +import { styled, lighten, darken } from "@mui/system"; + +export const GroupHeader = styled("div")(({ theme }) => ({ + position: "sticky", + top: "-8px", + padding: "4px 10px", + color: theme.palette.primary.main, + backgroundColor: lighten(theme.palette.primary.light, 0.85), + ...theme.applyStyles("dark", { + backgroundColor: darken(theme.palette.primary.main, 0.8), + }), +})); + +export const GroupItems = styled("ul")({ + padding: 0, +}); \ No newline at end of file diff --git a/src/components/CippComponents/CippCopyToClipboard.jsx b/src/components/CippComponents/CippCopyToClipboard.jsx index f7ad974e1f42..8f2cefd686a4 100644 --- a/src/components/CippComponents/CippCopyToClipboard.jsx +++ b/src/components/CippComponents/CippCopyToClipboard.jsx @@ -31,6 +31,7 @@ export const CippCopyToClipBoard = (props) => { size="small" color="info" sx={{ mr: "0.25rem" }} + {...other} /> diff --git a/src/components/CippComponents/CippFormTenantSelector.jsx b/src/components/CippComponents/CippFormTenantSelector.jsx index 5f295dece517..68da5c028640 100644 --- a/src/components/CippComponents/CippFormTenantSelector.jsx +++ b/src/components/CippComponents/CippFormTenantSelector.jsx @@ -1,6 +1,8 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import { CippFormComponent } from "./CippFormComponent"; import { useSettings } from "../../hooks/use-settings"; +import { GroupHeader, GroupItems } from "../CippComponents/CippAutocompleteGrouping"; +import { ApiGetCall } from "/src/api/ApiCall"; export const CippFormTenantSelector = ({ formControl, @@ -12,6 +14,7 @@ export const CippFormTenantSelector = ({ required = true, disableClearable = true, removeOptions = [], + includeGroups = false, // New parameter ...other }) => { const validators = () => { @@ -23,6 +26,48 @@ export const CippFormTenantSelector = ({ return {}; }; const currentTenant = useSettings()?.currentTenant; + + // Fetch tenant list + const tenantList = ApiGetCall({ + url: allTenants ? "/api/ListTenants?AllTenantSelector=true" : "/api/ListTenants", + queryKey: allTenants ? "ListTenants-FormAllTenantSelector" : "ListTenants-FormnotAllTenants", + }); + + // Fetch tenant group list if includeGroups is true + const tenantGroupList = ApiGetCall({ + url: "/api/ListTenantGroups", + data: { AllTenantSelector: true }, + queryKey: "TenantGroupSelector", + waiting: includeGroups, + }); + + const [options, setOptions] = useState([]); + + useEffect(() => { + if (tenantList.isSuccess && (!includeGroups || tenantGroupList.isSuccess)) { + const tenantData = tenantList.data.map((tenant) => ({ + value: tenant[valueField], + label: `${tenant.displayName} (${tenant.defaultDomainName})`, + type: "Tenant", + addedField: { + defaultDomainName: tenant.defaultDomainName, + displayName: tenant.displayName, + customerId: tenant.customerId, + }, + })); + + const groupData = includeGroups + ? tenantGroupList?.data?.Results?.map((group) => ({ + value: group.Id, + label: group.Name, + type: "Group", + })) + : []; + + setOptions([...tenantData, ...groupData]); + } + }, [tenantList.isSuccess, tenantGroupList.isSuccess, includeGroups]); + return ( `${option.displayName} (${option.defaultDomainName})`, - valueField: valueField, - addedField: { - defaultDomainName: "defaultDomainName", - displayName: "displayName", - customerId: "customerId", - }, - }} creatable={false} multiple={type === "single" ? false : true} disableClearable={disableClearable} validators={validators} removeOptions={removeOptions} + options={options} + groupBy={(option) => option.type} + renderGroup={(params) => ( +
  • + {includeGroups && {params.group}} + {includeGroups ? {params.children} : params.children} +
  • + )} {...other} /> ); diff --git a/src/components/CippStandards/CippStandardsSideBar.jsx b/src/components/CippStandards/CippStandardsSideBar.jsx index 2c87c7562fe8..705add71d3d1 100644 --- a/src/components/CippStandards/CippStandardsSideBar.jsx +++ b/src/components/CippStandards/CippStandardsSideBar.jsx @@ -132,6 +132,7 @@ const CippStandardsSideBar = ({ label="Included Tenants" formControl={formControl} required={true} + includeGroups={true} /> {watchForm.tenantFilter?.some((tenant) => tenant.value === "AllTenants") && ( <> diff --git a/src/components/CippTable/CippGraphExplorerFilter.js b/src/components/CippTable/CippGraphExplorerFilter.js index f8ecb6af6927..ecab21dd5691 100644 --- a/src/components/CippTable/CippGraphExplorerFilter.js +++ b/src/components/CippTable/CippGraphExplorerFilter.js @@ -20,22 +20,8 @@ import { CippOffCanvas } from "../CippComponents/CippOffCanvas"; import { CippCodeBlock } from "../CippComponents/CippCodeBlock"; import CippSchedulerForm from "../CippFormPages/CippSchedulerForm"; import defaultPresets from "../../data/GraphExplorerPresets"; -import { lighten, darken, styled, Grid, Stack } from "@mui/system"; - -const GroupHeader = styled("div")(({ theme }) => ({ - position: "sticky", - top: "-8px", - padding: "4px 10px", - color: theme.palette.primary.main, - backgroundColor: lighten(theme.palette.primary.light, 0.85), - ...theme.applyStyles("dark", { - backgroundColor: darken(theme.palette.primary.main, 0.8), - }), -})); - -const GroupItems = styled("ul")({ - padding: 0, -}); +import { Grid, Stack } from "@mui/system"; +import { GroupHeader, GroupItems } from "../CippComponents/CippAutocompleteGrouping"; const CippGraphExplorerFilter = ({ endpointFilter = "", diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 91cb602d0c4c..926c523e450f 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -6,6 +6,10 @@ import { MailOutline, Shield, Description, + Group, + MeetingRoom, + GroupWork, + GroupOutlined, } from "@mui/icons-material"; import { Chip, Link, SvgIcon } from "@mui/material"; import { Box } from "@mui/system"; @@ -17,7 +21,13 @@ import { CippLocationDialog } from "../components/CippComponents/CippLocationDia import { isoDuration, en } from "@musement/iso-duration"; import { CippTimeAgo } from "../components/CippComponents/CippTimeAgo"; import { getCippRoleTranslation } from "./get-cipp-role-translation"; -import { CogIcon, ServerIcon, UserIcon, UsersIcon } from "@heroicons/react/24/outline"; +import { + BuildingOfficeIcon, + CogIcon, + ServerIcon, + UserIcon, + UsersIcon, +} from "@heroicons/react/24/outline"; import { getCippTranslation } from "./get-cipp-translation"; import DOMPurify from "dompurify"; import { getSignInErrorCodeTranslation } from "./get-cipp-signin-errorcode-translation"; @@ -208,6 +218,17 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { + +
    + ) : item?.type === "Tenant" ? ( + + + + ) : null + } type="chip" /> )); From cb50bb054dcc2ef645bafe074b12328b7743cfa7 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 13 Mar 2025 19:25:40 -0400 Subject: [PATCH 0372/1184] Update offboarding.js --- src/pages/tenant/gdap-management/offboarding.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tenant/gdap-management/offboarding.js b/src/pages/tenant/gdap-management/offboarding.js index 64db45f06b4f..57a6d31f381b 100644 --- a/src/pages/tenant/gdap-management/offboarding.js +++ b/src/pages/tenant/gdap-management/offboarding.js @@ -53,7 +53,7 @@ const Page = () => { data: { Endpoint: "servicePrincipals", TenantFilter: tenantId?.value, - $filter: `appOwnerOrganizationId eq %tenantid%`, + $filter: `appOwnerOrganizationId eq %partnertenantid%`, $select: "id,displayName,appId,appOwnerOrganizationId", $count: true, }, From 3884750bddc35815d1eac5849d71752a26dad0d3 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 13 Mar 2025 20:25:41 -0400 Subject: [PATCH 0373/1184] reserved variables --- .../CippComponents/CippCustomVariables.jsx | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/components/CippComponents/CippCustomVariables.jsx b/src/components/CippComponents/CippCustomVariables.jsx index 1fa8ffae1a56..b7395e1aaece 100644 --- a/src/components/CippComponents/CippCustomVariables.jsx +++ b/src/components/CippComponents/CippCustomVariables.jsx @@ -14,6 +14,24 @@ const CippCustomVariables = ({ id }) => { relatedQueryKeys: [`CustomVariables_${id}`], }); + const reservedVariables = [ + "tenantid", + "tenantname", + "tenantfilter", + "partnertenantid", + "samappid", + ]; + + const validateVariableName = (value) => { + if (reservedVariables.includes(value.toLowerCase())) { + return "The variable name is reserved and cannot be used."; + } else if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { + return true; + } else { + return "The variable name must not contain spaces or special characters."; + } + }; + const actions = [ { label: "Edit", @@ -29,18 +47,10 @@ const CippCustomVariables = ({ id }) => { { type: "textField", name: "RowKey", - label: "Key", + label: "Variable Name", placeholder: "Enter the key for the custom variable.", required: true, - validators: { - validate: (value) => { - if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { - return true; - } else { - return "The variable name must not contain spaces or special characters."; - } - }, - }, + validators: validateVariableName, }, { type: "textField", @@ -124,15 +134,7 @@ const CippCustomVariables = ({ id }) => { label: "Variable Name", placeholder: "Enter the name for the custom variable without %.", required: true, - validators: { - validate: (value) => { - if (!value.includes(" ") && !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(value)) { - return true; - } else { - return "The variable name must not contain spaces or special characters."; - } - }, - }, + validators: validateVariableName, }, { type: "textField", From 7457fd903833bf21eba19b09b5a4ba9d9cc0adc8 Mon Sep 17 00:00:00 2001 From: Integrated Solutions <159874617+isgq-github01@users.noreply.github.com> Date: Fri, 14 Mar 2025 16:52:55 +1000 Subject: [PATCH 0374/1184] Fixed Intune capitalisation on Devices page Signed-off-by: Integrated Solutions <159874617+isgq-github01@users.noreply.github.com> --- src/pages/endpoint/MEM/devices/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/endpoint/MEM/devices/index.js b/src/pages/endpoint/MEM/devices/index.js index 1cbe998d8d92..17197aff1e9b 100644 --- a/src/pages/endpoint/MEM/devices/index.js +++ b/src/pages/endpoint/MEM/devices/index.js @@ -23,7 +23,7 @@ const Page = () => { const actions = [ { - label: "View in InTune", + label: "View in Intune", link: `https://intune.microsoft.com/${tenantFilter}/#view/Microsoft_Intune_Devices/DeviceSettingsMenuBlade/~/overview/mdmDeviceId/[id]`, color: "info", icon: , From f868a3a3a1097c05480241d128949039a36adff7 Mon Sep 17 00:00:00 2001 From: Integrated Solutions <159874617+isgq-github01@users.noreply.github.com> Date: Fri, 14 Mar 2025 16:53:54 +1000 Subject: [PATCH 0375/1184] Fixed Intune capitalisation on Device Score report Signed-off-by: Integrated Solutions <159874617+isgq-github01@users.noreply.github.com> --- src/pages/endpoint/reports/analyticsdevicescore/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/endpoint/reports/analyticsdevicescore/index.js b/src/pages/endpoint/reports/analyticsdevicescore/index.js index 16702d203621..5660e0fbf612 100644 --- a/src/pages/endpoint/reports/analyticsdevicescore/index.js +++ b/src/pages/endpoint/reports/analyticsdevicescore/index.js @@ -10,7 +10,7 @@ const Page = () => { // Actions from the source file const actions = [ { - label: "View in InTune", + label: "View in Intune", link: `https://intune.microsoft.com/${tenantFilter}/#view/Microsoft_Intune_Devices/DeviceSettingsMenuBlade/~/overview/mdmDeviceId/[id]`, color: "info", icon: , From d5c76a828dfe7ac11344347a41916ee964488d01 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 14 Mar 2025 12:47:15 -0400 Subject: [PATCH 0376/1184] feat: custom data management - tab for Schema Extensions add/edit/delete --- src/layouts/config.js | 5 + .../cipp/custom-data/directory-extensions.js | 7 + .../cipp/custom-data/schema-extensions/add.js | 238 ++++++++++++++++++ .../custom-data/schema-extensions/index.js | 159 ++++++++++++ src/pages/cipp/custom-data/tabOptions.json | 6 + 5 files changed, 415 insertions(+) create mode 100644 src/pages/cipp/custom-data/directory-extensions.js create mode 100644 src/pages/cipp/custom-data/schema-extensions/add.js create mode 100644 src/pages/cipp/custom-data/schema-extensions/index.js create mode 100644 src/pages/cipp/custom-data/tabOptions.json diff --git a/src/layouts/config.js b/src/layouts/config.js index 812b5639f999..6f8ba4e2315b 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -466,6 +466,11 @@ export const nativeMenuItems = [ { title: "Logbook", path: "/cipp/logs", roles: ["editor", "admin", "superadmin"] }, { title: "SAM Setup Wizard", path: "/onboarding", roles: ["admin", "superadmin"] }, { title: "Integrations", path: "/cipp/integrations", roles: ["admin", "superadmin"] }, + { + title: "Custom Data", + path: "/cipp/custom-data/schema-extensions", + roles: ["admin", "superadmin"] + }, { title: "Advanced", roles: ["superadmin"], diff --git a/src/pages/cipp/custom-data/directory-extensions.js b/src/pages/cipp/custom-data/directory-extensions.js new file mode 100644 index 000000000000..9e354d35a112 --- /dev/null +++ b/src/pages/cipp/custom-data/directory-extensions.js @@ -0,0 +1,7 @@ +import SchemaExtensions from "./schema-extensions"; + +const components = { + "schema-extensions": SchemaExtensions +}; + +export default components; diff --git a/src/pages/cipp/custom-data/schema-extensions/add.js b/src/pages/cipp/custom-data/schema-extensions/add.js new file mode 100644 index 000000000000..9b1706290cdd --- /dev/null +++ b/src/pages/cipp/custom-data/schema-extensions/add.js @@ -0,0 +1,238 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { useForm, useWatch, useFormState } from "react-hook-form"; +import { ApiPostCall } from "/src/api/ApiCall"; +import { useRouter } from "next/router"; +import { + Box, + Button, + Stack, + IconButton, + CardContent, + Typography, + Divider, + CardActions, +} from "@mui/material"; +import { AddCircle, RemoveCircle } from "@mui/icons-material"; + +import CippPageCard from "/src/components/CippCards/CippPageCard"; +import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; + +const availableTargetTypes = [ + { value: "user", label: "User" }, + { value: "group", label: "Group" }, + { value: "administrativeUnit", label: "Administrative Unit" }, + { value: "contact", label: "Contact" }, + { value: "device", label: "Device" }, + { value: "event", label: "Event (User and Group Calendars)" }, + { value: "message", label: "Message" }, + { value: "organization", label: "Organization" }, + { value: "post", label: "Post" }, +]; + +const Page = () => { + const router = useRouter(); + const formControl = useForm({ + mode: "onChange", + defaultValues: { + properties: [], + status: "InDevelopment", + }, + }); + + const formState = useFormState({ control: formControl.control }); + + const addSchemaApi = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: ["SchemaExtensionsListPage"], + }); + + const handleAddSchema = (data) => { + console.log(data); + if (!data.properties || data.properties.length === 0) { + formControl.setError("properties", { + type: "manual", + message: "At least one property must be added.", + }); + return; + } + + addSchemaApi.mutate({ + url: "/api/ExecCustomData", + data: { + Action: "AddSchemaExtension", + schemaExtension: { + id: data.id, + description: data.description, + targetTypes: data.targetTypes.map((targetType) => targetType.value), + status: data.status, + properties: data.properties, + }, + }, + }); + }; + + const properties = useWatch({ control: formControl.control, name: "properties" }); + + const addProperty = () => { + formControl.setValue("properties", [...properties, { name: "", type: null }]); + if (formControl.formState.errors.properties) { + formControl.clearErrors("properties"); + } + }; + + const removeProperty = (index) => { + const updatedProperties = properties.filter((_, i) => i !== index); + formControl.setValue("properties", updatedProperties); + }; + + const handlePropertyChange = (index, field, value) => { + const updatedProperties = properties.map((property, i) => + i === index ? { ...property, [field]: value } : property + ); + formControl.setValue("properties", updatedProperties); + }; + + const formFields = [ + { + name: "id", + label: "Schema ID", + type: "textField", + required: true, + placeholder: + "Enter a schema id (e.g. cippUser). The prefix is generated automatically after creation.", + }, + { + name: "description", + label: "Description", + type: "textField", + required: true, + placeholder: "Enter a description for the schema extension", + }, + { + name: "status", + label: "Status", + type: "select", + required: true, + placeholder: "Select a status for the schema extensions (e.g. InDevelopment, Available)", + options: [ + { value: "InDevelopment", label: "In Development" }, + { value: "Available", label: "Available" }, + ], + }, + { + name: "targetTypes", + label: "Target Types", + type: "autoComplete", + placeholder: "Select the directory object target types for the schema extension", + required: true, + multiple: true, + options: availableTargetTypes, + validate: (value) => { + if (value.length > 0) return true; + return "Please select at least one target type."; + }, + }, + ]; + + const propertyTypeOptions = [ + { value: "Binary", label: "Binary (256 bytes max)" }, + { value: "Boolean", label: "Boolean" }, + { value: "DateTime", label: "DateTime (ISO 8601, UTC)" }, + { value: "Integer", label: "Integer (32-bit)" }, + { value: "String", label: "String (256 characters max)" }, + ]; + + return ( + + + + + + + Schema Details + + {formFields.map((field, index) => ( + + ))} + + Properties + + {properties && + properties.map((property, index) => ( + + + handlePropertyChange(index, "name", e.target.value)} + required={true} + /> + + + handlePropertyChange(index, "type", e.target.value)} + options={propertyTypeOptions} + required={true} + validate={(value) => { + if (value) return true; + return "Please select a property type."; + }} + /> + + removeProperty(index)}> + + + + ))} + + + {formControl.formState.errors.properties && ( + + {formControl.formState.errors.properties.message} + + )} + + + + + + + + + + + + + + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; diff --git a/src/pages/cipp/custom-data/schema-extensions/index.js b/src/pages/cipp/custom-data/schema-extensions/index.js new file mode 100644 index 000000000000..07b185e5ce21 --- /dev/null +++ b/src/pages/cipp/custom-data/schema-extensions/index.js @@ -0,0 +1,159 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Alert, Button, Link, SvgIcon, Typography } from "@mui/material"; +import { Add, Block, CheckCircleOutline, Sync } from "@mui/icons-material"; +import tabOptions from "../tabOptions"; +import { TrashIcon } from "@heroicons/react/24/outline"; +import NextLink from "next/link"; + +const Page = () => { + const pageTitle = "Schema Extensions"; + + // Columns for the table + const columns = [ + "id", // Schema ID + "status", // Status + "description", // Description + "targetTypes", // Target Types + "properties", // Properties + ]; + + const actions = [ + { + label: "Add Property", + icon: , + url: "/api/ExecCustomData?Action=AddSchemaProperty", + type: "POST", + data: { + id: "id", + }, + confirmText: ( + <> + Add a new property to the schema. + Properties cannot be deleted once they are created. + + ), + fields: [ + { + name: "name", + label: "Property Name", + type: "textField", + required: true, + }, + { + name: "type", + label: "Property Type", + type: "select", + required: true, + options: [ + { value: "Binary", label: "Binary (256 bytes max)" }, + { value: "Boolean", label: "Boolean" }, + { value: "DateTime", label: "DateTime (ISO 8601, UTC)" }, + { value: "Integer", label: "Integer (32-bit)" }, + { value: "String", label: "String (256 characters max)" }, + ], + creatable: false, + validate: (value) => { + if (value) return true; + return "Please select a property type."; + }, + }, + ], + hideBulk: true, + condition: (row) => row.status !== "Deprecated", + }, + { + label: "Set to Available", + icon: , + url: "/api/ExecCustomData?Action=ChangeSchemaState", + type: "POST", + data: { + id: "id", + status: "!Available", + }, + confirmText: + "Set [id] to Available. You will no longer be able to delete properties or the schema.", + condition: (row) => row.status === "InDevelopment", + }, + { + label: "Set to Deprecated", + icon: , + url: "/api/ExecCustomData?Action=ChangeSchemaState", + type: "POST", + data: { + id: "id", + status: "!Deprecated", + }, + confirmText: "Set [id] to Deprecated. This is a permanent action and cannot be undone.", + condition: (row) => row.status === "Available", + }, + { + label: "Delete Schema", + icon: , + url: "/api/ExecCustomData?Action=DeleteSchema", + type: "POST", + data: { + id: "id", + }, + confirmText: "Are you sure you want to delete [id]?", + condition: (row) => row.status === "InDevelopment", + }, + ]; + + return ( + <> + + + Schema extensions + {" "} + allow you to add custom properties to Microsoft Entra directory objects. +
      +
    • Schema extensions can only be Deprecated once they are set to Available.
    • +
    • Properties cannot be deleted once they are created.
    • +
    • + There is a limit of 100 extension values per resource instance (directory objects + only) +
    • +
    • There is a limit of 5 total schema extensions.
    • +
    + + } + cardButton={ + + } + tenantInTitle={false} + apiUrl="/api/ExecCustomData?Action=ListSchemaExtensions" + apiDataKey="Results" + simpleColumns={columns} + filters={[]} + actions={actions} + /> + + ); +}; + +Page.getLayout = (page) => ( + + {page} + +); + +export default Page; diff --git a/src/pages/cipp/custom-data/tabOptions.json b/src/pages/cipp/custom-data/tabOptions.json new file mode 100644 index 000000000000..ba91fb751c3e --- /dev/null +++ b/src/pages/cipp/custom-data/tabOptions.json @@ -0,0 +1,6 @@ +[ + { + "label": "Schema Extensions", + "path": "/cipp/custom-data/schema-extensions" + } +] From 7c2499f4f28a2bd60bc358b7ca6c12df75f78871 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 14 Mar 2025 13:26:59 -0400 Subject: [PATCH 0377/1184] feat: directory extension support --- src/layouts/config.js | 2 +- .../cipp/custom-data/directory-extensions.js | 7 - .../custom-data/directory-extensions/add.js | 147 ++++++++++++++++++ .../custom-data/directory-extensions/index.js | 85 ++++++++++ .../cipp/custom-data/schema-extensions/add.js | 2 + src/pages/cipp/custom-data/tabOptions.json | 4 + 6 files changed, 239 insertions(+), 8 deletions(-) delete mode 100644 src/pages/cipp/custom-data/directory-extensions.js create mode 100644 src/pages/cipp/custom-data/directory-extensions/add.js create mode 100644 src/pages/cipp/custom-data/directory-extensions/index.js diff --git a/src/layouts/config.js b/src/layouts/config.js index 6f8ba4e2315b..ccf67d86e9ba 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -468,7 +468,7 @@ export const nativeMenuItems = [ { title: "Integrations", path: "/cipp/integrations", roles: ["admin", "superadmin"] }, { title: "Custom Data", - path: "/cipp/custom-data/schema-extensions", + path: "/cipp/custom-data/directory-extensions", roles: ["admin", "superadmin"] }, { diff --git a/src/pages/cipp/custom-data/directory-extensions.js b/src/pages/cipp/custom-data/directory-extensions.js deleted file mode 100644 index 9e354d35a112..000000000000 --- a/src/pages/cipp/custom-data/directory-extensions.js +++ /dev/null @@ -1,7 +0,0 @@ -import SchemaExtensions from "./schema-extensions"; - -const components = { - "schema-extensions": SchemaExtensions -}; - -export default components; diff --git a/src/pages/cipp/custom-data/directory-extensions/add.js b/src/pages/cipp/custom-data/directory-extensions/add.js new file mode 100644 index 000000000000..7238792aa4dd --- /dev/null +++ b/src/pages/cipp/custom-data/directory-extensions/add.js @@ -0,0 +1,147 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { useForm, useFormState } from "react-hook-form"; +import { ApiPostCall } from "/src/api/ApiCall"; +import { useRouter } from "next/router"; +import { + Box, + Button, + Stack, + CardContent, + Typography, + Divider, + CardActions, +} from "@mui/material"; + +import CippPageCard from "/src/components/CippCards/CippPageCard"; +import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; + +const availableTargetObjects = [ + { value: "User", label: "User" }, + { value: "Group", label: "Group" }, + { value: "AdministrativeUnit", label: "Administrative Unit" }, + { value: "Application", label: "Application" }, + { value: "Device", label: "Device" }, + { value: "Organization", label: "Organization" }, +]; + +const Page = () => { + const router = useRouter(); + const formControl = useForm({ + mode: "onChange", + defaultValues: { + isMultiValued: false, + targetObjects: [], + }, + }); + + const formState = useFormState({ control: formControl.control }); + + const addDirectoryExtensionApi = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: ["DirectoryExtensionsListPage"], + }); + + const handleAddDirectoryExtension = (data) => { + addDirectoryExtensionApi.mutate({ + url: "/api/ExecCustomData", + data: { + Action: "AddDirectoryExtension", + name: data.name, + dataType: data.dataType, + isMultiValued: data.isMultiValued, + targetObjects: data.targetObjects.map((targetObject) => targetObject.value), + }, + }); + }; + + const formFields = [ + { + name: "name", + label: "Extension Name", + type: "textField", + required: true, + placeholder: "Enter a unique name for the directory extension", + }, + { + name: "dataType", + label: "Data Type", + type: "select", + required: true, + placeholder: "Select the data type for the directory extension", + options: [ + { value: "Binary", label: "Binary (256 bytes max)" }, + { value: "Boolean", label: "Boolean" }, + { value: "DateTime", label: "DateTime (ISO 8601, UTC)" }, + { value: "Integer", label: "Integer (32-bit)" }, + { value: "LargeInteger", label: "LargeInteger (64-bit)" }, + { value: "String", label: "String (256 characters max)" }, + ], + }, + { + name: "isMultiValued", + label: "Is Multi-Valued", + type: "switch", + required: false, + }, + { + name: "targetObjects", + label: "Target Objects", + type: "autoComplete", + placeholder: "Select the directory objects that can use this extension", + required: true, + multiple: true, + options: availableTargetObjects, + validate: (value) => { + if (value.length > 0) return true; + return "Please select at least one target object."; + }, + creatable: false, + }, + ]; + + return ( + + + + + + + Directory Extension Details + + {formFields.map((field, index) => ( + + ))} + + + + + + + + + + + + + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; diff --git a/src/pages/cipp/custom-data/directory-extensions/index.js b/src/pages/cipp/custom-data/directory-extensions/index.js new file mode 100644 index 000000000000..ee10f60fd8e6 --- /dev/null +++ b/src/pages/cipp/custom-data/directory-extensions/index.js @@ -0,0 +1,85 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Alert, Button, Link, SvgIcon, Typography } from "@mui/material"; +import { Add } from "@mui/icons-material"; +import tabOptions from "../tabOptions"; +import NextLink from "next/link"; +import { TrashIcon } from "@heroicons/react/24/outline"; + +const Page = () => { + const pageTitle = "Directory Extensions"; + + // Columns for the table + const columns = [ + "name", // Extension ID + "dataType", // Data Type + "isMultiValued", // Multi-Valued + "targetObjects", // Target Objects + ]; + + const actions = [ + { + label: "Delete Directory Extension", + icon: , + url: "/api/ExecCustomData?Action=DeleteDirectoryExtension", + type: "POST", + data: { + name: "name", + id: "id", + }, + confirmText: "Are you sure you want to delete the directory extension '[name]'?", + }, + ]; + + return ( + <> + + + Directory extensions + {" "} + allow you to add custom properties to Microsoft Entra directory objects. +
      +
    • Directory extensions must have unique names.
    • +
    • Ensure the data type matches the intended usage.
    • +
    + + } + cardButton={ + + } + tenantInTitle={false} + apiUrl="/api/ExecCustomData?Action=ListDirectoryExtensions" + apiDataKey="Results" + simpleColumns={columns} + filters={[]} + actions={actions} + /> + + ); +}; + +Page.getLayout = (page) => ( + + {page} + +); + +export default Page; diff --git a/src/pages/cipp/custom-data/schema-extensions/add.js b/src/pages/cipp/custom-data/schema-extensions/add.js index 9b1706290cdd..208e332c3773 100644 --- a/src/pages/cipp/custom-data/schema-extensions/add.js +++ b/src/pages/cipp/custom-data/schema-extensions/add.js @@ -119,6 +119,7 @@ const Page = () => { { value: "InDevelopment", label: "In Development" }, { value: "Available", label: "Available" }, ], + creatable: false, }, { name: "targetTypes", @@ -128,6 +129,7 @@ const Page = () => { required: true, multiple: true, options: availableTargetTypes, + creatable: false, validate: (value) => { if (value.length > 0) return true; return "Please select at least one target type."; diff --git a/src/pages/cipp/custom-data/tabOptions.json b/src/pages/cipp/custom-data/tabOptions.json index ba91fb751c3e..59bca4062ad4 100644 --- a/src/pages/cipp/custom-data/tabOptions.json +++ b/src/pages/cipp/custom-data/tabOptions.json @@ -1,4 +1,8 @@ [ + { + "label": "Directory Extensions", + "path": "/cipp/custom-data/directory-extensions" + }, { "label": "Schema Extensions", "path": "/cipp/custom-data/schema-extensions" From ab451dcbd5ad41c51ba8eb36e6591fd4c1682dd5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 14 Mar 2025 13:30:26 -0400 Subject: [PATCH 0378/1184] Update index.js --- .../cipp/custom-data/directory-extensions/index.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/pages/cipp/custom-data/directory-extensions/index.js b/src/pages/cipp/custom-data/directory-extensions/index.js index ee10f60fd8e6..42317151ffec 100644 --- a/src/pages/cipp/custom-data/directory-extensions/index.js +++ b/src/pages/cipp/custom-data/directory-extensions/index.js @@ -47,7 +47,15 @@ const Page = () => { allow you to add custom properties to Microsoft Entra directory objects.
    • Directory extensions must have unique names.
    • -
    • Ensure the data type matches the intended usage.
    • +
    • There is a limit of 100 extension values per resource instance
    • +
    • + + Considerations for using directory extensions + +
    } From 9b3c5f78958c1c3758ce9cd8452c3d8c01d795fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Sat, 15 Mar 2025 08:40:24 +0100 Subject: [PATCH 0379/1184] feat: add startup message for CIPP Dev Emulators --- Tools/Start-CippDevEmulators.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tools/Start-CippDevEmulators.ps1 b/Tools/Start-CippDevEmulators.ps1 index d171c0a1eaaf..74de265cc59a 100644 --- a/Tools/Start-CippDevEmulators.ps1 +++ b/Tools/Start-CippDevEmulators.ps1 @@ -1,6 +1,7 @@ Get-Command wt -ErrorAction Stop | Out-Null Get-Process node -ErrorAction SilentlyContinue | Stop-Process -ErrorAction SilentlyContinue $Path = (Get-Item $PSScriptRoot).Parent.Parent.FullName +Write-Host "CIPP Dev Emulators starting in $Path" -ForegroundColor Green pwsh -file (Join-Path $PSScriptRoot 'Start-CippDevInstallation.ps1') @@ -11,8 +12,7 @@ if (Test-Path (Join-Path $Path 'CIPP-API-Processor')) { } if ($Process -eq 'y') { - wt --title CIPP`; new-tab --title 'Azurite' -d $Path pwsh -c azurite`; new-tab --title 'FunctionApp' -d $Path\CIPP-API pwsh -c func start`; new-tab --title 'CIPP Frontend' -d $Path\CIPP pwsh -c npm run dev`; new-tab --title 'SWA' -d $Path\CIPP pwsh -c npm run start-swa`; new-tab --title 'CIPP-API-Processor' -d $Path\CIPP-API-Processor pwsh -c func start --port 7072 + wt --title CIPP`; new-tab --title 'Azurite' -d $Path pwsh -c azurite`; new-tab --title 'FunctionApp' -d $Path\CIPP-API pwsh -c func start`; new-tab --title 'CIPP Frontend' -d $Path\CIPP pwsh -c npm run dev`; new-tab --title 'SWA' -d $Path\CIPP pwsh -c npm run start-swa`; new-tab --title 'CIPP-API-Processor' -d $Path\CIPP-API-Processor pwsh -c func start --port 7072 } else { - wt --title CIPP`; new-tab --title 'Azurite' -d $Path pwsh -c azurite`; new-tab --title 'FunctionApp' -d $Path\CIPP-API pwsh -c func start`; new-tab --title 'CIPP Frontend' -d $Path\CIPP pwsh -c npm run dev`; new-tab --title 'SWA' -d $Path\CIPP pwsh -c npm run start-swa + wt --title CIPP`; new-tab --title 'Azurite' -d $Path pwsh -c azurite`; new-tab --title 'FunctionApp' -d $Path\CIPP-API pwsh -c func start`; new-tab --title 'CIPP Frontend' -d $Path\CIPP pwsh -c npm run dev`; new-tab --title 'SWA' -d $Path\CIPP pwsh -c npm run start-swa } - From b974beee54d9dc0060751a81189cdbea2be22087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Sat, 15 Mar 2025 12:45:32 +0100 Subject: [PATCH 0380/1184] feat: add support for allowed senders/Allowlist --- src/data/standards.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 218f6d6439a3..952616f3853a 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1150,6 +1150,13 @@ "value": "disabled" } ] + }, + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "label": "Enter allowed senders(domain.com, *.domain.com or test@domain.com)", + "name": "standards.SpoofWarn.AllowListAdd" } ], "label": "Enable or disable 'external' warning in Outlook", @@ -1189,6 +1196,7 @@ { "type": "autoComplete", "multiple": false, + "creatable": false, "label": "Select value", "name": "standards.TeamsMeetingsByDefault.state", "options": [ From 0672435107bb90ae6ee7e8e347b680c8b25088dc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 15 Mar 2025 13:47:30 -0400 Subject: [PATCH 0381/1184] fix: app permission builder tweaks --- .../CippComponents/CippAppPermissionBuilder.jsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/CippComponents/CippAppPermissionBuilder.jsx b/src/components/CippComponents/CippAppPermissionBuilder.jsx index c872e5e8389a..1b224e5bfd6c 100644 --- a/src/components/CippComponents/CippAppPermissionBuilder.jsx +++ b/src/components/CippComponents/CippAppPermissionBuilder.jsx @@ -528,8 +528,8 @@ const CippAppPermissionBuilder = ({ const handleSavePermissions = () => { savePermissionChanges( servicePrincipal.appId, - appTable.map((perm) => ({ id: perm.id, value: perm.value })), - delegatedTable.map((perm) => ({ id: perm.id, value: perm.value })) + appTable?.map((perm) => ({ id: perm.id, value: perm.value })) ?? [], + delegatedTable?.map((perm) => ({ id: perm.id, value: perm.value })) ?? [] ); }; @@ -574,8 +574,8 @@ const CippAppPermissionBuilder = ({ label="Application Permissions" name={`Permissions.${servicePrincipal.appId}.applicationPermissions`} isFetching={spInfoFetching} - options={spInfo?.Results?.appRoles - ?.filter((role) => !appTable.find((perm) => perm.id === role.id)) + options={(spInfo?.Results?.appRoles || []) + .filter((role) => !appTable?.find((perm) => perm.id === role.id)) .map((role) => ({ label: role.value, value: role.id, @@ -636,8 +636,8 @@ const CippAppPermissionBuilder = ({ label="Delegated Permissions" name={`Permissions.${servicePrincipal.appId}.delegatedPermissions`} isFetching={spInfoFetching} - options={spInfo?.Results?.publishedPermissionScopes - ?.filter((scope) => !delegatedTable.find((perm) => perm.id === scope.id)) + options={(spInfo?.Results?.publishedPermissionScopes || []) + .filter((scope) => !delegatedTable?.find((perm) => perm.id === scope.id)) .map((scope) => ({ label: scope.value, value: scope.id, From ba5e3d0c906618b605a70b262196c804b23a2bc3 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 15 Mar 2025 18:08:32 -0400 Subject: [PATCH 0382/1184] fix: standards null safety --- src/components/CippStandards/CippStandardAccordion.jsx | 2 +- src/components/CippStandards/CippStandardsSideBar.jsx | 6 +++--- src/pages/tenant/standards/template.jsx | 10 ++++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx index a84eb5e1435b..fdb538a4dec0 100644 --- a/src/components/CippStandards/CippStandardAccordion.jsx +++ b/src/components/CippStandards/CippStandardAccordion.jsx @@ -13,7 +13,7 @@ import { Tooltip, Chip, } from "@mui/material"; -import { ExpandMore as ExpandMoreIcon, Delete, Add, Public, TableChart } from "@mui/icons-material"; +import { ExpandMore as ExpandMoreIcon, Delete, Add, Public } from "@mui/icons-material"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { useWatch } from "react-hook-form"; import _ from "lodash"; diff --git a/src/components/CippStandards/CippStandardsSideBar.jsx b/src/components/CippStandards/CippStandardsSideBar.jsx index 705add71d3d1..2311a25d12c9 100644 --- a/src/components/CippStandards/CippStandardsSideBar.jsx +++ b/src/components/CippStandards/CippStandardsSideBar.jsx @@ -82,8 +82,8 @@ const CippStandardsSideBar = ({ watchForm.standards && Object.keys(selectedStandards).length > 0 && Object.keys(selectedStandards).every((standardName) => { - const standardValues = _.get(watchForm, `${standardName}`, {}); - return standardValues.action; + const standardValues = _.get(watchForm, `${standardName}`, {}) ?? {}; + return standardValues?.action; }), }; @@ -100,7 +100,7 @@ const CippStandardsSideBar = ({ Object.keys(selectedStandards).length > 0 && Object.keys(selectedStandards).every((standardName) => { const standardValues = _.get(watchForm, `${standardName}`, {}); - return standardValues.action; + return standardValues?.action; }), }; return ( diff --git a/src/pages/tenant/standards/template.jsx b/src/pages/tenant/standards/template.jsx index 959530865f0e..7a223e7f2d00 100644 --- a/src/pages/tenant/standards/template.jsx +++ b/src/pages/tenant/standards/template.jsx @@ -34,8 +34,15 @@ const Page = () => { } if (existingTemplate.isSuccess) { - formControl.reset(existingTemplate.data?.[0]); + //formControl.reset(existingTemplate.data?.[0]); const apiData = existingTemplate.data?.[0]; + + Object.keys(apiData.standards).forEach((key) => { + if (Array.isArray(apiData.standards[key])) { + apiData.standards[key] = apiData.standards[key].filter((value) => value !== null && value !== undefined); + } + }); + formControl.reset(apiData); if (router.query.clone) { formControl.setValue("templateName", `${apiData.templateName} (Clone)`); @@ -105,7 +112,6 @@ const Page = () => { setSelectedStandards((prev) => { const existingInstances = Object.keys(prev).filter((name) => name.startsWith(standardName)); const newIndex = existingInstances.length; - return { ...prev, [`${standardName}[${newIndex}]`]: true, From 8ce4d9ebf10523a04633556a1d7a1edc6fff87e9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 15 Mar 2025 18:13:32 -0400 Subject: [PATCH 0383/1184] add warning alert --- src/pages/cipp/super-admin/function-offloading.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 904c5640f0db..9c9725c213e2 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -3,7 +3,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import tabOptions from "./tabOptions"; import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import { useForm } from "react-hook-form"; -import { Typography } from "@mui/material"; +import { Alert, Typography } from "@mui/material"; import Grid from "@mui/material/Grid2"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { ApiGetCall } from "../../../api/ApiCall"; @@ -58,6 +58,9 @@ const Page = () => { {" "} for more information on how to configure this for your environment. + + If you are self-hosted, you must deploy the additional function app(s) to your CIPP resource group and enable CI/CD or all background tasks will fail. + Date: Sat, 15 Mar 2025 21:07:55 -0400 Subject: [PATCH 0384/1184] feat: function offloading versions --- src/components/CippTable/CippDataTable.js | 2 +- .../cipp/super-admin/function-offloading.js | 62 +++++++++++++------ 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 0d7f77f0bcb3..1f9435b174b2 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -322,7 +322,7 @@ export const CippDataTable = (props) => { ) : ( // Render the table inside a Card - + {cardButton || !hideTitle ? ( <> diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 9c9725c213e2..9e761f4618b3 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -3,12 +3,13 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import tabOptions from "./tabOptions"; import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import { useForm } from "react-hook-form"; -import { Alert, Typography } from "@mui/material"; +import { Alert, Typography, Link } from "@mui/material"; import Grid from "@mui/material/Grid2"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { ApiGetCall } from "../../../api/ApiCall"; import { useEffect } from "react"; -import Link from "next/link"; +import NextLink from "next/link"; +import { CippDataTable } from "/src/components/CippTable/CippDataTable"; const Page = () => { const pageTitle = "Function Offloading"; @@ -44,30 +45,53 @@ const Page = () => { queryKey={"execOffloadFunctions"} > - - - This mode enables offloading some of the more processor intensive functions to a - separate function app. This can be useful in environments where the CIPP server is under - heavy load. Please review{" "} - - our documentation - {" "} - for more information on how to configure this for your environment. - - - If you are self-hosted, you must deploy the additional function app(s) to your CIPP resource group and enable CI/CD or all background tasks will fail. + + This mode enables offloading some of the more processor intensive functions to a separate + function app. This can be useful in environments where the CIPP server is under heavy + load. Please review{" "} + + our documentation + {" "} + for more information on how to configure this for your environment. + + If you are self-hosted, you must deploy the additional function app(s) to your CIPP + resource group and enable CI/CD or all background tasks will fail. - + + + + {execOffloadFunctions.data?.Alerts?.length > 0 && ( + + {execOffloadFunctions.data?.Alerts.map((alert, index) => ( + + {alert} + + ))} + + )} + From ed2adc06b1e82021b98cf12d4cc8a249fe714e5a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 15 Mar 2025 21:14:38 -0400 Subject: [PATCH 0385/1184] Update function-offloading.js --- src/pages/cipp/super-admin/function-offloading.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 9e761f4618b3..751f8d9860e7 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -73,7 +73,6 @@ const Page = () => { simpleColumns={["Name", "Version"]} refreshFunction={execOffloadFunctions.refetch} isFetching={execOffloadFunctions.isFetching} - simple={true} /> {execOffloadFunctions.data?.Alerts?.length > 0 && ( From e0a6d0356a2eacfad8b13103ddb87709b2832ef2 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 15 Mar 2025 21:19:30 -0400 Subject: [PATCH 0386/1184] Update function-offloading.js --- src/pages/cipp/super-admin/function-offloading.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 751f8d9860e7..0f21287df6de 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -90,7 +90,10 @@ const Page = () => { name="OffloadFunctions" formControl={formControl} label="Enable Function Offloading" - disabled={execOffloadFunctions.isFetching || !execOffloadFunctions?.data?.CanEnable} + disabled={ + execOffloadFunctions.isFetching || + (!execOffloadFunctions?.data?.CanEnable && !execOffloadFunctions?.data?.OffloadFunctions) + } /> From c2083ed67a6a55b3ac90056d1eb031c0220866cb Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 15 Mar 2025 21:33:11 -0400 Subject: [PATCH 0387/1184] Update function-offloading.js --- .../cipp/super-admin/function-offloading.js | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 0f21287df6de..380836d3f2a4 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -6,10 +6,11 @@ import { useForm } from "react-hook-form"; import { Alert, Typography, Link } from "@mui/material"; import Grid from "@mui/material/Grid2"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; -import { ApiGetCall } from "../../../api/ApiCall"; +import { ApiGetCall, ApiPostCall } from "../../../api/ApiCall"; import { useEffect } from "react"; import NextLink from "next/link"; import { CippDataTable } from "/src/components/CippTable/CippDataTable"; +import { TrashIcon } from "@heroicons/react/24/outline"; const Page = () => { const pageTitle = "Function Offloading"; @@ -26,6 +27,30 @@ const Page = () => { queryKey: "execOffloadFunctions", }); + const deleteOffloadEntry = ApiPostCall({ + urlfromdata: true, + relatedQueryKeys: ["execOffloadFunctions"], + }); + + const handleDeleteOffloadEntry = (row) => { + const entity = { + RowKey: row.Name, + PartitionKey: "Version", + }; + + deleteOffloadEntry.mutate({ + url: "/api/ExecAzBobbyTables", + data: { + FunctionName: "Remove-AzDataTableEntity", + TableName: "Version", + Parameters: { + Entity: entity, + Force: true, + }, + }, + }); + }; + useEffect(() => { if (execOffloadFunctions.isSuccess) { formControl.reset({ @@ -73,6 +98,17 @@ const Page = () => { simpleColumns={["Name", "Version"]} refreshFunction={execOffloadFunctions.refetch} isFetching={execOffloadFunctions.isFetching} + actions={[ + { + label: "Delete Offloading Entry", + icon: , + url: "/api/ExecAzBobbyTables", + type: "POST", + customFunction: handleDeleteOffloadEntry, + confirmText: + "Are you sure you want to delete the offloaded function entry for [Name]? This does not delete the function app from Azure, this must be done first or it will register again.", + }, + ]} /> {execOffloadFunctions.data?.Alerts?.length > 0 && ( @@ -92,7 +128,8 @@ const Page = () => { label="Enable Function Offloading" disabled={ execOffloadFunctions.isFetching || - (!execOffloadFunctions?.data?.CanEnable && !execOffloadFunctions?.data?.OffloadFunctions) + (!execOffloadFunctions?.data?.CanEnable && + !execOffloadFunctions?.data?.OffloadFunctions) } /> From 998b15b172fa827f198dc30c4dae919f283757f3 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 15 Mar 2025 21:46:05 -0400 Subject: [PATCH 0388/1184] Update function-offloading.js --- src/pages/cipp/super-admin/function-offloading.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 380836d3f2a4..b99c6cb97a92 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -95,7 +95,7 @@ const Page = () => { }} title="Functions App Versions" data={execOffloadFunctions.data?.Version} - simpleColumns={["Name", "Version"]} + simpleColumns={["Name", "Version", "Default"]} refreshFunction={execOffloadFunctions.refetch} isFetching={execOffloadFunctions.isFetching} actions={[ @@ -107,6 +107,7 @@ const Page = () => { customFunction: handleDeleteOffloadEntry, confirmText: "Are you sure you want to delete the offloaded function entry for [Name]? This does not delete the function app from Azure, this must be done first or it will register again.", + condition: (row) => row.Default !== true, }, ]} /> From 65138ab38ddfd1def75a91cb7b3caaf1cc24d396 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 15 Mar 2025 21:49:29 -0400 Subject: [PATCH 0389/1184] Update function-offloading.js --- src/pages/cipp/super-admin/function-offloading.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index b99c6cb97a92..642c9f48a411 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -93,7 +93,7 @@ const Page = () => { cardProps={{ variant: "outlined", }} - title="Functions App Versions" + title="Registered Functions Apps" data={execOffloadFunctions.data?.Version} simpleColumns={["Name", "Version", "Default"]} refreshFunction={execOffloadFunctions.refetch} From 2df897fbbc89eb27c613c774a4400b9bb3f245ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Sun, 16 Mar 2025 16:21:52 +0100 Subject: [PATCH 0390/1184] Update licenses to newest version --- src/data/M365Licenses.json | 1776 ++++++++++++++++++++++++++++++++++++ 1 file changed, 1776 insertions(+) diff --git a/src/data/M365Licenses.json b/src/data/M365Licenses.json index de1119503969..c306c614f4a5 100644 --- a/src/data/M365Licenses.json +++ b/src/data/M365Licenses.json @@ -2855,6 +2855,182 @@ "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318", "Service_Plans_Included_Friendly_Names": "Exchange Foundation" }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "CUSTOMER_VOICE_DYN365_VIRAL_TRIAL", + "Service_Plan_Id": "dbe07046-af68-4861-a20d-1c8cbda9194f", + "Service_Plans_Included_Friendly_Names": "Customer Voice for Dynamics 365 vTrial" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "DYN365_CS_MESSAGING_TPS", + "Service_Plan_Id": "47c2b191-a5fb-4129-b690-00c474d2f623", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Digital Messaging add-on" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "D365_CSI_EMBED_CSEnterprise", + "Service_Plan_Id": "5b1e5982-0e88-47bb-a95e-ae6085eda612", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 Customer Service Insights for CS Enterprise" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "DYN365_ENTERPRISE_CUSTOMER_SERVICE", + "Service_Plan_Id": "99340b49-fb81-4b1e-976b-8f2ae8e9394f", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "DYN365_CS_VOICE", + "Service_Plan_Id": "f6ec6dfa-2402-468d-a455-89be11116d43", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Customer Service Voice Add-in" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "DYN365_ENTERPRISE_FIELD_SERVICE", + "Service_Plan_Id": "8c66ef8a-177f-4c0d-853c-d4f219331d09", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Field Service" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "DYN365_MARKETING_APP", + "Service_Plan_Id": "a3a4fa10-5092-401a-af30-0462a95a7ac8", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Marketing" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "DYN365_ENTERPRISE_SALES", + "Service_Plan_Id": "2da8e897-7791-486b-b08f-cc63c8129df7", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 for Sales" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "Forms_Pro_FS", + "Service_Plan_Id": "9c439259-63b0-46cc-a258-72be4313a42d", + "Service_Plans_Included_Friendly_Names": "Microsoft Dynamics 365 Customer Voice for Field Service" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "Forms_Pro_SalesEnt", + "Service_Plan_Id": "8839ef0e-91f1-4085-b485-62e06e7c7987", + "Service_Plans_Included_Friendly_Names": "Microsoft Dynamics 365 Customer Voice for Sales Enterprise" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "FLOW_DYN_APPS", + "Service_Plan_Id": "7e6d7d78-73de-46ba-83b1-6d25117334ba", + "Service_Plans_Included_Friendly_Names": "Power Automate for Dynamics 365" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_VOICE", + "Service_Plan_Id": "a3dce1be-e9ca-453a-9483-e69a5b46ce98", + "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Customer Service Voice" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_D365_CS_MESSAGING", + "Service_Plan_Id": "2d2f174c-c3cc-4abe-9ce8-4dd86f469ab1", + "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Digital Messaging" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "POWERAPPS_DYN_APPS", + "Service_Plan_Id": "874fc546-6efe-4d22-90b8-5c4e7aa59f4b", + "Service_Plans_Included_Friendly_Names": "Power Apps for Dynamics 365" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "GUIDES", + "Service_Plan_Id": "0b2c029c-dca0-454a-a336-887285d6ef07", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 Guides" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "MICROSOFT_REMOTE_ASSIST", + "Service_Plan_Id": "4f4c7800-298a-4e22-8867-96b17850d4dd", + "Service_Plans_Included_Friendly_Names": "Dynamics 365 Remote Assist" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "POWERAPPS_GUIDES", + "Service_Plan_Id": "816971f4-37c5-424a-b12b-b56881f402e7", + "Service_Plans_Included_Friendly_Names": "Power Apps for Guides" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "EXCHANGE_S_FOUNDATION", + "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318", + "Service_Plans_Included_Friendly_Names": "Exchange Foundation" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "TEAMS1", + "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929", + "Service_Plans_Included_Friendly_Names": "Microsoft Teams" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "SHAREPOINTWAC", + "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014", + "Service_Plans_Included_Friendly_Names": "Office for the Web" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "PROJECT_ESSENTIALS", + "Service_Plan_Id": "1259157c-8581-4875-bca7-2ffb18c51bda", + "Service_Plans_Included_Friendly_Names": "Project Online Essentials" + }, + { + "Product_Display_Name": "Dynamics 365 Multi-app", + "String_Id": "Dynamics_365_Multi_app_", + "GUID": "6c75fb1b-61f2-42d0-b1b8-6492ca9ae159", + "Service_Plan_Name": "SHAREPOINTENTERPRISE", + "Service_Plan_Id": "5dbe027f-2339-4123-9542-606e4d348a72", + "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 2)" + }, { "Product_Display_Name": "Dynamics 365 Operations – Activity", "String_Id": "Dyn365_Operations_Activity", @@ -9255,6 +9431,278 @@ "Service_Plan_Id": "41bf139a-4e60-409f-9346-a1361efc6dfb", "Service_Plans_Included_Friendly_Names": "YAMMER MIDSIZE" }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS", + "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02", + "Service_Plans_Included_Friendly_Names": "Avatars for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS", + "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8", + "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "CDS_O365_P1", + "Service_Plan_Id": "bed136c6-b799-4462-824d-fc045d3a9d25", + "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "EXCHANGE_S_STANDARD", + "Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c", + "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX", + "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757", + "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS", + "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28", + "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "MYANALYTICS_P2", + "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a", + "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1", + "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "MICROSOFTBOOKINGS", + "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2", + "Service_Plans_Included_Friendly_Names": "Microsoft Bookings" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "FORMS_PLAN_E1", + "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344", + "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "KAIZALA_O365_P2", + "Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e", + "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "PROJECTWORKMANAGEMENT", + "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9", + "Service_Plans_Included_Friendly_Names": "Microsoft Planner" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "MICROSOFT_SEARCH", + "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff", + "Service_Plans_Included_Friendly_Names": "Microsoft Search" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "INTUNE_O365", + "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117", + "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "Nucleus", + "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de", + "Service_Plans_Included_Friendly_Names": "Nucleus" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "SHAREPOINTWAC", + "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014", + "Service_Plans_Included_Friendly_Names": "Office for the Web" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "OFFICEMOBILE_SUBSCRIPTION", + "Service_Plan_Id": "c63d4d19-e8cb-460e-b37c-4d6c34603745", + "Service_Plans_Included_Friendly_Names": "Office Mobile Apps for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "PLACES_CORE", + "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94", + "Service_Plans_Included_Friendly_Names": "Places Core" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "PROJECT_O365_P1", + "Service_Plan_Id": "a55dfd10-0864-46d9-a3cd-da5991a3e0e2", + "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "Bing_Chat_Enterprise", + "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba", + "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "SHAREPOINTSTANDARD", + "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1", + "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "MCOSTANDARD", + "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c", + "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "STREAM_O365_SMB", + "Service_Plan_Id": "3c53ea51-d578-46fa-a4c0-fd0a92809a60", + "Service_Plans_Included_Friendly_Names": "Stream for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "SWAY", + "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97", + "Service_Plans_Included_Friendly_Names": "Sway" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "BPOS_S_TODO_1", + "Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c", + "Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "VIVAENGAGE_CORE", + "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4", + "Service_Plans_Included_Friendly_Names": "Viva Engage Core" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "VIVA_LEARNING_SEEDED", + "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86", + "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "WHITEBOARD_PLAN1", + "Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d", + "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "YAMMER_ENTERPRISE", + "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653", + "Service_Plans_Included_Friendly_Names": "Yammer Enterprise" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "DYN365_CDS_O365_P1", + "Service_Plan_Id": "40b010bb-0b69-4654-ac5e-ba161433f4b4", + "Service_Plans_Included_Friendly_Names": "Common Data Service" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "RMS_S_BASIC", + "Service_Plan_Id": "31cf2cfc-6b0d-4adc-a336-88b724ed8122", + "Service_Plans_Included_Friendly_Names": "Microsoft Azure Rights Management Service" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "POWERAPPS_O365_P1", + "Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c", + "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "FLOW_O365_P1", + "Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4", + "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Basic (no Teams)", + "String_Id": "Microsoft_365_Business_Basic_(no Teams)", + "GUID": "21502a13-c8dc-4744-be9c-177fd9d2eafc", + "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P1", + "Service_Plan_Id": "0683001c-0492-4d59-9515-d9a6426b5813", + "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365" + }, { "Product_Display_Name": "Microsoft 365 Business Basic EEA (no Teams)", "String_Id": "Microsoft_365_Business_Basic_EEA_(no_Teams)", @@ -9775,6 +10223,286 @@ "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee", "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365" }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS", + "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02", + "Service_Plans_Included_Friendly_Names": "Avatars for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS", + "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8", + "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "CDS_O365_P2", + "Service_Plan_Id": "95b76021-6a53-4741-ab8b-1d1f3d66a95a", + "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "EXCHANGE_S_STANDARD", + "Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c", + "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX", + "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757", + "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS", + "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28", + "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "MYANALYTICS_P2", + "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a", + "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "OFFICE_BUSINESS", + "Service_Plan_Id": "094e7854-93fc-4d55-b2c0-3ab5369ebdc1", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Business" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1", + "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "MICROSOFTBOOKINGS", + "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2", + "Service_Plans_Included_Friendly_Names": "Microsoft Bookings" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "CLIPCHAMP", + "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472", + "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "FORMS_PLAN_E1", + "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344", + "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "MICROSOFT_LOOP", + "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda", + "Service_Plans_Included_Friendly_Names": "Microsoft Loop" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "PROJECTWORKMANAGEMENT", + "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9", + "Service_Plans_Included_Friendly_Names": "Microsoft Planner" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "MICROSOFT_SEARCH", + "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff", + "Service_Plans_Included_Friendly_Names": "Microsoft Search" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "Deskless", + "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3", + "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "INTUNE_O365", + "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117", + "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "Nucleus", + "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de", + "Service_Plans_Included_Friendly_Names": "Nucleus" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "SHAREPOINTWAC", + "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014", + "Service_Plans_Included_Friendly_Names": "Office for the Web" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "PLACES_CORE", + "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94", + "Service_Plans_Included_Friendly_Names": "Places Core" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "PROJECT_O365_P2", + "Service_Plan_Id": "31b4e2fc-4cd6-4e7d-9c1b-41407303bd66", + "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E3)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "Bing_Chat_Enterprise", + "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba", + "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "SHAREPOINTSTANDARD", + "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1", + "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "MCOSTANDARD", + "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c", + "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "STREAM_O365_SMB", + "Service_Plan_Id": "3c53ea51-d578-46fa-a4c0-fd0a92809a60", + "Service_Plans_Included_Friendly_Names": "Stream for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "SWAY", + "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97", + "Service_Plans_Included_Friendly_Names": "Sway" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "BPOS_S_TODO_1", + "Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c", + "Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "VIVAENGAGE_CORE", + "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4", + "Service_Plans_Included_Friendly_Names": "Viva Engage Core" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "VIVA_LEARNING_SEEDED", + "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86", + "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "WHITEBOARD_PLAN1", + "Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d", + "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "DYN365_CDS_O365_P2", + "Service_Plan_Id": "4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14", + "Service_Plans_Included_Friendly_Names": "Common Data Service" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "RMS_S_BASIC", + "Service_Plan_Id": "31cf2cfc-6b0d-4adc-a336-88b724ed8122", + "Service_Plans_Included_Friendly_Names": "Microsoft Azure Rights Management Service" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "POWERAPPS_O365_P1", + "Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c", + "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "FLOW_O365_P1", + "Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4", + "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Standard (no Teams)", + "String_Id": "MICROSOFT_365_BUSINESS_STANDARD_NO_TEAMS", + "GUID": "5a1c7b8d-0739-4ca8-bf69-ec87e69133ac", + "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P2", + "Service_Plan_Id": "041fe683-03e4-45b6-b1af-c0cdc516daee", + "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365" + }, { "Product_Display_Name": "Microsoft 365 Business Standard EEA (no Teams)", "String_Id": "Office_365_w/o_Teams_Bundle_Business_Standard", @@ -10863,6 +11591,918 @@ "Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014", "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365" }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "EXCHANGE_S_FOUNDATION", + "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318", + "Service_Plans_Included_Friendly_Names": "Exchange Foundation" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "DYN365BC_MS_INVOICING", + "Service_Plan_Id": "39b5c996-467e-4e60-bd62-46066f572726", + "Service_Plans_Included_Friendly_Names": "Microsoft Invoicing" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS", + "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02", + "Service_Plans_Included_Friendly_Names": "Avatars for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS", + "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8", + "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "RMS_S_ENTERPRISE", + "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90", + "Service_Plans_Included_Friendly_Names": "Azure Rights Management" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "CDS_O365_P3", + "Service_Plan_Id": "afa73018-811e-46e9-988f-f75d2b1b8430", + "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "BPOS_S_DlpAddOn", + "Service_Plan_Id": "9bec7e34-c9fa-40b7-a9d1-bd6d1165c7ed", + "Service_Plans_Included_Friendly_Names": "Data Loss Prevention" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "EXCHANGE_S_STANDARD", + "Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c", + "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "EXCHANGE_S_ARCHIVE_ADDON", + "Service_Plan_Id": "176a09a6-7ec5-4039-ac02-b2791c6ba793", + "Service_Plans_Included_Friendly_Names": "Exchange Online Archiving" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX", + "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757", + "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS", + "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28", + "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MYANALYTICS_P2", + "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a", + "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "OFFICE_BUSINESS", + "Service_Plan_Id": "094e7854-93fc-4d55-b2c0-3ab5369ebdc1", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Business" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1", + "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1", + "Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MICROSOFTBOOKINGS", + "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2", + "Service_Plans_Included_Friendly_Names": "Microsoft Bookings" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "CLIPCHAMP", + "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472", + "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MDE_SMB", + "Service_Plan_Id": "bfc1bbd9-981b-4f71-9b82-17c35fd0e2a4", + "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Business" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "ATP_ENTERPRISE", + "Service_Plan_Id": "f20fedf3-f3c3-43c3-8267-2bfdd51c0939", + "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "FORMS_PLAN_E1", + "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344", + "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "INTUNE_SMBIZ", + "Service_Plan_Id": "8e9ff0ff-aa7a-4b20-83c1-2f636b600ac2", + "Service_Plans_Included_Friendly_Names": "Microsoft Intune" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "KAIZALA_O365_P2", + "Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e", + "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MICROSOFT_LOOP", + "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda", + "Service_Plans_Included_Friendly_Names": "Microsoft Loop" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "PROJECTWORKMANAGEMENT", + "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9", + "Service_Plans_Included_Friendly_Names": "Microsoft Planner" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MICROSOFT_SEARCH", + "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff", + "Service_Plans_Included_Friendly_Names": "Microsoft Search" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "Deskless", + "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3", + "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "INTUNE_O365", + "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117", + "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "Nucleus", + "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de", + "Service_Plans_Included_Friendly_Names": "Nucleus" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "SHAREPOINTWAC", + "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014", + "Service_Plans_Included_Friendly_Names": "Office for the Web" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "OFFICE_SHARED_COMPUTER_ACTIVATION", + "Service_Plan_Id": "276d6e8a-f056-4f70-b7e8-4fc27f79f809", + "Service_Plans_Included_Friendly_Names": "Office Shared Computer Activation" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "PLACES_CORE", + "Service_Plan_Id": "1fe6227d-3e01-46d0-9510-0acad4ff6e94", + "Service_Plans_Included_Friendly_Names": "Places Core" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "PROJECT_O365_P3", + "Service_Plan_Id": "b21a6b06-1988-436e-a07b-51ec6d9f52ad", + "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "PURVIEW_DISCOVERY", + "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522", + "Service_Plans_Included_Friendly_Names": "Purview Discovery" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "Bing_Chat_Enterprise", + "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba", + "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "O365_SB_Relationship_Management", + "Service_Plan_Id": "5bfe124c-bbdc-4494-8835-f1297d457d79", + "Service_Plans_Included_Friendly_Names": "RETIRED - Outlook Customer Manager" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "SHAREPOINTSTANDARD", + "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1", + "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MCOSTANDARD", + "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c", + "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "SWAY", + "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97", + "Service_Plans_Included_Friendly_Names": "Sway" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "BPOS_S_TODO_1", + "Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c", + "Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "VIVAENGAGE_CORE", + "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4", + "Service_Plans_Included_Friendly_Names": "Viva Engage Core" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "VIVA_LEARNING_SEEDED", + "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86", + "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "WHITEBOARD_PLAN1", + "Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d", + "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "YAMMER_ENTERPRISE", + "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653", + "Service_Plans_Included_Friendly_Names": "Yammer Enterprise" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "UNIVERSAL_PRINT_01", + "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9", + "Service_Plans_Included_Friendly_Names": "Universal Print" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "WINBIZ", + "Service_Plan_Id": "8e229017-d77b-43d5-9305-903395523b99", + "Service_Plans_Included_Friendly_Names": "Windows 10/11 Business" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE", + "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365", + "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "AAD_SMB", + "Service_Plan_Id": "de377cbc-0019-4ec2-b77c-3f223947e102", + "Service_Plans_Included_Friendly_Names": "Azure Active Directory" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "RMS_S_PREMIUM", + "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3", + "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "DYN365_CDS_O365_P3", + "Service_Plan_Id": "28b0fa46-c39a-4188-89e2-58e979a6b014", + "Service_Plans_Included_Friendly_Names": "Common Data Service" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "MFA_PREMIUM", + "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0", + "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "ADALLOM_S_DISCOVERY", + "Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9", + "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "AAD_PREMIUM", + "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d", + "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "INTUNE_A", + "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5", + "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "STREAM_O365_E1", + "Service_Plan_Id": "743dd19e-1ce3-4c62-a3ad-49ba8f63a2f6", + "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E1" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "POWERAPPS_O365_P1", + "Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c", + "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "FLOW_O365_P1", + "Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4", + "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium (no Teams)", + "String_Id": "Microsoft_365_ Business_ Premium_(no Teams)", + "GUID": "00e1ec7b-e4a3-40d1-9441-b69b597ab222", + "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P3", + "Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014", + "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "DYN365BC_MS_INVOICING", + "Service_Plan_Id": "39b5c996-467e-4e60-bd62-46066f572726", + "Service_Plans_Included_Friendly_Names": "Microsoft Invoicing" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MESH_AVATARS_FOR_TEAMS", + "Service_Plan_Id": "dcf9d2f4-772e-4434-b757-77a453cfbc02", + "Service_Plans_Included_Friendly_Names": "Avatars for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MESH_AVATARS_ADDITIONAL_FOR_TEAMS", + "Service_Plan_Id": "3efbd4ed-8958-4824-8389-1321f8730af8", + "Service_Plans_Included_Friendly_Names": "Avatars for Teams (additional)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "RMS_S_ENTERPRISE", + "Service_Plan_Id": "bea4c11e-220a-4e6d-8eb8-8ea15d019f90", + "Service_Plans_Included_Friendly_Names": "Azure Rights Management" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "CDS_O365_P3", + "Service_Plan_Id": "afa73018-811e-46e9-988f-f75d2b1b8430", + "Service_Plans_Included_Friendly_Names": "Common Data Service for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "BPOS_S_DlpAddOn", + "Service_Plan_Id": "9bec7e34-c9fa-40b7-a9d1-bd6d1165c7ed", + "Service_Plans_Included_Friendly_Names": "Data Loss Prevention" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "EXCHANGE_S_FOUNDATION", + "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318", + "Service_Plans_Included_Friendly_Names": "Exchange Foundation" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "EXCHANGE_S_STANDARD", + "Service_Plan_Id": "9aaf7827-d63c-4b61-89c3-182f06f82e5c", + "Service_Plans_Included_Friendly_Names": "Exchange Online (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "EXCHANGE_S_ARCHIVE_ADDON", + "Service_Plan_Id": "176a09a6-7ec5-4039-ac02-b2791c6ba793", + "Service_Plans_Included_Friendly_Names": "Exchange Online Archiving" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "GRAPH_CONNECTORS_SEARCH_INDEX", + "Service_Plan_Id": "a6520331-d7d4-4276-95f5-15c0933bc757", + "Service_Plans_Included_Friendly_Names": "Graph Connectors Search with Index" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MESH_IMMERSIVE_FOR_TEAMS", + "Service_Plan_Id": "f0ff6ac6-297d-49cd-be34-6dfef97f0c28", + "Service_Plans_Included_Friendly_Names": "Immersive spaces for Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MYANALYTICS_P2", + "Service_Plan_Id": "33c4f319-9bdd-48d6-9c4d-410b750a4a5a", + "Service_Plans_Included_Friendly_Names": "Insights by MyAnalytics" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "OFFICE_BUSINESS", + "Service_Plan_Id": "094e7854-93fc-4d55-b2c0-3ab5369ebdc1", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Apps for Business" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1", + "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1", + "Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MICROSOFTBOOKINGS", + "Service_Plan_Id": "199a5c09-e0ca-4e37-8f7c-b05d533e1ea2", + "Service_Plans_Included_Friendly_Names": "Microsoft Bookings" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "CLIPCHAMP", + "Service_Plan_Id": "a1ace008-72f3-4ea0-8dac-33b3a23a2472", + "Service_Plans_Included_Friendly_Names": "Microsoft Clipchamp" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MDE_SMB", + "Service_Plan_Id": "bfc1bbd9-981b-4f71-9b82-17c35fd0e2a4", + "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Business" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "ATP_ENTERPRISE", + "Service_Plan_Id": "f20fedf3-f3c3-43c3-8267-2bfdd51c0939", + "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Office 365 (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "FORMS_PLAN_E1", + "Service_Plan_Id": "159f4cd6-e380-449f-a816-af1a9ef76344", + "Service_Plans_Included_Friendly_Names": "Microsoft Forms (Plan E1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "KAIZALA_O365_P2", + "Service_Plan_Id": "54fc630f-5a40-48ee-8965-af0503c1386e", + "Service_Plans_Included_Friendly_Names": "Microsoft Kaizala Pro" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MICROSOFT_LOOP", + "Service_Plan_Id": "c4b8c31a-fb44-4c65-9837-a21f55fcabda", + "Service_Plans_Included_Friendly_Names": "Microsoft Loop" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "PROJECTWORKMANAGEMENT", + "Service_Plan_Id": "b737dad2-2f6c-4c65-90e3-ca563267e8b9", + "Service_Plans_Included_Friendly_Names": "Microsoft Planner" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MICROSOFT_SEARCH", + "Service_Plan_Id": "94065c59-bc8e-4e8b-89e5-5138d471eaff", + "Service_Plans_Included_Friendly_Names": "Microsoft Search" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "Deskless", + "Service_Plan_Id": "8c7d2df8-86f0-4902-b2ed-a0458298f3b3", + "Service_Plans_Included_Friendly_Names": "Microsoft StaffHub" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "TEAMS1", + "Service_Plan_Id": "57ff2da0-773e-42df-b2af-ffb7a2317929", + "Service_Plans_Included_Friendly_Names": "Microsoft Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "INTUNE_O365", + "Service_Plan_Id": "882e1d05-acd1-4ccb-8708-6ee03664b117", + "Service_Plans_Included_Friendly_Names": "Mobile Device Management for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "Nucleus", + "Service_Plan_Id": "db4d623d-b514-490b-b7ef-8885eee514de", + "Service_Plans_Included_Friendly_Names": "Nucleus" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "SHAREPOINTWAC", + "Service_Plan_Id": "e95bec33-7c88-4a70-8e19-b10bd9d0c014", + "Service_Plans_Included_Friendly_Names": "Office for the Web" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "OFFICE_SHARED_COMPUTER_ACTIVATION", + "Service_Plan_Id": "276d6e8a-f056-4f70-b7e8-4fc27f79f809", + "Service_Plans_Included_Friendly_Names": "Office Shared Computer Activation" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "PROJECT_O365_P3", + "Service_Plan_Id": "b21a6b06-1988-436e-a07b-51ec6d9f52ad", + "Service_Plans_Included_Friendly_Names": "Project for Office (Plan E5)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "PURVIEW_DISCOVERY", + "Service_Plan_Id": "c948ea65-2053-4a5a-8a62-9eaaaf11b522", + "Service_Plans_Included_Friendly_Names": "Purview Discovery" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "Bing_Chat_Enterprise", + "Service_Plan_Id": "0d0c0d31-fae7-41f2-b909-eaf4d7f26dba", + "Service_Plans_Included_Friendly_Names": "RETIRED - Commercial data protection for Microsoft Copilot" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "O365_SB_Relationship_Management", + "Service_Plan_Id": "5bfe124c-bbdc-4494-8835-f1297d457d79", + "Service_Plans_Included_Friendly_Names": "RETIRED - Outlook Customer Manager" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "SHAREPOINTSTANDARD", + "Service_Plan_Id": "c7699d2e-19aa-44de-8edf-1736da088ca1", + "Service_Plans_Included_Friendly_Names": "SharePoint (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MCOSTANDARD", + "Service_Plan_Id": "0feaeb32-d00e-4d66-bd5a-43b5b83db82c", + "Service_Plans_Included_Friendly_Names": "Skype for Business Online (Plan 2)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "SWAY", + "Service_Plan_Id": "a23b959c-7ce8-4e57-9140-b90eb88a9e97", + "Service_Plans_Included_Friendly_Names": "Sway" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "BPOS_S_TODO_1", + "Service_Plan_Id": "5e62787c-c316-451f-b873-1d05acd4d12c", + "Service_Plans_Included_Friendly_Names": "To-Do (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "VIVAENGAGE_CORE", + "Service_Plan_Id": "a82fbf69-b4d7-49f4-83a6-915b2cf354f4", + "Service_Plans_Included_Friendly_Names": "Viva Engage Core" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "VIVA_LEARNING_SEEDED", + "Service_Plan_Id": "b76fb638-6ba6-402a-b9f9-83d28acb3d86", + "Service_Plans_Included_Friendly_Names": "Viva Learning Seeded" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "WHITEBOARD_PLAN1", + "Service_Plan_Id": "b8afc642-032e-4de5-8c0a-507a7bba7e5d", + "Service_Plans_Included_Friendly_Names": "Whiteboard (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "YAMMER_ENTERPRISE", + "Service_Plan_Id": "7547a3fe-08ee-4ccb-b430-5077c5041653", + "Service_Plans_Included_Friendly_Names": "Yammer Enterprise" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "UNIVERSAL_PRINT_01", + "Service_Plan_Id": "795f6fe0-cc4d-4773-b050-5dde4dc704c9", + "Service_Plans_Included_Friendly_Names": "Universal Print" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "WINBIZ", + "Service_Plan_Id": "8e229017-d77b-43d5-9305-903395523b99", + "Service_Plans_Included_Friendly_Names": "Windows 10/11 Business" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE", + "Service_Plan_Id": "7bf960f6-2cd9-443a-8046-5dbff9558365", + "Service_Plans_Included_Friendly_Names": "Windows Update for Business Deployment Service" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "AAD_SMB", + "Service_Plan_Id": "de377cbc-0019-4ec2-b77c-3f223947e102", + "Service_Plans_Included_Friendly_Names": "Azure Active Directory" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "RMS_S_PREMIUM", + "Service_Plan_Id": "6c57d4b6-3b23-47a5-9bc9-69f17b4947b3", + "Service_Plans_Included_Friendly_Names": "Azure Information Protection Premium P1" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "DYN365_CDS_O365_P3", + "Service_Plan_Id": "28b0fa46-c39a-4188-89e2-58e979a6b014", + "Service_Plans_Included_Friendly_Names": "Common Data Service" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "MFA_PREMIUM", + "Service_Plan_Id": "8a256a2b-b617-496d-b51b-e76466e88db0", + "Service_Plans_Included_Friendly_Names": "Microsoft Azure Multi-Factor Authentication" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "ADALLOM_S_DISCOVERY", + "Service_Plan_Id": "932ad362-64a8-4783-9106-97849a1a30b9", + "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Cloud Apps Discovery" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "AAD_PREMIUM", + "Service_Plan_Id": "41781fb2-bc02-4b7c-bd55-b576c07bb09d", + "Service_Plans_Included_Friendly_Names": "Microsoft Entra ID P1" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "INTUNE_SMBIZ", + "Service_Plan_Id": "8e9ff0ff-aa7a-4b20-83c1-2f636b600ac2", + "Service_Plans_Included_Friendly_Names": "Microsoft Intune" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "INTUNE_A", + "Service_Plan_Id": "c1ec4a95-1f05-45b3-a911-aa3fa01094f5", + "Service_Plans_Included_Friendly_Names": "Microsoft Intune Plan 1" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "STREAM_O365_E1", + "Service_Plan_Id": "743dd19e-1ce3-4c62-a3ad-49ba8f63a2f6", + "Service_Plans_Included_Friendly_Names": "Microsoft Stream for Office 365 E1" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "POWERAPPS_O365_P1", + "Service_Plan_Id": "92f7a6f3-b89b-4bbd-8c30-809e6da5ad1c", + "Service_Plans_Included_Friendly_Names": "Power Apps for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "FLOW_O365_P1", + "Service_Plan_Id": "0f9b09cb-62d1-4ff4-9129-43f4996f83f4", + "Service_Plans_Included_Friendly_Names": "Power Automate for Office 365" + }, + { + "Product_Display_Name": "Microsoft 365 Business Premium Donation", + "String_Id": "Microsoft_365_Business_Premium_Donation_(Non_Profit_Pricing)", + "GUID": "24c35284-d768-4e53-84d9-b7ae73dddf69", + "Service_Plan_Name": "POWER_VIRTUAL_AGENTS_O365_P3", + "Service_Plan_Id": "ded3d325-1bdc-453e-8432-5bac26d7a014", + "Service_Plans_Included_Friendly_Names": "Power Virtual Agents for Office 365" + }, { "Product_Display_Name": "Microsoft 365 Business Premium EEA (no Teams)", "String_Id": "Office_365_w/o_Teams_Bundle_Business_Premium", @@ -11375,6 +13015,70 @@ "Service_Plan_Id": "4828c8ec-dc2e-4779-b502-87ac9ce28ab7", "Service_Plans_Included_Friendly_Names": "Microsoft 365 Phone System" }, + { + "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)", + "String_Id": "Microsoft_365_Copilot_EDU", + "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436", + "Service_Plan_Name": "COPILOT_STUDIO_IN_COPILOT_FOR_M365", + "Service_Plan_Id": "fe6c28b3-d468-44ea-bbd0-a10a5167435c", + "Service_Plans_Included_Friendly_Names": "Copilot Studio in Copilot for M365" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)", + "String_Id": "Microsoft_365_Copilot_EDU", + "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436", + "Service_Plan_Name": "GRAPH_CONNECTORS_COPILOT", + "Service_Plan_Id": "82d30987-df9b-4486-b146-198b21d164c7", + "Service_Plans_Included_Friendly_Names": "Graph Connectors in Microsoft 365 Copilot" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)", + "String_Id": "Microsoft_365_Copilot_EDU", + "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436", + "Service_Plan_Name": "M365_COPILOT_INTELLIGENT_SEARCH", + "Service_Plan_Id": "931e4a88-a67f-48b5-814f-16a5f1e6028d", + "Service_Plans_Included_Friendly_Names": "Intelligent Search" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)", + "String_Id": "Microsoft_365_Copilot_EDU", + "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436", + "Service_Plan_Name": "M365_COPILOT_SHAREPOINT", + "Service_Plan_Id": "0aedf20c-091d-420b-aadf-30c042609612", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot for SharePoint" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)", + "String_Id": "Microsoft_365_Copilot_EDU", + "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436", + "Service_Plan_Name": "M365_COPILOT_TEAMS", + "Service_Plan_Id": "b95945de-b3bd-46db-8437-f2beb6ea2347", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Microsoft Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)", + "String_Id": "Microsoft_365_Copilot_EDU", + "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436", + "Service_Plan_Name": "M365_COPILOT_APPS", + "Service_Plan_Id": "a62f8878-de10-42f3-b68f-6149a25ceb97", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Productivity Apps" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)", + "String_Id": "Microsoft_365_Copilot_EDU", + "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436", + "Service_Plan_Name": "M365_COPILOT_BUSINESS_CHAT", + "Service_Plan_Id": "3f30311c-6b1e-48a4-ab79-725b469da960", + "Service_Plans_Included_Friendly_Names": "Microsoft Copilot with Graph-grounded chat" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot (Education Faculty)", + "String_Id": "Microsoft_365_Copilot_EDU", + "GUID": "ad9c22b3-52d7-4e7e-973c-88121ea96436", + "Service_Plan_Name": "M365_COPILOT_CONNECTORS", + "Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d", + "Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot" + }, { "Product_Display_Name": "Microsoft Copilot for Microsoft 365", "String_Id": "M365_Copilot", @@ -25823,6 +27527,38 @@ "Service_Plan_Id": "17ab22cd-a0b3-4536-910a-cb6eb12696c0", "Service_Plans_Included_Friendly_Names": "Common Data Service" }, + { + "Product_Display_Name": "Microsoft Defender for Business", + "String_Id": "MDE_SMB", + "GUID": "5e1e7702-a2b7-4360-8d07-2f515792896f", + "Service_Plan_Name": "Intune_Defender", + "Service_Plan_Id": "1689aade-3d6a-4bfc-b017-46d2672df5ad", + "Service_Plans_Included_Friendly_Names": "MDE_SecurityManagement" + }, + { + "Product_Display_Name": "Microsoft Defender for Business", + "String_Id": "MDE_SMB", + "GUID": "5e1e7702-a2b7-4360-8d07-2f515792896f", + "Service_Plan_Name": "M365_LIGHTHOUSE_CUSTOMER_PLAN1", + "Service_Plan_Id": "6f23d6a9-adbf-481c-8538-b4c095654487", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 1)" + }, + { + "Product_Display_Name": "Microsoft Defender for Business", + "String_Id": "MDE_SMB", + "GUID": "5e1e7702-a2b7-4360-8d07-2f515792896f", + "Service_Plan_Name": "M365_LIGHTHOUSE_PARTNER_PLAN1", + "Service_Plan_Id": "d55411c9-cfff-40a9-87c7-240f14df7da5", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Lighthouse (Plan 2)" + }, + { + "Product_Display_Name": "Microsoft Defender for Business", + "String_Id": "MDE_SMB", + "GUID": "5e1e7702-a2b7-4360-8d07-2f515792896f", + "Service_Plan_Name": "MDE_SMB", + "Service_Plan_Id": "bfc1bbd9-981b-4f71-9b82-17c35fd0e2a4", + "Service_Plans_Included_Friendly_Names": "Microsoft Defender for Business" + }, { "Product_Display_Name": "Microsoft Defender for Endpoint", "String_Id": "WIN_DEF_ATP", @@ -26575,6 +28311,30 @@ "Service_Plan_Id": "83bced11-77ce-4071-95bd-240133796768", "Service_Plans_Included_Friendly_Names": "Microsoft Stream Storage Add-On" }, + { + "Product_Display_Name": "Microsoft Sustainability Manager Premium", + "String_Id": "Microsoft_Sustainability_Manager_Premium", + "GUID": "aecb477b-2f56-4e38-b711-b752c24fc19b", + "Service_Plan_Name": "CDS_CLOUD_FOR_SUSTAINABILITY_PLUS", + "Service_Plan_Id": "ba80223c-e515-4642-a838-3e7d66f70cb6", + "Service_Plans_Included_Friendly_Names": "Common Data Services for Cloud for Sustainability Plus" + }, + { + "Product_Display_Name": "Microsoft Sustainability Manager Premium", + "String_Id": "Microsoft_Sustainability_Manager_Premium", + "GUID": "aecb477b-2f56-4e38-b711-b752c24fc19b", + "Service_Plan_Name": "MCS_BIZAPPS_CLOUD_FOR_SUSTAINABILITY_PLUS", + "Service_Plan_Id": "ed29ae92-ff5f-4446-8460-83c54d0e7088", + "Service_Plans_Included_Friendly_Names": "MCS - BizApps Cloud for Sustainability Plus" + }, + { + "Product_Display_Name": "Microsoft Sustainability Manager Premium", + "String_Id": "Microsoft_Sustainability_Manager_Premium", + "GUID": "aecb477b-2f56-4e38-b711-b752c24fc19b", + "Service_Plan_Name": "EXCHANGE_S_FOUNDATION", + "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318", + "Service_Plans_Included_Friendly_Names": "Exchange Foundation" + }, { "Product_Display_Name": "Microsoft Sustainability Manager USL Essentials", "String_Id": "Microsoft_Cloud_for_Sustainability_USL", @@ -37863,6 +39623,22 @@ "Service_Plan_Id": "fb613c67-1a58-4645-a8df-21e95a37d433", "Service_Plans_Included_Friendly_Names": "Power Automate Attended RPA for Government" }, + { + "Product_Display_Name": "Power Automate Process", + "String_Id": "Power_Automate_per_process", + "GUID": "253ce8d3-6122-4240-8b04-f434a8fa831f", + "Service_Plan_Name": "EXCHANGE_S_FOUNDATION", + "Service_Plan_Id": "113feb6c-3fe4-4440-bddc-54d774bf0318", + "Service_Plans_Included_Friendly_Names": "Exchange Foundation" + }, + { + "Product_Display_Name": "Power Automate Process", + "String_Id": "Power_Automate_per_process", + "GUID": "253ce8d3-6122-4240-8b04-f434a8fa831f", + "Service_Plan_Name": "DATAVERSE_FOR_POWER_AUTOMATE_PER_PROCESS", + "Service_Plan_Id": "d7c3df99-6f58-40b9-8940-cd3a51679d85", + "Service_Plans_Included_Friendly_Names": "Dataverse for Power Automate Per Process" + }, { "Product_Display_Name": "Power Automate unattended RPA add-on", "String_Id": "POWERAUTOMATE_UNATTENDED_RPA", From 656dff04e0b58491ea3ec4fd850a9774e1e7daf6 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 16 Mar 2025 22:30:42 +0100 Subject: [PATCH 0391/1184] yarn upgrade --- yarn.lock | 4268 +++++++++++++++++++++++++++-------------------------- 1 file changed, 2158 insertions(+), 2110 deletions(-) diff --git a/yarn.lock b/yarn.lock index acea4f80af6a..3111af6ddac4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,102 +10,96 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/highlight" "^7.24.7" + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2", "@babel/compat-data@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" - integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.5", "@babel/compat-data@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== "@babel/core@^7.19.6": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" - integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" + integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-module-transforms" "^7.25.2" - "@babel/helpers" "^7.25.0" - "@babel/parser" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.2" - "@babel/types" "^7.25.2" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.10" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.25.6": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" - integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== +"@babel/generator@^7.26.10": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7" + integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang== dependencies: - "@babel/types" "^7.25.6" + "@babel/parser" "^7.26.10" + "@babel/types" "^7.26.10" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== - dependencies: - "@babel/types" "^7.24.7" + jsesc "^3.0.2" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== +"@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" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" + integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-validator-option" "^7.24.8" - browserslist "^4.23.1" + "@babel/compat-data" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0", "@babel/helper-create-class-features-plugin@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14" - integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/traverse" "^7.25.4" +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71" + integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.26.9" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0", "@babel/helper-create-regexp-features-plugin@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" - integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - regexpu-core "^5.3.1" + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== +"@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -113,843 +107,699 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-member-expression-to-functions@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" - integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== - dependencies: - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.8" - -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" - -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" - integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== - -"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" - integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-wrap-function" "^7.25.0" - "@babel/traverse" "^7.25.0" - -"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" - integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/traverse" "^7.25.0" - -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" - integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" - integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== - -"@babel/helper-wrap-function@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" - integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== - dependencies: - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/helpers@^7.25.0": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" - integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q== - dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" - -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.25.0", "@babel/parser@^7.25.6": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" - integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== dependencies: - "@babel/types" "^7.25.6" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" - integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.3" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" - integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" - integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== +"@babel/helper-replace-supers@^7.25.9", "@babel/helper-replace-supers@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" + integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.26.5" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" - integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== +"@babel/helpers@^7.26.10": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" + integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.10" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== +"@babel/parser@^7.26.10", "@babel/parser@^7.26.9": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749" + integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/types" "^7.26.10" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== +"@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" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz#bb918905c58711b86f9710d74a3744b6c56573b5" - integrity sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz#6d4c78f042db0e82fd6436cd65fec5dc78ad2bde" - integrity sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-jsx@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== +"@babel/plugin-transform-async-generator-functions@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" + integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.26.8" -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== +"@babel/plugin-transform-block-scoped-functions@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" + integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" -"@babel/plugin-syntax-typescript@^7.24.7": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff" - integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg== +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-async-generator-functions@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz#2afd4e639e2d055776c9f091b6c0c180ed8cf083" - integrity sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-remap-async-to-generator" "^7.25.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/traverse" "^7.25.4" - -"@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" - -"@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-block-scoping@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" - integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-class-properties@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz#bae7dbfcdcc2e8667355cd1fb5eda298f05189fd" - integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz#d29dbb6a72d79f359952ad0b66d88518d65ef89a" - integrity sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/traverse" "^7.25.4" - globals "^11.1.0" +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-destructuring@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" - integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dotall-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== +"@babel/plugin-transform-exponentiation-operator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" - integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== +"@babel/plugin-transform-for-of@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56" + integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-function-name@^7.25.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" - integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-literals@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" - integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== +"@babel/plugin-transform-modules-commonjs@^7.25.9", "@babel/plugin-transform-modules-commonjs@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" - integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-module-transforms" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-systemjs@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" - integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== - dependencies: - "@babel/helper-module-transforms" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.0" - -"@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": + version "7.26.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" + integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" -"@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" - integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-methods@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz#9bbefbe3649f470d681997e0b64a4b254d877242" - integrity sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw== +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-react-constant-elements@^7.18.12": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz#71a665ed16ce618067d05f4a98130207349d82ae" - integrity sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ== + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz#08a1de35a301929b60fdf2788a54b46cd8ecd0ef" + integrity sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-display-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" - integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-development@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" - integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== dependencies: - "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.25.9" -"@babel/plugin-transform-react-jsx@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" - integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/types" "^7.25.2" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-transform-react-pure-annotations@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" - integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== +"@babel/plugin-transform-template-literals@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" + integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-typeof-symbol@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" - integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== +"@babel/plugin-transform-typeof-symbol@^7.26.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz#d0e33acd9223744c1e857dbd6fa17bd0a3786937" + integrity sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-typescript@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" - integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== +"@babel/plugin-transform-typescript@^7.25.9": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz#2e9caa870aa102f50d7125240d9dbf91334b0950" + integrity sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" -"@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-sets-regex@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz#be664c2a0697ffacd3423595d5edef6049e8946c" - integrity sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA== +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/preset-env@^7.19.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.4.tgz#be23043d43a34a2721cd0f676c7ba6f1481f6af6" - integrity sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw== - dependencies: - "@babel/compat-data" "^7.25.4" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" + integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.4" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.25.0" - "@babel/plugin-transform-class-properties" "^7.25.4" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.25.4" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.8" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.25.1" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.25.2" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-modules-systemjs" "^7.25.0" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.8" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.25.4" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.8" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.4" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.26.8" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.26.5" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.26.3" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.26.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.26.8" + "@babel/plugin-transform-typeof-symbol" "^7.26.7" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-corejs3 "^0.11.0" babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.37.1" + core-js-compat "^3.40.0" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -962,95 +812,97 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" - integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-transform-react-display-name" "^7.24.7" - "@babel/plugin-transform-react-jsx" "^7.24.7" - "@babel/plugin-transform-react-jsx-development" "^7.24.7" - "@babel/plugin-transform-react-pure-annotations" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" "@babel/preset-typescript@^7.18.6": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" -"@babel/runtime@^7.0.0": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.7.tgz#7ffb53c37a8f247c8c4d335e89cdf16a2e0d0fb6" - integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" + integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" - integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== +"@babel/template@^7.25.9", "@babel/template@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" + integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.26.9" + "@babel/types" "^7.26.9" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.26.9": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380" + integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.10" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.20.0", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9", "@babel/types@^7.4.4": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259" + integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== dependencies: - regenerator-runtime "^0.14.0" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" -"@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" - integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== +"@emnapi/core@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16" + integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog== dependencies: - regenerator-runtime "^0.14.0" + "@emnapi/wasi-threads" "1.0.1" + tslib "^2.4.0" -"@babel/template@^7.24.7", "@babel/template@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" - integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.6" - "@babel/parser" "^7.25.6" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" - debug "^4.3.1" - globals "^11.1.0" +"@emnapi/runtime@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" + integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== + dependencies: + tslib "^2.4.0" -"@babel/types@^7.20.0", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.4.4": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" - integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== +"@emnapi/wasi-threads@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" + integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw== dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" + tslib "^2.4.0" "@emotion/babel-plugin@^11.12.0": - version "11.12.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz#7b43debb250c313101b3f885eba634f1d723fcc2" - integrity sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw== + version "11.13.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== dependencies: "@babel/helper-module-imports" "^7.16.7" "@babel/runtime" "^7.18.3" "@emotion/hash" "^0.9.2" "@emotion/memoize" "^0.9.0" - "@emotion/serialize" "^1.2.0" + "@emotion/serialize" "^1.3.3" babel-plugin-macros "^3.1.0" convert-source-map "^1.5.0" escape-string-regexp "^4.0.0" @@ -1058,14 +910,14 @@ source-map "^0.5.7" stylis "4.2.0" -"@emotion/cache@*", "@emotion/cache@^11.13.0", "@emotion/cache@^11.13.1": - version "11.13.1" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.1.tgz#fecfc54d51810beebf05bf2a161271a1a91895d7" - integrity sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw== +"@emotion/cache@*", "@emotion/cache@^11.13.0", "@emotion/cache@^11.13.5": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== dependencies: "@emotion/memoize" "^0.9.0" "@emotion/sheet" "^1.4.0" - "@emotion/utils" "^1.4.0" + "@emotion/utils" "^1.4.2" "@emotion/weak-memoize" "^0.4.0" stylis "4.2.0" @@ -1086,9 +938,9 @@ integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== "@emotion/is-prop-valid@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.0.tgz#bd84ba972195e8a2d42462387581560ef780e4e2" - integrity sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240" + integrity sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw== dependencies: "@emotion/memoize" "^0.9.0" @@ -1116,26 +968,15 @@ "@emotion/weak-memoize" "^0.4.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@*", "@emotion/serialize@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.2.tgz#e1c1a2e90708d5d85d81ccaee2dfeb3cc0cccf7a" - integrity sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA== - dependencies: - "@emotion/hash" "^0.9.2" - "@emotion/memoize" "^0.9.0" - "@emotion/unitless" "^0.10.0" - "@emotion/utils" "^1.4.1" - csstype "^3.0.2" - -"@emotion/serialize@^1.2.0", "@emotion/serialize@^1.3.0", "@emotion/serialize@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.1.tgz#490b660178f43d2de8e92b278b51079d726c05c3" - integrity sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA== +"@emotion/serialize@*", "@emotion/serialize@^1.3.0", "@emotion/serialize@^1.3.1", "@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== dependencies: "@emotion/hash" "^0.9.2" "@emotion/memoize" "^0.9.0" "@emotion/unitless" "^0.10.0" - "@emotion/utils" "^1.4.0" + "@emotion/utils" "^1.4.2" csstype "^3.0.2" "@emotion/server@11.10.0": @@ -1171,19 +1012,14 @@ integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== "@emotion/use-insertion-effect-with-fallbacks@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz#1a818a0b2c481efba0cf34e5ab1e0cb2dcb9dfaf" - integrity sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw== - -"@emotion/utils@*", "@emotion/utils@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.1.tgz#b3adbb43de12ee2149541c4f1337d2eb7774f0ad" - integrity sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== -"@emotion/utils@^1.2.0", "@emotion/utils@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.0.tgz#262f1d02aaedb2ec91c83a0955dd47822ad5fbdd" - integrity sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ== +"@emotion/utils@*", "@emotion/utils@^1.2.0", "@emotion/utils@^1.4.0", "@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== "@emotion/weak-memoize@^0.3.0": version "0.3.1" @@ -1211,19 +1047,19 @@ strip-json-comments "^3.1.1" "@floating-ui/core@^1.6.0": - version "1.6.8" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" - integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA== + version "1.6.9" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.9.tgz#64d1da251433019dafa091de9b2886ff35ec14e6" + integrity sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw== dependencies: - "@floating-ui/utils" "^0.2.8" + "@floating-ui/utils" "^0.2.9" "@floating-ui/dom@^1.0.0": - version "1.6.12" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556" - integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w== + version "1.6.13" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34" + integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w== dependencies: "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.8" + "@floating-ui/utils" "^0.2.9" "@floating-ui/react-dom@^2.1.1": version "2.1.2" @@ -1232,10 +1068,10 @@ dependencies: "@floating-ui/dom" "^1.0.0" -"@floating-ui/utils@^0.2.8": - version "0.2.8" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" - integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== +"@floating-ui/utils@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" + integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== "@heroicons/react@2.0.15": version "2.0.15" @@ -1262,9 +1098,9 @@ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -1293,19 +1129,19 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@monaco-editor/loader@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558" - integrity sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg== +"@monaco-editor/loader@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.5.0.tgz#dcdbc7fe7e905690fb449bed1c251769f325c55d" + integrity sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw== dependencies: state-local "^1.0.6" "@monaco-editor/react@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.6.0.tgz#bcc68671e358a21c3814566b865a54b191e24119" - integrity sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw== + version "4.7.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.7.0.tgz#35a1ec01bfe729f38bfc025df7b7bac145602a60" + integrity sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA== dependencies: - "@monaco-editor/loader" "^1.4.0" + "@monaco-editor/loader" "^1.5.0" "@mui/base@5.0.0-beta.61": version "5.0.0-beta.61" @@ -1321,9 +1157,9 @@ prop-types "^15.8.1" "@mui/core-downloads-tracker@^6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.6.tgz#73d96e75689b2af922a989123149a3497c8a96fa" - integrity sha512-nz1SlR9TdBYYPz4qKoNasMPRiGb4PaIHFkzLzhju0YVYS5QSuFF2+n7CsiHMIDcHv3piPu/xDWI53ruhOqvZwQ== + version "6.4.7" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.7.tgz#df62091560024a6412b0f35dcd584f9dba70dced" + integrity sha512-XjJrKFNt9zAKvcnoIIBquXyFyhfrHYuttqMsoDS7lM7VwufYG4fAPw4kINjBFg++fqXM2BNAuWR9J7XVIuKIKg== "@mui/icons-material@6.1.6": version "6.1.6" @@ -1363,28 +1199,28 @@ react-is "^18.3.1" react-transition-group "^4.4.5" -"@mui/private-theming@^6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.1.6.tgz#9966bf2eca3d626cddd6e173752f46d344c7d7d1" - integrity sha512-ioAiFckaD/fJSnTrUMWgjl9HYBWt7ixCh7zZw7gDZ+Tae7NuprNV6QJK95EidDT7K0GetR2rU3kAeIR61Myttw== +"@mui/private-theming@^6.1.6", "@mui/private-theming@^6.4.6": + version "6.4.6" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.6.tgz#77c0b150be94c061b34b34ce00eb60cdfb92837f" + integrity sha512-T5FxdPzCELuOrhpA2g4Pi6241HAxRwZudzAuL9vBvniuB5YU82HCmrARw32AuCiyTfWzbrYGGpZ4zyeqqp9RvQ== dependencies: "@babel/runtime" "^7.26.0" - "@mui/utils" "^6.1.6" + "@mui/utils" "^6.4.6" prop-types "^15.8.1" -"@mui/styled-engine@^6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.1.6.tgz#61996621a0297aac16061e1739a738a899613fd6" - integrity sha512-I+yS1cSuSvHnZDBO7e7VHxTWpj+R7XlSZvTC4lS/OIbUNJOMMSd3UDP6V2sfwzAdmdDNBi7NGCRv2SZ6O9hGDA== +"@mui/styled-engine@^6.1.6", "@mui/styled-engine@^6.4.6": + version "6.4.6" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.4.6.tgz#cd0783adbb066a349e1995f0e1a7b8c3c2d59738" + integrity sha512-vSWYc9ZLX46be5gP+FCzWVn5rvDr4cXC5JBZwSIkYk9xbC7GeV+0kCvB8Q6XLFQJy+a62bbqtmdwS4Ghi9NBlQ== dependencies: "@babel/runtime" "^7.26.0" - "@emotion/cache" "^11.13.1" - "@emotion/serialize" "^1.3.2" + "@emotion/cache" "^11.13.5" + "@emotion/serialize" "^1.3.3" "@emotion/sheet" "^1.4.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@6.1.6", "@mui/system@^6.1.6": +"@mui/system@6.1.6": version "6.1.6" resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.1.6.tgz#d335d6952092f3c758c8b78c2d993aa13ef58175" integrity sha512-qOf1VUE9wK8syiB0BBCp82oNBAVPYdj4Trh+G1s+L+ImYiKlubWhhqlnvWt3xqMevR+D2h1CXzA1vhX2FvA+VQ== @@ -1398,22 +1234,36 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.19": - version "7.2.19" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.19.tgz#c941954dd24393fdce5f07830d44440cf4ab6c80" - integrity sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA== +"@mui/system@^6.1.6": + version "6.4.7" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.7.tgz#a4a8e541a2f1efef1c85a338723aa2f2d0a31e8e" + integrity sha512-7wwc4++Ak6tGIooEVA9AY7FhH2p9fvBMORT4vNLMAysH3Yus/9B9RYMbrn3ANgsOyvT3Z7nE+SP8/+3FimQmcg== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/private-theming" "^6.4.6" + "@mui/styled-engine" "^6.4.6" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.6" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" -"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.1.6.tgz#4b9fd34da3a1dd4700fe506a20ca7da3933ba48e" - integrity sha512-sBS6D9mJECtELASLM+18WUcXF6RH3zNxBRFeyCRg8wad6NbyNrdxLuwK+Ikvc38sTZwBzAz691HmSofLqHd9sQ== +"@mui/types@^7.2.19", "@mui/types@^7.2.21": + version "7.2.21" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.21.tgz#63f50874eda8e4a021a69aaa8ba9597369befda2" + integrity sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww== + +"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.1.6", "@mui/utils@^6.4.6": + version "6.4.6" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.6.tgz#307828bee501d30ed5cd1e339ca28c9efcc4e3f9" + integrity sha512-43nZeE1pJF2anGafNydUcYFPtHwAqiBiauRtaMvurdrZI3YrUjHkAu43RBsxef7OFtJMXGiHFvq43kb7lig0sA== dependencies: "@babel/runtime" "^7.26.0" - "@mui/types" "^7.2.19" - "@types/prop-types" "^15.7.13" + "@mui/types" "^7.2.21" + "@types/prop-types" "^15.7.14" clsx "^2.1.1" prop-types "^15.8.1" - react-is "^18.3.1" + react-is "^19.0.0" "@mui/x-date-pickers@7.22.1": version "7.22.1" @@ -1441,10 +1291,19 @@ resolved "https://registry.yarnpkg.com/@musement/iso-duration/-/iso-duration-1.0.0.tgz#b45ba8acb0b998488744e41da15a391e5f550c48" integrity sha512-gTJOmIXfsh5AyOdsUwkYcAIdWd9fCa/e0dV7mfV/B+oDOoJne5ciNMazDdQacylbWTQpF5aMdp2xrHVEwiryfg== -"@next/env@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.6.tgz#c1148e2e1aa166614f05161ee8f77ded467062bc" - integrity sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw== +"@napi-rs/wasm-runtime@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz#288f03812a408bc53c2c3686c65f38fe90f295eb" + integrity sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw== + dependencies: + "@emnapi/core" "^1.3.1" + "@emnapi/runtime" "^1.3.1" + "@tybys/wasm-util" "^0.9.0" + +"@next/env@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.8.tgz#404d3b3e5881b6a0510500c6cc97e3589a2e6371" + integrity sha512-YmiG58BqyZ2FjrF2+5uZExL2BrLr8RTQzLXNDJ8pJr0O+rPlOeDPXp1p1/4OrR3avDidzZo3D8QO2cuDv1KCkw== "@next/eslint-plugin-next@13.1.6": version "13.1.6" @@ -1453,50 +1312,50 @@ dependencies: glob "7.1.7" -"@next/swc-darwin-arm64@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz#b15d139d8971360fca29be3bdd703c108c9a45fb" - integrity sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA== - -"@next/swc-darwin-x64@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz#9c72ee31cc356cb65ce6860b658d807ff39f1578" - integrity sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA== - -"@next/swc-linux-arm64-gnu@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz#59f5f66155e85380ffa26ee3d95b687a770cfeab" - integrity sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg== - -"@next/swc-linux-arm64-musl@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz#f012518228017052736a87d69bae73e587c76ce2" - integrity sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q== - -"@next/swc-linux-x64-gnu@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz#339b867a7e9e7ee727a700b496b269033d820df4" - integrity sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw== - -"@next/swc-linux-x64-musl@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz#ae0ae84d058df758675830bcf70ca1846f1028f2" - integrity sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ== - -"@next/swc-win32-arm64-msvc@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz#a5cc0c16920485a929a17495064671374fdbc661" - integrity sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg== - -"@next/swc-win32-ia32-msvc@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz#6a2409b84a2cbf34bf92fe714896455efb4191e4" - integrity sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg== - -"@next/swc-win32-x64-msvc@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz#4a3e2a206251abc729339ba85f60bc0433c2865d" - integrity sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ== +"@next/swc-darwin-arm64@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.8.tgz#c32bc6662326a623f177e8b9a511128d7ea5af4d" + integrity sha512-HkFw3QPeIy9bImWVTbsvzfEWQkuzBEQTK/L7ORMg+9sXNN0vNR5Gz/chD4/VbozTHyA38lWTrMBfLoWVpD+2IA== + +"@next/swc-darwin-x64@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.8.tgz#bef7df0237a434b6ad23c1e13ae2e564b2ebcccf" + integrity sha512-TpRTH5FyH4qGw0MCq6UE3yQGWtwhdDCwSE0wWcYwDWC5cpx3mGKVmAVKwDNbrpk0U5bl0tEzgxp5X4UPHWA81A== + +"@next/swc-linux-arm64-gnu@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.8.tgz#5bad9476ba774487bcafddec7bd824f1427555f0" + integrity sha512-KUPKuu4EZCCTU5M61YLpuL2fKMWQRijJLtBk2Hph8FJUx6RsNRDwS0MVlJqAr2IwjJwrNxYm5QAdQ1LuRbrZMw== + +"@next/swc-linux-arm64-musl@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.8.tgz#55df6e5f980570d3cb821b76232d9e7224907886" + integrity sha512-hLyaBgXynyuVgqLwzcwF6loc0XuEz9zuK8XbzX5uslj3aqiw38l+qL1IJNLzHmkDX0nfVuBfIRV6QPsm0sCXnQ== + +"@next/swc-linux-x64-gnu@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.8.tgz#c1d36f7830ad53118d145ac250ff144a1a5b7778" + integrity sha512-IhxeEpi+U85GU9p6bVSAFMwuCNRdpmHueM8Z9DRft8f70Rvt3Q9tNFJxqLxAbiGoNOR7TuLNjAw2wJucHfMw3g== + +"@next/swc-linux-x64-musl@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.8.tgz#670bd7f10cf4324b22a5f1573558f5f011b421f8" + integrity sha512-NQICDU7X/tcAVkTEfvpkq5Z1EViodDj3m18wiyJ5wpzOFf4LH7vFjLBVCWNcf3/sfqv/yfD8jshqrffOPtZitg== + +"@next/swc-win32-arm64-msvc@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.8.tgz#203dcc899f438826f3a22ffe0fb0d56a324625ac" + integrity sha512-ndLIuFI/26CrhG+pqGkW+yPV/xuIijgaZbzPhujlDaUGczizzXgnI78iuisdPdGoMHLlQ9pRkFUeMGzENdyEHg== + +"@next/swc-win32-ia32-msvc@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.8.tgz#21eb6afb07d5cb9b3600cf33d6bc709b4d59ea20" + integrity sha512-9HUxSP76n8VbEtwZVNZDMY32Y4fm53ORaiopQkGQ4q54okYa5T8szhVkLTFKu4gaA/KJcJGvCC5dDIaqfSta1w== + +"@next/swc-win32-x64-msvc@13.5.8": + version "13.5.8" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.8.tgz#21770d42a25dc591661f027f41100c4b48ca5938" + integrity sha512-WFisiehrLrkX/nv6Vg7CUT6tdrhO6Nv0mLh5zuYQ5GLD4OnaOHkBt9iRkOziMy7ny+qF+V7023+loZIV/R9j8A== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1541,17 +1400,32 @@ dependencies: "@babel/runtime" "^7.20.13" +"@react-pdf/fns@3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-pdf/fns/-/fns-3.1.2.tgz#9ce7351d9fdf1cdb6e9c6ffd6801bc65f29f991c" + integrity sha512-qTKGUf0iAMGg2+OsUcp9ffKnKi41RukM/zYIWMDJ4hRVYSr89Q7e3wSDW/Koqx3ea3Uy/z3h2y3wPX6Bdfxk6g== + "@react-pdf/font@^2.3.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-2.5.1.tgz#656fba2e773c20bb107189e8dca594ec83c49053" - integrity sha512-Hyb2zBb92Glc3lvhmJfy4dO2Mj29KB26Uk12Ua9EhKAdiuCTLBqgP8Oe1cGwrvDI7xA4OOcwvBMdYh0vhOUHzA== + version "2.5.2" + resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-2.5.2.tgz#4a2fcaac3b55470a2727387ec28937b54cba0d77" + integrity sha512-Ud0EfZ2FwrbvwAWx8nz+KKLmiqACCH9a/N/xNDOja0e/YgSnqTpuyHegFBgIMKjuBtO5dNvkb4dXkxAhGe/ayw== dependencies: "@babel/runtime" "^7.20.13" - "@react-pdf/types" "^2.5.0" + "@react-pdf/types" "^2.6.0" cross-fetch "^3.1.5" fontkit "^2.0.2" is-url "^1.2.4" +"@react-pdf/font@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-4.0.2.tgz#58ede51937bb57025dcf221b107e248d0ea9d60b" + integrity sha512-/dAWu7Y2RD1RxarDZ9SkYPHgBYOhmcDnet4W/qN/m8k+A2Hr3ja54GymSR7GGxWBtxjKtNauVKrTa9LS1n8WUw== + dependencies: + "@react-pdf/pdfkit" "^4.0.3" + "@react-pdf/types" "^2.9.0" + fontkit "^2.0.2" + is-url "^1.2.4" + "@react-pdf/image@^2.3.6": version "2.3.6" resolved "https://registry.yarnpkg.com/@react-pdf/image/-/image-2.3.6.tgz#72444842517f8b0c08bbf4c216d8b41110498d16" @@ -1563,27 +1437,27 @@ jay-peg "^1.0.2" "@react-pdf/layout@^3.3.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-3.12.1.tgz#643cc00117846095b8d7f90e09972a4f148b85dd" - integrity sha512-BxSeykDxvADlpe4OGtQ7NH46QXq3uImAYsTHOPLCwbXMniQ1O3uCBx7H+HthxkCNshgYVPp9qS3KyvQv/oIZwg== + version "3.13.0" + resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-3.13.0.tgz#2ef1423f32e891b5ec24f2d9d5c2daad4da01c66" + integrity sha512-lpPj/EJYHFOc0ALiJwLP09H28B4ADyvTjxOf67xTF+qkWd+dq1vg7dw3wnYESPnWk5T9NN+HlUenJqdYEY9AvA== dependencies: "@babel/runtime" "^7.20.13" "@react-pdf/fns" "2.2.1" "@react-pdf/image" "^2.3.6" - "@react-pdf/pdfkit" "^3.1.10" + "@react-pdf/pdfkit" "^3.2.0" "@react-pdf/primitives" "^3.1.1" - "@react-pdf/stylesheet" "^4.2.5" + "@react-pdf/stylesheet" "^4.3.0" "@react-pdf/textkit" "^4.4.1" - "@react-pdf/types" "^2.5.0" + "@react-pdf/types" "^2.6.0" cross-fetch "^3.1.5" emoji-regex "^10.3.0" queue "^6.0.1" yoga-layout "^2.0.1" -"@react-pdf/pdfkit@^3.0.1", "@react-pdf/pdfkit@^3.1.10": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-3.1.10.tgz#06c919d6279936a07e75929ed5e1b8c1edc5e1a0" - integrity sha512-P/qPBtCFo2HDJD0i6NfbmoBRrsOVO8CIogYsefwG4fklTo50zNgnMM5U1WLckTuX8Qt1ThiQuokmTG5arheblA== +"@react-pdf/pdfkit@^3.0.1", "@react-pdf/pdfkit@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-3.2.0.tgz#d4a088b8cc61c35512dc885e67ff2c6058518bea" + integrity sha512-OBfCcnTC6RpD9uv9L2woF60Zj1uQxhLFzTBXTdcYE9URzPE/zqXIyzpXEA4Vf3TFbvBCgFE2RzJ2ZUS0asq7yA== dependencies: "@babel/runtime" "^7.20.13" "@react-pdf/png-js" "^2.3.1" @@ -1593,6 +1467,20 @@ jay-peg "^1.0.2" vite-compatible-readable-stream "^3.6.1" +"@react-pdf/pdfkit@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-4.0.3.tgz#8b8a0e7e2aadbbada738a1c164f06ffff2947c8b" + integrity sha512-k+Lsuq8vTwWsCqTp+CCB4+2N+sOTFrzwGA7aw3H9ix/PDWR9QksbmNg0YkzGbLAPI6CeawmiLHcf4trZ5ecLPQ== + dependencies: + "@babel/runtime" "^7.20.13" + "@react-pdf/png-js" "^3.0.0" + browserify-zlib "^0.2.0" + crypto-js "^4.2.0" + fontkit "^2.0.2" + jay-peg "^1.1.1" + linebreak "^1.1.0" + vite-compatible-readable-stream "^3.6.1" + "@react-pdf/png-js@^2.3.1": version "2.3.1" resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-2.3.1.tgz#5381d5443ac1134e98fc446fa1debb45950665bc" @@ -1600,21 +1488,33 @@ dependencies: browserify-zlib "^0.2.0" +"@react-pdf/png-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-3.0.0.tgz#c0b7dc7c77e36f0830e9b7bccca7ddd64ada1c5e" + integrity sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA== + dependencies: + browserify-zlib "^0.2.0" + "@react-pdf/primitives@^3.0.0", "@react-pdf/primitives@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-3.1.1.tgz#45a3253806fa61046f3821b8553bfee3cd848d14" integrity sha512-miwjxLwTnO3IjoqkTVeTI+9CdyDggwekmSLhVCw+a/7FoQc+gF3J2dSKwsHvAcVFM0gvU8mzCeTofgw0zPDq0w== +"@react-pdf/primitives@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-4.1.1.tgz#c7bfb7e83173661b6ec50ada4aba8dc9e94d0563" + integrity sha512-IuhxYls1luJb7NUWy6q5avb1XrNaVj9bTNI40U9qGRuS6n7Hje/8H8Qi99Z9UKFV74bBP3DOf3L1wV2qZVgVrQ== + "@react-pdf/render@^3.2.1": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-3.4.4.tgz#d04bc3b3745dad120721ce6d8655128d552de818" - integrity sha512-CfGxWmVgrY3JgmB1iMnz2W6Ck+8pisZeFt8vGlxP+JfT+0onr208pQvGSV5KwA9LGhAdABxqc/+y17V3vtKdFA== + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-3.5.0.tgz#1be1f7ca280473680ce4f11e90b697e2c635ad16" + integrity sha512-gFOpnyqCgJ6l7VzfJz6rG1i2S7iVSD8bUHDjPW9Mze8TmyksHzN2zBH3y7NbsQOw1wU6hN4NhRmslrsn+BRDPA== dependencies: "@babel/runtime" "^7.20.13" "@react-pdf/fns" "2.2.1" "@react-pdf/primitives" "^3.1.1" "@react-pdf/textkit" "^4.4.1" - "@react-pdf/types" "^2.5.0" + "@react-pdf/types" "^2.6.0" abs-svg-path "^0.1.1" color-string "^1.9.1" normalize-svg-path "^1.1.0" @@ -1639,14 +1539,26 @@ queue "^6.0.1" scheduler "^0.17.0" -"@react-pdf/stylesheet@^4.2.5": - version "4.2.5" - resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-4.2.5.tgz#9ab1c76333d725ecad07109a8531a93f0a6995c6" - integrity sha512-XnmapeCW+hDuNdVwpuvO04WKv71wAs8aH+saIq29Bo2fp1SxznHTcQArTZtK6Wgr/E9BHXeB2iAPpUZuI6G+xA== +"@react-pdf/stylesheet@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-4.3.0.tgz#3b0ad11e8d304347c8de5caacaa708f16d4a0473" + integrity sha512-x7IVZOqRrUum9quuDeFXBveXwBht+z/6B0M+z4a4XjfSg1vZVvzoTl07Oa1yvQ/4yIC5yIkG2TSMWeKnDB+hrw== dependencies: "@babel/runtime" "^7.20.13" "@react-pdf/fns" "2.2.1" - "@react-pdf/types" "^2.5.0" + "@react-pdf/types" "^2.6.0" + color-string "^1.9.1" + hsl-to-hex "^1.0.0" + media-engine "^1.0.3" + postcss-value-parser "^4.1.0" + +"@react-pdf/stylesheet@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-6.1.0.tgz#ca6b5b0f7cc749b36379379d943f648f8527d71a" + integrity sha512-BGZ2sYNUp38VJUegjva/jsri3iiRGnVNjWI+G9dTwAvLNOmwFvSJzqaCsEnqQ/DW5mrTBk/577FhDY7pv6AidA== + dependencies: + "@react-pdf/fns" "3.1.2" + "@react-pdf/types" "^2.9.0" color-string "^1.9.1" hsl-to-hex "^1.0.0" media-engine "^1.0.3" @@ -1663,10 +1575,14 @@ hyphen "^1.6.4" unicode-properties "^1.4.1" -"@react-pdf/types@^2.2.0", "@react-pdf/types@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@react-pdf/types/-/types-2.5.0.tgz#3e14a41c5a546faa9811c4105611c7ed7c883e02" - integrity sha512-XsVRkt0hQ60I4e3leAVt+aZR3KJCaJd179BfJHAv4F4x6Vq3yqkry8lcbUWKGKDw1j3/8sW4FsgGR41SFvsG9A== +"@react-pdf/types@^2.2.0", "@react-pdf/types@^2.6.0", "@react-pdf/types@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@react-pdf/types/-/types-2.9.0.tgz#a2721a847cb1ace2c31ca29b0303c7b51a2241c2" + integrity sha512-ckj80vZLlvl9oYrQ4tovEaqKWP3O06Eb1D48/jQWbdwz1Yh7Y9v1cEmwlP8ET+a1Whp8xfdM0xduMexkuPANCQ== + dependencies: + "@react-pdf/font" "^4.0.2" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/stylesheet" "^6.1.0" "@reduxjs/toolkit@1.9.2": version "1.9.2" @@ -1689,9 +1605,9 @@ integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== "@rushstack/eslint-patch@^1.1.3": - version "1.10.4" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz#427d5549943a9c6fce808e39ea64dbe60d4047f1" - integrity sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz#75dce8e972f90bba488e2b0cc677fb233aa357ab" + integrity sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ== "@sinonjs/text-encoding@^0.7.2": version "0.7.3" @@ -1812,11 +1728,11 @@ tslib "^2.4.0" "@swc/helpers@^0.5.12": - version "0.5.13" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.13.tgz#33e63ff3cd0cade557672bd7888a39ce7d115a8c" - integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== dependencies: - tslib "^2.4.0" + tslib "^2.8.0" "@tanstack/match-sorter-utils@8.19.4": version "8.19.4" @@ -1825,245 +1741,264 @@ dependencies: remove-accents "0.5.0" -"@tanstack/query-core@5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.54.1.tgz#8d6c5e6691dd023f9181d69f7f9d790f52f1bdda" - integrity sha512-hKS+WRpT5zBFip21pB6Jx1C0hranWQrbv5EJ7qPoiV5MYI3C8rTCqWC9DdBseiPT1JgQWh8Y55YthuYZNiw3Xw== +"@tanstack/query-core@5.68.0": + version "5.68.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.68.0.tgz#3765573de58741c68fb80b128d3e3ffb4d80cb68" + integrity sha512-r8rFYYo8/sY/LNaOqX84h12w7EQev4abFXDWy4UoDVUJzJ5d9Fbmb8ayTi7ScG+V0ap44SF3vNs/45mkzDGyGw== -"@tanstack/query-devtools@5.54.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.54.0.tgz#dc0faa2551c6c65e54c273a1d09f1abf38f1329e" - integrity sha512-B8Sa6mh7/4m2fyk2/YnUXeOZ1/us7G/C/i1It8YcCbieXc8vf1AdSYjR+mZIoJeKOKLqA741hZqfj8d4F1NCVg== +"@tanstack/query-devtools@5.67.2": + version "5.67.2" + resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.67.2.tgz#890ae9913bd21d3969c7fd85c68b1bd1500cfc57" + integrity sha512-O4QXFFd7xqp6EX7sdvc9tsVO8nm4lpWBqwpgjpVLW5g7IeOY6VnS/xvs/YzbRhBVkKTMaJMOUGU7NhSX+YGoNg== "@tanstack/react-query-devtools@^5.51.11": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.54.1.tgz#6840c665d629bfb3e7b70a14d3544b7445e014f2" - integrity sha512-6kJoLujP1f+8dSoOjK15uJl79XhTAdyPIKIcMJ33s5zIva6d7AUuTWoj7opcfkUvU/Jy0xXivHPsrhFHhi0SxA== + version "5.68.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.68.0.tgz#83a76ae279796e0c2105cd760ef27e93bee79155" + integrity sha512-h9ArHkfa7SD5eGnJ9h+9M5uYWBdeVeY+WalrtGLCAtJJvHx6/RrtbbzxeoEQbPyx3f0kPcwJ58DGQ+7CBXelpg== dependencies: - "@tanstack/query-devtools" "5.54.0" + "@tanstack/query-devtools" "5.67.2" "@tanstack/react-query@^5.51.11": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.54.1.tgz#55d9d9b290362160008bf5d5d7dedd485afbfc5e" - integrity sha512-SuMi4JBYv49UtmiRyqjxY7XAnE1qwLht9nlkC8sioxFXz5Uzj30lepiKf2mYXuXfC7fHYjTrAPkNx+427pRHXA== + version "5.68.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.68.0.tgz#f7b242eb800ce7c36b4edbe26c9ba8478eb18826" + integrity sha512-mMOdGDKlwTP/WV72QqSNf4PAMeoBp/DqBHQ222wBfb51Looi8QUqnCnb9O98ZgvNISmy6fzxRGBJdZ+9IBvX2Q== dependencies: - "@tanstack/query-core" "5.54.1" + "@tanstack/query-core" "5.68.0" -"@tanstack/react-table@8.20.5", "@tanstack/react-table@^8.19.2": - version "8.20.5" - resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.20.5.tgz#19987d101e1ea25ef5406dce4352cab3932449d8" - integrity sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA== +"@tanstack/react-table@8.20.6": + version "8.20.6" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.20.6.tgz#a1f3103327aa59aa621931f4087a7604a21054d0" + integrity sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ== dependencies: "@tanstack/table-core" "8.20.5" -"@tanstack/react-virtual@3.10.6": - version "3.10.6" - resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.10.6.tgz#f90f97d50a8d83dcd3c3a2d425aadbb55d4837db" - integrity sha512-xaSy6uUxB92O8mngHZ6CvbhGuqxQ5lIZWCBy+FjhrbHmOwc6BnOnKkYm2FsB1/BpKw/+FVctlMbEtI+F6I1aJg== +"@tanstack/react-table@^8.19.2": + version "8.21.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.21.2.tgz#6a7fce828b64547e33f4606ada8114db496007cc" + integrity sha512-11tNlEDTdIhMJba2RBH+ecJ9l1zgS2kjmexDPAraulc8jeNA4xocSNeyzextT0XJyASil4XsCYlJmf5jEWAtYg== + dependencies: + "@tanstack/table-core" "8.21.2" + +"@tanstack/react-virtual@3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz#d6b9bd999c181f0a2edce270c87a2febead04322" + integrity sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ== dependencies: - "@tanstack/virtual-core" "3.10.6" + "@tanstack/virtual-core" "3.11.2" "@tanstack/table-core@8.20.5": version "8.20.5" resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.20.5.tgz#3974f0b090bed11243d4107283824167a395cf1d" integrity sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg== -"@tanstack/virtual-core@3.10.6": - version "3.10.6" - resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.6.tgz#babe3989b2344a5f12fc64129f9bbed5d3402999" - integrity sha512-1giLc4dzgEKLMx5pgKjL6HlG5fjZMgCjzlKAlpr7yoUtetVPELgER1NtephAI910nMwfPTHNyWKSFmJdHkz2Cw== +"@tanstack/table-core@8.21.2": + version "8.21.2" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.21.2.tgz#dd57595a1773652bb6fb437e90a5f5386a49fd7e" + integrity sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA== -"@tiptap/core@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.9.1.tgz#ceed211a9ecfe25a94e0e0863936169990e75aee" - integrity sha512-tifnLL/ARzQ6/FGEJjVwj9UT3v+pENdWHdk9x6F3X0mB1y0SeCjV21wpFLYESzwNdBPAj8NMp8Behv7dBnhIfw== +"@tanstack/virtual-core@3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz#00409e743ac4eea9afe5b7708594d5fcebb00212" + integrity sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw== -"@tiptap/extension-blockquote@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.9.1.tgz#e27ae65b6eb753bf0bd4ed717121338a7358e299" - integrity sha512-Y0jZxc/pdkvcsftmEZFyG+73um8xrx6/DMfgUcNg3JAM63CISedNcr+OEI11L0oFk1KFT7/aQ9996GM6Kubdqg== +"@tiptap/core@^2.11.5", "@tiptap/core@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.11.5.tgz#2bf1b08c4ca2467778d0a109634c45ab475522f4" + integrity sha512-jb0KTdUJaJY53JaN7ooY3XAxHQNoMYti/H6ANo707PsLXVeEqJ9o8+eBup1JU5CuwzrgnDc2dECt2WIGX9f8Jw== -"@tiptap/extension-bold@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.9.1.tgz#8f078766b043ab44208cb0610f1847263b4313cf" - integrity sha512-e2P1zGpnnt4+TyxTC5pX/lPxPasZcuHCYXY0iwQ3bf8qRQQEjDfj3X7EI+cXqILtnhOiviEOcYmeu5op2WhQDg== +"@tiptap/extension-blockquote@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.11.5.tgz#d43ae78f5eba7de1b9138820502e950bae83c31c" + integrity sha512-MZfcRIzKRD8/J1hkt/eYv49060GTL6qGR3NY/oTDuw2wYzbQXXLEbjk8hxAtjwNn7G+pWQv3L+PKFzZDxibLuA== -"@tiptap/extension-bubble-menu@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.9.1.tgz#b130d8a0e2879a9378c2e1978c8c3122a1418fa8" - integrity sha512-DWUF6NG08/bZDWw0jCeotSTvpkyqZTi4meJPomG9Wzs/Ol7mEwlNCsCViD999g0+IjyXFatBk4DfUq1YDDu++Q== +"@tiptap/extension-bold@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.11.5.tgz#7fc13d835067fbee4ff2be83a694f5200ba50e41" + integrity sha512-OAq03MHEbl7MtYCUzGuwb0VpOPnM0k5ekMbEaRILFU5ZC7cEAQ36XmPIw1dQayrcuE8GZL35BKub2qtRxyC9iA== + +"@tiptap/extension-bubble-menu@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.11.5.tgz#75da9bcea2a6579cd3ad41cf82f7bc7369c1816d" + integrity sha512-rx+rMd7EEdht5EHLWldpkzJ56SWYA9799b33ustePqhXd6linnokJCzBqY13AfZ9+xp3RsR6C0ZHI9GGea0tIA== dependencies: tippy.js "^6.3.7" -"@tiptap/extension-bullet-list@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.9.1.tgz#25d28f5f141404142be9f965413ab2ecea61de9e" - integrity sha512-0hizL/0j9PragJObjAWUVSuGhN1jKjCFnhLQVRxtx4HutcvS/lhoWMvFg6ZF8xqWgIa06n6A7MaknQkqhTdhKA== +"@tiptap/extension-bullet-list@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.11.5.tgz#84c6bf623c5dffcd73dd24d012c9636191031d43" + integrity sha512-VXwHlX6A/T6FAspnyjbKDO0TQ+oetXuat6RY1/JxbXphH42nLuBaGWJ6pgy6xMl6XY8/9oPkTNrfJw/8/eeRwA== -"@tiptap/extension-code-block@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.9.1.tgz#5a8c76729759e4505af40234c6011ad674ae4f7a" - integrity sha512-A/50wPWDqEUUUPhrwRKILP5gXMO5UlQ0F6uBRGYB9CEVOREam9yIgvONOnZVJtszHqOayjIVMXbH/JMBeq11/g== +"@tiptap/extension-code-block@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.11.5.tgz#b90cea403884630f3f86c7629815250e8a266802" + integrity sha512-ksxMMvqLDlC+ftcQLynqZMdlJT1iHYZorXsXw/n+wuRd7YElkRkd6YWUX/Pq/njFY6lDjKiqFLEXBJB8nrzzBA== -"@tiptap/extension-code@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.9.1.tgz#5652c379cbdf06f95c90f93085256b24d421d9d9" - integrity sha512-WQqcVGe7i/E+yO3wz5XQteU1ETNZ00euUEl4ylVVmH2NM4Dh0KDjEhbhHlCM0iCfLUo7jhjC7dmS+hMdPUb+Tg== +"@tiptap/extension-code@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.11.5.tgz#a550c544804e65507ab66dc8ab89a1e2f7d9228d" + integrity sha512-xOvHevNIQIcCCVn9tpvXa1wBp0wHN/2umbAZGTVzS+AQtM7BTo0tz8IyzwxkcZJaImONcUVYLOLzt2AgW1LltA== -"@tiptap/extension-document@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.9.1.tgz#ea65a86a4d2524ec65fc4775122f652840a89386" - integrity sha512-1a+HCoDPnBttjqExfYLwfABq8MYdiowhy/wp8eCxVb6KGFEENO53KapstISvPzqH7eOi+qRjBB1KtVYb/ZXicg== +"@tiptap/extension-document@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.11.5.tgz#1d650d232df46cf07b83e0a5cc64db1c70057f37" + integrity sha512-7I4BRTpIux2a0O2qS3BDmyZ5LGp3pszKbix32CmeVh7lN9dV7W5reDqtJJ9FCZEEF+pZ6e1/DQA362dflwZw2g== -"@tiptap/extension-dropcursor@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.9.1.tgz#737a6b40272d5aaaedd068ec93433564ba330909" - integrity sha512-wJZspSmJRkDBtPkzFz1g7gvZOEOayk8s93UHsgbJxcV4VWHYleZ5XhT74sZunSjefNDm3qC6v2BSgLp3vNHVKQ== +"@tiptap/extension-dropcursor@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.11.5.tgz#a1d6fad3379551449534bdb8135da2577a8ec8fb" + integrity sha512-uIN7L3FU0904ec7FFFbndO7RQE/yiON4VzAMhNn587LFMyWO8US139HXIL4O8dpZeYwYL3d1FnDTflZl6CwLlg== -"@tiptap/extension-floating-menu@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.9.1.tgz#d0c81ec19b0c57e28e92a990f3cf94c8f256fc96" - integrity sha512-MxZ7acNNsoNaKpetxfwi3Z11Bgrh0T2EJlCV77v9N1vWK38+st3H1WJanmLbPNtc2ocvhHJrz+DjDz3CWxQ9rQ== +"@tiptap/extension-floating-menu@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.11.5.tgz#97868901bae46e1826b9d2cfe5a4a33a446adfc1" + integrity sha512-HsMI0hV5Lwzm530Z5tBeyNCBNG38eJ3qjfdV2OHlfSf3+KOEfn6a5AUdoNaZO02LF79/8+7BaYU2drafag9cxQ== dependencies: tippy.js "^6.3.7" -"@tiptap/extension-gapcursor@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.9.1.tgz#04db79acd0d17f4aedfcf23233769ad2bf8a5817" - integrity sha512-jsRBmX01vr+5H02GljiHMo0n5H1vzoMLmFarxe0Yq2d2l9G/WV2VWX2XnGliqZAYWd1bI0phs7uLQIN3mxGQTw== +"@tiptap/extension-gapcursor@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.11.5.tgz#6771e387d90ef85ee834f4572627d76e303e1297" + integrity sha512-kcWa+Xq9cb6lBdiICvLReuDtz/rLjFKHWpW3jTTF3FiP3wx4H8Rs6bzVtty7uOVTfwupxZRiKICAMEU6iT0xrQ== -"@tiptap/extension-hard-break@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.9.1.tgz#dac8d752801ca217305affb54507f2a1769acf80" - integrity sha512-fCuaOD/b7nDjm47PZ58oanq7y4ccS2wjPh42Qm0B0yipu/1fmC8eS1SmaXmk28F89BLtuL6uOCtR1spe+lZtlQ== +"@tiptap/extension-hard-break@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.11.5.tgz#cf9610846cb7ab0f3a8d8dc37fd1fcee6a39d72f" + integrity sha512-q9doeN+Yg9F5QNTG8pZGYfNye3tmntOwch683v0CCVCI4ldKaLZ0jG3NbBTq+mosHYdgOH2rNbIORlRRsQ+iYQ== -"@tiptap/extension-heading@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.9.1.tgz#83a2cf3174b6e3da66298b5cd424aca8dc4738bb" - integrity sha512-SjZowzLixOFaCrV2cMaWi1mp8REK0zK1b3OcVx7bCZfVSmsOETJyrAIUpCKA8o60NwF7pwhBg0MN8oXlNKMeFw== +"@tiptap/extension-heading@^2.11.5", "@tiptap/extension-heading@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.11.5.tgz#e9a54e4cbb5c9c7fc95a24cc894a16751ecd185f" + integrity sha512-x/MV53psJ9baRcZ4k4WjnCUBMt8zCX7mPlKVT+9C/o+DEs/j/qxPLs95nHeQv70chZpSwCQCt93xMmuF0kPoAg== -"@tiptap/extension-history@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.9.1.tgz#7e60f4add5cdcbfa18a2edb7e9571c72f4c9c31a" - integrity sha512-wp9qR1NM+LpvyLZFmdNaAkDq0d4jDJ7z7Fz7icFQPu31NVxfQYO3IXNmvJDCNu8hFAbImpA5aG8MBuwzRo0H9w== +"@tiptap/extension-history@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.11.5.tgz#c636c8da784ad25886eb617cff6b4752ac9586d1" + integrity sha512-b+wOS33Dz1azw6F1i9LFTEIJ/gUui0Jwz5ZvmVDpL2ZHBhq1Ui0/spTT+tuZOXq7Y/uCbKL8Liu4WoedIvhboQ== -"@tiptap/extension-horizontal-rule@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.9.1.tgz#90acbd931aadd52affa3f8ac2aecead70839b342" - integrity sha512-ydUhABeaBI1CoJp+/BBqPhXINfesp1qMNL/jiDcMsB66fsD4nOyphpAJT7FaRFZFtQVF06+nttBtFZVkITQVqg== +"@tiptap/extension-horizontal-rule@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.11.5.tgz#b876f606386c51bc2ff45d4bd26267f5b104a850" + integrity sha512-3up2r1Du8/5/4ZYzTC0DjTwhgPI3dn8jhOCLu73m5F3OGvK/9whcXoeWoX103hYMnGDxBlfOje71yQuN35FL4A== "@tiptap/extension-image@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.9.1.tgz#774d8c43329920fb0f71df8eebacfeb9d1ddc823" - integrity sha512-aGqJnsuS8oagIhsx7wetm8jw4NEDsOV0OSx4FQ4VPlUqWlnzK0N+erFKKJmXTdAxL8PGzoPSlITFH63MV3eV3Q== - -"@tiptap/extension-italic@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.9.1.tgz#575f5f278d2f6999e0ad1e3b91010a010cb650e2" - integrity sha512-VkNA6Vz96+/+7uBlsgM7bDXXx4b62T1fDam/3UKifA72aD/fZckeWrbT7KrtdUbzuIniJSbA0lpTs5FY29+86Q== - -"@tiptap/extension-list-item@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.9.1.tgz#7e4e3f6805a716e683906901622eb9deb4be24f0" - integrity sha512-6O4NtYNR5N2Txi4AC0/4xMRJq9xd4+7ShxCZCDVL0WDVX37IhaqMO7LGQtA6MVlYyNaX4W1swfdJaqrJJ5HIUw== - -"@tiptap/extension-ordered-list@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.9.1.tgz#fe9d560ac548ce2e16f51fc92dfcc12ac9f92231" - integrity sha512-6J9jtv1XP8dW7/JNSH/K4yiOABc92tBJtgCsgP8Ep4+fjfjdj4HbjS1oSPWpgItucF2Fp/VF8qg55HXhjxHjTw== - -"@tiptap/extension-paragraph@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.9.1.tgz#1cce648545b7b03d9af6fb393b0af602cf567135" - integrity sha512-JOmT0xd4gd3lIhLwrsjw8lV+ZFROKZdIxLi0Ia05XSu4RLrrvWj0zdKMSB+V87xOWfSB3Epo95zAvnPox5Q16A== - -"@tiptap/extension-strike@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.9.1.tgz#8c8553e81696e6c30a6801a1cae6afaa4c37f002" - integrity sha512-V5aEXdML+YojlPhastcu7w4biDPwmzy/fWq0T2qjfu5Te/THcqDmGYVBKESBm5x6nBy5OLkanw2O+KHu2quDdg== + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.11.5.tgz#f16d05c8045dc7d84d85efdbb946a2a8713fb2d3" + integrity sha512-HbUq9AL8gb8eSuQfY/QKkvMc66ZFN/b6jvQAILGArNOgalUfGizoC6baKTJShaExMSPjBZlaAHtJiQKPaGRHaA== + +"@tiptap/extension-italic@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.11.5.tgz#63b09c7fb41ab64681983df7be8cf6bc330c0ede" + integrity sha512-9VGfb2/LfPhQ6TjzDwuYLRvw0A6VGbaIp3F+5Mql8XVdTBHb2+rhELbyhNGiGVR78CaB/EiKb6dO9xu/tBWSYA== + +"@tiptap/extension-list-item@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.11.5.tgz#6ada38dd4e6db889288242542bc0490b0908d190" + integrity sha512-Mp5RD/pbkfW1vdc6xMVxXYcta73FOwLmblQlFNn/l/E5/X1DUSA4iGhgDDH4EWO3swbs03x2f7Zka/Xoj3+WLg== + +"@tiptap/extension-ordered-list@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.11.5.tgz#c81e33b5bc885450d412e9ea644cc666407e0c13" + integrity sha512-Cu8KwruBNWAaEfshRQR0yOSaUKAeEwxW7UgbvF9cN/zZuKgK5uZosPCPTehIFCcRe+TBpRtZQh+06f/gNYpYYg== + +"@tiptap/extension-paragraph@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.11.5.tgz#05575f0264a435837483831eebffc5e3af279cb1" + integrity sha512-YFBWeg7xu/sBnsDIF/+nh9Arf7R0h07VZMd0id5Ydd2Qe3c1uIZwXxeINVtH0SZozuPIQFAT8ICe9M0RxmE+TA== + +"@tiptap/extension-strike@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.11.5.tgz#94e214dcede09f6c5f99d0c58290a1d3f5db61eb" + integrity sha512-PVfUiCqrjvsLpbIoVlegSY8RlkR64F1Rr2RYmiybQfGbg+AkSZXDeO0eIrc03//4gua7D9DfIozHmAKv1KN3ow== "@tiptap/extension-table@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.9.1.tgz#e0905e5cfb39ca99d0c9098e0efd7cd1b246e82d" - integrity sha512-OmWZFZOSZwSSEvoVUkDsRFyCXTYei/pV396Xjv9pfFzXQkVbfq/CjTp61zvb/9mmEz3rcfvfG7G39eRlZTvBNg== + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.11.5.tgz#2296c1076ef3381bca4601709956085f093ff9e0" + integrity sha512-NKXLhKWdAdURklm98YkCd2ai4fh8jY8HS/+X2s/2QiQt8Z98CU1keCm35fJEEExM234iB/hCqG5vY4JgTc0Tvw== -"@tiptap/extension-text-style@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.9.1.tgz#b9fc9cd8e90747357fbd4cac541a33aaa8b76875" - integrity sha512-LAxc0SeeiPiAVBwksczeA7BJSZb6WtVpYhy5Esvy9K0mK5kttB4KxtnXWeQzMIJZQbza65yftGKfQlexf/Y7yg== +"@tiptap/extension-text-style@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.11.5.tgz#f1b3882de489328203187e6256e6ee130477cfad" + integrity sha512-YUmYl0gILSd/u/ZkOmNxjNXVw+mu8fpC2f8G4I4tLODm0zCx09j9DDEJXSrM5XX72nxJQqtSQsCpNKnL0hfeEQ== -"@tiptap/extension-text@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.9.1.tgz#e4cda144b0af916ee0dafb700f833cd40eeae6d9" - integrity sha512-3wo9uCrkLVLQFgbw2eFU37QAa1jq1/7oExa+FF/DVxdtHRS9E2rnUZ8s2hat/IWzvPUHXMwo3Zg2XfhoamQpCA== +"@tiptap/extension-text@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.11.5.tgz#10cc6ec519aac71a6841ec9bd914ded747f6ec3f" + integrity sha512-Gq1WwyhFpCbEDrLPIHt5A8aLSlf8bfz4jm417c8F/JyU0J5dtYdmx0RAxjnLw1i7ZHE7LRyqqAoS0sl7JHDNSQ== -"@tiptap/pm@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.9.1.tgz#4d2304eb2ec611d2128e9ebcb9f28f1a5c74cd32" - integrity sha512-mvV86fr7kEuDYEApQ2uMPCKL2uagUE0BsXiyyz3KOkY1zifyVm1fzdkscb24Qy1GmLzWAIIihA+3UHNRgYdOlQ== +"@tiptap/pm@^2.11.5", "@tiptap/pm@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.11.5.tgz#6577e277e5a991c605a3dfcebde7c0b794d8def4" + integrity sha512-z9JFtqc5ZOsdQLd9vRnXfTCQ8v5ADAfRt9Nm7SqP6FUHII8E1hs38ACzf5xursmth/VonJYb5+73Pqxk1hGIPw== dependencies: prosemirror-changeset "^2.2.1" prosemirror-collab "^1.3.1" - prosemirror-commands "^1.6.0" + prosemirror-commands "^1.6.2" prosemirror-dropcursor "^1.8.1" prosemirror-gapcursor "^1.3.2" prosemirror-history "^1.4.1" prosemirror-inputrules "^1.4.0" prosemirror-keymap "^1.2.2" - prosemirror-markdown "^1.13.0" + prosemirror-markdown "^1.13.1" prosemirror-menu "^1.2.4" - prosemirror-model "^1.22.3" + prosemirror-model "^1.23.0" prosemirror-schema-basic "^1.2.3" prosemirror-schema-list "^1.4.1" prosemirror-state "^1.4.3" - prosemirror-tables "^1.4.0" + prosemirror-tables "^1.6.3" prosemirror-trailing-node "^3.0.0" - prosemirror-transform "^1.10.0" - prosemirror-view "^1.34.3" + prosemirror-transform "^1.10.2" + prosemirror-view "^1.37.0" "@tiptap/react@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.9.1.tgz#670224686ee6e4fc01ee479b2887be197d92d520" - integrity sha512-LQJ34ZPfXtJF36SZdcn4Fiwsl2WxZ9YRJI87OLnsjJ45O+gV/PfBzz/4ap+LF8LOS0AbbGhTTjBOelPoNm+aYA== + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.11.5.tgz#46ba23a56583e95b0020eb5778c35f3dd98aa673" + integrity sha512-Dp8eHL1G+R/C4+QzAczyb3t1ovexEIZx9ln7SGEM+cT1KHKAw9XGPRgsp92+NQaYI+EdEb/YqoBOSzQcd18/OQ== dependencies: - "@tiptap/extension-bubble-menu" "^2.9.1" - "@tiptap/extension-floating-menu" "^2.9.1" + "@tiptap/extension-bubble-menu" "^2.11.5" + "@tiptap/extension-floating-menu" "^2.11.5" "@types/use-sync-external-store" "^0.0.6" fast-deep-equal "^3" - use-sync-external-store "^1.2.2" + use-sync-external-store "^1" "@tiptap/starter-kit@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.9.1.tgz#d990bfd8b8da5e13bc1c0eada7e00d6c77a09490" - integrity sha512-nsw6UF/7wDpPfHRhtGOwkj1ipIEiWZS1VGw+c14K61vM1CNj0uQ4jogbHwHZqN1dlL5Hh+FCqUHDPxG6ECbijg== - dependencies: - "@tiptap/core" "^2.9.1" - "@tiptap/extension-blockquote" "^2.9.1" - "@tiptap/extension-bold" "^2.9.1" - "@tiptap/extension-bullet-list" "^2.9.1" - "@tiptap/extension-code" "^2.9.1" - "@tiptap/extension-code-block" "^2.9.1" - "@tiptap/extension-document" "^2.9.1" - "@tiptap/extension-dropcursor" "^2.9.1" - "@tiptap/extension-gapcursor" "^2.9.1" - "@tiptap/extension-hard-break" "^2.9.1" - "@tiptap/extension-heading" "^2.9.1" - "@tiptap/extension-history" "^2.9.1" - "@tiptap/extension-horizontal-rule" "^2.9.1" - "@tiptap/extension-italic" "^2.9.1" - "@tiptap/extension-list-item" "^2.9.1" - "@tiptap/extension-ordered-list" "^2.9.1" - "@tiptap/extension-paragraph" "^2.9.1" - "@tiptap/extension-strike" "^2.9.1" - "@tiptap/extension-text" "^2.9.1" - "@tiptap/extension-text-style" "^2.9.1" - "@tiptap/pm" "^2.9.1" + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.11.5.tgz#7d1b0b866b10c0f9c98214588639cda204c4f3b4" + integrity sha512-SLI7Aj2ruU1t//6Mk8f+fqW+18uTqpdfLUJYgwu0CkqBckrkRZYZh6GVLk/02k3H2ki7QkFxiFbZrdbZdng0JA== + dependencies: + "@tiptap/core" "^2.11.5" + "@tiptap/extension-blockquote" "^2.11.5" + "@tiptap/extension-bold" "^2.11.5" + "@tiptap/extension-bullet-list" "^2.11.5" + "@tiptap/extension-code" "^2.11.5" + "@tiptap/extension-code-block" "^2.11.5" + "@tiptap/extension-document" "^2.11.5" + "@tiptap/extension-dropcursor" "^2.11.5" + "@tiptap/extension-gapcursor" "^2.11.5" + "@tiptap/extension-hard-break" "^2.11.5" + "@tiptap/extension-heading" "^2.11.5" + "@tiptap/extension-history" "^2.11.5" + "@tiptap/extension-horizontal-rule" "^2.11.5" + "@tiptap/extension-italic" "^2.11.5" + "@tiptap/extension-list-item" "^2.11.5" + "@tiptap/extension-ordered-list" "^2.11.5" + "@tiptap/extension-paragraph" "^2.11.5" + "@tiptap/extension-strike" "^2.11.5" + "@tiptap/extension-text" "^2.11.5" + "@tiptap/extension-text-style" "^2.11.5" + "@tiptap/pm" "^2.11.5" "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + "@types/debug@^4.0.0": version "4.1.12" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" @@ -2079,9 +2014,9 @@ "@types/unist" "^2" "@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": - version "3.3.5" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" - integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + version "3.3.6" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz#6bba74383cdab98e8db4e20ce5b4a6b98caed010" + integrity sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw== dependencies: "@types/react" "*" hoist-non-react-statics "^3.3.0" @@ -2096,17 +2031,10 @@ resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== -"@types/lodash-es@^4.17.6": - version "4.17.12" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" - integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== - dependencies: - "@types/lodash" "*" - -"@types/lodash@*", "@types/lodash@^4.14.175": - version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" - integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== +"@types/lodash@^4.14.175": + version "4.17.16" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.16.tgz#94ae78fab4a38d73086e962d0b65c30d816bfb0a" + integrity sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g== "@types/markdown-it@^14.0.0": version "14.1.2" @@ -2129,21 +2057,21 @@ integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== "@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "22.5.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.3.tgz#91a374e42c6e7ccb5893a87f1775f36ce1671d65" - integrity sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ== + version "22.13.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4" + integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw== dependencies: - undici-types "~6.19.2" + undici-types "~6.20.0" "@types/papaparse@^5.3.9": - version "5.3.14" - resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.14.tgz#345cc2a675a90106ff1dc33b95500dfb30748031" - integrity sha512-LxJ4iEFcpqc6METwp9f6BV6VVc43m6MfH0VqFosHvrUgfXiFe6ww7R3itkOQ+TCK6Y+Iv/+RnnvtRZnkc5Kc9g== + version "5.3.15" + resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.15.tgz#7cafa16757a1d121422deefbb10b6310b224ecc4" + integrity sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw== dependencies: "@types/node" "*" @@ -2152,15 +2080,10 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== -"@types/prop-types@*", "@types/prop-types@^15.0.0": - version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== - -"@types/prop-types@^15.7.13": - version "15.7.13" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451" - integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA== +"@types/prop-types@^15.0.0", "@types/prop-types@^15.7.14": + version "15.7.14" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" + integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== "@types/raf@^3.4.0": version "3.4.3" @@ -2168,9 +2091,9 @@ integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw== "@types/react-redux@^7.1.20": - version "7.1.33" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" - integrity sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg== + version "7.1.34" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.34.tgz#83613e1957c481521e6776beeac4fd506d11bd0e" + integrity sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -2178,18 +2101,15 @@ redux "^4.0.0" "@types/react-transition-group@^4.4.11": - version "4.4.11" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.11.tgz#d963253a611d757de01ebb241143b1017d5d63d5" - integrity sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA== - dependencies: - "@types/react" "*" + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== "@types/react@*": - version "18.3.5" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.5.tgz#5f524c2ad2089c0ff372bbdabc77ca2c4dbadf8f" - integrity sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA== + version "19.0.10" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.10.tgz#d0c66dafd862474190fe95ce11a68de69ed2b0eb" + integrity sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g== dependencies: - "@types/prop-types" "*" csstype "^3.0.2" "@types/unist@^2", "@types/unist@^2.0.0": @@ -2256,6 +2176,63 @@ resolved "https://registry.yarnpkg.com/@uiw/react-json-view/-/react-json-view-2.0.0-alpha.30.tgz#85db25b1a61cccc5c6c51350894515f8b7100e52" integrity sha512-ufvvirUQcITU9s4R12b7hn/t7ngLCYp1KbBxE+eAD35o3Ey+uxfKvgWmIwGFhV3hFXXxMJ8SHQKwl/ywNCHsDA== +"@unrs/rspack-resolver-binding-darwin-arm64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.1.1.tgz#30427faa69a6f95505a7e4c16dba6b951562fe55" + integrity sha512-myn6gHyM77Y6XXGls9Wkfuu+yexGkmhPBDmBUkThrbkXtHq38vsr7o1Dyzruiqtt/okSs0tFF9P77kI6wWF9iQ== + +"@unrs/rspack-resolver-binding-darwin-x64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.1.1.tgz#5d91e34852d2b893113fc573cefe9b799d72938c" + integrity sha512-A/5xK8zb8lJlom+mznrp9YA8lYzHjD2QcUdQ3PkWha8x996fPjSns4ilNYHW+eGXFcEAnfVwf78q9vYf59JJmA== + +"@unrs/rspack-resolver-binding-freebsd-x64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.1.1.tgz#db48663b031e953b072177ebd7b51677db8170c4" + integrity sha512-Ew3bqEa8roijTPUS8xvb1X4K8S//rw6oDGKPhwQ8WoABVrrGZtMKlUEfH1+zBduJZtJAbpiDebFhh9OEoFM9Lw== + +"@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.1.1.tgz#b7d91e8ea70ddaed1aed756cabcfe07152e03e3f" + integrity sha512-9Mm53MmrXQHfrUFotM19407A/9GjtdXyo9GkF7W1pb/ZXS7j7GTpruj8txWdaQrlxg0yjhjJst/xuNMbBFi1hQ== + +"@unrs/rspack-resolver-binding-linux-arm64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.1.1.tgz#7510fa987bf7ce008839a06f62670dbe3d0bd2cc" + integrity sha512-yXs9e7hk7LzNT7LFwG6pxSnzVt6feC1SjFJM6naIRgFI8/4KngY8BUjM/Xx7rCS4Iz6FnCVIolpSrNqsRHpRrg== + +"@unrs/rspack-resolver-binding-linux-arm64-musl@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.1.1.tgz#d828f394d1c24570e57bc53ac7298a8d696e83ce" + integrity sha512-5i/Jq2Bb3He0JYCLOBzLxj+eX57rip2fOQUZX4i7H/ReZm9U64vVmWGNq7HlC0kNGo5AhGtRXCg5HbsBiBsyBw== + +"@unrs/rspack-resolver-binding-linux-x64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.1.1.tgz#ef8dd2ac43c36c63b52d52f4930185e415c93d23" + integrity sha512-gAUWCEvtLGoKn2+dPrWXqE2xMfUjyvsUDa1+8yjKnyEqfGCyKcyaSSWkXq7k2VQnS5XxOThQJPPnZol4EOBxpw== + +"@unrs/rspack-resolver-binding-linux-x64-musl@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.1.1.tgz#29be1c55a14a7b60ace126ed64ad544799764119" + integrity sha512-o1Ik61ahhy+UHIWQB3t/kGwOUPmECbyXVuiW6D/ieKUWslspGE6qjFnyDxWqj9bDGsgjlbl/+O5QabXuAdUsJQ== + +"@unrs/rspack-resolver-binding-wasm32-wasi@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.1.1.tgz#e13415542e8a089dacf1859c2d7424a036017c8c" + integrity sha512-uGqUQlEe9NUtw/VQOVLpuEPD6RBNmdUoGSHH8lGfKI5B3xHZYZ7nhKW38JeAnK9IymFJQpsyMHZXAyFR+NK8iw== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.7" + +"@unrs/rspack-resolver-binding-win32-arm64-msvc@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.1.1.tgz#cc1967b9c4ca9c5c2469fe40f7e0aeb5894b7ee6" + integrity sha512-UfpkOv54SOqD/TyzGIVCPQHSuXIVjeIIbMqrhl06695Sjlu5ls4Wxq6nllofC3Igak4h5ovulGvLLH/GRMdVYQ== + +"@unrs/rspack-resolver-binding-win32-x64-msvc@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.1.1.tgz#df2d242a060e3a5db1ec69d4ece8af81e52d5631" + integrity sha512-oBZjxVKfLVQxCdFDbafibNtJQKhT6DTW5FcNM25Vay86Yi7Mw4ftYg5NknR70WxM5qSNXIOgTHgzEUFfZ3Q7JA== + abs-svg-path@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" @@ -2267,9 +2244,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.9.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" @@ -2286,13 +2263,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -2324,20 +2294,18 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" + call-bound "^1.0.3" + is-array-buffer "^3.0.5" array-includes@^3.1.6, array-includes@^3.1.8: version "3.1.8" @@ -2369,36 +2337,37 @@ array.prototype.findlast@^1.2.5: es-shim-unscopables "^1.0.2" array.prototype.findlastindex@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-abstract "^1.23.2" + es-abstract "^1.23.9" es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== +array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" array.prototype.tosorted@^1.1.4: version "1.1.4" @@ -2411,25 +2380,29 @@ array.prototype.tosorted@^1.1.4: es-errors "^1.3.0" es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" ast-types-flow@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2441,9 +2414,9 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== attr-accept@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" - integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== + version "2.2.5" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" + integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== available-typed-arrays@^1.0.7: version "1.0.7" @@ -2453,14 +2426,14 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" axe-core@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" - integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== + version "4.10.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" + integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== axios@^1.7.2: - version "1.7.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== + version "1.8.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.3.tgz#9ebccd71c98651d547162a018a1a95a4b4ed4de8" + integrity sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -2481,28 +2454,28 @@ babel-plugin-macros@^3.1.0: resolve "^1.19.0" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.6.3" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.6: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== +babel-plugin-polyfill-corejs3@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" + integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" + "@babel/helper-define-polyfill-provider" "^0.6.3" + core-js-compat "^3.40.0" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + version "0.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.6.3" bail@^2.0.0: version "2.0.2" @@ -2519,6 +2492,11 @@ base64-arraybuffer@^1.0.2: resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + base64-js@^1.1.2, base64-js@^1.3.0: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -2565,15 +2543,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.23.1, browserslist@^4.23.3: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== +browserslist@^4.24.0, browserslist@^4.24.4: + version "4.24.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" - node-releases "^2.0.18" - update-browserslist-db "^1.1.0" + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" btoa@^1.2.1: version "1.2.1" @@ -2592,16 +2570,31 @@ busboy@1.6.0: dependencies: streamsearch "^1.1.0" -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: - es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" @@ -2618,15 +2611,15 @@ can-use-dom@^0.1.0: resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" integrity sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ== -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001646: - version "1.0.30001655" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" - integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001688: + version "1.0.30001705" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001705.tgz#dc3510bcdef261444ca944b7be9c8d0bb7fafeef" + integrity sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg== canvg@^3.0.6: - version "3.0.10" - resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.10.tgz#8e52a2d088b6ffa23ac78970b2a9eebfae0ef4b3" - integrity sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q== + version "3.0.11" + resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.11.tgz#4b4290a6c7fa36871fac2b14e432eff33b33cf2b" + integrity sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA== dependencies: "@babel/runtime" "^7.12.5" "@types/raf" "^3.4.0" @@ -2637,15 +2630,6 @@ canvg@^3.0.6: stackblur-canvas "^2.0.0" svg-pathdata "^6.0.3" -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -2694,13 +2678,6 @@ clsx@^2.0.0, clsx@^2.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -2708,11 +2685,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -2770,17 +2742,17 @@ copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.37.1, core-js-compat@^3.38.0: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" - integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== +core-js-compat@^3.40.0: + version "3.41.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.41.0.tgz#4cdfce95f39a8f27759b667cf693d96e5dda3d17" + integrity sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A== dependencies: - browserslist "^4.23.3" + browserslist "^4.24.4" core-js@^3.6.0, core-js@^3.8.3: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.1.tgz#aa375b79a286a670388a1a363363d53677c0383e" - integrity sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw== + version "3.41.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.41.0.tgz#57714dafb8c751a6095d028a7428f1fb5834a776" + integrity sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA== core-util-is@~1.0.0: version "1.0.3" @@ -2804,16 +2776,16 @@ crelt@^1.0.0: integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== cross-fetch@^3.1.5: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== dependencies: - node-fetch "^2.6.12" + node-fetch "^2.7.0" cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -2884,30 +2856,30 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.3" es-errors "^1.3.0" - is-data-view "^1.0.1" + is-data-view "^1.0.2" -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" es-errors "^1.3.0" - is-data-view "^1.0.1" + is-data-view "^1.0.2" -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.2" es-errors "^1.3.0" is-data-view "^1.0.1" @@ -2923,44 +2895,20 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: + 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.2" + ms "^2.1.3" decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + version "1.1.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz#5d6ce68792808901210dac42a8e9853511e2b8bf" + integrity sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w== dependencies: character-entities "^2.0.0" -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -2985,7 +2933,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -3084,10 +3032,10 @@ domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" -dompurify@^2.2.0: - version "2.5.6" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.6.tgz#8402b501611eaa7fb3786072297fcbe2787f8592" - integrity sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ== +dompurify@^2.5.4: + version "2.5.8" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.8.tgz#2809d89d7e528dc7a071dea440d7376df676f824" + integrity sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw== domutils@^1.5.1: version "1.7.0" @@ -3106,6 +3054,15 @@ domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer2@^0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -3113,10 +3070,10 @@ duplexer2@^0.1.2: dependencies: readable-stream "^2.0.2" -electron-to-chromium@^1.5.4: - version "1.5.13" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" - integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== +electron-to-chromium@^1.5.73: + version "1.5.119" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.119.tgz#4e105e419209b33e1c44b4d1b5fc6fb27fac0209" + integrity sha512-Ku4NMzUjz3e3Vweh7PhApPrZSS4fyiCIbcIrG9eKrriYVLmbMepETR/v6SU7xPm98QTqMSYiCwfO89QNjXLkbQ== eml-parse-js@^1.1.15: version "1.1.15" @@ -3141,14 +3098,6 @@ encodeurl@^1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -enhanced-resolve@^5.15.0: - version "5.17.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" - integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - entities@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -3171,147 +3120,133 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" es-errors "^1.3.0" es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" + has-proto "^1.2.0" + has-symbols "^1.1.0" hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== -es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.19: - version "1.0.19" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" - integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== +es-iterator-helpers@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - es-abstract "^1.23.3" + es-abstract "^1.23.6" es-errors "^1.3.0" es-set-tostringtag "^2.0.3" function-bind "^1.1.2" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - iterator.prototype "^1.1.2" - safe-array-concat "^1.1.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== +es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: - get-intrinsic "^1.2.4" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" has-tostringtag "^1.0.2" - hasown "^2.0.1" + hasown "^2.0.2" -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" -escalade@^3.1.2: +escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -3342,30 +3277,29 @@ eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-import-resolver-typescript@^3.5.2: - version "3.6.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz#bb8e388f6afc0f940ce5d2c5fd4a3d147f038d9e" - integrity sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA== + version "3.9.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.9.1.tgz#0ab8d0ed911e875684a96976a118adee5d1c9daa" + integrity sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw== dependencies: "@nolyfill/is-core-module" "1.0.39" - debug "^4.3.5" - enhanced-resolve "^5.15.0" - eslint-module-utils "^2.8.1" - fast-glob "^3.3.2" - get-tsconfig "^4.7.5" - is-bun-module "^1.0.2" - is-glob "^4.0.3" - -eslint-module-utils@^2.8.1, eslint-module-utils@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz#95d4ac038a68cd3f63482659dffe0883900eb342" - integrity sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ== + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^1.3.0" + rspack-resolver "^1.1.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.12" + +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" eslint-plugin-import@^2.26.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz#21ceea0fc462657195989dd780e50c92fe95f449" - integrity sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw== + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== dependencies: "@rtsao/scc" "^1.1.0" array-includes "^3.1.8" @@ -3375,7 +3309,7 @@ eslint-plugin-import@^2.26.0: debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.9.0" + eslint-module-utils "^2.12.0" hasown "^2.0.2" is-core-module "^2.15.1" is-glob "^4.0.3" @@ -3384,14 +3318,15 @@ eslint-plugin-import@^2.26.0: object.groupby "^1.0.3" object.values "^1.2.0" semver "^6.3.1" + string.prototype.trimend "^1.0.8" tsconfig-paths "^3.15.0" eslint-plugin-jsx-a11y@^6.5.1: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz#36fb9dead91cafd085ddbe3829602fb10ef28339" - integrity sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg== + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== dependencies: - aria-query "~5.1.3" + aria-query "^5.3.2" array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" @@ -3399,14 +3334,13 @@ eslint-plugin-jsx-a11y@^6.5.1: axobject-query "^4.1.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.19" hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" object.fromentries "^2.0.8" safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.0" + string.prototype.includes "^2.0.1" eslint-plugin-react-hooks@^4.5.0: version "4.6.2" @@ -3414,27 +3348,27 @@ eslint-plugin-react-hooks@^4.5.0: integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react@^7.31.7: - version "7.35.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz#d32500d3ec268656d5071918bfec78cfd8b070ed" - integrity sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ== + version "7.37.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz#1b6c80b6175b6ae4b26055ae4d55d04c414c7181" + integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" - array.prototype.flatmap "^1.3.2" + array.prototype.flatmap "^1.3.3" array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.19" + es-iterator-helpers "^1.2.1" estraverse "^5.3.0" hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" object.entries "^1.1.8" object.fromentries "^2.0.8" - object.values "^1.2.0" + object.values "^1.2.1" prop-types "^15.8.1" resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.11" + string.prototype.matchall "^4.0.12" string.prototype.repeat "^1.0.0" eslint-scope@^7.1.1: @@ -3582,16 +3516,16 @@ fast-equals@^4.0.3: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7" integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg== -fast-glob@^3.2.9, fast-glob@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== +fast-glob@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -3604,9 +3538,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" @@ -3617,10 +3551,15 @@ fault@^1.0.0: dependencies: format "^0.2.0" -fflate@^0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae" - integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== +fdir@^6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" + integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== + +fflate@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== file-entry-cache@^6.0.1: version "6.0.1" @@ -3666,14 +3605,14 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.15.6: - version "1.15.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.8.tgz#ae67b97ae32e0a7b36066a5448938374ec18d13d" - integrity sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig== + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== fontkit@^2.0.2: version "2.0.4" @@ -3690,20 +3629,21 @@ fontkit@^2.0.2: unicode-properties "^1.4.0" unicode-trie "^2.0.0" -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: - is-callable "^1.1.3" + is-callable "^1.2.7" form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" format@^0.2.0: @@ -3734,15 +3674,17 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" functions-have-names@^1.2.3: version "1.2.3" @@ -3754,30 +3696,43 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" es-errors "^1.3.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: - call-bind "^1.0.5" + call-bound "^1.0.3" es-errors "^1.3.0" - get-intrinsic "^1.2.4" + get-intrinsic "^1.2.6" -get-tsconfig@^4.7.5: - version "4.8.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.0.tgz#125dc13a316f61650a12b20c97c11b8fd996fedd" - integrity sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw== +get-tsconfig@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb" + integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A== dependencies: resolve-pkg-maps "^1.0.0" @@ -3836,7 +3791,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: +globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -3857,18 +3812,16 @@ globby@^11.1.0: slash "^3.0.0" goober@^2.1.10: - version "2.1.14" - resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.14.tgz#4a5c94fc34dc086a8e6035360ae1800005135acd" - integrity sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg== + version "2.1.16" + resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.16.tgz#7d548eb9b83ff0988d102be71f271ca8f9c82a95" + integrity sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g== -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.2: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -3888,15 +3841,10 @@ gray-matter@4.0.3: section-matter "^1.0.0" strip-bom-string "^1.0.0" -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^4.0.0: version "4.0.0" @@ -3910,24 +3858,26 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -3955,10 +3905,10 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -highlight-words@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/highlight-words/-/highlight-words-1.2.2.tgz#9875b75d11814d7356b24f23feeb7d77761fa867" - integrity sha512-Mf4xfPXYm8Ay1wTibCrHpNWeR2nUMynMVFkXCi4mbl+TEgmNOe+I4hV7W3OCZcSvzGL6kupaqpfHOemliMTGxQ== +highlight-words@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/highlight-words/-/highlight-words-2.0.0.tgz#06853d68f1f7c8e59d6ef2dd072fe2f64fc93936" + integrity sha512-If5n+IhSBRXTScE7wl16VPmd+44Vy7kof24EdqhjsZsDuHikpv1OCagVcJFpB4fS4UPUniedlWqrjIO8vWOsIQ== highlight.js@^10.4.1, highlight.js@~10.7.0: version "10.7.3" @@ -4028,9 +3978,9 @@ htmlparser2@^3.9.0: readable-stream "^3.1.1" hyphen@^1.6.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.10.4.tgz#ae16551b8a56ae7c34ffd4b98777221795e6c912" - integrity sha512-SejXzIpv9gOVdDWXd4suM1fdF1k2dxZGvuTdkOVLoazYfK7O4DykIQbdrvuyG+EaTNlXAGhMndtKrhykgbt0gg== + version "1.10.6" + resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.10.6.tgz#0e779d280e696102b97d7e42f5ca5de2cc97e274" + integrity sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw== i18next@22.4.9: version "22.4.9" @@ -4050,9 +4000,9 @@ immer@^9.0.16: integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -4080,14 +4030,14 @@ 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== -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" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" + hasown "^2.0.2" + side-channel "^1.1.0" is-alphabetical@^1.0.0: version "1.0.4" @@ -4102,21 +4052,14 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-arrayish@^0.2.1: version "0.2.1" @@ -4129,64 +4072,71 @@ is-arrayish@^0.3.1: integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: - has-tostringtag "^1.0.0" + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: - has-bigints "^1.0.1" + has-bigints "^1.0.2" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-buffer@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-bun-module@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.1.0.tgz#a66b9830869437f6cdad440ba49ab6e4dc837269" - integrity sha512-4mTAVPlrXpaN3jtF0lsnPCMGnq4+qZjVIKq0HCpfcqf8OC1SM5oATCIAPM5V5FN05qp2NNnFndphmdZS9CV3hA== +is-bun-module@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.3.0.tgz#ea4d24fdebfcecc98e81bcbcb506827fee288760" + integrity sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA== dependencies: semver "^7.6.3" -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== +is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" is-typed-array "^1.1.13" -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-decimal@^1.0.0: version "1.0.4" @@ -4203,19 +4153,22 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" @@ -4229,22 +4182,18 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-map@^2.0.2, is-map@^2.0.3: +is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-number@^7.0.0: version "7.0.0" @@ -4261,46 +4210,51 @@ is-plain-obj@^4.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -is-set@^2.0.2, is-set@^2.0.3: +is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - has-symbols "^1.0.2" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - which-typed-array "^1.1.14" + which-typed-array "^1.1.16" is-url@^1.2.4: version "1.2.4" @@ -4312,20 +4266,20 @@ is-weakmap@^2.0.2: resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" is-weakset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" - integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" isarray@0.0.1: version "0.0.1" @@ -4347,16 +4301,17 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== +iterator.prototype@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" javascript-time-ago@^2.5.11: version "2.5.11" @@ -4365,10 +4320,10 @@ javascript-time-ago@^2.5.11: dependencies: relative-time-format "^1.1.6" -jay-peg@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jay-peg/-/jay-peg-1.0.2.tgz#17a54d386e472f5f313f3d6e88770b170ea569f4" - integrity sha512-fyV3NVvv6pTys/3BTapBUGAWAuU9rM2gRcgijZHzptd5KKL+s+S7hESFN+wOsbDH1MzFwdlRAXi0aGxS6uiMKg== +jay-peg@^1.0.2, jay-peg@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/jay-peg/-/jay-peg-1.1.1.tgz#fdf410b89fa7a295bf74424ffe4c9083dbe7c363" + integrity sha512-D62KEuBxz/ip2gQKOEhk/mx14o7eiFRaU+VNNSP4MOiIkwb/D6B3G1Mfas7C/Fit8EsSV2/IWjZElx/Gs6A4ww== dependencies: restructure "^3.0.0" @@ -4402,15 +4357,15 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.1: version "3.0.1" @@ -4445,23 +4400,23 @@ json5@^2.2.3: integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jspdf-autotable@^3.8.2: - version "3.8.3" - resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.8.3.tgz#b469730c28376a81298d04d18136f1fb464cd4b8" - integrity sha512-PQFdljBt+ijm6ZWXYxhZ54A/awV63UKcipYoA2+YGsz0BXXiXTIL/FIg+V30j7wPdSdzClfbB3qKX9UeuFylPQ== + version "3.8.4" + resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.8.4.tgz#f7f05d45532ca94424a59cfa613309fff7c380a5" + integrity sha512-rSffGoBsJYX83iTRv8Ft7FhqfgEL2nLpGAIiqruEQQ3e4r0qdLFbPUB7N9HAle0I3XgpisvyW751VHCqKUVOgQ== jspdf@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-2.5.1.tgz#00c85250abf5447a05f3b32ab9935ab4a56592cc" - integrity sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA== + version "2.5.2" + resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-2.5.2.tgz#3c35bb1063ee3ad9428e6353852b0d685d1f923a" + integrity sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ== dependencies: - "@babel/runtime" "^7.14.0" + "@babel/runtime" "^7.23.2" atob "^2.1.2" btoa "^1.2.1" - fflate "^0.4.8" + fflate "^0.8.1" optionalDependencies: canvg "^3.0.6" core-js "^3.6.0" - dompurify "^2.2.0" + dompurify "^2.5.4" html2canvas "^1.0.0-rc.5" "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: @@ -4526,6 +4481,14 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -4610,14 +4573,19 @@ markdown-it@^14.0.0: uc.micro "^2.1.0" material-react-table@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/material-react-table/-/material-react-table-3.0.1.tgz#a6d592a1e370acfd453c37f1deaa870c47e7bf5b" - integrity sha512-RP+bnpsOAH5j6zwP04u9HB37fyqbd6mVv9mkT4IUJC3e3gEqixZmkNdJMVM1ZVHoq7yIaM381xf22mpBVe0IaA== + version "3.2.1" + resolved "https://registry.yarnpkg.com/material-react-table/-/material-react-table-3.2.1.tgz#56f595755cab3b669b399999fed9eb305fbb6dd7" + integrity sha512-sQtTf7bETpkPN2Hm5BVtz89wrfXCVQguz6XlwMChSnfKFO5QCKAJJC5aSIKnUc3S0AvTz/k/ILi00FnnY1Gixw== dependencies: "@tanstack/match-sorter-utils" "8.19.4" - "@tanstack/react-table" "8.20.5" - "@tanstack/react-virtual" "3.10.6" - highlight-words "1.2.2" + "@tanstack/react-table" "8.20.6" + "@tanstack/react-virtual" "3.11.2" + highlight-words "2.0.0" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mdast-util-definitions@^5.0.0: version "5.1.2" @@ -4891,7 +4859,7 @@ micromark@^3.0.0: micromark-util-types "^1.0.1" uvu "^0.5.0" -micromatch@^4.0.4: +micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -4924,29 +4892,24 @@ minimist@^1.2.0, minimist@^1.2.6, minimist@~1.2.5: integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== monaco-editor@^0.52.0: - version "0.52.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.52.0.tgz#d47c02b191eae208d68878d679b3ee7456031be7" - integrity sha512-OeWhNpABLCeTqubfqLMXGsqf6OmPU6pHM85kF3dhy6kq5hnhuVS1p3VrEW/XhWHc71P2tHyS5JFySD8mgs1crw== + version "0.52.2" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.52.2.tgz#53c75a6fcc6802684e99fd1b2700299857002205" + integrity sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ== mri@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mui-tiptap@^1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/mui-tiptap/-/mui-tiptap-1.14.0.tgz#43725fc82d0033b038753e81d4bddd22c92ad2d5" - integrity sha512-xp3h6Toy7rE3vCFC7kWJZzf3JR7Gm6DaD5O40bMbqwVj4cb9zMMar6rXrMYxQybFAGUOBsOkzzIu3rpDQf86/A== + version "1.18.0" + resolved "https://registry.yarnpkg.com/mui-tiptap/-/mui-tiptap-1.18.0.tgz#99f42928638d4cce0a396c713c49454cadbc8441" + integrity sha512-SW4PS4jJuOXQHdS96eGq1dkNiLOOTP8yiBnOH6c49SF+Sg6Bowd1hnrDmqRR+l8t6Uer5O7DWhYpYuixvrrlYw== dependencies: encodeurl "^1.0.2" lodash "^4.17.21" @@ -4968,9 +4931,9 @@ nanoclone@^0.2.1: integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== nanoid@^3.3.6: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + version "3.3.10" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.10.tgz#7bc882237698ef787d5cbba109e3b0168ba6e7b1" + integrity sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg== natural-compare@^1.4.0: version "1.4.0" @@ -4978,11 +4941,11 @@ natural-compare@^1.4.0: integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== next@^13.5.6: - version "13.5.6" - resolved "https://registry.yarnpkg.com/next/-/next-13.5.6.tgz#e964b5853272236c37ce0dd2c68302973cf010b1" - integrity sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw== + version "13.5.8" + resolved "https://registry.yarnpkg.com/next/-/next-13.5.8.tgz#173883458bb80449111b01d2e62a33f9f9e7eacf" + integrity sha512-VlR7FaXpSibCs7ujOqStaDFTGSdX/NvWgLDcd47oiHUe8i63ZtNkX9intgcYAu/MxpaeEGinHaMB5mwxuzglKw== dependencies: - "@next/env" "13.5.6" + "@next/env" "13.5.8" "@swc/helpers" "0.5.2" busboy "1.6.0" caniuse-lite "^1.0.30001406" @@ -4990,27 +4953,27 @@ next@^13.5.6: styled-jsx "5.1.1" watchpack "2.4.0" optionalDependencies: - "@next/swc-darwin-arm64" "13.5.6" - "@next/swc-darwin-x64" "13.5.6" - "@next/swc-linux-arm64-gnu" "13.5.6" - "@next/swc-linux-arm64-musl" "13.5.6" - "@next/swc-linux-x64-gnu" "13.5.6" - "@next/swc-linux-x64-musl" "13.5.6" - "@next/swc-win32-arm64-msvc" "13.5.6" - "@next/swc-win32-ia32-msvc" "13.5.6" - "@next/swc-win32-x64-msvc" "13.5.6" - -node-fetch@^2.6.12: + "@next/swc-darwin-arm64" "13.5.8" + "@next/swc-darwin-x64" "13.5.8" + "@next/swc-linux-arm64-gnu" "13.5.8" + "@next/swc-linux-arm64-musl" "13.5.8" + "@next/swc-linux-x64-gnu" "13.5.8" + "@next/swc-linux-x64-musl" "13.5.8" + "@next/swc-win32-arm64-msvc" "13.5.8" + "@next/swc-win32-ia32-msvc" "13.5.8" + "@next/swc-win32-x64-msvc" "13.5.8" + +node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-svg-path@^1.1.0: version "1.1.0" @@ -5041,18 +5004,10 @@ object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" @@ -5064,24 +5019,27 @@ object-keys@~0.4.0: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== -object.assign@^4.1.4, object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== +object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - has-symbols "^1.0.3" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" object-keys "^1.1.1" object.entries@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-object-atoms "^1.0.0" + es-object-atoms "^1.1.1" object.fromentries@^2.0.8: version "2.0.8" @@ -5102,12 +5060,13 @@ object.groupby@^1.0.3: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.1.6, object.values@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== +object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" es-object-atoms "^1.0.0" @@ -5135,6 +5094,15 @@ orderedmap@^2.0.0: resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-2.1.1.tgz#61481269c44031c449915497bf5a4ad273c512d2" integrity sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g== +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -5160,9 +5128,9 @@ pako@~1.0.5: integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== papaparse@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.4.1.tgz#f45c0f871853578bd3a30f92d96fdcfb6ebea127" - integrity sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw== + version "5.5.2" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.5.2.tgz#fb67cc5a03ba8930cb435dc4641a25d6804bd4d7" + integrity sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA== parent-module@^1.0.0: version "1.0.1" @@ -5228,20 +5196,25 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" - integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== postcss-value-parser@^4.1.0: version "4.2.0" @@ -5263,9 +5236,9 @@ prelude-ls@^1.2.1: integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prismjs@^1.27.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + version "1.30.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" + integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== prismjs@~1.27.0: version "1.27.0" @@ -5317,10 +5290,10 @@ prosemirror-collab@^1.3.1: dependencies: prosemirror-state "^1.0.0" -prosemirror-commands@^1.0.0, prosemirror-commands@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.6.2.tgz#d9cf6654912442cff47daa1677eb43ebd0b1f117" - integrity sha512-0nDHH++qcf/BuPLYvmqZTUUsPJUCPBUXt0J1ErTcDIS369CTp773itzLGIgIXG4LJXOlwYCr44+Mh4ii6MP1QA== +prosemirror-commands@^1.0.0, prosemirror-commands@^1.6.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.7.0.tgz#c0a60c808f51157caa146922494fc59fe257f27c" + integrity sha512-6toodS4R/Aah5pdsrIwnTYPEjW70SlO5a66oo5Kk+CIrgJz3ukOoS+FYDGqvQlAX5PxoGWDX1oD++tn5X3pyRA== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" @@ -5363,7 +5336,7 @@ prosemirror-inputrules@^1.4.0: prosemirror-state "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.2: +prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e" integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== @@ -5371,7 +5344,7 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.2: prosemirror-state "^1.0.0" w3c-keyname "^2.2.0" -prosemirror-markdown@^1.13.0: +prosemirror-markdown@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.13.1.tgz#23feb6652dacb3dd78ffd8f131da37c20e4e4cf8" integrity sha512-Sl+oMfMtAjWtlcZoj/5L/Q39MpEnVZ840Xo330WJWUvgyhNmLBLN7MsHn07s53nG/KImevWHSE6fEj4q/GihHw== @@ -5390,10 +5363,10 @@ prosemirror-menu@^1.2.4: prosemirror-history "^1.0.0" prosemirror-state "^1.0.0" -prosemirror-model@^1.0.0, prosemirror-model@^1.19.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.22.3, prosemirror-model@^1.8.1: - version "1.23.0" - resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.23.0.tgz#652058182ed90dc15c8f0f2cf2df488306fa1dcd" - integrity sha512-Q/fgsgl/dlOAW9ILu4OOhYWQbc7TQd4BwKH/RwmUjyVf8682Be4zj3rOYdLnYEcGzyg8LL9Q5IWYKD8tdToreQ== +prosemirror-model@^1.0.0, prosemirror-model@^1.19.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0, prosemirror-model@^1.24.1: + version "1.24.1" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.24.1.tgz#b445e4f9b9cfc8c1a699215057b506842ebff1a9" + integrity sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg== dependencies: orderedmap "^2.0.0" @@ -5405,15 +5378,15 @@ prosemirror-schema-basic@^1.2.3: prosemirror-model "^1.19.0" prosemirror-schema-list@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.4.1.tgz#78b8d25531db48ca9688836dbde50e13ac19a4a1" - integrity sha512-jbDyaP/6AFfDfu70VzySsD75Om2t3sXTOdl5+31Wlxlg62td1haUpty/ybajSfJ1pkGadlOfwQq9kgW5IMo1Rg== + version "1.5.1" + resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz#5869c8f749e8745c394548bb11820b0feb1e32f5" + integrity sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" prosemirror-transform "^1.7.3" -prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, prosemirror-state@^1.4.3: +prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080" integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q== @@ -5422,16 +5395,16 @@ prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, pr prosemirror-transform "^1.0.0" prosemirror-view "^1.27.0" -prosemirror-tables@^1.4.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.6.1.tgz#8df27facbf7632a574afb32a665aaadf7f2ed69a" - integrity sha512-p8WRJNA96jaNQjhJolmbxTzd6M4huRE5xQ8OxjvMhQUP0Nzpo4zz6TztEiwk6aoqGBhz9lxRWR1yRZLlpQN98w== +prosemirror-tables@^1.6.3: + version "1.6.4" + resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.6.4.tgz#e36ebca70d9e398c4a3b99b122ba86bfc985293d" + integrity sha512-TkDY3Gw52gRFRfRn2f4wJv5WOgAOXLJA2CQJYIJ5+kdFbfj3acR4JUW6LX2e1hiEBiUwvEhzH5a3cZ5YSztpIA== dependencies: - prosemirror-keymap "^1.1.2" - prosemirror-model "^1.8.1" - prosemirror-state "^1.3.1" - prosemirror-transform "^1.2.1" - prosemirror-view "^1.13.3" + prosemirror-keymap "^1.2.2" + prosemirror-model "^1.24.1" + prosemirror-state "^1.4.3" + prosemirror-transform "^1.10.2" + prosemirror-view "^1.37.2" prosemirror-trailing-node@^3.0.0: version "3.0.0" @@ -5441,17 +5414,17 @@ prosemirror-trailing-node@^3.0.0: "@remirror/core-constants" "3.0.0" escape-string-regexp "^4.0.0" -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.2.1, prosemirror-transform@^1.7.3: - version "1.10.2" - resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.2.tgz#8ebac4e305b586cd96595aa028118c9191bbf052" - integrity sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ== +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.7.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.3.tgz#fae660bd7ffef3159aff44bc21e9e044aa31b67d" + integrity sha512-Nhh/+1kZGRINbEHmVu39oynhcap4hWTs/BlU7NnxWj3+l0qi8I1mu67v6mMdEe/ltD8hHvU4FV6PHiCw2VSpMw== dependencies: prosemirror-model "^1.21.0" -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.34.3: - version "1.36.0" - resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.36.0.tgz#ab6e444db08b7e3a79c6841c6667df72c7c4f2ec" - integrity sha512-U0GQd5yFvV5qUtT41X1zCQfbw14vkbbKwLlQXhdylEmgpYVHkefXYcC4HHwWOfZa3x6Y8wxDLUBv7dxN5XQ3nA== +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.37.0, prosemirror-view@^1.37.2: + version "1.38.1" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.38.1.tgz#566d30cc8b00a68d6b4c60f5d8a6ab97c82990b3" + integrity sha512-4FH/uM1A4PNyrxXbD+RAbAsf0d/mM0D/wAKSVVWK7o0A9Q/oOXJBrw786mBf2Vnrs/Edly6dH6Z2gsb7zWwaUw== dependencies: prosemirror-model "^1.20.0" prosemirror-state "^1.0.0" @@ -5564,9 +5537,9 @@ react-dropzone@14.2.3: prop-types "^15.8.1" react-error-boundary@^4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.13.tgz#80386b7b27b1131c5fbb7368b8c0d983354c7947" - integrity sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ== + version "4.1.2" + resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.1.2.tgz#bc750ad962edb8b135d6ae922c046051eb58f289" + integrity sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag== dependencies: "@babel/runtime" "^7.12.5" @@ -5576,9 +5549,9 @@ react-fast-compare@^2.0.1: integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== react-grid-layout@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-1.5.0.tgz#b6cc9412b58cf8226aebc0df7673d6fa782bdee2" - integrity sha512-WBKX7w/LsTfI99WskSu6nX2nbJAUD7GD6nIXcwYLyPpnslojtmql2oD3I2g5C3AK8hrxIarYT8awhuDIp7iQ5w== + version "1.5.1" + resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-1.5.1.tgz#800899fb17aa568e5f32574d07c12579f3d76fb2" + integrity sha512-4Fr+kKMk0+m1HL/BWfHxi/lRuaOmDNNKQDcu7m12+NEYcen20wIuZFo789u3qWCyvUsNUxCiyf0eKq4WiJSNYw== dependencies: clsx "^2.0.0" fast-equals "^4.0.3" @@ -5588,9 +5561,9 @@ react-grid-layout@^1.5.0: resize-observer-polyfill "^1.5.1" react-hook-form@^7.53.0: - version "7.53.0" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.53.0.tgz#3cf70951bf41fa95207b34486203ebefbd3a05ab" - integrity sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ== + version "7.54.2" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" + integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== react-hot-toast@2.4.0: version "2.4.0" @@ -5629,6 +5602,11 @@ react-is@^18.0.0, react-is@^18.3.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== +react-is@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0.tgz#d6669fd389ff022a9684f708cf6fa4962d1fea7a" + integrity sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g== + react-leaflet-markercluster@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/react-leaflet-markercluster/-/react-leaflet-markercluster-4.2.1.tgz#74a9501925f5920585aa700ec3790c9cca48012a" @@ -5751,9 +5729,9 @@ react-transition-group@^4.4.5: prop-types "^15.6.2" react-window@^1.8.10: - version "1.8.10" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.10.tgz#9e6b08548316814b443f7002b1cf8fd3a1bdde03" - integrity sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg== + version "1.8.11" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.11.tgz#a857b48fa85bd77042d59cc460964ff2e0648525" + integrity sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ== dependencies: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" @@ -5819,18 +5797,19 @@ redux@4.2.1, redux@^4.0.0, redux@^4.0.4, redux@^4.2.0: dependencies: "@babel/runtime" "^7.9.2" -reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.23.1" + es-abstract "^1.23.9" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" refractor@^3.6.0: version "3.6.0" @@ -5841,10 +5820,10 @@ refractor@^3.6.0: parse-entities "^2.0.0" prismjs "~1.27.0" -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" @@ -5870,39 +5849,46 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== +regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.8" define-properties "^1.2.1" es-errors "^1.3.0" - set-function-name "^2.0.1" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: - "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: - jsesc "~0.5.0" + jsesc "~3.0.2" relative-time-format@^1.1.6: version "1.1.6" @@ -5959,11 +5945,11 @@ resolve-pkg-maps@^1.0.0: integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -5982,9 +5968,9 @@ restructure@^3.0.0: integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw== reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rgbcolor@^1.0.1: version "1.0.1" @@ -6010,6 +5996,23 @@ rope-sequence@^1.3.0: resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== +rspack-resolver@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rspack-resolver/-/rspack-resolver-1.1.1.tgz#daad68f9cbcc5f579fcba4449c9f138c9c0a081c" + integrity sha512-SwTjuIOS9jIYViQpYiDOmLTf/nuP6j9fz9VSxdNyIFiFaivEt6TOO5z0qQAwVloTz8RqjbPAzhVr1isiyHNRHw== + optionalDependencies: + "@unrs/rspack-resolver-binding-darwin-arm64" "1.1.1" + "@unrs/rspack-resolver-binding-darwin-x64" "1.1.1" + "@unrs/rspack-resolver-binding-freebsd-x64" "1.1.1" + "@unrs/rspack-resolver-binding-linux-arm-gnueabihf" "1.1.1" + "@unrs/rspack-resolver-binding-linux-arm64-gnu" "1.1.1" + "@unrs/rspack-resolver-binding-linux-arm64-musl" "1.1.1" + "@unrs/rspack-resolver-binding-linux-x64-gnu" "1.1.1" + "@unrs/rspack-resolver-binding-linux-x64-musl" "1.1.1" + "@unrs/rspack-resolver-binding-wasm32-wasi" "1.1.1" + "@unrs/rspack-resolver-binding-win32-arm64-msvc" "1.1.1" + "@unrs/rspack-resolver-binding-win32-x64-msvc" "1.1.1" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6024,14 +6027,15 @@ sade@^1.7.3: dependencies: mri "^1.1.0" -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" isarray "^2.0.5" safe-buffer@~5.1.0, safe-buffer@~5.1.1: @@ -6044,14 +6048,22 @@ safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.2" es-errors "^1.3.0" - is-regex "^1.1.4" + is-regex "^1.2.1" scheduler@^0.17.0: version "0.17.0" @@ -6082,11 +6094,11 @@ semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.7, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -set-function-length@^1.2.1: +set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -6098,7 +6110,7 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.1, set-function-name@^2.0.2: +set-function-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -6108,6 +6120,15 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -6120,15 +6141,45 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4, side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" simple-swizzle@^0.2.2: version "0.2.2" @@ -6138,13 +6189,11 @@ simple-swizzle@^0.2.2: is-arrayish "^0.3.1" simplebar-core@^1.2.0: - version "1.2.6" - resolved "https://registry.yarnpkg.com/simplebar-core/-/simplebar-core-1.2.6.tgz#8317bb6c1bcb38739eae43f1edc902cdd1d858d9" - integrity sha512-H5NYU+O+uvqOH5VXw3+lgoc1vTI6jL8LOZJsw4xgRpV7uIPjRpmLPdz0TrouxwKHBhpVLzVIlyKhaRLelIThMw== + version "1.3.0" + resolved "https://registry.yarnpkg.com/simplebar-core/-/simplebar-core-1.3.0.tgz#166cfbb4c1a2dc0a60833fe8e1fd590cdb32158b" + integrity sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA== dependencies: - "@types/lodash-es" "^4.17.6" lodash "^4.17.21" - lodash-es "^4.17.21" simplebar-react@3.2.0: version "3.2.0" @@ -6167,9 +6216,9 @@ slash@^3.0.0: integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== source-map-js@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map@^0.5.7: version "0.5.7" @@ -6196,6 +6245,11 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +stable-hash@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -6211,43 +6265,38 @@ state-local@^1.0.6: resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -string.prototype.includes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" - integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" -string.prototype.matchall@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" - integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - es-abstract "^1.23.2" + es-abstract "^1.23.6" es-errors "^1.3.0" es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - regexp.prototype.flags "^1.5.2" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" set-function-name "^2.0.2" - side-channel "^1.0.6" + side-channel "^1.1.0" string.prototype.repeat@^1.0.0: version "1.0.0" @@ -6257,22 +6306,26 @@ string.prototype.repeat@^1.0.0: define-properties "^1.1.3" es-abstract "^1.17.5" -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" define-properties "^1.2.1" - es-abstract "^1.23.0" + es-abstract "^1.23.5" es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== +string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.2" define-properties "^1.2.1" es-object-atoms "^1.0.0" @@ -6357,13 +6410,6 @@ stylis@4.2.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -6459,11 +6505,6 @@ svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - text-segmentation@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" @@ -6504,6 +6545,14 @@ tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinyglobby@^0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" + tippy.js@^6.3.7: version "6.3.7" resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" @@ -6511,11 +6560,6 @@ tippy.js@^6.3.7: dependencies: "@popperjs/core" "^2.9.0" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6563,15 +6607,15 @@ tslib@^1.10.0, tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" - integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@^2.4.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tss-react@^4.8.3: - version "4.9.13" - resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-4.9.13.tgz#e6ac0bfea3977e58b5ef5a261cd0b035e6bd8254" - integrity sha512-Gu19qqPH8/SAyKVIgDE5qHygirEDnNIQcXhiEc+l4Q9T7C1sfvUnbVWs+yBpmN26/wyk4FTOupjYS2wq4vH0yA== + version "4.9.15" + resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-4.9.15.tgz#a26fc24889a462ab4858094bc5b33cdda36e45ab" + integrity sha512-rLiEmDwUtln9RKTUR/ZPYBrufF0Tq/PFggO1M7P8M3/FAcodPQ746Ug9MCEFkURKDlntN17+Oja0DMMz5yBnsQ== dependencies: "@emotion/cache" "*" "@emotion/serialize" "*" @@ -6601,49 +6645,50 @@ type-fest@^3.12.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" es-errors "^1.3.0" - is-typed-array "^1.1.13" + is-typed-array "^1.1.14" -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: available-typed-arrays "^1.0.7" - call-bind "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-proto "^1.0.3" is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" typescript@4.9.4: version "4.9.4" @@ -6655,25 +6700,25 @@ uc.micro@^2.0.0, uc.micro@^2.1.0: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" @@ -6684,9 +6729,9 @@ unicode-match-property-ecmascript@^2.0.0: unicode-property-aliases-ecmascript "^2.0.0" unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== unicode-properties@^1.4.0, unicode-properties@^1.4.1: version "1.4.1" @@ -6765,13 +6810,13 @@ unist-util-visit@^4.0.0: unist-util-is "^5.0.0" unist-util-visit-parents "^5.1.1" -update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== +update-browserslist-db@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" + escalade "^3.2.0" + picocolors "^1.1.1" uri-js@^4.2.2: version "4.4.1" @@ -6785,10 +6830,10 @@ use-memo-one@^1.1.1: resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== -use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" - integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== +use-sync-external-store@^1, use-sync-external-store@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" + integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" @@ -6870,36 +6915,37 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" -which-builtin-type@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" - integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== dependencies: + call-bound "^1.0.2" function.prototype.name "^1.1.6" has-tostringtag "^1.0.2" is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" is-generator-function "^1.0.10" - is-regex "^1.1.4" + is-regex "^1.2.1" is-weakref "^1.0.2" isarray "^2.0.5" - which-boxed-primitive "^1.0.2" + which-boxed-primitive "^1.1.0" which-collection "^1.0.2" - which-typed-array "^1.1.15" + which-typed-array "^1.1.16" -which-collection@^1.0.1, which-collection@^1.0.2: +which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -6909,15 +6955,17 @@ which-collection@^1.0.1, which-collection@^1.0.2: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" has-tostringtag "^1.0.2" which@^2.0.1: From ee6f0106c9dd9b109f14aed77611a3c41cf0f6ae Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 16 Mar 2025 23:44:10 +0100 Subject: [PATCH 0392/1184] massive upgrade of packages --- yarn.lock | 116 +++++++++++++++++++++++++++--------------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3111af6ddac4..9ababd0a680c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2176,62 +2176,62 @@ resolved "https://registry.yarnpkg.com/@uiw/react-json-view/-/react-json-view-2.0.0-alpha.30.tgz#85db25b1a61cccc5c6c51350894515f8b7100e52" integrity sha512-ufvvirUQcITU9s4R12b7hn/t7ngLCYp1KbBxE+eAD35o3Ey+uxfKvgWmIwGFhV3hFXXxMJ8SHQKwl/ywNCHsDA== -"@unrs/rspack-resolver-binding-darwin-arm64@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.1.1.tgz#30427faa69a6f95505a7e4c16dba6b951562fe55" - integrity sha512-myn6gHyM77Y6XXGls9Wkfuu+yexGkmhPBDmBUkThrbkXtHq38vsr7o1Dyzruiqtt/okSs0tFF9P77kI6wWF9iQ== +"@unrs/rspack-resolver-binding-darwin-arm64@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.1.2.tgz#90b20c786402cafcea09aeb3587c627edd365995" + integrity sha512-bQx2L40UF5XxsXwkD26PzuspqUbUswWVbmclmUC+c83Cv/EFrFJ1JaZj5Q5jyYglKGOtyIWY/hXTCdWRN9vT0Q== -"@unrs/rspack-resolver-binding-darwin-x64@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.1.1.tgz#5d91e34852d2b893113fc573cefe9b799d72938c" - integrity sha512-A/5xK8zb8lJlom+mznrp9YA8lYzHjD2QcUdQ3PkWha8x996fPjSns4ilNYHW+eGXFcEAnfVwf78q9vYf59JJmA== +"@unrs/rspack-resolver-binding-darwin-x64@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.1.2.tgz#36c9a645e2fc663732943b9ba317e9d97bab0709" + integrity sha512-dMi9a7//BsuPTnhWEDxmdKZ6wxQlPnAob8VSjefGbKX/a+pHfTaX1pm/jv2VPdarP96IIjCKPatJS/TtLQeGQA== -"@unrs/rspack-resolver-binding-freebsd-x64@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.1.1.tgz#db48663b031e953b072177ebd7b51677db8170c4" - integrity sha512-Ew3bqEa8roijTPUS8xvb1X4K8S//rw6oDGKPhwQ8WoABVrrGZtMKlUEfH1+zBduJZtJAbpiDebFhh9OEoFM9Lw== +"@unrs/rspack-resolver-binding-freebsd-x64@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.1.2.tgz#4e35d673e3e99f81754d93bca73ce1c9f6cd1d45" + integrity sha512-RiBZQ+LSORQObfhV1yH7jGz+4sN3SDYtV53jgc8tUVvqdqVDaUm1KA3zHLffmoiYNGrYkE3sSreGC+FVpsB4Vg== -"@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.1.1.tgz#b7d91e8ea70ddaed1aed756cabcfe07152e03e3f" - integrity sha512-9Mm53MmrXQHfrUFotM19407A/9GjtdXyo9GkF7W1pb/ZXS7j7GTpruj8txWdaQrlxg0yjhjJst/xuNMbBFi1hQ== +"@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.1.2.tgz#b68bede53bdf65d4ac957b06d3f5cfc666f45043" + integrity sha512-IyKIFBtOvuPCJt1WPx9e9ovTGhZzrIbW11vWzw4aPmx3VShE+YcMpAldqQubdCep0UVKZyFt+2hQDQZwFiJ4jg== -"@unrs/rspack-resolver-binding-linux-arm64-gnu@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.1.1.tgz#7510fa987bf7ce008839a06f62670dbe3d0bd2cc" - integrity sha512-yXs9e7hk7LzNT7LFwG6pxSnzVt6feC1SjFJM6naIRgFI8/4KngY8BUjM/Xx7rCS4Iz6FnCVIolpSrNqsRHpRrg== +"@unrs/rspack-resolver-binding-linux-arm64-gnu@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.1.2.tgz#fe9b9792e478ab779de7de1d222389b67e711b83" + integrity sha512-RfYtlCtJrv5i6TO4dSlpbyOJX9Zbhmkqrr9hjDfr6YyE5KD0ywLRzw8UjXsohxG1XWgRpb2tvPuRYtURJwbqWg== -"@unrs/rspack-resolver-binding-linux-arm64-musl@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.1.1.tgz#d828f394d1c24570e57bc53ac7298a8d696e83ce" - integrity sha512-5i/Jq2Bb3He0JYCLOBzLxj+eX57rip2fOQUZX4i7H/ReZm9U64vVmWGNq7HlC0kNGo5AhGtRXCg5HbsBiBsyBw== +"@unrs/rspack-resolver-binding-linux-arm64-musl@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.1.2.tgz#0514f0ab586db7c6cb38b2726e27e3da123508a9" + integrity sha512-MaITzkoqsn1Rm3+YnplubgAQEfOt+2jHfFvuFhXseUfcfbxe8Zyc3TM7LKwgv7mRVjIl+/yYN5JqL0cjbnhAnQ== -"@unrs/rspack-resolver-binding-linux-x64-gnu@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.1.1.tgz#ef8dd2ac43c36c63b52d52f4930185e415c93d23" - integrity sha512-gAUWCEvtLGoKn2+dPrWXqE2xMfUjyvsUDa1+8yjKnyEqfGCyKcyaSSWkXq7k2VQnS5XxOThQJPPnZol4EOBxpw== +"@unrs/rspack-resolver-binding-linux-x64-gnu@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.1.2.tgz#901c347e1fd9d09fd8ef8e51dad73e41d2d4c2d7" + integrity sha512-Nu981XmzQqis/uB3j4Gi3p5BYCd/zReU5zbJmjMrEH7IIRH0dxZpdOmS/+KwEk6ao7Xd8P2D2gDHpHD/QTp0aQ== -"@unrs/rspack-resolver-binding-linux-x64-musl@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.1.1.tgz#29be1c55a14a7b60ace126ed64ad544799764119" - integrity sha512-o1Ik61ahhy+UHIWQB3t/kGwOUPmECbyXVuiW6D/ieKUWslspGE6qjFnyDxWqj9bDGsgjlbl/+O5QabXuAdUsJQ== +"@unrs/rspack-resolver-binding-linux-x64-musl@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.1.2.tgz#b71c69e130ea5560a492db95bfc1767674cb95ba" + integrity sha512-xJupeDvaRpV0ADMuG1dY9jkOjhUzTqtykvchiU2NldSD+nafSUcMWnoqzNUx7HGiqbTMOw9d9xT8ZiFs+6ZFyQ== -"@unrs/rspack-resolver-binding-wasm32-wasi@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.1.1.tgz#e13415542e8a089dacf1859c2d7424a036017c8c" - integrity sha512-uGqUQlEe9NUtw/VQOVLpuEPD6RBNmdUoGSHH8lGfKI5B3xHZYZ7nhKW38JeAnK9IymFJQpsyMHZXAyFR+NK8iw== +"@unrs/rspack-resolver-binding-wasm32-wasi@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.1.2.tgz#47500e79a272596a6654f6c9b5538ce522638209" + integrity sha512-un6X/xInks+KEgGpIHFV8BdoODHRohaDRvOwtjq+FXuoI4Ga0P6sLRvf4rPSZDvoMnqUhZtVNG0jG9oxOnrrLQ== dependencies: "@napi-rs/wasm-runtime" "^0.2.7" -"@unrs/rspack-resolver-binding-win32-arm64-msvc@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.1.1.tgz#cc1967b9c4ca9c5c2469fe40f7e0aeb5894b7ee6" - integrity sha512-UfpkOv54SOqD/TyzGIVCPQHSuXIVjeIIbMqrhl06695Sjlu5ls4Wxq6nllofC3Igak4h5ovulGvLLH/GRMdVYQ== +"@unrs/rspack-resolver-binding-win32-arm64-msvc@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.1.2.tgz#0aaac1f46e7d41aaf82a830a87bb4700c110b367" + integrity sha512-2lCFkeT1HYUb/OOStBS1m67aZOf9BQxRA+Wf/xs94CGgzmoQt7H4V/BrkB/GSGKsudXjkiwt2oHNkHiowAS90A== -"@unrs/rspack-resolver-binding-win32-x64-msvc@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.1.1.tgz#df2d242a060e3a5db1ec69d4ece8af81e52d5631" - integrity sha512-oBZjxVKfLVQxCdFDbafibNtJQKhT6DTW5FcNM25Vay86Yi7Mw4ftYg5NknR70WxM5qSNXIOgTHgzEUFfZ3Q7JA== +"@unrs/rspack-resolver-binding-win32-x64-msvc@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.1.2.tgz#68ad3b231d092e979bf4174c73b593fe1332b906" + integrity sha512-EYfya5HCQ/8Yfy7rvAAX2rGytu81+d/CIhNCbZfNKLQ690/qFsdEeTXRsMQW1afHoluMM50PsjPYu8ndy8fSQg== abs-svg-path@^0.1.1: version "0.1.1" @@ -5997,21 +5997,21 @@ rope-sequence@^1.3.0: integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== rspack-resolver@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/rspack-resolver/-/rspack-resolver-1.1.1.tgz#daad68f9cbcc5f579fcba4449c9f138c9c0a081c" - integrity sha512-SwTjuIOS9jIYViQpYiDOmLTf/nuP6j9fz9VSxdNyIFiFaivEt6TOO5z0qQAwVloTz8RqjbPAzhVr1isiyHNRHw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/rspack-resolver/-/rspack-resolver-1.1.2.tgz#33b91858f7ae962d086ab00cbf66b8a4b8e9b570" + integrity sha512-eHhz+9JWHFdbl/CVVqEP6kviLFZqw1s0MWxLdsGMtUKUspSO3SERptPohmrUIC9jT1bGV9Bd3+r8AmWbdfNAzQ== optionalDependencies: - "@unrs/rspack-resolver-binding-darwin-arm64" "1.1.1" - "@unrs/rspack-resolver-binding-darwin-x64" "1.1.1" - "@unrs/rspack-resolver-binding-freebsd-x64" "1.1.1" - "@unrs/rspack-resolver-binding-linux-arm-gnueabihf" "1.1.1" - "@unrs/rspack-resolver-binding-linux-arm64-gnu" "1.1.1" - "@unrs/rspack-resolver-binding-linux-arm64-musl" "1.1.1" - "@unrs/rspack-resolver-binding-linux-x64-gnu" "1.1.1" - "@unrs/rspack-resolver-binding-linux-x64-musl" "1.1.1" - "@unrs/rspack-resolver-binding-wasm32-wasi" "1.1.1" - "@unrs/rspack-resolver-binding-win32-arm64-msvc" "1.1.1" - "@unrs/rspack-resolver-binding-win32-x64-msvc" "1.1.1" + "@unrs/rspack-resolver-binding-darwin-arm64" "1.1.2" + "@unrs/rspack-resolver-binding-darwin-x64" "1.1.2" + "@unrs/rspack-resolver-binding-freebsd-x64" "1.1.2" + "@unrs/rspack-resolver-binding-linux-arm-gnueabihf" "1.1.2" + "@unrs/rspack-resolver-binding-linux-arm64-gnu" "1.1.2" + "@unrs/rspack-resolver-binding-linux-arm64-musl" "1.1.2" + "@unrs/rspack-resolver-binding-linux-x64-gnu" "1.1.2" + "@unrs/rspack-resolver-binding-linux-x64-musl" "1.1.2" + "@unrs/rspack-resolver-binding-wasm32-wasi" "1.1.2" + "@unrs/rspack-resolver-binding-win32-arm64-msvc" "1.1.2" + "@unrs/rspack-resolver-binding-win32-x64-msvc" "1.1.2" run-parallel@^1.1.9: version "1.2.0" From c142f0ea8a324eaaef4e1c1bef2df691a55b7f4e Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 16 Mar 2025 23:56:15 +0100 Subject: [PATCH 0393/1184] fixes for preselect and other select issues. --- .../CippComponents/CippAutocomplete.jsx | 43 ++++++++++++------- .../CippComponents/CippFormTenantSelector.jsx | 3 +- src/components/CippWizard/CippTenantStep.jsx | 1 + 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 3106eec4cd76..83d686a69068 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -167,18 +167,6 @@ export const CippAutoComplete = (props) => { }; }); setUsedOptions(convertedOptions); - if (preselectedValue && !defaultValue && !value && convertedOptions.length > 0) { - const preselectedOption = convertedOptions.find( - (option) => option.value === preselectedValue - ); - - if (preselectedOption) { - const newValue = multiple ? [preselectedOption] : preselectedOption; - if (onChange) { - onChange(newValue, newValue?.addedFields); - } - } - } } } @@ -206,13 +194,38 @@ export const CippAutoComplete = (props) => { finalOptions.sort((a, b) => a.label?.localeCompare(b.label)); } return finalOptions; - }, [api, usedOptions, options, removeOptions]); + }, [api, usedOptions, options, removeOptions, sortOptions]); + + useEffect(() => { + if (preselectedValue && !defaultValue && !value && memoizedOptions.length > 0) { + const preselectedOption = memoizedOptions.find( + (option) => option.value === preselectedValue + ); + + if (preselectedOption) { + const newValue = multiple ? [preselectedOption] : preselectedOption; + if (onChange) { + onChange(newValue, newValue?.addedFields); + } + } + } + }, [preselectedValue, defaultValue, value, memoizedOptions, multiple, onChange]); - const rand = Math.random().toString(36).substring(5); + // Create a stable key that only changes when necessary inputs change + const stableKey = useMemo(() => { + // Only regenerate the key when these values change + const keyParts = [ + JSON.stringify(defaultValue), + JSON.stringify(preselectedValue), + api?.url, + currentTenant + ]; + return keyParts.join('-'); + }, [defaultValue, preselectedValue, api?.url, currentTenant]); return ( { formControl={formControl} allTenants={allTenants} type={type} + preselectedEnabled={true} /> Date: Mon, 17 Mar 2025 00:11:26 +0100 Subject: [PATCH 0394/1184] fix for added fields --- src/components/CippComponents/CippAutocomplete.jsx | 1 + src/components/CippComponents/CippFormTenantSelector.jsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 83d686a69068..2ce70653a020 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -196,6 +196,7 @@ export const CippAutoComplete = (props) => { return finalOptions; }, [api, usedOptions, options, removeOptions, sortOptions]); + // Dedicated effect for handling preselected value useEffect(() => { if (preselectedValue && !defaultValue && !value && memoizedOptions.length > 0) { const preselectedOption = memoizedOptions.find( diff --git a/src/components/CippComponents/CippFormTenantSelector.jsx b/src/components/CippComponents/CippFormTenantSelector.jsx index 55ed287cc8d4..dbde6a84b073 100644 --- a/src/components/CippComponents/CippFormTenantSelector.jsx +++ b/src/components/CippComponents/CippFormTenantSelector.jsx @@ -50,7 +50,7 @@ export const CippFormTenantSelector = ({ value: tenant[valueField], label: `${tenant.displayName} (${tenant.defaultDomainName})`, type: "Tenant", - addedField: { + addedFields: { defaultDomainName: tenant.defaultDomainName, displayName: tenant.displayName, customerId: tenant.customerId, From 333d62775bbe699aa0e7ef2ac83d15072f60ac7b Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 17 Mar 2025 00:33:10 +0100 Subject: [PATCH 0395/1184] major package updates --- package.json | 82 +- src/components/CippTable/CippDataTable.js | 5 +- src/pages/_app.js | 2 +- yarn.lock | 3110 +++++++++++---------- 4 files changed, 1696 insertions(+), 1503 deletions(-) diff --git a/package.json b/package.json index 87d502b493e1..5abd1be55721 100644 --- a/package.json +++ b/package.json @@ -24,20 +24,20 @@ "start-swa": "swa start --swa-config-location .vscode http://127.0.0.1:3000 --api-location http://127.0.0.1:7071 --verbose=silly" }, "dependencies": { - "@emotion/cache": "11.10.5", - "@emotion/react": "11.13.3", - "@emotion/server": "11.10.0", - "@emotion/styled": "11.13.0", - "@heroicons/react": "2.0.15", + "@emotion/cache": "11.14.0", + "@emotion/react": "11.14.0", + "@emotion/server": "11.11.0", + "@emotion/styled": "11.14.0", + "@heroicons/react": "2.2.0", "@monaco-editor/react": "^4.6.0", - "@mui/icons-material": "6.1.6", - "@mui/lab": "6.0.0-beta.14", - "@mui/material": "6.1.6", - "@mui/system": "6.1.6", - "@mui/x-date-pickers": "7.22.1", + "@mui/icons-material": "6.4.7", + "@mui/lab": "6.0.0-beta.30", + "@mui/material": "6.4.7", + "@mui/system": "6.4.7", + "@mui/x-date-pickers": "7.27.3", "@musement/iso-duration": "^1.0.0", - "@react-pdf/renderer": "3.1.2", - "@reduxjs/toolkit": "1.9.2", + "@react-pdf/renderer": "4.3.0", + "@reduxjs/toolkit": "2.6.1", "@tanstack/react-query": "^5.51.11", "@tanstack/react-query-devtools": "^5.51.11", "@tanstack/react-table": "^8.19.2", @@ -49,17 +49,17 @@ "@tiptap/react": "^2.9.1", "@tiptap/starter-kit": "^2.9.1", "@uiw/react-json-view": "^2.0.0-alpha.30", - "apexcharts": "3.36.3", + "apexcharts": "4.5.0", "axios": "^1.7.2", - "date-fns": "2.29.3", - "eml-parse-js": "^1.1.15", + "date-fns": "4.1.0", + "eml-parse-js": "^1.2.0-beta.0", "export-to-csv": "^1.3.0", - "formik": "2.2.9", + "formik": "2.4.6", "gray-matter": "4.0.3", - "i18next": "22.4.9", + "i18next": "24.2.3", "javascript-time-ago": "^2.5.11", - "jspdf": "^2.5.1", - "jspdf-autotable": "^3.8.2", + "jspdf": "^3.0.0", + "jspdf-autotable": "^5.0.2", "leaflet": "^1.9.4", "leaflet-defaulticon-compatibility": "^0.1.2", "leaflet.markercluster": "^1.5.3", @@ -67,45 +67,45 @@ "material-react-table": "^3.0.1", "monaco-editor": "^0.52.0", "mui-tiptap": "^1.14.0", - "next": "^13.5.6", + "next": "^15.2.2", "nprogress": "0.2.0", "numeral": "2.0.6", "prop-types": "15.8.1", - "react": "18.2.0", - "react-apexcharts": "1.4.0", + "react": "19.0.0", + "react-apexcharts": "1.7.0", "react-beautiful-dnd": "13.1.1", "react-copy-to-clipboard": "^5.1.0", - "react-dom": "18.2.0", - "react-dropzone": "14.2.3", - "react-error-boundary": "^4.0.13", + "react-dom": "19.0.0", + "react-dropzone": "14.3.8", + "react-error-boundary": "^5.0.0", "react-grid-layout": "^1.5.0", "react-hook-form": "^7.53.0", - "react-hot-toast": "2.4.0", + "react-hot-toast": "2.5.2", "react-html-parser": "^2.0.2", - "react-i18next": "12.1.4", - "react-leaflet": "4.2.1", - "react-leaflet-markercluster": "^4.2.1", - "react-markdown": "8.0.5", + "react-i18next": "15.4.1", + "react-leaflet": "5.0.0", + "react-leaflet-markercluster": "^5.0.0-rc.0", + "react-markdown": "10.1.0", "react-media-hook": "^0.5.0", "react-papaparse": "^4.4.0", - "react-quill": "^0.0.2", - "react-redux": "8.0.5", + "react-quill": "^2.0.0", + "react-redux": "9.2.0", "react-syntax-highlighter": "^15.6.1", "react-time-ago": "^7.3.3", "react-window": "^1.8.10", - "redux": "4.2.1", + "redux": "5.0.1", "redux-devtools-extension": "2.13.9", "redux-persist": "^6.0.0", - "redux-thunk": "2.4.2", - "simplebar": "6.2.0", - "simplebar-react": "3.2.0", + "redux-thunk": "3.1.0", + "simplebar": "6.3.0", + "simplebar-react": "3.3.0", "stylis-plugin-rtl": "2.1.1", - "typescript": "4.9.4", - "yup": "0.32.11" + "typescript": "5.8.2", + "yup": "1.6.1" }, "devDependencies": { - "@svgr/webpack": "6.5.1", - "eslint": "8.32.0", - "eslint-config-next": "13.1.6" + "@svgr/webpack": "8.1.0", + "eslint": "9.22.0", + "eslint-config-next": "15.2.2" } } diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 1f9435b174b2..4052a957a2f8 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -297,7 +297,10 @@ export const CippDataTable = (props) => { }, [table.getSelectedRowModel().rows]); useEffect(() => { - setConfiguredSimpleColumns(simpleColumns); + //check if the simplecolumns are an array, + if (Array.isArray(simpleColumns) && simpleColumns.length > 0) { + setConfiguredSimpleColumns(simpleColumns); + } }, [simpleColumns]); return ( diff --git a/src/pages/_app.js b/src/pages/_app.js index 0b1831c98f73..25c7d4dfe524 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -16,7 +16,7 @@ import { useMediaPredicate } from "react-media-hook"; import Error500 from "./500"; import { ErrorBoundary } from "react-error-boundary"; import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; -import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; +import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFnsV3"; import TimeAgo from "javascript-time-ago"; import en from "javascript-time-ago/locale/en.json"; import CippSpeedDial from "../components/CippComponents/CippSpeedDial"; diff --git a/yarn.lock b/yarn.lock index 9ababd0a680c..7e6d7b25ed30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,7 +24,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== -"@babel/core@^7.19.6": +"@babel/core@^7.21.3": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== @@ -586,7 +586,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-constant-elements@^7.18.12": +"@babel/plugin-transform-react-constant-elements@^7.21.3": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz#08a1de35a301929b60fdf2788a54b46cd8ecd0ef" integrity sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow== @@ -727,7 +727,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" -"@babel/preset-env@^7.19.4": +"@babel/preset-env@^7.20.2": version "7.26.9" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== @@ -823,7 +823,7 @@ "@babel/plugin-transform-react-jsx-development" "^7.25.9" "@babel/plugin-transform-react-pure-annotations" "^7.25.9" -"@babel/preset-typescript@^7.18.6": +"@babel/preset-typescript@^7.21.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== @@ -834,7 +834,7 @@ "@babel/plugin-transform-modules-commonjs" "^7.25.9" "@babel/plugin-transform-typescript" "^7.25.9" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.25.0", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.26.10", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== @@ -863,7 +863,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.20.0", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9", "@babel/types@^7.4.4": +"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9", "@babel/types@^7.4.4": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259" integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== @@ -879,7 +879,7 @@ "@emnapi/wasi-threads" "1.0.1" tslib "^2.4.0" -"@emnapi/runtime@^1.3.1": +"@emnapi/runtime@^1.2.0", "@emnapi/runtime@^1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== @@ -893,7 +893,7 @@ dependencies: tslib "^2.4.0" -"@emotion/babel-plugin@^11.12.0": +"@emotion/babel-plugin@^11.13.5": version "11.13.5" resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== @@ -910,7 +910,7 @@ source-map "^0.5.7" stylis "4.2.0" -"@emotion/cache@*", "@emotion/cache@^11.13.0", "@emotion/cache@^11.13.5": +"@emotion/cache@*", "@emotion/cache@11.14.0", "@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": version "11.14.0" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== @@ -921,17 +921,6 @@ "@emotion/weak-memoize" "^0.4.0" stylis "4.2.0" -"@emotion/cache@11.10.5": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" - integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== - dependencies: - "@emotion/memoize" "^0.8.0" - "@emotion/sheet" "^1.2.1" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - stylis "4.1.3" - "@emotion/hash@^0.9.2": version "0.9.2" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" @@ -944,31 +933,26 @@ dependencies: "@emotion/memoize" "^0.9.0" -"@emotion/memoize@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - "@emotion/memoize@^0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@11.13.3": - version "11.13.3" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.13.3.tgz#a69d0de2a23f5b48e0acf210416638010e4bd2e4" - integrity sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg== +"@emotion/react@11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== dependencies: "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.12.0" - "@emotion/cache" "^11.13.0" - "@emotion/serialize" "^1.3.1" - "@emotion/use-insertion-effect-with-fallbacks" "^1.1.0" - "@emotion/utils" "^1.4.0" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" "@emotion/weak-memoize" "^0.4.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@*", "@emotion/serialize@^1.3.0", "@emotion/serialize@^1.3.1", "@emotion/serialize@^1.3.3": +"@emotion/serialize@*", "@emotion/serialize@^1.3.3": version "1.3.3" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== @@ -979,73 +963,119 @@ "@emotion/utils" "^1.4.2" csstype "^3.0.2" -"@emotion/server@11.10.0": - version "11.10.0" - resolved "https://registry.yarnpkg.com/@emotion/server/-/server-11.10.0.tgz#3edc075b672c75426f682d56aadc6404fb1f6648" - integrity sha512-MTvJ21JPo9aS02GdjFW4nhdwOi2tNNpMmAM/YED0pkxzjDNi5WbiTwXqaCnvLc2Lr8NFtjhT0az1vTJyLIHYcw== +"@emotion/server@11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/server/-/server-11.11.0.tgz#35537176a2a5ed8aed7801f254828e636ec3bd6e" + integrity sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA== dependencies: - "@emotion/utils" "^1.2.0" + "@emotion/utils" "^1.2.1" html-tokenize "^2.0.0" multipipe "^1.0.2" through "^2.3.8" -"@emotion/sheet@^1.2.1", "@emotion/sheet@^1.4.0": +"@emotion/sheet@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/styled@11.13.0": - version "11.13.0" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.13.0.tgz#633fd700db701472c7a5dbef54d6f9834e9fb190" - integrity sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA== +"@emotion/styled@11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.0.tgz#f47ca7219b1a295186d7661583376fcea95f0ff3" + integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== dependencies: "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.12.0" + "@emotion/babel-plugin" "^11.13.5" "@emotion/is-prop-valid" "^1.3.0" - "@emotion/serialize" "^1.3.0" - "@emotion/use-insertion-effect-with-fallbacks" "^1.1.0" - "@emotion/utils" "^1.4.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" "@emotion/unitless@^0.10.0": version "0.10.0" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== -"@emotion/use-insertion-effect-with-fallbacks@^1.1.0": +"@emotion/use-insertion-effect-with-fallbacks@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== -"@emotion/utils@*", "@emotion/utils@^1.2.0", "@emotion/utils@^1.4.0", "@emotion/utils@^1.4.2": +"@emotion/utils@*", "@emotion/utils@^1.2.1", "@emotion/utils@^1.4.2": version "1.4.2" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== -"@emotion/weak-memoize@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - "@emotion/weak-memoize@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#b0fc7e06d0c94f801537fd4237edc2706d3b8e4c" + integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.19.2": + version "0.19.2" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.2.tgz#3060b809e111abfc97adb0bb1172778b90cb46aa" + integrity sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w== + dependencies: + "@eslint/object-schema" "^2.1.6" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.1.0.tgz#62f1b7821e9d9ced1b3f512c7ea731825765d1cc" + integrity sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA== + +"@eslint/core@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.12.0.tgz#5f960c3d57728be9f6c65bd84aa6aa613078798e" + integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.0.tgz#96a558f45842989cca7ea1ecd785ad5491193846" + integrity sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" + espree "^10.0.1" + globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@9.22.0": + version "9.22.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.22.0.tgz#4ff53649ded7cbce90b444b494c234137fa1aa3d" + integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ== + +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== + +"@eslint/plugin-kit@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz#9901d52c136fb8f375906a73dcc382646c3b6a27" + integrity sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g== + dependencies: + "@eslint/core" "^0.12.0" + levn "^0.4.1" + "@floating-ui/core@^1.6.0": version "1.6.9" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.9.tgz#64d1da251433019dafa091de9b2886ff35ec14e6" @@ -1073,29 +1103,151 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== -"@heroicons/react@2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.15.tgz#e1fc966350577a1ab0e38211e7b58e4bf8285b49" - integrity sha512-CZ2dGWgWG3/z5LEoD5D3MEr1syn45JM/OB2aDpw531Ryecgkz2V7TWQ808P0lva7zP003PVW6WlwbofsYyga3A== +"@heroicons/react@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.2.0.tgz#0c05124af50434a800773abec8d3af6a297d904b" + integrity sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ== + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" + integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== + +"@img/sharp-darwin-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08" + integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.0.4" + +"@img/sharp-darwin-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61" + integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.0.4" + +"@img/sharp-libvips-darwin-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f" + integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== + +"@img/sharp-libvips-darwin-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062" + integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== + +"@img/sharp-libvips-linux-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704" + integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== + +"@img/sharp-libvips-linux-arm@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197" + integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== + +"@img/sharp-libvips-linux-s390x@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce" + integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== + +"@img/sharp-libvips-linux-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0" + integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== + +"@img/sharp-libvips-linuxmusl-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5" + integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== + +"@img/sharp-libvips-linuxmusl-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff" + integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== + +"@img/sharp-linux-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22" + integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.0.4" + +"@img/sharp-linux-arm@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff" + integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.0.5" + +"@img/sharp-linux-s390x@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667" + integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.0.4" + +"@img/sharp-linux-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb" + integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.0.4" + +"@img/sharp-linuxmusl-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b" + integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + +"@img/sharp-linuxmusl-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48" + integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + +"@img/sharp-wasm32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1" + integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== + dependencies: + "@emnapi/runtime" "^1.2.0" + +"@img/sharp-win32-ia32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9" + integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== + +"@img/sharp-win32-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342" + integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== "@jridgewell/gen-mapping@^0.3.5": version "0.3.8" @@ -1143,63 +1295,63 @@ dependencies: "@monaco-editor/loader" "^1.5.0" -"@mui/base@5.0.0-beta.61": - version "5.0.0-beta.61" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.61.tgz#729e816b5104da1eeeacb11d1e61be90f2c21dcc" - integrity sha512-YaMOTXS3ecDNGsPKa6UdlJ8loFLvcL9+VbpCK3hfk71OaNauZRp4Yf7KeXDYr7Ms3M/XBD3SaiR6JMr6vYtfDg== +"@mui/base@5.0.0-beta.69": + version "5.0.0-beta.69" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.69.tgz#fc3635818c6a9fb954b1ee00870109e7e266149d" + integrity sha512-r2YyGUXpZxj8rLAlbjp1x2BnMERTZ/dMqd9cClKj2OJ7ALAuiv/9X5E9eHfRc9o/dGRuLSMq/WTjREktJVjxVA== dependencies: "@babel/runtime" "^7.26.0" "@floating-ui/react-dom" "^2.1.1" - "@mui/types" "^7.2.19" - "@mui/utils" "^6.1.6" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.1" "@popperjs/core" "^2.11.8" clsx "^2.1.1" prop-types "^15.8.1" -"@mui/core-downloads-tracker@^6.1.6": +"@mui/core-downloads-tracker@^6.4.7": version "6.4.7" resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.7.tgz#df62091560024a6412b0f35dcd584f9dba70dced" integrity sha512-XjJrKFNt9zAKvcnoIIBquXyFyhfrHYuttqMsoDS7lM7VwufYG4fAPw4kINjBFg++fqXM2BNAuWR9J7XVIuKIKg== -"@mui/icons-material@6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-6.1.6.tgz#bfaf32874a9f9ec88c07d1ca132d1a0671e9ed7c" - integrity sha512-5r9urIL2lxXb/sPN3LFfFYEibsXJUb986HhhIeu1gOcte460pwdSiEhBSxkAuyT8Dj7jvu9MjqSBmSumQELo8A== +"@mui/icons-material@6.4.7": + version "6.4.7" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-6.4.7.tgz#078406b61c7d17230b8633643dbb458f89e02059" + integrity sha512-Rk8cs9ufQoLBw582Rdqq7fnSXXZTqhYRbpe1Y5SAz9lJKZP3CIdrj0PfG8HJLGw1hrsHFN/rkkm70IDzhJsG1g== dependencies: "@babel/runtime" "^7.26.0" -"@mui/lab@6.0.0-beta.14": - version "6.0.0-beta.14" - resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-6.0.0-beta.14.tgz#f548fb4207e7694d6df0f38ca20f6a5600696c70" - integrity sha512-l+g8z6QGcr7HdfCXhVaYcEp9TijH/G4h0lNaDaBL+qDFQ087ipNHC+XozE7mXOmBwtEAWmTJB4E5GwDboi9oxA== +"@mui/lab@6.0.0-beta.30": + version "6.0.0-beta.30" + resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-6.0.0-beta.30.tgz#650973b4d04965f18b3d3390e2dd90e772a4f461" + integrity sha512-ayDYkzTlkm5cnDGa10bvuFygX+2b9Hm1T4QZYMqV8+nSx3frKE0TLAbE7/qQ4vInOO5E4aOkHVBwZjyO+UbMTA== dependencies: "@babel/runtime" "^7.26.0" - "@mui/base" "5.0.0-beta.61" - "@mui/system" "^6.1.6" - "@mui/types" "^7.2.19" - "@mui/utils" "^6.1.6" + "@mui/base" "5.0.0-beta.69" + "@mui/system" "^6.4.7" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.6" clsx "^2.1.1" prop-types "^15.8.1" -"@mui/material@6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.1.6.tgz#505d7300401f6af38426006d7fb3b8707dc10fbc" - integrity sha512-1yvejiQ/601l5AK3uIdUlAVElyCxoqKnl7QA+2oFB/2qYPWfRwDgavW/MoywS5Y2gZEslcJKhe0s2F3IthgFgw== +"@mui/material@6.4.7": + version "6.4.7" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.4.7.tgz#887f1efe4a1c244ef7aeebb7d95a6f061f50b89b" + integrity sha512-K65StXUeGAtFJ4ikvHKtmDCO5Ab7g0FZUu2J5VpoKD+O6Y3CjLYzRi+TMlI3kaL4CL158+FccMoOd/eaddmeRQ== dependencies: "@babel/runtime" "^7.26.0" - "@mui/core-downloads-tracker" "^6.1.6" - "@mui/system" "^6.1.6" - "@mui/types" "^7.2.19" - "@mui/utils" "^6.1.6" + "@mui/core-downloads-tracker" "^6.4.7" + "@mui/system" "^6.4.7" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.6" "@popperjs/core" "^2.11.8" - "@types/react-transition-group" "^4.4.11" + "@types/react-transition-group" "^4.4.12" clsx "^2.1.1" csstype "^3.1.3" prop-types "^15.8.1" - react-is "^18.3.1" + react-is "^19.0.0" react-transition-group "^4.4.5" -"@mui/private-theming@^6.1.6", "@mui/private-theming@^6.4.6": +"@mui/private-theming@^6.4.6": version "6.4.6" resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.6.tgz#77c0b150be94c061b34b34ce00eb60cdfb92837f" integrity sha512-T5FxdPzCELuOrhpA2g4Pi6241HAxRwZudzAuL9vBvniuB5YU82HCmrARw32AuCiyTfWzbrYGGpZ4zyeqqp9RvQ== @@ -1208,7 +1360,7 @@ "@mui/utils" "^6.4.6" prop-types "^15.8.1" -"@mui/styled-engine@^6.1.6", "@mui/styled-engine@^6.4.6": +"@mui/styled-engine@^6.4.6": version "6.4.6" resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.4.6.tgz#cd0783adbb066a349e1995f0e1a7b8c3c2d59738" integrity sha512-vSWYc9ZLX46be5gP+FCzWVn5rvDr4cXC5JBZwSIkYk9xbC7GeV+0kCvB8Q6XLFQJy+a62bbqtmdwS4Ghi9NBlQ== @@ -1220,21 +1372,7 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.1.6.tgz#d335d6952092f3c758c8b78c2d993aa13ef58175" - integrity sha512-qOf1VUE9wK8syiB0BBCp82oNBAVPYdj4Trh+G1s+L+ImYiKlubWhhqlnvWt3xqMevR+D2h1CXzA1vhX2FvA+VQ== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/private-theming" "^6.1.6" - "@mui/styled-engine" "^6.1.6" - "@mui/types" "^7.2.19" - "@mui/utils" "^6.1.6" - clsx "^2.1.1" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/system@^6.1.6": +"@mui/system@6.4.7", "@mui/system@^6.4.7": version "6.4.7" resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.7.tgz#a4a8e541a2f1efef1c85a338723aa2f2d0a31e8e" integrity sha512-7wwc4++Ak6tGIooEVA9AY7FhH2p9fvBMORT4vNLMAysH3Yus/9B9RYMbrn3ANgsOyvT3Z7nE+SP8/+3FimQmcg== @@ -1248,12 +1386,12 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.19", "@mui/types@^7.2.21": +"@mui/types@^7.2.21": version "7.2.21" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.21.tgz#63f50874eda8e4a021a69aaa8ba9597369befda2" integrity sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww== -"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.1.6", "@mui/utils@^6.4.6": +"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.4.1", "@mui/utils@^6.4.6": version "6.4.6" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.6.tgz#307828bee501d30ed5cd1e339ca28c9efcc4e3f9" integrity sha512-43nZeE1pJF2anGafNydUcYFPtHwAqiBiauRtaMvurdrZI3YrUjHkAu43RBsxef7OFtJMXGiHFvq43kb7lig0sA== @@ -1265,23 +1403,23 @@ prop-types "^15.8.1" react-is "^19.0.0" -"@mui/x-date-pickers@7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.22.1.tgz#3abe7ad0b5816051fdcef4ffbe5343965e7dfc8e" - integrity sha512-VBgicE+7PvJrdHSL6HyieHT6a/0dENH8RaMIM2VwUFrGoZzvik50WNwY5U+Hip1BwZLIEvlqtNRQIIj6kgBR6Q== +"@mui/x-date-pickers@7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.27.3.tgz#61171daf74802c17f9d861068eab422231389502" + integrity sha512-igfKTPC4ZVCmS5j/NXcXBtj/hHseQHzRpCpIB1PMnJGhMdRYXnz8qZz5XhlNBKlzJVXkGu6Uil+obZpCLNj1xg== dependencies: "@babel/runtime" "^7.25.7" "@mui/utils" "^5.16.6 || ^6.0.0" - "@mui/x-internals" "7.21.0" + "@mui/x-internals" "7.26.0" "@types/react-transition-group" "^4.4.11" clsx "^2.1.1" prop-types "^15.8.1" react-transition-group "^4.4.5" -"@mui/x-internals@7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-7.21.0.tgz#daca984059015b27efdb47bb44dc7ff4a6816673" - integrity sha512-94YNyZ0BhK5Z+Tkr90RKf47IVCW8R/1MvdUhh6MCQg6sZa74jsX+x+gEZ4kzuCqOsuyTyxikeQ8vVuCIQiP7UQ== +"@mui/x-internals@7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-7.26.0.tgz#e8c3060582c102127ab55b0a93e881930dac107b" + integrity sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg== dependencies: "@babel/runtime" "^7.25.7" "@mui/utils" "^5.16.6 || ^6.0.0" @@ -1300,62 +1438,57 @@ "@emnapi/runtime" "^1.3.1" "@tybys/wasm-util" "^0.9.0" -"@next/env@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.8.tgz#404d3b3e5881b6a0510500c6cc97e3589a2e6371" - integrity sha512-YmiG58BqyZ2FjrF2+5uZExL2BrLr8RTQzLXNDJ8pJr0O+rPlOeDPXp1p1/4OrR3avDidzZo3D8QO2cuDv1KCkw== - -"@next/eslint-plugin-next@13.1.6": - version "13.1.6" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.6.tgz#ad8be22dd3d8aee9a9bd9a2507e2c55a2f7ebdd9" - integrity sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw== - dependencies: - glob "7.1.7" - -"@next/swc-darwin-arm64@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.8.tgz#c32bc6662326a623f177e8b9a511128d7ea5af4d" - integrity sha512-HkFw3QPeIy9bImWVTbsvzfEWQkuzBEQTK/L7ORMg+9sXNN0vNR5Gz/chD4/VbozTHyA38lWTrMBfLoWVpD+2IA== - -"@next/swc-darwin-x64@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.8.tgz#bef7df0237a434b6ad23c1e13ae2e564b2ebcccf" - integrity sha512-TpRTH5FyH4qGw0MCq6UE3yQGWtwhdDCwSE0wWcYwDWC5cpx3mGKVmAVKwDNbrpk0U5bl0tEzgxp5X4UPHWA81A== - -"@next/swc-linux-arm64-gnu@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.8.tgz#5bad9476ba774487bcafddec7bd824f1427555f0" - integrity sha512-KUPKuu4EZCCTU5M61YLpuL2fKMWQRijJLtBk2Hph8FJUx6RsNRDwS0MVlJqAr2IwjJwrNxYm5QAdQ1LuRbrZMw== - -"@next/swc-linux-arm64-musl@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.8.tgz#55df6e5f980570d3cb821b76232d9e7224907886" - integrity sha512-hLyaBgXynyuVgqLwzcwF6loc0XuEz9zuK8XbzX5uslj3aqiw38l+qL1IJNLzHmkDX0nfVuBfIRV6QPsm0sCXnQ== - -"@next/swc-linux-x64-gnu@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.8.tgz#c1d36f7830ad53118d145ac250ff144a1a5b7778" - integrity sha512-IhxeEpi+U85GU9p6bVSAFMwuCNRdpmHueM8Z9DRft8f70Rvt3Q9tNFJxqLxAbiGoNOR7TuLNjAw2wJucHfMw3g== - -"@next/swc-linux-x64-musl@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.8.tgz#670bd7f10cf4324b22a5f1573558f5f011b421f8" - integrity sha512-NQICDU7X/tcAVkTEfvpkq5Z1EViodDj3m18wiyJ5wpzOFf4LH7vFjLBVCWNcf3/sfqv/yfD8jshqrffOPtZitg== - -"@next/swc-win32-arm64-msvc@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.8.tgz#203dcc899f438826f3a22ffe0fb0d56a324625ac" - integrity sha512-ndLIuFI/26CrhG+pqGkW+yPV/xuIijgaZbzPhujlDaUGczizzXgnI78iuisdPdGoMHLlQ9pRkFUeMGzENdyEHg== - -"@next/swc-win32-ia32-msvc@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.8.tgz#21eb6afb07d5cb9b3600cf33d6bc709b4d59ea20" - integrity sha512-9HUxSP76n8VbEtwZVNZDMY32Y4fm53ORaiopQkGQ4q54okYa5T8szhVkLTFKu4gaA/KJcJGvCC5dDIaqfSta1w== - -"@next/swc-win32-x64-msvc@13.5.8": - version "13.5.8" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.8.tgz#21770d42a25dc591661f027f41100c4b48ca5938" - integrity sha512-WFisiehrLrkX/nv6Vg7CUT6tdrhO6Nv0mLh5zuYQ5GLD4OnaOHkBt9iRkOziMy7ny+qF+V7023+loZIV/R9j8A== +"@next/env@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/env/-/env-15.2.2.tgz#6345352365a811c523cecf284874ff489b675e59" + integrity sha512-yWgopCfA9XDR8ZH3taB5nRKtKJ1Q5fYsTOuYkzIIoS8TJ0UAUKAGF73JnGszbjk2ufAQDj6mDdgsJAFx5CLtYQ== + +"@next/eslint-plugin-next@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.2.tgz#55fa96486f9e163ca689d441d31f4431ef423aef" + integrity sha512-1+BzokFuFQIfLaRxUKf2u5In4xhPV7tUgKcK53ywvFl6+LXHWHpFkcV7VNeKlyQKUotwiq4fy/aDNF9EiUp4RQ== + dependencies: + fast-glob "3.3.1" + +"@next/swc-darwin-arm64@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.2.tgz#d3131279d4815ed7604eba7bf0063e0b8bfd2135" + integrity sha512-HNBRnz+bkZ+KfyOExpUxTMR0Ow8nkkcE6IlsdEa9W/rI7gefud19+Sn1xYKwB9pdCdxIP1lPru/ZfjfA+iT8pw== + +"@next/swc-darwin-x64@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.2.tgz#8562f6b51177aa30f3a6e95a8b3e0e176a6cb04f" + integrity sha512-mJOUwp7al63tDpLpEFpKwwg5jwvtL1lhRW2fI1Aog0nYCPAhxbJsaZKdoVyPZCy8MYf/iQVNDuk/+i29iLCzIA== + +"@next/swc-linux-arm64-gnu@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.2.tgz#c2466cffc541f39ae4d435087c81f5899d401903" + integrity sha512-5ZZ0Zwy3SgMr7MfWtRE7cQWVssfOvxYfD9O7XHM7KM4nrf5EOeqwq67ZXDgo86LVmffgsu5tPO57EeFKRnrfSQ== + +"@next/swc-linux-arm64-musl@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.2.tgz#24ed87fe47325597e986bd01c427efae53d6b677" + integrity sha512-cgKWBuFMLlJ4TWcFHl1KOaVVUAF8vy4qEvX5KsNd0Yj5mhu989QFCq1WjuaEbv/tO1ZpsQI6h/0YR8bLwEi+nA== + +"@next/swc-linux-x64-gnu@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.2.tgz#0240f44530ca39c1fc899fabe8f33aa35d7e77da" + integrity sha512-c3kWSOSsVL8rcNBBfOq1+/j2PKs2nsMwJUV4icUxRgGBwUOfppeh7YhN5s79enBQFU+8xRgVatFkhHU1QW7yUA== + +"@next/swc-linux-x64-musl@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.2.tgz#cca6ce8e9ec89afaa618673f0f8658682c30ff56" + integrity sha512-PXTW9PLTxdNlVYgPJ0equojcq1kNu5NtwcNjRjHAB+/sdoKZ+X8FBu70fdJFadkxFIGekQTyRvPMFF+SOJaQjw== + +"@next/swc-win32-arm64-msvc@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.2.tgz#08f621602ed53fa21ddf6f656160b9186860be15" + integrity sha512-nG644Es5llSGEcTaXhnGWR/aThM/hIaz0jx4MDg4gWC8GfTCp8eDBWZ77CVuv2ha/uL9Ce+nPTfYkSLG67/sHg== + +"@next/swc-win32-x64-msvc@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.2.tgz#2072d69374f8c944134a5c5a80ce03ff84254cfa" + integrity sha512-52nWy65S/R6/kejz3jpvHAjZDPKIbEQu4x9jDBzmB9jJfuOy5rspjKu4u77+fI4M/WzLXrrQd57hlFGzz1ubcQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1370,7 +1503,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": +"@nodelib/fs.walk@^1.2.3": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -1388,34 +1521,16 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@react-leaflet/core@^2.0.0", "@react-leaflet/core@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-2.1.0.tgz#383acd31259d7c9ae8fb1b02d5e18fe613c2a13d" - integrity sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg== - -"@react-pdf/fns@2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@react-pdf/fns/-/fns-2.2.1.tgz#04fe664a6f70214569c9c27e249e3395836f37d5" - integrity sha512-s78aDg0vDYaijU5lLOCsUD+qinQbfOvcNeaoX9AiE7+kZzzCo6B/nX+l48cmt9OosJmvZvE9DWR9cLhrhOi2pA== - dependencies: - "@babel/runtime" "^7.20.13" +"@react-leaflet/core@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-3.0.0.tgz#34ccc280ce7d8ac5c09f2b3d5fffded450bdf1a2" + integrity sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ== "@react-pdf/fns@3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@react-pdf/fns/-/fns-3.1.2.tgz#9ce7351d9fdf1cdb6e9c6ffd6801bc65f29f991c" integrity sha512-qTKGUf0iAMGg2+OsUcp9ffKnKi41RukM/zYIWMDJ4hRVYSr89Q7e3wSDW/Koqx3ea3Uy/z3h2y3wPX6Bdfxk6g== -"@react-pdf/font@^2.3.1": - version "2.5.2" - resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-2.5.2.tgz#4a2fcaac3b55470a2727387ec28937b54cba0d77" - integrity sha512-Ud0EfZ2FwrbvwAWx8nz+KKLmiqACCH9a/N/xNDOja0e/YgSnqTpuyHegFBgIMKjuBtO5dNvkb4dXkxAhGe/ayw== - dependencies: - "@babel/runtime" "^7.20.13" - "@react-pdf/types" "^2.6.0" - cross-fetch "^3.1.5" - fontkit "^2.0.2" - is-url "^1.2.4" - "@react-pdf/font@^4.0.2": version "4.0.2" resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-4.0.2.tgz#58ede51937bb57025dcf221b107e248d0ea9d60b" @@ -1426,46 +1541,28 @@ fontkit "^2.0.2" is-url "^1.2.4" -"@react-pdf/image@^2.3.6": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@react-pdf/image/-/image-2.3.6.tgz#72444842517f8b0c08bbf4c216d8b41110498d16" - integrity sha512-7iZDYZrZlJqNzS6huNl2XdMcLFUo68e6mOdzQeJ63d5eApdthhSHBnkGzHfLhH5t8DCpZNtClmklzuLL63ADfw== +"@react-pdf/image@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@react-pdf/image/-/image-3.0.3.tgz#bfdb9e782c361c9d9e0f81c31ef98554bc4e928c" + integrity sha512-lvP5ryzYM3wpbO9bvqLZYwEr5XBDX9jcaRICvtnoRqdJOo7PRrMnmB4MMScyb+Xw10mGeIubZAAomNAG5ONQZQ== dependencies: - "@babel/runtime" "^7.20.13" - "@react-pdf/png-js" "^2.3.1" - cross-fetch "^3.1.5" - jay-peg "^1.0.2" + "@react-pdf/png-js" "^3.0.0" + jay-peg "^1.1.1" -"@react-pdf/layout@^3.3.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-3.13.0.tgz#2ef1423f32e891b5ec24f2d9d5c2daad4da01c66" - integrity sha512-lpPj/EJYHFOc0ALiJwLP09H28B4ADyvTjxOf67xTF+qkWd+dq1vg7dw3wnYESPnWk5T9NN+HlUenJqdYEY9AvA== +"@react-pdf/layout@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-4.4.0.tgz#26ddf73951ab0ce923689730d3b8eaf0b0db4841" + integrity sha512-Aq+Cc6JYausWLoks2FvHe3PwK9cTuvksB2uJ0AnkKJEUtQbvCq8eCRb1bjbbwIji9OzFRTTzZij7LzkpKHjIeA== dependencies: - "@babel/runtime" "^7.20.13" - "@react-pdf/fns" "2.2.1" - "@react-pdf/image" "^2.3.6" - "@react-pdf/pdfkit" "^3.2.0" - "@react-pdf/primitives" "^3.1.1" - "@react-pdf/stylesheet" "^4.3.0" - "@react-pdf/textkit" "^4.4.1" - "@react-pdf/types" "^2.6.0" - cross-fetch "^3.1.5" + "@react-pdf/fns" "3.1.2" + "@react-pdf/image" "^3.0.3" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/stylesheet" "^6.1.0" + "@react-pdf/textkit" "^6.0.0" + "@react-pdf/types" "^2.9.0" emoji-regex "^10.3.0" queue "^6.0.1" - yoga-layout "^2.0.1" - -"@react-pdf/pdfkit@^3.0.1", "@react-pdf/pdfkit@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-3.2.0.tgz#d4a088b8cc61c35512dc885e67ff2c6058518bea" - integrity sha512-OBfCcnTC6RpD9uv9L2woF60Zj1uQxhLFzTBXTdcYE9URzPE/zqXIyzpXEA4Vf3TFbvBCgFE2RzJ2ZUS0asq7yA== - dependencies: - "@babel/runtime" "^7.20.13" - "@react-pdf/png-js" "^2.3.1" - browserify-zlib "^0.2.0" - crypto-js "^4.2.0" - fontkit "^2.0.2" - jay-peg "^1.0.2" - vite-compatible-readable-stream "^3.6.1" + yoga-layout "^3.2.1" "@react-pdf/pdfkit@^4.0.3": version "4.0.3" @@ -1481,13 +1578,6 @@ linebreak "^1.1.0" vite-compatible-readable-stream "^3.6.1" -"@react-pdf/png-js@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-2.3.1.tgz#5381d5443ac1134e98fc446fa1debb45950665bc" - integrity sha512-pEZ18I4t1vAUS4lmhvXPmXYP4PHeblpWP/pAlMMRkEyP7tdAeHUN7taQl9sf9OPq7YITMY3lWpYpJU6t4CZgZg== - dependencies: - browserify-zlib "^0.2.0" - "@react-pdf/png-js@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-3.0.0.tgz#c0b7dc7c77e36f0830e9b7bccca7ddd64ada1c5e" @@ -1495,62 +1585,53 @@ dependencies: browserify-zlib "^0.2.0" -"@react-pdf/primitives@^3.0.0", "@react-pdf/primitives@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-3.1.1.tgz#45a3253806fa61046f3821b8553bfee3cd848d14" - integrity sha512-miwjxLwTnO3IjoqkTVeTI+9CdyDggwekmSLhVCw+a/7FoQc+gF3J2dSKwsHvAcVFM0gvU8mzCeTofgw0zPDq0w== - "@react-pdf/primitives@^4.1.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-4.1.1.tgz#c7bfb7e83173661b6ec50ada4aba8dc9e94d0563" integrity sha512-IuhxYls1luJb7NUWy6q5avb1XrNaVj9bTNI40U9qGRuS6n7Hje/8H8Qi99Z9UKFV74bBP3DOf3L1wV2qZVgVrQ== -"@react-pdf/render@^3.2.1": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-3.5.0.tgz#1be1f7ca280473680ce4f11e90b697e2c635ad16" - integrity sha512-gFOpnyqCgJ6l7VzfJz6rG1i2S7iVSD8bUHDjPW9Mze8TmyksHzN2zBH3y7NbsQOw1wU6hN4NhRmslrsn+BRDPA== +"@react-pdf/reconciler@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@react-pdf/reconciler/-/reconciler-1.1.4.tgz#62395cf5c8786a1c3465e2cf6315562543b663c5" + integrity sha512-oTQDiR/t4Z/Guxac88IavpU2UgN7eR0RMI9DRKvKnvPz2DUasGjXfChAdMqDNmJJxxV26mMy9xQOUV2UU5/okg== + dependencies: + object-assign "^4.1.1" + scheduler "0.25.0-rc-603e6108-20241029" + +"@react-pdf/render@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-4.3.0.tgz#454542e87db70a3319323f8fbc5d1003db4e8c1e" + integrity sha512-MdWfWaqO6d7SZD75TZ2z5L35V+cHpyA43YNRlJNG0RJ7/MeVGDQv12y/BXOJgonZKkeEGdzM3EpAt9/g4E22WA== dependencies: "@babel/runtime" "^7.20.13" - "@react-pdf/fns" "2.2.1" - "@react-pdf/primitives" "^3.1.1" - "@react-pdf/textkit" "^4.4.1" - "@react-pdf/types" "^2.6.0" + "@react-pdf/fns" "3.1.2" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/textkit" "^6.0.0" + "@react-pdf/types" "^2.9.0" abs-svg-path "^0.1.1" color-string "^1.9.1" normalize-svg-path "^1.1.0" parse-svg-path "^0.1.2" svg-arc-to-cubic-bezier "^3.2.0" -"@react-pdf/renderer@3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@react-pdf/renderer/-/renderer-3.1.2.tgz#314823867f54ea3e6521756de8c047bf34c77040" - integrity sha512-r6L4PISzPDI59PU8e59cotTApiIZeUqkCy1ZluveJBGTsjE9qMhnKAtDFp1Ml3iKew0dyNkbgAOGAZOttiQxvQ== - dependencies: - "@babel/runtime" "^7.16.4" - "@react-pdf/font" "^2.3.1" - "@react-pdf/layout" "^3.3.0" - "@react-pdf/pdfkit" "^3.0.1" - "@react-pdf/primitives" "^3.0.0" - "@react-pdf/render" "^3.2.1" - "@react-pdf/types" "^2.2.0" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - queue "^6.0.1" - scheduler "^0.17.0" - -"@react-pdf/stylesheet@^4.3.0": +"@react-pdf/renderer@4.3.0": version "4.3.0" - resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-4.3.0.tgz#3b0ad11e8d304347c8de5caacaa708f16d4a0473" - integrity sha512-x7IVZOqRrUum9quuDeFXBveXwBht+z/6B0M+z4a4XjfSg1vZVvzoTl07Oa1yvQ/4yIC5yIkG2TSMWeKnDB+hrw== + resolved "https://registry.yarnpkg.com/@react-pdf/renderer/-/renderer-4.3.0.tgz#21a41e0cf0db703e3cc54f6eb7d6cd78b460de06" + integrity sha512-28gpA69fU9ZQrDzmd5xMJa1bDf8t0PT3ApUKBl2PUpoE/x4JlvCB5X66nMXrfFrgF2EZrA72zWQAkvbg7TE8zw== dependencies: "@babel/runtime" "^7.20.13" - "@react-pdf/fns" "2.2.1" - "@react-pdf/types" "^2.6.0" - color-string "^1.9.1" - hsl-to-hex "^1.0.0" - media-engine "^1.0.3" - postcss-value-parser "^4.1.0" + "@react-pdf/fns" "3.1.2" + "@react-pdf/font" "^4.0.2" + "@react-pdf/layout" "^4.4.0" + "@react-pdf/pdfkit" "^4.0.3" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/reconciler" "^1.1.4" + "@react-pdf/render" "^4.3.0" + "@react-pdf/types" "^2.9.0" + events "^3.3.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + queue "^6.0.1" "@react-pdf/stylesheet@^6.1.0": version "6.1.0" @@ -1564,18 +1645,17 @@ media-engine "^1.0.3" postcss-value-parser "^4.1.0" -"@react-pdf/textkit@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@react-pdf/textkit/-/textkit-4.4.1.tgz#b4e4181ea7d4269c54a1794d4022b55c5135f0e7" - integrity sha512-Jl9wdTqIvJ5pX+vAGz0EOhP7ut5Two9H6CzTKo/YYPeD79cM2yTXF3JzTERBC28y7LR0Waq9D2LHQjI+b/EYUQ== +"@react-pdf/textkit@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@react-pdf/textkit/-/textkit-6.0.0.tgz#87cd29aba8b0d81133dbbd61c52d8647fdf11616" + integrity sha512-fDt19KWaJRK/n2AaFoVm31hgGmpygmTV7LsHGJNGZkgzXcFyLsx+XUl63DTDPH3iqxj3xUX128t104GtOz8tTw== dependencies: - "@babel/runtime" "^7.20.13" - "@react-pdf/fns" "2.2.1" + "@react-pdf/fns" "3.1.2" bidi-js "^1.0.2" hyphen "^1.6.4" unicode-properties "^1.4.1" -"@react-pdf/types@^2.2.0", "@react-pdf/types@^2.6.0", "@react-pdf/types@^2.9.0": +"@react-pdf/types@^2.9.0": version "2.9.0" resolved "https://registry.yarnpkg.com/@react-pdf/types/-/types-2.9.0.tgz#a2721a847cb1ace2c31ca29b0303c7b51a2241c2" integrity sha512-ckj80vZLlvl9oYrQ4tovEaqKWP3O06Eb1D48/jQWbdwz1Yh7Y9v1cEmwlP8ET+a1Whp8xfdM0xduMexkuPANCQ== @@ -1584,15 +1664,15 @@ "@react-pdf/primitives" "^4.1.1" "@react-pdf/stylesheet" "^6.1.0" -"@reduxjs/toolkit@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.2.tgz#4cd153491118038e2eebcb63b2264e42a8a2d74c" - integrity sha512-5ZAZ7hwAKWSii5T6NTPmgIBUqyVdlDs+6JjThz6J6dmHLDm6zCzv2OjHIFAi3Vvs1qjmXU0bm6eBojukYXjVMQ== +"@reduxjs/toolkit@2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.6.1.tgz#532ef3d3f1656461b421f0ba0a4fa1628163a0c5" + integrity sha512-SSlIqZNYhqm/oMkXbtofwZSt9lrncblzo6YcZ9zoX+zLngRBrCOjK4lNLdkNucJF58RHOWrD9txT3bT3piH7Zw== dependencies: - immer "^9.0.16" - redux "^4.2.0" - redux-thunk "^2.4.2" - reselect "^4.1.7" + immer "^10.0.3" + redux "^5.0.1" + redux-thunk "^3.1.0" + reselect "^5.1.0" "@remirror/core-constants@3.0.0": version "3.0.0" @@ -1604,7 +1684,7 @@ resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@rushstack/eslint-patch@^1.1.3": +"@rushstack/eslint-patch@^1.10.3": version "1.11.0" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz#75dce8e972f90bba488e2b0cc677fb233aa357ab" integrity sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ== @@ -1614,120 +1694,145 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz#282046f03e886e352b2d5f5da5eb755e01457f3f" integrity sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA== -"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" - integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== +"@svgdotjs/svg.draggable.js@^3.0.4": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz#bca1065ec27b1dbae5a92a0558777ed964a395cb" + integrity sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA== + +"@svgdotjs/svg.filter.js@^3.0.8": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz#758e336b79e73a6797358d655b60842131a9a52b" + integrity sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw== + dependencies: + "@svgdotjs/svg.js" "^3.2.4" + +"@svgdotjs/svg.js@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz#4716be92a64c66b29921b63f7235fcfb953fb13a" + integrity sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg== + +"@svgdotjs/svg.resize.js@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz#732e4cae15d09ad3021adeac63bc9fad0dc7255a" + integrity sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA== + +"@svgdotjs/svg.select.js@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz#80a10409e6c73206218690eac5c9f94f8c8909b5" + integrity sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g== + +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== -"@svgr/babel-plugin-remove-jsx-attribute@*": +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== -"@svgr/babel-plugin-remove-jsx-empty-expression@*": +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== -"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" - integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== - -"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" - integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== - -"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" - integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== - -"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" - integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== - -"@svgr/babel-plugin-transform-svg-component@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" - integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== - -"@svgr/babel-preset@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" - integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" - "@svgr/babel-plugin-remove-jsx-attribute" "*" - "@svgr/babel-plugin-remove-jsx-empty-expression" "*" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" - "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" - "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" - "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" - "@svgr/babel-plugin-transform-svg-component" "^6.5.1" - -"@svgr/core@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" - integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== - dependencies: - "@babel/core" "^7.19.6" - "@svgr/babel-preset" "^6.5.1" - "@svgr/plugin-jsx" "^6.5.1" +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" camelcase "^6.2.0" - cosmiconfig "^7.0.1" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" -"@svgr/hast-util-to-babel-ast@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" - integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== dependencies: - "@babel/types" "^7.20.0" + "@babel/types" "^7.21.3" entities "^4.4.0" -"@svgr/plugin-jsx@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" - integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== +"@svgr/plugin-jsx@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== dependencies: - "@babel/core" "^7.19.6" - "@svgr/babel-preset" "^6.5.1" - "@svgr/hast-util-to-babel-ast" "^6.5.1" + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" svg-parser "^2.0.4" -"@svgr/plugin-svgo@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" - integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== +"@svgr/plugin-svgo@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" + integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== dependencies: - cosmiconfig "^7.0.1" - deepmerge "^4.2.2" - svgo "^2.8.0" + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" -"@svgr/webpack@6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" - integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== +"@svgr/webpack@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2" + integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== dependencies: - "@babel/core" "^7.19.6" - "@babel/plugin-transform-react-constant-elements" "^7.18.12" - "@babel/preset-env" "^7.19.4" + "@babel/core" "^7.21.3" + "@babel/plugin-transform-react-constant-elements" "^7.21.3" + "@babel/preset-env" "^7.20.2" "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.18.6" - "@svgr/core" "^6.5.1" - "@svgr/plugin-jsx" "^6.5.1" - "@svgr/plugin-svgo" "^6.5.1" + "@babel/preset-typescript" "^7.21.0" + "@svgr/core" "8.1.0" + "@svgr/plugin-jsx" "8.1.0" + "@svgr/plugin-svgo" "8.1.0" -"@swc/helpers@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" - integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== - dependencies: - tslib "^2.4.0" +"@swc/counter@0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== -"@swc/helpers@^0.5.12": +"@swc/helpers@0.5.15", "@swc/helpers@^0.5.12": version "0.5.15" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== @@ -2006,6 +2111,18 @@ dependencies: "@types/ms" "*" +"@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.0", "@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + "@types/hast@^2.0.0": version "2.3.10" resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" @@ -2013,6 +2130,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/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": version "3.3.6" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz#6bba74383cdab98e8db4e20ce5b4a6b98caed010" @@ -2021,6 +2145,11 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -2031,11 +2160,6 @@ resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== -"@types/lodash@^4.14.175": - version "4.17.16" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.16.tgz#94ae78fab4a38d73086e962d0b65c30d816bfb0a" - integrity sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g== - "@types/markdown-it@^14.0.0": version "14.1.2" resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" @@ -2044,12 +2168,12 @@ "@types/linkify-it" "^5" "@types/mdurl" "^2" -"@types/mdast@^3.0.0": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" - integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== +"@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" "^2" + "@types/unist" "*" "@types/mdurl@^2": version "2.0.0" @@ -2080,11 +2204,18 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== -"@types/prop-types@^15.0.0", "@types/prop-types@^15.7.14": +"@types/prop-types@^15.7.14": version "15.7.14" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== +"@types/quill@^1.3.10": + version "1.3.10" + resolved "https://registry.yarnpkg.com/@types/quill/-/quill-1.3.10.tgz#dc1f7b6587f7ee94bdf5291bc92289f6f0497613" + integrity sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw== + dependencies: + parchment "^1.1.2" + "@types/raf@^3.4.0": version "3.4.3" resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04" @@ -2100,7 +2231,7 @@ hoist-non-react-statics "^3.3.0" redux "^4.0.0" -"@types/react-transition-group@^4.4.11": +"@types/react-transition-group@^4.4.11", "@types/react-transition-group@^4.4.12": version "4.4.12" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== @@ -2112,70 +2243,117 @@ dependencies: csstype "^3.0.2" +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + +"@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": version "2.0.11" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== -"@types/use-sync-external-store@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" - integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== - "@types/use-sync-external-store@^0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc" integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== -"@typescript-eslint/parser@^5.42.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== +"@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz#3e48eb847924161843b092c87a9b65176b53782f" + integrity sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.26.1" + "@typescript-eslint/type-utils" "8.26.1" + "@typescript-eslint/utils" "8.26.1" + "@typescript-eslint/visitor-keys" "8.26.1" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^2.0.1" + +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.1.tgz#0e2f915a497519fc43f52cf2ecbfa607ff56f72e" + integrity sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ== dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/scope-manager" "8.26.1" + "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/typescript-estree" "8.26.1" + "@typescript-eslint/visitor-keys" "8.26.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== +"@typescript-eslint/scope-manager@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz#5e6ad0ac258ccf79462e91c3f43a3f1f7f31a6cc" + integrity sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg== + dependencies: + "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/visitor-keys" "8.26.1" + +"@typescript-eslint/type-utils@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz#462f0bae09de72ac6e8e1af2ebe588c23224d7f8" + integrity sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/typescript-estree" "8.26.1" + "@typescript-eslint/utils" "8.26.1" + debug "^4.3.4" + ts-api-utils "^2.0.1" -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== +"@typescript-eslint/types@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.26.1.tgz#d5978721670cff263348d5062773389231a64132" + integrity sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ== -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== +"@typescript-eslint/typescript-estree@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz#eb0e4ce31753683d83be53441a409fd5f0b34afd" + integrity sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/visitor-keys" "8.26.1" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.0.1" -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== +"@typescript-eslint/utils@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.26.1.tgz#54cc58469955f25577f659753b71a0e117a0539f" + integrity sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg== dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.26.1" + "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/typescript-estree" "8.26.1" + +"@typescript-eslint/visitor-keys@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz#c5267fcc82795cf10280363023837deacad2647c" + integrity sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg== + dependencies: + "@typescript-eslint/types" "8.26.1" + eslint-visitor-keys "^4.2.0" "@uiw/react-json-view@^2.0.0-alpha.30": version "2.0.0-alpha.30" resolved "https://registry.yarnpkg.com/@uiw/react-json-view/-/react-json-view-2.0.0-alpha.30.tgz#85db25b1a61cccc5c6c51350894515f8b7100e52" integrity sha512-ufvvirUQcITU9s4R12b7hn/t7ngLCYp1KbBxE+eAD35o3Ey+uxfKvgWmIwGFhV3hFXXxMJ8SHQKwl/ywNCHsDA== +"@ungap/structured-clone@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + "@unrs/rspack-resolver-binding-darwin-arm64@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.1.2.tgz#90b20c786402cafcea09aeb3587c627edd365995" @@ -2233,6 +2411,11 @@ resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.1.2.tgz#68ad3b231d092e979bf4174c73b593fe1332b906" integrity sha512-EYfya5HCQ/8Yfy7rvAAX2rGytu81+d/CIhNCbZfNKLQ690/qFsdEeTXRsMQW1afHoluMM50PsjPYu8ndy8fSQg== +"@yr/monotone-cubic-spline@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz#7272d89f8e4f6fb7a1600c28c378cc18d3b577b9" + integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA== + abs-svg-path@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" @@ -2243,12 +2426,12 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.9.0: +acorn@^8.14.0: version "8.14.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2258,11 +2441,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -2270,17 +2448,17 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -apexcharts@3.36.3: - version "3.36.3" - resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.36.3.tgz#debd58ded07163d51e00aeb15827d594e0cc8129" - integrity sha512-8/FXEs0ohXMff07Gv28XjhPwEJphIUdq2/wii/pcvi54Tw6z1mjrV8ydN8rlWi/ve8BAPBefJkLmRWv7UOBsLw== +apexcharts@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-4.5.0.tgz#efddb1a9b48e5add201df1549ac654412182e1f9" + integrity sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ== dependencies: - svg.draggable.js "^2.2.2" - svg.easing.js "^2.0.0" - svg.filter.js "^2.0.2" - svg.pathmorphing.js "^0.1.3" - svg.resize.js "^1.4.3" - svg.select.js "^3.0.1" + "@svgdotjs/svg.draggable.js" "^3.0.4" + "@svgdotjs/svg.filter.js" "^3.0.8" + "@svgdotjs/svg.js" "^3.2.4" + "@svgdotjs/svg.resize.js" "^2.0.2" + "@svgdotjs/svg.select.js" "^4.0.1" + "@yr/monotone-cubic-spline" "^1.0.3" argparse@^1.0.7: version "1.0.10" @@ -2319,11 +2497,6 @@ array-includes@^3.1.6, array-includes@^3.1.8: get-intrinsic "^1.2.4" is-string "^1.0.7" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - array.prototype.findlast@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" @@ -2413,7 +2586,7 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -attr-accept@^2.2.2: +attr-accept@^2.2.4: version "2.2.5" resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== @@ -2522,6 +2695,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" @@ -2606,12 +2786,7 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -can-use-dom@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" - integrity sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ== - -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001688: +caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001688: version "1.0.30001705" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001705.tgz#dc3510bcdef261444ca944b7be9c8d0bb7fafeef" integrity sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg== @@ -2630,6 +2805,11 @@ canvg@^3.0.6: stackblur-canvas "^2.0.0" svg-pathdata "^6.0.3" +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -2638,11 +2818,21 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + character-entities-legacy@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + character-entities@^1.0.0: version "1.2.4" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" @@ -2658,12 +2848,17 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + client-only@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== -clone@^2.1.2: +clone@^2.1.1, clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== @@ -2690,7 +2885,7 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.9.1: +color-string@^1.9.0, color-string@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== @@ -2698,6 +2893,14 @@ color-string@^1.9.1: color-name "^1.0.0" simple-swizzle "^0.2.2" +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2759,7 +2962,7 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: +cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== @@ -2770,19 +2973,22 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^8.1.3: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + crelt@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== -cross-fetch@^3.1.5: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" - integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== - dependencies: - node-fetch "^2.7.0" - -cross-spawn@^7.0.2: +cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -2810,26 +3016,34 @@ css-line-break@^2.1.0: dependencies: utrie "^1.0.2" -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== dependencies: boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" nth-check "^2.0.1" -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" + mdn-data "2.0.30" + source-map-js "^1.0.1" -css-what@^6.0.1: +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== @@ -2839,12 +3053,12 @@ cssjanus@^2.0.1: resolved "https://registry.yarnpkg.com/cssjanus/-/cssjanus-2.3.0.tgz#af91e639a34d8b241e5032824f3f1b7f8dd91557" integrity sha512-ZZXXn51SnxRxAZ6fdY7mBDPmA4OZd83q/J9Gdqz3YmE9TUq+9tZl+tdOnCi7PpNygI6PEkehj9rgifv5+W8a5A== -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== dependencies: - css-tree "^1.1.2" + css-tree "~2.2.0" csstype@^3.0.2, csstype@^3.1.3: version "3.1.3" @@ -2883,10 +3097,10 @@ data-view-byte-offset@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" -date-fns@2.29.3: - version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== +date-fns@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" + integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== debug@^3.2.7: version "3.2.7" @@ -2909,6 +3123,18 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" +deep-equal@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" + integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== + dependencies: + is-arguments "^1.1.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + object-is "^1.1.5" + object-keys "^1.1.1" + regexp.prototype.flags "^1.5.1" + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -2919,7 +3145,7 @@ deepmerge@^2.1.1: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== -deepmerge@^4.2.2: +deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -2952,23 +3178,23 @@ dequal@^2.0.0: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +detect-libc@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +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" + dfa@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== -diff@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -2976,13 +3202,6 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - dom-helpers@^5.0.1: version "5.2.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" @@ -2999,21 +3218,21 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" domelementtype@1, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1, domelementtype@^2.2.0: +domelementtype@^2.0.1, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -3025,17 +3244,19 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: - domelementtype "^2.2.0" + domelementtype "^2.3.0" -dompurify@^2.5.4: - version "2.5.8" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.8.tgz#2809d89d7e528dc7a071dea440d7376df676f824" - integrity sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw== +dompurify@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.4.tgz#af5a5a11407524431456cf18836c55d13441cd8e" + integrity sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg== + optionalDependencies: + "@types/trusted-types" "^2.0.7" domutils@^1.5.1: version "1.7.0" @@ -3045,14 +3266,22 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" @@ -3075,10 +3304,10 @@ electron-to-chromium@^1.5.73: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.119.tgz#4e105e419209b33e1c44b4d1b5fc6fb27fac0209" integrity sha512-Ku4NMzUjz3e3Vweh7PhApPrZSS4fyiCIbcIrG9eKrriYVLmbMepETR/v6SU7xPm98QTqMSYiCwfO89QNjXLkbQ== -eml-parse-js@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/eml-parse-js/-/eml-parse-js-1.1.15.tgz#fe32b0380b6123e62e870f9644df574507df662c" - integrity sha512-HOhS1y6dVvBHwqdqydJULRhNrwIYoWDOWYZVkvi8U5ByLfyb1eeGi9fTPfYuP9ooQUVwh42fTmCCHbOkd4lGSA== +eml-parse-js@^1.2.0-beta.0: + version "1.2.0-beta.0" + resolved "https://registry.yarnpkg.com/eml-parse-js/-/eml-parse-js-1.2.0-beta.0.tgz#0b024d38093b42cd29168f7f5771726390e4b1f3" + integrity sha512-fDA5OcT9DmU+6Qiv6Ki6/+fIjrZ97SE6KIB0PUK2r0nnRqBbnbaWm844l8SLTd4mc3rF0T3izc8E7E/qXFCthA== dependencies: "@sinonjs/text-encoding" "^0.7.2" js-base64 "^3.7.2" @@ -3108,7 +3337,7 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.4.0: +entities@^4.2.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -3252,20 +3481,21 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@13.1.6: - version "13.1.6" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.1.6.tgz#ab6894fe5b80080f1e9b9306d1c4b0003230620e" - integrity sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw== +eslint-config-next@15.2.2: + version "15.2.2" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-15.2.2.tgz#114ffec6851ced10fde7aa2f62c3d3a4371df514" + integrity sha512-g34RI7RFS4HybYFwGa/okj+8WZM+/fy+pEM+aqRQoVvM4gQhKrd4wIEddKmlZfWD75j8LTwB5zwkmNv3DceH1A== dependencies: - "@next/eslint-plugin-next" "13.1.6" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.42.0" + "@next/eslint-plugin-next" "15.2.2" + "@rushstack/eslint-patch" "^1.10.3" + "@typescript-eslint/eslint-plugin" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" eslint-import-resolver-node "^0.3.6" eslint-import-resolver-typescript "^3.5.2" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0" + eslint-plugin-import "^2.31.0" + eslint-plugin-jsx-a11y "^6.10.0" + eslint-plugin-react "^7.37.0" + eslint-plugin-react-hooks "^5.0.0" eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" @@ -3296,7 +3526,7 @@ eslint-module-utils@^2.12.0: dependencies: debug "^3.2.7" -eslint-plugin-import@^2.26.0: +eslint-plugin-import@^2.31.0: version "2.31.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== @@ -3321,7 +3551,7 @@ eslint-plugin-import@^2.26.0: string.prototype.trimend "^1.0.8" tsconfig-paths "^3.15.0" -eslint-plugin-jsx-a11y@^6.5.1: +eslint-plugin-jsx-a11y@^6.10.0: version "6.10.2" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== @@ -3342,12 +3572,12 @@ eslint-plugin-jsx-a11y@^6.5.1: safe-regex-test "^1.0.3" string.prototype.includes "^2.0.1" -eslint-plugin-react-hooks@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" - integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== +eslint-plugin-react-hooks@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3" + integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== -eslint-plugin-react@^7.31.7: +eslint-plugin-react@^7.37.0: version "7.37.4" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz#1b6c80b6175b6ae4b26055ae4d55d04c414c7181" integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ== @@ -3371,91 +3601,80 @@ eslint-plugin-react@^7.31.7: string.prototype.matchall "^4.0.12" string.prototype.repeat "^1.0.0" -eslint-scope@^7.1.1: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== +eslint-scope@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d" + integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: +eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.32.0: - version "8.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861" - integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ== - dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@9.22.0: + version "9.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.22.0.tgz#0760043809fbf836f582140345233984d613c552" + integrity sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.2" + "@eslint/config-helpers" "^0.1.0" + "@eslint/core" "^0.12.0" + "@eslint/eslintrc" "^3.3.0" + "@eslint/js" "9.22.0" + "@eslint/plugin-kit" "^0.2.7" + "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" chalk "^4.0.0" - cross-spawn "^7.0.2" + cross-spawn "^7.0.6" debug "^4.3.2" - doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^8.3.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" + file-entry-cache "^8.0.0" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + eslint-visitor-keys "^4.2.0" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: +esquery@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== @@ -3474,15 +3693,25 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +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== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventemitter2@~0.4.13: - version "0.4.14" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" - integrity sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ== +eventemitter3@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" + integrity sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== export-to-csv@^1.3.0: version "1.4.0" @@ -3496,7 +3725,7 @@ extend-shallow@^2.0.1: dependencies: is-extendable "^0.1.0" -extend@^3.0.0: +extend@^3.0.0, extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -3506,17 +3735,28 @@ fast-deep-equal@^3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.0.1.tgz#76532d5b8e49f6770fd464658628f9ed47eb5ac8" - integrity sha512-anEzYJ8VOA5iAMjDOVMTVMrUOXveDTMMk5x0E4p0nJ3VPoIOolF51AqYyE+UD0QIyggUwqppqH7XVA9lF3fdaQ== +fast-diff@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== fast-equals@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7" integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg== -fast-glob@^3.2.9: +fast-glob@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -3561,19 +3801,19 @@ fflate@^0.8.1: resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" -file-selector@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.6.0.tgz#fa0a8d9007b829504db4d07dd4de0310b65287dc" - integrity sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw== +file-selector@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-2.1.2.tgz#fe7c7ee9e550952dfbc863d73b14dc740d7de8b4" + integrity sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig== dependencies: - tslib "^2.4.0" + tslib "^2.7.0" fill-range@^7.1.1: version "7.1.1" @@ -3595,14 +3835,13 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" + keyv "^4.5.4" flatted@^3.2.9: version "3.3.3" @@ -3651,23 +3890,19 @@ format@^0.2.0: resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== -formik@2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" - integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== +formik@2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.6.tgz#4da75ca80f1a827ab35b08fd98d5a76e928c9686" + integrity sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g== dependencies: + "@types/hoist-non-react-statics" "^3.3.1" deepmerge "^2.1.1" hoist-non-react-statics "^3.3.0" lodash "^4.17.21" lodash-es "^4.17.21" react-fast-compare "^2.0.1" tiny-warning "^1.0.2" - tslib "^1.10.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + tslib "^2.0.0" function-bind@^1.1.2: version "1.1.2" @@ -3750,46 +3985,15 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== globalthis@^1.0.4: version "1.0.4" @@ -3799,19 +4003,7 @@ globalthis@^1.0.4: define-properties "^1.2.1" gopd "^1.0.1" -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -goober@^2.1.10: +goober@^2.1.16: version "2.1.16" resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.16.tgz#7d548eb9b83ff0988d102be71f271ca8f9c82a95" integrity sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g== @@ -3821,15 +4013,10 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== gray-matter@4.0.3: version "4.0.3" @@ -3889,10 +4076,33 @@ hast-util-parse-selector@^2.0.0: resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== -hast-util-whitespace@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" - integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.6" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== + 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 "^7.0.0" + space-separated-tokens "^2.0.0" + style-to-js "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + +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" @@ -3957,6 +4167,11 @@ html-tokenize@^2.0.0: readable-stream "~1.0.27-1" through2 "~0.4.1" +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== + html2canvas@^1.0.0-rc.5: version "1.4.1" resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" @@ -3982,24 +4197,24 @@ hyphen@^1.6.4: resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.10.6.tgz#0e779d280e696102b97d7e42f5ca5de2cc97e274" integrity sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw== -i18next@22.4.9: - version "22.4.9" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.4.9.tgz#98c8384c6bd41ff937da98b1e809ba03d3b41053" - integrity sha512-8gWMmUz460KJDQp/ob3MNUX84cVuDRY9PLFPnV8d+Qezz/6dkjxwOaH70xjrCNDO+JrUL25iXfAIN9wUkInNZw== +i18next@24.2.3: + version "24.2.3" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-24.2.3.tgz#3a05f72615cbd7c00d7e348667e2aabef1df753b" + integrity sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A== dependencies: - "@babel/runtime" "^7.20.6" + "@babel/runtime" "^7.26.10" -ignore@^5.2.0: +ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -immer@^9.0.16: - version "9.0.21" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== +immer@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" + integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== @@ -4012,23 +4227,15 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inline-style-parser@0.1.1: - version "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.1.0: version "1.1.0" @@ -4044,6 +4251,11 @@ is-alphabetical@^1.0.0: resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + is-alphanumerical@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" @@ -4052,6 +4264,22 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + +is-arguments@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" @@ -4097,11 +4325,6 @@ is-boolean-object@^1.2.1: call-bound "^1.0.3" has-tostringtag "^1.0.2" -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-bun-module@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.3.0.tgz#ea4d24fdebfcecc98e81bcbcb506827fee288760" @@ -4143,6 +4366,11 @@ is-decimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + is-extendable@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -4182,6 +4410,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" @@ -4200,17 +4433,12 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-plain-obj@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== -is-regex@^1.2.1: +is-regex@^1.1.4, is-regex@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== @@ -4320,7 +4548,7 @@ javascript-time-ago@^2.5.11: dependencies: relative-time-format "^1.1.6" -jay-peg@^1.0.2, jay-peg@^1.1.1: +jay-peg@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/jay-peg/-/jay-peg-1.1.1.tgz#fdf410b89fa7a295bf74424ffe4c9083dbe7c363" integrity sha512-D62KEuBxz/ip2gQKOEhk/mx14o7eiFRaU+VNNSP4MOiIkwb/D6B3G1Mfas7C/Fit8EsSV2/IWjZElx/Gs6A4ww== @@ -4332,11 +4560,6 @@ js-base64@^3.7.2: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4399,24 +4622,24 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jspdf-autotable@^3.8.2: - version "3.8.4" - resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.8.4.tgz#f7f05d45532ca94424a59cfa613309fff7c380a5" - integrity sha512-rSffGoBsJYX83iTRv8Ft7FhqfgEL2nLpGAIiqruEQQ3e4r0qdLFbPUB7N9HAle0I3XgpisvyW751VHCqKUVOgQ== +jspdf-autotable@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-5.0.2.tgz#bcf7aa2ff9eb46a2db6aa8c0407ab86c0a6c7b96" + integrity sha512-YNKeB7qmx3pxOLcNeoqAv3qTS7KuvVwkFe5AduCawpop3NOkBUtqDToxNc225MlNecxT4kP2Zy3z/y/yvGdXUQ== -jspdf@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-2.5.2.tgz#3c35bb1063ee3ad9428e6353852b0d685d1f923a" - integrity sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ== +jspdf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-3.0.0.tgz#078adb1620f13da2d9e0d901cb1205781aa591c9" + integrity sha512-QvuQZvOI8CjfjVgtajdL0ihrDYif1cN5gXiF9lb9Pd9JOpmocvnNyFO9sdiJ/8RA5Bu8zyGOUjJLj5kiku16ug== dependencies: - "@babel/runtime" "^7.23.2" + "@babel/runtime" "^7.26.0" atob "^2.1.2" btoa "^1.2.1" fflate "^0.8.1" optionalDependencies: canvg "^3.0.6" core-js "^3.6.0" - dompurify "^2.5.4" + dompurify "^3.2.4" html2canvas "^1.0.0-rc.5" "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: @@ -4429,7 +4652,7 @@ jspdf@^2.5.1: object.assign "^4.1.4" object.values "^1.1.6" -keyv@^4.5.3: +keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -4441,11 +4664,6 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kleur@^4.0.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - language-subtag-registry@^0.3.20: version "0.3.23" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" @@ -4468,7 +4686,7 @@ leaflet.markercluster@^1.5.3: resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz#9cdb52a4eab92671832e1ef9899669e80efc4056" integrity sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA== -leaflet@^1.8.0, leaflet@^1.9.4: +leaflet@^1.9.4: version "1.9.4" resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.9.4.tgz#23fae724e282fa25745aff82ca4d394748db7d8d" integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA== @@ -4528,23 +4746,30 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.21: +lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lodash@~2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" - integrity sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw== +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lowlight@^1.17.0: version "1.20.0" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" @@ -4587,58 +4812,120 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== -mdast-util-definitions@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" - integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - unist-util-visit "^4.0.0" - -mdast-util-from-markdown@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" - integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== +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" "^3.0.0" - "@types/unist" "^2.0.0" + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" decode-named-character-reference "^1.0.0" - mdast-util-to-string "^3.1.0" - micromark "^3.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-decode-string "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-stringify-position "^3.0.0" - uvu "^0.5.0" - -mdast-util-to-hast@^12.1.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" - integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== + 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-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/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-definitions "^5.0.0" - micromark-util-sanitize-uri "^1.1.0" - trim-lines "^3.0.0" - unist-util-generated "^2.0.0" - unist-util-position "^4.0.0" - unist-util-visit "^4.0.0" + "@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-to-string@^3.1.0: +mdast-util-mdx-jsx@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" - integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== + 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@^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@^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@^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@^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" "^3.0.0" + "@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" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== mdurl@^2.0.0: version "2.0.0" @@ -4660,206 +4947,206 @@ memoize-one@^6.0.0: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromark-core-commonmark@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" - integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== +micromark-core-commonmark@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== dependencies: decode-named-character-reference "^1.0.0" - micromark-factory-destination "^1.0.0" - micromark-factory-label "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-factory-title "^1.0.0" - micromark-factory-whitespace "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-html-tag-name "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - -micromark-factory-destination@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" - integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== + 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-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 "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" + 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" - integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== +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: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" + 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" - integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== +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 "^1.0.0" - micromark-util-types "^1.0.0" + 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" - integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== +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 "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" + 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" - integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== +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 "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" + 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" - integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== +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 "^1.0.0" - micromark-util-types "^1.0.0" + 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" - integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== +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 "^1.0.0" + 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" - integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== +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 "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" + 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" - integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== +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 "^1.0.0" - micromark-util-types "^1.0.0" + 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" - integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== +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 "^1.0.0" + 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" - integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== +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 "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-symbol "^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" - integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== +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 "^1.0.0" + 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" - integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== +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 "^1.0.0" + 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" - integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== +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 "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-symbol "^1.0.0" + 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" - integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== +micromark-util-subtokenize@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" + 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.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== -micromark@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" - integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== +micromark@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== dependencies: "@types/debug" "^4.0.0" debug "^4.0.0" decode-named-character-reference "^1.0.0" - micromark-core-commonmark "^1.0.1" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - -micromatch@^4.0.8: + 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" + +micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -4879,13 +5166,20 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6, minimist@~1.2.5: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -4896,11 +5190,6 @@ monaco-editor@^0.52.0: resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.52.2.tgz#53c75a6fcc6802684e99fd1b2700299857002205" integrity sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ== -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -4925,11 +5214,6 @@ multipipe@^1.0.2: duplexer2 "^0.1.2" object-assign "^4.1.0" -nanoclone@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" - integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== - nanoid@^3.3.6: version "3.3.10" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.10.tgz#7bc882237698ef787d5cbba109e3b0168ba6e7b1" @@ -4940,35 +5224,36 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next@^13.5.6: - version "13.5.8" - resolved "https://registry.yarnpkg.com/next/-/next-13.5.8.tgz#173883458bb80449111b01d2e62a33f9f9e7eacf" - integrity sha512-VlR7FaXpSibCs7ujOqStaDFTGSdX/NvWgLDcd47oiHUe8i63ZtNkX9intgcYAu/MxpaeEGinHaMB5mwxuzglKw== +next@^15.2.2: + version "15.2.2" + resolved "https://registry.yarnpkg.com/next/-/next-15.2.2.tgz#e3941a0e0e76cfe1880b57452807489e0546e3a2" + integrity sha512-dgp8Kcx5XZRjMw2KNwBtUzhngRaURPioxoNIVl5BOyJbhi9CUgEtKDO7fx5wh8Z8vOVX1nYZ9meawJoRrlASYA== dependencies: - "@next/env" "13.5.8" - "@swc/helpers" "0.5.2" + "@next/env" "15.2.2" + "@swc/counter" "0.1.3" + "@swc/helpers" "0.5.15" busboy "1.6.0" - caniuse-lite "^1.0.30001406" + caniuse-lite "^1.0.30001579" postcss "8.4.31" - styled-jsx "5.1.1" - watchpack "2.4.0" + styled-jsx "5.1.6" optionalDependencies: - "@next/swc-darwin-arm64" "13.5.8" - "@next/swc-darwin-x64" "13.5.8" - "@next/swc-linux-arm64-gnu" "13.5.8" - "@next/swc-linux-arm64-musl" "13.5.8" - "@next/swc-linux-x64-gnu" "13.5.8" - "@next/swc-linux-x64-musl" "13.5.8" - "@next/swc-win32-arm64-msvc" "13.5.8" - "@next/swc-win32-ia32-msvc" "13.5.8" - "@next/swc-win32-x64-msvc" "13.5.8" - -node-fetch@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" + "@next/swc-darwin-arm64" "15.2.2" + "@next/swc-darwin-x64" "15.2.2" + "@next/swc-linux-arm64-gnu" "15.2.2" + "@next/swc-linux-arm64-musl" "15.2.2" + "@next/swc-linux-x64-gnu" "15.2.2" + "@next/swc-linux-x64-musl" "15.2.2" + "@next/swc-win32-arm64-msvc" "15.2.2" + "@next/swc-win32-x64-msvc" "15.2.2" + sharp "^0.33.5" + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" node-releases@^2.0.19: version "2.0.19" @@ -5009,6 +5294,14 @@ object-inspect@^1.13.3: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -5070,14 +5363,7 @@ object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: define-properties "^1.2.1" es-object-atoms "^1.0.0" -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.9.1: +optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== @@ -5132,6 +5418,11 @@ papaparse@^5.4.1: resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.5.2.tgz#fb67cc5a03ba8930cb435dc4641a25d6804bd4d7" integrity sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA== +parchment@^1.1.2, parchment@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5" + integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -5151,7 +5442,20 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-json@^5.0.0: +parse-entities@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== + dependencies: + "@types/unist" "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -5171,11 +5475,6 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -5250,7 +5549,7 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -prop-types@15.8.1, prop-types@15.x, prop-types@^15.0.0, prop-types@^15.5.7, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@15.8.1, prop-types@15.x, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -5259,7 +5558,7 @@ prop-types@15.8.1, prop-types@15.x, prop-types@^15.0.0, prop-types@^15.5.7, prop object-assign "^4.1.1" react-is "^16.13.1" -property-expr@^2.0.4: +property-expr@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== @@ -5271,10 +5570,10 @@ property-information@^5.0.0: dependencies: xtend "^4.0.0" -property-information@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== +property-information@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.0.0.tgz#3508a6d6b0b8eb3ca6eb2c6623b164d2ed2ab112" + integrity sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg== prosemirror-changeset@^2.2.1: version "2.2.1" @@ -5457,14 +5756,26 @@ queue@^6.0.1: dependencies: inherits "~2.0.3" -quilljs@^0.18.1: - version "0.18.1" - resolved "https://registry.yarnpkg.com/quilljs/-/quilljs-0.18.1.tgz#7d7696ed95e0e1db79c439e5924b6eea5f67706c" - integrity sha512-VKaO7GNehgnH4LlFPx5ZAl+KFDoRVtboY0I6UUbYXUsPHP8kR80Tg/CFEYqrqrpCOGQr4OQ5Tjm813gV1DUyQw== +quill-delta@^3.6.2: + version "3.6.3" + resolved "https://registry.yarnpkg.com/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032" + integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg== + dependencies: + deep-equal "^1.0.1" + extend "^3.0.2" + fast-diff "1.1.2" + +quill@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8" + integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g== dependencies: - eventemitter2 "~0.4.13" - lodash "~2.4.1" - rich-text "~1.0.2" + clone "^2.1.1" + deep-equal "^1.0.1" + eventemitter3 "^2.0.3" + extend "^3.0.2" + parchment "^1.1.4" + quill-delta "^3.6.2" raf-schd@^4.0.2: version "4.0.3" @@ -5478,12 +5789,12 @@ raf@^3.4.1: dependencies: performance-now "^2.1.0" -react-apexcharts@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/react-apexcharts/-/react-apexcharts-1.4.0.tgz#e3619104b34750da67a2ca80289dc87085c2aa27" - integrity sha512-DrcMV4aAMrUG+n6412yzyATWEyCDWlpPBBhVbpzBC4PDeuYU6iF84SmExbck+jx5MUm4U5PM3/T307Mc3kzc9Q== +react-apexcharts@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/react-apexcharts/-/react-apexcharts-1.7.0.tgz#bbd08425674224adb27c9f2c62477d43bd5de539" + integrity sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA== dependencies: - prop-types "^15.5.7" + prop-types "^15.8.1" react-beautiful-dnd@13.1.1: version "13.1.1" @@ -5511,13 +5822,12 @@ react-copy-to-clipboard@^5.1.0: copy-to-clipboard "^3.3.1" prop-types "^15.8.1" -react-dom@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" + integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.25.0" react-draggable@^4.0.3, react-draggable@^4.4.5: version "4.4.6" @@ -5527,19 +5837,19 @@ react-draggable@^4.0.3, react-draggable@^4.4.5: clsx "^1.1.1" prop-types "^15.8.1" -react-dropzone@14.2.3: - version "14.2.3" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.2.3.tgz#0acab68308fda2d54d1273a1e626264e13d4e84b" - integrity sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug== +react-dropzone@14.3.8: + version "14.3.8" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.8.tgz#a7eab118f8a452fe3f8b162d64454e81ba830582" + integrity sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== dependencies: - attr-accept "^2.2.2" - file-selector "^0.6.0" + attr-accept "^2.2.4" + file-selector "^2.1.0" prop-types "^15.8.1" -react-error-boundary@^4.0.13: - version "4.1.2" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.1.2.tgz#bc750ad962edb8b135d6ae922c046051eb58f289" - integrity sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag== +react-error-boundary@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-5.0.0.tgz#6b6c7e075c922afb0283147e5b084efa44e68570" + integrity sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ== dependencies: "@babel/runtime" "^7.12.5" @@ -5565,12 +5875,13 @@ react-hook-form@^7.53.0: resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== -react-hot-toast@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.4.0.tgz#b91e7a4c1b6e3068fc599d3d83b4fb48668ae51d" - integrity sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA== +react-hot-toast@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.5.2.tgz#b55328966a26add56513e2dc1682e2cb4753c244" + integrity sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw== dependencies: - goober "^2.1.10" + csstype "^3.1.3" + goober "^2.1.16" react-html-parser@^2.0.2: version "2.0.2" @@ -5579,12 +5890,12 @@ react-html-parser@^2.0.2: dependencies: htmlparser2 "^3.9.0" -react-i18next@12.1.4: - version "12.1.4" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.1.4.tgz#be0a60d3a45acc4321909f8a4b8cde16518a2926" - integrity sha512-XQND7jYtgM7ht5PH3yIZljCRpAMTlH/zmngM9ZjToqa+0BR6xuu8c7QF0WIIOEjcMTB2S3iOfpN/xG/ZrAnO6g== +react-i18next@15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-15.4.1.tgz#33f3e89c2f6c68e2bfcbf9aa59986ad42fe78758" + integrity sha512-ahGab+IaSgZmNPYXdV1n+OYky95TGpFwnKRflX/16dY04DsYYKHtVLjeny7sBSCREEcoMbAgSkFiGLF5g5Oofw== dependencies: - "@babel/runtime" "^7.20.6" + "@babel/runtime" "^7.25.0" html-parse-stringify "^3.0.1" react-is@^16.13.1, react-is@^16.7.0: @@ -5597,53 +5908,44 @@ react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^18.0.0, react-is@^18.3.1: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - react-is@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0.tgz#d6669fd389ff022a9684f708cf6fa4962d1fea7a" integrity sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g== -react-leaflet-markercluster@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/react-leaflet-markercluster/-/react-leaflet-markercluster-4.2.1.tgz#74a9501925f5920585aa700ec3790c9cca48012a" - integrity sha512-lRJwCMGJVKXOKdP/dZIxszfHXjJaf8BpP2E+cNIYx5XxvqFj7NADG1HeK1nouNUgMcXVhqpZejiV6wPxwCibJw== +react-leaflet-markercluster@^5.0.0-rc.0: + version "5.0.0-rc.0" + resolved "https://registry.yarnpkg.com/react-leaflet-markercluster/-/react-leaflet-markercluster-5.0.0-rc.0.tgz#42b1b9786de565fe69ec95abc6ff3232713f5300" + integrity sha512-jWa4bPD5LfLV3Lid1RWgl+yKUuQtnqeYtJzzLb/fiRjvX+rtwzY8pMoUFuygqyxNrWxMTQlWKBHxkpI7Sxvu4Q== dependencies: - "@react-leaflet/core" "^2.0.0" - leaflet "^1.8.0" + "@react-leaflet/core" "^3.0.0" + leaflet "^1.9.4" leaflet.markercluster "^1.5.3" - react-leaflet "^4.0.0" + react-leaflet "^5.0.0" -react-leaflet@4.2.1, react-leaflet@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-4.2.1.tgz#c300e9eccaf15cb40757552e181200aa10b94780" - integrity sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q== +react-leaflet@5.0.0, react-leaflet@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-5.0.0.tgz#945d40bad13b69e8606278b19446b00bab57376a" + integrity sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw== dependencies: - "@react-leaflet/core" "^2.1.0" + "@react-leaflet/core" "^3.0.0" -react-markdown@8.0.5: - version "8.0.5" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.5.tgz#c9a70a33ca9aeeafb769c6582e7e38843b9d70ad" - integrity sha512-jGJolWWmOWAvzf+xMdB9zwStViODyyFQhNB/bwCerbBKmrTmgmA599CGiOlP58OId1IMoIRsA8UdI1Lod4zb5A== - dependencies: - "@types/hast" "^2.0.0" - "@types/prop-types" "^15.0.0" - "@types/unist" "^2.0.0" - comma-separated-tokens "^2.0.0" - hast-util-whitespace "^2.0.0" - prop-types "^15.0.0" - property-information "^6.0.0" - react-is "^18.0.0" - remark-parse "^10.0.0" - remark-rehype "^10.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^0.4.0" - unified "^10.0.0" - unist-util-visit "^4.0.0" - vfile "^5.0.0" +react-markdown@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-10.1.0.tgz#e22bc20faddbc07605c15284255653c0f3bad5ca" + integrity sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.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-media-hook@^0.5.0: version "0.5.0" @@ -5658,24 +5960,22 @@ react-papaparse@^4.4.0: "@types/papaparse" "^5.3.9" papaparse "^5.4.1" -react-quill@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/react-quill/-/react-quill-0.0.2.tgz#e16866aa2780e839eb1e728b6dce689564ec7d54" - integrity sha512-PeiHXZ63Sumh41OdovBQExXJH7B4UsJpyCW8CtRvXrNBa2RJXdciaJvTeb0x6pYQfqkoCYPT5EbUvEr0Z1tohg== +react-quill@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-quill/-/react-quill-2.0.0.tgz#67a0100f58f96a246af240c9fa6841b363b3e017" + integrity sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg== dependencies: - quilljs "^0.18.1" + "@types/quill" "^1.3.10" + lodash "^4.17.4" + quill "^1.3.7" -react-redux@8.0.5: - version "8.0.5" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.5.tgz#e5fb8331993a019b8aaf2e167a93d10af469c7bd" - integrity sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw== +react-redux@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5" + integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g== dependencies: - "@babel/runtime" "^7.12.1" - "@types/hoist-non-react-statics" "^3.3.1" - "@types/use-sync-external-store" "^0.0.3" - hoist-non-react-statics "^3.3.2" - react-is "^18.0.0" - use-sync-external-store "^1.0.0" + "@types/use-sync-external-store" "^0.0.6" + use-sync-external-store "^1.4.0" react-redux@^7.2.0: version "7.2.9" @@ -5736,12 +6036,10 @@ react-window@^1.8.10: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" +react@19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" + integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== readable-stream@^2.0.2: version "2.3.8" @@ -5785,12 +6083,17 @@ redux-persist@^6.0.0: resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== -redux-thunk@2.4.2, redux-thunk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" - integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== +redux-thunk@3.1.0, redux-thunk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" + integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== + +redux@5.0.1, redux@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== -redux@4.2.1, redux@^4.0.0, redux@^4.0.4, redux@^4.2.0: +redux@^4.0.0, redux@^4.0.4: version "4.2.1" resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== @@ -5849,7 +6152,7 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.3: +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3: version "1.5.4" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== @@ -5861,11 +6164,6 @@ regexp.prototype.flags@^1.5.3: gopd "^1.2.0" set-function-name "^2.0.2" -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - regexpu-core@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" @@ -5895,24 +6193,26 @@ relative-time-format@^1.1.6: resolved "https://registry.yarnpkg.com/relative-time-format/-/relative-time-format-1.1.6.tgz#724a5fbc3794b8e0471b6b61419af2ce699eb9f1" integrity sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ== -remark-parse@^10.0.0: - version "10.0.2" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262" - integrity sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw== +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" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - unified "^10.0.0" + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" -remark-rehype@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" - integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== +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" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-to-hast "^12.1.0" - unified "^10.0.0" + "@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" remove-accents@0.5.0: version "0.5.0" @@ -5924,10 +6224,10 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -reselect@^4.1.7: - version "4.1.8" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== +reselect@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== resize-observer-polyfill@^1.5.1: version "1.5.1" @@ -5977,20 +6277,6 @@ rgbcolor@^1.0.1: resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw== -rich-text@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/rich-text/-/rich-text-1.0.3.tgz#ac4d825f2fca123d8282842ed55fc57fc7b9c710" - integrity sha512-L+Mi0fBH4/TBGH68XZqUXdUr5Ze+ViYkrKuwEvCpeyB1Blbp4CLO4LyYleutTNybujCMQfcmivaNrE3YLrEUgg== - dependencies: - fast-diff "~1.0.0" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rope-sequence@^1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" @@ -6020,13 +6306,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -sade@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - safe-array-concat@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" @@ -6065,20 +6344,15 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" -scheduler@^0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" - integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" +scheduler@0.25.0-rc-603e6108-20241029: + version "0.25.0-rc-603e6108-20241029" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-603e6108-20241029.tgz#684dd96647e104d23e0d29a37f18937daf82df19" + integrity sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA== -scheduler@^0.23.0: - version "0.23.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" - integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== - dependencies: - loose-envify "^1.1.0" +scheduler@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" + integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== section-matter@^1.0.0: version "1.0.0" @@ -6093,7 +6367,7 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.7, semver@^7.6.3: +semver@^7.6.0, semver@^7.6.3: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== @@ -6129,6 +6403,35 @@ set-proto@^1.0.0: es-errors "^1.3.0" es-object-atoms "^1.0.0" +sharp@^0.33.5: + version "0.33.5" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e" + integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== + dependencies: + color "^4.2.3" + detect-libc "^2.0.3" + semver "^7.6.3" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.33.5" + "@img/sharp-darwin-x64" "0.33.5" + "@img/sharp-libvips-darwin-arm64" "1.0.4" + "@img/sharp-libvips-darwin-x64" "1.0.4" + "@img/sharp-libvips-linux-arm" "1.0.5" + "@img/sharp-libvips-linux-arm64" "1.0.4" + "@img/sharp-libvips-linux-s390x" "1.0.4" + "@img/sharp-libvips-linux-x64" "1.0.4" + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + "@img/sharp-linux-arm" "0.33.5" + "@img/sharp-linux-arm64" "0.33.5" + "@img/sharp-linux-s390x" "0.33.5" + "@img/sharp-linux-x64" "0.33.5" + "@img/sharp-linuxmusl-arm64" "0.33.5" + "@img/sharp-linuxmusl-x64" "0.33.5" + "@img/sharp-wasm32" "0.33.5" + "@img/sharp-win32-ia32" "0.33.5" + "@img/sharp-win32-x64" "0.33.5" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -6188,34 +6491,36 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -simplebar-core@^1.2.0: +simplebar-core@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/simplebar-core/-/simplebar-core-1.3.0.tgz#166cfbb4c1a2dc0a60833fe8e1fd590cdb32158b" integrity sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA== dependencies: lodash "^4.17.21" -simplebar-react@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-3.2.0.tgz#0316c0220f85f6f29d7e7c4830fdd98aca294ec0" - integrity sha512-rsKUAAARhZ/w5f/uoUf3PWjNVQN7CsFrOPMqJSsXtM2lTyXmiN5femuPLHeY0+95EF2QcQigKQABq9A2a6EvJg== +simplebar-react@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-3.3.0.tgz#7170f29f0ea785c6881db81a8447c408fbc9056e" + integrity sha512-sxzy+xRuU41He4tT4QLGYutchtOuye/xxVeq7xhyOiwMiHNK1ZpvbOTyy+7P0i7gfpXLGTJ8Bep8+4Mhdgtz/g== dependencies: - simplebar-core "^1.2.0" + simplebar-core "^1.3.0" -simplebar@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-6.2.0.tgz#a7c1494b31eadad0622b93d455edd6a40e08f6db" - integrity sha512-KiXO9hGg0wK7Oh5zbcdHKEPGlyem3IWA27HLKqolrhpToP0SA8iLf5tbXFBS4qRH4QTXiUn87wh9zCd4GnCZeQ== +simplebar@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-6.3.0.tgz#5581558e532d9ecf6e42faef932d81537f94d3ca" + integrity sha512-SQJfKSvUPJxlOhYCpswEn5ke5WQGsgDZNmpScWL+MKXgYpCDTq1bGiv6uWXwSHMYTkMco32fDUL35sVwCMmzCw== dependencies: - can-use-dom "^0.1.0" - simplebar-core "^1.2.0" + simplebar-core "^1.3.0" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" -source-map-js@^1.0.2: +source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== @@ -6225,11 +6530,6 @@ source-map@^0.5.7: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - space-separated-tokens@^1.0.0: version "1.1.5" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" @@ -6250,11 +6550,6 @@ stable-hash@^0.0.5: resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - stackblur-canvas@^2.0.0: version "2.7.0" resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6" @@ -6357,12 +6652,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.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== +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== dependencies: - ansi-regex "^5.0.1" + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" strip-bom-string@^1.0.0: version "1.0.0" @@ -6374,22 +6670,29 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-to-object@^0.4.0: - version "0.4.4" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec" - integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== +style-to-js@^1.0.0: + version "1.1.16" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.16.tgz#e6bd6cd29e250bcf8fa5e6591d07ced7575dbe7a" + integrity sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw== dependencies: - inline-style-parser "0.1.1" + style-to-object "1.0.8" -styled-jsx@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" - integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== +style-to-object@1.0.8: + 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" + +styled-jsx@5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" + integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== dependencies: client-only "0.0.1" @@ -6400,11 +6703,6 @@ stylis-plugin-rtl@2.1.1: dependencies: cssjanus "^2.0.1" -stylis@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" - integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== - stylis@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" @@ -6437,73 +6735,18 @@ svg-pathdata@^6.0.3: resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac" integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw== -svg.draggable.js@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz#c514a2f1405efb6f0263e7958f5b68fce50603ba" - integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw== - dependencies: - svg.js "^2.0.1" - -svg.easing.js@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/svg.easing.js/-/svg.easing.js-2.0.0.tgz#8aa9946b0a8e27857a5c40a10eba4091e5691f12" - integrity sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA== - dependencies: - svg.js ">=2.3.x" - -svg.filter.js@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/svg.filter.js/-/svg.filter.js-2.0.2.tgz#91008e151389dd9230779fcbe6e2c9a362d1c203" - integrity sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw== - dependencies: - svg.js "^2.2.5" - -svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.7.1.tgz#eb977ed4737001eab859949b4a398ee1bb79948d" - integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA== - -svg.pathmorphing.js@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz#c25718a1cc7c36e852ecabc380e758ac09bb2b65" - integrity sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww== - dependencies: - svg.js "^2.4.0" - -svg.resize.js@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/svg.resize.js/-/svg.resize.js-1.4.3.tgz#885abd248e0cd205b36b973c4b578b9a36f23332" - integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw== - dependencies: - svg.js "^2.6.5" - svg.select.js "^2.1.2" - -svg.select.js@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-2.1.2.tgz#e41ce13b1acff43a7441f9f8be87a2319c87be73" - integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ== - dependencies: - svg.js "^2.2.5" - -svg.select.js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-3.0.1.tgz#a4198e359f3825739226415f82176a90ea5cc917" - integrity sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw== - dependencies: - svg.js "^2.6.5" - -svgo@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== +svgo@^3.0.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== dependencies: "@trysound/sax" "0.2.0" commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" picocolors "^1.0.0" - stable "^0.1.8" text-segmentation@^1.0.3: version "1.0.3" @@ -6512,11 +6755,6 @@ text-segmentation@^1.0.3: dependencies: utrie "^1.0.2" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - through2@~0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" @@ -6530,6 +6768,11 @@ through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +tiny-case@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" + integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== + tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" @@ -6577,11 +6820,6 @@ toposort@^2.0.2: resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - trim-lines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" @@ -6592,6 +6830,11 @@ trough@^2.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== +ts-api-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.1.tgz#660729385b625b939aaa58054f45c058f33f10cd" + integrity sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w== + tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -6602,12 +6845,7 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.10.0, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.4.0, tslib@^2.8.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -6621,13 +6859,6 @@ tss-react@^4.8.3: "@emotion/serialize" "*" "@emotion/utils" "*" -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -6635,10 +6866,10 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== type-fest@^3.12.0: version "3.13.1" @@ -6690,10 +6921,10 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typescript@4.9.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +typescript@5.8.2: + version "5.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" + integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== uc.micro@^2.0.0, uc.micro@^2.1.0: version "2.1.0" @@ -6754,61 +6985,56 @@ unicode-trie@^2.0.0: pako "^0.2.5" tiny-inflate "^1.0.0" -unified@^10.0.0: - version "10.1.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" - integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== +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" "^2.0.0" + "@types/unist" "^3.0.0" bail "^2.0.0" + devlop "^1.0.0" extend "^3.0.0" - is-buffer "^2.0.0" is-plain-obj "^4.0.0" trough "^2.0.0" - vfile "^5.0.0" - -unist-util-generated@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" - integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== + vfile "^6.0.0" -unist-util-is@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" - integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== +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" "^2.0.0" + "@types/unist" "^3.0.0" -unist-util-position@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" - integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== +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" "^2.0.0" + "@types/unist" "^3.0.0" -unist-util-stringify-position@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" - integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== +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" "^2.0.0" + "@types/unist" "^3.0.0" -unist-util-visit-parents@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" - integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== +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" "^2.0.0" - unist-util-is "^5.0.0" + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" -unist-util-visit@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" - integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== +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" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.1.1" + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" update-browserslist-db@^1.1.1: version "1.1.3" @@ -6830,7 +7056,7 @@ use-memo-one@^1.1.1: resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== -use-sync-external-store@^1, use-sync-external-store@^1.0.0: +use-sync-external-store@^1, use-sync-external-store@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== @@ -6847,33 +7073,21 @@ utrie@^1.0.2: dependencies: base64-arraybuffer "^1.0.2" -uvu@^0.5.0: - version "0.5.6" - resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" - integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== - dependencies: - dequal "^2.0.0" - diff "^5.0.0" - kleur "^4.0.3" - sade "^1.7.3" - -vfile-message@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" - integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== +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" "^2.0.0" - unist-util-stringify-position "^3.0.0" + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" -vfile@^5.0.0: - version "5.3.7" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" - integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== +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" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" vite-compatible-readable-stream@^3.6.1: version "3.6.1" @@ -6894,27 +7108,6 @@ w3c-keyname@^2.2.0: resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== -watchpack@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" @@ -6980,11 +7173,6 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -7012,20 +7200,22 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yoga-layout@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/yoga-layout/-/yoga-layout-2.0.1.tgz#4bc686abe2464f977866650ddccc1dbcf9f0d03c" - integrity sha512-tT/oChyDXelLo2A+UVnlW9GU7CsvFMaEnd9kVFsaiCQonFAXd3xrHhkLYu+suwwosrAEQ746xBU+HvYtm1Zs2Q== +yoga-layout@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/yoga-layout/-/yoga-layout-3.2.1.tgz#d2d1ba06f0e81c2eb650c3e5ad8b0b4adde1e843" + integrity sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ== -yup@0.32.11: - version "0.32.11" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.11.tgz#d67fb83eefa4698607982e63f7ca4c5ed3cf18c5" - integrity sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg== +yup@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.6.1.tgz#8defcff9daaf9feac178029c0e13b616563ada4b" + integrity sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA== dependencies: - "@babel/runtime" "^7.15.4" - "@types/lodash" "^4.14.175" - lodash "^4.17.21" - lodash-es "^4.17.21" - nanoclone "^0.2.1" - property-expr "^2.0.4" + property-expr "^2.0.5" + tiny-case "^1.0.3" toposort "^2.0.2" + type-fest "^2.19.0" + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From a59959bd22974f2746b386bdce5d01080bb1f54c Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 16 Mar 2025 21:01:51 -0400 Subject: [PATCH 0396/1184] fix: next export error --- next.config.js | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/next.config.js b/next.config.js index 32f5eb3bea26..081af64c7d63 100644 --- a/next.config.js +++ b/next.config.js @@ -14,6 +14,7 @@ const config = { async redirects() { return []; }, + output: "export", }; module.exports = config; diff --git a/package.json b/package.json index 5abd1be55721..a5f21601d1fc 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "scripts": { "dev": "next -H 127.0.0.1", - "build": "next build && next export", + "build": "next build", "start": "next start", "export": "next export", "lint": "next lint", From 86ebcfe00a70cbb4def2cc4063ba6525096a191a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 16 Mar 2025 21:20:00 -0400 Subject: [PATCH 0397/1184] prevent refetches when changing pages for some calls --- src/api/ApiCall.jsx | 8 +++++++- src/components/CippComponents/CippTenantSelector.jsx | 3 +++ src/layouts/index.js | 7 +++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/api/ApiCall.jsx b/src/api/ApiCall.jsx index e7feb6f5748f..936654ff16fd 100644 --- a/src/api/ApiCall.jsx +++ b/src/api/ApiCall.jsx @@ -1,4 +1,4 @@ -import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { keepPreviousData, useInfiniteQuery, useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import axios, { isAxiosError } from "axios"; import { useDispatch } from "react-redux"; import { showToast } from "../store/toasts"; @@ -17,6 +17,9 @@ export function ApiGetCall(props) { onResult, staleTime = 600000, // 10 minutes refetchOnWindowFocus = false, + refetchOnMount = true, + refetchOnReconnect = true, + keepPreviousData = false, } = props; const queryClient = useQueryClient(); const dispatch = useDispatch(); @@ -102,6 +105,9 @@ export function ApiGetCall(props) { }, staleTime: staleTime, refetchOnWindowFocus: refetchOnWindowFocus, + refetchOnMount: refetchOnMount, + refetchOnReconnect: refetchOnReconnect, + keepPreviousData: keepPreviousData, retry: retryFn, }); return queryInfo; diff --git a/src/components/CippComponents/CippTenantSelector.jsx b/src/components/CippComponents/CippTenantSelector.jsx index 67b66eded8ca..c21f75c58525 100644 --- a/src/components/CippComponents/CippTenantSelector.jsx +++ b/src/components/CippComponents/CippTenantSelector.jsx @@ -26,6 +26,9 @@ export const CippTenantSelector = (props) => { url: "/api/listTenants", data: { AllTenantSelector: true }, queryKey: "TenantSelector", + refetchOnMount: false, + refetchOnReconnect: false, + keepPreviousData: true, }); const [currentTenant, setSelectedTenant] = useState(null); diff --git a/src/layouts/index.js b/src/layouts/index.js index c2f49483f74a..ddd1b2460645 100644 --- a/src/layouts/index.js +++ b/src/layouts/index.js @@ -15,6 +15,7 @@ import { CippImageCard } from "../components/CippCards/CippImageCard"; import Page from "../pages/onboarding"; import { useDialog } from "../hooks/use-dialog"; import { nativeMenuItems } from "/src/layouts/config"; +import { keepPreviousData } from "@tanstack/react-query"; const SIDE_NAV_WIDTH = 270; const SIDE_NAV_PINNED_WIDTH = 50; @@ -131,6 +132,9 @@ export const Layout = (props) => { const userSettingsAPI = ApiGetCall({ url: "/api/ListUserSettings", queryKey: "userSettings", + refetchOnMount: false, + refetchOnReconnect: false, + keepPreviousData: true, }); useEffect(() => { @@ -171,6 +175,9 @@ export const Layout = (props) => { url: `/api/GetCippAlerts?localversion=${version?.data?.version}`, queryKey: "alertsDashboard", waiting: false, + refetchOnMount: false, + refetchOnReconnect: false, + keepPreviousData: true, }); useEffect(() => { From 9c16743593f87de97463d45f02cee73cfa9a22fb Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 16 Mar 2025 23:57:07 -0400 Subject: [PATCH 0398/1184] Update _app.js --- src/pages/_app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/_app.js b/src/pages/_app.js index 25c7d4dfe524..f245fcf6656d 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -140,7 +140,9 @@ const App = (props) => { {settings.isInitialized && settings?.showDevtools === true ? ( - + ) : null} From 46c09d8214e00e3f2f3cde906ccefc7c74ad954a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 17 Mar 2025 00:15:31 -0400 Subject: [PATCH 0399/1184] Update _app.js --- src/pages/_app.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/pages/_app.js b/src/pages/_app.js index f245fcf6656d..bf72bf37c6a3 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -134,15 +134,17 @@ const App = (props) => { } - position={{ bottom: 16, right: 16 }} + position={{ + bottom: 12, + right: + settings.isInitialized && settings?.showDevtools === true ? 60 : 12, + }} /> {settings.isInitialized && settings?.showDevtools === true ? ( - + ) : null} From dd56f992a7cf5de554beaeca3e772c3e74d232e6 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 17 Mar 2025 01:06:50 -0400 Subject: [PATCH 0400/1184] fix: permission builder issues --- .../CippAppPermissionBuilder.jsx | 58 ++++++++++--------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/src/components/CippComponents/CippAppPermissionBuilder.jsx b/src/components/CippComponents/CippAppPermissionBuilder.jsx index 1b224e5bfd6c..2c480f2e1c9f 100644 --- a/src/components/CippComponents/CippAppPermissionBuilder.jsx +++ b/src/components/CippComponents/CippAppPermissionBuilder.jsx @@ -351,35 +351,34 @@ const CippAppPermissionBuilder = ({ initialAppIds = []; } - if (selectedApp.length == 0 && initialAppIds.length == 0) { + if (selectedApp.length === 0 && initialAppIds.length === 0) { var microsoftGraph = servicePrincipals?.Results?.find( (sp) => sp?.appId === "00000003-0000-0000-c000-000000000000" ); - setSelectedApp([microsoftGraph]); - setNewPermissions({ - Permissions: { - "00000003-0000-0000-c000-000000000000": { - applicationPermissions: [], - delegatedPermissions: [], + if (microsoftGraph) { + setSelectedApp([microsoftGraph]); // Ensure this does not trigger a loop + setNewPermissions({ + Permissions: { + "00000003-0000-0000-c000-000000000000": { + applicationPermissions: [], + delegatedPermissions: [], + }, }, - }, - }); - } else if (currentPermissions !== initialPermissions) { - setSelectedApp([]); + }); + } + } else if (!_.isEqual(currentPermissions, initialPermissions)) { + setSelectedApp([]); // Avoid redundant updates setNewPermissions(currentPermissions); setInitialPermissions(currentPermissions); setPermissionsImported(false); - } else if (initialAppIds.length > 0 && permissionsImported == false) { + } else if (initialAppIds.length > 0 && !permissionsImported) { const newApps = servicePrincipals?.Results?.filter((sp) => initialAppIds.includes(sp.appId) )?.sort((a, b) => a.displayName.localeCompare(b.displayName)); - setSelectedApp((prevApps) => { - if (JSON.stringify(prevApps) !== JSON.stringify(newApps)) { - return newApps; - } - return prevApps; - }); + if (!_.isEqual(selectedApp, newApps)) { + setSelectedApp(newApps); // Prevent unnecessary updates + } setNewPermissions(currentPermissions); setInitialPermissions(currentPermissions); @@ -431,6 +430,8 @@ const CippAppPermissionBuilder = ({ waiting: true, }); + console.log(spInfo); + const currentAppPermission = useWatch({ control: formControl.control, name: `Permissions.${servicePrincipal.appId}.applicationPermissions`, @@ -442,7 +443,7 @@ const CippAppPermissionBuilder = ({ useEffect(() => { if (spInfoSuccess && !spInitialized) { - if (appTable.length === 0) { + if (appTable !== undefined && appTable?.length === 0) { setAppTable( spPermissions?.applicationPermissions ?.sort((a, b) => a.value.localeCompare(b.value)) @@ -454,7 +455,7 @@ const CippAppPermissionBuilder = ({ })) ); } - if (delegatedTable.length === 0) { + if (delegatedTable !== undefined && delegatedTable.length === 0) { setDelegatedTable( spPermissions?.delegatedPermissions ?.sort((a, b) => a.value.localeCompare(b.value)) @@ -469,10 +470,10 @@ const CippAppPermissionBuilder = ({ } setSpInitialized(true); } - }, [spInitialized, spInfoSuccess, appTable?.length, delegatedTable?.length]); + }, [spInitialized, spInfoSuccess, appTable, delegatedTable]); useEffect(() => { - if (spInfoSuccess) { + if (spInfoSuccess && appTable !== undefined && delegatedTable !== undefined) { var appRoles = appTable?.map((perm) => perm.id).sort(); var delegatedPermissions = delegatedTable?.map((perm) => perm.id).sort(); var originalAppRoles = spPermissions?.applicationPermissions.map((perm) => perm.id).sort(); @@ -546,6 +547,7 @@ const CippAppPermissionBuilder = ({ return ( <> + {spInfoFetching && } {servicePrincipal && spInfoSuccess && ( <> @@ -603,7 +605,7 @@ const CippAppPermissionBuilder = ({ - {spLoading && } + {spLoading && } {spSuccess && ( <> @@ -1025,6 +1027,9 @@ const CippAppPermissionBuilder = ({ ))} + + + @@ -1046,9 +1051,6 @@ const CippAppPermissionBuilder = ({ Save - - - )} From 8ad35c87ad922d13c28756e20eb521f83929c6d4 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 17 Mar 2025 01:30:06 -0400 Subject: [PATCH 0401/1184] pretty up copy to clipboard --- .../CippAppPermissionBuilder.jsx | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/components/CippComponents/CippAppPermissionBuilder.jsx b/src/components/CippComponents/CippAppPermissionBuilder.jsx index 2c480f2e1c9f..e31bf1f88068 100644 --- a/src/components/CippComponents/CippAppPermissionBuilder.jsx +++ b/src/components/CippComponents/CippAppPermissionBuilder.jsx @@ -23,6 +23,7 @@ import { CippDataTable } from "../CippTable/CippDataTable"; import { PlusIcon, ShieldCheckIcon, WrenchIcon } from "@heroicons/react/24/outline"; import CippFormComponent from "./CippFormComponent"; import { + Apps, Delete, Download, Error, @@ -399,18 +400,7 @@ const CippAppPermissionBuilder = ({ var delegatedPermissions = newPermissions?.Permissions[appId]?.delegatedPermissions; var counts = `${appRoles?.length ?? 0}/${delegatedPermissions?.length ?? 0}`; - return ( - - - - - {counts} - - ); + return counts; }; const ApiPermissionRow = ({ servicePrincipal = null, spPermissions, formControl }) => { @@ -980,13 +970,37 @@ const CippAppPermissionBuilder = ({ sx={{ width: "100%", mr: 1 }} > {sp.displayName} - + + + + + + } + onClick={(e) => { + e.stopPropagation(); + navigator.clipboard.writeText(sp.appId); + }} + /> + + + + } /> Date: Mon, 17 Mar 2025 11:32:39 -0400 Subject: [PATCH 0402/1184] permission builder tweaks --- .../CippAppPermissionBuilder.jsx | 81 +++++++++++-------- .../cipp/super-admin/sam-app-permissions.js | 1 + 2 files changed, 50 insertions(+), 32 deletions(-) diff --git a/src/components/CippComponents/CippAppPermissionBuilder.jsx b/src/components/CippComponents/CippAppPermissionBuilder.jsx index e31bf1f88068..19ccb624ec3f 100644 --- a/src/components/CippComponents/CippAppPermissionBuilder.jsx +++ b/src/components/CippComponents/CippAppPermissionBuilder.jsx @@ -6,7 +6,6 @@ import { AccordionSummary, AccordionDetails, Tooltip, - Grid, Alert, Skeleton, IconButton, @@ -17,7 +16,7 @@ import { Tabs, Tab, } from "@mui/material"; - +import { Grid } from "@mui/system"; import { ApiGetCall, ApiPostCall } from "/src/api/ApiCall"; import { CippDataTable } from "../CippTable/CippDataTable"; import { PlusIcon, ShieldCheckIcon, WrenchIcon } from "@heroicons/react/24/outline"; @@ -29,6 +28,7 @@ import { Error, ExpandMore, Save, + Sync, TaskAlt, Undo, Upload, @@ -76,6 +76,7 @@ const CippAppPermissionBuilder = ({ isSuccess: spSuccess, isFetching: spFetching, isLoading: spLoading, + refetch: refetchServicePrincipals, } = ApiGetCall({ url: "/api/ExecServicePrincipals", queryKey: "execServicePrincipals", @@ -366,6 +367,7 @@ const CippAppPermissionBuilder = ({ }, }, }); + setExpanded("00000003-0000-0000-c000-000000000000"); // Automatically expand Microsoft Graph } } else if (!_.isEqual(currentPermissions, initialPermissions)) { setSelectedApp([]); // Avoid redundant updates @@ -384,6 +386,11 @@ const CippAppPermissionBuilder = ({ setNewPermissions(currentPermissions); setInitialPermissions(currentPermissions); setPermissionsImported(true); + + // Automatically expand if only one service principal exists + if (newApps.length === 1) { + setExpanded(newApps[0].appId); + } } } }, [ @@ -560,7 +567,7 @@ const CippAppPermissionBuilder = ({ <> - + )} - + - + - - {servicePrincipals?.Metadata?.Success && ( - { - return { label: `${sp.displayName} (${sp.appId})`, value: sp.appId }; - })} - formControl={formControl} - multiple={false} - /> - )} + + + {servicePrincipals?.Metadata?.Success && ( + + { + return { label: `${sp.displayName} (${sp.appId})`, value: sp.appId }; + })} + formControl={formControl} + multiple={false} + /> + + )} + refetchServicePrincipals()} + disabled={servicePrincipals.isFetching} + > + + + @@ -787,7 +804,7 @@ const CippAppPermissionBuilder = ({ - + Import Permission Manifest @@ -814,7 +831,7 @@ const CippAppPermissionBuilder = ({ - + - + }> Manifest is valid. Click Import to apply the permissions. - + + {importReport && ( } - isFetching={executeCheck.isFetching} + isFetching={!importReport && executeCheck.isFetching} refreshFunction={executeCheck} data={results?.Results?.CPVRefreshList} simpleColumns={["DisplayName", "DefaultDomainName", "LastRefresh"]} @@ -220,7 +220,7 @@ export const CippPermissionResults = (props) => { <> { return { @@ -235,7 +235,7 @@ export const CippPermissionResults = (props) => { <> { return { From 4263f4e8a5a9aa6faf757fe6c9c2b8b0bea7dd8f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 17 Mar 2025 16:26:05 -0400 Subject: [PATCH 0405/1184] fix import with missing pieces of report --- src/components/CippSettings/CippPermissionReport.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippSettings/CippPermissionReport.jsx b/src/components/CippSettings/CippPermissionReport.jsx index 53e4a6269298..8a56b995650b 100644 --- a/src/components/CippSettings/CippPermissionReport.jsx +++ b/src/components/CippSettings/CippPermissionReport.jsx @@ -144,7 +144,7 @@ export const CippPermissionReport = (props) => { reader.onload = (e) => { const report = JSON.parse(e.target.result); - if (!report.Permissions || !report.GDAP || !report.Tenants) { + if (!report?.Permissions && !report?.GDAP && !report?.Tenants) { setImportError("Invalid report format"); return; } @@ -161,7 +161,7 @@ export const CippPermissionReport = (props) => { const text = await navigator.clipboard.readText(); const report = JSON.parse(text); - if (!report.Permissions || !report.GDAP || !report.Tenants) { + if (!report?.Permissions && !report?.GDAP && !report?.Tenants) { setImportError("Invalid report format"); return; } From a4c1c006f908e1a80ff7906a2a3642951d51c260 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 18 Mar 2025 15:42:58 +0100 Subject: [PATCH 0406/1184] new compare mockks --- .../CippFormPages/CippAddEditUser.jsx | 26 +- .../CippStandards/CippStandardsSideBar.jsx | 2 +- src/pages/tenant/standards/compare/index.js | 653 ++++++++++++++++++ .../tenant/standards/list-standards/index.js | 7 + 4 files changed, 675 insertions(+), 13 deletions(-) create mode 100644 src/pages/tenant/standards/compare/index.js diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx index 9cee72637872..3519fe123775 100644 --- a/src/components/CippFormPages/CippAddEditUser.jsx +++ b/src/components/CippFormPages/CippAddEditUser.jsx @@ -256,7 +256,7 @@ const CippAddEditUser = (props) => { type="textField" fullWidth label="Business #" - name="businessPhones" + name="businessPhones[0]" formControl={formControl} /> @@ -269,17 +269,19 @@ const CippAddEditUser = (props) => { formControl={formControl} /> - {userSettingsDefaults?.userAttributes?.filter((attribute) => attribute.value !== "sponsor").map((attribute, idx) => ( - - - - ))} + {userSettingsDefaults?.userAttributes + ?.filter((attribute) => attribute.value !== "sponsor") + .map((attribute, idx) => ( + + + + ))} {/* Set Manager */} diff --git a/src/components/CippStandards/CippStandardsSideBar.jsx b/src/components/CippStandards/CippStandardsSideBar.jsx index 2311a25d12c9..522f2e69290e 100644 --- a/src/components/CippStandards/CippStandardsSideBar.jsx +++ b/src/components/CippStandards/CippStandardsSideBar.jsx @@ -15,7 +15,7 @@ import { ActionListItem } from "/src/components/action-list-item"; import CheckIcon from "@heroicons/react/24/outline/CheckIcon"; import CloseIcon from "@mui/icons-material/Close"; import { useWatch } from "react-hook-form"; -import { use, useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import _ from "lodash"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { CippFormTenantSelector } from "../CippComponents/CippFormTenantSelector"; diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js new file mode 100644 index 000000000000..8b02d2858bfe --- /dev/null +++ b/src/pages/tenant/standards/compare/index.js @@ -0,0 +1,653 @@ +import { useState, useEffect } from "react"; +import { + Button, + Card, + CardContent, + Stack, + Typography, + Box, + Divider, + Chip, + Skeleton, + Alert, +} from "@mui/material"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { PlayArrow, CheckCircle, Cancel, Info, Public, Microsoft } from "@mui/icons-material"; +import { ArrowLeftIcon } from "@mui/x-date-pickers"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; +import standards from "/src/data/standards.json"; +import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; +import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog"; +import { SvgIcon } from "@mui/material"; +import { useForm } from "react-hook-form"; +import { useSettings } from "../../../../hooks/use-settings"; +import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall"; +import { useRouter } from "next/router"; +import { useDialog } from "../../../../hooks/use-dialog"; +import { Grid } from "@mui/system"; + +const Page = () => { + const router = useRouter(); + const { templateId } = router.query; + const [comparisonData, setComparisonData] = useState(null); + const settings = useSettings(); + const currentTenant = settings.currentTenant; + const formControl = useForm({ + mode: "onBlur", + defaultValues: { + comparisonMode: "standard" // Set default comparison mode to "Compare Tenant to standard" + } + }); + const runReportDialog = useDialog(); + + // Get template details + const templateDetails = ApiGetCall({ + url: `/api/listStandardTemplates`, + data: { id: templateId }, + queryKey: `listStandardTemplates-${templateId}`, + }); + + // Get tenants for dropdown + const tenants = ApiGetCall({ + url: "/api/ListTenants", + queryKey: "ListTenants", + }); + + // Run the report once + const runReport = ApiPostCall({ relatedQueryKeys: ["ListStandardCompare"] }); + + // Dialog configuration for Run Report Once + const runReportApi = { + type: "GET", + url: "/api/ExecStandardsRun", + data: { + TemplateId: templateId, + }, + confirmText: "Are you sure you want to run this standard report?", + }; + + // Mock data for ListStandardCompare API + const mockComparisonData = [ + { + standardName: "Password Complexity", + currentTenantValue: "Requires 8+ characters, uppercase, lowercase, numbers, and symbols", + standardValue: "Requires 12+ characters, uppercase, lowercase, numbers, and symbols", + secondTenantValue: "Requires 10+ characters, uppercase, lowercase, and numbers", + complianceStatus: "Non-Compliant", + secondTenantComplianceStatus: "Non-Compliant", + complianceDetails: + "Current tenant password policy is less strict than the standard requirement", + standardId: "standards.PasswordComplexity", + }, + { + standardName: "MFA Enforcement", + currentTenantValue: "Enabled for all users", + standardValue: "Enabled for all users", + secondTenantValue: "Enabled for administrators only", + complianceStatus: "Compliant", + secondTenantComplianceStatus: "Non-Compliant", + complianceDetails: "MFA is properly configured according to standards", + standardId: "standards.PWdisplayAppInformationRequiredState", + }, + { + standardName: "Conditional Access Policies", + currentTenantValue: + "4 policies configured (Block legacy authentication, Require MFA for admins, Require approved apps, Block high-risk sign-ins)", + standardValue: + "5 policies required (Block legacy authentication, Require MFA for all users, Require approved apps, Block high-risk sign-ins, Require compliant devices)", + secondTenantValue: + "3 policies configured (Block legacy authentication, Require MFA for admins, Require approved apps)", + complianceStatus: "Non-Compliant", + secondTenantComplianceStatus: "Non-Compliant", + complianceDetails: "Missing required policy: Require compliant devices", + standardId: "standards.OauthConsent", + }, + { + standardName: "External Sharing", + currentTenantValue: "Restricted to specific domains", + standardValue: "Restricted to specific domains", + secondTenantValue: "Allowed with anyone", + complianceStatus: "Compliant", + secondTenantComplianceStatus: "Non-Compliant", + complianceDetails: null, + standardId: "standards.sharingCapability", + }, + { + standardName: "Audit Logging", + currentTenantValue: "Enabled", + standardValue: "Enabled", + secondTenantValue: "Enabled", + complianceStatus: "Compliant", + secondTenantComplianceStatus: "Compliant", + complianceDetails: null, + standardId: "standards.AuditLog", + }, + { + standardName: "Retention Policies", + currentTenantValue: "Default policy: 1 year retention", + standardValue: "Default policy: 3 year retention", + secondTenantValue: "No retention policies configured", + complianceStatus: "Non-Compliant", + secondTenantComplianceStatus: "Non-Compliant", + complianceDetails: "Retention period is shorter than required by standard", + standardId: "standards.RetentionPolicyTag", + }, + { + standardName: "Device Management", + currentTenantValue: "Intune policies configured for Windows and iOS devices", + standardValue: "Intune policies required for all device types (Windows, iOS, Android, macOS)", + secondTenantValue: "Intune policies configured for Windows devices only", + complianceStatus: "Non-Compliant", + secondTenantComplianceStatus: "Non-Compliant", + complianceDetails: + "Missing required device management policies for Android and macOS devices", + standardId: "standards.intuneDeviceRetirementDays", + }, + { + standardName: "Admin Account Protection", + currentTenantValue: "Privileged Identity Management enabled, Just-in-time access configured", + standardValue: "Privileged Identity Management enabled, Just-in-time access configured", + secondTenantValue: "No PIM configuration", + complianceStatus: "Compliant", + secondTenantComplianceStatus: "Non-Compliant", + complianceDetails: "Admin accounts are properly protected with PIM and JIT access", + standardId: "standards.DisableTenantCreation", + }, + ]; + + // Get comparison data + const comparisonApi = ApiGetCall({ + url: "/api/ListStandardCompare", + data: { + TemplateId: templateId, + CompareTenantId: formControl.watch("compareTenantId"), + CompareToStandard: true, // Always compare to standard, even in tenant comparison mode + }, + queryKey: `ListStandardCompare-${templateId}-${ + formControl.watch("compareTenantId") || "standard" + }-${currentTenant}`, + }); + + useEffect(() => { + // Use mock data for now, replace with API data when available + // Enhance mock data with information from standards.json + const enhancedData = mockComparisonData.map((item) => { + // Find the standard in standards.json + const standardInfo = standards.find((s) => s.name === item.standardId); + + if (standardInfo) { + return { + ...item, + standardName: standardInfo.label || item.standardName, + standardDescription: standardInfo.helpText || "", + standardImpact: standardInfo.impact || "Medium Impact", + standardImpactColour: standardInfo.impactColour || "warning", + // Use only information from standards.json for descriptive content + complianceDetails: + standardInfo.docsDescription || standardInfo.helpText || item.complianceDetails, + }; + } + + return item; + }); + + setComparisonData(enhancedData); + + // Uncomment this when the API is ready + // if (comparisonApi.isSuccess) { + // const enhancedApiData = comparisonApi.data.map(item => { + // const standardInfo = standards.find(s => s.name === item.standardId); + // if (standardInfo) { + // return { + // ...item, + // standardName: standardInfo.label || item.standardName, + // standardDescription: standardInfo.helpText || "", + // standardImpact: standardInfo.impact || "Medium Impact", + // standardImpactColour: standardInfo.impactColour || "warning", + // complianceDetails: standardInfo.docsDescription || standardInfo.helpText || item.complianceDetails, + // }; + // } + // return item; + // }); + // setComparisonData(enhancedApiData); + // } + }, [comparisonApi.isSuccess, comparisonApi.data]); + + // Prepare tenant options for dropdown + const tenantOptions = tenants.isSuccess + ? tenants.data?.map((tenant) => ({ + label: tenant.displayName, + value: tenant.defaultDomainName, + })) + : []; + + // Prepare comparison mode options + const comparisonModeOptions = [ + { label: "Compare Tenant to Standard", value: "standard" }, + { label: "Compare Two Tenants to Standard", value: "tenant" }, + ]; + + return ( + + + + + + + + {`Standard Comparison${ + templateDetails.isSuccess ? ` - ${templateDetails.data[0]?.templateName}` : "" + }`} + + + + + + + + + + Comparison Settings + + + Select how you want to compare the standards + + + + + + + + {formControl.watch("comparisonMode") === "tenant" && ( + + + + + + )} + + + + + + + {comparisonApi.isLoading && ( + <> + {[1, 2, 3].map((item) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ))} + + )} + + + Comparison Results + + + {comparisonData && + comparisonData.map((standard, index) => ( + + + + + + {standard.complianceStatus === "Compliant" ? ( + + ) : ( + + )} + + {standard.standardName} + + + + + + + + + + + + {formControl.watch("comparisonMode") === "standard" ? ( + + ) : ( + + )} + + + + {formControl.watch("comparisonMode") === "standard" + ? "Standard Value" + : formControl.watch("compareTenantId")} + + + + + + + + + {(formControl.watch("comparisonMode") === "standard" && !standard.standardValue) || + (formControl.watch("comparisonMode") === "tenant" && !standard.secondTenantValue) ? ( + + This data has not yet been collected. Collect the data by pressing the report button on the top of the page. + + ) : ( + + {formControl.watch("comparisonMode") === "standard" + ? standard.standardValue + : standard.secondTenantValue} + + )} + {formControl.watch("comparisonMode") === "tenant" && ( + + Standard value: {standard.standardValue || "Not configured"} + + )} + {standard.standardDescription && ( + + {standard.standardDescription} + + )} + + + + + + + + + + + + + + + + + {currentTenant} + + + + + + + {standard.complianceStatus} + + + + + + + + {standard.currentTenantValue || "Not configured"} + + + + + + {standard.complianceDetails && ( + + + + + + + {standard.complianceDetails} + + + + )} + + ))} + + + {/* CippApiDialog for Run Report Once */} + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; diff --git a/src/pages/tenant/standards/list-standards/index.js b/src/pages/tenant/standards/list-standards/index.js index 6dcc15daeb7f..8af18ab0f2be 100644 --- a/src/pages/tenant/standards/list-standards/index.js +++ b/src/pages/tenant/standards/list-standards/index.js @@ -15,6 +15,13 @@ const Page = () => { }); const pageTitle = "Standard Templates"; const actions = [ + { + label: "View Tenant Report", + link: "/tenant/standards/compare?templateId=[GUID]", + icon: , + color: "info", + target: "_self", + }, { label: "Edit Template", //when using a link it must always be the full path /identity/administration/users/[id] for example. From e1cad9a1c89d99c8d676f194071040d196f4f947 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 18 Mar 2025 18:10:35 -0400 Subject: [PATCH 0407/1184] feat: edit group improvements --- .../CippFormContactSelector.jsx | 2 + .../CippComponents/CippFormUserSelector.jsx | 2 + .../email/administration/contacts/index.js | 1 + .../identity/administration/groups/edit.jsx | 77 +++++++++++++++---- .../identity/administration/groups/index.js | 2 +- 5 files changed, 68 insertions(+), 16 deletions(-) diff --git a/src/components/CippComponents/CippFormContactSelector.jsx b/src/components/CippComponents/CippFormContactSelector.jsx index 094f36014eb7..d912bc526be5 100644 --- a/src/components/CippComponents/CippFormContactSelector.jsx +++ b/src/components/CippComponents/CippFormContactSelector.jsx @@ -32,6 +32,8 @@ export const CippFormContactSelector = ({ valueField: valueField ? valueField : "id", queryKey: `listcontacts-${currentTenant?.value ? currentTenant.value : selectedTenant}`, }} + creatable={false} + {...other} /> ); }; diff --git a/src/components/CippComponents/CippFormUserSelector.jsx b/src/components/CippComponents/CippFormUserSelector.jsx index 51395ef830a8..be303767317b 100644 --- a/src/components/CippComponents/CippFormUserSelector.jsx +++ b/src/components/CippComponents/CippFormUserSelector.jsx @@ -41,6 +41,8 @@ export const CippFormUserSelector = ({ $top: 999, }, }} + creatable={false} + {...other} /> ); }; diff --git a/src/pages/email/administration/contacts/index.js b/src/pages/email/administration/contacts/index.js index 22e922d006ce..c9c590d80bf7 100644 --- a/src/pages/email/administration/contacts/index.js +++ b/src/pages/email/administration/contacts/index.js @@ -24,6 +24,7 @@ const Page = () => { url: "/api/RemoveContact", data: { GUID: "id", + mail: "mail", }, confirmText: "Are you sure you want to delete this contact? Remember this will not work if the contact is AD Synced.", diff --git a/src/pages/identity/administration/groups/edit.jsx b/src/pages/identity/administration/groups/edit.jsx index 65df31bfa199..ac00493954be 100644 --- a/src/pages/identity/administration/groups/edit.jsx +++ b/src/pages/identity/administration/groups/edit.jsx @@ -13,16 +13,20 @@ import { CippDataTable } from "../../../../components/CippTable/CippDataTable"; const EditGroup = () => { const router = useRouter(); - const { groupId } = router.query; + const { groupId, groupType } = router.query; + const [groupIdReady, setGroupIdReady] = useState(false); const tenantFilter = useSettings().currentTenant; + const groupInfo = ApiGetCall({ - url: `/api/ListGroups?groupID=${groupId}&tenantFilter=${tenantFilter}&members=true&owners=true`, + url: `/api/ListGroups?groupID=${groupId}&tenantFilter=${tenantFilter}&members=true&owners=true&groupType=${groupType}`, queryKey: `ListGroups-${groupId}`, - waiting: false, + waiting: groupIdReady, }); const [combinedData, setCombinedData] = useState([]); + useEffect(() => { if (groupId) { + setGroupIdReady(true); groupInfo.refetch(); } }, [router.query, groupId, tenantFilter]); @@ -33,7 +37,6 @@ const EditGroup = () => { tenantId: tenantFilter, }, }); - const groupType = useWatch({ control: formControl.control, name: "groupType" }); useEffect(() => { if (groupInfo.isSuccess) { @@ -46,8 +49,8 @@ const EditGroup = () => { displayName: o.displayName, })) || []), ...(groupInfo.data?.members?.map((m) => ({ - type: "Member", - userPrincipalName: m.userPrincipalName, + type: m?.["@odata.type"] === "#microsoft.graph.orgContact" ? "Contact" : "Member", + userPrincipalName: m.userPrincipalName ?? m.mail, displayName: m.displayName, })) || []), ]; @@ -56,8 +59,8 @@ const EditGroup = () => { formControl.reset({ tenantId: tenantFilter, mail: group.mail, - allowExternal: group.allowExternal, - sendCopies: group.sendCopies, + allowExternal: groupInfo?.data?.allowExternal, + sendCopies: groupInfo?.data?.sendCopies, groupName: group.displayName, groupId: group.id, groupType: (() => { @@ -90,8 +93,8 @@ const EditGroup = () => { { label="Add Member" multiple={true} valueField="userPrincipalName" + addedField={{ + id: "id", + displayName: "displayName", + }} + removeOptions={groupInfo.data?.members?.map((m) => m.userPrincipalName)} /> @@ -117,6 +125,11 @@ const EditGroup = () => { multiple={true} labelField={(option) => `${option.displayName} (${option.userPrincipalName})`} valueField="userPrincipalName" + addedField={{ + id: "id", + displayName: "displayName", + }} + removeOptions={groupInfo.data?.owners?.map((o) => o.userPrincipalName)} /> @@ -125,6 +138,15 @@ const EditGroup = () => { name="AddContact" label="Add Contact" multiple={true} + valueField="mail" + addedField={{ + id: "id", + displayName: "displayName", + mail: "mail", + }} + removeOptions={groupInfo.data?.members + ?.filter((m) => m?.["@odata.type"] === "#microsoft.graph.orgContact") + .map((m) => m.mail)} /> @@ -136,10 +158,16 @@ const EditGroup = () => { formControl={formControl} isFetching={groupInfo.isFetching} disabled={groupInfo.isFetching} - options={groupInfo.data?.members?.map((m) => ({ - label: `${m.displayName} (${m.userPrincipalName})`, - value: m.userPrincipalName, - }))} + options={groupInfo.data?.members + ?.filter((m) => m?.["@odata.type"] !== "#microsoft.graph.orgContact") + ?.map((m) => ({ + label: `${m.displayName} (${m.userPrincipalName})`, + value: m.userPrincipalName, + addedFields: { + id: m.id, + displayName: m.displayName, + }, + }))} name="RemoveMember" label="Remove Member" multiple={true} @@ -155,6 +183,10 @@ const EditGroup = () => { options={groupInfo.data?.owners?.map((o) => ({ label: `${o.displayName} (${o.userPrincipalName})`, value: o.userPrincipalName, + addedFields: { + id: o.id, + displayName: o.displayName, + }, }))} formControl={formControl} name="RemoveOwner" @@ -163,7 +195,21 @@ const EditGroup = () => { /> - m?.["@odata.type"] === "#microsoft.graph.orgContact") + .map((m) => ({ + label: `${m.displayName} (${m.mail})`, + value: m.mail, + addedFields: { + id: m.id, + displayName: m.displayName, + mail: m.mail, + }, + }))} formControl={formControl} name="RemoveContact" label="Remove Contact" @@ -203,6 +249,7 @@ const EditGroup = () => { data={combinedData} isFetching={groupInfo.isFetching} simpleColumns={["type", "userPrincipalName", "displayName"]} + refreshFunction={groupInfo.refetch} /> diff --git a/src/pages/identity/administration/groups/index.js b/src/pages/identity/administration/groups/index.js index f72ca6694928..0df2e951e942 100644 --- a/src/pages/identity/administration/groups/index.js +++ b/src/pages/identity/administration/groups/index.js @@ -11,7 +11,7 @@ const Page = () => { { //tested label: "Edit Group", - link: "/identity/administration/groups/edit?groupId=[id]", + link: "/identity/administration/groups/edit?groupId=[id]&groupType=[calculatedGroupType]", multiPost: false, icon: , color: "success", From bf96d6748ccda9e07264ebcff61c7a04732a48c3 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:52:30 +0100 Subject: [PATCH 0408/1184] tmp pushpush --- src/pages/tenant/standards/compare/index.js | 532 +++++++++----------- 1 file changed, 237 insertions(+), 295 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 8b02d2858bfe..cc9b5c3dcec6 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -31,30 +31,22 @@ const Page = () => { const { templateId } = router.query; const [comparisonData, setComparisonData] = useState(null); const settings = useSettings(); - const currentTenant = settings.currentTenant; + const currentTenant = settings?.currentTenant; const formControl = useForm({ mode: "onBlur", defaultValues: { - comparisonMode: "standard" // Set default comparison mode to "Compare Tenant to standard" - } + comparisonMode: "standard", + }, }); const runReportDialog = useDialog(); - // Get template details const templateDetails = ApiGetCall({ url: `/api/listStandardTemplates`, - data: { id: templateId }, - queryKey: `listStandardTemplates-${templateId}`, - }); - - // Get tenants for dropdown - const tenants = ApiGetCall({ - url: "/api/ListTenants", - queryKey: "ListTenants", + queryKey: `listStandardTemplates-reports`, }); // Run the report once - const runReport = ApiPostCall({ relatedQueryKeys: ["ListStandardCompare"] }); + const runReport = ApiPostCall({ relatedQueryKeys: ["ListStandardsCompare"] }); // Dialog configuration for Run Report Once const runReportApi = { @@ -66,166 +58,82 @@ const Page = () => { confirmText: "Are you sure you want to run this standard report?", }; - // Mock data for ListStandardCompare API - const mockComparisonData = [ - { - standardName: "Password Complexity", - currentTenantValue: "Requires 8+ characters, uppercase, lowercase, numbers, and symbols", - standardValue: "Requires 12+ characters, uppercase, lowercase, numbers, and symbols", - secondTenantValue: "Requires 10+ characters, uppercase, lowercase, and numbers", - complianceStatus: "Non-Compliant", - secondTenantComplianceStatus: "Non-Compliant", - complianceDetails: - "Current tenant password policy is less strict than the standard requirement", - standardId: "standards.PasswordComplexity", - }, - { - standardName: "MFA Enforcement", - currentTenantValue: "Enabled for all users", - standardValue: "Enabled for all users", - secondTenantValue: "Enabled for administrators only", - complianceStatus: "Compliant", - secondTenantComplianceStatus: "Non-Compliant", - complianceDetails: "MFA is properly configured according to standards", - standardId: "standards.PWdisplayAppInformationRequiredState", - }, - { - standardName: "Conditional Access Policies", - currentTenantValue: - "4 policies configured (Block legacy authentication, Require MFA for admins, Require approved apps, Block high-risk sign-ins)", - standardValue: - "5 policies required (Block legacy authentication, Require MFA for all users, Require approved apps, Block high-risk sign-ins, Require compliant devices)", - secondTenantValue: - "3 policies configured (Block legacy authentication, Require MFA for admins, Require approved apps)", - complianceStatus: "Non-Compliant", - secondTenantComplianceStatus: "Non-Compliant", - complianceDetails: "Missing required policy: Require compliant devices", - standardId: "standards.OauthConsent", - }, - { - standardName: "External Sharing", - currentTenantValue: "Restricted to specific domains", - standardValue: "Restricted to specific domains", - secondTenantValue: "Allowed with anyone", - complianceStatus: "Compliant", - secondTenantComplianceStatus: "Non-Compliant", - complianceDetails: null, - standardId: "standards.sharingCapability", - }, - { - standardName: "Audit Logging", - currentTenantValue: "Enabled", - standardValue: "Enabled", - secondTenantValue: "Enabled", - complianceStatus: "Compliant", - secondTenantComplianceStatus: "Compliant", - complianceDetails: null, - standardId: "standards.AuditLog", - }, - { - standardName: "Retention Policies", - currentTenantValue: "Default policy: 1 year retention", - standardValue: "Default policy: 3 year retention", - secondTenantValue: "No retention policies configured", - complianceStatus: "Non-Compliant", - secondTenantComplianceStatus: "Non-Compliant", - complianceDetails: "Retention period is shorter than required by standard", - standardId: "standards.RetentionPolicyTag", - }, - { - standardName: "Device Management", - currentTenantValue: "Intune policies configured for Windows and iOS devices", - standardValue: "Intune policies required for all device types (Windows, iOS, Android, macOS)", - secondTenantValue: "Intune policies configured for Windows devices only", - complianceStatus: "Non-Compliant", - secondTenantComplianceStatus: "Non-Compliant", - complianceDetails: - "Missing required device management policies for Android and macOS devices", - standardId: "standards.intuneDeviceRetirementDays", - }, - { - standardName: "Admin Account Protection", - currentTenantValue: "Privileged Identity Management enabled, Just-in-time access configured", - standardValue: "Privileged Identity Management enabled, Just-in-time access configured", - secondTenantValue: "No PIM configuration", - complianceStatus: "Compliant", - secondTenantComplianceStatus: "Non-Compliant", - complianceDetails: "Admin accounts are properly protected with PIM and JIT access", - standardId: "standards.DisableTenantCreation", - }, - ]; - // Get comparison data const comparisonApi = ApiGetCall({ - url: "/api/ListStandardCompare", + url: "/api/ListStandardsCompare", data: { TemplateId: templateId, CompareTenantId: formControl.watch("compareTenantId"), CompareToStandard: true, // Always compare to standard, even in tenant comparison mode }, - queryKey: `ListStandardCompare-${templateId}-${ + queryKey: `ListStandardsCompare-${templateId}-${ formControl.watch("compareTenantId") || "standard" }-${currentTenant}`, + enabled: !!templateId, // Only run the query if templateId is available }); useEffect(() => { - // Use mock data for now, replace with API data when available - // Enhance mock data with information from standards.json - const enhancedData = mockComparisonData.map((item) => { - // Find the standard in standards.json - const standardInfo = standards.find((s) => s.name === item.standardId); - - if (standardInfo) { - return { - ...item, - standardName: standardInfo.label || item.standardName, - standardDescription: standardInfo.helpText || "", - standardImpact: standardInfo.impact || "Medium Impact", - standardImpactColour: standardInfo.impactColour || "warning", - // Use only information from standards.json for descriptive content - complianceDetails: - standardInfo.docsDescription || standardInfo.helpText || item.complianceDetails, - }; - } + if (templateId && templateDetails.isSuccess && templateDetails.data) { + const selectedTemplate = templateDetails.data.find( + (template) => template.GUID === templateId + ); - return item; - }); + if (selectedTemplate && comparisonApi.isSuccess && comparisonApi.data) { + const tenantData = comparisonApi.data; + + // Find the current tenant's data by matching tenantFilter with currentTenant + const currentTenantObj = tenantData.find(t => t.tenantFilter === currentTenant); + const currentTenantData = currentTenantObj ? currentTenantObj.standardsResults || [] : []; + + const allStandards = []; + if (selectedTemplate.standards) { + Object.entries(selectedTemplate.standards).forEach(([standardKey, standardConfig]) => { + const standardId = `standards.${standardKey}`; + const standardInfo = standards.find((s) => s.name === standardId); + const standardSettings = standardConfig.standards?.[standardKey] || {}; - setComparisonData(enhancedData); + // Find the tenant's value for this standard + const currentTenantStandard = currentTenantData.find( + (s) => s.standardId === standardId + ); - // Uncomment this when the API is ready - // if (comparisonApi.isSuccess) { - // const enhancedApiData = comparisonApi.data.map(item => { - // const standardInfo = standards.find(s => s.name === item.standardId); - // if (standardInfo) { - // return { - // ...item, - // standardName: standardInfo.label || item.standardName, - // standardDescription: standardInfo.helpText || "", - // standardImpact: standardInfo.impact || "Medium Impact", - // standardImpactColour: standardInfo.impactColour || "warning", - // complianceDetails: standardInfo.docsDescription || standardInfo.helpText || item.complianceDetails, - // }; - // } - // return item; - // }); - // setComparisonData(enhancedApiData); - // } - }, [comparisonApi.isSuccess, comparisonApi.data]); + // Determine compliance status + const isCompliant = + currentTenantStandard && + JSON.stringify(currentTenantStandard.value) === JSON.stringify(standardSettings); - // Prepare tenant options for dropdown - const tenantOptions = tenants.isSuccess - ? tenants.data?.map((tenant) => ({ - label: tenant.displayName, - value: tenant.defaultDomainName, - })) - : []; + allStandards.push({ + standardId, + standardName: standardInfo?.label || standardKey, + currentTenantValue: currentTenantStandard?.value, + standardValue: standardSettings, + complianceStatus: isCompliant ? "Compliant" : "Non-Compliant", + complianceDetails: standardInfo?.docsDescription || standardInfo?.helpText || "", + standardDescription: standardInfo?.helpText || "", + standardImpact: standardInfo?.impact || "Medium Impact", + standardImpactColour: standardInfo?.impactColour || "warning", + templateName: selectedTemplate.templateName || "Standard Template", + templateActions: standardConfig.action || [], + }); + }); + } - // Prepare comparison mode options - const comparisonModeOptions = [ - { label: "Compare Tenant to Standard", value: "standard" }, - { label: "Compare Two Tenants to Standard", value: "tenant" }, - ]; + setComparisonData(allStandards); + } else { + setComparisonData([]); + } + } else if (comparisonApi.isError) { + setComparisonData([]); + } + }, [ + templateId, + templateDetails.isSuccess, + templateDetails.data, + comparisonApi.isSuccess, + comparisonApi.data, + comparisonApi.isError, + ]); + const comparisonModeOptions = [{ label: "Compare Tenant to Standard", value: "standard" }]; return ( @@ -245,16 +153,11 @@ const Page = () => { - - {`Standard Comparison${ - templateDetails.isSuccess ? ` - ${templateDetails.data[0]?.templateName}` : "" - }`} - - - - - - - Comparison Settings - - - Select how you want to compare the standards - - - - - - - - {formControl.watch("comparisonMode") === "tenant" && ( - - - - - - )} - - - - - - {comparisonApi.isLoading && ( <> {[1, 2, 3].map((item) => ( @@ -401,46 +245,60 @@ const Page = () => { Comparison Results + {comparisonApi.isError && ( + + + Error fetching comparison data + + + There was an error retrieving the comparison data. Please try running the report again + by clicking the "Run Report Once" button above. + + {comparisonApi.error && ( + + + {comparisonApi.error.message || JSON.stringify(comparisonApi.error, null, 2)} + + + )} + + )} + + {comparisonApi.isSuccess && (!comparisonApi.data || comparisonApi.data.length === 0) && ( + + + No comparison data is available. This might be because: + + + + • The tenant has not been scanned yet + + + • The template has no standards configured + + + • There was an issue with the comparison + + + + Try running the report by clicking the "Run Report Once" button above. + + + )} + {comparisonData && + comparisonData.length > 0 && comparisonData.map((standard, index) => ( - - - - - {standard.complianceStatus === "Compliant" ? ( - - ) : ( - - )} - - {standard.standardName} - - - - - { display: "flex", alignItems: "center", justifyContent: "center", - bgcolor: "info.main", + bgcolor: + standard.complianceStatus === "Compliant" + ? "success.main" + : "error.main", }} > - {formControl.watch("comparisonMode") === "standard" ? ( - + {standard.complianceStatus === "Compliant" ? ( + ) : ( - + )} - - {formControl.watch("comparisonMode") === "standard" - ? "Standard Value" - : formControl.watch("compareTenantId")} - + {standard?.standardName} { - {(formControl.watch("comparisonMode") === "standard" && !standard.standardValue) || - (formControl.watch("comparisonMode") === "tenant" && !standard.secondTenantValue) ? ( + {!standard.standardValue ? ( - This data has not yet been collected. Collect the data by pressing the report button on the top of the page. + This data has not yet been collected. Collect the data by pressing the + report button on the top of the page. ) : ( - - {formControl.watch("comparisonMode") === "standard" - ? standard.standardValue - : standard.secondTenantValue} - - )} - {formControl.watch("comparisonMode") === "tenant" && ( - - Standard value: {standard.standardValue || "Not configured"} - - )} - {standard.standardDescription && ( - - {standard.standardDescription} - + + + + {standard.standardValue && + typeof standard.standardValue === "object" && + Object.keys(standard.standardValue).length > 0 ? ( + Object.entries(standard.standardValue).map(([key, value]) => ( + + + {key}: + + + {typeof value === "object" + ? value.label || JSON.stringify(value) + : value === true + ? "Enabled" + : value === false + ? "Disabled" + : String(value)} + + + )) + ) : ( + + {standard.standardValue !== undefined + ? typeof standard.standardValue === "object" + ? "No settings configured" + : String(standard.standardValue) + : "Not configured"} + + )} + + + )} + { - - {standard.currentTenantValue || "Not configured"} - + {typeof standard.currentTenantValue === "object" && + standard.currentTenantValue !== null ? ( + + {Object.entries(standard.currentTenantValue).map(([key, value]) => { + const standardValueForKey = + standard.standardValue && typeof standard.standardValue === "object" + ? standard.standardValue[key] + : undefined; + + const isDifferent = + standardValueForKey !== undefined && + JSON.stringify(value) !== JSON.stringify(standardValueForKey); + + return ( + + + {key}: + + + {typeof value === "object" + ? value.label || JSON.stringify(value) + : value === true + ? "Enabled" + : value === false + ? "Disabled" + : String(value)} + + + ); + })} + + ) : ( + + {standard.currentTenantValue !== undefined + ? String(standard.currentTenantValue) + : "Not configured"} + + )} @@ -631,7 +574,6 @@ const Page = () => { ))} - {/* CippApiDialog for Run Report Once */} { TemplateId: templateId, }, }} - relatedQueryKeys={["ListStandardCompare"]} + relatedQueryKeys={["ListStandardsCompare"]} /> ); From f3a564955d1fe659bac6773708bf621170dea463 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 19 Mar 2025 10:30:49 -0400 Subject: [PATCH 0409/1184] fix add group --- src/components/CippFormPages/CippAddGroupForm.jsx | 5 ++++- src/pages/identity/administration/groups/add.jsx | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/components/CippFormPages/CippAddGroupForm.jsx b/src/components/CippFormPages/CippAddGroupForm.jsx index daac5f7aef7f..30817d510b0c 100644 --- a/src/components/CippFormPages/CippAddGroupForm.jsx +++ b/src/components/CippFormPages/CippAddGroupForm.jsx @@ -1,5 +1,5 @@ import React from "react"; -import { Grid } from "@mui/material"; +import { Grid, InputAdornment } from "@mui/material"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { CippFormCondition } from "/src/components/CippComponents/CippFormCondition"; import { CippFormDomainSelector } from "../CippComponents/CippFormDomainSelector"; @@ -35,6 +35,9 @@ const CippAddGroupForm = (props) => { name="username" formControl={formControl} fullWidth + InputProps={{ + endAdornment: @, + }} /> diff --git a/src/pages/identity/administration/groups/add.jsx b/src/pages/identity/administration/groups/add.jsx index c6b10b5240f9..6715ef3f4910 100644 --- a/src/pages/identity/administration/groups/add.jsx +++ b/src/pages/identity/administration/groups/add.jsx @@ -3,6 +3,7 @@ import CippFormPage from "../../../../components/CippFormPages/CippFormPage"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { useForm } from "react-hook-form"; import { useSettings } from "../../../../hooks/use-settings"; +import { useEffect } from "react"; import CippAddGroupForm from "../../../../components/CippFormPages/CippAddGroupForm"; const Page = () => { @@ -10,11 +11,15 @@ const Page = () => { const formControl = useForm({ mode: "onChange", - defaultValues: { - tenantFilter: userSettingsDefaults.currentTenant, - }, }); + useEffect(() => { + formControl.setValue( + "tenantFilter", + userSettingsDefaults?.currentTenant || "" + ); + }, [userSettingsDefaults, formControl]); + return ( <> Date: Wed, 19 Mar 2025 19:04:52 -0400 Subject: [PATCH 0410/1184] add dataFilter to api prop --- .../CippComponents/CippAutocomplete.jsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 2ce70653a020..d04c46d7a6f1 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -166,7 +166,12 @@ export const CippAutoComplete = (props) => { addedFields, }; }); - setUsedOptions(convertedOptions); + + if (api?.dataFilter) { + setUsedOptions(api.dataFilter(convertedOptions)); + } else { + setUsedOptions(convertedOptions); + } } } @@ -199,9 +204,7 @@ export const CippAutoComplete = (props) => { // Dedicated effect for handling preselected value useEffect(() => { if (preselectedValue && !defaultValue && !value && memoizedOptions.length > 0) { - const preselectedOption = memoizedOptions.find( - (option) => option.value === preselectedValue - ); + const preselectedOption = memoizedOptions.find((option) => option.value === preselectedValue); if (preselectedOption) { const newValue = multiple ? [preselectedOption] : preselectedOption; @@ -219,9 +222,9 @@ export const CippAutoComplete = (props) => { JSON.stringify(defaultValue), JSON.stringify(preselectedValue), api?.url, - currentTenant + currentTenant, ]; - return keyParts.join('-'); + return keyParts.join("-"); }, [defaultValue, preselectedValue, api?.url, currentTenant]); return ( From 399a4227a061aa2b943691d4d20deed241889a13 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 19 Mar 2025 23:34:46 -0400 Subject: [PATCH 0411/1184] extend cippformcondition --- .../CippComponents/CippFormCondition.jsx | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/components/CippComponents/CippFormCondition.jsx b/src/components/CippComponents/CippFormCondition.jsx index 6ab7345833a9..dd2f87997c8c 100644 --- a/src/components/CippComponents/CippFormCondition.jsx +++ b/src/components/CippComponents/CippFormCondition.jsx @@ -7,6 +7,7 @@ export const CippFormCondition = (props) => { field, compareType = "is", compareValue, + propertyName = "value", action = "hide", children, formControl, @@ -22,12 +23,24 @@ export const CippFormCondition = (props) => { } let watcher = useWatch({ control: formControl.control, name: field }); - if (watcher?.value !== undefined) { - watcher = watcher.value; - } - if (compareValue?.value !== undefined) { - compareValue = compareValue.value; + if (propertyName.includes(".")) { + propertyName.split(".").forEach((prop) => { + if (watcher?.[prop] !== undefined) { + watcher = watcher?.[prop]; + } + if (compareValue?.[prop] !== undefined) { + compareValue = compareValue?.[prop]; + } + }); + } else { + if (watcher?.[propertyName] !== undefined) { + watcher = watcher?.[propertyName]; + } + + if (compareValue?.[propertyName] !== undefined) { + compareValue = compareValue?.[propertyName]; + } } const disableChildren = (children) => { @@ -202,6 +215,16 @@ export const CippFormCondition = (props) => { } return null; + case "valueNotEq": + // Checks if any object in array has .value exactly equal to compareValue + if (Array.isArray(watcher) && watcher.some((item) => item?.value !== compareValue)) { + return children; + } + if (action === "disable") { + return disableChildren(children); + } + return null; + case "valueContains": // Checks if any object in array has a .value that contains compareValue if ( From 8b1e0199cde54638ab6f455fcfc36dbefda113bc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 19 Mar 2025 23:35:00 -0400 Subject: [PATCH 0412/1184] custom data mapping --- src/data/extensionDataMapping.json | 111 ++++++ src/pages/cipp/custom-data/mappings/add.js | 337 +++++++++++++++++++ src/pages/cipp/custom-data/mappings/edit.js | 0 src/pages/cipp/custom-data/mappings/index.js | 70 ++++ src/pages/cipp/custom-data/tabOptions.json | 4 + 5 files changed, 522 insertions(+) create mode 100644 src/data/extensionDataMapping.json create mode 100644 src/pages/cipp/custom-data/mappings/add.js create mode 100644 src/pages/cipp/custom-data/mappings/edit.js create mode 100644 src/pages/cipp/custom-data/mappings/index.js diff --git a/src/data/extensionDataMapping.json b/src/data/extensionDataMapping.json new file mode 100644 index 000000000000..c8910845c70d --- /dev/null +++ b/src/data/extensionDataMapping.json @@ -0,0 +1,111 @@ +{ + "Mailboxes": { + "description": "List of user mailboxes mapped to their corresponding user via id. Properties can be mapped individually.", + "type": "object", + "targetObject": "user", + "sourceMatchProperty": "ExternalDirectoryObjectId", + "destinationMatchProperty": "id", + "storeAs": "value", + "properties": [ + { "name": "Id", "dataType": "string" }, + { "name": "ExchangeGuid", "dataType": "string" }, + { "name": "ArchiveGuid", "dataType": "string" }, + { "name": "WhenSoftDeleted", "dataType": "datetime" }, + { "name": "ProhibitSendQuota", "dataType": "string" }, + { "name": "ProhibitSendReceiveQuota", "dataType": "string" }, + { "name": "LitigationHoldEnabled", "dataType": "boolean" }, + { "name": "InPlaceHolds", "dataType": "array" }, + { "name": "HiddenFromAddressListsEnabled", "dataType": "boolean" }, + { "name": "UPN", "dataType": "string" }, + { "name": "displayName", "dataType": "string" }, + { "name": "primarySmtpAddress", "dataType": "string" }, + { "name": "recipientType", "dataType": "string" }, + { "name": "recipientTypeDetails", "dataType": "string" }, + { "name": "AdditionalEmailAddresses", "dataType": "string" }, + { "name": "ForwardingSmtpAddress", "dataType": "string" }, + { "name": "InternalForwardingAddress", "dataType": "string" }, + { "name": "DeliverToMailboxAndForward", "dataType": "boolean" }, + { "name": "ExternalDirectoryObjectId", "dataType": "string" }, + { "name": "MessageCopyForSendOnBehalfEnabled", "dataType": "boolean" }, + { "name": "MessageCopyForSentAsEnabled", "dataType": "boolean" } + ] + }, + "MailboxPermissions": { + "description": "List of mailbox permissions mapped to their corresponding user via id. Permissions are stored as JSON in a multi-value property for each entry.", + "type": "array", + "targetObject": "user", + "sourceMatchProperty": "Identity", + "destinationMatchProperty": "id", + "storeAs": "json", + "select": "Identity,User,AccessRights,IsInherited,Deny,InheritanceType,UserSid,IsOwner" + }, + "CASMailbox": { + "description": "List of CAS mailboxes mapped to their corresponding user via id. Properties can be mapped individually.", + "type": "object", + "targetObject": "user", + "sourceMatchProperty": "ExternalDirectoryObjectId", + "destinationMatchProperty": "id", + "storeAs": "value", + "properties": [ + { "name": "ObjectKey", "dataType": "string" }, + { "name": "ExternalDirectoryObjectId", "dataType": "string" }, + { "name": "Identity", "dataType": "string" }, + { "name": "PrimarySmtpAddress", "dataType": "string" }, + { "name": "DisplayName", "dataType": "string" }, + { "name": "Name", "dataType": "string" }, + { "name": "Guid", "dataType": "string" }, + { "name": "ServerLegacyDN", "dataType": "string" }, + { "name": "ExchangeVersion", "dataType": "string" }, + { "name": "ECPEnabled", "dataType": "boolean" }, + { "name": "EmailAddresses", "dataType": "array" }, + { "name": "OWAEnabled", "dataType": "boolean" }, + { "name": "OrganizationId", "dataType": "string" }, + { "name": "ImapEnabled", "dataType": "boolean" }, + { "name": "PopEnabled", "dataType": "boolean" }, + { "name": "MAPIEnabled", "dataType": "boolean" }, + { "name": "EwsEnabled", "dataType": "boolean" }, + { "name": "ActiveSyncEnabled", "dataType": "boolean" } + ] + }, + "MailboxUsage": { + "description": "Mailbox usage mapped to their corresponding user via userPrincipalName. Properties can be mapped individually.", + "type": "object", + "targetObject": "user", + "sourceMatchProperty": "userPrincipalName", + "destinationMatchProperty": "userPrincipalName", + "storeAs": "value", + "properties": [ + { "name": "reportPeriod", "dataType": "string" }, + { "name": "totalItemSize", "dataType": "string" }, + { "name": "deletedItemSize", "dataType": "string" }, + { "name": "itemCount", "dataType": "integer" }, + { "name": "deletedItemCount", "dataType": "integer" }, + { "name": "storageLimitStatus", "dataType": "string" }, + { "name": "issueWarningQuota", "dataType": "string" }, + { "name": "prohibitSendQuota", "dataType": "string" }, + { "name": "prohibitSendReceiveQuota", "dataType": "string" } + ] + }, + "OneDriveUsage": { + "description": "OneDrive usage mapped to their corresponding user via ownerPrincipalName. Properties can be mapped individually.", + "type": "object", + "targetObject": "user", + "sourceMatchProperty": "ownerPrincipalName", + "destinationMatchProperty": "userPrincipalName", + "storeAs": "value", + "properties": [ + { "name": "reportRefreshDate", "dataType": "datetime" }, + { "name": "siteId", "dataType": "string" }, + { "name": "siteUrl", "dataType": "string" }, + { "name": "ownerDisplayName", "dataType": "string" }, + { "name": "ownerPrincipalName", "dataType": "string" }, + { "name": "isDeleted", "dataType": "boolean" }, + { "name": "lastActivityDate", "dataType": "datetime" }, + { "name": "fileCount", "dataType": "integer" }, + { "name": "activeFileCount", "dataType": "integer" }, + { "name": "storageUsedInBytes", "dataType": "integer" }, + { "name": "storageAllocatedInBytes", "dataType": "integer" }, + { "name": "reportPeriod", "dataType": "string" } + ] + } +} diff --git a/src/pages/cipp/custom-data/mappings/add.js b/src/pages/cipp/custom-data/mappings/add.js new file mode 100644 index 000000000000..69a304d065e2 --- /dev/null +++ b/src/pages/cipp/custom-data/mappings/add.js @@ -0,0 +1,337 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { useForm, useFormState, useWatch } from "react-hook-form"; +import { ApiPostCall } from "/src/api/ApiCall"; +import { useRouter } from "next/router"; +import { Box, Button, Stack, CardContent, Typography, Divider, CardActions } from "@mui/material"; + +import CippPageCard from "/src/components/CippCards/CippPageCard"; +import { CippApiResults } from "/src/components/CippComponents/CippApiResults"; +import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; +import { CippFormTenantSelector } from "/src/components/CippComponents/CippFormTenantSelector"; +import { GroupHeader, GroupItems } from "/src/components/CippComponents/CippAutocompleteGrouping"; +import { getCippTranslation } from "/src/utils/get-cipp-translation"; +import { Grid } from "@mui/system"; +import { CippPropertyListCard } from "/src/components/CippCards/CippPropertyListCard"; +import { CippCopyToClipBoard } from "/src/components/CippComponents/CippCopyToClipboard"; +import { CippFormCondition } from "/src/components/CippComponents/CippFormCondition"; +import extensionDataMapping from "/src/data/ExtensionDataMapping"; +import { validate } from "numeral"; + +const Page = () => { + const router = useRouter(); + const formControl = useForm({ + mode: "onChange", + }); + + const formState = useFormState({ control: formControl.control }); + const selectedAttribute = useWatch({ control: formControl.control, name: "customDataAttribute" }); + const selectedDirectoryObjectType = useWatch({ + control: formControl.control, + name: "directoryObjectType", + }); + const selectedExtensionSyncDataset = useWatch({ + control: formControl.control, + name: "extensionSyncDataset", + }); + const selectedExtensionSyncProperty = useWatch({ + control: formControl.control, + name: "extensionSyncProperty", + }); + + const addMappingApi = ApiPostCall({ + urlFromData: true, + relatedQueryKeys: ["MappingsListPage"], + }); + + const handleAddMapping = (data) => { + addMappingApi.mutate({ + url: "/api/ExecCustomData", + data: { + Action: "AddMapping", + Mapping: data, + }, + }); + }; + + // Static list of directory object types based on schema and directory extensions + const staticTargetTypes = [ + /*{ value: "administrativeUnit", label: "Administrative Unit" }, + { value: "application", label: "Application" }, + { value: "contact", label: "Contact" }, + { value: "device", label: "Device" }, + { value: "event", label: "Event (User and Group Calendars)" }, + { value: "group", label: "Group" }, + { value: "message", label: "Message" }, + { value: "organization", label: "Organization" }, + { value: "post", label: "Post" },*/ + { value: "user", label: "User" }, + ]; + + const sourceFields = [ + { + name: "sourceType", + label: "Source Type", + type: "autoComplete", + required: true, + multiple: false, + placeholder: "Select a Source Type", + options: [{ value: "extensionSync", label: "Extension Sync" }], + }, + { + name: "extensionSyncDataset", + label: "Extension Sync Dataset", + type: "autoComplete", + required: true, + placeholder: "Select a Property", + options: Object.keys(extensionDataMapping).map((key) => ({ + value: key, + label: getCippTranslation(key), + addedFields: extensionDataMapping[key], + })), + multiple: false, + creatable: false, + condition: { + field: "sourceType", + compareType: "is", + compareValue: "extensionSync", + }, + }, + { + name: "extensionSyncProperty", + label: "Source Property", + type: "autoComplete", + required: true, + placeholder: "Select a Property", + options: + selectedExtensionSyncDataset?.addedFields?.properties?.length > 0 + ? selectedExtensionSyncDataset?.addedFields?.properties.map((property) => ({ + value: property.name, + label: getCippTranslation(property.name), + addedFields: property, + })) + : [], + multiple: false, + creatable: false, + condition: { + field: "extensionSyncDataset", + propertyName: "addedFields.type", + compareType: "isNot", + compareValue: "array", + }, + sortOptions: true, + validate: (value) => { + if (!value) { + return "Please select a property"; + } + return true; + }, + }, + ]; + + // Update the "customDataAttribute" field to use the static list + const destinationFields = [ + { + name: "directoryObjectType", + label: "Directory Object Type", + type: "autoComplete", + required: true, + placeholder: "Select an Object Type", + options: staticTargetTypes, + multiple: false, + creatable: false, + }, + { + name: "customDataAttribute", + label: "Destination Property", + type: "autoComplete", + required: true, + placeholder: "Select an Attribute", + api: { + url: "/api/ExecCustomData?Action=ListAvailableAttributes", + queryKey: "CustomAttributes", + dataKey: "Results", + dataFilter: (options) => + selectedDirectoryObjectType?.value + ? options.filter( + (option) => + (option?.addedFields?.isMultiValued === false && + selectedExtensionSyncDataset?.addedFields?.type === "object") || + (option?.addedFields?.isMultiValued === true && + selectedExtensionSyncDataset?.addedFields?.type === "array") + ) + : options, + valueField: "name", + labelField: "name", + showRefresh: true, + addedField: { + type: "type", + targetObject: "targetObject", + dataType: "dataType", + isMultiValued: "isMultiValued", + }, + }, + multiple: false, + sortOptions: true, + groupBy: (option) => option.addedFields.type, + renderGroup: (params) => ( +
  • + {params.group} + {params.children} +
  • + ), + creatable: false, + condition: { + field: "directoryObjectType", + compareType: "hasValue", + compareValue: true, + }, + }, + ]; + + return ( + + + + + + + + + Tenant Selection + + + + + + + Source Details + + {sourceFields.map((field, index) => ( + <> + {field?.condition ? ( + + + + ) : ( + + )} + + ))} + + + + + + Destination Details + + {destinationFields.map((field, index) => ( + <> + {field?.condition ? ( + + + + ) : ( + + )} + + ))} + + + + + + + + {selectedExtensionSyncDataset && ( + + ), + }, + { + label: "Description", + value: selectedExtensionSyncDataset?.addedFields?.description || "N/A", + }, + ]} + variant="outlined" + /> + )} + + {selectedAttribute && ( + , + }, + { + label: "Custom Data Type", + value: selectedAttribute?.addedFields?.type, + }, + { + label: "Target Object", + value: selectedAttribute?.addedFields?.targetObject, + }, + { + label: "Data Type", + value: selectedAttribute?.addedFields?.dataType, + }, + { + label: "Is Multi-Valued", + value: selectedAttribute?.addedFields?.isMultiValued ? "Yes" : "No", + }, + ]} + variant="outlined" + /> + )} + + + + + + + + + + + + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; diff --git a/src/pages/cipp/custom-data/mappings/edit.js b/src/pages/cipp/custom-data/mappings/edit.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/pages/cipp/custom-data/mappings/index.js b/src/pages/cipp/custom-data/mappings/index.js new file mode 100644 index 000000000000..4d9ff94f3e8e --- /dev/null +++ b/src/pages/cipp/custom-data/mappings/index.js @@ -0,0 +1,70 @@ +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { TabbedLayout } from "/src/layouts/TabbedLayout"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { Alert, Button, Link, SvgIcon, Typography } from "@mui/material"; +import { Add } from "@mui/icons-material"; +import tabOptions from "../tabOptions"; +import NextLink from "next/link"; +import { TrashIcon } from "@heroicons/react/24/outline"; + +const Page = () => { + const pageTitle = "Custom Data Mappings"; + + // Columns for the table + const columns = [ + "tenantFilter.label", + "tenantFilter.type", + "customDataAttribute.label", + "directoryObjectType.label", + "extensionSyncAttribute.label", + ]; + + const actions = [ + { + label: "Delete Mapping", + icon: , + url: "/api/ExecCustomData?Action=DeleteMapping", + type: "POST", + data: { + mappingName: "mappingName", + }, + confirmText: "Are you sure you want to delete the mapping '[mappingName]'?", + }, + ]; + + return ( + <> + + + + + Add Mapping + + } + tenantInTitle={false} + apiUrl="/api/ExecCustomData?Action=ListMappings" + apiDataKey="Results" + simpleColumns={columns} + filters={[]} + actions={actions} + /> + + ); +}; + +Page.getLayout = (page) => ( + + {page} + +); + +export default Page; diff --git a/src/pages/cipp/custom-data/tabOptions.json b/src/pages/cipp/custom-data/tabOptions.json index 59bca4062ad4..de0055483d82 100644 --- a/src/pages/cipp/custom-data/tabOptions.json +++ b/src/pages/cipp/custom-data/tabOptions.json @@ -6,5 +6,9 @@ { "label": "Schema Extensions", "path": "/cipp/custom-data/schema-extensions" + }, + { + "label": "Mappings", + "path": "/cipp/custom-data/mappings" } ] From e493eb310fef433b77544bbde77f0a16700dd20e Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 20 Mar 2025 01:52:45 -0400 Subject: [PATCH 0413/1184] Update add.js --- src/pages/cipp/custom-data/mappings/add.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/cipp/custom-data/mappings/add.js b/src/pages/cipp/custom-data/mappings/add.js index 69a304d065e2..c9cc31f94f33 100644 --- a/src/pages/cipp/custom-data/mappings/add.js +++ b/src/pages/cipp/custom-data/mappings/add.js @@ -202,8 +202,7 @@ const Page = () => { From 3944f811eb58d9245e1c76cb9f1d00dd86b85ae9 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar Date: Thu, 20 Mar 2025 11:58:25 +0100 Subject: [PATCH 0414/1184] fix for actions on user page --- src/components/actions-menu.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/actions-menu.js b/src/components/actions-menu.js index 92ef2f90f4fd..0207ee6513cd 100644 --- a/src/components/actions-menu.js +++ b/src/components/actions-menu.js @@ -11,7 +11,12 @@ export const ActionsMenu = (props) => { const popover = usePopover(); const [actionData, setActionData] = useState({ data: {}, action: {}, ready: false }); const createDialog = useDialog(); - + const handleActionDisabled = (row, action) => { + if (action?.condition) { + return !action.condition(row); + } + return false; + }; return ( <> + + + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; diff --git a/src/pages/cipp/custom-data/mappings/index.js b/src/pages/cipp/custom-data/mappings/index.js index 4d9ff94f3e8e..36d18004e55c 100644 --- a/src/pages/cipp/custom-data/mappings/index.js +++ b/src/pages/cipp/custom-data/mappings/index.js @@ -5,30 +5,36 @@ import { Alert, Button, Link, SvgIcon, Typography } from "@mui/material"; import { Add } from "@mui/icons-material"; import tabOptions from "../tabOptions"; import NextLink from "next/link"; -import { TrashIcon } from "@heroicons/react/24/outline"; +import { TrashIcon, PencilIcon } from "@heroicons/react/24/outline"; const Page = () => { const pageTitle = "Custom Data Mappings"; // Columns for the table const columns = [ - "tenantFilter.label", - "tenantFilter.type", - "customDataAttribute.label", - "directoryObjectType.label", - "extensionSyncAttribute.label", + "tenant", + "dataset", + "sourceType", + "directoryType", + "syncProperty", + "customDataAttribute", ]; const actions = [ + { + label: "Edit Mapping", + icon: , + link: "/cipp/custom-data/mappings/edit?id=[id]", + }, { label: "Delete Mapping", icon: , url: "/api/ExecCustomData?Action=DeleteMapping", type: "POST", data: { - mappingName: "mappingName", + id: "id", }, - confirmText: "Are you sure you want to delete the mapping '[mappingName]'?", + confirmText: "Are you sure you want to delete the mapping with ID '[id]'?", }, ]; @@ -36,6 +42,13 @@ const Page = () => { <> + + Custom data mappings are used to synchronize custom data to directory objects. You can add, edit, or delete mappings here. + + + } cardButton={ + } /> ); }; From 69ce24d53cf904fdb18f4d526ef1e818f0ebf2cf Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 21 Mar 2025 12:45:10 -0400 Subject: [PATCH 0435/1184] prettify tenant form --- .../CippWizard/CippAddTenantForm.jsx | 76 +++++++++++++++++-- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/src/components/CippWizard/CippAddTenantForm.jsx b/src/components/CippWizard/CippAddTenantForm.jsx index 35dafd6904fa..621f0a95522a 100644 --- a/src/components/CippWizard/CippAddTenantForm.jsx +++ b/src/components/CippWizard/CippAddTenantForm.jsx @@ -1,10 +1,57 @@ -import { InputAdornment } from "@mui/material"; -import { Grid } from "@mui/system"; +import { CircularProgress, InputAdornment } from "@mui/material"; +import { Box, Grid } from "@mui/system"; import CippFormComponent from "../CippComponents/CippFormComponent"; import { CippWizardStepButtons } from "./CippWizardStepButtons"; +import { ApiGetCall } from "../../api/ApiCall"; +import { useWatch, useFormState } from "react-hook-form"; +import debounce from "lodash/debounce"; +import { useState, useEffect } from "react"; export const CippAddTenantForm = (props) => { - const { formControl, onPreviousStep, onNextStep, currentStep } = props; + const { formControl, currentStep, onPreviousStep, onNextStep } = props; + + const tenantDomain = useWatch({ control: formControl.control, name: "TenantName" }); + const [debouncedTenantDomain, setDebouncedTenantDomain] = useState(""); + + const updateTenantDomain = debounce((value) => { + setDebouncedTenantDomain(value); + }, 500); + + useEffect(() => { + updateTenantDomain(tenantDomain); + return () => updateTenantDomain.cancel(); + }, [tenantDomain]); + + const checkDomain = ApiGetCall({ + url: "/api/AddTenant", + data: { action: "ValidateDomain", TenantName: debouncedTenantDomain }, + queryKey: `ValidateDomain-${debouncedTenantDomain}`, + waiting: debouncedTenantDomain !== "" && debouncedTenantDomain !== undefined, + }); + + useEffect(() => { + validateDomain(); + }, [checkDomain.data]); + + const validateDomain = () => { + console.log("validating domain"); + if (!tenantDomain) { + // set error state on TenantName form field + formControl.setError("TenantName", { type: "required", message: "Tenant Name is required" }); + } + if (checkDomain.isSuccess) { + if (checkDomain.data.Success === true) { + // clear error + formControl.clearErrors("TenantName"); + } else { + // set error state on TenantName form field + formControl.setError("TenantName", { type: "validate", message: checkDomain.data.Message }); + } + } + if (checkDomain.isError) { + formControl.setError("TenantName", { type: "error", message: "An error occurred" }); + } + }; const fields = [ { @@ -14,7 +61,23 @@ export const CippAddTenantForm = (props) => { type: "textField", required: true, InputProps: { - endAdornment: .onmicrosoft.com, + endAdornment: ( + + .onmicrosoft.com{" "} + {checkDomain.isFetching ? ( + + ) : ( + <> + {checkDomain.isSuccess && checkDomain.data.Success && ( + + )} + {checkDomain.isSuccess && !checkDomain.data.Success && ( + + )} + + )} + + ), }, gridSize: 12, }, @@ -102,10 +165,7 @@ export const CippAddTenantForm = (props) => { {fields.map((field, index) => ( - + ))} From 6f1b03930f1d2ec8c144d8b9b675550217807f6b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 21 Mar 2025 14:10:01 -0400 Subject: [PATCH 0436/1184] add tenant wizard --- .../CippWizard/CippAddTenantForm.jsx | 95 +++++++++++-------- .../tenant/administration/tenants/add.js | 2 - 2 files changed, 57 insertions(+), 40 deletions(-) diff --git a/src/components/CippWizard/CippAddTenantForm.jsx b/src/components/CippWizard/CippAddTenantForm.jsx index 621f0a95522a..0920454635a6 100644 --- a/src/components/CippWizard/CippAddTenantForm.jsx +++ b/src/components/CippWizard/CippAddTenantForm.jsx @@ -1,11 +1,11 @@ -import { CircularProgress, InputAdornment } from "@mui/material"; +import { CircularProgress, Divider, InputAdornment, Typography } from "@mui/material"; import { Box, Grid } from "@mui/system"; import CippFormComponent from "../CippComponents/CippFormComponent"; import { CippWizardStepButtons } from "./CippWizardStepButtons"; import { ApiGetCall } from "../../api/ApiCall"; -import { useWatch, useFormState } from "react-hook-form"; +import { useWatch } from "react-hook-form"; import debounce from "lodash/debounce"; -import { useState, useEffect } from "react"; +import React, { useState, useEffect } from "react"; export const CippAddTenantForm = (props) => { const { formControl, currentStep, onPreviousStep, onNextStep } = props; @@ -54,6 +54,10 @@ export const CippAddTenantForm = (props) => { }; const fields = [ + { + type: "header", + label: "Company Information", + }, { name: "TenantName", label: "Tenant Name", @@ -90,32 +94,39 @@ export const CippAddTenantForm = (props) => { placeholder: "Enter the registered company/organization name", }, { - name: "FirstName", - label: "First Name", + name: "AddressLine1", + label: "Address Line 1", type: "textField", required: true, - placeholder: "Enter the first name of the contact person", + placeholder: "Enter the primary address line", }, { - name: "LastName", - label: "Last Name", + name: "AddressLine2", + label: "Address Line 2", + type: "textField", + required: false, + placeholder: "Enter the secondary address line (optional)", + }, + { + name: "City", + label: "City", type: "textField", required: true, - placeholder: "Enter the last name of the contact person", + placeholder: "Enter the city", }, { - name: "Email", - label: "Email", - type: "email", + name: "State", + label: "State", + type: "textField", required: true, - placeholder: "Enter the customer's email address", + placeholder: "Enter the state or region", }, { - name: "PhoneNumber", - label: "Phone Number", + name: "PostalCode", + label: "Postal Code", type: "textField", required: true, - placeholder: "Enter the contact phone number", + placeholder: "Enter the postal code", }, { name: "Country", @@ -125,48 +136,56 @@ export const CippAddTenantForm = (props) => { placeholder: "Enter the country (e.g., US)", }, { - name: "City", - label: "City", - type: "textField", - required: true, - placeholder: "Enter the city", + type: "header", + label: "Contact Information", }, { - name: "State", - label: "State", + name: "FirstName", + label: "First Name", type: "textField", required: true, - placeholder: "Enter the state or region", + placeholder: "Enter the first name of the contact person", }, { - name: "AddressLine1", - label: "Address Line 1", + name: "LastName", + label: "Last Name", type: "textField", required: true, - placeholder: "Enter the primary address line", + placeholder: "Enter the last name of the contact person", }, { - name: "AddressLine2", - label: "Address Line 2", + name: "Email", + label: "Email", type: "textField", - required: false, - placeholder: "Enter the secondary address line (optional)", + required: true, + placeholder: "Enter the customer's email address", }, { - name: "PostalCode", - label: "Postal Code", + name: "PhoneNumber", + label: "Phone Number", type: "textField", required: true, - placeholder: "Enter the postal code", + placeholder: "Enter the contact phone number", }, ]; return ( - + {fields.map((field, index) => ( - - - + + {field.type === "header" ? ( + <> + + {field.label} + + + + ) : ( + + + + )} + ))} { title: "Step 2", description: "Enter Tenant Details", component: CippAddTenantForm, - componentProps: {}, }, { title: "Step 3", description: "Confirm and Submit", component: CippAddTenantConfirmation, - componentProps: {}, }, ]; From fcdb832def12bad303bc9f3f0f48a418af43aeb3 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 21 Mar 2025 14:12:30 -0400 Subject: [PATCH 0437/1184] Update CippAddTenantForm.jsx --- .../CippWizard/CippAddTenantForm.jsx | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/components/CippWizard/CippAddTenantForm.jsx b/src/components/CippWizard/CippAddTenantForm.jsx index 0920454635a6..995709e9c904 100644 --- a/src/components/CippWizard/CippAddTenantForm.jsx +++ b/src/components/CippWizard/CippAddTenantForm.jsx @@ -1,5 +1,5 @@ import { CircularProgress, Divider, InputAdornment, Typography } from "@mui/material"; -import { Box, Grid } from "@mui/system"; +import { Box, Grid, Stack } from "@mui/system"; import CippFormComponent from "../CippComponents/CippFormComponent"; import { CippWizardStepButtons } from "./CippWizardStepButtons"; import { ApiGetCall } from "../../api/ApiCall"; @@ -170,32 +170,31 @@ export const CippAddTenantForm = (props) => { ]; return ( - - {fields.map((field, index) => ( - - {field.type === "header" ? ( - <> - - {field.label} - + + + {fields.map((field, index) => ( + + {field.type === "header" ? ( + <> + + {field.label} + + + + ) : ( + + - - ) : ( - - - - )} - - ))} - - + )} + + ))} - + + ); }; From 722f5dd81aee4952d28223f49b72cb3077eb7376 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 21 Mar 2025 14:36:46 -0400 Subject: [PATCH 0438/1184] confirmation page tweaks --- .../CippWizard/CippAddTenantConfirmation.jsx | 100 ++++++------------ .../CippWizard/CippAddTenantForm.jsx | 2 +- 2 files changed, 31 insertions(+), 71 deletions(-) diff --git a/src/components/CippWizard/CippAddTenantConfirmation.jsx b/src/components/CippWizard/CippAddTenantConfirmation.jsx index 5a1977e4cca8..45e7f5db6cd4 100644 --- a/src/components/CippWizard/CippAddTenantConfirmation.jsx +++ b/src/components/CippWizard/CippAddTenantConfirmation.jsx @@ -1,77 +1,37 @@ import { useState, useEffect } from "react"; import { Grid, Typography, CircularProgress } from "@mui/material"; import { CippWizardStepButtons } from "./CippWizardStepButtons"; +import { Stack } from "@mui/system"; +import { CippPropertyListCard } from "../CippCards/CippPropertyListCard"; -export const CippAddTenantConfirmation = ({ formData, onSubmit, onBack }) => { - const [domainStatus, setDomainStatus] = useState(null); - const [addressStatus, setAddressStatus] = useState(null); - const [loading, setLoading] = useState(true); - - useEffect(() => { - const checkDomainAvailability = async () => { - try { - const response = await fetch("/api/AddTenant", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ Action: "ValidateDomain", TenantName: formData.Domain }), - }); - const result = await response.json(); - setDomainStatus(result.Status === "Success" ? "Available" : "Unavailable"); - } catch { - setDomainStatus("Error"); - } - }; - - const validateAddress = async () => { - try { - const response = await fetch("/api/AddTenant", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - Action: "ValidateAddress", - AddressLine1: formData.AddressLine1, - AddressLine2: formData.AddressLine2, - City: formData.City, - State: formData.State, - PostalCode: formData.PostalCode, - Country: formData.Country, - }), - }); - const result = await response.json(); - setAddressStatus(result.Status === "Success" ? "Valid" : "Invalid"); - } catch { - setAddressStatus("Error"); - } - }; - - const performChecks = async () => { - setLoading(true); - await Promise.all([checkDomainAvailability(), validateAddress()]); - setLoading(false); - }; - - performChecks(); - }, [formData]); - - const isReadyToSubmit = domainStatus === "Available" && addressStatus === "Valid"; - +export const CippAddTenantConfirmation = ({ + postUrl, + formControl, + onSubmit, + onPreviousStep, + currentStep, +}) => { + const values = formControl.getValues(); + console.log("values", values); return ( - - - Confirmation - - Please review the results of the domain availability and address validation before submitting. - - - - Domain Status: {loading ? : domainStatus} - - - Address Status: {loading ? : addressStatus} - - - - - + + Confirmation + { + return { label: item, value: values[item] }; + })} + /> + + ); }; diff --git a/src/components/CippWizard/CippAddTenantForm.jsx b/src/components/CippWizard/CippAddTenantForm.jsx index 995709e9c904..1cd91346d165 100644 --- a/src/components/CippWizard/CippAddTenantForm.jsx +++ b/src/components/CippWizard/CippAddTenantForm.jsx @@ -34,7 +34,6 @@ export const CippAddTenantForm = (props) => { }, [checkDomain.data]); const validateDomain = () => { - console.log("validating domain"); if (!tenantDomain) { // set error state on TenantName form field formControl.setError("TenantName", { type: "required", message: "Tenant Name is required" }); @@ -190,6 +189,7 @@ export const CippAddTenantForm = (props) => { ))} Date: Fri, 21 Mar 2025 16:02:57 -0400 Subject: [PATCH 0439/1184] tenant wizard tweaks --- src/components/CippWizard/CippAddTenantConfirmation.jsx | 3 ++- src/pages/tenant/administration/tenants/index.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/CippWizard/CippAddTenantConfirmation.jsx b/src/components/CippWizard/CippAddTenantConfirmation.jsx index 45e7f5db6cd4..fb63cb8c5feb 100644 --- a/src/components/CippWizard/CippAddTenantConfirmation.jsx +++ b/src/components/CippWizard/CippAddTenantConfirmation.jsx @@ -3,6 +3,7 @@ import { Grid, Typography, CircularProgress } from "@mui/material"; import { CippWizardStepButtons } from "./CippWizardStepButtons"; import { Stack } from "@mui/system"; import { CippPropertyListCard } from "../CippCards/CippPropertyListCard"; +import { getCippTranslation } from "../../utils/get-cipp-translation"; export const CippAddTenantConfirmation = ({ postUrl, @@ -22,7 +23,7 @@ export const CippAddTenantConfirmation = ({ layout="dual" showDivider={false} propertyItems={Object.keys(values)?.map((item) => { - return { label: item, value: values[item] }; + return { label: getCippTranslation(item), value: values[item] }; })} /> { actions={actions} cardButton={ } From 05868b4f72fa83a4933019f8797e9f887c5476f5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 22 Mar 2025 12:59:07 -0400 Subject: [PATCH 0441/1184] Update index.js --- src/pages/tenant/administration/tenants/index.js | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/pages/tenant/administration/tenants/index.js b/src/pages/tenant/administration/tenants/index.js index 8588ffb0e69a..83e23d5504aa 100644 --- a/src/pages/tenant/administration/tenants/index.js +++ b/src/pages/tenant/administration/tenants/index.js @@ -42,21 +42,6 @@ const Page = () => { tenantFilter: null, }} actions={actions} - cardButton={ - - } /> ); }; From 602dd6c6708ce2fed53719658bc2ade4a7e8c30f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 22 Mar 2025 13:56:02 -0400 Subject: [PATCH 0442/1184] fix multiple input fields in audit logs --- src/pages/tenant/administration/alert-configuration/alert.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tenant/administration/alert-configuration/alert.jsx b/src/pages/tenant/administration/alert-configuration/alert.jsx index ff2ec105024b..ba6943f77d9c 100644 --- a/src/pages/tenant/administration/alert-configuration/alert.jsx +++ b/src/pages/tenant/administration/alert-configuration/alert.jsx @@ -427,7 +427,7 @@ const AlertWizard = () => { > Date: Sat, 22 Mar 2025 22:02:20 -0400 Subject: [PATCH 0443/1184] fix: autocomplete exception on incorrect value types --- src/components/CippComponents/CippAutocomplete.jsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index d04c46d7a6f1..1778b1fb34c7 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -253,18 +253,23 @@ export const CippAutoComplete = (props) => { (option) => params.inputValue === option.value || params.inputValue === option.label ); if (params.inputValue !== "" && creatable && !isExisting) { - filtered.push({ + const newOption = { label: `Add option: "${params.inputValue}"`, value: params.inputValue, manual: true, - }); + }; + if (!filtered.some((option) => option.value === newOption.value)) { + filtered.push(newOption); + } } return filtered; }} size="small" defaultValue={ - typeof defaultValue === "string" + typeof defaultValue === "object" && multiple + ? [defaultValue] + : typeof defaultValue === "string" ? { label: defaultValue, value: defaultValue } : defaultValue } From 7738677fc3a160631e02153e011c6bb6677cd8d8 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 22 Mar 2025 22:14:47 -0400 Subject: [PATCH 0444/1184] fix default values --- src/components/CippComponents/CippAutocomplete.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 1778b1fb34c7..9a14c1e7e201 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -267,7 +267,9 @@ export const CippAutoComplete = (props) => { }} size="small" defaultValue={ - typeof defaultValue === "object" && multiple + Array.isArray(defaultValue) + ? defaultValue + : typeof defaultValue === "object" && multiple ? [defaultValue] : typeof defaultValue === "string" ? { label: defaultValue, value: defaultValue } From 736ddaccb7928c474e3020e0f84f2cd1e9348a20 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 22 Mar 2025 22:24:11 -0400 Subject: [PATCH 0445/1184] improve default value population --- src/components/CippComponents/CippAutocomplete.jsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippAutocomplete.jsx b/src/components/CippComponents/CippAutocomplete.jsx index 9a14c1e7e201..4edb340549ba 100644 --- a/src/components/CippComponents/CippAutocomplete.jsx +++ b/src/components/CippComponents/CippAutocomplete.jsx @@ -227,6 +227,14 @@ export const CippAutoComplete = (props) => { return keyParts.join("-"); }, [defaultValue, preselectedValue, api?.url, currentTenant]); + const lookupOptionByValue = useCallback( + (value) => { + const foundOption = memoizedOptions.find((option) => option.value === value); + return foundOption || { label: value, value: value }; + }, + [memoizedOptions] + ); + return ( { size="small" defaultValue={ Array.isArray(defaultValue) - ? defaultValue + ? defaultValue.map((item) => + typeof item === "string" ? lookupOptionByValue(item) : item + ) : typeof defaultValue === "object" && multiple ? [defaultValue] : typeof defaultValue === "string" - ? { label: defaultValue, value: defaultValue } + ? lookupOptionByValue(defaultValue) : defaultValue } name={name} From c8b3cac4ad92bfec0c84691f77f91837b88d97a2 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 22 Mar 2025 22:35:43 -0400 Subject: [PATCH 0446/1184] add delete invite --- .../tenant/gdap-management/invites/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/pages/tenant/gdap-management/invites/index.js b/src/pages/tenant/gdap-management/invites/index.js index 54670b22330e..b24195bb8270 100644 --- a/src/pages/tenant/gdap-management/invites/index.js +++ b/src/pages/tenant/gdap-management/invites/index.js @@ -5,11 +5,27 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Button } from "@mui/material"; import { Add } from "@mui/icons-material"; import Link from "next/link"; +import { TrashIcon } from "@heroicons/react/24/outline"; const pageTitle = "GDAP Invites"; const simpleColumns = ["Timestamp", "RowKey", "InviteUrl", "OnboardingUrl", "RoleMappings"]; const apiUrl = "/api/ListGDAPInvite"; +const actions = [ + { + label: "Delete Invite", + url: "/api/ExecGDAPInvite", + type: "POST", + icon: , + confirmText: + "Are you sure you want to delete this invite? This only removes the entry from the database, GDAP relationships cannot be terminated once they are in approval pending status.", + data: { + Action: "Delete", + InviteId: "RowKey", + }, + }, +]; + const Page = () => { return ( { title={pageTitle} apiUrl={apiUrl} simpleColumns={simpleColumns} + actions={actions} tenantInTitle={false} queryKey="ListGDAPInvite" /> From 56d4d46746d1c4a8fea5881dcf0a9054b2775c69 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 00:46:49 -0400 Subject: [PATCH 0447/1184] gdap improvements --- .../CippComponents/CippGdapActions.jsx | 96 +++++++++++++++++++ src/components/actions-menu.js | 2 +- .../gdap-management/relationships/index.js | 57 +---------- .../relationships/relationship/index.js | 6 +- 4 files changed, 104 insertions(+), 57 deletions(-) create mode 100644 src/components/CippComponents/CippGdapActions.jsx diff --git a/src/components/CippComponents/CippGdapActions.jsx b/src/components/CippComponents/CippGdapActions.jsx new file mode 100644 index 000000000000..1e226e563729 --- /dev/null +++ b/src/components/CippComponents/CippGdapActions.jsx @@ -0,0 +1,96 @@ +import { EyeIcon } from "@heroicons/react/24/outline"; +import { + AdminPanelSettings, + GppBad, + HourglassBottom, + LockReset, + OpenInNew, + PlayArrow, +} from "@mui/icons-material"; +import { Alert, Typography } from "@mui/material"; + +export const CippGdapActions = () => [ + { + label: "View Relationship", + link: "/tenant/gdap-management/relationships/relationship?id=[id]", + color: "primary", + icon: , + }, + { + label: "Start Onboarding", + link: "/tenant/gdap-management/onboarding/start?id=[id]", + color: "primary", + icon: , + showInActionsMenu: true, + }, + { + label: "Open Relationship in Partner Center", + link: "https://partner.microsoft.com/en-us/dashboard/commerce2/customers/[customer.tenantId]/adminrelationships/[id]", + color: "info", + icon: , + showInActionsMenu: true, + }, + { + label: "Enable automatic extension", + type: "GET", + url: "/api/ExecAutoExtendGDAP", + data: { ID: "id" }, + confirmText: "Are you sure you want to enable auto-extend for this relationship?", + color: "info", + icon: , + }, + { + label: "Remove Global Administrator from Relationship", + type: "GET", + url: "/api/ExecGDAPRemoveGArole", + data: { GDAPID: "id" }, + confirmText: "Are you sure you want to remove Global Administrator from this relationship?", + color: "danger", + icon: , + }, + { + label: "Reset Group Mappings", + type: "POST", + url: "/api/ExecGDAPAccessAssignment", + icon: , + data: { Id: "id", Action: "ResetMappings" }, + fields: [ + { + name: "RoleTemplateId", + label: "Role Template", + placeholder: "Select a role template to apply to this relationship.", + type: "select", + api: { + url: "/api/ExecGDAPRoleTemplate", + queryKey: "GDAPRoleTemplate", + dataKey: "Results", + valueField: "TemplateId", + labelField: "TemplateId", + showRefresh: true, + }, + }, + ], + confirmText: ( + <> + + Are you sure you want to reset the group mappings for this relationship? + + + This action will remove all existing group mappings and apply the selected role template + to the relationship. + + + ), + }, + { + label: "Terminate Relationship", + type: "GET", + url: "/api/ExecDeleteGDAPRelationship", + data: { GDAPID: "id" }, + confirmText: "Are you sure you want to terminate this relationship?", + color: "error", + icon: , + }, +]; + +export default CippGdapActions; diff --git a/src/components/actions-menu.js b/src/components/actions-menu.js index 19cacdd0b495..b63ed33e74c8 100644 --- a/src/components/actions-menu.js +++ b/src/components/actions-menu.js @@ -57,7 +57,7 @@ export const ActionsMenu = (props) => { }} > {actions - ?.filter((action) => !action.link) + ?.filter((action) => !action.link || action.showInActionsMenu) .map((action, index) => ( , - }, - { - label: "Start Onboarding", - link: "/tenant/gdap-management/onboarding/start?id=[id]", - color: "primary", - icon: , - }, - { - label: "Open Relationship in Partner Center", - link: "https://partner.microsoft.com/en-us/dashboard/commerce2/customers/[customer.tenantId]/adminrelationships/[id]", - color: "info", - icon: , - }, - { - label: "Enable automatic extension", - type: "GET", - url: "/api/ExecAutoExtendGDAP", - data: { ID: "id" }, - confirmText: "Are you sure you want to enable auto-extend for this relationship?", - color: "info", - icon: , - }, - { - label: "Remove Global Administrator from Relationship", - type: "GET", - url: "/api/ExecGDAPRemoveGArole", - data: { GDAPID: "id" }, - confirmText: "Are you sure you want to remove Global Administrator from this relationship?", - color: "danger", - icon: , - }, - { - label: "Terminate Relationship", - type: "GET", - url: "/api/ExecDeleteGDAPRelationship", - data: { GDAPID: "id" }, - confirmText: "Are you sure you want to terminate this relationship?", - color: "error", - icon: , - }, -]; +const actions = CippGdapActions(); const simpleColumns = [ "customer.displayName", diff --git a/src/pages/tenant/gdap-management/relationships/relationship/index.js b/src/pages/tenant/gdap-management/relationships/relationship/index.js index ef305c60b35e..1e0b18b6ec7d 100644 --- a/src/pages/tenant/gdap-management/relationships/relationship/index.js +++ b/src/pages/tenant/gdap-management/relationships/relationship/index.js @@ -15,11 +15,13 @@ import CIPPDefaultGDAPRoles from "/src/data/CIPPDefaultGDAPRoles.json"; import { CippCopyToClipBoard } from "../../../../../components/CippComponents/CippCopyToClipboard"; import { Schedule } from "@mui/icons-material"; import { useEffect, useState } from "react"; +import CippGdapActions from "../../../../../components/CippComponents/CippGdapActions"; const Page = () => { const router = useRouter(); const { id } = router.query; const [relationshipProperties, setRelationshipProperties] = useState([]); + const [relationshipData, setRelationshipData] = useState({}); const relationshipRequest = ApiGetCall({ url: `/api/ListGraphRequest?Endpoint=tenantRelationships/delegatedAdminRelationships/${id}`, @@ -67,7 +69,7 @@ const Page = () => { useEffect(() => { if (relationshipRequest.isSuccess) { const data = relationshipRequest?.data?.Results?.[0]; - + setRelationshipData(data); var properties = [ { label: "Customer", @@ -135,6 +137,8 @@ const Page = () => { title={title} subtitle={subtitle} isFetching={relationshipRequest.isLoading} + actions={CippGdapActions()} + actionsData={relationshipData} > {relationshipRequest.isLoading && } {relationshipRequest.isSuccess && ( From 62441ca9ce233371b6758953735dc77a0a2f81bf Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 00:50:45 -0400 Subject: [PATCH 0448/1184] tweak headered tab layout only make contents scroll --- src/layouts/HeaderedTabbedLayout.jsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/layouts/HeaderedTabbedLayout.jsx b/src/layouts/HeaderedTabbedLayout.jsx index 35213a677746..5f562be7860e 100644 --- a/src/layouts/HeaderedTabbedLayout.jsx +++ b/src/layouts/HeaderedTabbedLayout.jsx @@ -108,7 +108,15 @@ export const HeaderedTabbedLayout = (props) => { - {children} + + {children} + From a0a022c484318db6d4ff6b5fd67f374ee59c5d81 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 01:07:19 -0400 Subject: [PATCH 0449/1184] feat: adjustable max height offset for tables --- src/components/CippTable/CippDataTable.js | 11 ++++++++++- src/components/CippTable/util-tablemode.js | 7 ++++--- .../relationships/relationship/mappings.js | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 4052a957a2f8..95ecbe8896ec 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -53,6 +53,7 @@ export const CippDataTable = (props) => { incorrectDataMessage = "Data not in correct format", onChange, filters, + maxHeightOffset = "380px", } = props; const [columnVisibility, setColumnVisibility] = useState(initialColumnVisibility); const [configuredSimpleColumns, setConfiguredSimpleColumns] = useState(simpleColumns); @@ -156,7 +157,15 @@ export const CippDataTable = (props) => { // Apply the modeInfo directly const [modeInfo] = useState( - utilTableMode(columnVisibility, simple, actions, configuredSimpleColumns, offCanvas, onChange) + utilTableMode( + columnVisibility, + simple, + actions, + configuredSimpleColumns, + offCanvas, + onChange, + maxHeightOffset + ) ); //create memoized version of usedColumns, and usedData const memoizedColumns = useMemo(() => usedColumns, [usedColumns]); diff --git a/src/components/CippTable/util-tablemode.js b/src/components/CippTable/util-tablemode.js index 7c3fb5cb8078..17cd92006a7e 100644 --- a/src/components/CippTable/util-tablemode.js +++ b/src/components/CippTable/util-tablemode.js @@ -6,7 +6,8 @@ export const utilTableMode = ( actions, simpleColumns, offCanvas, - onChange + onChange, + maxHeightOffset = "380px" ) => { const settings = useSettings(); if (mode === true) { @@ -20,7 +21,7 @@ export const utilTableMode = ( rowsPerPageOptions: [25, 50, 100, 250, 500], }, muiTableContainerProps: { - sx: { maxHeight: `calc(100vh - 380px)` }, + sx: { maxHeight: `calc(100vh - ${maxHeightOffset})` }, }, initialState: { columnOrder: [...simpleColumns], @@ -57,7 +58,7 @@ export const utilTableMode = ( rowsPerPageOptions: [25, 50, 100, 250, 500], }, muiTableContainerProps: { - sx: { maxHeight: `calc(100vh - 380px)` }, + sx: { maxHeight: `calc(100vh - ${maxHeightOffset})` }, }, displayColumnDefOptions: { "mrt-row-actions": { diff --git a/src/pages/tenant/gdap-management/relationships/relationship/mappings.js b/src/pages/tenant/gdap-management/relationships/relationship/mappings.js index b521713c4da9..dd10ce113ff2 100644 --- a/src/pages/tenant/gdap-management/relationships/relationship/mappings.js +++ b/src/pages/tenant/gdap-management/relationships/relationship/mappings.js @@ -67,6 +67,7 @@ const Page = () => { queryKey: `AccessAssignments-${id}`, }} simpleColumns={["group.displayName", "status", "createdDateTime", "roles", "members"]} + maxHeightOffset="550px" /> )} From c3f1a99eb1a1091c4569740e464b1fd9be69e6fb Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 01:13:47 -0400 Subject: [PATCH 0450/1184] cleanup imports and update text --- src/components/CippComponents/CippGdapActions.jsx | 3 ++- .../relationships/relationship/mappings.js | 9 --------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/components/CippComponents/CippGdapActions.jsx b/src/components/CippComponents/CippGdapActions.jsx index 1e226e563729..c7474ab89ad9 100644 --- a/src/components/CippComponents/CippGdapActions.jsx +++ b/src/components/CippComponents/CippGdapActions.jsx @@ -77,7 +77,8 @@ export const CippGdapActions = () => [ This action will remove all existing group mappings and apply the selected role template - to the relationship. + to the relationship. Use this to fix incorrect group mappings or permission overlap issues + (e.g removing AdminAgents or HelpdeskAgents). ), diff --git a/src/pages/tenant/gdap-management/relationships/relationship/mappings.js b/src/pages/tenant/gdap-management/relationships/relationship/mappings.js index dd10ce113ff2..5d0812a1e4df 100644 --- a/src/pages/tenant/gdap-management/relationships/relationship/mappings.js +++ b/src/pages/tenant/gdap-management/relationships/relationship/mappings.js @@ -1,19 +1,10 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; -import { useSettings } from "/src/hooks/use-settings"; import { useRouter } from "next/router"; import { ApiGetCall } from "/src/api/ApiCall"; -import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton"; import { HeaderedTabbedLayout } from "/src/layouts/HeaderedTabbedLayout"; import tabOptions from "./tabOptions.json"; -import { Box, Grid, Stack } from "@mui/system"; import { CippTimeAgo } from "../../../../../components/CippComponents/CippTimeAgo"; -import { getCippTranslation } from "../../../../../utils/get-cipp-translation"; -import { CippPropertyListCard } from "../../../../../components/CippCards/CippPropertyListCard"; -import { getCippFormatting } from "../../../../../utils/get-cipp-formatting"; import { CippDataTable } from "../../../../../components/CippTable/CippDataTable"; -import { Alert, Divider, Link, Typography } from "@mui/material"; -import CIPPDefaultGDAPRoles from "/src/data/CIPPDefaultGDAPRoles.json"; -import { CippCopyToClipBoard } from "../../../../../components/CippComponents/CippCopyToClipboard"; import { Schedule } from "@mui/icons-material"; const Page = () => { From a8a19ca70b6e1c3c4f7ae61ad9fc6b8f5ce5a3cc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 01:17:11 -0400 Subject: [PATCH 0451/1184] backUrl support on headered tabbed layout page --- src/layouts/HeaderedTabbedLayout.jsx | 13 +++++++++++-- .../relationships/relationship/index.js | 1 + .../relationships/relationship/mappings.js | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/layouts/HeaderedTabbedLayout.jsx b/src/layouts/HeaderedTabbedLayout.jsx index 5f562be7860e..82f5b070d880 100644 --- a/src/layouts/HeaderedTabbedLayout.jsx +++ b/src/layouts/HeaderedTabbedLayout.jsx @@ -18,7 +18,16 @@ import { import { ActionsMenu } from "/src/components/actions-menu"; export const HeaderedTabbedLayout = (props) => { - const { children, tabOptions, title, subtitle, actions, actionsData, isFetching = false } = props; + const { + children, + tabOptions, + title, + subtitle, + actions, + actionsData, + isFetching = false, + backUrl, + } = props; const router = useRouter(); const pathname = usePathname(); @@ -53,7 +62,7 @@ export const HeaderedTabbedLayout = (props) => {
    + ({ label: role.Name, value: role.ObjectId }))} + multiple={true} + creatable={false} + required={true} + validators={{ + validate: (value) => { + if (!value || value.length === 0) { + return "Please select at least one GDAP Role"; + } + return true; + }, + }} /> - - - - - ({ label: role.Name, value: role.ObjectId }))} - multiple={true} - creatable={false} - required={true} - validators={{ - validate: (value) => { - if (!value || value.length === 0) { - return "Please select at least one GDAP Role"; - } - return true; - }, - }} - /> - {selectedRoles?.some((role) => role.value === "62e90394-69f5-4237-9190-012177145e10") && ( - - The Company Administrator role is a highly privileged role that should be used with - caution. GDAP Relationships with this role will not be eligible for auto-extend. - - )} - {selectedRoles?.length > 0 && ( - <> The following groups will be created in your partner tenant if they do not already exist: + {console.log(selectedGdapRoles)} { - return { - label: `M365 GDAP ${role.label}${customSuffix ? ` - ${customSuffix}` : ""}`, - value: GDAPRoles.find((r) => r.ObjectId === role.value).Description, - }; - })} + propertyItems={selectedGdapRoles?.map((role) => ({ + label: `M365 GDAP ${role.label}${customSuffix ? ` - ${customSuffix}` : ""}`, + value: GDAPRoles.find((r) => r.ObjectId === role.value).Description, + }))} /> - - )} + + + + The Company Administrator role is a highly privileged role that should be used with + caution. GDAP Relationships with this role will not be eligible for auto-extend. + + + + + + + + In Advanced Mode, you can manually map existing groups to GDAP roles. This + functionality is designed to help map existing groups to GDAP roles that do not + match the default naming convention. Certain groups are unavailable for mapping such + as All Users, AdminAgents, HelpdeskAgents and SalesAgents. Use extreme caution when + mapping roles in this mode. + + + + + ({ + label: group.displayName, + value: group.id, + }))} + isFetching={groupList.isFetching} + multiple={false} + required={true} + /> + + + + + + + + + + ({ label: role.Name, value: role.ObjectId }))} + multiple={false} + required={true} + /> + + + + + + + + + + + ), + customFunction: handleRemoveMapping, + noConfirm: true, + }, + ]} + /> + From a661a64a95f5ab156c2bb12cea655827096eed30 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 02:47:07 -0400 Subject: [PATCH 0453/1184] Update add.js --- src/pages/tenant/gdap-management/roles/add.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/tenant/gdap-management/roles/add.js b/src/pages/tenant/gdap-management/roles/add.js index 6d4d6f742bc8..4c2a4bb60e95 100644 --- a/src/pages/tenant/gdap-management/roles/add.js +++ b/src/pages/tenant/gdap-management/roles/add.js @@ -226,6 +226,7 @@ const Page = () => { isFetching={groupList.isFetching} multiple={false} required={true} + creatable={false} /> @@ -244,6 +245,7 @@ const Page = () => { options={GDAPRoles.map((role) => ({ label: role.Name, value: role.ObjectId }))} multiple={false} required={true} + creatable={false} /> From b04e67cef33bdddf94b23112fc9c55aeb87bfa1f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 11:05:12 -0400 Subject: [PATCH 0454/1184] GDAP tweaks --- .../CippFormPages/CippAddEditGdapRoleTemplate.jsx | 1 + src/pages/tenant/gdap-management/roles/add.js | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/CippFormPages/CippAddEditGdapRoleTemplate.jsx b/src/components/CippFormPages/CippAddEditGdapRoleTemplate.jsx index cd2b5b4a4e0c..1ed0e4163f88 100644 --- a/src/components/CippFormPages/CippAddEditGdapRoleTemplate.jsx +++ b/src/components/CippFormPages/CippAddEditGdapRoleTemplate.jsx @@ -44,6 +44,7 @@ export const CippAddEditGdapRoleTemplate = (props) => { return true; }, }} + sortOptions={true} /> ); diff --git a/src/pages/tenant/gdap-management/roles/add.js b/src/pages/tenant/gdap-management/roles/add.js index 4c2a4bb60e95..6ac2b4250dbf 100644 --- a/src/pages/tenant/gdap-management/roles/add.js +++ b/src/pages/tenant/gdap-management/roles/add.js @@ -153,7 +153,9 @@ const Page = () => { name="gdapRoles" label="Select GDAP Roles" type="autoComplete" - options={GDAPRoles.map((role) => ({ label: role.Name, value: role.ObjectId }))} + options={GDAPRoles.filter( + (role) => role.ObjectId !== "7495fdc4-34c4-4d15-a289-98788ce399fd" && role.ObjectId !== "aaf43236-0c0d-4d5f-883a-6955382ac081" + ).map((role) => ({ label: role.Name, value: role.ObjectId }))} multiple={true} creatable={false} required={true} @@ -242,7 +244,11 @@ const Page = () => { name="selectedRole" label="Select GDAP Role" type="autoComplete" - options={GDAPRoles.map((role) => ({ label: role.Name, value: role.ObjectId }))} + options={GDAPRoles.filter( + (role) => + role.ObjectId !== "62e90394-69f5-4237-9190-012177145e10" && // Partner Tier 1 + role.ObjectId !== "17315797-102d-40b4-93e0-432062caca18" // Partner Tier 2 + ).map((role) => ({ label: role.Name, value: role.ObjectId }))} multiple={false} required={true} creatable={false} @@ -260,7 +266,7 @@ const Page = () => { Date: Sun, 23 Mar 2025 11:34:24 -0400 Subject: [PATCH 0455/1184] update wording --- src/components/CippComponents/CippApiDialog.jsx | 2 +- src/components/CippComponents/CippGdapActions.jsx | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 5883821958b8..b4295a05c033 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -333,7 +333,7 @@ export const CippApiDialog = (props) => { {title} - {confirmText} + {confirmText} diff --git a/src/components/CippComponents/CippGdapActions.jsx b/src/components/CippComponents/CippGdapActions.jsx index c7474ab89ad9..9e69b74652a6 100644 --- a/src/components/CippComponents/CippGdapActions.jsx +++ b/src/components/CippComponents/CippGdapActions.jsx @@ -76,9 +76,16 @@ export const CippGdapActions = () => [ Are you sure you want to reset the group mappings for this relationship? - This action will remove all existing group mappings and apply the selected role template - to the relationship. Use this to fix incorrect group mappings or permission overlap issues - (e.g removing AdminAgents or HelpdeskAgents). + Resetting GDAP group mappings will perform the following actions: +
      +
    • Remove groups assignments that are not part of the Role Template
    • +
    • Update existing group assignments to match the Role Template
    • +
    • Create new group assignments based on the Role Template
    • +
    +
    + + This is useful for fixing GDAP relationships that have overlapping roles or incorrect + group assignments (e.g. using AdminAgents or HelpdeskAgents). ), From 5c2491e943d021caf59b0fd8a376400d7be1efc5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 11:47:45 -0400 Subject: [PATCH 0456/1184] gdap tweaks set field to required --- src/components/CippComponents/CippGdapActions.jsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/components/CippComponents/CippGdapActions.jsx b/src/components/CippComponents/CippGdapActions.jsx index 9e69b74652a6..02d6982be108 100644 --- a/src/components/CippComponents/CippGdapActions.jsx +++ b/src/components/CippComponents/CippGdapActions.jsx @@ -68,6 +68,15 @@ export const CippGdapActions = () => [ labelField: "TemplateId", showRefresh: true, }, + required: true, + validators: { + validate: (value) => { + if (!value) { + return "Role Template is required"; + } + return true; + }, + }, }, ], confirmText: ( From c2f51132400ba50f7d4689772e28522fee5e8f92 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 11:48:05 -0400 Subject: [PATCH 0457/1184] set dialogs to full screen on mobile --- src/components/CippComponents/CippApiDialog.jsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index b4295a05c033..28bfd7901a03 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -7,6 +7,7 @@ import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { useSettings } from "../../hooks/use-settings"; import CippFormComponent from "./CippFormComponent"; +import { useMediaQuery } from "@mui/material"; export const CippApiDialog = (props) => { const { @@ -25,6 +26,12 @@ export const CippApiDialog = (props) => { const [partialResults, setPartialResults] = useState([]); const [isFormSubmitted, setIsFormSubmitted] = useState(false); + const mdDown = useMediaQuery((theme) => theme.breakpoints.down("md")); + + if (mdDown) { + other.fullScreen = true; + } + useEffect(() => { if (createDialog.open) { setIsFormSubmitted(false); @@ -97,7 +104,7 @@ export const CippApiDialog = (props) => { } else { newData[key] = value; } - } else if (typeof value === 'boolean') { + } else if (typeof value === "boolean") { newData[key] = value; } else if (typeof value === "object" && value !== null) { const processedValue = processActionData(value, row, replacementBehaviour); From 6ac475136a353816779aac28c9521c79c7469dfc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 12:03:48 -0400 Subject: [PATCH 0458/1184] update text --- .../CippComponents/CippGdapActions.jsx | 6 ++--- src/pages/tenant/gdap-management/roles/add.js | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/components/CippComponents/CippGdapActions.jsx b/src/components/CippComponents/CippGdapActions.jsx index 02d6982be108..d2ef3a41e531 100644 --- a/src/components/CippComponents/CippGdapActions.jsx +++ b/src/components/CippComponents/CippGdapActions.jsx @@ -49,7 +49,7 @@ export const CippGdapActions = () => [ icon: , }, { - label: "Reset Group Mappings", + label: "Reset Role Mapping", type: "POST", url: "/api/ExecGDAPAccessAssignment", icon: , @@ -82,10 +82,10 @@ export const CippGdapActions = () => [ confirmText: ( <> - Are you sure you want to reset the group mappings for this relationship? + Are you sure you want to reset the role mappings for this relationship? - Resetting GDAP group mappings will perform the following actions: + Resetting GDAP role mappings will perform the following actions:
    • Remove groups assignments that are not part of the Role Template
    • Update existing group assignments to match the Role Template
    • diff --git a/src/pages/tenant/gdap-management/roles/add.js b/src/pages/tenant/gdap-management/roles/add.js index 6ac2b4250dbf..4496f15d8776 100644 --- a/src/pages/tenant/gdap-management/roles/add.js +++ b/src/pages/tenant/gdap-management/roles/add.js @@ -154,7 +154,9 @@ const Page = () => { label="Select GDAP Roles" type="autoComplete" options={GDAPRoles.filter( - (role) => role.ObjectId !== "7495fdc4-34c4-4d15-a289-98788ce399fd" && role.ObjectId !== "aaf43236-0c0d-4d5f-883a-6955382ac081" + (role) => + role.ObjectId !== "7495fdc4-34c4-4d15-a289-98788ce399fd" && + role.ObjectId !== "aaf43236-0c0d-4d5f-883a-6955382ac081" ).map((role) => ({ label: role.Name, value: role.ObjectId }))} multiple={true} creatable={false} @@ -209,10 +211,22 @@ const Page = () => { In Advanced Mode, you can manually map existing groups to GDAP roles. This functionality is designed to help map existing groups to GDAP roles that do not - match the default naming convention. Certain groups are unavailable for mapping such - as All Users, AdminAgents, HelpdeskAgents and SalesAgents. Use extreme caution when - mapping roles in this mode. + match the default naming convention. Use extreme caution when mapping roles in this + mode. + + Limitations + +
        +
      • + Reserved groups and roles are unavailable for mapping, this is to prevent + misconfigurations due to permission overlap. +
      • +
      • + Only one role can be mapped per group. If your current configuration maps + more than one, use the Reset Role Mapping action on the Relationship. +
      • +
      @@ -247,7 +261,7 @@ const Page = () => { options={GDAPRoles.filter( (role) => role.ObjectId !== "62e90394-69f5-4237-9190-012177145e10" && // Partner Tier 1 - role.ObjectId !== "17315797-102d-40b4-93e0-432062caca18" // Partner Tier 2 + role.ObjectId !== "17315797-102d-40b4-93e0-432062caca18" // Partner Tier 2 ).map((role) => ({ label: role.Name, value: role.ObjectId }))} multiple={false} required={true} From 2250c4f51f6ee517933292b8547bd65a7301a2a9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 12:15:12 -0400 Subject: [PATCH 0459/1184] add links to MS documentation --- src/pages/tenant/gdap-management/roles/add.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/pages/tenant/gdap-management/roles/add.js b/src/pages/tenant/gdap-management/roles/add.js index 4496f15d8776..d7087415a1b4 100644 --- a/src/pages/tenant/gdap-management/roles/add.js +++ b/src/pages/tenant/gdap-management/roles/add.js @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { Alert, Button, SvgIcon, Typography, Grid, Tooltip } from "@mui/material"; +import { Alert, Button, SvgIcon, Typography, Grid, Tooltip, Link } from "@mui/material"; import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { useForm, useWatch } from "react-hook-form"; @@ -128,6 +128,13 @@ const Page = () => { role. + + Certain roles may not be compatible with GDAP. See the{" "} + + Microsoft Documentation + {" "} + on GDAP Role Guidance. + { Only one role can be mapped per group. If your current configuration maps more than one, use the Reset Role Mapping action on the Relationship. +
    • + Certain roles may not be compatible with GDAP. See the{" "} + + Microsoft Documentation + {" "} + on GDAP Role Guidance. +
    From f824ca2d99554910520dbee8aec9650964836b6c Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 12:32:14 -0400 Subject: [PATCH 0460/1184] chore: alphabetize the default roles ensure that form state gets set to dirty on default select --- src/data/CIPPDefaultGDAPRoles.json | 40 +++++++++---------- src/pages/tenant/gdap-management/roles/add.js | 5 ++- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/data/CIPPDefaultGDAPRoles.json b/src/data/CIPPDefaultGDAPRoles.json index a41017a4e8b7..f59aa19422aa 100644 --- a/src/data/CIPPDefaultGDAPRoles.json +++ b/src/data/CIPPDefaultGDAPRoles.json @@ -4,47 +4,47 @@ "value": "9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3" }, { - "label": "User Administrator", - "value": "fe930be7-5e62-47db-91af-98c3a49a38b1" + "label": "Authentication Policy Administrator", + "value": "0526716b-113d-4c15-b2c8-68e3c22b9f80" }, { - "label": "Intune Administrator", - "value": "3a2c62db-5318-420d-8d74-23affee5d9d5" + "label": "Cloud App Security Administrator", + "value": "892c5842-a9a6-463a-8041-72aa08ca3cf6" + }, + { + "label": "Cloud Device Administrator", + "value": "7698a772-787b-4ac8-901f-60d6b08affd2" }, { "label": "Exchange Administrator", "value": "29232cdf-9323-42fd-ade2-1d097af3e4de" }, { - "label": "Security Administrator", - "value": "194ae4cb-b126-40b2-bd5b-6091b380977d" + "label": "Intune Administrator", + "value": "3a2c62db-5318-420d-8d74-23affee5d9d5" }, { - "label": "Cloud App Security Administrator", - "value": "892c5842-a9a6-463a-8041-72aa08ca3cf6" + "label": "Privileged Authentication Administrator", + "value": "7be44c8a-adaf-4e2a-84d6-ab2649e08a13" }, { - "label": "Cloud Device Administrator", - "value": "7698a772-787b-4ac8-901f-60d6b08affd2" + "label": "Privileged Role Administrator", + "value": "e8611ab8-c189-46e8-94e1-60213ab1f814" }, { - "label": "Teams Administrator", - "value": "69091246-20e8-4a56-aa4d-066075b2a7a8" + "label": "Security Administrator", + "value": "194ae4cb-b126-40b2-bd5b-6091b380977d" }, { "label": "SharePoint Administrator", "value": "f28a1f50-f6e7-4571-818b-6a12f2af6b6c" }, { - "label": "Authentication Policy Administrator", - "value": "0526716b-113d-4c15-b2c8-68e3c22b9f80" - }, - { - "label": "Privileged Role Administrator", - "value": "e8611ab8-c189-46e8-94e1-60213ab1f814" + "label": "Teams Administrator", + "value": "69091246-20e8-4a56-aa4d-066075b2a7a8" }, { - "label": "Privileged Authentication Administrator", - "value": "7be44c8a-adaf-4e2a-84d6-ab2649e08a13" + "label": "User Administrator", + "value": "fe930be7-5e62-47db-91af-98c3a49a38b1" } ] diff --git a/src/pages/tenant/gdap-management/roles/add.js b/src/pages/tenant/gdap-management/roles/add.js index d7087415a1b4..c6cbf12598ec 100644 --- a/src/pages/tenant/gdap-management/roles/add.js +++ b/src/pages/tenant/gdap-management/roles/add.js @@ -35,7 +35,7 @@ const Page = () => { const [advancedMappings, setAdvancedMappings] = useState([]); const handleDefaults = () => { - formControl.setValue("gdapRoles", cippDefaults); + formControl.setValue("gdapRoles", cippDefaults, { shouldDirty: true }); formControl.trigger(); }; @@ -176,6 +176,7 @@ const Page = () => { return true; }, }} + sortOptions={true} /> { multiple={false} required={true} creatable={false} + sortOptions={true} /> @@ -280,6 +282,7 @@ const Page = () => { multiple={false} required={true} creatable={false} + sortOptions={true} /> From 9b9cf004e06b169f3002a07da5a7eaf58d6ac1eb Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 12:39:49 -0400 Subject: [PATCH 0461/1184] fix table page offsets with tabs --- src/pages/tenant/gdap-management/invites/index.js | 1 + src/pages/tenant/gdap-management/onboarding/index.js | 1 + src/pages/tenant/gdap-management/relationships/index.js | 1 + src/pages/tenant/gdap-management/role-templates/index.js | 1 + src/pages/tenant/gdap-management/roles/index.js | 1 + 5 files changed, 5 insertions(+) diff --git a/src/pages/tenant/gdap-management/invites/index.js b/src/pages/tenant/gdap-management/invites/index.js index b24195bb8270..99dd16053bf1 100644 --- a/src/pages/tenant/gdap-management/invites/index.js +++ b/src/pages/tenant/gdap-management/invites/index.js @@ -40,6 +40,7 @@ const Page = () => { actions={actions} tenantInTitle={false} queryKey="ListGDAPInvite" + maxHeightOffset="460px" /> ); }; diff --git a/src/pages/tenant/gdap-management/onboarding/index.js b/src/pages/tenant/gdap-management/onboarding/index.js index f5f2042f3064..d7e0af05ef34 100644 --- a/src/pages/tenant/gdap-management/onboarding/index.js +++ b/src/pages/tenant/gdap-management/onboarding/index.js @@ -57,6 +57,7 @@ const Page = () => { Start Tenant Onboarding } + maxHeightOffset="460px" /> ); }; diff --git a/src/pages/tenant/gdap-management/relationships/index.js b/src/pages/tenant/gdap-management/relationships/index.js index 1b3ef99fb715..f6bae836ec4a 100644 --- a/src/pages/tenant/gdap-management/relationships/index.js +++ b/src/pages/tenant/gdap-management/relationships/index.js @@ -43,6 +43,7 @@ const Page = () => { actions={actions} offCanvas={offCanvas} simpleColumns={simpleColumns} + maxHeightOffset="460px" /> ); }; diff --git a/src/pages/tenant/gdap-management/role-templates/index.js b/src/pages/tenant/gdap-management/role-templates/index.js index 3b82189aeb14..c884bc8cc484 100644 --- a/src/pages/tenant/gdap-management/role-templates/index.js +++ b/src/pages/tenant/gdap-management/role-templates/index.js @@ -106,6 +106,7 @@ const Page = () => { } queryKey="ListGDAPRoleTemplates" + maxHeightOffset="460px" /> ); diff --git a/src/pages/tenant/gdap-management/roles/index.js b/src/pages/tenant/gdap-management/roles/index.js index e97820abaf08..9a050a7d5150 100644 --- a/src/pages/tenant/gdap-management/roles/index.js +++ b/src/pages/tenant/gdap-management/roles/index.js @@ -73,6 +73,7 @@ const Page = () => { } queryKey="ListGDAPRoles" + maxHeightOffset="460px" /> ); }; From 624aa0e5b1f16ae61ce95bf2a2c94c1f89524723 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 13:07:45 -0400 Subject: [PATCH 0462/1184] add filters --- .../gdap-management/relationships/index.js | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/pages/tenant/gdap-management/relationships/index.js b/src/pages/tenant/gdap-management/relationships/index.js index f6bae836ec4a..5cdf94b1a518 100644 --- a/src/pages/tenant/gdap-management/relationships/index.js +++ b/src/pages/tenant/gdap-management/relationships/index.js @@ -19,6 +19,30 @@ const simpleColumns = [ "accessDetails.unifiedRoles", ]; +const filters = [ + { + filterName: "Active", + value: [{ id: "status", value: "active" }], + type: "column", + }, + { + filterName: "Approval Pending", + value: [{ id: "status", value: "approvalPending" }], + type: "column", + }, + { + filterName: "Terminating", + value: [{ id: "status", value: "terminating" }], + type: "column", + }, + { + filterName: "Terminated", + value: [{ id: "status", value: "terminated" }], + type: "column", + }, +]; + + const offCanvas = { actions: actions, extendedInfoFields: simpleColumns, @@ -44,6 +68,7 @@ const Page = () => { offCanvas={offCanvas} simpleColumns={simpleColumns} maxHeightOffset="460px" + filters={filters} /> ); }; From 1ca322decb0b72fe0c735c643ae26ed278163459 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 14:02:28 -0400 Subject: [PATCH 0463/1184] default table sorting support --- src/components/CippTable/CippDataTable.js | 9 +++++++++ src/pages/tenant/gdap-management/relationships/index.js | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 95ecbe8896ec..bc2f30ea3b7a 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -54,6 +54,7 @@ export const CippDataTable = (props) => { onChange, filters, maxHeightOffset = "380px", + defaultSorting = [], } = props; const [columnVisibility, setColumnVisibility] = useState(initialColumnVisibility); const [configuredSimpleColumns, setConfiguredSimpleColumns] = useState(simpleColumns); @@ -63,6 +64,7 @@ export const CippDataTable = (props) => { const [offCanvasData, setOffCanvasData] = useState({}); const [actionData, setActionData] = useState({ data: {}, action: {}, ready: false }); const [graphFilterData, setGraphFilterData] = useState({}); + const [sorting, setSorting] = useState([]); const waitingBool = api?.url ? true : false; const settings = useSettings(); @@ -149,6 +151,9 @@ export const CippDataTable = (props) => { newVisibility[col.accessorKey] = providedColumnKeys.has(col.id); }); } + if (defaultSorting?.length > 0) { + setSorting(defaultSorting); + } setUsedColumns(finalColumns); setColumnVisibility(newVisibility); }, [columns.length, usedData.length, queryKey]); @@ -187,12 +192,16 @@ export const CippDataTable = (props) => { data: memoizedData, state: { columnVisibility, + sorting, showSkeletons: getRequestData.isFetchingNextPage ? false : getRequestData.isFetching ? getRequestData.isFetching : isFetching, }, + onSortingChange: (newSorting) => { + setSorting(newSorting ?? []); + }, renderEmptyRowsFallback: ({ table }) => getRequestData.data?.pages?.[0].Metadata?.QueueMessage ? ( diff --git a/src/pages/tenant/gdap-management/relationships/index.js b/src/pages/tenant/gdap-management/relationships/index.js index 5cdf94b1a518..5a389831bade 100644 --- a/src/pages/tenant/gdap-management/relationships/index.js +++ b/src/pages/tenant/gdap-management/relationships/index.js @@ -42,7 +42,6 @@ const filters = [ }, ]; - const offCanvas = { actions: actions, extendedInfoFields: simpleColumns, @@ -69,6 +68,7 @@ const Page = () => { simpleColumns={simpleColumns} maxHeightOffset="460px" filters={filters} + defaultSorting={[{ id: "customer.displayName", desc: false }]} /> ); }; From a7d8e88e33af2b599df13563732f48d665307b32 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 23 Mar 2025 22:06:40 -0400 Subject: [PATCH 0464/1184] feat: mobile friendly improvements --- .../CippComponents/CippCodeBlock.jsx | 6 +- .../CippComponents/CippOffCanvas.jsx | 48 +++-- .../CippTable/CIPPTableToptoolbar.js | 191 +++++++++--------- src/components/csvExportButton.js | 4 +- src/components/pdfExportButton.js | 4 +- src/layouts/HeaderedTabbedLayout.jsx | 16 +- 6 files changed, 146 insertions(+), 123 deletions(-) diff --git a/src/components/CippComponents/CippCodeBlock.jsx b/src/components/CippComponents/CippCodeBlock.jsx index a0f8bd137318..d1836e9aa66d 100644 --- a/src/components/CippComponents/CippCodeBlock.jsx +++ b/src/components/CippComponents/CippCodeBlock.jsx @@ -53,7 +53,8 @@ export const CippCodeBlock = (props) => { height={editorHeight} options={{ wordWrap: true, - + lineNumbers: showLineNumbers ? "on" : "off", + minimap: { enabled: showLineNumbers}, }} {...other} /> @@ -66,11 +67,10 @@ export const CippCodeBlock = (props) => { showLineNumbers={showLineNumbers} startingLineNumber={startingLineNumber} wrapLongLines={wrapLongLines} - > {code} )} ); -}; \ No newline at end of file +}; diff --git a/src/components/CippComponents/CippOffCanvas.jsx b/src/components/CippComponents/CippOffCanvas.jsx index bd68e583de8b..266c998619f7 100644 --- a/src/components/CippComponents/CippOffCanvas.jsx +++ b/src/components/CippComponents/CippOffCanvas.jsx @@ -1,7 +1,9 @@ -import { Drawer, Box, Grid } from "@mui/material"; +import { Drawer, Box, Grid, IconButton } from "@mui/material"; import { CippPropertyListCard } from "../CippCards/CippPropertyListCard"; import { getCippTranslation } from "../../utils/get-cipp-translation"; import { getCippFormatting } from "../../utils/get-cipp-formatting"; +import { useMediaQuery } from "@mui/system"; +import CloseIcon from "@mui/icons-material/Close"; export const CippOffCanvas = (props) => { const { @@ -16,6 +18,7 @@ export const CippOffCanvas = (props) => { size = "sm", } = props; + const mdDown = useMediaQuery((theme) => theme.breakpoints.down("md")); const extendedInfo = extendedInfoFields.map((field) => { const value = field.split(".").reduce((acc, part) => acc && acc[part], extendedData); if (value === undefined || value === null) { @@ -43,20 +46,24 @@ export const CippOffCanvas = (props) => { } }); - var drawerWidth = 400; - switch (size) { - case "sm": - drawerWidth = 400; - break; - case "md": - drawerWidth = 600; - break; - case "lg": - drawerWidth = 800; - break; - case "xl": - drawerWidth = 1000; - break; + if (mdDown) { + drawerWidth = "100%"; + } else { + var drawerWidth = 400; + switch (size) { + case "sm": + drawerWidth = 400; + break; + case "md": + drawerWidth = 600; + break; + case "lg": + drawerWidth = 800; + break; + case "xl": + drawerWidth = 1000; + break; + } } return ( @@ -72,6 +79,17 @@ export const CippOffCanvas = (props) => { open={visible} onClose={onClose} > + + + {/* Force vertical stacking in a column layout */} theme.breakpoints.down("md")); const settings = useSettings(); const router = useRouter(); const createDialog = useDialog(); @@ -64,6 +66,10 @@ export const CIPPTableToptoolbar = ({ const pageName = router.pathname.split("/").slice(1).join("/"); const currentTenant = useSettings()?.currentTenant; + const [actionMenuAnchor, setActionMenuAnchor] = useState(null); + const handleActionMenuOpen = (event) => setActionMenuAnchor(event.currentTarget); + const handleActionMenuClose = () => setActionMenuAnchor(null); + useEffect(() => { //if usedData changes, deselect all rows table.toggleAllRowsSelected(false); @@ -330,105 +336,99 @@ export const CIPPTableToptoolbar = ({ - - - - - - - - - setTableFilter("", "reset", "")}> - - - {api?.url === "/api/ListGraphRequest" && ( - { - filterPopover.handleClose(); - setFilterCanvasVisible(true); - }} - > - - - )} - - {filterList?.map((filter) => ( - { - filterPopover.handleClose(); - setTableFilter(filter.value, filter.type, filter.filterName); - }} + {mdDown ? ( + <> + + + + + + - - - ))} - - - - - - - - - - - - - - - - - - {table - .getAllColumns() - .filter((column) => !column.id.startsWith("mrt-")) - .map((column) => ( - - setColumnVisibility({ - ...columnVisibility, - [column.id]: !column.getIsVisible(), - }) - } - > - - + + + + + - ))} - - {exportEnabled && ( + + + + + + + {exportEnabled && ( + <> + + + + + + {" "} + + + + )} + setOffcanvasVisible(true)}> + + + + + + + + ) : ( <> - - + + + + + + + + + + + + + {exportEnabled && ( + <> + + + + )} + + setOffcanvasVisible(true)}> + + + )} - - setOffcanvasVisible(true)}> - - - { //add a little icon with how many rows are selected (table.getIsAllRowsSelected() || table.getIsSomeRowsSelected()) && ( @@ -451,6 +451,7 @@ export const CIPPTableToptoolbar = ({ type="editor" code={JSON.stringify(usedData, null, 2)} editorHeight="1000px" + showLineNumbers={!mdDown} /> diff --git a/src/components/csvExportButton.js b/src/components/csvExportButton.js index 8f5c80d49a77..c09474b0472c 100644 --- a/src/components/csvExportButton.js +++ b/src/components/csvExportButton.js @@ -9,7 +9,7 @@ const csvConfig = mkConfig({ }); export const CSVExportButton = (props) => { - const { rows, columns, reportName, columnVisibility } = props; + const { rows, columns, reportName, columnVisibility, ...other } = props; const handleExportRows = (rows) => { const rowData = rows.map((row) => row.original); @@ -37,7 +37,7 @@ export const CSVExportButton = (props) => { return ( - handleExportRows(rows)}> + handleExportRows(rows)} {...other}> diff --git a/src/components/pdfExportButton.js b/src/components/pdfExportButton.js index a23b14cbdcb1..3d011fd1ebf2 100644 --- a/src/components/pdfExportButton.js +++ b/src/components/pdfExportButton.js @@ -5,7 +5,7 @@ import autoTable from "jspdf-autotable"; import { getCippFormatting } from "../utils/get-cipp-formatting"; export const PDFExportButton = (props) => { - const { rows, columns, reportName, columnVisibility } = props; + const { rows, columns, reportName, columnVisibility, ...other } = props; const handleExportRows = (rows) => { const unit = "pt"; @@ -41,7 +41,7 @@ export const PDFExportButton = (props) => { return ( - handleExportRows(rows)}> + handleExportRows(rows)} {...other}> diff --git a/src/layouts/HeaderedTabbedLayout.jsx b/src/layouts/HeaderedTabbedLayout.jsx index 82f5b070d880..50b1b2e1e034 100644 --- a/src/layouts/HeaderedTabbedLayout.jsx +++ b/src/layouts/HeaderedTabbedLayout.jsx @@ -16,6 +16,7 @@ import { Typography, } from "@mui/material"; import { ActionsMenu } from "/src/components/actions-menu"; +import { useMediaQuery } from "@mui/material"; export const HeaderedTabbedLayout = (props) => { const { @@ -29,6 +30,7 @@ export const HeaderedTabbedLayout = (props) => { backUrl, } = props; + const mdDown = useMediaQuery((theme) => theme.breakpoints.down("md")); const router = useRouter(); const pathname = usePathname(); const queryParams = router.query; @@ -85,7 +87,7 @@ export const HeaderedTabbedLayout = (props) => { spacing={1} justifyContent="space-between" > - {title} + {title} {isFetching ? ( @@ -118,11 +120,13 @@ export const HeaderedTabbedLayout = (props) => {
    {children} From 6b7af645fbf8b2f3bbd75f8ff3a64999ba01cc29 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:40:14 +0100 Subject: [PATCH 0465/1184] prettification --- src/pages/tenant/standards/compare/index.js | 46 +++++++++++++++++---- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 1f5d7070965e..361b3a5219ea 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -407,11 +407,27 @@ const Page = () => { )) ) : ( - {standard.standardValue !== undefined - ? typeof standard.standardValue === "object" - ? "No settings configured" - : String(standard.standardValue) - : "Not configured"} + {standard.standardValue === true + ? ( + + This setting is configured correctly + + ) + : standard.standardValue === false + ? ( + + This setting is not configured correctly + + ) + : standard.standardValue !== undefined + ? typeof standard.standardValue === "object" + ? "No settings configured" + : String(standard.standardValue) + : ( + + This setting is not configured, or data has not been collected. If you are getting this after data collection, the tenant might not be licensed for this feature + + )} )} @@ -569,10 +585,24 @@ const Page = () => { }} > {standard.complianceStatus === "Compliant" && standard.currentTenantValue === true - ? "Compliant" + ? ( + + This setting is configured correctly + + ) + : standard.currentTenantValue === false + ? ( + + This setting is not configured correctly + + ) : (standard.currentTenantValue !== undefined - ? String(standard.currentTenantValue) - : "Not configured")} + ? String(standard.currentTenantValue) + : ( + + This setting is not configured, or data has not been collected. If you are getting this after data collection, the tenant might not be licensed for this feature + + ))} )} From 6c6a98fbe33de14dc601412168016132c82945ee Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:29:43 +0100 Subject: [PATCH 0466/1184] spacing --- src/pages/tenant/standards/compare/index.js | 142 ++++++++++---------- 1 file changed, 74 insertions(+), 68 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 361b3a5219ea..2adede54a128 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -80,11 +80,11 @@ const Page = () => { if (selectedTemplate && comparisonApi.isSuccess && comparisonApi.data) { const tenantData = comparisonApi.data; - + // Find the current tenant's data by matching tenantFilter with currentTenant - const currentTenantObj = tenantData.find(t => t.tenantFilter === currentTenant); + const currentTenantObj = tenantData.find((t) => t.tenantFilter === currentTenant); const currentTenantData = currentTenantObj ? currentTenantObj.standardsResults || [] : []; - + const allStandards = []; if (selectedTemplate.standards) { Object.entries(selectedTemplate.standards).forEach(([standardKey, standardConfig]) => { @@ -99,33 +99,38 @@ const Page = () => { // Determine compliance status let isCompliant = false; - + // Check if the standard is directly in the tenant object (like "standards.AuditLog": true) - const standardIdWithoutPrefix = standardId.replace('standards.', ''); + const standardIdWithoutPrefix = standardId.replace("standards.", ""); const directStandardValue = currentTenantObj?.[standardId]; - + // Special case for boolean standards that are true in the tenant if (directStandardValue === true) { // If the standard is directly in the tenant and is true, it's compliant isCompliant = true; } else if (directStandardValue !== undefined) { // For non-boolean values, use strict equality - isCompliant = JSON.stringify(directStandardValue) === JSON.stringify(standardSettings); + isCompliant = + JSON.stringify(directStandardValue) === JSON.stringify(standardSettings); } else if (currentTenantStandard) { // Fall back to the previous logic if the standard is not directly in the tenant object - if (typeof standardSettings === 'boolean' && standardSettings === true) { + if (typeof standardSettings === "boolean" && standardSettings === true) { isCompliant = currentTenantStandard.value === true; } else { - isCompliant = JSON.stringify(currentTenantStandard.value) === JSON.stringify(standardSettings); + isCompliant = + JSON.stringify(currentTenantStandard.value) === JSON.stringify(standardSettings); } } // Use the direct standard value from the tenant object if it exists - + allStandards.push({ standardId, standardName: standardInfo?.label || standardKey, - currentTenantValue: directStandardValue !== undefined ? directStandardValue : currentTenantStandard?.value, + currentTenantValue: + directStandardValue !== undefined + ? directStandardValue + : currentTenantStandard?.value, standardValue: standardSettings, complianceStatus: isCompliant ? "Compliant" : "Non-Compliant", complianceDetails: standardInfo?.docsDescription || standardInfo?.helpText || "", @@ -396,7 +401,7 @@ const Page = () => { {typeof value === "object" && value !== null - ? (value.label || JSON.stringify(value)) + ? value.label || JSON.stringify(value) : value === true ? "Enabled" : value === false @@ -407,27 +412,27 @@ const Page = () => { )) ) : ( - {standard.standardValue === true - ? ( - - This setting is configured correctly - - ) - : standard.standardValue === false - ? ( - - This setting is not configured correctly - - ) - : standard.standardValue !== undefined - ? typeof standard.standardValue === "object" - ? "No settings configured" - : String(standard.standardValue) - : ( - - This setting is not configured, or data has not been collected. If you are getting this after data collection, the tenant might not be licensed for this feature - - )} + {standard.standardValue === true ? ( + + This setting is configured correctly + + ) : standard.standardValue === false ? ( + + This setting is not configured correctly + + ) : standard.standardValue !== undefined ? ( + typeof standard.standardValue === "object" ? ( + "No settings configured" + ) : ( + String(standard.standardValue) + ) + ) : ( + + This setting is not configured, or data has not been collected. + If you are getting this after data collection, the tenant might + not be licensed for this feature + + )} )} @@ -547,23 +552,27 @@ const Page = () => { {standard.complianceStatus === "Compliant" && value === true ? "Compliant" - : (typeof value === "object" && value !== null - ? (value.label || JSON.stringify(value)) - : value === true - ? "Enabled" - : value === false - ? "Disabled" - : String(value))} + : typeof value === "object" && value !== null + ? value.label || JSON.stringify(value) + : value === true + ? "Enabled" + : value === false + ? "Disabled" + : String(value)} ); @@ -579,30 +588,27 @@ const Page = () => { ? "success.main" : "error.main", fontWeight: - standard.complianceStatus !== "Compliant" - ? "medium" - : "inherit", + standard.complianceStatus !== "Compliant" ? "medium" : "inherit", }} > - {standard.complianceStatus === "Compliant" && standard.currentTenantValue === true - ? ( - - This setting is configured correctly - - ) - : standard.currentTenantValue === false - ? ( - - This setting is not configured correctly - - ) - : (standard.currentTenantValue !== undefined - ? String(standard.currentTenantValue) - : ( - - This setting is not configured, or data has not been collected. If you are getting this after data collection, the tenant might not be licensed for this feature - - ))} + {standard.complianceStatus === "Compliant" && + standard.currentTenantValue === true ? ( + + This setting is configured correctly + + ) : standard.currentTenantValue === false ? ( + + This setting is not configured correctly + + ) : standard.currentTenantValue !== undefined ? ( + String(standard.currentTenantValue) + ) : ( + + This setting is not configured, or data has not been collected. If you + are getting this after data collection, the tenant might not be licensed + for this feature + + )} )} From 3f4e126f92df1e26218008fcb380d4fab59d1615 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Mar 2025 11:20:50 -0400 Subject: [PATCH 0467/1184] integration query tweaks --- src/components/CippFormPages/CippAddEditUser.jsx | 2 ++ src/components/CippIntegrations/CippIntegrationSettings.jsx | 2 ++ src/pages/cipp/integrations/configure.js | 2 ++ src/pages/cipp/integrations/index.js | 2 ++ .../email/spamfilter/list-connectionfilter-templates/index.js | 2 ++ src/pages/email/spamfilter/list-templates/index.js | 2 ++ src/pages/email/transport/list-connector-templates/index.js | 2 ++ src/pages/email/transport/list-templates/index.js | 2 ++ src/pages/endpoint/MEM/list-templates/index.js | 2 ++ src/pages/identity/administration/group-templates/index.js | 2 ++ src/pages/tenant/conditional/list-template/index.js | 2 ++ src/pages/tenant/standards/bpa-report/index.js | 2 ++ src/pages/tenant/standards/list-standards/index.js | 2 ++ src/pages/tools/community-repos/index.js | 2 ++ 14 files changed, 28 insertions(+) diff --git a/src/components/CippFormPages/CippAddEditUser.jsx b/src/components/CippFormPages/CippAddEditUser.jsx index 3519fe123775..c7d6cc73993e 100644 --- a/src/components/CippFormPages/CippAddEditUser.jsx +++ b/src/components/CippFormPages/CippAddEditUser.jsx @@ -17,6 +17,8 @@ const CippAddEditUser = (props) => { const integrationSettings = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "ListExtensionsConfig", + refetchOnMount: false, + refetchOnReconnect: false, }); const watcher = useWatch({ control: formControl.control }); diff --git a/src/components/CippIntegrations/CippIntegrationSettings.jsx b/src/components/CippIntegrations/CippIntegrationSettings.jsx index 47b99c451510..b594ae5c78d1 100644 --- a/src/components/CippIntegrations/CippIntegrationSettings.jsx +++ b/src/components/CippIntegrations/CippIntegrationSettings.jsx @@ -18,6 +18,8 @@ const CippIntegrationSettings = ({ children }) => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const formControl = useForm({ diff --git a/src/pages/cipp/integrations/configure.js b/src/pages/cipp/integrations/configure.js index e65e27607f5a..ce853a005be7 100644 --- a/src/pages/cipp/integrations/configure.js +++ b/src/pages/cipp/integrations/configure.js @@ -43,6 +43,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const [testQuery, setTestQuery] = useState({ url: "", waiting: false, queryKey: "" }); diff --git a/src/pages/cipp/integrations/index.js b/src/pages/cipp/integrations/index.js index 4bf582e23432..141bebd8011d 100644 --- a/src/pages/cipp/integrations/index.js +++ b/src/pages/cipp/integrations/index.js @@ -25,6 +25,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); return ( diff --git a/src/pages/email/spamfilter/list-connectionfilter-templates/index.js b/src/pages/email/spamfilter/list-connectionfilter-templates/index.js index ca0ced2e75ea..f5d660457154 100644 --- a/src/pages/email/spamfilter/list-connectionfilter-templates/index.js +++ b/src/pages/email/spamfilter/list-connectionfilter-templates/index.js @@ -9,6 +9,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const actions = [ { diff --git a/src/pages/email/spamfilter/list-templates/index.js b/src/pages/email/spamfilter/list-templates/index.js index ad1e87195129..adcc2884e065 100644 --- a/src/pages/email/spamfilter/list-templates/index.js +++ b/src/pages/email/spamfilter/list-templates/index.js @@ -9,6 +9,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const actions = [ { diff --git a/src/pages/email/transport/list-connector-templates/index.js b/src/pages/email/transport/list-connector-templates/index.js index 7f35e6629322..75723a53422d 100644 --- a/src/pages/email/transport/list-connector-templates/index.js +++ b/src/pages/email/transport/list-connector-templates/index.js @@ -13,6 +13,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const actions = [ { diff --git a/src/pages/email/transport/list-templates/index.js b/src/pages/email/transport/list-templates/index.js index 58340c19ff38..ea143610103f 100644 --- a/src/pages/email/transport/list-templates/index.js +++ b/src/pages/email/transport/list-templates/index.js @@ -11,6 +11,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const actions = [ { diff --git a/src/pages/endpoint/MEM/list-templates/index.js b/src/pages/endpoint/MEM/list-templates/index.js index f5ad76234cdd..d9beda8689ae 100644 --- a/src/pages/endpoint/MEM/list-templates/index.js +++ b/src/pages/endpoint/MEM/list-templates/index.js @@ -10,6 +10,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const actions = [ { diff --git a/src/pages/identity/administration/group-templates/index.js b/src/pages/identity/administration/group-templates/index.js index 82c9f423d7a8..19cdc80add8f 100644 --- a/src/pages/identity/administration/group-templates/index.js +++ b/src/pages/identity/administration/group-templates/index.js @@ -11,6 +11,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const actions = [ { diff --git a/src/pages/tenant/conditional/list-template/index.js b/src/pages/tenant/conditional/list-template/index.js index 96a5f601ebb4..0ead857b8ea6 100644 --- a/src/pages/tenant/conditional/list-template/index.js +++ b/src/pages/tenant/conditional/list-template/index.js @@ -10,6 +10,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const actions = [ { diff --git a/src/pages/tenant/standards/bpa-report/index.js b/src/pages/tenant/standards/bpa-report/index.js index 7de229b882b7..5307dfa9a934 100644 --- a/src/pages/tenant/standards/bpa-report/index.js +++ b/src/pages/tenant/standards/bpa-report/index.js @@ -11,6 +11,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const actions = [ { diff --git a/src/pages/tenant/standards/list-standards/index.js b/src/pages/tenant/standards/list-standards/index.js index 8af18ab0f2be..132ac07cbb7e 100644 --- a/src/pages/tenant/standards/list-standards/index.js +++ b/src/pages/tenant/standards/list-standards/index.js @@ -12,6 +12,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const pageTitle = "Standard Templates"; const actions = [ diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index 6fb4a0137fa6..67eeafbe732b 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -44,6 +44,8 @@ const Page = () => { const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", + refetchOnMount: false, + refetchOnReconnect: false, }); const createMutation = ApiPostCall({ From e33a5b430c534b30a2e92d5f96938d1d55a9642a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Mar 2025 11:21:00 -0400 Subject: [PATCH 0468/1184] fix table buttons --- .../CippTable/CIPPTableToptoolbar.js | 211 ++++++++++-------- src/components/CippTable/CippDataTable.js | 8 +- 2 files changed, 124 insertions(+), 95 deletions(-) diff --git a/src/components/CippTable/CIPPTableToptoolbar.js b/src/components/CippTable/CIPPTableToptoolbar.js index 2ebedddcbe64..5245c72e5a3a 100644 --- a/src/components/CippTable/CIPPTableToptoolbar.js +++ b/src/components/CippTable/CIPPTableToptoolbar.js @@ -12,7 +12,11 @@ import { Typography, } from "@mui/material"; import { Box, Stack } from "@mui/system"; -import { MRT_GlobalFilterTextField, MRT_ToggleFiltersButton } from "material-react-table"; +import { + MRT_GlobalFilterTextField, + MRT_ToggleFiltersButton, + MRT_ToggleFullScreenButton, +} from "material-react-table"; import { PDFExportButton } from "../pdfExportButton"; import { ChevronDownIcon, ExclamationCircleIcon } from "@heroicons/react/24/outline"; import { usePopover } from "../../hooks/use-popover"; @@ -280,7 +284,15 @@ export const CIPPTableToptoolbar = ({ justifyContent: "space-between", })} > - + <> - - {mdDown ? ( - <> - - - - - - + + + + + + + + setTableFilter("", "reset", "")}> + + + {api?.url === "/api/ListGraphRequest" && ( + { + filterPopover.handleClose(); + setFilterCanvasVisible(true); + }} > - - - - - - - - - - - - - {exportEnabled && ( - <> - - - - - - {" "} - - - - )} - setOffcanvasVisible(true)}> - - - - + + + )} + + {filterList?.map((filter) => ( + { + filterPopover.handleClose(); + setTableFilter(filter.value, filter.type, filter.filterName); + }} + > + + + ))} + + + + + + + + + + + + + + + + + + {table + .getAllColumns() + .filter((column) => !column.id.startsWith("mrt-")) + .map((column) => ( + + setColumnVisibility({ + ...columnVisibility, + [column.id]: !column.getIsVisible(), + }) + } + > + + - - - ) : ( - <> - - - - - - - - - - - - - {exportEnabled && ( - <> - - - - )} - - setOffcanvasVisible(true)}> - - - - - )} + ))} + + + <> + {exportEnabled && ( + <> + + + + )} + + setOffcanvasVisible(true)}> + + + + {mdDown && ( + + )} + { //add a little icon with how many rows are selected (table.getIsAllRowsSelected() || table.getIsSomeRowsSelected()) && ( diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index bc2f30ea3b7a..94d0f6707809 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -187,7 +187,13 @@ export const CippDataTable = (props) => { mrtTheme: (theme) => ({ baseBackgroundColor: theme.palette.background.paper, }), - + muiTablePaperProps: ({ table }) => ({ + //not sx + style: { + zIndex: table.getState().isFullScreen ? 1000 : undefined, + top: table.getState().isFullScreen ? 64 : undefined, + }, + }), columns: memoizedColumns, data: memoizedData, state: { From b463f82d09d6e9758022bd2658189716ed7b4a61 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 24 Mar 2025 17:50:40 +0100 Subject: [PATCH 0469/1184] changes --- src/pages/tenant/standards/compare/index.js | 22 +-------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 2adede54a128..5cc3a3f1918f 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -126,7 +126,7 @@ const Page = () => { allStandards.push({ standardId, - standardName: standardInfo?.label || standardKey, + standardName: standardId || standardKey, currentTenantValue: directStandardValue !== undefined ? directStandardValue @@ -176,22 +176,6 @@ const Page = () => { Back to Templates - - - {comparisonApi.isLoading && ( <> @@ -266,10 +250,6 @@ const Page = () => { )} - - Comparison Results - - {comparisonApi.isError && ( From a5b303acf1cd4be45f527ead357ee8ce355db49b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Mar 2025 13:38:46 -0400 Subject: [PATCH 0470/1184] fix: richText values --- src/components/CippComponents/CippFormComponent.jsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippFormComponent.jsx b/src/components/CippComponents/CippFormComponent.jsx index 5ba298a7be3e..d1c95a60135b 100644 --- a/src/components/CippComponents/CippFormComponent.jsx +++ b/src/components/CippComponents/CippFormComponent.jsx @@ -301,9 +301,12 @@ export const CippFormComponent = (props) => { field.onChange(editor.getHTML())} // Update react-hook-form on change + content={field.value || ''} + onUpdate={({ editor }) => { + field.onChange(editor.getHTML()); + }} label={label} renderControls={() => ( From 01f851ebc21c9c7141461edea24ed0d617358d4e Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Mar 2025 13:43:18 -0400 Subject: [PATCH 0471/1184] fix: too many rerenders on richText --- src/components/CippComponents/CippFormComponent.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippFormComponent.jsx b/src/components/CippComponents/CippFormComponent.jsx index d1c95a60135b..f42f5b1fbb16 100644 --- a/src/components/CippComponents/CippFormComponent.jsx +++ b/src/components/CippComponents/CippFormComponent.jsx @@ -301,9 +301,9 @@ export const CippFormComponent = (props) => { { field.onChange(editor.getHTML()); }} From ee255872cbcc7ce5825653e9221116ff2b2eff89 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Mar 2025 14:20:25 -0400 Subject: [PATCH 0472/1184] compare report header --- src/pages/tenant/standards/compare/index.js | 73 ++++++++++++++++++++- 1 file changed, 70 insertions(+), 3 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 5cc3a3f1918f..ec8538f2d13d 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -10,9 +10,20 @@ import { Chip, Skeleton, Alert, + IconButton, + Tooltip, } from "@mui/material"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; -import { PlayArrow, CheckCircle, Cancel, Info, Public, Microsoft } from "@mui/icons-material"; +import { + PlayArrow, + CheckCircle, + Cancel, + Info, + Public, + Microsoft, + Description, + Sync, +} from "@mui/icons-material"; import { ArrowLeftIcon } from "@mui/x-date-pickers"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import standards from "/src/data/standards.json"; @@ -25,6 +36,8 @@ import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall"; import { useRouter } from "next/router"; import { useDialog } from "../../../../hooks/use-dialog"; import { Grid } from "@mui/system"; +import DOMPurify from "dompurify"; +import { ClockIcon } from "@heroicons/react/24/outline"; const Page = () => { const router = useRouter(); @@ -176,8 +189,62 @@ const Page = () => { Back to Templates - - {comparisonApi.isLoading && ( + + + + { + templateDetails?.data?.filter((template) => template.GUID === templateId)[0] + .templateName + } + + + comparisonApi.refetch()}> + + + + + + {comparisonApi.data?.find((comparison) => comparison.RowKey === currentTenant) && ( + + + + + + Updated on{" "} + {new Date( + comparisonApi.data.find( + (comparison) => comparison.RowKey === currentTenant + ).LastRefresh + ).toLocaleString()} + + + )} + + {templateDetails?.data?.filter((template) => template.GUID === templateId)[0] + .description && ( + theme.palette.primary.main, + textDecoration: "underline", + }, + color: "text.secondary", + fontSize: "0.875rem", + "& p": { + my: 0, + }, + mt: 2, + }} + dangerouslySetInnerHTML={{ + __html: DOMPurify.sanitize( + templateDetails?.data?.filter((template) => template.GUID === templateId)[0] + .description + ), + }} + /> + )} + + {comparisonApi.isFetching && ( <> {[1, 2, 3].map((item) => ( From 569267b4d2815bbbb8de288f6e15c6882a5bdcbd Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Mar 2025 15:40:47 -0400 Subject: [PATCH 0473/1184] fix onboarding form --- .../tenant/gdap-management/onboarding/start.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pages/tenant/gdap-management/onboarding/start.js b/src/pages/tenant/gdap-management/onboarding/start.js index e63e53ba63a9..21eaa2c1412e 100644 --- a/src/pages/tenant/gdap-management/onboarding/start.js +++ b/src/pages/tenant/gdap-management/onboarding/start.js @@ -305,11 +305,9 @@ const Page = () => { api={{ url: "/api/ListGraphRequest", data: { - TenantFilter: "", Endpoint: "tenantRelationships/delegatedAdminRelationships", - $filter: - "(status eq 'active' or status eq 'approvalPending') and not startsWith(displayName,'MLT_')", }, + excludeTenantFilter: true, queryKey: "GDAPRelationships", dataKey: "Results", labelField: (option) => @@ -321,12 +319,21 @@ const Page = () => { addedField: { customer: "customer", id: "id", + displayName: "displayName", createdDateTime: "createdDateTime", accessDetails: "accessDetails", status: "status", autoExtendDuration: "autoExtendDuration", lastModifiedDateTime: "lastModifiedDateTime", }, + dataFilter: (data) => { + return data?.filter( + (relationship) => + (relationship?.addedFields?.status === "active" || + relationship?.addedFields?.status === "approvalPending") && + !relationship?.addedFields?.displayName?.startsWith("MLT_") + ); + }, }} multiple={false} creatable={true} From e1c86b022e33903746fe9ab29c2fdc6096a579ba Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Mar 2025 16:50:46 -0400 Subject: [PATCH 0474/1184] minor tweaks --- src/components/CippTable/CippDataTable.js | 16 ++++++++++++++++ .../tenant/gdap-management/onboarding/start.js | 1 + src/utils/get-cipp-filter-variant.js | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 94d0f6707809..568633399eb3 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -311,6 +311,22 @@ export const CippDataTable = (props) => { ); }, + sortingFns: { + dateTimeNullsLast: (a, b, id) => { + const aVal = a?.original?.[id] ?? null; + const bVal = b?.original?.[id] ?? null; + if (aVal === null && bVal === null) { + return 0; + } + if (aVal === null) { + return 1; + } + if (bVal === null) { + return -1; + } + return aVal > bVal ? 1 : -1; + }, + }, enableGlobalFilterModes: true, }); diff --git a/src/pages/tenant/gdap-management/onboarding/start.js b/src/pages/tenant/gdap-management/onboarding/start.js index 21eaa2c1412e..3a14356c6cd8 100644 --- a/src/pages/tenant/gdap-management/onboarding/start.js +++ b/src/pages/tenant/gdap-management/onboarding/start.js @@ -377,6 +377,7 @@ const Page = () => { }, }} multiple={false} + creatable={false} /> )} diff --git a/src/utils/get-cipp-filter-variant.js b/src/utils/get-cipp-filter-variant.js index e8fc3ddd5acc..cbd5ac15f227 100644 --- a/src/utils/get-cipp-filter-variant.js +++ b/src/utils/get-cipp-filter-variant.js @@ -23,7 +23,7 @@ export const getCippFilterVariant = (providedColumnKeys) => { if (timeAgoArray.includes(providedColumnKeys) || matchDateTime.test(providedColumnKeys)) { return { filterVariant: "datetime-range", - sortingFn: "datetime", + sortingFn: "dateTimeNullsLast", filterFn: "betweenInclusive", }; } From b306c48c2eb6e6a6ebb810df32cd5490f1b77a2b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 24 Mar 2025 17:23:55 -0400 Subject: [PATCH 0475/1184] update auto schedule limit --- src/components/CippWizard/CippWizardOffboarding.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippWizard/CippWizardOffboarding.jsx b/src/components/CippWizard/CippWizardOffboarding.jsx index 64ac7cdc602f..4faeb57318c2 100644 --- a/src/components/CippWizard/CippWizardOffboarding.jsx +++ b/src/components/CippWizard/CippWizardOffboarding.jsx @@ -16,7 +16,7 @@ export const CippWizardOffboarding = (props) => { const disableForwarding = useWatch({ control: formControl.control, name: "disableForwarding" }); useEffect(() => { - if (selectedUsers.length >= 4) { + if (selectedUsers.length >= 3) { setShowAlert(true); formControl.setValue("Scheduled.enabled", true); } From 3c31001a403e41d4452c1e6629c4513a82c71fa5 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 24 Mar 2025 22:37:13 +0100 Subject: [PATCH 0476/1184] updated to support intune policies --- src/pages/tenant/standards/compare/index.js | 171 ++++++++++++++------ 1 file changed, 118 insertions(+), 53 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index ec8538f2d13d..03b2e4acffec 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -101,58 +101,123 @@ const Page = () => { const allStandards = []; if (selectedTemplate.standards) { Object.entries(selectedTemplate.standards).forEach(([standardKey, standardConfig]) => { - const standardId = `standards.${standardKey}`; - const standardInfo = standards.find((s) => s.name === standardId); - const standardSettings = standardConfig.standards?.[standardKey] || {}; - - // Find the tenant's value for this standard - const currentTenantStandard = currentTenantData.find( - (s) => s.standardId === standardId - ); - - // Determine compliance status - let isCompliant = false; - - // Check if the standard is directly in the tenant object (like "standards.AuditLog": true) - const standardIdWithoutPrefix = standardId.replace("standards.", ""); - const directStandardValue = currentTenantObj?.[standardId]; - - // Special case for boolean standards that are true in the tenant - if (directStandardValue === true) { - // If the standard is directly in the tenant and is true, it's compliant - isCompliant = true; - } else if (directStandardValue !== undefined) { - // For non-boolean values, use strict equality - isCompliant = - JSON.stringify(directStandardValue) === JSON.stringify(standardSettings); - } else if (currentTenantStandard) { - // Fall back to the previous logic if the standard is not directly in the tenant object - if (typeof standardSettings === "boolean" && standardSettings === true) { - isCompliant = currentTenantStandard.value === true; - } else { + // Special handling for IntuneTemplate which is an array of items + if (standardKey === "IntuneTemplate" && Array.isArray(standardConfig)) { + // Process each IntuneTemplate item separately + standardConfig.forEach((templateItem, index) => { + const templateId = templateItem.TemplateList?.value; + if (templateId) { + const standardId = `standards.IntuneTemplate.${templateId}`; + const standardInfo = standards.find((s) => s.name === `standards.IntuneTemplate`); + + // Find the tenant's value for this specific template + const currentTenantStandard = currentTenantData.find( + (s) => s.standardId === standardId + ); + + // Get the direct standard value from the tenant object + const directStandardValue = currentTenantObj?.[standardId]; + + // Determine compliance status + let isCompliant = false; + + // For IntuneTemplate, the value is true if compliant, or an object with comparison data if not compliant + if (directStandardValue === true) { + isCompliant = true; + } else if ( + directStandardValue !== undefined && + typeof directStandardValue !== "object" + ) { + isCompliant = true; + } else if (currentTenantStandard) { + isCompliant = currentTenantStandard.value === true; + } + + // Create a standardValue object that contains the template settings + const templateSettings = { + templateId, + Template: templateItem.TemplateList?.label || "Unknown Template", + "Assign to": templateItem.AssignTo || "On", + "Excluded Group": templateItem.excludeGroup || "", + "Included Group": templateItem.customGroup || "", + }; + + allStandards.push({ + standardId, + standardName: `IntuneTemplate: ${ + templateItem.TemplateList?.label || templateId + }`, + currentTenantValue: + directStandardValue !== undefined + ? directStandardValue + : currentTenantStandard?.value, + standardValue: templateSettings, // Use the template settings object instead of true + complianceStatus: isCompliant ? "Compliant" : "Non-Compliant", + complianceDetails: + standardInfo?.docsDescription || standardInfo?.helpText || "", + standardDescription: standardInfo?.helpText || "", + standardImpact: standardInfo?.impact || "Medium Impact", + standardImpactColour: standardInfo?.impactColour || "warning", + templateName: selectedTemplate?.templateName || "Standard Template", + templateActions: templateItem.action || [], + }); + } + }); + } else { + // Regular handling for other standards + const standardId = `standards.${standardKey}`; + const standardInfo = standards.find((s) => s.name === standardId); + const standardSettings = standardConfig.standards?.[standardKey] || {}; + + // Find the tenant's value for this standard + const currentTenantStandard = currentTenantData.find( + (s) => s.standardId === standardId + ); + + // Determine compliance status + let isCompliant = false; + + // Check if the standard is directly in the tenant object (like "standards.AuditLog": true) + const standardIdWithoutPrefix = standardId.replace("standards.", ""); + const directStandardValue = currentTenantObj?.[standardId]; + + // Special case for boolean standards that are true in the tenant + if (directStandardValue === true) { + // If the standard is directly in the tenant and is true, it's compliant + isCompliant = true; + } else if (directStandardValue !== undefined) { + // For non-boolean values, use strict equality isCompliant = - JSON.stringify(currentTenantStandard.value) === JSON.stringify(standardSettings); + JSON.stringify(directStandardValue) === JSON.stringify(standardSettings); + } else if (currentTenantStandard) { + // Fall back to the previous logic if the standard is not directly in the tenant object + if (typeof standardSettings === "boolean" && standardSettings === true) { + isCompliant = currentTenantStandard.value === true; + } else { + isCompliant = + JSON.stringify(currentTenantStandard.value) === + JSON.stringify(standardSettings); + } } - } - // Use the direct standard value from the tenant object if it exists - - allStandards.push({ - standardId, - standardName: standardId || standardKey, - currentTenantValue: - directStandardValue !== undefined - ? directStandardValue - : currentTenantStandard?.value, - standardValue: standardSettings, - complianceStatus: isCompliant ? "Compliant" : "Non-Compliant", - complianceDetails: standardInfo?.docsDescription || standardInfo?.helpText || "", - standardDescription: standardInfo?.helpText || "", - standardImpact: standardInfo?.impact || "Medium Impact", - standardImpactColour: standardInfo?.impactColour || "warning", - templateName: selectedTemplate.templateName || "Standard Template", - templateActions: standardConfig.action || [], - }); + // Use the direct standard value from the tenant object if it exists + allStandards.push({ + standardId, + standardName: standardId || standardKey, + currentTenantValue: + directStandardValue !== undefined + ? directStandardValue + : currentTenantStandard?.value, + standardValue: standardSettings, + complianceStatus: isCompliant ? "Compliant" : "Non-Compliant", + complianceDetails: standardInfo?.docsDescription || standardInfo?.helpText || "", + standardDescription: standardInfo?.helpText || "", + standardImpact: standardInfo?.impact || "Medium Impact", + standardImpactColour: standardInfo?.impactColour || "warning", + templateName: selectedTemplate.templateName || "Standard Template", + templateActions: standardConfig.action || [], + }); + } }); } @@ -193,8 +258,8 @@ const Page = () => { { - templateDetails?.data?.filter((template) => template.GUID === templateId)[0] - .templateName + templateDetails?.data?.filter((template) => template.GUID === templateId)?.[0] + ?.templateName } @@ -220,8 +285,8 @@ const Page = () => { )} - {templateDetails?.data?.filter((template) => template.GUID === templateId)[0] - .description && ( + {templateDetails?.data?.filter((template) => template.GUID === templateId)?.[0] + ?.description && ( Date: Mon, 24 Mar 2025 17:37:59 -0400 Subject: [PATCH 0477/1184] fix rendering issues with exch cmdlets --- src/pages/cipp/advanced/exchange-cmdlets.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/pages/cipp/advanced/exchange-cmdlets.js b/src/pages/cipp/advanced/exchange-cmdlets.js index 8b2583d0a1bf..76de317c7df1 100644 --- a/src/pages/cipp/advanced/exchange-cmdlets.js +++ b/src/pages/cipp/advanced/exchange-cmdlets.js @@ -8,6 +8,7 @@ import { DialogTitle, DialogContent, IconButton, + Skeleton, } from "@mui/material"; import { useForm } from "react-hook-form"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; @@ -130,7 +131,7 @@ const Page = () => { { - + {roleDetails.isPending ? ( + + ) : ( + + )}
    From 9823d81b33c8bff21f13d9230515edd18dff5116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Tue, 25 Mar 2025 09:31:36 +0100 Subject: [PATCH 0478/1184] Update CippRemediationCard.jsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristian Kjærgård <31723128+kris6673@users.noreply.github.com> --- src/components/CippCards/CippRemediationCard.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/CippCards/CippRemediationCard.jsx b/src/components/CippCards/CippRemediationCard.jsx index abfaac8df111..d18739c033ca 100644 --- a/src/components/CippCards/CippRemediationCard.jsx +++ b/src/components/CippCards/CippRemediationCard.jsx @@ -59,6 +59,7 @@ export default function CippRemediationCard(props) { Block user sign-in Reset user password Disconnect all current sessions + Remove all MFA methods for the user Disable all inbox rules for the user Date: Tue, 25 Mar 2025 12:49:22 -0400 Subject: [PATCH 0479/1184] exchange info refresh --- .../CippCards/CippExchangeInfoCard.jsx | 60 ++++++++++++++----- .../administration/users/user/exchange.jsx | 7 ++- 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/src/components/CippCards/CippExchangeInfoCard.jsx b/src/components/CippCards/CippExchangeInfoCard.jsx index 00dbd2f6e56d..524ec7acce4d 100644 --- a/src/components/CippCards/CippExchangeInfoCard.jsx +++ b/src/components/CippCards/CippExchangeInfoCard.jsx @@ -1,13 +1,23 @@ import PropTypes from "prop-types"; -import { Card, CardHeader, Divider, Skeleton, Chip } from "@mui/material"; +import { + Card, + CardHeader, + Divider, + Skeleton, + Chip, + IconButton, + Typography, + CircularProgress, +} from "@mui/material"; import { PropertyList } from "/src/components/property-list"; import { PropertyListItem } from "/src/components/property-list-item"; import { getCippFormatting } from "../../utils/get-cipp-formatting"; -import { Check as CheckIcon, Close as CloseIcon } from "@mui/icons-material"; +import { Check as CheckIcon, Close as CloseIcon, Sync } from "@mui/icons-material"; import { LinearProgressWithLabel } from "../linearProgressWithLabel"; +import { Stack } from "@mui/system"; export const CippExchangeInfoCard = (props) => { - const { exchangeData, isFetching = false, ...other } = props; + const { exchangeData, isLoading = false, isFetching = false, handleRefresh, ...other } = props; // Define the protocols array const protocols = [ @@ -21,14 +31,30 @@ export const CippExchangeInfoCard = (props) => { return ( - + + Exchange Information + {isFetching ? ( + + ) : ( + + + + )} +
    + } + /> ) : ( exchangeData?.RecipientTypeDetails || "N/A" @@ -39,7 +65,7 @@ export const CippExchangeInfoCard = (props) => { divider label="Mailbox Usage" value={ - isFetching ? ( + isLoading ? ( ) : exchangeData?.TotalItemSize != null ? ( { divider label="Hidden From Address Lists" value={ - isFetching ? ( + isLoading ? ( ) : ( getCippFormatting(exchangeData?.HiddenFromAddressLists, "HiddenFromAddressLists") @@ -75,7 +101,7 @@ export const CippExchangeInfoCard = (props) => { ) : ( getCippFormatting(exchangeData?.ForwardAndDeliver, "ForwardAndDeliver") @@ -86,7 +112,7 @@ export const CippExchangeInfoCard = (props) => { divider label="Forwarding Address" value={ - isFetching ? ( + isLoading ? ( ) : ( exchangeData?.ForwardingAddress || "N/A" @@ -96,7 +122,7 @@ export const CippExchangeInfoCard = (props) => { ) : ( getCippFormatting(exchangeData?.ArchiveMailBox, "ArchiveMailBox") @@ -106,7 +132,7 @@ export const CippExchangeInfoCard = (props) => { ) : ( getCippFormatting(exchangeData?.AutoExpandingArchive, "AutoExpandingArchive") @@ -116,7 +142,7 @@ export const CippExchangeInfoCard = (props) => { ) : exchangeData?.TotalArchiveItemSize != null ? ( `${exchangeData.TotalArchiveItemSize} GB` @@ -129,7 +155,7 @@ export const CippExchangeInfoCard = (props) => { divider label="Total Archive Item Count" value={ - isFetching ? ( + isLoading ? ( ) : exchangeData?.TotalArchiveItemCount != null ? ( exchangeData.TotalArchiveItemCount @@ -142,7 +168,7 @@ export const CippExchangeInfoCard = (props) => { divider label="Litigation Hold" value={ - isFetching ? ( + isLoading ? ( ) : ( getCippFormatting(exchangeData?.LitigationHold, "LitigationHold") @@ -154,7 +180,7 @@ export const CippExchangeInfoCard = (props) => { divider label="Mailbox Protocols" value={ - isFetching ? ( + isLoading ? ( ) : (
    @@ -177,7 +203,7 @@ export const CippExchangeInfoCard = (props) => { divider label="Blocked For Spam" value={ - isFetching ? ( + isLoading ? ( ) : ( getCippFormatting(exchangeData?.BlockedForSpam, "BlockedForSpam") @@ -191,5 +217,7 @@ export const CippExchangeInfoCard = (props) => { CippExchangeInfoCard.propTypes = { exchangeData: PropTypes.object, + isLoading: PropTypes.bool, isFetching: PropTypes.bool, + handleRefresh: PropTypes.func, }; diff --git a/src/pages/identity/administration/users/user/exchange.jsx b/src/pages/identity/administration/users/user/exchange.jsx index 056fc93ad01a..136636349783 100644 --- a/src/pages/identity/administration/users/user/exchange.jsx +++ b/src/pages/identity/administration/users/user/exchange.jsx @@ -306,7 +306,12 @@ const Page = () => { ) && ( <> - + userRequest.refetch()} + /> From 2d0244321d0711811d8530568a9cb7f8129e4dfa Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 25 Mar 2025 20:53:49 +0100 Subject: [PATCH 0480/1184] last fronttend change before release --- src/pages/tenant/standards/compare/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 03b2e4acffec..51aa7d630902 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -144,7 +144,7 @@ const Page = () => { allStandards.push({ standardId, - standardName: `IntuneTemplate: ${ + standardName: `Intune Template: ${ templateItem.TemplateList?.label || templateId }`, currentTenantValue: @@ -168,7 +168,7 @@ const Page = () => { const standardId = `standards.${standardKey}`; const standardInfo = standards.find((s) => s.name === standardId); const standardSettings = standardConfig.standards?.[standardKey] || {}; - + console.log(standardInfo); // Find the tenant's value for this standard const currentTenantStandard = currentTenantData.find( (s) => s.standardId === standardId @@ -203,7 +203,7 @@ const Page = () => { // Use the direct standard value from the tenant object if it exists allStandards.push({ standardId, - standardName: standardId || standardKey, + standardName: standardInfo.label || standardKey, currentTenantValue: directStandardValue !== undefined ? directStandardValue From 1c03148724d5bb66a428c923e9caa1acb48db6d4 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 25 Mar 2025 20:57:49 +0100 Subject: [PATCH 0481/1184] removed creatable --- src/pages/tenant/administration/tenants/edit.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/pages/tenant/administration/tenants/edit.js b/src/pages/tenant/administration/tenants/edit.js index bbb5d726c91a..ddd3290ed777 100644 --- a/src/pages/tenant/administration/tenants/edit.js +++ b/src/pages/tenant/administration/tenants/edit.js @@ -4,14 +4,7 @@ import { ApiGetCall } from "../../../../api/ApiCall"; import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; -import { - Stack, - Box, - Tab, - Tabs, - Grid, - Typography, -} from "@mui/material"; +import { Stack, Box, Tab, Tabs, Grid, Typography } from "@mui/material"; import { CippCardTabPanel } from "/src/components/CippComponents/CippCardTabPanel"; import CippFormSection from "/src/components/CippFormPages/CippFormSection"; import CippPageCard from "../../../../components/CippCards/CippPageCard"; @@ -128,6 +121,7 @@ const Page = () => { disabled={tenantDetails.isFetching} /> Date: Tue, 25 Mar 2025 21:06:00 +0100 Subject: [PATCH 0482/1184] version up --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index ba547756572f..60991774dbef 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.3.2" + "version": "7.4.0" } From 4f38eb0fa3784f4fac7ff8a339007f766b1f51eb Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Mar 2025 16:14:57 -0400 Subject: [PATCH 0483/1184] Update yarn.lock --- yarn.lock | 672 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 343 insertions(+), 329 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7e6d7b25ed30..16f8f6ee4de9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,7 +19,7 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.5", "@babel/compat-data@^7.26.8": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8": version "7.26.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== @@ -45,13 +45,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.26.10": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7" - integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang== +"@babel/generator@^7.26.10", "@babel/generator@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" + integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== dependencies: - "@babel/parser" "^7.26.10" - "@babel/types" "^7.26.10" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" @@ -64,42 +64,42 @@ "@babel/types" "^7.25.9" "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" - integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" + integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== dependencies: - "@babel/compat-data" "^7.26.5" + "@babel/compat-data" "^7.26.8" "@babel/helper-validator-option" "^7.25.9" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.25.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71" - integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg== +"@babel/helper-create-class-features-plugin@^7.25.9", "@babel/helper-create-class-features-plugin@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz#518fad6a307c6a96f44af14912b2c20abe9bfc30" + integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" "@babel/helper-member-expression-to-functions" "^7.25.9" "@babel/helper-optimise-call-expression" "^7.25.9" "@babel/helper-replace-supers" "^7.26.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.26.9" + "@babel/traverse" "^7.27.0" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" - integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz#0e41f7d38c2ebe06ebd9cf0e02fb26019c77cd95" + integrity sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" regexpu-core "^6.2.0" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.3": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" - integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== +"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab" + integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -195,19 +195,19 @@ "@babel/types" "^7.25.9" "@babel/helpers@^7.26.10": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" - integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" + integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== dependencies: - "@babel/template" "^7.26.9" - "@babel/types" "^7.26.10" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" -"@babel/parser@^7.26.10", "@babel/parser@^7.26.9": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749" - integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== +"@babel/parser@^7.26.10", "@babel/parser@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" + integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== dependencies: - "@babel/types" "^7.26.10" + "@babel/types" "^7.27.0" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": version "7.25.9" @@ -322,11 +322,11 @@ "@babel/helper-plugin-utils" "^7.26.5" "@babel/plugin-transform-block-scoping@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" - integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz#acc2c0d98a7439bbde4244588ddbd4904701d47f" + integrity sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" "@babel/plugin-transform-class-properties@^7.25.9": version "7.25.9" @@ -468,7 +468,7 @@ "@babel/helper-module-transforms" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.25.9", "@babel/plugin-transform-modules-commonjs@^7.26.3": +"@babel/plugin-transform-modules-commonjs@^7.26.3": version "7.26.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== @@ -627,11 +627,11 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-regenerator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" - integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz#822feebef43d6a59a81f696b2512df5b1682db31" + integrity sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" regenerator-transform "^0.15.2" "@babel/plugin-transform-regexp-modifiers@^7.26.0": @@ -679,19 +679,19 @@ "@babel/helper-plugin-utils" "^7.26.5" "@babel/plugin-transform-typeof-symbol@^7.26.7": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz#d0e33acd9223744c1e857dbd6fa17bd0a3786937" - integrity sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz#044a0890f3ca694207c7826d0c7a65e5ac008aae" + integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w== dependencies: "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-typescript@^7.25.9": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz#2e9caa870aa102f50d7125240d9dbf91334b0950" - integrity sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw== +"@babel/plugin-transform-typescript@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz#a29fd3481da85601c7e34091296e9746d2cccba8" + integrity sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.0" "@babel/helper-plugin-utils" "^7.26.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-syntax-typescript" "^7.25.9" @@ -824,49 +824,49 @@ "@babel/plugin-transform-react-pure-annotations" "^7.25.9" "@babel/preset-typescript@^7.21.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" - integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz#4dcb8827225975f4290961b0b089f9c694ca50c7" + integrity sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" "@babel/helper-validator-option" "^7.25.9" "@babel/plugin-syntax-jsx" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.25.9" - "@babel/plugin-transform-typescript" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-typescript" "^7.27.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.25.0", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.26.10", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" - integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.25.0", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.26.10", "@babel/runtime@^7.26.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" + integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.25.9", "@babel/template@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" - integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== +"@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" + integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== dependencies: "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.26.9" - "@babel/types" "^7.26.9" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" -"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.26.9": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380" - integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A== +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" + integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== dependencies: "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.10" - "@babel/parser" "^7.26.10" - "@babel/template" "^7.26.9" - "@babel/types" "^7.26.10" + "@babel/generator" "^7.27.0" + "@babel/parser" "^7.27.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9", "@babel/types@^7.4.4": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259" - integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== +"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.4.4": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" + integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== dependencies: "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" @@ -1044,9 +1044,9 @@ "@types/json-schema" "^7.0.15" "@eslint/eslintrc@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.0.tgz#96a558f45842989cca7ea1ecd785ad5491193846" - integrity sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ== + version "3.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1309,9 +1309,9 @@ prop-types "^15.8.1" "@mui/core-downloads-tracker@^6.4.7": - version "6.4.7" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.7.tgz#df62091560024a6412b0f35dcd584f9dba70dced" - integrity sha512-XjJrKFNt9zAKvcnoIIBquXyFyhfrHYuttqMsoDS7lM7VwufYG4fAPw4kINjBFg++fqXM2BNAuWR9J7XVIuKIKg== + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.8.tgz#ffabbdce0e7b341e9c2906bb06a00b34c9d15e05" + integrity sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw== "@mui/icons-material@6.4.7": version "6.4.7" @@ -1351,19 +1351,19 @@ react-is "^19.0.0" react-transition-group "^4.4.5" -"@mui/private-theming@^6.4.6": - version "6.4.6" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.6.tgz#77c0b150be94c061b34b34ce00eb60cdfb92837f" - integrity sha512-T5FxdPzCELuOrhpA2g4Pi6241HAxRwZudzAuL9vBvniuB5YU82HCmrARw32AuCiyTfWzbrYGGpZ4zyeqqp9RvQ== +"@mui/private-theming@^6.4.6", "@mui/private-theming@^6.4.8": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.8.tgz#210d1a1ab4501f6cf31f1abdf1b0a37fbdfc2991" + integrity sha512-sWwQoNSn6elsPTAtSqCf+w5aaGoh7AASURNmpy+QTTD/zwJ0Jgwt0ZaaP6mXq2IcgHxYnYloM/+vJgHPMkRKTQ== dependencies: "@babel/runtime" "^7.26.0" - "@mui/utils" "^6.4.6" + "@mui/utils" "^6.4.8" prop-types "^15.8.1" -"@mui/styled-engine@^6.4.6": - version "6.4.6" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.4.6.tgz#cd0783adbb066a349e1995f0e1a7b8c3c2d59738" - integrity sha512-vSWYc9ZLX46be5gP+FCzWVn5rvDr4cXC5JBZwSIkYk9xbC7GeV+0kCvB8Q6XLFQJy+a62bbqtmdwS4Ghi9NBlQ== +"@mui/styled-engine@^6.4.6", "@mui/styled-engine@^6.4.8": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.4.8.tgz#a454115ab349cf729510c107f2564fd1e23c385a" + integrity sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw== dependencies: "@babel/runtime" "^7.26.0" "@emotion/cache" "^11.13.5" @@ -1372,7 +1372,7 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@6.4.7", "@mui/system@^6.4.7": +"@mui/system@6.4.7": version "6.4.7" resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.7.tgz#a4a8e541a2f1efef1c85a338723aa2f2d0a31e8e" integrity sha512-7wwc4++Ak6tGIooEVA9AY7FhH2p9fvBMORT4vNLMAysH3Yus/9B9RYMbrn3ANgsOyvT3Z7nE+SP8/+3FimQmcg== @@ -1386,18 +1386,32 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.21": - version "7.2.21" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.21.tgz#63f50874eda8e4a021a69aaa8ba9597369befda2" - integrity sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww== +"@mui/system@^6.4.7": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.8.tgz#e4ecb65677c2268959effad1f4f885d9b836c09b" + integrity sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/private-theming" "^6.4.8" + "@mui/styled-engine" "^6.4.8" + "@mui/types" "~7.2.24" + "@mui/utils" "^6.4.8" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/types@^7.2.21", "@mui/types@~7.2.24": + version "7.2.24" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" + integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== -"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.4.1", "@mui/utils@^6.4.6": - version "6.4.6" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.6.tgz#307828bee501d30ed5cd1e339ca28c9efcc4e3f9" - integrity sha512-43nZeE1pJF2anGafNydUcYFPtHwAqiBiauRtaMvurdrZI3YrUjHkAu43RBsxef7OFtJMXGiHFvq43kb7lig0sA== +"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.4.1", "@mui/utils@^6.4.6", "@mui/utils@^6.4.8": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.8.tgz#f80ee0c0ac47f1cd47c2031a5fb87243322b6bf3" + integrity sha512-C86gfiZ5BfZ51KqzqoHi1WuuM2QdSKoFhbkZeAfQRB+jCc4YNhhj11UXFVMMsqBgZ+Zy8IHNJW3M9Wj/LOwRXQ== dependencies: "@babel/runtime" "^7.26.0" - "@mui/types" "^7.2.21" + "@mui/types" "~7.2.24" "@types/prop-types" "^15.7.14" clsx "^2.1.1" prop-types "^15.8.1" @@ -1438,10 +1452,10 @@ "@emnapi/runtime" "^1.3.1" "@tybys/wasm-util" "^0.9.0" -"@next/env@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/env/-/env-15.2.2.tgz#6345352365a811c523cecf284874ff489b675e59" - integrity sha512-yWgopCfA9XDR8ZH3taB5nRKtKJ1Q5fYsTOuYkzIIoS8TJ0UAUKAGF73JnGszbjk2ufAQDj6mDdgsJAFx5CLtYQ== +"@next/env@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-15.2.4.tgz#060f8d8ddb02be5c825eab4ccd9ab619001efffb" + integrity sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g== "@next/eslint-plugin-next@15.2.2": version "15.2.2" @@ -1450,45 +1464,45 @@ dependencies: fast-glob "3.3.1" -"@next/swc-darwin-arm64@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.2.tgz#d3131279d4815ed7604eba7bf0063e0b8bfd2135" - integrity sha512-HNBRnz+bkZ+KfyOExpUxTMR0Ow8nkkcE6IlsdEa9W/rI7gefud19+Sn1xYKwB9pdCdxIP1lPru/ZfjfA+iT8pw== - -"@next/swc-darwin-x64@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.2.tgz#8562f6b51177aa30f3a6e95a8b3e0e176a6cb04f" - integrity sha512-mJOUwp7al63tDpLpEFpKwwg5jwvtL1lhRW2fI1Aog0nYCPAhxbJsaZKdoVyPZCy8MYf/iQVNDuk/+i29iLCzIA== - -"@next/swc-linux-arm64-gnu@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.2.tgz#c2466cffc541f39ae4d435087c81f5899d401903" - integrity sha512-5ZZ0Zwy3SgMr7MfWtRE7cQWVssfOvxYfD9O7XHM7KM4nrf5EOeqwq67ZXDgo86LVmffgsu5tPO57EeFKRnrfSQ== - -"@next/swc-linux-arm64-musl@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.2.tgz#24ed87fe47325597e986bd01c427efae53d6b677" - integrity sha512-cgKWBuFMLlJ4TWcFHl1KOaVVUAF8vy4qEvX5KsNd0Yj5mhu989QFCq1WjuaEbv/tO1ZpsQI6h/0YR8bLwEi+nA== - -"@next/swc-linux-x64-gnu@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.2.tgz#0240f44530ca39c1fc899fabe8f33aa35d7e77da" - integrity sha512-c3kWSOSsVL8rcNBBfOq1+/j2PKs2nsMwJUV4icUxRgGBwUOfppeh7YhN5s79enBQFU+8xRgVatFkhHU1QW7yUA== - -"@next/swc-linux-x64-musl@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.2.tgz#cca6ce8e9ec89afaa618673f0f8658682c30ff56" - integrity sha512-PXTW9PLTxdNlVYgPJ0equojcq1kNu5NtwcNjRjHAB+/sdoKZ+X8FBu70fdJFadkxFIGekQTyRvPMFF+SOJaQjw== - -"@next/swc-win32-arm64-msvc@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.2.tgz#08f621602ed53fa21ddf6f656160b9186860be15" - integrity sha512-nG644Es5llSGEcTaXhnGWR/aThM/hIaz0jx4MDg4gWC8GfTCp8eDBWZ77CVuv2ha/uL9Ce+nPTfYkSLG67/sHg== - -"@next/swc-win32-x64-msvc@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.2.tgz#2072d69374f8c944134a5c5a80ce03ff84254cfa" - integrity sha512-52nWy65S/R6/kejz3jpvHAjZDPKIbEQu4x9jDBzmB9jJfuOy5rspjKu4u77+fI4M/WzLXrrQd57hlFGzz1ubcQ== +"@next/swc-darwin-arm64@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz#3a54f67aa2e0096a9147bd24dff1492e151819ae" + integrity sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw== + +"@next/swc-darwin-x64@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz#9b540f24afde1b7878623fdba9695344d26b7d67" + integrity sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew== + +"@next/swc-linux-arm64-gnu@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz#417a234c9f4dc5495094a8979859ac528c0f1f58" + integrity sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ== + +"@next/swc-linux-arm64-musl@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz#9bca76375508a175956f2d51f8547d0d6f9ffa64" + integrity sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA== + +"@next/swc-linux-x64-gnu@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz#c3d5041d53a5b228bf521ed49649e0f2a7aff947" + integrity sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw== + +"@next/swc-linux-x64-musl@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz#b2a51a108b1c412c69a504556cde0517631768c7" + integrity sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw== + +"@next/swc-win32-arm64-msvc@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz#7d687b42512abd36f44c2c787d58a1590f174b69" + integrity sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg== + +"@next/swc-win32-x64-msvc@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz#779a0ea272fa4f509387f3b320e2d70803943a95" + integrity sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1846,10 +1860,10 @@ dependencies: remove-accents "0.5.0" -"@tanstack/query-core@5.68.0": - version "5.68.0" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.68.0.tgz#3765573de58741c68fb80b128d3e3ffb4d80cb68" - integrity sha512-r8rFYYo8/sY/LNaOqX84h12w7EQev4abFXDWy4UoDVUJzJ5d9Fbmb8ayTi7ScG+V0ap44SF3vNs/45mkzDGyGw== +"@tanstack/query-core@5.69.0": + version "5.69.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.69.0.tgz#c434505987ade936dc53e6e27aa1406b0295516f" + integrity sha512-Kn410jq6vs1P8Nm+ZsRj9H+U3C0kjuEkYLxbiCyn3MDEiYor1j2DGVULqAz62SLZtUZ/e9Xt6xMXiJ3NJ65WyQ== "@tanstack/query-devtools@5.67.2": version "5.67.2" @@ -1857,18 +1871,18 @@ integrity sha512-O4QXFFd7xqp6EX7sdvc9tsVO8nm4lpWBqwpgjpVLW5g7IeOY6VnS/xvs/YzbRhBVkKTMaJMOUGU7NhSX+YGoNg== "@tanstack/react-query-devtools@^5.51.11": - version "5.68.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.68.0.tgz#83a76ae279796e0c2105cd760ef27e93bee79155" - integrity sha512-h9ArHkfa7SD5eGnJ9h+9M5uYWBdeVeY+WalrtGLCAtJJvHx6/RrtbbzxeoEQbPyx3f0kPcwJ58DGQ+7CBXelpg== + version "5.69.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.69.0.tgz#2cb8083028aab591b9a82caf68cd7a383a0c8b1a" + integrity sha512-sYklnou3IKAemqB5wJeBwjmG5bUGDKAL5/I4pVA+aqSnsNibVLt8/pAU976uuJ5K71w71bHtI/AMxiIs3gtkEA== dependencies: "@tanstack/query-devtools" "5.67.2" "@tanstack/react-query@^5.51.11": - version "5.68.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.68.0.tgz#f7b242eb800ce7c36b4edbe26c9ba8478eb18826" - integrity sha512-mMOdGDKlwTP/WV72QqSNf4PAMeoBp/DqBHQ222wBfb51Looi8QUqnCnb9O98ZgvNISmy6fzxRGBJdZ+9IBvX2Q== + version "5.69.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.69.0.tgz#8d58e800854cc11d0aa2c39569f53ae32ba442a9" + integrity sha512-Ift3IUNQqTcaFa1AiIQ7WCb/PPy8aexZdq9pZWLXhfLcLxH0+PZqJ2xFImxCpdDZrFRZhLJrh76geevS5xjRhA== dependencies: - "@tanstack/query-core" "5.68.0" + "@tanstack/query-core" "5.69.0" "@tanstack/react-table@8.20.6": version "8.20.6" @@ -2119,9 +2133,9 @@ "@types/estree" "*" "@types/estree@*", "@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" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" + integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== "@types/hast@^2.0.0": version "2.3.10" @@ -2186,9 +2200,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "22.13.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4" - integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw== + version "22.13.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.13.tgz#5e7d110fb509b0d4a43fbf48fa9d6e0f83e1b1e7" + integrity sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ== dependencies: undici-types "~6.20.0" @@ -2237,9 +2251,9 @@ integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== "@types/react@*": - version "19.0.10" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.10.tgz#d0c66dafd862474190fe95ce11a68de69ed2b0eb" - integrity sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g== + version "19.0.12" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.12.tgz#338b3f7854adbb784be454b3a83053127af96bd3" + integrity sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA== dependencies: csstype "^3.0.2" @@ -2264,61 +2278,61 @@ integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== "@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz#3e48eb847924161843b092c87a9b65176b53782f" - integrity sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA== + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz#ad1465aa6fe7e937801c291648dec951c4dc38e6" + integrity sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.26.1" - "@typescript-eslint/type-utils" "8.26.1" - "@typescript-eslint/utils" "8.26.1" - "@typescript-eslint/visitor-keys" "8.26.1" + "@typescript-eslint/scope-manager" "8.28.0" + "@typescript-eslint/type-utils" "8.28.0" + "@typescript-eslint/utils" "8.28.0" + "@typescript-eslint/visitor-keys" "8.28.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^2.0.1" "@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.1.tgz#0e2f915a497519fc43f52cf2ecbfa607ff56f72e" - integrity sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ== - dependencies: - "@typescript-eslint/scope-manager" "8.26.1" - "@typescript-eslint/types" "8.26.1" - "@typescript-eslint/typescript-estree" "8.26.1" - "@typescript-eslint/visitor-keys" "8.26.1" + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.28.0.tgz#85321707e8711c0e66a949ea228224af35f45c98" + integrity sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ== + dependencies: + "@typescript-eslint/scope-manager" "8.28.0" + "@typescript-eslint/types" "8.28.0" + "@typescript-eslint/typescript-estree" "8.28.0" + "@typescript-eslint/visitor-keys" "8.28.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz#5e6ad0ac258ccf79462e91c3f43a3f1f7f31a6cc" - integrity sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg== +"@typescript-eslint/scope-manager@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz#e495b20438a3787e00498774d5625e620d68f9fe" + integrity sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw== dependencies: - "@typescript-eslint/types" "8.26.1" - "@typescript-eslint/visitor-keys" "8.26.1" + "@typescript-eslint/types" "8.28.0" + "@typescript-eslint/visitor-keys" "8.28.0" -"@typescript-eslint/type-utils@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz#462f0bae09de72ac6e8e1af2ebe588c23224d7f8" - integrity sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg== +"@typescript-eslint/type-utils@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz#fc565414ebc16de1fc65e0dd8652ce02c78ca61f" + integrity sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg== dependencies: - "@typescript-eslint/typescript-estree" "8.26.1" - "@typescript-eslint/utils" "8.26.1" + "@typescript-eslint/typescript-estree" "8.28.0" + "@typescript-eslint/utils" "8.28.0" debug "^4.3.4" ts-api-utils "^2.0.1" -"@typescript-eslint/types@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.26.1.tgz#d5978721670cff263348d5062773389231a64132" - integrity sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ== +"@typescript-eslint/types@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.28.0.tgz#7c73878385edfd9674c7aa10975e6c484b4f896e" + integrity sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA== -"@typescript-eslint/typescript-estree@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz#eb0e4ce31753683d83be53441a409fd5f0b34afd" - integrity sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA== +"@typescript-eslint/typescript-estree@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz#56b999f26f7ca67b9d75d6a67af5c8b8e4e80114" + integrity sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA== dependencies: - "@typescript-eslint/types" "8.26.1" - "@typescript-eslint/visitor-keys" "8.26.1" + "@typescript-eslint/types" "8.28.0" + "@typescript-eslint/visitor-keys" "8.28.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -2326,22 +2340,22 @@ semver "^7.6.0" ts-api-utils "^2.0.1" -"@typescript-eslint/utils@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.26.1.tgz#54cc58469955f25577f659753b71a0e117a0539f" - integrity sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg== +"@typescript-eslint/utils@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.28.0.tgz#7850856620a896b7ac621ac12d49c282aefbb528" + integrity sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.26.1" - "@typescript-eslint/types" "8.26.1" - "@typescript-eslint/typescript-estree" "8.26.1" + "@typescript-eslint/scope-manager" "8.28.0" + "@typescript-eslint/types" "8.28.0" + "@typescript-eslint/typescript-estree" "8.28.0" -"@typescript-eslint/visitor-keys@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz#c5267fcc82795cf10280363023837deacad2647c" - integrity sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg== +"@typescript-eslint/visitor-keys@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz#18eb9a25cc9dadb027835c58efe93a5c4ee81969" + integrity sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg== dependencies: - "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/types" "8.28.0" eslint-visitor-keys "^4.2.0" "@uiw/react-json-view@^2.0.0-alpha.30": @@ -2354,62 +2368,62 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== -"@unrs/rspack-resolver-binding-darwin-arm64@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.1.2.tgz#90b20c786402cafcea09aeb3587c627edd365995" - integrity sha512-bQx2L40UF5XxsXwkD26PzuspqUbUswWVbmclmUC+c83Cv/EFrFJ1JaZj5Q5jyYglKGOtyIWY/hXTCdWRN9vT0Q== +"@unrs/rspack-resolver-binding-darwin-arm64@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.2.2.tgz#4a40be18ae1d5a417ca9246b0e9c7eda11a49998" + integrity sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw== -"@unrs/rspack-resolver-binding-darwin-x64@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.1.2.tgz#36c9a645e2fc663732943b9ba317e9d97bab0709" - integrity sha512-dMi9a7//BsuPTnhWEDxmdKZ6wxQlPnAob8VSjefGbKX/a+pHfTaX1pm/jv2VPdarP96IIjCKPatJS/TtLQeGQA== +"@unrs/rspack-resolver-binding-darwin-x64@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.2.2.tgz#f1d9226724fa4f47f0eaab50fb046568e29d68e0" + integrity sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg== -"@unrs/rspack-resolver-binding-freebsd-x64@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.1.2.tgz#4e35d673e3e99f81754d93bca73ce1c9f6cd1d45" - integrity sha512-RiBZQ+LSORQObfhV1yH7jGz+4sN3SDYtV53jgc8tUVvqdqVDaUm1KA3zHLffmoiYNGrYkE3sSreGC+FVpsB4Vg== +"@unrs/rspack-resolver-binding-freebsd-x64@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.2.2.tgz#3f14520900a130bf1b30922a7be0024968506e8c" + integrity sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA== -"@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.1.2.tgz#b68bede53bdf65d4ac957b06d3f5cfc666f45043" - integrity sha512-IyKIFBtOvuPCJt1WPx9e9ovTGhZzrIbW11vWzw4aPmx3VShE+YcMpAldqQubdCep0UVKZyFt+2hQDQZwFiJ4jg== +"@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.2.2.tgz#7aa5ae2d6c762b0737694b48cd069629dd205c0c" + integrity sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw== -"@unrs/rspack-resolver-binding-linux-arm64-gnu@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.1.2.tgz#fe9b9792e478ab779de7de1d222389b67e711b83" - integrity sha512-RfYtlCtJrv5i6TO4dSlpbyOJX9Zbhmkqrr9hjDfr6YyE5KD0ywLRzw8UjXsohxG1XWgRpb2tvPuRYtURJwbqWg== +"@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.2.2.tgz#1422b244db1ff7eb79d74260d25dac976c423e91" + integrity sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ== -"@unrs/rspack-resolver-binding-linux-arm64-musl@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.1.2.tgz#0514f0ab586db7c6cb38b2726e27e3da123508a9" - integrity sha512-MaITzkoqsn1Rm3+YnplubgAQEfOt+2jHfFvuFhXseUfcfbxe8Zyc3TM7LKwgv7mRVjIl+/yYN5JqL0cjbnhAnQ== +"@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.2.2.tgz#9cc30a98b25b704b3d3bb17b9932a24d39049719" + integrity sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ== -"@unrs/rspack-resolver-binding-linux-x64-gnu@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.1.2.tgz#901c347e1fd9d09fd8ef8e51dad73e41d2d4c2d7" - integrity sha512-Nu981XmzQqis/uB3j4Gi3p5BYCd/zReU5zbJmjMrEH7IIRH0dxZpdOmS/+KwEk6ao7Xd8P2D2gDHpHD/QTp0aQ== +"@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.2.2.tgz#1ce389a2317c96276ceec82de4e6e325974946a7" + integrity sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw== -"@unrs/rspack-resolver-binding-linux-x64-musl@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.1.2.tgz#b71c69e130ea5560a492db95bfc1767674cb95ba" - integrity sha512-xJupeDvaRpV0ADMuG1dY9jkOjhUzTqtykvchiU2NldSD+nafSUcMWnoqzNUx7HGiqbTMOw9d9xT8ZiFs+6ZFyQ== +"@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.2.2.tgz#6d262acedac6d6e3d85c2d370de47e8e669cc316" + integrity sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg== -"@unrs/rspack-resolver-binding-wasm32-wasi@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.1.2.tgz#47500e79a272596a6654f6c9b5538ce522638209" - integrity sha512-un6X/xInks+KEgGpIHFV8BdoODHRohaDRvOwtjq+FXuoI4Ga0P6sLRvf4rPSZDvoMnqUhZtVNG0jG9oxOnrrLQ== +"@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.2.2.tgz#72bf01b52c5e2d567b5f90ee842cde674e0356c7" + integrity sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog== dependencies: "@napi-rs/wasm-runtime" "^0.2.7" -"@unrs/rspack-resolver-binding-win32-arm64-msvc@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.1.2.tgz#0aaac1f46e7d41aaf82a830a87bb4700c110b367" - integrity sha512-2lCFkeT1HYUb/OOStBS1m67aZOf9BQxRA+Wf/xs94CGgzmoQt7H4V/BrkB/GSGKsudXjkiwt2oHNkHiowAS90A== +"@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.2.2.tgz#e1a74655a42d48d2c005dd69ba148547167e1701" + integrity sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg== -"@unrs/rspack-resolver-binding-win32-x64-msvc@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.1.2.tgz#68ad3b231d092e979bf4174c73b593fe1332b906" - integrity sha512-EYfya5HCQ/8Yfy7rvAAX2rGytu81+d/CIhNCbZfNKLQ690/qFsdEeTXRsMQW1afHoluMM50PsjPYu8ndy8fSQg== +"@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.2.2.tgz#ac441b3bd8cf97b7d3d35f4e7f9792f8e257e729" + integrity sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw== "@yr/monotone-cubic-spline@^1.0.3": version "1.0.3" @@ -2604,9 +2618,9 @@ axe-core@^4.10.0: integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== axios@^1.7.2: - version "1.8.3" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.3.tgz#9ebccd71c98651d547162a018a1a95a4b4ed4de8" - integrity sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A== + version "1.8.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -2627,12 +2641,12 @@ babel-plugin-macros@^3.1.0: resolve "^1.19.0" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.12" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" - integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== + version "0.4.13" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz#7d445f0e0607ebc8fb6b01d7e8fb02069b91dd8b" + integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.3" + "@babel/helper-define-polyfill-provider" "^0.6.4" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.11.0: @@ -2644,11 +2658,11 @@ babel-plugin-polyfill-corejs3@^0.11.0: core-js-compat "^3.40.0" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" - integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== + version "0.6.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz#428c615d3c177292a22b4f93ed99e358d7906a9b" + integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.3" + "@babel/helper-define-polyfill-provider" "^0.6.4" bail@^2.0.0: version "2.0.2" @@ -2787,11 +2801,11 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001688: - version "1.0.30001705" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001705.tgz#dc3510bcdef261444ca944b7be9c8d0bb7fafeef" - integrity sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg== + version "1.0.30001707" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz#c5e104d199e6f4355a898fcd995a066c7eb9bf41" + integrity sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw== -canvg@^3.0.6: +canvg@^3.0.11: version "3.0.11" resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.11.tgz#4b4290a6c7fa36871fac2b14e432eff33b33cf2b" integrity sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA== @@ -3300,9 +3314,9 @@ duplexer2@^0.1.2: readable-stream "^2.0.2" electron-to-chromium@^1.5.73: - version "1.5.119" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.119.tgz#4e105e419209b33e1c44b4d1b5fc6fb27fac0209" - integrity sha512-Ku4NMzUjz3e3Vweh7PhApPrZSS4fyiCIbcIrG9eKrriYVLmbMepETR/v6SU7xPm98QTqMSYiCwfO89QNjXLkbQ== + version "1.5.123" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz#fae5bdba0ba27045895176327aa79831aba0790c" + integrity sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA== eml-parse-js@^1.2.0-beta.0: version "1.2.0-beta.0" @@ -4628,16 +4642,16 @@ jspdf-autotable@^5.0.2: integrity sha512-YNKeB7qmx3pxOLcNeoqAv3qTS7KuvVwkFe5AduCawpop3NOkBUtqDToxNc225MlNecxT4kP2Zy3z/y/yvGdXUQ== jspdf@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-3.0.0.tgz#078adb1620f13da2d9e0d901cb1205781aa591c9" - integrity sha512-QvuQZvOI8CjfjVgtajdL0ihrDYif1cN5gXiF9lb9Pd9JOpmocvnNyFO9sdiJ/8RA5Bu8zyGOUjJLj5kiku16ug== + version "3.0.1" + resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-3.0.1.tgz#d81e1964f354f60412516eb2449ea2cccd4d2a3b" + integrity sha512-qaGIxqxetdoNnFQQXxTKUD9/Z7AloLaw94fFsOiJMxbfYdBbrBuhWmbzI8TVjrw7s3jBY1PFHofBKMV/wZPapg== dependencies: - "@babel/runtime" "^7.26.0" + "@babel/runtime" "^7.26.7" atob "^2.1.2" btoa "^1.2.1" fflate "^0.8.1" optionalDependencies: - canvg "^3.0.6" + canvg "^3.0.11" core-js "^3.6.0" dompurify "^3.2.4" html2canvas "^1.0.0-rc.5" @@ -5215,9 +5229,9 @@ multipipe@^1.0.2: object-assign "^4.1.0" nanoid@^3.3.6: - version "3.3.10" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.10.tgz#7bc882237698ef787d5cbba109e3b0168ba6e7b1" - integrity sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg== + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== natural-compare@^1.4.0: version "1.4.0" @@ -5225,11 +5239,11 @@ natural-compare@^1.4.0: integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== next@^15.2.2: - version "15.2.2" - resolved "https://registry.yarnpkg.com/next/-/next-15.2.2.tgz#e3941a0e0e76cfe1880b57452807489e0546e3a2" - integrity sha512-dgp8Kcx5XZRjMw2KNwBtUzhngRaURPioxoNIVl5BOyJbhi9CUgEtKDO7fx5wh8Z8vOVX1nYZ9meawJoRrlASYA== + version "15.2.4" + resolved "https://registry.yarnpkg.com/next/-/next-15.2.4.tgz#e05225e9511df98e3b2edc713e17f4c970bff961" + integrity sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ== dependencies: - "@next/env" "15.2.2" + "@next/env" "15.2.4" "@swc/counter" "0.1.3" "@swc/helpers" "0.5.15" busboy "1.6.0" @@ -5237,14 +5251,14 @@ next@^15.2.2: postcss "8.4.31" styled-jsx "5.1.6" optionalDependencies: - "@next/swc-darwin-arm64" "15.2.2" - "@next/swc-darwin-x64" "15.2.2" - "@next/swc-linux-arm64-gnu" "15.2.2" - "@next/swc-linux-arm64-musl" "15.2.2" - "@next/swc-linux-x64-gnu" "15.2.2" - "@next/swc-linux-x64-musl" "15.2.2" - "@next/swc-win32-arm64-msvc" "15.2.2" - "@next/swc-win32-x64-msvc" "15.2.2" + "@next/swc-darwin-arm64" "15.2.4" + "@next/swc-darwin-x64" "15.2.4" + "@next/swc-linux-arm64-gnu" "15.2.4" + "@next/swc-linux-arm64-musl" "15.2.4" + "@next/swc-linux-x64-gnu" "15.2.4" + "@next/swc-linux-x64-musl" "15.2.4" + "@next/swc-win32-arm64-msvc" "15.2.4" + "@next/swc-win32-x64-msvc" "15.2.4" sharp "^0.33.5" no-case@^3.0.4: @@ -5628,9 +5642,9 @@ prosemirror-history@^1.0.0, prosemirror-history@^1.4.1: rope-sequence "^1.3.0" prosemirror-inputrules@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz#ef1519bb2cb0d1e0cec74bad1a97f1c1555068bb" - integrity sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz#e22bfaf1d6ea4fe240ad447c184af3d520d43c37" + integrity sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA== dependencies: prosemirror-state "^1.0.0" prosemirror-transform "^1.0.0" @@ -5644,13 +5658,13 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2: w3c-keyname "^2.2.0" prosemirror-markdown@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.13.1.tgz#23feb6652dacb3dd78ffd8f131da37c20e4e4cf8" - integrity sha512-Sl+oMfMtAjWtlcZoj/5L/Q39MpEnVZ840Xo330WJWUvgyhNmLBLN7MsHn07s53nG/KImevWHSE6fEj4q/GihHw== + version "1.13.2" + resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz#863eb3fd5f57a444e4378174622b562735b1c503" + integrity sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g== dependencies: "@types/markdown-it" "^14.0.0" markdown-it "^14.0.0" - prosemirror-model "^1.20.0" + prosemirror-model "^1.25.0" prosemirror-menu@^1.2.4: version "1.2.4" @@ -5662,19 +5676,19 @@ prosemirror-menu@^1.2.4: prosemirror-history "^1.0.0" prosemirror-state "^1.0.0" -prosemirror-model@^1.0.0, prosemirror-model@^1.19.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0, prosemirror-model@^1.24.1: - version "1.24.1" - resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.24.1.tgz#b445e4f9b9cfc8c1a699215057b506842ebff1a9" - integrity sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg== +prosemirror-model@^1.0.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0, prosemirror-model@^1.24.1, prosemirror-model@^1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.0.tgz#c147113edc0718a14f03881e4c20367d0221f7af" + integrity sha512-/8XUmxWf0pkj2BmtqZHYJipTBMHIdVjuvFzMvEoxrtyGNmfvdhBiRwYt/eFwy2wA9DtBW3RLqvZnjurEkHaFCw== dependencies: orderedmap "^2.0.0" prosemirror-schema-basic@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.3.tgz#649c349bb21c61a56febf9deb71ac68fca4cedf2" - integrity sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA== + version "1.2.4" + resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz#389ce1ec09b8a30ea9bbb92c58569cb690c2d695" + integrity sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ== dependencies: - prosemirror-model "^1.19.0" + prosemirror-model "^1.25.0" prosemirror-schema-list@^1.4.1: version "1.5.1" @@ -6283,21 +6297,21 @@ rope-sequence@^1.3.0: integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== rspack-resolver@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/rspack-resolver/-/rspack-resolver-1.1.2.tgz#33b91858f7ae962d086ab00cbf66b8a4b8e9b570" - integrity sha512-eHhz+9JWHFdbl/CVVqEP6kviLFZqw1s0MWxLdsGMtUKUspSO3SERptPohmrUIC9jT1bGV9Bd3+r8AmWbdfNAzQ== + version "1.2.2" + resolved "https://registry.yarnpkg.com/rspack-resolver/-/rspack-resolver-1.2.2.tgz#f4f8f740246c59bc83525f830aca628b71843e8a" + integrity sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw== optionalDependencies: - "@unrs/rspack-resolver-binding-darwin-arm64" "1.1.2" - "@unrs/rspack-resolver-binding-darwin-x64" "1.1.2" - "@unrs/rspack-resolver-binding-freebsd-x64" "1.1.2" - "@unrs/rspack-resolver-binding-linux-arm-gnueabihf" "1.1.2" - "@unrs/rspack-resolver-binding-linux-arm64-gnu" "1.1.2" - "@unrs/rspack-resolver-binding-linux-arm64-musl" "1.1.2" - "@unrs/rspack-resolver-binding-linux-x64-gnu" "1.1.2" - "@unrs/rspack-resolver-binding-linux-x64-musl" "1.1.2" - "@unrs/rspack-resolver-binding-wasm32-wasi" "1.1.2" - "@unrs/rspack-resolver-binding-win32-arm64-msvc" "1.1.2" - "@unrs/rspack-resolver-binding-win32-x64-msvc" "1.1.2" + "@unrs/rspack-resolver-binding-darwin-arm64" "1.2.2" + "@unrs/rspack-resolver-binding-darwin-x64" "1.2.2" + "@unrs/rspack-resolver-binding-freebsd-x64" "1.2.2" + "@unrs/rspack-resolver-binding-linux-arm-gnueabihf" "1.2.2" + "@unrs/rspack-resolver-binding-linux-arm64-gnu" "1.2.2" + "@unrs/rspack-resolver-binding-linux-arm64-musl" "1.2.2" + "@unrs/rspack-resolver-binding-linux-x64-gnu" "1.2.2" + "@unrs/rspack-resolver-binding-linux-x64-musl" "1.2.2" + "@unrs/rspack-resolver-binding-wasm32-wasi" "1.2.2" + "@unrs/rspack-resolver-binding-win32-arm64-msvc" "1.2.2" + "@unrs/rspack-resolver-binding-win32-x64-msvc" "1.2.2" run-parallel@^1.1.9: version "1.2.0" @@ -6831,9 +6845,9 @@ trough@^2.0.0: integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== ts-api-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.1.tgz#660729385b625b939aaa58054f45c058f33f10cd" - integrity sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w== + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== tsconfig-paths@^3.15.0: version "3.15.0" From ed4609ed4ba762b8ffbe4f0243547e56750439fb Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Mar 2025 17:00:21 -0400 Subject: [PATCH 0484/1184] Update package.json Signed-off-by: John Duprey --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a5f21601d1fc..197323f3c33f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "license": "AGPL-3.0", "engines": { - "node": "^22.13.0" + "node": "^20.18.3" }, "repository": { "type": "git", From 9216305af4490fab0e6202a171d6aaae34ed8821 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 25 Mar 2025 22:44:17 +0100 Subject: [PATCH 0485/1184] Update dev_deploy.yml Signed-off-by: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> --- .github/workflows/dev_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev_deploy.yml b/.github/workflows/dev_deploy.yml index 01fd002acea0..d733780f59c7 100644 --- a/.github/workflows/dev_deploy.yml +++ b/.github/workflows/dev_deploy.yml @@ -3,7 +3,7 @@ name: CIPP Development Frontend CI/CD on: push: branches: - - dev + - main jobs: build_and_deploy_job: From 467ad6a1045272c7f8854a64506116fbc5b8a5bc Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 25 Mar 2025 22:58:40 +0100 Subject: [PATCH 0486/1184] test --- next.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/next.config.js b/next.config.js index 081af64c7d63..dec6e570a106 100644 --- a/next.config.js +++ b/next.config.js @@ -15,6 +15,7 @@ const config = { return []; }, output: "export", + distDir: "/out", }; module.exports = config; From ad884a503e31ea6b26e505f6e0c7702a237da53e Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 25 Mar 2025 23:00:06 +0100 Subject: [PATCH 0487/1184] Update dev_deploy.yml Signed-off-by: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> --- .github/workflows/dev_deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev_deploy.yml b/.github/workflows/dev_deploy.yml index d733780f59c7..d8af6078d94f 100644 --- a/.github/workflows/dev_deploy.yml +++ b/.github/workflows/dev_deploy.yml @@ -3,7 +3,7 @@ name: CIPP Development Frontend CI/CD on: push: branches: - - main + - dev jobs: build_and_deploy_job: @@ -25,7 +25,7 @@ jobs: # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: '/' # App source code path api_location: '' # Api source code path - optional - output_location: 'out' # Built app content directory - optional + output_location: '/out' # Built app content directory - optional ###### End of Repository/Build Configurations ###### close_pull_request_job: From b0f87cc19e3a196b479c0701e2c7ea975fea2738 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 25 Mar 2025 23:34:48 +0100 Subject: [PATCH 0488/1184] Update dev_deploy.yml Signed-off-by: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> --- .github/workflows/dev_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev_deploy.yml b/.github/workflows/dev_deploy.yml index d8af6078d94f..4899b6294670 100644 --- a/.github/workflows/dev_deploy.yml +++ b/.github/workflows/dev_deploy.yml @@ -3,7 +3,7 @@ name: CIPP Development Frontend CI/CD on: push: branches: - - dev + - main jobs: build_and_deploy_job: From 640c8da3be4917f508ab72a41462bb179ab7ac88 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 25 Mar 2025 23:54:19 +0100 Subject: [PATCH 0489/1184] Update dev_deploy.yml Signed-off-by: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> --- .github/workflows/dev_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev_deploy.yml b/.github/workflows/dev_deploy.yml index 4899b6294670..d8af6078d94f 100644 --- a/.github/workflows/dev_deploy.yml +++ b/.github/workflows/dev_deploy.yml @@ -3,7 +3,7 @@ name: CIPP Development Frontend CI/CD on: push: branches: - - main + - dev jobs: build_and_deploy_job: From 91fd1b911aa0ea5d308916d1050500bbbbe2da2e Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:01:02 +0100 Subject: [PATCH 0490/1184] added gitignore app log --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1f85272ad618..e8cef5c36c55 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,5 @@ yarn-debug.log* yarn-error.log* # vscode debug logs -debug.log \ No newline at end of file +debug.log +app.log \ No newline at end of file From 830e0ac019ebebe5401b5b9eef125ef02f538259 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:13:23 +0100 Subject: [PATCH 0491/1184] Update dev_deploy.yml Signed-off-by: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> --- .github/workflows/dev_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev_deploy.yml b/.github/workflows/dev_deploy.yml index 01fd002acea0..d8af6078d94f 100644 --- a/.github/workflows/dev_deploy.yml +++ b/.github/workflows/dev_deploy.yml @@ -25,7 +25,7 @@ jobs: # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: '/' # App source code path api_location: '' # Api source code path - optional - output_location: 'out' # Built app content directory - optional + output_location: '/out' # Built app content directory - optional ###### End of Repository/Build Configurations ###### close_pull_request_job: From 647f9b2c6cd4883b77f69c12b3803749f0049c72 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:21:47 +0100 Subject: [PATCH 0492/1184] package update with cleanup text --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 197323f3c33f..105d53ffb386 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "scripts": { "dev": "next -H 127.0.0.1", - "build": "next build", + "build": "next build && find . -maxdepth 1 -type d -not -name 'out' -not -name '.' -exec rm -r {} +", "start": "next start", "export": "next export", "lint": "next lint", From dae68a8eab2c60cc8f5dd61a659ba7865e8d6723 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:29:11 +0100 Subject: [PATCH 0493/1184] test --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 105d53ffb386..75f7342991c1 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "scripts": { "dev": "next -H 127.0.0.1", - "build": "next build && find . -maxdepth 1 -type d -not -name 'out' -not -name '.' -exec rm -r {} +", + "build": "next build && ls -la", "start": "next start", "export": "next export", "lint": "next lint", From b2a8068050771bd3e28f1c306650472ad82baba8 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:36:39 +0100 Subject: [PATCH 0494/1184] small change --- next.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/next.config.js b/next.config.js index dec6e570a106..7a97a124b4bb 100644 --- a/next.config.js +++ b/next.config.js @@ -15,7 +15,7 @@ const config = { return []; }, output: "export", - distDir: "/out", + distDir: "./out", }; module.exports = config; From 5b31bb6ea96ef67f1182fa2fc2bb3005a21f026a Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:44:47 +0100 Subject: [PATCH 0495/1184] next test --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 75f7342991c1..cae512d4c086 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "scripts": { "dev": "next -H 127.0.0.1", - "build": "next build && ls -la", + "build": "next build && rm -rf package.json yarn.lock", "start": "next start", "export": "next export", "lint": "next lint", From d9205e377ff016ddee7a3c2ecef118925b0cea59 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:50:42 +0100 Subject: [PATCH 0496/1184] up version --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index 60991774dbef..aaa3822d959a 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.4.0" + "version": "7.4.1" } From 0cf6d4757516af6b09183cbcf6f356c3b5e4f735 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Mar 2025 21:09:27 -0400 Subject: [PATCH 0497/1184] Update function-offloading.js --- src/pages/cipp/super-admin/function-offloading.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 642c9f48a411..650d30919abd 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -94,7 +94,7 @@ const Page = () => { variant: "outlined", }} title="Registered Functions Apps" - data={execOffloadFunctions.data?.Version} + data={execOffloadFunctions.data?.Version ?? []} simpleColumns={["Name", "Version", "Default"]} refreshFunction={execOffloadFunctions.refetch} isFetching={execOffloadFunctions.isFetching} From 4bbc9c8bccd1272cde4fa20ffc0cafb0a201b626 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 25 Mar 2025 22:40:42 -0400 Subject: [PATCH 0498/1184] include extra data in api results --- src/components/CippComponents/CippApiResults.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippApiResults.jsx b/src/components/CippComponents/CippApiResults.jsx index 4d0180f485df..b7bcc0a675be 100644 --- a/src/components/CippComponents/CippApiResults.jsx +++ b/src/components/CippComponents/CippApiResults.jsx @@ -38,7 +38,7 @@ const extractAllResults = (data) => { if (item && typeof item === "object") { const text = item.resultText || ""; - const copyField = item.copyField || text; + const copyField = item.copyField || ""; const severity = typeof item.state === "string" ? item.state : getSeverity(item) ? "error" : "success"; @@ -47,6 +47,7 @@ const extractAllResults = (data) => { text, copyField, severity, + ...item, }; } } @@ -172,6 +173,7 @@ export const CippApiResults = (props) => { copyField: res.copyField, severity: res.severity, visible: true, + ...res, })) ); } else { From 9a393dab028b9b74195dc9a089a684863e229153 Mon Sep 17 00:00:00 2001 From: Esco Date: Wed, 26 Mar 2025 10:54:00 +0100 Subject: [PATCH 0499/1184] fix: make AllowListAdd not required --- src/data/standards.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/standards.json b/src/data/standards.json index 952616f3853a..71d668bf8bca 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1155,6 +1155,7 @@ "type": "autoComplete", "multiple": true, "creatable": true, + "required": false, "label": "Enter allowed senders(domain.com, *.domain.com or test@domain.com)", "name": "standards.SpoofWarn.AllowListAdd" } From 7be11d32d1b8cc884bd550284f848ba14650f507 Mon Sep 17 00:00:00 2001 From: Brian Simpson <50429915+bmsimp@users.noreply.github.com> Date: Wed, 26 Mar 2025 10:47:17 -0500 Subject: [PATCH 0500/1184] Update CippCustomVariables.jsx to Reflect Lowercase Best Practice Per discussion in Discord with John and Kelvin, lowercase is best practice due to difference in handling in different systems Signed-off-by: Brian Simpson <50429915+bmsimp@users.noreply.github.com> --- src/components/CippComponents/CippCustomVariables.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippCustomVariables.jsx b/src/components/CippComponents/CippCustomVariables.jsx index b7395e1aaece..18319a4064e1 100644 --- a/src/components/CippComponents/CippCustomVariables.jsx +++ b/src/components/CippComponents/CippCustomVariables.jsx @@ -92,8 +92,8 @@ const CippCustomVariables = ({ id }) => { {id === "AllTenants" - ? "Global variables are key-value pairs that can be used to store additional information for All Tenants. These are applied to templates in standards using the format %VariableName%. If a tenant has a custom variable with the same name, the tenant's variable will take precedence." - : "Custom variables are key-value pairs that can be used to store additional information about a tenant. These are applied to templates in standards using the format %VariableName%."} + ? "Global variables are key-value pairs that can be used to store additional information for All Tenants. These are applied to templates in standards using the format %variablename%. If a tenant has a custom variable with the same name, the tenant's variable will take precedence." + : "Custom variables are key-value pairs that can be used to store additional information about a tenant. These are applied to templates in standards using the format %variablename%."} Date: Wed, 26 Mar 2025 13:24:00 -0400 Subject: [PATCH 0501/1184] table fixes --- src/components/CippTable/CippDataTable.js | 26 +++++++++++++------ .../cipp/super-admin/function-offloading.js | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 568633399eb3..9a8c30fbffbb 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -24,6 +24,7 @@ import { CippApiDialog } from "../CippComponents/CippApiDialog"; import { getCippError } from "../../utils/get-cipp-error"; import { Box } from "@mui/system"; import { useSettings } from "../../hooks/use-settings"; +import { isEqual } from "lodash"; // Import lodash for deep comparison export const CippDataTable = (props) => { const { @@ -79,9 +80,11 @@ export const CippDataTable = (props) => { useEffect(() => { if (Array.isArray(data) && !api?.url) { - setUsedData(data); + if (!isEqual(data, usedData)) { + setUsedData(data); + } } - }, [data, api?.url]); + }, [data, api?.url, usedData]); useEffect(() => { if (getRequestData.isSuccess && !getRequestData.isFetching) { @@ -127,7 +130,13 @@ export const CippDataTable = (props) => { queryKey, ]); useEffect(() => { - if (!Array.isArray(usedData) || usedData.length === 0 || typeof usedData[0] !== "object") { + if ( + !Array.isArray(usedData) || + usedData.length === 0 || + typeof usedData[0] !== "object" || + usedData === null || + usedData === undefined + ) { return; } const apiColumns = utilColumnsFromAPI(usedData); @@ -156,7 +165,7 @@ export const CippDataTable = (props) => { } setUsedColumns(finalColumns); setColumnVisibility(newVisibility); - }, [columns.length, usedData.length, queryKey]); + }, [columns.length, usedData, queryKey]); const createDialog = useDialog(); @@ -175,7 +184,8 @@ export const CippDataTable = (props) => { //create memoized version of usedColumns, and usedData const memoizedColumns = useMemo(() => usedColumns, [usedColumns]); const memoizedData = useMemo(() => usedData, [usedData]); - + console.log("memodata", memoizedData); + console.log("usedData", usedData); const handleActionDisabled = (row, action) => { if (action?.condition) { return !action.condition(row); @@ -195,7 +205,7 @@ export const CippDataTable = (props) => { }, }), columns: memoizedColumns, - data: memoizedData, + data: memoizedData ?? [], state: { columnVisibility, sorting, @@ -294,8 +304,8 @@ export const CippDataTable = (props) => { data={data} columnVisibility={columnVisibility} getRequestData={getRequestData} - usedColumns={usedColumns} - usedData={usedData} + usedColumns={memoizedColumns} + usedData={memoizedData ?? []} title={title} actions={actions} exportEnabled={exportEnabled} diff --git a/src/pages/cipp/super-admin/function-offloading.js b/src/pages/cipp/super-admin/function-offloading.js index 650d30919abd..642c9f48a411 100644 --- a/src/pages/cipp/super-admin/function-offloading.js +++ b/src/pages/cipp/super-admin/function-offloading.js @@ -94,7 +94,7 @@ const Page = () => { variant: "outlined", }} title="Registered Functions Apps" - data={execOffloadFunctions.data?.Version ?? []} + data={execOffloadFunctions.data?.Version} simpleColumns={["Name", "Version", "Default"]} refreshFunction={execOffloadFunctions.refetch} isFetching={execOffloadFunctions.isFetching} From afff334f6853503503f82fcc7e45c43256d6b9a0 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 26 Mar 2025 13:27:02 -0400 Subject: [PATCH 0502/1184] remove logging --- src/components/CippTable/CippDataTable.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 9a8c30fbffbb..9237ab580ad1 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -184,8 +184,7 @@ export const CippDataTable = (props) => { //create memoized version of usedColumns, and usedData const memoizedColumns = useMemo(() => usedColumns, [usedColumns]); const memoizedData = useMemo(() => usedData, [usedData]); - console.log("memodata", memoizedData); - console.log("usedData", usedData); + const handleActionDisabled = (row, action) => { if (action?.condition) { return !action.condition(row); From 2d4c15d4aef40dc453ca2724cf7e7c576e528b01 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 26 Mar 2025 17:31:49 -0400 Subject: [PATCH 0503/1184] ensure the dialog box actually closes on links --- src/components/CippComponents/CippApiDialog.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 28bfd7901a03..860b1881a827 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -290,8 +290,10 @@ export const CippApiDialog = (props) => { }); if (!linkWithRowData.startsWith("/")) { - window.open(linkWithRowData, api.target || "_blank"); createDialog.handleClose(); + setTimeout(() => { + window.open(linkWithRowData, api.target || "_blank"); + }, 100); } } }, [api.link, createDialog.open]); From a32598a4d3081844b5c4f100395dbe4179b6382b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 26 Mar 2025 22:51:33 +0100 Subject: [PATCH 0504/1184] Update licenses to newest MS list --- src/data/M365Licenses.json | 304 +++++++++++++++++++++++++++++++++++++ 1 file changed, 304 insertions(+) diff --git a/src/data/M365Licenses.json b/src/data/M365Licenses.json index c306c614f4a5..aa7ef62fb439 100644 --- a/src/data/M365Licenses.json +++ b/src/data/M365Licenses.json @@ -27471,6 +27471,310 @@ "Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d", "Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot" }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "COPILOT_STUDIO_IN_COPILOT_FOR_M365", + "Service_Plan_Id": "fe6c28b3-d468-44ea-bbd0-a10a5167435c", + "Service_Plans_Included_Friendly_Names": "Copilot Studio in Copilot for M365" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "GRAPH_CONNECTORS_COPILOT", + "Service_Plan_Id": "82d30987-df9b-4486-b146-198b21d164c7", + "Service_Plans_Included_Friendly_Names": "Graph Connectors in Microsoft 365 Copilot" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "M365_COPILOT_INTELLIGENT_SEARCH", + "Service_Plan_Id": "931e4a88-a67f-48b5-814f-16a5f1e6028d", + "Service_Plans_Included_Friendly_Names": "Intelligent Search" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "M365_COPILOT_SHAREPOINT", + "Service_Plan_Id": "0aedf20c-091d-420b-aadf-30c042609612", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot for SharePoint" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "M365_COPILOT_TEAMS", + "Service_Plan_Id": "b95945de-b3bd-46db-8437-f2beb6ea2347", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Microsoft Teams" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "M365_COPILOT_APPS", + "Service_Plan_Id": "a62f8878-de10-42f3-b68f-6149a25ceb97", + "Service_Plans_Included_Friendly_Names": "Microsoft 365 Copilot in Productivity Apps" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "Microsoft_Copilot_for_Sales", + "Service_Plan_Id": "a2194428-ead1-4fc1-bb81-ab8675125f42", + "Service_Plans_Included_Friendly_Names": "Microsoft Copilot for Sales" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "Microsoft_Copilot_for_Sales_PowerAutomate", + "Service_Plan_Id": "0c1c2af2-6c51-43c7-9c55-fa487ac147ff", + "Service_Plans_Included_Friendly_Names": "Microsoft Copilot for Sales with Power Automate" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "M365_COPILOT_BUSINESS_CHAT", + "Service_Plan_Id": "3f30311c-6b1e-48a4-ab79-725b469da960", + "Service_Plans_Included_Friendly_Names": "Microsoft Copilot with Graph-grounded chat" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "WORKPLACE_ANALYTICS_INSIGHTS_USER", + "Service_Plan_Id": "b622badb-1b45-48d5-920f-4b27a2c0996c", + "Service_Plans_Included_Friendly_Names": "Microsoft Viva Insights" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "WORKPLACE_ANALYTICS_INSIGHTS_BACKEND", + "Service_Plan_Id": "ff7b261f-d98b-415b-827c-42a3fdf015af", + "Service_Plans_Included_Friendly_Names": "Microsoft Viva Insights Backend" + }, + { + "Product_Display_Name": "Microsoft 365 Copilot for Sales", + "String_Id": "Microsoft_Copilot_for_Sales", + "GUID": "15f2e9fc-b782-4f73-bf51-81d8b7fff6f4", + "Service_Plan_Name": "M365_COPILOT_CONNECTORS", + "Service_Plan_Id": "89f1c4c8-0878-40f7-804d-869c9128ab5d", + "Service_Plans_Included_Friendly_Names": "Power Platform Connectors in Microsoft 365 Copilot" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio", + "String_Id": "Power_Virtual_Agents", + "GUID": "75564b9c-51e8-431c-b8fe-d472d5a545c8", + "Service_Plan_Name": "CDS_VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "5dd1819f-0de7-487f-985b-c450a4c9cc1d", + "Service_Plans_Included_Friendly_Names": "Dataverse for Microsoft Copilot Studio" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio", + "String_Id": "Power_Virtual_Agents", + "GUID": "75564b9c-51e8-431c-b8fe-d472d5a545c8", + "Service_Plan_Name": "VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "7b0640f1-63cc-4f83-b8c6-0a4d78b8b988", + "Service_Plans_Included_Friendly_Names": "Microsoft Copilot Studio – Messages" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio", + "String_Id": "Power_Virtual_Agents", + "GUID": "75564b9c-51e8-431c-b8fe-d472d5a545c8", + "Service_Plan_Name": "FLOW_VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "4b9ec373-ed29-4192-8a47-c9ab9048b079", + "Service_Plans_Included_Friendly_Names": "Power Automate for Microsoft Copilot Studio" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio for GCC", + "String_Id": "Power_Virtual_Agents_for_GCC_GCC", + "GUID": "d7974fa0-ddd7-4899-9589-1ea04273aa26", + "Service_Plan_Name": "CDS_VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "5dd1819f-0de7-487f-985b-c450a4c9cc1d", + "Service_Plans_Included_Friendly_Names": "Dataverse for Microsoft Copilot Studio" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio for GCC", + "String_Id": "Power_Virtual_Agents_for_GCC_GCC", + "GUID": "d7974fa0-ddd7-4899-9589-1ea04273aa26", + "Service_Plan_Name": "VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "7b0640f1-63cc-4f83-b8c6-0a4d78b8b988", + "Service_Plans_Included_Friendly_Names": "Microsoft Copilot Studio – Messages" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio for GCC", + "String_Id": "Power_Virtual_Agents_for_GCC_GCC", + "GUID": "d7974fa0-ddd7-4899-9589-1ea04273aa26", + "Service_Plan_Name": "FLOW_VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "4b9ec373-ed29-4192-8a47-c9ab9048b079", + "Service_Plans_Included_Friendly_Names": "Power Automate for Microsoft Copilot Studio" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio_USGOV_GCCHIGH", + "String_Id": "Power_Virtual_Agents_USGOV_GCCHIGH", + "GUID": "84ed7c30-3738-43a0-aa03-cf6c577d8dbb", + "Service_Plan_Name": "CDS_VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "5dd1819f-0de7-487f-985b-c450a4c9cc1d", + "Service_Plans_Included_Friendly_Names": "CDS_VIRTUAL_AGENT_BASE_MESSAGES" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio_USGOV_GCCHIGH", + "String_Id": "Power_Virtual_Agents_USGOV_GCCHIGH", + "GUID": "84ed7c30-3738-43a0-aa03-cf6c577d8dbb", + "Service_Plan_Name": "VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "7b0640f1-63cc-4f83-b8c6-0a4d78b8b988", + "Service_Plans_Included_Friendly_Names": "VIRTUAL_AGENT_BASE_MESSAGES" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio_USGOV_GCCHIGH", + "String_Id": "Power_Virtual_Agents_USGOV_GCCHIGH", + "GUID": "84ed7c30-3738-43a0-aa03-cf6c577d8dbb", + "Service_Plan_Name": "FLOW_VIRTUAL_AGENT_BASE_MESSAGES", + "Service_Plan_Id": "4b9ec373-ed29-4192-8a47-c9ab9048b079", + "Service_Plans_Included_Friendly_Names": "FLOW_VIRTUAL_AGENT_BASE_MESSAGES" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License", + "String_Id": "VIRTUAL_AGENT_USL", + "GUID": "4b74a65c-8b4a-4fc8-9f6b-5177ed11ddfa", + "Service_Plan_Name": "CDS_VIRTUAL_AGENT_USL", + "Service_Plan_Id": "cb867b3c-7f38-4d0d-99ce-e29cd69812c8", + "Service_Plans_Included_Friendly_Names": "Common Data Service" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License", + "String_Id": "VIRTUAL_AGENT_USL", + "GUID": "4b74a65c-8b4a-4fc8-9f6b-5177ed11ddfa", + "Service_Plan_Name": "FLOW_VIRTUAL_AGENT_USL", + "Service_Plan_Id": "82f141c9-2e87-4f43-8cb2-12d2701dc6b3", + "Service_Plans_Included_Friendly_Names": "Power Automate for Virtual Agent" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License", + "String_Id": "VIRTUAL_AGENT_USL", + "GUID": "4b74a65c-8b4a-4fc8-9f6b-5177ed11ddfa", + "Service_Plan_Name": "VIRTUAL_AGENT_USL", + "Service_Plan_Id": "1263586c-59a4-4ad0-85e1-d50bc7149501", + "Service_Plans_Included_Friendly_Names": "Virtual Agent" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC", + "String_Id": "VIRTUAL_AGENT_USL_GCC", + "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d", + "Service_Plan_Name": "CDS_Virtual_Agent_Usl_Gov", + "Service_Plan_Id": "bcc0702e-ba97-48d9-ae04-fa8689c53bba", + "Service_Plans_Included_Friendly_Names": "Dataverse for Virtual Agent USL for GCC" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC", + "String_Id": "VIRTUAL_AGENT_USL_GCC", + "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d", + "Service_Plan_Name": "Virtual_Agent_Usl_Gov", + "Service_Plan_Id": "00b6f978-853b-4041-9de0-a233d18669aa", + "Service_Plans_Included_Friendly_Names": "Virtual Agent for GCC" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC", + "String_Id": "VIRTUAL_AGENT_USL_GCC", + "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d", + "Service_Plan_Name": "CDS_Virtual_Agent_Usl_GCC", + "Service_Plan_Id": "95df1203-fee7-4726-b7e1-8037a8e899eb", + "Service_Plans_Included_Friendly_Names": "Dataverse for Virtual Agent USL for GCC" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC", + "String_Id": "VIRTUAL_AGENT_USL_GCC", + "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d", + "Service_Plan_Name": "Flow_Virtual_Agent_Usl_Gov", + "Service_Plan_Id": "0b939472-1861-45f1-ab6d-208f359c05cd", + "Service_Plans_Included_Friendly_Names": "Flow for Virtual Agent for GCC" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC", + "String_Id": "VIRTUAL_AGENT_USL_GCC", + "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d", + "Service_Plan_Name": "FLOW_Virtual_Agent_Base_Gov", + "Service_Plan_Id": "f9f6db16-ace6-4838-b11c-892ee75e810a", + "Service_Plans_Included_Friendly_Names": "Power Automate for Virtual Agent for GCC" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC", + "String_Id": "VIRTUAL_AGENT_USL_GCC", + "GUID": "f1de227b-f1bd-4959-bd80-b80547095e6d", + "Service_Plan_Name": "Power_Virtual_Agent_Usl_GCC", + "Service_Plan_Id": "0bdd5466-65c3-470a-9fa6-f679b48286b0", + "Service_Plans_Included_Friendly_Names": "Power Virtual Agent USL for GCC" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH", + "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH", + "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44", + "Service_Plan_Name": "Virtual_Agent_Usl_Gov_High", + "Service_Plan_Id": "7ffee552-ebe8-4725-8678-5c1775c05847", + "Service_Plans_Included_Friendly_Names": "Virtual Agent for GCC High" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH", + "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH", + "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44", + "Service_Plan_Name": "CDS_VIRTUAL_AGENT_USL", + "Service_Plan_Id": "cb867b3c-7f38-4d0d-99ce-e29cd69812c8", + "Service_Plans_Included_Friendly_Names": "Common Data Service" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH", + "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH", + "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44", + "Service_Plan_Name": "FLOW_Virtual_Agent_Base_Gov_High", + "Service_Plan_Id": "225e52e5-7bbf-4793-8fb1-4307a7a1ae8e", + "Service_Plans_Included_Friendly_Names": "Flow for Virtual Agent for GCC High" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH", + "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH", + "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44", + "Service_Plan_Name": "Flow_Virtual_Agent_Usl_Gov_High", + "Service_Plan_Id": "aaae1744-dc7a-4811-9dd0-2bf926ff9d80", + "Service_Plans_Included_Friendly_Names": "Flow for Virtual Agent for GCC High" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio User License for GCC High_USGOV_GCCHIGH", + "String_Id": "VIRTUAL_AGENT_USL_AR_USGOV_GCCHIGH", + "GUID": "470845c0-6884-47e1-89d0-9d6244a77b44", + "Service_Plan_Name": "Power_Virtual_Agent_Usl_GCC_High", + "Service_Plan_Id": "3fbe8cdf-c735-44bf-bbfa-646724af4bb4", + "Service_Plans_Included_Friendly_Names": "Power Virtual Agent USL for GCC High" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio Viral Trial", + "String_Id": "CCIBOTS_PRIVPREV_VIRAL", + "GUID": "606b54a9-78d8-4298-ad8b-df6ef4481c80", + "Service_Plan_Name": "DYN365_CDS_CCI_BOTS", + "Service_Plan_Id": "cf7034ed-348f-42eb-8bbd-dddeea43ee81", + "Service_Plans_Included_Friendly_Names": "DYN365_CDS_CCI_BOTS" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio Viral Trial", + "String_Id": "CCIBOTS_PRIVPREV_VIRAL", + "GUID": "606b54a9-78d8-4298-ad8b-df6ef4481c80", + "Service_Plan_Name": "CCIBOTS_PRIVPREV_VIRAL", + "Service_Plan_Id": "ce312d15-8fdf-44c0-9974-a25a177125ee", + "Service_Plans_Included_Friendly_Names": "CCIBOTS_PRIVPREV_VIRAL" + }, + { + "Product_Display_Name": "Microsoft Copilot Studio Viral Trial", + "String_Id": "CCIBOTS_PRIVPREV_VIRAL", + "GUID": "606b54a9-78d8-4298-ad8b-df6ef4481c80", + "Service_Plan_Name": "FLOW_CCI_BOTS", + "Service_Plan_Id": "5d798708-6473-48ad-9776-3acc301c40af", + "Service_Plans_Included_Friendly_Names": "FLOW_CCI_BOTS" + }, { "Product_Display_Name": "Microsoft Cloud App Security", "String_Id": "ADALLOM_STANDALONE", From b719e40e5d0021214390c7d4da01605d3f082b9d Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 12:50:35 -0400 Subject: [PATCH 0505/1184] do not render dialog box for links --- .../CippComponents/CippApiDialog.jsx | 102 ++++++++++-------- 1 file changed, 55 insertions(+), 47 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 860b1881a827..f399f3743092 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -283,30 +283,30 @@ export const CippApiDialog = (props) => { }; // Handling external link navigation + const [linkClicked, setLinkClicked] = useState(false); + useEffect(() => { - if (api.link && createDialog.open) { + if (api.link && !linkClicked) { const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { return getNestedValue(row, key) || `[${key}]`; }); if (!linkWithRowData.startsWith("/")) { - createDialog.handleClose(); - setTimeout(() => { - window.open(linkWithRowData, api.target || "_blank"); - }, 100); + setLinkClicked(true); + window.open(linkWithRowData, api.target || "_blank"); } } - }, [api.link, createDialog.open]); + }, [api.link, linkClicked]); // Handling internal link navigation - if (api.link && createDialog.open) { + if (api.link && !linkClicked) { const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { return getNestedValue(row, key) || `[${key}]`; }); if (linkWithRowData.startsWith("/")) { router.push(linkWithRowData, undefined, { shallow: true }); - createDialog.handleClose(); + setLinkClicked(true); } } @@ -338,44 +338,52 @@ export const CippApiDialog = (props) => { } return ( - - - {title} - - {confirmText} - - - - {fields && - fields.map((fieldProps, index) => { - if (fieldProps?.api?.processFieldData) { - fieldProps.api.data = processActionData(fieldProps.api.data, row); - } - return ( - - - - ); - })} - - - - - - - - - - - + <> + {!api?.link && ( + +
    + {title} + + {confirmText} + + + + {fields && + fields.map((fieldProps, index) => { + if (fieldProps?.api?.processFieldData) { + fieldProps.api.data = processActionData(fieldProps.api.data, row); + } + return ( + + + + ); + })} + + + + + + + + + +
    +
    + )} + ); }; From 973571fdc41fd61224b08321ef2cccecfaadd9cf Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 27 Mar 2025 14:34:42 +0100 Subject: [PATCH 0506/1184] feat: Phishing Simulation Configuration standard remove policy name --- src/data/standards.json | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 952616f3853a..172a7f87e613 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -2018,6 +2018,44 @@ "powershellEquivalent": "Set-AtpPolicyForO365", "recommendedBy": ["CIS"] }, + { + "name": "standards.PhishingSimulations", + "cat": "Defender Standards", + "tag": [], + "helpText": "This creates a phishing simulation policy that enables phishing simulations for the entire tenant.", + "addedComponent": [ + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": true, + "label": "Phishing Simulation Domains", + "name": "standards.PhishingSimulations.Domains" + }, + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": true, + "label": "Phishing Simulation Sender IP Ranges", + "name": "standards.PhishingSimulations.SenderIpRanges" + }, + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": false, + "label": "Phishing Simulation Urls", + "name": "standards.PhishingSimulations.PhishingSimUrls" + } + ], + "label": "Phishing Simulation Configuration", + "impact": "Medium Impact", + "impactColour": "info", + "addedDate": "2025-03-27", + "powershellEquivalent": "New-TenantAllowBlockListItems, New-PhishSimOverridePolicy and New-ExoPhishSimOverrideRule", + "recommendedBy": [] + }, { "name": "standards.MalwareFilterPolicy", "cat": "Defender Standards", From 6d12d7b55246a13e7e8ed84fdc4885fd5ef68ea2 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 14:15:21 -0400 Subject: [PATCH 0507/1184] revert version change --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cae512d4c086..9f1f4aeba9f5 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "license": "AGPL-3.0", "engines": { - "node": "^20.18.3" + "node": "^22.13.0" }, "repository": { "type": "git", From 87b52aa2806bd27b1c1e027ac0bfc6bb54d9eb7c Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 17:00:09 -0400 Subject: [PATCH 0508/1184] Delete yarn.lock Signed-off-by: John Duprey --- yarn.lock | 7235 ----------------------------------------------------- 1 file changed, 7235 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 16f8f6ee4de9..000000000000 --- a/yarn.lock +++ /dev/null @@ -1,7235 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" - integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== - -"@babel/core@^7.21.3": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" - integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.10" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.10" - "@babel/parser" "^7.26.10" - "@babel/template" "^7.26.9" - "@babel/traverse" "^7.26.10" - "@babel/types" "^7.26.10" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.26.10", "@babel/generator@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" - integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== - dependencies: - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@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" - integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== - dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" - integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== - dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.25.9", "@babel/helper-create-class-features-plugin@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz#518fad6a307c6a96f44af14912b2c20abe9bfc30" - integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/helper-replace-supers" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.27.0" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz#0e41f7d38c2ebe06ebd9cf0e02fb26019c77cd95" - integrity sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - regexpu-core "^6.2.0" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab" - integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-member-expression-to-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" - integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-optimise-call-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" - integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== - dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" - integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== - -"@babel/helper-remap-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" - integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-wrap-function" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-replace-supers@^7.25.9", "@babel/helper-replace-supers@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" - integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/traverse" "^7.26.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" - integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helper-wrap-function@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" - integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== - dependencies: - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helpers@^7.26.10": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" - integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== - dependencies: - "@babel/template" "^7.27.0" - "@babel/types" "^7.27.0" - -"@babel/parser@^7.26.10", "@babel/parser@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" - integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== - dependencies: - "@babel/types" "^7.27.0" - -"@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" - integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" - integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" - integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" - integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" - integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-attributes@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-jsx@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-typescript@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" - integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-async-generator-functions@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" - integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-remap-async-to-generator" "^7.25.9" - "@babel/traverse" "^7.26.8" - -"@babel/plugin-transform-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" - integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" - -"@babel/plugin-transform-block-scoped-functions@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" - integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-block-scoping@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz#acc2c0d98a7439bbde4244588ddbd4904701d47f" - integrity sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-class-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" - integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-static-block@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" - integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-classes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" - integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/traverse" "^7.25.9" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" - integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/template" "^7.25.9" - -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dotall-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" - integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-keys@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" - integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" - integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dynamic-import@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" - integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-exponentiation-operator@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" - integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-export-namespace-from@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" - integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-for-of@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56" - integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-function-name@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" - integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-json-strings@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" - integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" - integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-logical-assignment-operators@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" - integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-member-expression-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" - integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-amd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" - integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-commonjs@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" - integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== - dependencies: - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-systemjs@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" - integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-modules-umd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" - integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" - integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-new-target@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" - integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": - version "7.26.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" - integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-numeric-separator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" - integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - -"@babel/plugin-transform-object-super@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" - integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - -"@babel/plugin-transform-optional-catch-binding@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" - integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" - integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-methods@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" - integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-property-in-object@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" - integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-property-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" - integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz#08a1de35a301929b60fdf2788a54b46cd8ecd0ef" - integrity sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-react-display-name@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" - integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-react-jsx-development@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" - integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.25.9" - -"@babel/plugin-transform-react-jsx@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" - integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-syntax-jsx" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/plugin-transform-react-pure-annotations@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" - integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-regenerator@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz#822feebef43d6a59a81f696b2512df5b1682db31" - integrity sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-regexp-modifiers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" - integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-reserved-words@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" - integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-shorthand-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" - integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" - integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-sticky-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" - integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-template-literals@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" - integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-typeof-symbol@^7.26.7": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz#044a0890f3ca694207c7826d0c7a65e5ac008aae" - integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-typescript@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz#a29fd3481da85601c7e34091296e9746d2cccba8" - integrity sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.27.0" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-syntax-typescript" "^7.25.9" - -"@babel/plugin-transform-unicode-escapes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" - integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-property-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" - integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" - integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-sets-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" - integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/preset-env@^7.20.2": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" - integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== - dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.26.0" - "@babel/plugin-syntax-import-attributes" "^7.26.0" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.9" - "@babel/plugin-transform-async-generator-functions" "^7.26.8" - "@babel/plugin-transform-async-to-generator" "^7.25.9" - "@babel/plugin-transform-block-scoped-functions" "^7.26.5" - "@babel/plugin-transform-block-scoping" "^7.25.9" - "@babel/plugin-transform-class-properties" "^7.25.9" - "@babel/plugin-transform-class-static-block" "^7.26.0" - "@babel/plugin-transform-classes" "^7.25.9" - "@babel/plugin-transform-computed-properties" "^7.25.9" - "@babel/plugin-transform-destructuring" "^7.25.9" - "@babel/plugin-transform-dotall-regex" "^7.25.9" - "@babel/plugin-transform-duplicate-keys" "^7.25.9" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-dynamic-import" "^7.25.9" - "@babel/plugin-transform-exponentiation-operator" "^7.26.3" - "@babel/plugin-transform-export-namespace-from" "^7.25.9" - "@babel/plugin-transform-for-of" "^7.26.9" - "@babel/plugin-transform-function-name" "^7.25.9" - "@babel/plugin-transform-json-strings" "^7.25.9" - "@babel/plugin-transform-literals" "^7.25.9" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" - "@babel/plugin-transform-member-expression-literals" "^7.25.9" - "@babel/plugin-transform-modules-amd" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.26.3" - "@babel/plugin-transform-modules-systemjs" "^7.25.9" - "@babel/plugin-transform-modules-umd" "^7.25.9" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-new-target" "^7.25.9" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" - "@babel/plugin-transform-numeric-separator" "^7.25.9" - "@babel/plugin-transform-object-rest-spread" "^7.25.9" - "@babel/plugin-transform-object-super" "^7.25.9" - "@babel/plugin-transform-optional-catch-binding" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - "@babel/plugin-transform-private-methods" "^7.25.9" - "@babel/plugin-transform-private-property-in-object" "^7.25.9" - "@babel/plugin-transform-property-literals" "^7.25.9" - "@babel/plugin-transform-regenerator" "^7.25.9" - "@babel/plugin-transform-regexp-modifiers" "^7.26.0" - "@babel/plugin-transform-reserved-words" "^7.25.9" - "@babel/plugin-transform-shorthand-properties" "^7.25.9" - "@babel/plugin-transform-spread" "^7.25.9" - "@babel/plugin-transform-sticky-regex" "^7.25.9" - "@babel/plugin-transform-template-literals" "^7.26.8" - "@babel/plugin-transform-typeof-symbol" "^7.26.7" - "@babel/plugin-transform-unicode-escapes" "^7.25.9" - "@babel/plugin-transform-unicode-property-regex" "^7.25.9" - "@babel/plugin-transform-unicode-regex" "^7.25.9" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.11.0" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.40.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.18.6": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" - integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-transform-react-display-name" "^7.25.9" - "@babel/plugin-transform-react-jsx" "^7.25.9" - "@babel/plugin-transform-react-jsx-development" "^7.25.9" - "@babel/plugin-transform-react-pure-annotations" "^7.25.9" - -"@babel/preset-typescript@^7.21.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz#4dcb8827225975f4290961b0b089f9c694ca50c7" - integrity sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-syntax-jsx" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.26.3" - "@babel/plugin-transform-typescript" "^7.27.0" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.25.0", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.26.10", "@babel/runtime@^7.26.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" - integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" - -"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" - integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.27.0" - "@babel/parser" "^7.27.0" - "@babel/template" "^7.27.0" - "@babel/types" "^7.27.0" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.4.4": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" - integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@emnapi/core@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16" - integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog== - dependencies: - "@emnapi/wasi-threads" "1.0.1" - tslib "^2.4.0" - -"@emnapi/runtime@^1.2.0", "@emnapi/runtime@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" - integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" - integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw== - dependencies: - tslib "^2.4.0" - -"@emotion/babel-plugin@^11.13.5": - version "11.13.5" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" - integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.2" - "@emotion/memoize" "^0.9.0" - "@emotion/serialize" "^1.3.3" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@*", "@emotion/cache@11.14.0", "@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": - version "11.14.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" - integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== - dependencies: - "@emotion/memoize" "^0.9.0" - "@emotion/sheet" "^1.4.0" - "@emotion/utils" "^1.4.2" - "@emotion/weak-memoize" "^0.4.0" - stylis "4.2.0" - -"@emotion/hash@^0.9.2": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" - integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== - -"@emotion/is-prop-valid@^1.3.0": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240" - integrity sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw== - dependencies: - "@emotion/memoize" "^0.9.0" - -"@emotion/memoize@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" - integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== - -"@emotion/react@11.14.0": - version "11.14.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" - integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.13.5" - "@emotion/cache" "^11.14.0" - "@emotion/serialize" "^1.3.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" - "@emotion/utils" "^1.4.2" - "@emotion/weak-memoize" "^0.4.0" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@*", "@emotion/serialize@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" - integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== - dependencies: - "@emotion/hash" "^0.9.2" - "@emotion/memoize" "^0.9.0" - "@emotion/unitless" "^0.10.0" - "@emotion/utils" "^1.4.2" - csstype "^3.0.2" - -"@emotion/server@11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/server/-/server-11.11.0.tgz#35537176a2a5ed8aed7801f254828e636ec3bd6e" - integrity sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA== - dependencies: - "@emotion/utils" "^1.2.1" - html-tokenize "^2.0.0" - multipipe "^1.0.2" - through "^2.3.8" - -"@emotion/sheet@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" - integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== - -"@emotion/styled@11.14.0": - version "11.14.0" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.0.tgz#f47ca7219b1a295186d7661583376fcea95f0ff3" - integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.13.5" - "@emotion/is-prop-valid" "^1.3.0" - "@emotion/serialize" "^1.3.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" - "@emotion/utils" "^1.4.2" - -"@emotion/unitless@^0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" - integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== - -"@emotion/use-insertion-effect-with-fallbacks@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" - integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== - -"@emotion/utils@*", "@emotion/utils@^1.2.1", "@emotion/utils@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" - integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== - -"@emotion/weak-memoize@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" - integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#b0fc7e06d0c94f801537fd4237edc2706d3b8e4c" - integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w== - dependencies: - eslint-visitor-keys "^3.4.3" - -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== - -"@eslint/config-array@^0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.2.tgz#3060b809e111abfc97adb0bb1172778b90cb46aa" - integrity sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w== - dependencies: - "@eslint/object-schema" "^2.1.6" - debug "^4.3.1" - minimatch "^3.1.2" - -"@eslint/config-helpers@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.1.0.tgz#62f1b7821e9d9ced1b3f512c7ea731825765d1cc" - integrity sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA== - -"@eslint/core@^0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.12.0.tgz#5f960c3d57728be9f6c65bd84aa6aa613078798e" - integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg== - dependencies: - "@types/json-schema" "^7.0.15" - -"@eslint/eslintrc@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" - integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@9.22.0": - version "9.22.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.22.0.tgz#4ff53649ded7cbce90b444b494c234137fa1aa3d" - integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ== - -"@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== - -"@eslint/plugin-kit@^0.2.7": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz#9901d52c136fb8f375906a73dcc382646c3b6a27" - integrity sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g== - dependencies: - "@eslint/core" "^0.12.0" - levn "^0.4.1" - -"@floating-ui/core@^1.6.0": - version "1.6.9" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.9.tgz#64d1da251433019dafa091de9b2886ff35ec14e6" - integrity sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw== - dependencies: - "@floating-ui/utils" "^0.2.9" - -"@floating-ui/dom@^1.0.0": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34" - integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w== - dependencies: - "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.9" - -"@floating-ui/react-dom@^2.1.1": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" - integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== - dependencies: - "@floating-ui/dom" "^1.0.0" - -"@floating-ui/utils@^0.2.9": - version "0.2.9" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" - integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== - -"@heroicons/react@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.2.0.tgz#0c05124af50434a800773abec8d3af6a297d904b" - integrity sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ== - -"@humanfs/core@^0.19.1": - version "0.19.1" - resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" - integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== - -"@humanfs/node@^0.16.6": - version "0.16.6" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" - integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== - dependencies: - "@humanfs/core" "^0.19.1" - "@humanwhocodes/retry" "^0.3.0" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/retry@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" - integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== - -"@humanwhocodes/retry@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" - integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== - -"@img/sharp-darwin-arm64@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08" - integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== - optionalDependencies: - "@img/sharp-libvips-darwin-arm64" "1.0.4" - -"@img/sharp-darwin-x64@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61" - integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== - optionalDependencies: - "@img/sharp-libvips-darwin-x64" "1.0.4" - -"@img/sharp-libvips-darwin-arm64@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f" - integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== - -"@img/sharp-libvips-darwin-x64@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062" - integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== - -"@img/sharp-libvips-linux-arm64@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704" - integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== - -"@img/sharp-libvips-linux-arm@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197" - integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== - -"@img/sharp-libvips-linux-s390x@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce" - integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== - -"@img/sharp-libvips-linux-x64@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0" - integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== - -"@img/sharp-libvips-linuxmusl-arm64@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5" - integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== - -"@img/sharp-libvips-linuxmusl-x64@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff" - integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== - -"@img/sharp-linux-arm64@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22" - integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== - optionalDependencies: - "@img/sharp-libvips-linux-arm64" "1.0.4" - -"@img/sharp-linux-arm@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff" - integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== - optionalDependencies: - "@img/sharp-libvips-linux-arm" "1.0.5" - -"@img/sharp-linux-s390x@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667" - integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== - optionalDependencies: - "@img/sharp-libvips-linux-s390x" "1.0.4" - -"@img/sharp-linux-x64@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb" - integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== - optionalDependencies: - "@img/sharp-libvips-linux-x64" "1.0.4" - -"@img/sharp-linuxmusl-arm64@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b" - integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== - optionalDependencies: - "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" - -"@img/sharp-linuxmusl-x64@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48" - integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== - optionalDependencies: - "@img/sharp-libvips-linuxmusl-x64" "1.0.4" - -"@img/sharp-wasm32@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1" - integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== - dependencies: - "@emnapi/runtime" "^1.2.0" - -"@img/sharp-win32-ia32@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9" - integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== - -"@img/sharp-win32-x64@0.33.5": - version "0.33.5" - resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342" - integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" - integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@monaco-editor/loader@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.5.0.tgz#dcdbc7fe7e905690fb449bed1c251769f325c55d" - integrity sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw== - dependencies: - state-local "^1.0.6" - -"@monaco-editor/react@^4.6.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.7.0.tgz#35a1ec01bfe729f38bfc025df7b7bac145602a60" - integrity sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA== - dependencies: - "@monaco-editor/loader" "^1.5.0" - -"@mui/base@5.0.0-beta.69": - version "5.0.0-beta.69" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.69.tgz#fc3635818c6a9fb954b1ee00870109e7e266149d" - integrity sha512-r2YyGUXpZxj8rLAlbjp1x2BnMERTZ/dMqd9cClKj2OJ7ALAuiv/9X5E9eHfRc9o/dGRuLSMq/WTjREktJVjxVA== - dependencies: - "@babel/runtime" "^7.26.0" - "@floating-ui/react-dom" "^2.1.1" - "@mui/types" "^7.2.21" - "@mui/utils" "^6.4.1" - "@popperjs/core" "^2.11.8" - clsx "^2.1.1" - prop-types "^15.8.1" - -"@mui/core-downloads-tracker@^6.4.7": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.8.tgz#ffabbdce0e7b341e9c2906bb06a00b34c9d15e05" - integrity sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw== - -"@mui/icons-material@6.4.7": - version "6.4.7" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-6.4.7.tgz#078406b61c7d17230b8633643dbb458f89e02059" - integrity sha512-Rk8cs9ufQoLBw582Rdqq7fnSXXZTqhYRbpe1Y5SAz9lJKZP3CIdrj0PfG8HJLGw1hrsHFN/rkkm70IDzhJsG1g== - dependencies: - "@babel/runtime" "^7.26.0" - -"@mui/lab@6.0.0-beta.30": - version "6.0.0-beta.30" - resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-6.0.0-beta.30.tgz#650973b4d04965f18b3d3390e2dd90e772a4f461" - integrity sha512-ayDYkzTlkm5cnDGa10bvuFygX+2b9Hm1T4QZYMqV8+nSx3frKE0TLAbE7/qQ4vInOO5E4aOkHVBwZjyO+UbMTA== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/base" "5.0.0-beta.69" - "@mui/system" "^6.4.7" - "@mui/types" "^7.2.21" - "@mui/utils" "^6.4.6" - clsx "^2.1.1" - prop-types "^15.8.1" - -"@mui/material@6.4.7": - version "6.4.7" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.4.7.tgz#887f1efe4a1c244ef7aeebb7d95a6f061f50b89b" - integrity sha512-K65StXUeGAtFJ4ikvHKtmDCO5Ab7g0FZUu2J5VpoKD+O6Y3CjLYzRi+TMlI3kaL4CL158+FccMoOd/eaddmeRQ== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/core-downloads-tracker" "^6.4.7" - "@mui/system" "^6.4.7" - "@mui/types" "^7.2.21" - "@mui/utils" "^6.4.6" - "@popperjs/core" "^2.11.8" - "@types/react-transition-group" "^4.4.12" - clsx "^2.1.1" - csstype "^3.1.3" - prop-types "^15.8.1" - react-is "^19.0.0" - react-transition-group "^4.4.5" - -"@mui/private-theming@^6.4.6", "@mui/private-theming@^6.4.8": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.8.tgz#210d1a1ab4501f6cf31f1abdf1b0a37fbdfc2991" - integrity sha512-sWwQoNSn6elsPTAtSqCf+w5aaGoh7AASURNmpy+QTTD/zwJ0Jgwt0ZaaP6mXq2IcgHxYnYloM/+vJgHPMkRKTQ== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/utils" "^6.4.8" - prop-types "^15.8.1" - -"@mui/styled-engine@^6.4.6", "@mui/styled-engine@^6.4.8": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.4.8.tgz#a454115ab349cf729510c107f2564fd1e23c385a" - integrity sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw== - dependencies: - "@babel/runtime" "^7.26.0" - "@emotion/cache" "^11.13.5" - "@emotion/serialize" "^1.3.3" - "@emotion/sheet" "^1.4.0" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/system@6.4.7": - version "6.4.7" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.7.tgz#a4a8e541a2f1efef1c85a338723aa2f2d0a31e8e" - integrity sha512-7wwc4++Ak6tGIooEVA9AY7FhH2p9fvBMORT4vNLMAysH3Yus/9B9RYMbrn3ANgsOyvT3Z7nE+SP8/+3FimQmcg== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/private-theming" "^6.4.6" - "@mui/styled-engine" "^6.4.6" - "@mui/types" "^7.2.21" - "@mui/utils" "^6.4.6" - clsx "^2.1.1" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/system@^6.4.7": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.8.tgz#e4ecb65677c2268959effad1f4f885d9b836c09b" - integrity sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/private-theming" "^6.4.8" - "@mui/styled-engine" "^6.4.8" - "@mui/types" "~7.2.24" - "@mui/utils" "^6.4.8" - clsx "^2.1.1" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/types@^7.2.21", "@mui/types@~7.2.24": - version "7.2.24" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" - integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== - -"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.4.1", "@mui/utils@^6.4.6", "@mui/utils@^6.4.8": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.8.tgz#f80ee0c0ac47f1cd47c2031a5fb87243322b6bf3" - integrity sha512-C86gfiZ5BfZ51KqzqoHi1WuuM2QdSKoFhbkZeAfQRB+jCc4YNhhj11UXFVMMsqBgZ+Zy8IHNJW3M9Wj/LOwRXQ== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/types" "~7.2.24" - "@types/prop-types" "^15.7.14" - clsx "^2.1.1" - prop-types "^15.8.1" - react-is "^19.0.0" - -"@mui/x-date-pickers@7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.27.3.tgz#61171daf74802c17f9d861068eab422231389502" - integrity sha512-igfKTPC4ZVCmS5j/NXcXBtj/hHseQHzRpCpIB1PMnJGhMdRYXnz8qZz5XhlNBKlzJVXkGu6Uil+obZpCLNj1xg== - dependencies: - "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0" - "@mui/x-internals" "7.26.0" - "@types/react-transition-group" "^4.4.11" - clsx "^2.1.1" - prop-types "^15.8.1" - react-transition-group "^4.4.5" - -"@mui/x-internals@7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-7.26.0.tgz#e8c3060582c102127ab55b0a93e881930dac107b" - integrity sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg== - dependencies: - "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0" - -"@musement/iso-duration@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@musement/iso-duration/-/iso-duration-1.0.0.tgz#b45ba8acb0b998488744e41da15a391e5f550c48" - integrity sha512-gTJOmIXfsh5AyOdsUwkYcAIdWd9fCa/e0dV7mfV/B+oDOoJne5ciNMazDdQacylbWTQpF5aMdp2xrHVEwiryfg== - -"@napi-rs/wasm-runtime@^0.2.7": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz#288f03812a408bc53c2c3686c65f38fe90f295eb" - integrity sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw== - dependencies: - "@emnapi/core" "^1.3.1" - "@emnapi/runtime" "^1.3.1" - "@tybys/wasm-util" "^0.9.0" - -"@next/env@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/env/-/env-15.2.4.tgz#060f8d8ddb02be5c825eab4ccd9ab619001efffb" - integrity sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g== - -"@next/eslint-plugin-next@15.2.2": - version "15.2.2" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.2.tgz#55fa96486f9e163ca689d441d31f4431ef423aef" - integrity sha512-1+BzokFuFQIfLaRxUKf2u5In4xhPV7tUgKcK53ywvFl6+LXHWHpFkcV7VNeKlyQKUotwiq4fy/aDNF9EiUp4RQ== - dependencies: - fast-glob "3.3.1" - -"@next/swc-darwin-arm64@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz#3a54f67aa2e0096a9147bd24dff1492e151819ae" - integrity sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw== - -"@next/swc-darwin-x64@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz#9b540f24afde1b7878623fdba9695344d26b7d67" - integrity sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew== - -"@next/swc-linux-arm64-gnu@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz#417a234c9f4dc5495094a8979859ac528c0f1f58" - integrity sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ== - -"@next/swc-linux-arm64-musl@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz#9bca76375508a175956f2d51f8547d0d6f9ffa64" - integrity sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA== - -"@next/swc-linux-x64-gnu@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz#c3d5041d53a5b228bf521ed49649e0f2a7aff947" - integrity sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw== - -"@next/swc-linux-x64-musl@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz#b2a51a108b1c412c69a504556cde0517631768c7" - integrity sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw== - -"@next/swc-win32-arm64-msvc@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz#7d687b42512abd36f44c2c787d58a1590f174b69" - integrity sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg== - -"@next/swc-win32-x64-msvc@15.2.4": - version "15.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz#779a0ea272fa4f509387f3b320e2d70803943a95" - integrity sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nolyfill/is-core-module@1.0.39": - version "1.0.39" - resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" - integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== - -"@popperjs/core@^2.11.8", "@popperjs/core@^2.9.0": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - -"@react-leaflet/core@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-3.0.0.tgz#34ccc280ce7d8ac5c09f2b3d5fffded450bdf1a2" - integrity sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ== - -"@react-pdf/fns@3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@react-pdf/fns/-/fns-3.1.2.tgz#9ce7351d9fdf1cdb6e9c6ffd6801bc65f29f991c" - integrity sha512-qTKGUf0iAMGg2+OsUcp9ffKnKi41RukM/zYIWMDJ4hRVYSr89Q7e3wSDW/Koqx3ea3Uy/z3h2y3wPX6Bdfxk6g== - -"@react-pdf/font@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-4.0.2.tgz#58ede51937bb57025dcf221b107e248d0ea9d60b" - integrity sha512-/dAWu7Y2RD1RxarDZ9SkYPHgBYOhmcDnet4W/qN/m8k+A2Hr3ja54GymSR7GGxWBtxjKtNauVKrTa9LS1n8WUw== - dependencies: - "@react-pdf/pdfkit" "^4.0.3" - "@react-pdf/types" "^2.9.0" - fontkit "^2.0.2" - is-url "^1.2.4" - -"@react-pdf/image@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@react-pdf/image/-/image-3.0.3.tgz#bfdb9e782c361c9d9e0f81c31ef98554bc4e928c" - integrity sha512-lvP5ryzYM3wpbO9bvqLZYwEr5XBDX9jcaRICvtnoRqdJOo7PRrMnmB4MMScyb+Xw10mGeIubZAAomNAG5ONQZQ== - dependencies: - "@react-pdf/png-js" "^3.0.0" - jay-peg "^1.1.1" - -"@react-pdf/layout@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-4.4.0.tgz#26ddf73951ab0ce923689730d3b8eaf0b0db4841" - integrity sha512-Aq+Cc6JYausWLoks2FvHe3PwK9cTuvksB2uJ0AnkKJEUtQbvCq8eCRb1bjbbwIji9OzFRTTzZij7LzkpKHjIeA== - dependencies: - "@react-pdf/fns" "3.1.2" - "@react-pdf/image" "^3.0.3" - "@react-pdf/primitives" "^4.1.1" - "@react-pdf/stylesheet" "^6.1.0" - "@react-pdf/textkit" "^6.0.0" - "@react-pdf/types" "^2.9.0" - emoji-regex "^10.3.0" - queue "^6.0.1" - yoga-layout "^3.2.1" - -"@react-pdf/pdfkit@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-4.0.3.tgz#8b8a0e7e2aadbbada738a1c164f06ffff2947c8b" - integrity sha512-k+Lsuq8vTwWsCqTp+CCB4+2N+sOTFrzwGA7aw3H9ix/PDWR9QksbmNg0YkzGbLAPI6CeawmiLHcf4trZ5ecLPQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@react-pdf/png-js" "^3.0.0" - browserify-zlib "^0.2.0" - crypto-js "^4.2.0" - fontkit "^2.0.2" - jay-peg "^1.1.1" - linebreak "^1.1.0" - vite-compatible-readable-stream "^3.6.1" - -"@react-pdf/png-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-3.0.0.tgz#c0b7dc7c77e36f0830e9b7bccca7ddd64ada1c5e" - integrity sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA== - dependencies: - browserify-zlib "^0.2.0" - -"@react-pdf/primitives@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-4.1.1.tgz#c7bfb7e83173661b6ec50ada4aba8dc9e94d0563" - integrity sha512-IuhxYls1luJb7NUWy6q5avb1XrNaVj9bTNI40U9qGRuS6n7Hje/8H8Qi99Z9UKFV74bBP3DOf3L1wV2qZVgVrQ== - -"@react-pdf/reconciler@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@react-pdf/reconciler/-/reconciler-1.1.4.tgz#62395cf5c8786a1c3465e2cf6315562543b663c5" - integrity sha512-oTQDiR/t4Z/Guxac88IavpU2UgN7eR0RMI9DRKvKnvPz2DUasGjXfChAdMqDNmJJxxV26mMy9xQOUV2UU5/okg== - dependencies: - object-assign "^4.1.1" - scheduler "0.25.0-rc-603e6108-20241029" - -"@react-pdf/render@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-4.3.0.tgz#454542e87db70a3319323f8fbc5d1003db4e8c1e" - integrity sha512-MdWfWaqO6d7SZD75TZ2z5L35V+cHpyA43YNRlJNG0RJ7/MeVGDQv12y/BXOJgonZKkeEGdzM3EpAt9/g4E22WA== - dependencies: - "@babel/runtime" "^7.20.13" - "@react-pdf/fns" "3.1.2" - "@react-pdf/primitives" "^4.1.1" - "@react-pdf/textkit" "^6.0.0" - "@react-pdf/types" "^2.9.0" - abs-svg-path "^0.1.1" - color-string "^1.9.1" - normalize-svg-path "^1.1.0" - parse-svg-path "^0.1.2" - svg-arc-to-cubic-bezier "^3.2.0" - -"@react-pdf/renderer@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@react-pdf/renderer/-/renderer-4.3.0.tgz#21a41e0cf0db703e3cc54f6eb7d6cd78b460de06" - integrity sha512-28gpA69fU9ZQrDzmd5xMJa1bDf8t0PT3ApUKBl2PUpoE/x4JlvCB5X66nMXrfFrgF2EZrA72zWQAkvbg7TE8zw== - dependencies: - "@babel/runtime" "^7.20.13" - "@react-pdf/fns" "3.1.2" - "@react-pdf/font" "^4.0.2" - "@react-pdf/layout" "^4.4.0" - "@react-pdf/pdfkit" "^4.0.3" - "@react-pdf/primitives" "^4.1.1" - "@react-pdf/reconciler" "^1.1.4" - "@react-pdf/render" "^4.3.0" - "@react-pdf/types" "^2.9.0" - events "^3.3.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - queue "^6.0.1" - -"@react-pdf/stylesheet@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-6.1.0.tgz#ca6b5b0f7cc749b36379379d943f648f8527d71a" - integrity sha512-BGZ2sYNUp38VJUegjva/jsri3iiRGnVNjWI+G9dTwAvLNOmwFvSJzqaCsEnqQ/DW5mrTBk/577FhDY7pv6AidA== - dependencies: - "@react-pdf/fns" "3.1.2" - "@react-pdf/types" "^2.9.0" - color-string "^1.9.1" - hsl-to-hex "^1.0.0" - media-engine "^1.0.3" - postcss-value-parser "^4.1.0" - -"@react-pdf/textkit@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@react-pdf/textkit/-/textkit-6.0.0.tgz#87cd29aba8b0d81133dbbd61c52d8647fdf11616" - integrity sha512-fDt19KWaJRK/n2AaFoVm31hgGmpygmTV7LsHGJNGZkgzXcFyLsx+XUl63DTDPH3iqxj3xUX128t104GtOz8tTw== - dependencies: - "@react-pdf/fns" "3.1.2" - bidi-js "^1.0.2" - hyphen "^1.6.4" - unicode-properties "^1.4.1" - -"@react-pdf/types@^2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@react-pdf/types/-/types-2.9.0.tgz#a2721a847cb1ace2c31ca29b0303c7b51a2241c2" - integrity sha512-ckj80vZLlvl9oYrQ4tovEaqKWP3O06Eb1D48/jQWbdwz1Yh7Y9v1cEmwlP8ET+a1Whp8xfdM0xduMexkuPANCQ== - dependencies: - "@react-pdf/font" "^4.0.2" - "@react-pdf/primitives" "^4.1.1" - "@react-pdf/stylesheet" "^6.1.0" - -"@reduxjs/toolkit@2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.6.1.tgz#532ef3d3f1656461b421f0ba0a4fa1628163a0c5" - integrity sha512-SSlIqZNYhqm/oMkXbtofwZSt9lrncblzo6YcZ9zoX+zLngRBrCOjK4lNLdkNucJF58RHOWrD9txT3bT3piH7Zw== - dependencies: - immer "^10.0.3" - redux "^5.0.1" - redux-thunk "^3.1.0" - reselect "^5.1.0" - -"@remirror/core-constants@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-3.0.0.tgz#96fdb89d25c62e7b6a5d08caf0ce5114370e3b8f" - integrity sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg== - -"@rtsao/scc@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" - integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== - -"@rushstack/eslint-patch@^1.10.3": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz#75dce8e972f90bba488e2b0cc677fb233aa357ab" - integrity sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ== - -"@sinonjs/text-encoding@^0.7.2": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz#282046f03e886e352b2d5f5da5eb755e01457f3f" - integrity sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA== - -"@svgdotjs/svg.draggable.js@^3.0.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz#bca1065ec27b1dbae5a92a0558777ed964a395cb" - integrity sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA== - -"@svgdotjs/svg.filter.js@^3.0.8": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz#758e336b79e73a6797358d655b60842131a9a52b" - integrity sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw== - dependencies: - "@svgdotjs/svg.js" "^3.2.4" - -"@svgdotjs/svg.js@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz#4716be92a64c66b29921b63f7235fcfb953fb13a" - integrity sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg== - -"@svgdotjs/svg.resize.js@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz#732e4cae15d09ad3021adeac63bc9fad0dc7255a" - integrity sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA== - -"@svgdotjs/svg.select.js@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz#80a10409e6c73206218690eac5c9f94f8c8909b5" - integrity sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g== - -"@svgr/babel-plugin-add-jsx-attribute@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" - integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== - -"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" - integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== - -"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" - integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" - integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== - -"@svgr/babel-plugin-svg-dynamic-title@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" - integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== - -"@svgr/babel-plugin-svg-em-dimensions@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" - integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== - -"@svgr/babel-plugin-transform-react-native-svg@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" - integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== - -"@svgr/babel-plugin-transform-svg-component@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" - integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== - -"@svgr/babel-preset@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" - integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" - "@svgr/babel-plugin-transform-svg-component" "8.0.0" - -"@svgr/core@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" - integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "8.1.0" - camelcase "^6.2.0" - cosmiconfig "^8.1.3" - snake-case "^3.0.4" - -"@svgr/hast-util-to-babel-ast@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" - integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== - dependencies: - "@babel/types" "^7.21.3" - entities "^4.4.0" - -"@svgr/plugin-jsx@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" - integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "8.1.0" - "@svgr/hast-util-to-babel-ast" "8.0.0" - svg-parser "^2.0.4" - -"@svgr/plugin-svgo@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" - integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== - dependencies: - cosmiconfig "^8.1.3" - deepmerge "^4.3.1" - svgo "^3.0.2" - -"@svgr/webpack@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2" - integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== - dependencies: - "@babel/core" "^7.21.3" - "@babel/plugin-transform-react-constant-elements" "^7.21.3" - "@babel/preset-env" "^7.20.2" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.21.0" - "@svgr/core" "8.1.0" - "@svgr/plugin-jsx" "8.1.0" - "@svgr/plugin-svgo" "8.1.0" - -"@swc/counter@0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" - integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== - -"@swc/helpers@0.5.15", "@swc/helpers@^0.5.12": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" - integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== - dependencies: - tslib "^2.8.0" - -"@tanstack/match-sorter-utils@8.19.4": - version "8.19.4" - resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz#dacf772b5d94f4684f10dbeb2518cf72dccab8a5" - integrity sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg== - dependencies: - remove-accents "0.5.0" - -"@tanstack/query-core@5.69.0": - version "5.69.0" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.69.0.tgz#c434505987ade936dc53e6e27aa1406b0295516f" - integrity sha512-Kn410jq6vs1P8Nm+ZsRj9H+U3C0kjuEkYLxbiCyn3MDEiYor1j2DGVULqAz62SLZtUZ/e9Xt6xMXiJ3NJ65WyQ== - -"@tanstack/query-devtools@5.67.2": - version "5.67.2" - resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.67.2.tgz#890ae9913bd21d3969c7fd85c68b1bd1500cfc57" - integrity sha512-O4QXFFd7xqp6EX7sdvc9tsVO8nm4lpWBqwpgjpVLW5g7IeOY6VnS/xvs/YzbRhBVkKTMaJMOUGU7NhSX+YGoNg== - -"@tanstack/react-query-devtools@^5.51.11": - version "5.69.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.69.0.tgz#2cb8083028aab591b9a82caf68cd7a383a0c8b1a" - integrity sha512-sYklnou3IKAemqB5wJeBwjmG5bUGDKAL5/I4pVA+aqSnsNibVLt8/pAU976uuJ5K71w71bHtI/AMxiIs3gtkEA== - dependencies: - "@tanstack/query-devtools" "5.67.2" - -"@tanstack/react-query@^5.51.11": - version "5.69.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.69.0.tgz#8d58e800854cc11d0aa2c39569f53ae32ba442a9" - integrity sha512-Ift3IUNQqTcaFa1AiIQ7WCb/PPy8aexZdq9pZWLXhfLcLxH0+PZqJ2xFImxCpdDZrFRZhLJrh76geevS5xjRhA== - dependencies: - "@tanstack/query-core" "5.69.0" - -"@tanstack/react-table@8.20.6": - version "8.20.6" - resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.20.6.tgz#a1f3103327aa59aa621931f4087a7604a21054d0" - integrity sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ== - dependencies: - "@tanstack/table-core" "8.20.5" - -"@tanstack/react-table@^8.19.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.21.2.tgz#6a7fce828b64547e33f4606ada8114db496007cc" - integrity sha512-11tNlEDTdIhMJba2RBH+ecJ9l1zgS2kjmexDPAraulc8jeNA4xocSNeyzextT0XJyASil4XsCYlJmf5jEWAtYg== - dependencies: - "@tanstack/table-core" "8.21.2" - -"@tanstack/react-virtual@3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz#d6b9bd999c181f0a2edce270c87a2febead04322" - integrity sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ== - dependencies: - "@tanstack/virtual-core" "3.11.2" - -"@tanstack/table-core@8.20.5": - version "8.20.5" - resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.20.5.tgz#3974f0b090bed11243d4107283824167a395cf1d" - integrity sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg== - -"@tanstack/table-core@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.21.2.tgz#dd57595a1773652bb6fb437e90a5f5386a49fd7e" - integrity sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA== - -"@tanstack/virtual-core@3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz#00409e743ac4eea9afe5b7708594d5fcebb00212" - integrity sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw== - -"@tiptap/core@^2.11.5", "@tiptap/core@^2.9.1": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.11.5.tgz#2bf1b08c4ca2467778d0a109634c45ab475522f4" - integrity sha512-jb0KTdUJaJY53JaN7ooY3XAxHQNoMYti/H6ANo707PsLXVeEqJ9o8+eBup1JU5CuwzrgnDc2dECt2WIGX9f8Jw== - -"@tiptap/extension-blockquote@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.11.5.tgz#d43ae78f5eba7de1b9138820502e950bae83c31c" - integrity sha512-MZfcRIzKRD8/J1hkt/eYv49060GTL6qGR3NY/oTDuw2wYzbQXXLEbjk8hxAtjwNn7G+pWQv3L+PKFzZDxibLuA== - -"@tiptap/extension-bold@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.11.5.tgz#7fc13d835067fbee4ff2be83a694f5200ba50e41" - integrity sha512-OAq03MHEbl7MtYCUzGuwb0VpOPnM0k5ekMbEaRILFU5ZC7cEAQ36XmPIw1dQayrcuE8GZL35BKub2qtRxyC9iA== - -"@tiptap/extension-bubble-menu@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.11.5.tgz#75da9bcea2a6579cd3ad41cf82f7bc7369c1816d" - integrity sha512-rx+rMd7EEdht5EHLWldpkzJ56SWYA9799b33ustePqhXd6linnokJCzBqY13AfZ9+xp3RsR6C0ZHI9GGea0tIA== - dependencies: - tippy.js "^6.3.7" - -"@tiptap/extension-bullet-list@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.11.5.tgz#84c6bf623c5dffcd73dd24d012c9636191031d43" - integrity sha512-VXwHlX6A/T6FAspnyjbKDO0TQ+oetXuat6RY1/JxbXphH42nLuBaGWJ6pgy6xMl6XY8/9oPkTNrfJw/8/eeRwA== - -"@tiptap/extension-code-block@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.11.5.tgz#b90cea403884630f3f86c7629815250e8a266802" - integrity sha512-ksxMMvqLDlC+ftcQLynqZMdlJT1iHYZorXsXw/n+wuRd7YElkRkd6YWUX/Pq/njFY6lDjKiqFLEXBJB8nrzzBA== - -"@tiptap/extension-code@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.11.5.tgz#a550c544804e65507ab66dc8ab89a1e2f7d9228d" - integrity sha512-xOvHevNIQIcCCVn9tpvXa1wBp0wHN/2umbAZGTVzS+AQtM7BTo0tz8IyzwxkcZJaImONcUVYLOLzt2AgW1LltA== - -"@tiptap/extension-document@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.11.5.tgz#1d650d232df46cf07b83e0a5cc64db1c70057f37" - integrity sha512-7I4BRTpIux2a0O2qS3BDmyZ5LGp3pszKbix32CmeVh7lN9dV7W5reDqtJJ9FCZEEF+pZ6e1/DQA362dflwZw2g== - -"@tiptap/extension-dropcursor@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.11.5.tgz#a1d6fad3379551449534bdb8135da2577a8ec8fb" - integrity sha512-uIN7L3FU0904ec7FFFbndO7RQE/yiON4VzAMhNn587LFMyWO8US139HXIL4O8dpZeYwYL3d1FnDTflZl6CwLlg== - -"@tiptap/extension-floating-menu@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.11.5.tgz#97868901bae46e1826b9d2cfe5a4a33a446adfc1" - integrity sha512-HsMI0hV5Lwzm530Z5tBeyNCBNG38eJ3qjfdV2OHlfSf3+KOEfn6a5AUdoNaZO02LF79/8+7BaYU2drafag9cxQ== - dependencies: - tippy.js "^6.3.7" - -"@tiptap/extension-gapcursor@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.11.5.tgz#6771e387d90ef85ee834f4572627d76e303e1297" - integrity sha512-kcWa+Xq9cb6lBdiICvLReuDtz/rLjFKHWpW3jTTF3FiP3wx4H8Rs6bzVtty7uOVTfwupxZRiKICAMEU6iT0xrQ== - -"@tiptap/extension-hard-break@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.11.5.tgz#cf9610846cb7ab0f3a8d8dc37fd1fcee6a39d72f" - integrity sha512-q9doeN+Yg9F5QNTG8pZGYfNye3tmntOwch683v0CCVCI4ldKaLZ0jG3NbBTq+mosHYdgOH2rNbIORlRRsQ+iYQ== - -"@tiptap/extension-heading@^2.11.5", "@tiptap/extension-heading@^2.9.1": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.11.5.tgz#e9a54e4cbb5c9c7fc95a24cc894a16751ecd185f" - integrity sha512-x/MV53psJ9baRcZ4k4WjnCUBMt8zCX7mPlKVT+9C/o+DEs/j/qxPLs95nHeQv70chZpSwCQCt93xMmuF0kPoAg== - -"@tiptap/extension-history@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.11.5.tgz#c636c8da784ad25886eb617cff6b4752ac9586d1" - integrity sha512-b+wOS33Dz1azw6F1i9LFTEIJ/gUui0Jwz5ZvmVDpL2ZHBhq1Ui0/spTT+tuZOXq7Y/uCbKL8Liu4WoedIvhboQ== - -"@tiptap/extension-horizontal-rule@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.11.5.tgz#b876f606386c51bc2ff45d4bd26267f5b104a850" - integrity sha512-3up2r1Du8/5/4ZYzTC0DjTwhgPI3dn8jhOCLu73m5F3OGvK/9whcXoeWoX103hYMnGDxBlfOje71yQuN35FL4A== - -"@tiptap/extension-image@^2.9.1": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.11.5.tgz#f16d05c8045dc7d84d85efdbb946a2a8713fb2d3" - integrity sha512-HbUq9AL8gb8eSuQfY/QKkvMc66ZFN/b6jvQAILGArNOgalUfGizoC6baKTJShaExMSPjBZlaAHtJiQKPaGRHaA== - -"@tiptap/extension-italic@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.11.5.tgz#63b09c7fb41ab64681983df7be8cf6bc330c0ede" - integrity sha512-9VGfb2/LfPhQ6TjzDwuYLRvw0A6VGbaIp3F+5Mql8XVdTBHb2+rhELbyhNGiGVR78CaB/EiKb6dO9xu/tBWSYA== - -"@tiptap/extension-list-item@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.11.5.tgz#6ada38dd4e6db889288242542bc0490b0908d190" - integrity sha512-Mp5RD/pbkfW1vdc6xMVxXYcta73FOwLmblQlFNn/l/E5/X1DUSA4iGhgDDH4EWO3swbs03x2f7Zka/Xoj3+WLg== - -"@tiptap/extension-ordered-list@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.11.5.tgz#c81e33b5bc885450d412e9ea644cc666407e0c13" - integrity sha512-Cu8KwruBNWAaEfshRQR0yOSaUKAeEwxW7UgbvF9cN/zZuKgK5uZosPCPTehIFCcRe+TBpRtZQh+06f/gNYpYYg== - -"@tiptap/extension-paragraph@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.11.5.tgz#05575f0264a435837483831eebffc5e3af279cb1" - integrity sha512-YFBWeg7xu/sBnsDIF/+nh9Arf7R0h07VZMd0id5Ydd2Qe3c1uIZwXxeINVtH0SZozuPIQFAT8ICe9M0RxmE+TA== - -"@tiptap/extension-strike@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.11.5.tgz#94e214dcede09f6c5f99d0c58290a1d3f5db61eb" - integrity sha512-PVfUiCqrjvsLpbIoVlegSY8RlkR64F1Rr2RYmiybQfGbg+AkSZXDeO0eIrc03//4gua7D9DfIozHmAKv1KN3ow== - -"@tiptap/extension-table@^2.9.1": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.11.5.tgz#2296c1076ef3381bca4601709956085f093ff9e0" - integrity sha512-NKXLhKWdAdURklm98YkCd2ai4fh8jY8HS/+X2s/2QiQt8Z98CU1keCm35fJEEExM234iB/hCqG5vY4JgTc0Tvw== - -"@tiptap/extension-text-style@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.11.5.tgz#f1b3882de489328203187e6256e6ee130477cfad" - integrity sha512-YUmYl0gILSd/u/ZkOmNxjNXVw+mu8fpC2f8G4I4tLODm0zCx09j9DDEJXSrM5XX72nxJQqtSQsCpNKnL0hfeEQ== - -"@tiptap/extension-text@^2.11.5": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.11.5.tgz#10cc6ec519aac71a6841ec9bd914ded747f6ec3f" - integrity sha512-Gq1WwyhFpCbEDrLPIHt5A8aLSlf8bfz4jm417c8F/JyU0J5dtYdmx0RAxjnLw1i7ZHE7LRyqqAoS0sl7JHDNSQ== - -"@tiptap/pm@^2.11.5", "@tiptap/pm@^2.9.1": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.11.5.tgz#6577e277e5a991c605a3dfcebde7c0b794d8def4" - integrity sha512-z9JFtqc5ZOsdQLd9vRnXfTCQ8v5ADAfRt9Nm7SqP6FUHII8E1hs38ACzf5xursmth/VonJYb5+73Pqxk1hGIPw== - dependencies: - prosemirror-changeset "^2.2.1" - prosemirror-collab "^1.3.1" - prosemirror-commands "^1.6.2" - prosemirror-dropcursor "^1.8.1" - prosemirror-gapcursor "^1.3.2" - prosemirror-history "^1.4.1" - prosemirror-inputrules "^1.4.0" - prosemirror-keymap "^1.2.2" - prosemirror-markdown "^1.13.1" - prosemirror-menu "^1.2.4" - prosemirror-model "^1.23.0" - prosemirror-schema-basic "^1.2.3" - prosemirror-schema-list "^1.4.1" - prosemirror-state "^1.4.3" - prosemirror-tables "^1.6.3" - prosemirror-trailing-node "^3.0.0" - prosemirror-transform "^1.10.2" - prosemirror-view "^1.37.0" - -"@tiptap/react@^2.9.1": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.11.5.tgz#46ba23a56583e95b0020eb5778c35f3dd98aa673" - integrity sha512-Dp8eHL1G+R/C4+QzAczyb3t1ovexEIZx9ln7SGEM+cT1KHKAw9XGPRgsp92+NQaYI+EdEb/YqoBOSzQcd18/OQ== - dependencies: - "@tiptap/extension-bubble-menu" "^2.11.5" - "@tiptap/extension-floating-menu" "^2.11.5" - "@types/use-sync-external-store" "^0.0.6" - fast-deep-equal "^3" - use-sync-external-store "^1" - -"@tiptap/starter-kit@^2.9.1": - version "2.11.5" - resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.11.5.tgz#7d1b0b866b10c0f9c98214588639cda204c4f3b4" - integrity sha512-SLI7Aj2ruU1t//6Mk8f+fqW+18uTqpdfLUJYgwu0CkqBckrkRZYZh6GVLk/02k3H2ki7QkFxiFbZrdbZdng0JA== - dependencies: - "@tiptap/core" "^2.11.5" - "@tiptap/extension-blockquote" "^2.11.5" - "@tiptap/extension-bold" "^2.11.5" - "@tiptap/extension-bullet-list" "^2.11.5" - "@tiptap/extension-code" "^2.11.5" - "@tiptap/extension-code-block" "^2.11.5" - "@tiptap/extension-document" "^2.11.5" - "@tiptap/extension-dropcursor" "^2.11.5" - "@tiptap/extension-gapcursor" "^2.11.5" - "@tiptap/extension-hard-break" "^2.11.5" - "@tiptap/extension-heading" "^2.11.5" - "@tiptap/extension-history" "^2.11.5" - "@tiptap/extension-horizontal-rule" "^2.11.5" - "@tiptap/extension-italic" "^2.11.5" - "@tiptap/extension-list-item" "^2.11.5" - "@tiptap/extension-ordered-list" "^2.11.5" - "@tiptap/extension-paragraph" "^2.11.5" - "@tiptap/extension-strike" "^2.11.5" - "@tiptap/extension-text" "^2.11.5" - "@tiptap/extension-text-style" "^2.11.5" - "@tiptap/pm" "^2.11.5" - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@tybys/wasm-util@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" - integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== - dependencies: - tslib "^2.4.0" - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@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.0", "@types/estree@^1.0.6": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" - integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== - -"@types/hast@^2.0.0": - version "2.3.10" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" - integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== - 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/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": - version "3.3.6" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz#6bba74383cdab98e8db4e20ce5b4a6b98caed010" - integrity sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/json-schema@^7.0.15": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/linkify-it@^5": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" - integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== - -"@types/markdown-it@^14.0.0": - version "14.1.2" - resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" - integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== - dependencies: - "@types/linkify-it" "^5" - "@types/mdurl" "^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/mdurl@^2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" - integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== - -"@types/ms@*": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" - integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== - -"@types/node@*": - version "22.13.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.13.tgz#5e7d110fb509b0d4a43fbf48fa9d6e0f83e1b1e7" - integrity sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ== - dependencies: - undici-types "~6.20.0" - -"@types/papaparse@^5.3.9": - version "5.3.15" - resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.15.tgz#7cafa16757a1d121422deefbb10b6310b224ecc4" - integrity sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw== - dependencies: - "@types/node" "*" - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/prop-types@^15.7.14": - version "15.7.14" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" - integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== - -"@types/quill@^1.3.10": - version "1.3.10" - resolved "https://registry.yarnpkg.com/@types/quill/-/quill-1.3.10.tgz#dc1f7b6587f7ee94bdf5291bc92289f6f0497613" - integrity sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw== - dependencies: - parchment "^1.1.2" - -"@types/raf@^3.4.0": - version "3.4.3" - resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04" - integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw== - -"@types/react-redux@^7.1.20": - version "7.1.34" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.34.tgz#83613e1957c481521e6776beeac4fd506d11bd0e" - integrity sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ== - dependencies: - "@types/hoist-non-react-statics" "^3.3.0" - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - redux "^4.0.0" - -"@types/react-transition-group@^4.4.11", "@types/react-transition-group@^4.4.12": - version "4.4.12" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" - integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== - -"@types/react@*": - version "19.0.12" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.12.tgz#338b3f7854adbb784be454b3a83053127af96bd3" - integrity sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA== - dependencies: - csstype "^3.0.2" - -"@types/trusted-types@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" - integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== - -"@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": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" - integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== - -"@types/use-sync-external-store@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc" - integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== - -"@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz#ad1465aa6fe7e937801c291648dec951c4dc38e6" - integrity sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.28.0" - "@typescript-eslint/type-utils" "8.28.0" - "@typescript-eslint/utils" "8.28.0" - "@typescript-eslint/visitor-keys" "8.28.0" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - ts-api-utils "^2.0.1" - -"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.28.0.tgz#85321707e8711c0e66a949ea228224af35f45c98" - integrity sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ== - dependencies: - "@typescript-eslint/scope-manager" "8.28.0" - "@typescript-eslint/types" "8.28.0" - "@typescript-eslint/typescript-estree" "8.28.0" - "@typescript-eslint/visitor-keys" "8.28.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@8.28.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz#e495b20438a3787e00498774d5625e620d68f9fe" - integrity sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw== - dependencies: - "@typescript-eslint/types" "8.28.0" - "@typescript-eslint/visitor-keys" "8.28.0" - -"@typescript-eslint/type-utils@8.28.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz#fc565414ebc16de1fc65e0dd8652ce02c78ca61f" - integrity sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg== - dependencies: - "@typescript-eslint/typescript-estree" "8.28.0" - "@typescript-eslint/utils" "8.28.0" - debug "^4.3.4" - ts-api-utils "^2.0.1" - -"@typescript-eslint/types@8.28.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.28.0.tgz#7c73878385edfd9674c7aa10975e6c484b4f896e" - integrity sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA== - -"@typescript-eslint/typescript-estree@8.28.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz#56b999f26f7ca67b9d75d6a67af5c8b8e4e80114" - integrity sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA== - dependencies: - "@typescript-eslint/types" "8.28.0" - "@typescript-eslint/visitor-keys" "8.28.0" - debug "^4.3.4" - fast-glob "^3.3.2" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^2.0.1" - -"@typescript-eslint/utils@8.28.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.28.0.tgz#7850856620a896b7ac621ac12d49c282aefbb528" - integrity sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.28.0" - "@typescript-eslint/types" "8.28.0" - "@typescript-eslint/typescript-estree" "8.28.0" - -"@typescript-eslint/visitor-keys@8.28.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz#18eb9a25cc9dadb027835c58efe93a5c4ee81969" - integrity sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg== - dependencies: - "@typescript-eslint/types" "8.28.0" - eslint-visitor-keys "^4.2.0" - -"@uiw/react-json-view@^2.0.0-alpha.30": - version "2.0.0-alpha.30" - resolved "https://registry.yarnpkg.com/@uiw/react-json-view/-/react-json-view-2.0.0-alpha.30.tgz#85db25b1a61cccc5c6c51350894515f8b7100e52" - integrity sha512-ufvvirUQcITU9s4R12b7hn/t7ngLCYp1KbBxE+eAD35o3Ey+uxfKvgWmIwGFhV3hFXXxMJ8SHQKwl/ywNCHsDA== - -"@ungap/structured-clone@^1.0.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" - integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== - -"@unrs/rspack-resolver-binding-darwin-arm64@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.2.2.tgz#4a40be18ae1d5a417ca9246b0e9c7eda11a49998" - integrity sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw== - -"@unrs/rspack-resolver-binding-darwin-x64@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.2.2.tgz#f1d9226724fa4f47f0eaab50fb046568e29d68e0" - integrity sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg== - -"@unrs/rspack-resolver-binding-freebsd-x64@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.2.2.tgz#3f14520900a130bf1b30922a7be0024968506e8c" - integrity sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA== - -"@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.2.2.tgz#7aa5ae2d6c762b0737694b48cd069629dd205c0c" - integrity sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw== - -"@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.2.2.tgz#1422b244db1ff7eb79d74260d25dac976c423e91" - integrity sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ== - -"@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.2.2.tgz#9cc30a98b25b704b3d3bb17b9932a24d39049719" - integrity sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ== - -"@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.2.2.tgz#1ce389a2317c96276ceec82de4e6e325974946a7" - integrity sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw== - -"@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.2.2.tgz#6d262acedac6d6e3d85c2d370de47e8e669cc316" - integrity sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg== - -"@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.2.2.tgz#72bf01b52c5e2d567b5f90ee842cde674e0356c7" - integrity sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog== - dependencies: - "@napi-rs/wasm-runtime" "^0.2.7" - -"@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.2.2.tgz#e1a74655a42d48d2c005dd69ba148547167e1701" - integrity sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg== - -"@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.2.2.tgz#ac441b3bd8cf97b7d3d35f4e7f9792f8e257e729" - integrity sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw== - -"@yr/monotone-cubic-spline@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz#7272d89f8e4f6fb7a1600c28c378cc18d3b577b9" - integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA== - -abs-svg-path@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" - integrity sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.14.0: - version "8.14.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" - integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -apexcharts@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-4.5.0.tgz#efddb1a9b48e5add201df1549ac654412182e1f9" - integrity sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ== - dependencies: - "@svgdotjs/svg.draggable.js" "^3.0.4" - "@svgdotjs/svg.filter.js" "^3.0.8" - "@svgdotjs/svg.js" "^3.2.4" - "@svgdotjs/svg.resize.js" "^2.0.2" - "@svgdotjs/svg.select.js" "^4.0.1" - "@yr/monotone-cubic-spline" "^1.0.3" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" - integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== - -array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" - integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== - dependencies: - call-bound "^1.0.3" - is-array-buffer "^3.0.5" - -array-includes@^3.1.6, array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - -array.prototype.findlast@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" - integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.findlastindex@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" - integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - es-shim-unscopables "^1.1.0" - -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" - integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" - integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -array.prototype.tosorted@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" - integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" - es-shim-unscopables "^1.0.2" - -arraybuffer.prototype.slice@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" - integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - is-array-buffer "^3.0.4" - -ast-types-flow@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" - integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== - -async-function@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" - integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -attr-accept@^2.2.4: - version "2.2.5" - resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" - integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -axe-core@^4.10.0: - version "4.10.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" - integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== - -axios@^1.7.2: - version "1.8.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" - integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axobject-query@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" - integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== - -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.13" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz#7d445f0e0607ebc8fb6b01d7e8fb02069b91dd8b" - integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.4" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" - integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.3" - core-js-compat "^3.40.0" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz#428c615d3c177292a22b4f93ed99e358d7906a9b" - integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.4" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-arraybuffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" - integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== - -base64-js@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" - integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== - -base64-js@^1.1.2, base64-js@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bidi-js@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" - integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== - dependencies: - require-from-string "^2.0.2" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -brotli@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" - integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== - dependencies: - base64-js "^1.1.2" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.24.0, browserslist@^4.24.4: - version "4.24.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== - dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" - node-releases "^2.0.19" - update-browserslist-db "^1.1.1" - -btoa@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" - integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== - -buffer-from@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0" - integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg== - -busboy@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bind@^1.0.7, call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001688: - version "1.0.30001707" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz#c5e104d199e6f4355a898fcd995a066c7eb9bf41" - integrity sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw== - -canvg@^3.0.11: - version "3.0.11" - resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.11.tgz#4b4290a6c7fa36871fac2b14e432eff33b33cf2b" - integrity sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA== - dependencies: - "@babel/runtime" "^7.12.5" - "@types/raf" "^3.4.0" - core-js "^3.8.3" - raf "^3.4.1" - regenerator-runtime "^0.13.7" - rgbcolor "^1.0.1" - stackblur-canvas "^2.0.0" - svg-pathdata "^6.0.3" - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -client-only@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -clone@^2.1.1, clone@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -clsx@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -clsx@^2.0.0, clsx@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.9.0, color-string@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== - -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -copy-to-clipboard@^3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" - integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== - dependencies: - toggle-selection "^1.0.6" - -core-js-compat@^3.40.0: - version "3.41.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.41.0.tgz#4cdfce95f39a8f27759b667cf693d96e5dda3d17" - integrity sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A== - dependencies: - browserslist "^4.24.4" - -core-js@^3.6.0, core-js@^3.8.3: - version "3.41.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.41.0.tgz#57714dafb8c751a6095d028a7428f1fb5834a776" - integrity sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cosmiconfig@^8.1.3: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -crelt@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" - integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== - -cross-spawn@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" - integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== - -css-box-model@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" - integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== - dependencies: - tiny-invariant "^1.0.6" - -css-line-break@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" - integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== - dependencies: - utrie "^1.0.2" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssjanus@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssjanus/-/cssjanus-2.3.0.tgz#af91e639a34d8b241e5032824f3f1b7f8dd91557" - integrity sha512-ZZXXn51SnxRxAZ6fdY7mBDPmA4OZd83q/J9Gdqz3YmE9TUq+9tZl+tdOnCi7PpNygI6PEkehj9rgifv5+W8a5A== - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.0.2, csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -data-view-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" - integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" - integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-offset@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" - integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -date-fns@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" - integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: - 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" - -decode-named-character-reference@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz#5d6ce68792808901210dac42a8e9853511e2b8bf" - integrity sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w== - dependencies: - character-entities "^2.0.0" - -deep-equal@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" - integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== - dependencies: - is-arguments "^1.1.1" - is-date-object "^1.0.5" - is-regex "^1.1.4" - object-is "^1.1.5" - object-keys "^1.1.1" - regexp.prototype.flags "^1.5.1" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== - -deepmerge@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.1.3, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -detect-libc@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -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" - -dfa@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" - integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -dompurify@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.4.tgz#af5a5a11407524431456cf18836c55d13441cd8e" - integrity sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg== - optionalDependencies: - "@types/trusted-types" "^2.0.7" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^3.0.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" - integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dunder-proto@^1.0.0, dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexer2@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - -electron-to-chromium@^1.5.73: - version "1.5.123" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz#fae5bdba0ba27045895176327aa79831aba0790c" - integrity sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA== - -eml-parse-js@^1.2.0-beta.0: - version "1.2.0-beta.0" - resolved "https://registry.yarnpkg.com/eml-parse-js/-/eml-parse-js-1.2.0-beta.0.tgz#0b024d38093b42cd29168f7f5771726390e4b1f3" - integrity sha512-fDA5OcT9DmU+6Qiv6Ki6/+fIjrZ97SE6KIB0PUK2r0nnRqBbnbaWm844l8SLTd4mc3rF0T3izc8E7E/qXFCthA== - dependencies: - "@sinonjs/text-encoding" "^0.7.2" - js-base64 "^3.7.2" - -emoji-regex@^10.3.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" - integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: - version "1.23.9" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" - integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== - dependencies: - array-buffer-byte-length "^1.0.2" - arraybuffer.prototype.slice "^1.0.4" - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.3" - data-view-buffer "^1.0.2" - data-view-byte-length "^1.0.2" - data-view-byte-offset "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.1.0" - es-to-primitive "^1.3.0" - function.prototype.name "^1.1.8" - get-intrinsic "^1.2.7" - get-proto "^1.0.0" - get-symbol-description "^1.1.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - internal-slot "^1.1.0" - is-array-buffer "^3.0.5" - is-callable "^1.2.7" - is-data-view "^1.0.2" - is-regex "^1.2.1" - is-shared-array-buffer "^1.0.4" - is-string "^1.1.1" - is-typed-array "^1.1.15" - is-weakref "^1.1.0" - math-intrinsics "^1.1.0" - object-inspect "^1.13.3" - object-keys "^1.1.1" - object.assign "^4.1.7" - own-keys "^1.0.1" - regexp.prototype.flags "^1.5.3" - safe-array-concat "^1.1.3" - safe-push-apply "^1.0.0" - safe-regex-test "^1.1.0" - set-proto "^1.0.0" - string.prototype.trim "^1.2.10" - string.prototype.trimend "^1.0.9" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.3" - typed-array-byte-length "^1.0.3" - typed-array-byte-offset "^1.0.4" - typed-array-length "^1.0.7" - unbox-primitive "^1.1.0" - which-typed-array "^1.1.18" - -es-define-property@^1.0.0, es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-iterator-helpers@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" - integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-abstract "^1.23.6" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.3" - function-bind "^1.1.2" - get-intrinsic "^1.2.6" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - internal-slot "^1.1.0" - iterator.prototype "^1.1.4" - safe-array-concat "^1.1.3" - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" - integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== - dependencies: - hasown "^2.0.2" - -es-to-primitive@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" - integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== - dependencies: - is-callable "^1.2.7" - is-date-object "^1.0.5" - is-symbol "^1.0.4" - -escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-next@15.2.2: - version "15.2.2" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-15.2.2.tgz#114ffec6851ced10fde7aa2f62c3d3a4371df514" - integrity sha512-g34RI7RFS4HybYFwGa/okj+8WZM+/fy+pEM+aqRQoVvM4gQhKrd4wIEddKmlZfWD75j8LTwB5zwkmNv3DceH1A== - dependencies: - "@next/eslint-plugin-next" "15.2.2" - "@rushstack/eslint-patch" "^1.10.3" - "@typescript-eslint/eslint-plugin" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" - "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^3.5.2" - eslint-plugin-import "^2.31.0" - eslint-plugin-jsx-a11y "^6.10.0" - eslint-plugin-react "^7.37.0" - eslint-plugin-react-hooks "^5.0.0" - -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.5.2: - version "3.9.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.9.1.tgz#0ab8d0ed911e875684a96976a118adee5d1c9daa" - integrity sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw== - dependencies: - "@nolyfill/is-core-module" "1.0.39" - debug "^4.4.0" - get-tsconfig "^4.10.0" - is-bun-module "^1.3.0" - rspack-resolver "^1.1.0" - stable-hash "^0.0.5" - tinyglobby "^0.2.12" - -eslint-module-utils@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.31.0: - version "2.31.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" - integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== - dependencies: - "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.0" - hasown "^2.0.2" - is-core-module "^2.15.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.8" - object.groupby "^1.0.3" - object.values "^1.2.0" - semver "^6.3.1" - string.prototype.trimend "^1.0.8" - tsconfig-paths "^3.15.0" - -eslint-plugin-jsx-a11y@^6.10.0: - version "6.10.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" - integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== - dependencies: - aria-query "^5.3.2" - array-includes "^3.1.8" - array.prototype.flatmap "^1.3.2" - ast-types-flow "^0.0.8" - axe-core "^4.10.0" - axobject-query "^4.1.0" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - hasown "^2.0.2" - jsx-ast-utils "^3.3.5" - language-tags "^1.0.9" - minimatch "^3.1.2" - object.fromentries "^2.0.8" - safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.1" - -eslint-plugin-react-hooks@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3" - integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== - -eslint-plugin-react@^7.37.0: - version "7.37.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz#1b6c80b6175b6ae4b26055ae4d55d04c414c7181" - integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ== - dependencies: - array-includes "^3.1.8" - array.prototype.findlast "^1.2.5" - array.prototype.flatmap "^1.3.3" - array.prototype.tosorted "^1.1.4" - doctrine "^2.1.0" - es-iterator-helpers "^1.2.1" - estraverse "^5.3.0" - hasown "^2.0.2" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.8" - object.fromentries "^2.0.8" - object.values "^1.2.1" - prop-types "^15.8.1" - resolve "^2.0.0-next.5" - semver "^6.3.1" - string.prototype.matchall "^4.0.12" - string.prototype.repeat "^1.0.0" - -eslint-scope@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d" - integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== - -eslint@9.22.0: - version "9.22.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.22.0.tgz#0760043809fbf836f582140345233984d613c552" - integrity sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.19.2" - "@eslint/config-helpers" "^0.1.0" - "@eslint/core" "^0.12.0" - "@eslint/eslintrc" "^3.3.0" - "@eslint/js" "9.22.0" - "@eslint/plugin-kit" "^0.2.7" - "@humanfs/node" "^0.16.6" - "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.4.2" - "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.6" - debug "^4.3.2" - escape-string-regexp "^4.0.0" - eslint-scope "^8.3.0" - eslint-visitor-keys "^4.2.0" - espree "^10.3.0" - esquery "^1.5.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^8.0.0" - find-up "^5.0.0" - glob-parent "^6.0.2" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - json-stable-stringify-without-jsonify "^1.0.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - -espree@^10.0.1, espree@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" - integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== - dependencies: - acorn "^8.14.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -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== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter3@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" - integrity sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -export-to-csv@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/export-to-csv/-/export-to-csv-1.4.0.tgz#03fb42a4a4262cd03bde57a7b9bcad115149cf4b" - integrity sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg== - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend@^3.0.0, extend@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-deep-equal@^3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" - integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== - -fast-equals@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7" - integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg== - -fast-glob@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== - dependencies: - reusify "^1.0.4" - -fault@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" - integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== - dependencies: - format "^0.2.0" - -fdir@^6.4.3: - version "6.4.3" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" - integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== - -fflate@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" - integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== - -file-entry-cache@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" - integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== - dependencies: - flat-cache "^4.0.0" - -file-selector@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-2.1.2.tgz#fe7c7ee9e550952dfbc863d73b14dc740d7de8b4" - integrity sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig== - dependencies: - tslib "^2.7.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" - integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.4" - -flatted@^3.2.9: - version "3.3.3" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" - integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== - -follow-redirects@^1.15.6: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -fontkit@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-2.0.4.tgz#4765d664c68b49b5d6feb6bd1051ee49d8ec5ab0" - integrity sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g== - dependencies: - "@swc/helpers" "^0.5.12" - brotli "^1.3.2" - clone "^2.1.2" - dfa "^1.2.0" - fast-deep-equal "^3.1.3" - restructure "^3.0.0" - tiny-inflate "^1.0.3" - unicode-properties "^1.4.0" - unicode-trie "^2.0.0" - -for-each@^0.3.3, for-each@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" - integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== - dependencies: - is-callable "^1.2.7" - -form-data@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" - integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - mime-types "^2.1.12" - -format@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== - -formik@2.4.6: - version "2.4.6" - resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.6.tgz#4da75ca80f1a827ab35b08fd98d5a76e928c9686" - integrity sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g== - dependencies: - "@types/hoist-non-react-statics" "^3.3.1" - deepmerge "^2.1.1" - hoist-non-react-statics "^3.3.0" - lodash "^4.17.21" - lodash-es "^4.17.21" - react-fast-compare "^2.0.1" - tiny-warning "^1.0.2" - tslib "^2.0.0" - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" - integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - functions-have-names "^1.2.3" - hasown "^2.0.2" - is-callable "^1.2.7" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-proto@^1.0.0, get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -get-symbol-description@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" - integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - -get-tsconfig@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb" - integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A== - dependencies: - resolve-pkg-maps "^1.0.0" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - -globalthis@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -goober@^2.1.16: - version "2.1.16" - resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.16.tgz#7d548eb9b83ff0988d102be71f271ca8f9c82a95" - integrity sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g== - -gopd@^1.0.1, gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -gray-matter@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -has-bigints@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" - integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" - integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - dependencies: - dunder-proto "^1.0.0" - -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" - integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== - -hast-util-to-jsx-runtime@^2.0.0: - version "2.3.6" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" - integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== - 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 "^7.0.0" - space-separated-tokens "^2.0.0" - style-to-js "^1.0.0" - unist-util-position "^5.0.0" - vfile-message "^4.0.0" - -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" - integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== - dependencies: - "@types/hast" "^2.0.0" - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - -highlight-words@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/highlight-words/-/highlight-words-2.0.0.tgz#06853d68f1f7c8e59d6ef2dd072fe2f64fc93936" - integrity sha512-If5n+IhSBRXTScE7wl16VPmd+44Vy7kof24EdqhjsZsDuHikpv1OCagVcJFpB4fS4UPUniedlWqrjIO8vWOsIQ== - -highlight.js@^10.4.1, highlight.js@~10.7.0: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -highlightjs-vue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz#fdfe97fbea6354e70ee44e3a955875e114db086d" - integrity sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA== - -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -hsl-to-hex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz#c58c826dc6d2f1e0a5ff1da5a7ecbf03faac1352" - integrity sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA== - dependencies: - hsl-to-rgb-for-reals "^1.1.0" - -hsl-to-rgb-for-reals@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz#e1eb23f6b78016e3722431df68197e6dcdc016d9" - integrity sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg== - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -html-tokenize@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-tokenize/-/html-tokenize-2.0.1.tgz#c3b2ea6e2837d4f8c06693393e9d2a12c960be5f" - integrity sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w== - dependencies: - buffer-from "~0.1.1" - inherits "~2.0.1" - minimist "~1.2.5" - readable-stream "~1.0.27-1" - through2 "~0.4.1" - -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== - -html2canvas@^1.0.0-rc.5: - version "1.4.1" - resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" - integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== - dependencies: - css-line-break "^2.1.0" - text-segmentation "^1.0.3" - -htmlparser2@^3.9.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -hyphen@^1.6.4: - version "1.10.6" - resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.10.6.tgz#0e779d280e696102b97d7e42f5ca5de2cc97e274" - integrity sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw== - -i18next@24.2.3: - version "24.2.3" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-24.2.3.tgz#3a05f72615cbd7c00d7e348667e2aabef1df753b" - integrity sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A== - dependencies: - "@babel/runtime" "^7.26.10" - -ignore@^5.2.0, ignore@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -immer@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" - integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" - integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -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.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" - integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.2" - side-channel "^1.1.0" - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - -is-arguments@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" - integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" - integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-async-function@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" - integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== - dependencies: - async-function "^1.0.0" - call-bound "^1.0.3" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - -is-boolean-object@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" - integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-bun-module@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.3.0.tgz#ea4d24fdebfcecc98e81bcbcb506827fee288760" - integrity sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA== - dependencies: - semver "^7.6.3" - -is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - -is-data-view@^1.0.1, is-data-view@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" - integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - dependencies: - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - is-typed-array "^1.1.13" - -is-date-object@^1.0.5, is-date-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" - integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" - integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - dependencies: - call-bound "^1.0.3" - -is-generator-function@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" - integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== - dependencies: - call-bound "^1.0.3" - get-proto "^1.0.0" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-number-object@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" - integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-regex@^1.1.4, is-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" - integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - dependencies: - call-bound "^1.0.3" - -is-string@^1.0.7, is-string@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" - integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-symbol@^1.0.4, is-symbol@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" - integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - dependencies: - call-bound "^1.0.2" - has-symbols "^1.1.0" - safe-regex-test "^1.1.0" - -is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - -is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2, is-weakref@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" - integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== - dependencies: - call-bound "^1.0.3" - -is-weakset@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" - integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== - dependencies: - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -iterator.prototype@^1.1.4: - version "1.1.5" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" - integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== - dependencies: - define-data-property "^1.1.4" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.6" - get-proto "^1.0.0" - has-symbols "^1.1.0" - set-function-name "^2.0.2" - -javascript-time-ago@^2.5.11: - version "2.5.11" - resolved "https://registry.yarnpkg.com/javascript-time-ago/-/javascript-time-ago-2.5.11.tgz#f2743040ccdec603cb4ec1029eeccb0c595c942a" - integrity sha512-Zeyf5R7oM1fSMW9zsU3YgAYwE0bimEeF54Udn2ixGd8PUwu+z1Yc5t4Y8YScJDMHD6uCx6giLt3VJR5K4CMwbg== - dependencies: - relative-time-format "^1.1.6" - -jay-peg@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/jay-peg/-/jay-peg-1.1.1.tgz#fdf410b89fa7a295bf74424ffe4c9083dbe7c363" - integrity sha512-D62KEuBxz/ip2gQKOEhk/mx14o7eiFRaU+VNNSP4MOiIkwb/D6B3G1Mfas7C/Fit8EsSV2/IWjZElx/Gs6A4ww== - dependencies: - restructure "^3.0.0" - -js-base64@^3.7.2: - version "3.7.7" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" - integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsesc@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" - integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== - -jsesc@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jspdf-autotable@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-5.0.2.tgz#bcf7aa2ff9eb46a2db6aa8c0407ab86c0a6c7b96" - integrity sha512-YNKeB7qmx3pxOLcNeoqAv3qTS7KuvVwkFe5AduCawpop3NOkBUtqDToxNc225MlNecxT4kP2Zy3z/y/yvGdXUQ== - -jspdf@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-3.0.1.tgz#d81e1964f354f60412516eb2449ea2cccd4d2a3b" - integrity sha512-qaGIxqxetdoNnFQQXxTKUD9/Z7AloLaw94fFsOiJMxbfYdBbrBuhWmbzI8TVjrw7s3jBY1PFHofBKMV/wZPapg== - dependencies: - "@babel/runtime" "^7.26.7" - atob "^2.1.2" - btoa "^1.2.1" - fflate "^0.8.1" - optionalDependencies: - canvg "^3.0.11" - core-js "^3.6.0" - dompurify "^3.2.4" - html2canvas "^1.0.0-rc.5" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -keyv@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -language-subtag-registry@^0.3.20: - version "0.3.23" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" - integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== - -language-tags@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - -leaflet-defaulticon-compatibility@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.2.tgz#f5e1a5841aeab9d1682d17887348855a741b3c2a" - integrity sha512-IrKagWxkTwzxUkFIumy/Zmo3ksjuAu3zEadtOuJcKzuXaD76Gwvg2Z1mLyx7y52ykOzM8rAH5ChBs4DnfdGa6Q== - -leaflet.markercluster@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz#9cdb52a4eab92671832e1ef9899669e80efc4056" - integrity sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA== - -leaflet@^1.9.4: - version "1.9.4" - resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.9.4.tgz#23fae724e282fa25745aff82ca4d394748db7d8d" - integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -linebreak@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" - integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== - dependencies: - base64-js "0.0.8" - unicode-trie "^2.0.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -linkify-it@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" - integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== - dependencies: - uc.micro "^2.0.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.isequal@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.21, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lowlight@^1.17.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" - integrity sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw== - dependencies: - fault "^1.0.0" - highlight.js "~10.7.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -markdown-it@^14.0.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" - integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== - dependencies: - argparse "^2.0.1" - entities "^4.4.0" - linkify-it "^5.0.0" - mdurl "^2.0.0" - punycode.js "^2.3.1" - uc.micro "^2.1.0" - -material-react-table@^3.0.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/material-react-table/-/material-react-table-3.2.1.tgz#56f595755cab3b669b399999fed9eb305fbb6dd7" - integrity sha512-sQtTf7bETpkPN2Hm5BVtz89wrfXCVQguz6XlwMChSnfKFO5QCKAJJC5aSIKnUc3S0AvTz/k/ILi00FnnY1Gixw== - dependencies: - "@tanstack/match-sorter-utils" "8.19.4" - "@tanstack/react-table" "8.20.6" - "@tanstack/react-virtual" "3.11.2" - highlight-words "2.0.0" - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -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-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.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" - integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== - 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@^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@^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@^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@^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.28: - version "2.0.28" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -mdurl@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" - integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== - -media-engine@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/media-engine/-/media-engine-1.0.3.tgz#be3188f6cd243ea2a40804a35de5a5b032f58dad" - integrity sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg== - -"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" - integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== - -memoize-one@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" - integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromark-core-commonmark@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" - integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== - 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-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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" - integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== - 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@^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@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" - integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== - -micromark@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" - integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== - 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" - -micromatch@^4.0.4, micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6, minimist@~1.2.5: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -monaco-editor@^0.52.0: - version "0.52.2" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.52.2.tgz#53c75a6fcc6802684e99fd1b2700299857002205" - integrity sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ== - -ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mui-tiptap@^1.14.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/mui-tiptap/-/mui-tiptap-1.18.0.tgz#99f42928638d4cce0a396c713c49454cadbc8441" - integrity sha512-SW4PS4jJuOXQHdS96eGq1dkNiLOOTP8yiBnOH6c49SF+Sg6Bowd1hnrDmqRR+l8t6Uer5O7DWhYpYuixvrrlYw== - dependencies: - encodeurl "^1.0.2" - lodash "^4.17.21" - react-colorful "^5.6.1" - tss-react "^4.8.3" - type-fest "^3.12.0" - -multipipe@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-1.0.2.tgz#cc13efd833c9cda99f224f868461b8e1a3fd939d" - integrity sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ== - dependencies: - duplexer2 "^0.1.2" - object-assign "^4.1.0" - -nanoid@^3.3.6: - version "3.3.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" - integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -next@^15.2.2: - version "15.2.4" - resolved "https://registry.yarnpkg.com/next/-/next-15.2.4.tgz#e05225e9511df98e3b2edc713e17f4c970bff961" - integrity sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ== - dependencies: - "@next/env" "15.2.4" - "@swc/counter" "0.1.3" - "@swc/helpers" "0.5.15" - busboy "1.6.0" - caniuse-lite "^1.0.30001579" - postcss "8.4.31" - styled-jsx "5.1.6" - optionalDependencies: - "@next/swc-darwin-arm64" "15.2.4" - "@next/swc-darwin-x64" "15.2.4" - "@next/swc-linux-arm64-gnu" "15.2.4" - "@next/swc-linux-arm64-musl" "15.2.4" - "@next/swc-linux-x64-gnu" "15.2.4" - "@next/swc-linux-x64-musl" "15.2.4" - "@next/swc-win32-arm64-msvc" "15.2.4" - "@next/swc-win32-x64-msvc" "15.2.4" - sharp "^0.33.5" - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== - -normalize-svg-path@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c" - integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg== - dependencies: - svg-arc-to-cubic-bezier "^3.0.0" - -nprogress@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" - integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -numeral@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506" - integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== - -object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.3: - version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== - -object.assign@^4.1.4, object.assign@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - -object.entries@^1.1.8: - version "1.1.9" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" - integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-object-atoms "^1.1.1" - -object.fromentries@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" - integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -orderedmap@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-2.1.1.tgz#61481269c44031c449915497bf5a4ad273c512d2" - integrity sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g== - -own-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" - integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== - dependencies: - get-intrinsic "^1.2.6" - object-keys "^1.1.1" - safe-push-apply "^1.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -pako@^0.2.5: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -papaparse@^5.4.1: - version "5.5.2" - resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.5.2.tgz#fb67cc5a03ba8930cb435dc4641a25d6804bd4d7" - integrity sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA== - -parchment@^1.1.2, parchment@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5" - integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-entities@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" - integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== - dependencies: - "@types/unist" "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-svg-path@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" - integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0, picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== - -possible-typed-array-names@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" - integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== - -postcss-value-parser@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prismjs@^1.27.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" - integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== - -prismjs@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" - integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -prop-types@15.8.1, prop-types@15.x, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -property-expr@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" - integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== - -property-information@^5.0.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" - -property-information@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.0.0.tgz#3508a6d6b0b8eb3ca6eb2c6623b164d2ed2ab112" - integrity sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg== - -prosemirror-changeset@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz#dae94b63aec618fac7bb9061648e6e2a79988383" - integrity sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ== - dependencies: - prosemirror-transform "^1.0.0" - -prosemirror-collab@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz#0e8c91e76e009b53457eb3b3051fb68dad029a33" - integrity sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ== - dependencies: - prosemirror-state "^1.0.0" - -prosemirror-commands@^1.0.0, prosemirror-commands@^1.6.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.7.0.tgz#c0a60c808f51157caa146922494fc59fe257f27c" - integrity sha512-6toodS4R/Aah5pdsrIwnTYPEjW70SlO5a66oo5Kk+CIrgJz3ukOoS+FYDGqvQlAX5PxoGWDX1oD++tn5X3pyRA== - dependencies: - prosemirror-model "^1.0.0" - prosemirror-state "^1.0.0" - prosemirror-transform "^1.10.2" - -prosemirror-dropcursor@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz#49b9fb2f583e0d0f4021ff87db825faa2be2832d" - integrity sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw== - dependencies: - prosemirror-state "^1.0.0" - prosemirror-transform "^1.1.0" - prosemirror-view "^1.1.0" - -prosemirror-gapcursor@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz#5fa336b83789c6199a7341c9493587e249215cb4" - integrity sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ== - dependencies: - prosemirror-keymap "^1.0.0" - prosemirror-model "^1.0.0" - prosemirror-state "^1.0.0" - prosemirror-view "^1.0.0" - -prosemirror-history@^1.0.0, prosemirror-history@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.4.1.tgz#cc370a46fb629e83a33946a0e12612e934ab8b98" - integrity sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ== - dependencies: - prosemirror-state "^1.2.2" - prosemirror-transform "^1.0.0" - prosemirror-view "^1.31.0" - rope-sequence "^1.3.0" - -prosemirror-inputrules@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz#e22bfaf1d6ea4fe240ad447c184af3d520d43c37" - integrity sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA== - dependencies: - prosemirror-state "^1.0.0" - prosemirror-transform "^1.0.0" - -prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e" - integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== - dependencies: - prosemirror-state "^1.0.0" - w3c-keyname "^2.2.0" - -prosemirror-markdown@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz#863eb3fd5f57a444e4378174622b562735b1c503" - integrity sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g== - dependencies: - "@types/markdown-it" "^14.0.0" - markdown-it "^14.0.0" - prosemirror-model "^1.25.0" - -prosemirror-menu@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz#3cfdc7c06d10f9fbd1bce29082c498bd11a0a79a" - integrity sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA== - dependencies: - crelt "^1.0.0" - prosemirror-commands "^1.0.0" - prosemirror-history "^1.0.0" - prosemirror-state "^1.0.0" - -prosemirror-model@^1.0.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0, prosemirror-model@^1.24.1, prosemirror-model@^1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.0.tgz#c147113edc0718a14f03881e4c20367d0221f7af" - integrity sha512-/8XUmxWf0pkj2BmtqZHYJipTBMHIdVjuvFzMvEoxrtyGNmfvdhBiRwYt/eFwy2wA9DtBW3RLqvZnjurEkHaFCw== - dependencies: - orderedmap "^2.0.0" - -prosemirror-schema-basic@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz#389ce1ec09b8a30ea9bbb92c58569cb690c2d695" - integrity sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ== - dependencies: - prosemirror-model "^1.25.0" - -prosemirror-schema-list@^1.4.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz#5869c8f749e8745c394548bb11820b0feb1e32f5" - integrity sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q== - dependencies: - prosemirror-model "^1.0.0" - prosemirror-state "^1.0.0" - prosemirror-transform "^1.7.3" - -prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080" - integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q== - dependencies: - prosemirror-model "^1.0.0" - prosemirror-transform "^1.0.0" - prosemirror-view "^1.27.0" - -prosemirror-tables@^1.6.3: - version "1.6.4" - resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.6.4.tgz#e36ebca70d9e398c4a3b99b122ba86bfc985293d" - integrity sha512-TkDY3Gw52gRFRfRn2f4wJv5WOgAOXLJA2CQJYIJ5+kdFbfj3acR4JUW6LX2e1hiEBiUwvEhzH5a3cZ5YSztpIA== - dependencies: - prosemirror-keymap "^1.2.2" - prosemirror-model "^1.24.1" - prosemirror-state "^1.4.3" - prosemirror-transform "^1.10.2" - prosemirror-view "^1.37.2" - -prosemirror-trailing-node@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz#5bc223d4fc1e8d9145e4079ec77a932b54e19e04" - integrity sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ== - dependencies: - "@remirror/core-constants" "3.0.0" - escape-string-regexp "^4.0.0" - -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.7.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.3.tgz#fae660bd7ffef3159aff44bc21e9e044aa31b67d" - integrity sha512-Nhh/+1kZGRINbEHmVu39oynhcap4hWTs/BlU7NnxWj3+l0qi8I1mu67v6mMdEe/ltD8hHvU4FV6PHiCw2VSpMw== - dependencies: - prosemirror-model "^1.21.0" - -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.37.0, prosemirror-view@^1.37.2: - version "1.38.1" - resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.38.1.tgz#566d30cc8b00a68d6b4c60f5d8a6ab97c82990b3" - integrity sha512-4FH/uM1A4PNyrxXbD+RAbAsf0d/mM0D/wAKSVVWK7o0A9Q/oOXJBrw786mBf2Vnrs/Edly6dH6Z2gsb7zWwaUw== - dependencies: - prosemirror-model "^1.20.0" - prosemirror-state "^1.0.0" - prosemirror-transform "^1.1.0" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -punycode.js@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" - integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -queue@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" - integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== - dependencies: - inherits "~2.0.3" - -quill-delta@^3.6.2: - version "3.6.3" - resolved "https://registry.yarnpkg.com/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032" - integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg== - dependencies: - deep-equal "^1.0.1" - extend "^3.0.2" - fast-diff "1.1.2" - -quill@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8" - integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g== - dependencies: - clone "^2.1.1" - deep-equal "^1.0.1" - eventemitter3 "^2.0.3" - extend "^3.0.2" - parchment "^1.1.4" - quill-delta "^3.6.2" - -raf-schd@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" - integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== - -raf@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -react-apexcharts@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/react-apexcharts/-/react-apexcharts-1.7.0.tgz#bbd08425674224adb27c9f2c62477d43bd5de539" - integrity sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA== - dependencies: - prop-types "^15.8.1" - -react-beautiful-dnd@13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2" - integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ== - dependencies: - "@babel/runtime" "^7.9.2" - css-box-model "^1.2.0" - memoize-one "^5.1.1" - raf-schd "^4.0.2" - react-redux "^7.2.0" - redux "^4.0.4" - use-memo-one "^1.1.1" - -react-colorful@^5.6.1: - version "5.6.1" - resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b" - integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== - -react-copy-to-clipboard@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz#09aae5ec4c62750ccb2e6421a58725eabc41255c" - integrity sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A== - dependencies: - copy-to-clipboard "^3.3.1" - prop-types "^15.8.1" - -react-dom@19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" - integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== - dependencies: - scheduler "^0.25.0" - -react-draggable@^4.0.3, react-draggable@^4.4.5: - version "4.4.6" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.6.tgz#63343ee945770881ca1256a5b6fa5c9f5983fe1e" - integrity sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw== - dependencies: - clsx "^1.1.1" - prop-types "^15.8.1" - -react-dropzone@14.3.8: - version "14.3.8" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.8.tgz#a7eab118f8a452fe3f8b162d64454e81ba830582" - integrity sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== - dependencies: - attr-accept "^2.2.4" - file-selector "^2.1.0" - prop-types "^15.8.1" - -react-error-boundary@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-5.0.0.tgz#6b6c7e075c922afb0283147e5b084efa44e68570" - integrity sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ== - dependencies: - "@babel/runtime" "^7.12.5" - -react-fast-compare@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" - integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== - -react-grid-layout@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-1.5.1.tgz#800899fb17aa568e5f32574d07c12579f3d76fb2" - integrity sha512-4Fr+kKMk0+m1HL/BWfHxi/lRuaOmDNNKQDcu7m12+NEYcen20wIuZFo789u3qWCyvUsNUxCiyf0eKq4WiJSNYw== - dependencies: - clsx "^2.0.0" - fast-equals "^4.0.3" - prop-types "^15.8.1" - react-draggable "^4.4.5" - react-resizable "^3.0.5" - resize-observer-polyfill "^1.5.1" - -react-hook-form@^7.53.0: - version "7.54.2" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" - integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== - -react-hot-toast@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.5.2.tgz#b55328966a26add56513e2dc1682e2cb4753c244" - integrity sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw== - dependencies: - csstype "^3.1.3" - goober "^2.1.16" - -react-html-parser@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/react-html-parser/-/react-html-parser-2.0.2.tgz#6dbe1ddd2cebc1b34ca15215158021db5fc5685e" - integrity sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g== - dependencies: - htmlparser2 "^3.9.0" - -react-i18next@15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-15.4.1.tgz#33f3e89c2f6c68e2bfcbf9aa59986ad42fe78758" - integrity sha512-ahGab+IaSgZmNPYXdV1n+OYky95TGpFwnKRflX/16dY04DsYYKHtVLjeny7sBSCREEcoMbAgSkFiGLF5g5Oofw== - dependencies: - "@babel/runtime" "^7.25.0" - html-parse-stringify "^3.0.1" - -react-is@^16.13.1, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-is@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0.tgz#d6669fd389ff022a9684f708cf6fa4962d1fea7a" - integrity sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g== - -react-leaflet-markercluster@^5.0.0-rc.0: - version "5.0.0-rc.0" - resolved "https://registry.yarnpkg.com/react-leaflet-markercluster/-/react-leaflet-markercluster-5.0.0-rc.0.tgz#42b1b9786de565fe69ec95abc6ff3232713f5300" - integrity sha512-jWa4bPD5LfLV3Lid1RWgl+yKUuQtnqeYtJzzLb/fiRjvX+rtwzY8pMoUFuygqyxNrWxMTQlWKBHxkpI7Sxvu4Q== - dependencies: - "@react-leaflet/core" "^3.0.0" - leaflet "^1.9.4" - leaflet.markercluster "^1.5.3" - react-leaflet "^5.0.0" - -react-leaflet@5.0.0, react-leaflet@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-5.0.0.tgz#945d40bad13b69e8606278b19446b00bab57376a" - integrity sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw== - dependencies: - "@react-leaflet/core" "^3.0.0" - -react-markdown@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-10.1.0.tgz#e22bc20faddbc07605c15284255653c0f3bad5ca" - integrity sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.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-media-hook@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/react-media-hook/-/react-media-hook-0.5.0.tgz#f830231f31ea80049f8cbaf8058da90ab71e7150" - integrity sha512-OupDgOSCjUUWPiXq3HMoRwpsQry4cGf4vKzh2E984Xtm4I01ZFbq8JwCG/RPqXB9h0qxgzoYLbABC+LIZH8deQ== - -react-papaparse@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/react-papaparse/-/react-papaparse-4.4.0.tgz#754b18c62240782d9b3b0bbc132b08ed6ec8ca13" - integrity sha512-xTEwHZYJ+1dh9mQDQjjwJXmWyX20DdZ52u+ddw75V+Xm5qsjXSvWmC7c8K82vRwMjKAOH2S9uFyGpHEyEztkUQ== - dependencies: - "@types/papaparse" "^5.3.9" - papaparse "^5.4.1" - -react-quill@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/react-quill/-/react-quill-2.0.0.tgz#67a0100f58f96a246af240c9fa6841b363b3e017" - integrity sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg== - dependencies: - "@types/quill" "^1.3.10" - lodash "^4.17.4" - quill "^1.3.7" - -react-redux@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5" - integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g== - dependencies: - "@types/use-sync-external-store" "^0.0.6" - use-sync-external-store "^1.4.0" - -react-redux@^7.2.0: - version "7.2.9" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" - integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== - dependencies: - "@babel/runtime" "^7.15.4" - "@types/react-redux" "^7.1.20" - hoist-non-react-statics "^3.3.2" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^17.0.2" - -react-resizable@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1" - integrity sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w== - dependencies: - prop-types "15.x" - react-draggable "^4.0.3" - -react-syntax-highlighter@^15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz#fa567cb0a9f96be7bbccf2c13a3c4b5657d9543e" - integrity sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg== - dependencies: - "@babel/runtime" "^7.3.1" - highlight.js "^10.4.1" - highlightjs-vue "^1.0.0" - lowlight "^1.17.0" - prismjs "^1.27.0" - refractor "^3.6.0" - -react-time-ago@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/react-time-ago/-/react-time-ago-7.3.3.tgz#d6344c6397eef5cfed1554545fb9daf5742f16df" - integrity sha512-5kh2Kuu/UhHzcZrGvf3GUrF2d+IXjkIXif5MR2iDWIfSqQuBW27/ejN/tmzJBRyPiryYTgbDIG6AZFJ4RW3yfw== - dependencies: - memoize-one "^6.0.0" - prop-types "^15.8.1" - raf "^3.4.1" - -react-transition-group@^4.4.5: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react-window@^1.8.10: - version "1.8.11" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.11.tgz#a857b48fa85bd77042d59cc460964ff2e0648525" - integrity sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ== - dependencies: - "@babel/runtime" "^7.0.0" - memoize-one ">=3.1.1 <6" - -react@19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" - integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== - -readable-stream@^2.0.2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.0.17, readable-stream@~1.0.27-1: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -redux-devtools-extension@2.13.9: - version "2.13.9" - resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7" - integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A== - -redux-persist@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" - integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== - -redux-thunk@3.1.0, redux-thunk@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" - integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== - -redux@5.0.1, redux@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" - integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== - -redux@^4.0.0, redux@^4.0.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" - integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== - dependencies: - "@babel/runtime" "^7.9.2" - -reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" - integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.7" - get-proto "^1.0.1" - which-builtin-type "^1.2.1" - -refractor@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" - integrity sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== - dependencies: - hastscript "^6.0.0" - parse-entities "^2.0.0" - prismjs "~1.27.0" - -regenerate-unicode-properties@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" - integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.7: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3: - version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" - integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-errors "^1.3.0" - get-proto "^1.0.1" - gopd "^1.2.0" - set-function-name "^2.0.2" - -regexpu-core@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" - integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.0" - regjsgen "^0.8.0" - regjsparser "^0.12.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsgen@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" - integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== - -regjsparser@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" - integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== - dependencies: - jsesc "~3.0.2" - -relative-time-format@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/relative-time-format/-/relative-time-format-1.1.6.tgz#724a5fbc3794b8e0471b6b61419af2ce699eb9f1" - integrity sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ== - -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-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" - -remove-accents@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" - integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -reselect@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" - integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== - -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.4: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.5: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restructure@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/restructure/-/restructure-3.0.2.tgz#e6b2fad214f78edee21797fa8160fef50eb9b49a" - integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw== - -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -rgbcolor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" - integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw== - -rope-sequence@^1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" - integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== - -rspack-resolver@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rspack-resolver/-/rspack-resolver-1.2.2.tgz#f4f8f740246c59bc83525f830aca628b71843e8a" - integrity sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw== - optionalDependencies: - "@unrs/rspack-resolver-binding-darwin-arm64" "1.2.2" - "@unrs/rspack-resolver-binding-darwin-x64" "1.2.2" - "@unrs/rspack-resolver-binding-freebsd-x64" "1.2.2" - "@unrs/rspack-resolver-binding-linux-arm-gnueabihf" "1.2.2" - "@unrs/rspack-resolver-binding-linux-arm64-gnu" "1.2.2" - "@unrs/rspack-resolver-binding-linux-arm64-musl" "1.2.2" - "@unrs/rspack-resolver-binding-linux-x64-gnu" "1.2.2" - "@unrs/rspack-resolver-binding-linux-x64-musl" "1.2.2" - "@unrs/rspack-resolver-binding-wasm32-wasi" "1.2.2" - "@unrs/rspack-resolver-binding-win32-arm64-msvc" "1.2.2" - "@unrs/rspack-resolver-binding-win32-x64-msvc" "1.2.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-array-concat@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" - integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - has-symbols "^1.1.0" - isarray "^2.0.5" - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-push-apply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" - integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - dependencies: - es-errors "^1.3.0" - isarray "^2.0.5" - -safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - -scheduler@0.25.0-rc-603e6108-20241029: - version "0.25.0-rc-603e6108-20241029" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-603e6108-20241029.tgz#684dd96647e104d23e0d29a37f18937daf82df19" - integrity sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA== - -scheduler@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" - integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.6.0, semver@^7.6.3: - version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== - -set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -set-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" - integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - dependencies: - dunder-proto "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - -sharp@^0.33.5: - version "0.33.5" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e" - integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== - dependencies: - color "^4.2.3" - detect-libc "^2.0.3" - semver "^7.6.3" - optionalDependencies: - "@img/sharp-darwin-arm64" "0.33.5" - "@img/sharp-darwin-x64" "0.33.5" - "@img/sharp-libvips-darwin-arm64" "1.0.4" - "@img/sharp-libvips-darwin-x64" "1.0.4" - "@img/sharp-libvips-linux-arm" "1.0.5" - "@img/sharp-libvips-linux-arm64" "1.0.4" - "@img/sharp-libvips-linux-s390x" "1.0.4" - "@img/sharp-libvips-linux-x64" "1.0.4" - "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" - "@img/sharp-libvips-linuxmusl-x64" "1.0.4" - "@img/sharp-linux-arm" "0.33.5" - "@img/sharp-linux-arm64" "0.33.5" - "@img/sharp-linux-s390x" "0.33.5" - "@img/sharp-linux-x64" "0.33.5" - "@img/sharp-linuxmusl-arm64" "0.33.5" - "@img/sharp-linuxmusl-x64" "0.33.5" - "@img/sharp-wasm32" "0.33.5" - "@img/sharp-win32-ia32" "0.33.5" - "@img/sharp-win32-x64" "0.33.5" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -simplebar-core@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/simplebar-core/-/simplebar-core-1.3.0.tgz#166cfbb4c1a2dc0a60833fe8e1fd590cdb32158b" - integrity sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA== - dependencies: - lodash "^4.17.21" - -simplebar-react@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-3.3.0.tgz#7170f29f0ea785c6881db81a8447c408fbc9056e" - integrity sha512-sxzy+xRuU41He4tT4QLGYutchtOuye/xxVeq7xhyOiwMiHNK1ZpvbOTyy+7P0i7gfpXLGTJ8Bep8+4Mhdgtz/g== - dependencies: - simplebar-core "^1.3.0" - -simplebar@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-6.3.0.tgz#5581558e532d9ecf6e42faef932d81537f94d3ca" - integrity sha512-SQJfKSvUPJxlOhYCpswEn5ke5WQGsgDZNmpScWL+MKXgYpCDTq1bGiv6uWXwSHMYTkMco32fDUL35sVwCMmzCw== - dependencies: - simplebar-core "^1.3.0" - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stable-hash@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" - integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== - -stackblur-canvas@^2.0.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6" - integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ== - -state-local@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" - integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -string.prototype.includes@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" - integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - -string.prototype.matchall@^4.0.12: - version "4.0.12" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" - integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-abstract "^1.23.6" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.6" - gopd "^1.2.0" - has-symbols "^1.1.0" - internal-slot "^1.1.0" - regexp.prototype.flags "^1.5.3" - set-function-name "^2.0.2" - side-channel "^1.1.0" - -string.prototype.repeat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" - integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trim@^1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" - integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-object-atoms "^1.0.0" - has-property-descriptors "^1.0.2" - -string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" - integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -style-to-js@^1.0.0: - version "1.1.16" - resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.16.tgz#e6bd6cd29e250bcf8fa5e6591d07ced7575dbe7a" - integrity sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw== - dependencies: - style-to-object "1.0.8" - -style-to-object@1.0.8: - 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" - -styled-jsx@5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" - integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== - dependencies: - client-only "0.0.1" - -stylis-plugin-rtl@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/stylis-plugin-rtl/-/stylis-plugin-rtl-2.1.1.tgz#16707809c878494835f77e5d4aadaae3db639b5e" - integrity sha512-q6xIkri6fBufIO/sV55md2CbgS5c6gg9EhSVATtHHCdOnbN/jcI0u3lYhNVeuI65c4lQPo67g8xmq5jrREvzlg== - dependencies: - cssjanus "^2.0.1" - -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-arc-to-cubic-bezier@^3.0.0, svg-arc-to-cubic-bezier@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6" - integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g== - -svg-parser@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svg-pathdata@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac" - integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw== - -svgo@^3.0.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" - integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - -text-segmentation@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" - integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== - dependencies: - utrie "^1.0.2" - -through2@~0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" - integrity sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ== - dependencies: - readable-stream "~1.0.17" - xtend "~2.1.1" - -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tiny-case@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" - integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== - -tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" - integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== - -tiny-invariant@^1.0.6: - version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - -tiny-warning@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tinyglobby@^0.2.12: - version "0.2.12" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" - integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== - dependencies: - fdir "^6.4.3" - picomatch "^4.0.2" - -tippy.js@^6.3.7: - version "6.3.7" - resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" - integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== - dependencies: - "@popperjs/core" "^2.9.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== - -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - -ts-api-utils@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" - integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tss-react@^4.8.3: - version "4.9.15" - resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-4.9.15.tgz#a26fc24889a462ab4858094bc5b33cdda36e45ab" - integrity sha512-rLiEmDwUtln9RKTUR/ZPYBrufF0Tq/PFggO1M7P8M3/FAcodPQ746Ug9MCEFkURKDlntN17+Oja0DMMz5yBnsQ== - dependencies: - "@emotion/cache" "*" - "@emotion/serialize" "*" - "@emotion/utils" "*" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-fest@^3.12.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - -typed-array-byte-length@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" - integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - dependencies: - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.14" - -typed-array-byte-offset@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" - integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.15" - reflect.getprototypeof "^1.0.9" - -typed-array-length@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" - integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - reflect.getprototypeof "^1.0.6" - -typescript@5.8.2: - version "5.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" - integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== - -uc.micro@^2.0.0, uc.micro@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" - integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== - -unbox-primitive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" - integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== - dependencies: - call-bound "^1.0.3" - has-bigints "^1.0.2" - has-symbols "^1.1.0" - which-boxed-primitive "^1.1.1" - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" - integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" - integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== - -unicode-properties@^1.4.0, unicode-properties@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" - integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== - dependencies: - base64-js "^1.3.0" - unicode-trie "^2.0.0" - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unicode-trie@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" - integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== - dependencies: - pako "^0.2.5" - tiny-inflate "^1.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" - -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@^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-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@^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@^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" - -update-browserslist-db@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -use-memo-one@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" - integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== - -use-sync-external-store@^1, use-sync-external-store@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" - integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utrie@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" - integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== - dependencies: - base64-arraybuffer "^1.0.2" - -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@^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-compatible-readable-stream@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz#27267aebbdc9893c0ddf65a421279cbb1e31d8cd" - integrity sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -w3c-keyname@^2.2.0: - version "2.2.8" - resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" - integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== - -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" - integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.1" - is-number-object "^1.1.1" - is-string "^1.1.1" - is-symbol "^1.1.1" - -which-builtin-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" - integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - dependencies: - call-bound "^1.0.2" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.1.0" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.2.1" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.1.0" - which-collection "^1.0.2" - which-typed-array "^1.1.16" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-typed-array@^1.1.16, which-typed-array@^1.1.18: - version "1.1.19" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" - integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== - dependencies: - object-keys "~0.4.0" - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yoga-layout@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/yoga-layout/-/yoga-layout-3.2.1.tgz#d2d1ba06f0e81c2eb650c3e5ad8b0b4adde1e843" - integrity sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ== - -yup@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/yup/-/yup-1.6.1.tgz#8defcff9daaf9feac178029c0e13b616563ada4b" - integrity sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA== - dependencies: - property-expr "^2.0.5" - tiny-case "^1.0.3" - toposort "^2.0.2" - type-fest "^2.19.0" - -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 60be81c51fe2ec4569f3a5368edafeeb28979fbc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 22:50:56 -0400 Subject: [PATCH 0509/1184] report filters --- src/pages/tenant/standards/compare/index.js | 130 +++++++++++++++++--- 1 file changed, 114 insertions(+), 16 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 51aa7d630902..e48d4be51d71 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -2,7 +2,6 @@ import { useState, useEffect } from "react"; import { Button, Card, - CardContent, Stack, Typography, Box, @@ -12,22 +11,22 @@ import { Alert, IconButton, Tooltip, + ButtonGroup, + TextField, + InputAdornment, } from "@mui/material"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { - PlayArrow, CheckCircle, Cancel, Info, - Public, Microsoft, - Description, Sync, + FilterAlt, + Close, } from "@mui/icons-material"; import { ArrowLeftIcon } from "@mui/x-date-pickers"; -import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import standards from "/src/data/standards.json"; -import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; import { CippApiDialog } from "../../../../components/CippComponents/CippApiDialog"; import { SvgIcon } from "@mui/material"; import { useForm } from "react-hook-form"; @@ -37,7 +36,10 @@ import { useRouter } from "next/router"; import { useDialog } from "../../../../hooks/use-dialog"; import { Grid } from "@mui/system"; import DOMPurify from "dompurify"; -import { ClockIcon } from "@heroicons/react/24/outline"; +import { + ClockIcon, + MagnifyingGlassIcon, +} from "@heroicons/react/24/outline"; const Page = () => { const router = useRouter(); @@ -52,6 +54,8 @@ const Page = () => { }, }); const runReportDialog = useDialog(); + const [filter, setFilter] = useState("all"); + const [searchQuery, setSearchQuery] = useState(""); const templateDetails = ApiGetCall({ url: `/api/listStandardTemplates`, @@ -238,6 +242,20 @@ const Page = () => { ]); const comparisonModeOptions = [{ label: "Compare Tenant to Standard", value: "standard" }]; + const filteredData = comparisonData?.filter((standard) => { + const matchesFilter = + filter === "all" || + (filter === "compliant" && standard.complianceStatus === "Compliant") || + (filter === "nonCompliant" && standard.complianceStatus === "Non-Compliant"); + + const matchesSearch = + !searchQuery || + standard.standardName.toLowerCase().includes(searchQuery.toLowerCase()) || + standard.standardDescription.toLowerCase().includes(searchQuery.toLowerCase()); + + return matchesFilter && matchesSearch; + }); + return ( @@ -308,6 +326,72 @@ const Page = () => { }} /> )} + + + + + + + setSearchQuery(e.target.value)} + InputProps={{ + endAdornment: searchQuery && ( + + setSearchQuery("")} + aria-label="Clear search" + > + + + + ), + }} + /> + + + + + + + + {comparisonApi.isFetching && ( <> @@ -320,7 +404,7 @@ const Page = () => { alignItems="center" sx={{ mb: 2, px: 1 }} > - + @@ -328,7 +412,7 @@ const Page = () => {
    - + { alignItems="center" sx={{ p: 3 }} > - + @@ -353,7 +441,7 @@ const Page = () => { - + { )} - {comparisonData && - comparisonData.length > 0 && - comparisonData.map((standard, index) => ( + {filteredData && filteredData.length === 0 && ( + + + No standards match the selected filter criteria or search query. + + + Try selecting a different filter or modifying the search query. + + + )} + {filteredData && + filteredData.length > 0 && + filteredData.map((standard, index) => ( - + { - + Date: Thu, 27 Mar 2025 22:56:28 -0400 Subject: [PATCH 0510/1184] Revert "Delete yarn.lock" This reverts commit 87b52aa2806bd27b1c1e027ac0bfc6bb54d9eb7c. --- yarn.lock | 7235 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 7235 insertions(+) create mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000000..16f8f6ee4de9 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7235 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== + +"@babel/core@^7.21.3": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" + integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.10" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.10", "@babel/generator@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" + integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== + dependencies: + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@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" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" + integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.25.9", "@babel/helper-create-class-features-plugin@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz#518fad6a307c6a96f44af14912b2c20abe9bfc30" + integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.27.0" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz#0e41f7d38c2ebe06ebd9cf0e02fb26019c77cd95" + integrity sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab" + integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-replace-supers@^7.25.9", "@babel/helper-replace-supers@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" + integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.26.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helpers@^7.26.10": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" + integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== + dependencies: + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" + +"@babel/parser@^7.26.10", "@babel/parser@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" + integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== + dependencies: + "@babel/types" "^7.27.0" + +"@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" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-async-generator-functions@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" + integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.26.8" + +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" + integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz#acc2c0d98a7439bbde4244588ddbd4904701d47f" + integrity sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" + +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-exponentiation-operator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-for-of@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56" + integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-commonjs@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== + dependencies: + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": + version "7.26.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" + integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-constant-elements@^7.21.3": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz#08a1de35a301929b60fdf2788a54b46cd8ecd0ef" + integrity sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.25.9" + +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz#822feebef43d6a59a81f696b2512df5b1682db31" + integrity sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" + integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-typeof-symbol@^7.26.7": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz#044a0890f3ca694207c7826d0c7a65e5ac008aae" + integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-typescript@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz#a29fd3481da85601c7e34091296e9746d2cccba8" + integrity sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.0" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" + +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@^7.20.2": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" + integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.26.8" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.26.5" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.26.3" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.26.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.26.8" + "@babel/plugin-transform-typeof-symbol" "^7.26.7" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.11.0" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.40.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.18.6": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" + +"@babel/preset-typescript@^7.21.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz#4dcb8827225975f4290961b0b089f9c694ca50c7" + integrity sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-typescript" "^7.27.0" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.25.0", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.26.10", "@babel/runtime@^7.26.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" + integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" + integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" + integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.27.0" + "@babel/parser" "^7.27.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.4.4": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" + integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@emnapi/core@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16" + integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog== + dependencies: + "@emnapi/wasi-threads" "1.0.1" + tslib "^2.4.0" + +"@emnapi/runtime@^1.2.0", "@emnapi/runtime@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" + integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" + integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw== + dependencies: + tslib "^2.4.0" + +"@emotion/babel-plugin@^11.13.5": + version "11.13.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/serialize" "^1.3.3" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@*", "@emotion/cache@11.14.0", "@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== + dependencies: + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + stylis "4.2.0" + +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + +"@emotion/is-prop-valid@^1.3.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240" + integrity sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw== + dependencies: + "@emotion/memoize" "^0.9.0" + +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== + +"@emotion/react@11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@*", "@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== + dependencies: + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" + csstype "^3.0.2" + +"@emotion/server@11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/server/-/server-11.11.0.tgz#35537176a2a5ed8aed7801f254828e636ec3bd6e" + integrity sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA== + dependencies: + "@emotion/utils" "^1.2.1" + html-tokenize "^2.0.0" + multipipe "^1.0.2" + through "^2.3.8" + +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== + +"@emotion/styled@11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.0.tgz#f47ca7219b1a295186d7661583376fcea95f0ff3" + integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/is-prop-valid" "^1.3.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== + +"@emotion/use-insertion-effect-with-fallbacks@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== + +"@emotion/utils@*", "@emotion/utils@^1.2.1", "@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== + +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#b0fc7e06d0c94f801537fd4237edc2706d3b8e4c" + integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.19.2": + version "0.19.2" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.2.tgz#3060b809e111abfc97adb0bb1172778b90cb46aa" + integrity sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w== + dependencies: + "@eslint/object-schema" "^2.1.6" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.1.0.tgz#62f1b7821e9d9ced1b3f512c7ea731825765d1cc" + integrity sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA== + +"@eslint/core@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.12.0.tgz#5f960c3d57728be9f6c65bd84aa6aa613078798e" + integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.22.0": + version "9.22.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.22.0.tgz#4ff53649ded7cbce90b444b494c234137fa1aa3d" + integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ== + +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== + +"@eslint/plugin-kit@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz#9901d52c136fb8f375906a73dcc382646c3b6a27" + integrity sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g== + dependencies: + "@eslint/core" "^0.12.0" + levn "^0.4.1" + +"@floating-ui/core@^1.6.0": + version "1.6.9" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.9.tgz#64d1da251433019dafa091de9b2886ff35ec14e6" + integrity sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw== + dependencies: + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/dom@^1.0.0": + version "1.6.13" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34" + integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/react-dom@^2.1.1": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" + integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== + +"@heroicons/react@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.2.0.tgz#0c05124af50434a800773abec8d3af6a297d904b" + integrity sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ== + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" + integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== + +"@img/sharp-darwin-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08" + integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.0.4" + +"@img/sharp-darwin-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61" + integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.0.4" + +"@img/sharp-libvips-darwin-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f" + integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== + +"@img/sharp-libvips-darwin-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062" + integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== + +"@img/sharp-libvips-linux-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704" + integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== + +"@img/sharp-libvips-linux-arm@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197" + integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== + +"@img/sharp-libvips-linux-s390x@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce" + integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== + +"@img/sharp-libvips-linux-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0" + integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== + +"@img/sharp-libvips-linuxmusl-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5" + integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== + +"@img/sharp-libvips-linuxmusl-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff" + integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== + +"@img/sharp-linux-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22" + integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.0.4" + +"@img/sharp-linux-arm@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff" + integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.0.5" + +"@img/sharp-linux-s390x@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667" + integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.0.4" + +"@img/sharp-linux-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb" + integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.0.4" + +"@img/sharp-linuxmusl-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b" + integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + +"@img/sharp-linuxmusl-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48" + integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + +"@img/sharp-wasm32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1" + integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== + dependencies: + "@emnapi/runtime" "^1.2.0" + +"@img/sharp-win32-ia32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9" + integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== + +"@img/sharp-win32-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342" + integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@monaco-editor/loader@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.5.0.tgz#dcdbc7fe7e905690fb449bed1c251769f325c55d" + integrity sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw== + dependencies: + state-local "^1.0.6" + +"@monaco-editor/react@^4.6.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.7.0.tgz#35a1ec01bfe729f38bfc025df7b7bac145602a60" + integrity sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA== + dependencies: + "@monaco-editor/loader" "^1.5.0" + +"@mui/base@5.0.0-beta.69": + version "5.0.0-beta.69" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.69.tgz#fc3635818c6a9fb954b1ee00870109e7e266149d" + integrity sha512-r2YyGUXpZxj8rLAlbjp1x2BnMERTZ/dMqd9cClKj2OJ7ALAuiv/9X5E9eHfRc9o/dGRuLSMq/WTjREktJVjxVA== + dependencies: + "@babel/runtime" "^7.26.0" + "@floating-ui/react-dom" "^2.1.1" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.1" + "@popperjs/core" "^2.11.8" + clsx "^2.1.1" + prop-types "^15.8.1" + +"@mui/core-downloads-tracker@^6.4.7": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.8.tgz#ffabbdce0e7b341e9c2906bb06a00b34c9d15e05" + integrity sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw== + +"@mui/icons-material@6.4.7": + version "6.4.7" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-6.4.7.tgz#078406b61c7d17230b8633643dbb458f89e02059" + integrity sha512-Rk8cs9ufQoLBw582Rdqq7fnSXXZTqhYRbpe1Y5SAz9lJKZP3CIdrj0PfG8HJLGw1hrsHFN/rkkm70IDzhJsG1g== + dependencies: + "@babel/runtime" "^7.26.0" + +"@mui/lab@6.0.0-beta.30": + version "6.0.0-beta.30" + resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-6.0.0-beta.30.tgz#650973b4d04965f18b3d3390e2dd90e772a4f461" + integrity sha512-ayDYkzTlkm5cnDGa10bvuFygX+2b9Hm1T4QZYMqV8+nSx3frKE0TLAbE7/qQ4vInOO5E4aOkHVBwZjyO+UbMTA== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/base" "5.0.0-beta.69" + "@mui/system" "^6.4.7" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.6" + clsx "^2.1.1" + prop-types "^15.8.1" + +"@mui/material@6.4.7": + version "6.4.7" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.4.7.tgz#887f1efe4a1c244ef7aeebb7d95a6f061f50b89b" + integrity sha512-K65StXUeGAtFJ4ikvHKtmDCO5Ab7g0FZUu2J5VpoKD+O6Y3CjLYzRi+TMlI3kaL4CL158+FccMoOd/eaddmeRQ== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/core-downloads-tracker" "^6.4.7" + "@mui/system" "^6.4.7" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.6" + "@popperjs/core" "^2.11.8" + "@types/react-transition-group" "^4.4.12" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + react-is "^19.0.0" + react-transition-group "^4.4.5" + +"@mui/private-theming@^6.4.6", "@mui/private-theming@^6.4.8": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.8.tgz#210d1a1ab4501f6cf31f1abdf1b0a37fbdfc2991" + integrity sha512-sWwQoNSn6elsPTAtSqCf+w5aaGoh7AASURNmpy+QTTD/zwJ0Jgwt0ZaaP6mXq2IcgHxYnYloM/+vJgHPMkRKTQ== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/utils" "^6.4.8" + prop-types "^15.8.1" + +"@mui/styled-engine@^6.4.6", "@mui/styled-engine@^6.4.8": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.4.8.tgz#a454115ab349cf729510c107f2564fd1e23c385a" + integrity sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw== + dependencies: + "@babel/runtime" "^7.26.0" + "@emotion/cache" "^11.13.5" + "@emotion/serialize" "^1.3.3" + "@emotion/sheet" "^1.4.0" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/system@6.4.7": + version "6.4.7" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.7.tgz#a4a8e541a2f1efef1c85a338723aa2f2d0a31e8e" + integrity sha512-7wwc4++Ak6tGIooEVA9AY7FhH2p9fvBMORT4vNLMAysH3Yus/9B9RYMbrn3ANgsOyvT3Z7nE+SP8/+3FimQmcg== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/private-theming" "^6.4.6" + "@mui/styled-engine" "^6.4.6" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.6" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/system@^6.4.7": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.8.tgz#e4ecb65677c2268959effad1f4f885d9b836c09b" + integrity sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/private-theming" "^6.4.8" + "@mui/styled-engine" "^6.4.8" + "@mui/types" "~7.2.24" + "@mui/utils" "^6.4.8" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/types@^7.2.21", "@mui/types@~7.2.24": + version "7.2.24" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" + integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== + +"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.4.1", "@mui/utils@^6.4.6", "@mui/utils@^6.4.8": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.8.tgz#f80ee0c0ac47f1cd47c2031a5fb87243322b6bf3" + integrity sha512-C86gfiZ5BfZ51KqzqoHi1WuuM2QdSKoFhbkZeAfQRB+jCc4YNhhj11UXFVMMsqBgZ+Zy8IHNJW3M9Wj/LOwRXQ== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/types" "~7.2.24" + "@types/prop-types" "^15.7.14" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.0.0" + +"@mui/x-date-pickers@7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.27.3.tgz#61171daf74802c17f9d861068eab422231389502" + integrity sha512-igfKTPC4ZVCmS5j/NXcXBtj/hHseQHzRpCpIB1PMnJGhMdRYXnz8qZz5XhlNBKlzJVXkGu6Uil+obZpCLNj1xg== + dependencies: + "@babel/runtime" "^7.25.7" + "@mui/utils" "^5.16.6 || ^6.0.0" + "@mui/x-internals" "7.26.0" + "@types/react-transition-group" "^4.4.11" + clsx "^2.1.1" + prop-types "^15.8.1" + react-transition-group "^4.4.5" + +"@mui/x-internals@7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-7.26.0.tgz#e8c3060582c102127ab55b0a93e881930dac107b" + integrity sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg== + dependencies: + "@babel/runtime" "^7.25.7" + "@mui/utils" "^5.16.6 || ^6.0.0" + +"@musement/iso-duration@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@musement/iso-duration/-/iso-duration-1.0.0.tgz#b45ba8acb0b998488744e41da15a391e5f550c48" + integrity sha512-gTJOmIXfsh5AyOdsUwkYcAIdWd9fCa/e0dV7mfV/B+oDOoJne5ciNMazDdQacylbWTQpF5aMdp2xrHVEwiryfg== + +"@napi-rs/wasm-runtime@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz#288f03812a408bc53c2c3686c65f38fe90f295eb" + integrity sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw== + dependencies: + "@emnapi/core" "^1.3.1" + "@emnapi/runtime" "^1.3.1" + "@tybys/wasm-util" "^0.9.0" + +"@next/env@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-15.2.4.tgz#060f8d8ddb02be5c825eab4ccd9ab619001efffb" + integrity sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g== + +"@next/eslint-plugin-next@15.2.2": + version "15.2.2" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.2.tgz#55fa96486f9e163ca689d441d31f4431ef423aef" + integrity sha512-1+BzokFuFQIfLaRxUKf2u5In4xhPV7tUgKcK53ywvFl6+LXHWHpFkcV7VNeKlyQKUotwiq4fy/aDNF9EiUp4RQ== + dependencies: + fast-glob "3.3.1" + +"@next/swc-darwin-arm64@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz#3a54f67aa2e0096a9147bd24dff1492e151819ae" + integrity sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw== + +"@next/swc-darwin-x64@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz#9b540f24afde1b7878623fdba9695344d26b7d67" + integrity sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew== + +"@next/swc-linux-arm64-gnu@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz#417a234c9f4dc5495094a8979859ac528c0f1f58" + integrity sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ== + +"@next/swc-linux-arm64-musl@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz#9bca76375508a175956f2d51f8547d0d6f9ffa64" + integrity sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA== + +"@next/swc-linux-x64-gnu@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz#c3d5041d53a5b228bf521ed49649e0f2a7aff947" + integrity sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw== + +"@next/swc-linux-x64-musl@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz#b2a51a108b1c412c69a504556cde0517631768c7" + integrity sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw== + +"@next/swc-win32-arm64-msvc@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz#7d687b42512abd36f44c2c787d58a1590f174b69" + integrity sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg== + +"@next/swc-win32-x64-msvc@15.2.4": + version "15.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz#779a0ea272fa4f509387f3b320e2d70803943a95" + integrity sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + +"@popperjs/core@^2.11.8", "@popperjs/core@^2.9.0": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@react-leaflet/core@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-3.0.0.tgz#34ccc280ce7d8ac5c09f2b3d5fffded450bdf1a2" + integrity sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ== + +"@react-pdf/fns@3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-pdf/fns/-/fns-3.1.2.tgz#9ce7351d9fdf1cdb6e9c6ffd6801bc65f29f991c" + integrity sha512-qTKGUf0iAMGg2+OsUcp9ffKnKi41RukM/zYIWMDJ4hRVYSr89Q7e3wSDW/Koqx3ea3Uy/z3h2y3wPX6Bdfxk6g== + +"@react-pdf/font@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-4.0.2.tgz#58ede51937bb57025dcf221b107e248d0ea9d60b" + integrity sha512-/dAWu7Y2RD1RxarDZ9SkYPHgBYOhmcDnet4W/qN/m8k+A2Hr3ja54GymSR7GGxWBtxjKtNauVKrTa9LS1n8WUw== + dependencies: + "@react-pdf/pdfkit" "^4.0.3" + "@react-pdf/types" "^2.9.0" + fontkit "^2.0.2" + is-url "^1.2.4" + +"@react-pdf/image@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@react-pdf/image/-/image-3.0.3.tgz#bfdb9e782c361c9d9e0f81c31ef98554bc4e928c" + integrity sha512-lvP5ryzYM3wpbO9bvqLZYwEr5XBDX9jcaRICvtnoRqdJOo7PRrMnmB4MMScyb+Xw10mGeIubZAAomNAG5ONQZQ== + dependencies: + "@react-pdf/png-js" "^3.0.0" + jay-peg "^1.1.1" + +"@react-pdf/layout@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-4.4.0.tgz#26ddf73951ab0ce923689730d3b8eaf0b0db4841" + integrity sha512-Aq+Cc6JYausWLoks2FvHe3PwK9cTuvksB2uJ0AnkKJEUtQbvCq8eCRb1bjbbwIji9OzFRTTzZij7LzkpKHjIeA== + dependencies: + "@react-pdf/fns" "3.1.2" + "@react-pdf/image" "^3.0.3" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/stylesheet" "^6.1.0" + "@react-pdf/textkit" "^6.0.0" + "@react-pdf/types" "^2.9.0" + emoji-regex "^10.3.0" + queue "^6.0.1" + yoga-layout "^3.2.1" + +"@react-pdf/pdfkit@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-4.0.3.tgz#8b8a0e7e2aadbbada738a1c164f06ffff2947c8b" + integrity sha512-k+Lsuq8vTwWsCqTp+CCB4+2N+sOTFrzwGA7aw3H9ix/PDWR9QksbmNg0YkzGbLAPI6CeawmiLHcf4trZ5ecLPQ== + dependencies: + "@babel/runtime" "^7.20.13" + "@react-pdf/png-js" "^3.0.0" + browserify-zlib "^0.2.0" + crypto-js "^4.2.0" + fontkit "^2.0.2" + jay-peg "^1.1.1" + linebreak "^1.1.0" + vite-compatible-readable-stream "^3.6.1" + +"@react-pdf/png-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-3.0.0.tgz#c0b7dc7c77e36f0830e9b7bccca7ddd64ada1c5e" + integrity sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA== + dependencies: + browserify-zlib "^0.2.0" + +"@react-pdf/primitives@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-4.1.1.tgz#c7bfb7e83173661b6ec50ada4aba8dc9e94d0563" + integrity sha512-IuhxYls1luJb7NUWy6q5avb1XrNaVj9bTNI40U9qGRuS6n7Hje/8H8Qi99Z9UKFV74bBP3DOf3L1wV2qZVgVrQ== + +"@react-pdf/reconciler@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@react-pdf/reconciler/-/reconciler-1.1.4.tgz#62395cf5c8786a1c3465e2cf6315562543b663c5" + integrity sha512-oTQDiR/t4Z/Guxac88IavpU2UgN7eR0RMI9DRKvKnvPz2DUasGjXfChAdMqDNmJJxxV26mMy9xQOUV2UU5/okg== + dependencies: + object-assign "^4.1.1" + scheduler "0.25.0-rc-603e6108-20241029" + +"@react-pdf/render@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-4.3.0.tgz#454542e87db70a3319323f8fbc5d1003db4e8c1e" + integrity sha512-MdWfWaqO6d7SZD75TZ2z5L35V+cHpyA43YNRlJNG0RJ7/MeVGDQv12y/BXOJgonZKkeEGdzM3EpAt9/g4E22WA== + dependencies: + "@babel/runtime" "^7.20.13" + "@react-pdf/fns" "3.1.2" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/textkit" "^6.0.0" + "@react-pdf/types" "^2.9.0" + abs-svg-path "^0.1.1" + color-string "^1.9.1" + normalize-svg-path "^1.1.0" + parse-svg-path "^0.1.2" + svg-arc-to-cubic-bezier "^3.2.0" + +"@react-pdf/renderer@4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@react-pdf/renderer/-/renderer-4.3.0.tgz#21a41e0cf0db703e3cc54f6eb7d6cd78b460de06" + integrity sha512-28gpA69fU9ZQrDzmd5xMJa1bDf8t0PT3ApUKBl2PUpoE/x4JlvCB5X66nMXrfFrgF2EZrA72zWQAkvbg7TE8zw== + dependencies: + "@babel/runtime" "^7.20.13" + "@react-pdf/fns" "3.1.2" + "@react-pdf/font" "^4.0.2" + "@react-pdf/layout" "^4.4.0" + "@react-pdf/pdfkit" "^4.0.3" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/reconciler" "^1.1.4" + "@react-pdf/render" "^4.3.0" + "@react-pdf/types" "^2.9.0" + events "^3.3.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + queue "^6.0.1" + +"@react-pdf/stylesheet@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-6.1.0.tgz#ca6b5b0f7cc749b36379379d943f648f8527d71a" + integrity sha512-BGZ2sYNUp38VJUegjva/jsri3iiRGnVNjWI+G9dTwAvLNOmwFvSJzqaCsEnqQ/DW5mrTBk/577FhDY7pv6AidA== + dependencies: + "@react-pdf/fns" "3.1.2" + "@react-pdf/types" "^2.9.0" + color-string "^1.9.1" + hsl-to-hex "^1.0.0" + media-engine "^1.0.3" + postcss-value-parser "^4.1.0" + +"@react-pdf/textkit@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@react-pdf/textkit/-/textkit-6.0.0.tgz#87cd29aba8b0d81133dbbd61c52d8647fdf11616" + integrity sha512-fDt19KWaJRK/n2AaFoVm31hgGmpygmTV7LsHGJNGZkgzXcFyLsx+XUl63DTDPH3iqxj3xUX128t104GtOz8tTw== + dependencies: + "@react-pdf/fns" "3.1.2" + bidi-js "^1.0.2" + hyphen "^1.6.4" + unicode-properties "^1.4.1" + +"@react-pdf/types@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@react-pdf/types/-/types-2.9.0.tgz#a2721a847cb1ace2c31ca29b0303c7b51a2241c2" + integrity sha512-ckj80vZLlvl9oYrQ4tovEaqKWP3O06Eb1D48/jQWbdwz1Yh7Y9v1cEmwlP8ET+a1Whp8xfdM0xduMexkuPANCQ== + dependencies: + "@react-pdf/font" "^4.0.2" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/stylesheet" "^6.1.0" + +"@reduxjs/toolkit@2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.6.1.tgz#532ef3d3f1656461b421f0ba0a4fa1628163a0c5" + integrity sha512-SSlIqZNYhqm/oMkXbtofwZSt9lrncblzo6YcZ9zoX+zLngRBrCOjK4lNLdkNucJF58RHOWrD9txT3bT3piH7Zw== + dependencies: + immer "^10.0.3" + redux "^5.0.1" + redux-thunk "^3.1.0" + reselect "^5.1.0" + +"@remirror/core-constants@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-3.0.0.tgz#96fdb89d25c62e7b6a5d08caf0ce5114370e3b8f" + integrity sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@rushstack/eslint-patch@^1.10.3": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz#75dce8e972f90bba488e2b0cc677fb233aa357ab" + integrity sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ== + +"@sinonjs/text-encoding@^0.7.2": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz#282046f03e886e352b2d5f5da5eb755e01457f3f" + integrity sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA== + +"@svgdotjs/svg.draggable.js@^3.0.4": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz#bca1065ec27b1dbae5a92a0558777ed964a395cb" + integrity sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA== + +"@svgdotjs/svg.filter.js@^3.0.8": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz#758e336b79e73a6797358d655b60842131a9a52b" + integrity sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw== + dependencies: + "@svgdotjs/svg.js" "^3.2.4" + +"@svgdotjs/svg.js@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz#4716be92a64c66b29921b63f7235fcfb953fb13a" + integrity sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg== + +"@svgdotjs/svg.resize.js@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz#732e4cae15d09ad3021adeac63bc9fad0dc7255a" + integrity sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA== + +"@svgdotjs/svg.select.js@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz#80a10409e6c73206218690eac5c9f94f8c8909b5" + integrity sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g== + +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== + +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" + +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== + dependencies: + "@babel/types" "^7.21.3" + entities "^4.4.0" + +"@svgr/plugin-jsx@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" + integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== + dependencies: + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" + +"@svgr/webpack@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2" + integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== + dependencies: + "@babel/core" "^7.21.3" + "@babel/plugin-transform-react-constant-elements" "^7.21.3" + "@babel/preset-env" "^7.20.2" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.21.0" + "@svgr/core" "8.1.0" + "@svgr/plugin-jsx" "8.1.0" + "@svgr/plugin-svgo" "8.1.0" + +"@swc/counter@0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@0.5.15", "@swc/helpers@^0.5.12": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== + dependencies: + tslib "^2.8.0" + +"@tanstack/match-sorter-utils@8.19.4": + version "8.19.4" + resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz#dacf772b5d94f4684f10dbeb2518cf72dccab8a5" + integrity sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg== + dependencies: + remove-accents "0.5.0" + +"@tanstack/query-core@5.69.0": + version "5.69.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.69.0.tgz#c434505987ade936dc53e6e27aa1406b0295516f" + integrity sha512-Kn410jq6vs1P8Nm+ZsRj9H+U3C0kjuEkYLxbiCyn3MDEiYor1j2DGVULqAz62SLZtUZ/e9Xt6xMXiJ3NJ65WyQ== + +"@tanstack/query-devtools@5.67.2": + version "5.67.2" + resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.67.2.tgz#890ae9913bd21d3969c7fd85c68b1bd1500cfc57" + integrity sha512-O4QXFFd7xqp6EX7sdvc9tsVO8nm4lpWBqwpgjpVLW5g7IeOY6VnS/xvs/YzbRhBVkKTMaJMOUGU7NhSX+YGoNg== + +"@tanstack/react-query-devtools@^5.51.11": + version "5.69.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.69.0.tgz#2cb8083028aab591b9a82caf68cd7a383a0c8b1a" + integrity sha512-sYklnou3IKAemqB5wJeBwjmG5bUGDKAL5/I4pVA+aqSnsNibVLt8/pAU976uuJ5K71w71bHtI/AMxiIs3gtkEA== + dependencies: + "@tanstack/query-devtools" "5.67.2" + +"@tanstack/react-query@^5.51.11": + version "5.69.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.69.0.tgz#8d58e800854cc11d0aa2c39569f53ae32ba442a9" + integrity sha512-Ift3IUNQqTcaFa1AiIQ7WCb/PPy8aexZdq9pZWLXhfLcLxH0+PZqJ2xFImxCpdDZrFRZhLJrh76geevS5xjRhA== + dependencies: + "@tanstack/query-core" "5.69.0" + +"@tanstack/react-table@8.20.6": + version "8.20.6" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.20.6.tgz#a1f3103327aa59aa621931f4087a7604a21054d0" + integrity sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ== + dependencies: + "@tanstack/table-core" "8.20.5" + +"@tanstack/react-table@^8.19.2": + version "8.21.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.21.2.tgz#6a7fce828b64547e33f4606ada8114db496007cc" + integrity sha512-11tNlEDTdIhMJba2RBH+ecJ9l1zgS2kjmexDPAraulc8jeNA4xocSNeyzextT0XJyASil4XsCYlJmf5jEWAtYg== + dependencies: + "@tanstack/table-core" "8.21.2" + +"@tanstack/react-virtual@3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz#d6b9bd999c181f0a2edce270c87a2febead04322" + integrity sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ== + dependencies: + "@tanstack/virtual-core" "3.11.2" + +"@tanstack/table-core@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.20.5.tgz#3974f0b090bed11243d4107283824167a395cf1d" + integrity sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg== + +"@tanstack/table-core@8.21.2": + version "8.21.2" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.21.2.tgz#dd57595a1773652bb6fb437e90a5f5386a49fd7e" + integrity sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA== + +"@tanstack/virtual-core@3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz#00409e743ac4eea9afe5b7708594d5fcebb00212" + integrity sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw== + +"@tiptap/core@^2.11.5", "@tiptap/core@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.11.5.tgz#2bf1b08c4ca2467778d0a109634c45ab475522f4" + integrity sha512-jb0KTdUJaJY53JaN7ooY3XAxHQNoMYti/H6ANo707PsLXVeEqJ9o8+eBup1JU5CuwzrgnDc2dECt2WIGX9f8Jw== + +"@tiptap/extension-blockquote@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.11.5.tgz#d43ae78f5eba7de1b9138820502e950bae83c31c" + integrity sha512-MZfcRIzKRD8/J1hkt/eYv49060GTL6qGR3NY/oTDuw2wYzbQXXLEbjk8hxAtjwNn7G+pWQv3L+PKFzZDxibLuA== + +"@tiptap/extension-bold@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.11.5.tgz#7fc13d835067fbee4ff2be83a694f5200ba50e41" + integrity sha512-OAq03MHEbl7MtYCUzGuwb0VpOPnM0k5ekMbEaRILFU5ZC7cEAQ36XmPIw1dQayrcuE8GZL35BKub2qtRxyC9iA== + +"@tiptap/extension-bubble-menu@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.11.5.tgz#75da9bcea2a6579cd3ad41cf82f7bc7369c1816d" + integrity sha512-rx+rMd7EEdht5EHLWldpkzJ56SWYA9799b33ustePqhXd6linnokJCzBqY13AfZ9+xp3RsR6C0ZHI9GGea0tIA== + dependencies: + tippy.js "^6.3.7" + +"@tiptap/extension-bullet-list@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.11.5.tgz#84c6bf623c5dffcd73dd24d012c9636191031d43" + integrity sha512-VXwHlX6A/T6FAspnyjbKDO0TQ+oetXuat6RY1/JxbXphH42nLuBaGWJ6pgy6xMl6XY8/9oPkTNrfJw/8/eeRwA== + +"@tiptap/extension-code-block@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.11.5.tgz#b90cea403884630f3f86c7629815250e8a266802" + integrity sha512-ksxMMvqLDlC+ftcQLynqZMdlJT1iHYZorXsXw/n+wuRd7YElkRkd6YWUX/Pq/njFY6lDjKiqFLEXBJB8nrzzBA== + +"@tiptap/extension-code@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.11.5.tgz#a550c544804e65507ab66dc8ab89a1e2f7d9228d" + integrity sha512-xOvHevNIQIcCCVn9tpvXa1wBp0wHN/2umbAZGTVzS+AQtM7BTo0tz8IyzwxkcZJaImONcUVYLOLzt2AgW1LltA== + +"@tiptap/extension-document@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.11.5.tgz#1d650d232df46cf07b83e0a5cc64db1c70057f37" + integrity sha512-7I4BRTpIux2a0O2qS3BDmyZ5LGp3pszKbix32CmeVh7lN9dV7W5reDqtJJ9FCZEEF+pZ6e1/DQA362dflwZw2g== + +"@tiptap/extension-dropcursor@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.11.5.tgz#a1d6fad3379551449534bdb8135da2577a8ec8fb" + integrity sha512-uIN7L3FU0904ec7FFFbndO7RQE/yiON4VzAMhNn587LFMyWO8US139HXIL4O8dpZeYwYL3d1FnDTflZl6CwLlg== + +"@tiptap/extension-floating-menu@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.11.5.tgz#97868901bae46e1826b9d2cfe5a4a33a446adfc1" + integrity sha512-HsMI0hV5Lwzm530Z5tBeyNCBNG38eJ3qjfdV2OHlfSf3+KOEfn6a5AUdoNaZO02LF79/8+7BaYU2drafag9cxQ== + dependencies: + tippy.js "^6.3.7" + +"@tiptap/extension-gapcursor@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.11.5.tgz#6771e387d90ef85ee834f4572627d76e303e1297" + integrity sha512-kcWa+Xq9cb6lBdiICvLReuDtz/rLjFKHWpW3jTTF3FiP3wx4H8Rs6bzVtty7uOVTfwupxZRiKICAMEU6iT0xrQ== + +"@tiptap/extension-hard-break@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.11.5.tgz#cf9610846cb7ab0f3a8d8dc37fd1fcee6a39d72f" + integrity sha512-q9doeN+Yg9F5QNTG8pZGYfNye3tmntOwch683v0CCVCI4ldKaLZ0jG3NbBTq+mosHYdgOH2rNbIORlRRsQ+iYQ== + +"@tiptap/extension-heading@^2.11.5", "@tiptap/extension-heading@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.11.5.tgz#e9a54e4cbb5c9c7fc95a24cc894a16751ecd185f" + integrity sha512-x/MV53psJ9baRcZ4k4WjnCUBMt8zCX7mPlKVT+9C/o+DEs/j/qxPLs95nHeQv70chZpSwCQCt93xMmuF0kPoAg== + +"@tiptap/extension-history@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.11.5.tgz#c636c8da784ad25886eb617cff6b4752ac9586d1" + integrity sha512-b+wOS33Dz1azw6F1i9LFTEIJ/gUui0Jwz5ZvmVDpL2ZHBhq1Ui0/spTT+tuZOXq7Y/uCbKL8Liu4WoedIvhboQ== + +"@tiptap/extension-horizontal-rule@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.11.5.tgz#b876f606386c51bc2ff45d4bd26267f5b104a850" + integrity sha512-3up2r1Du8/5/4ZYzTC0DjTwhgPI3dn8jhOCLu73m5F3OGvK/9whcXoeWoX103hYMnGDxBlfOje71yQuN35FL4A== + +"@tiptap/extension-image@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.11.5.tgz#f16d05c8045dc7d84d85efdbb946a2a8713fb2d3" + integrity sha512-HbUq9AL8gb8eSuQfY/QKkvMc66ZFN/b6jvQAILGArNOgalUfGizoC6baKTJShaExMSPjBZlaAHtJiQKPaGRHaA== + +"@tiptap/extension-italic@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.11.5.tgz#63b09c7fb41ab64681983df7be8cf6bc330c0ede" + integrity sha512-9VGfb2/LfPhQ6TjzDwuYLRvw0A6VGbaIp3F+5Mql8XVdTBHb2+rhELbyhNGiGVR78CaB/EiKb6dO9xu/tBWSYA== + +"@tiptap/extension-list-item@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.11.5.tgz#6ada38dd4e6db889288242542bc0490b0908d190" + integrity sha512-Mp5RD/pbkfW1vdc6xMVxXYcta73FOwLmblQlFNn/l/E5/X1DUSA4iGhgDDH4EWO3swbs03x2f7Zka/Xoj3+WLg== + +"@tiptap/extension-ordered-list@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.11.5.tgz#c81e33b5bc885450d412e9ea644cc666407e0c13" + integrity sha512-Cu8KwruBNWAaEfshRQR0yOSaUKAeEwxW7UgbvF9cN/zZuKgK5uZosPCPTehIFCcRe+TBpRtZQh+06f/gNYpYYg== + +"@tiptap/extension-paragraph@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.11.5.tgz#05575f0264a435837483831eebffc5e3af279cb1" + integrity sha512-YFBWeg7xu/sBnsDIF/+nh9Arf7R0h07VZMd0id5Ydd2Qe3c1uIZwXxeINVtH0SZozuPIQFAT8ICe9M0RxmE+TA== + +"@tiptap/extension-strike@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.11.5.tgz#94e214dcede09f6c5f99d0c58290a1d3f5db61eb" + integrity sha512-PVfUiCqrjvsLpbIoVlegSY8RlkR64F1Rr2RYmiybQfGbg+AkSZXDeO0eIrc03//4gua7D9DfIozHmAKv1KN3ow== + +"@tiptap/extension-table@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.11.5.tgz#2296c1076ef3381bca4601709956085f093ff9e0" + integrity sha512-NKXLhKWdAdURklm98YkCd2ai4fh8jY8HS/+X2s/2QiQt8Z98CU1keCm35fJEEExM234iB/hCqG5vY4JgTc0Tvw== + +"@tiptap/extension-text-style@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.11.5.tgz#f1b3882de489328203187e6256e6ee130477cfad" + integrity sha512-YUmYl0gILSd/u/ZkOmNxjNXVw+mu8fpC2f8G4I4tLODm0zCx09j9DDEJXSrM5XX72nxJQqtSQsCpNKnL0hfeEQ== + +"@tiptap/extension-text@^2.11.5": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.11.5.tgz#10cc6ec519aac71a6841ec9bd914ded747f6ec3f" + integrity sha512-Gq1WwyhFpCbEDrLPIHt5A8aLSlf8bfz4jm417c8F/JyU0J5dtYdmx0RAxjnLw1i7ZHE7LRyqqAoS0sl7JHDNSQ== + +"@tiptap/pm@^2.11.5", "@tiptap/pm@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.11.5.tgz#6577e277e5a991c605a3dfcebde7c0b794d8def4" + integrity sha512-z9JFtqc5ZOsdQLd9vRnXfTCQ8v5ADAfRt9Nm7SqP6FUHII8E1hs38ACzf5xursmth/VonJYb5+73Pqxk1hGIPw== + dependencies: + prosemirror-changeset "^2.2.1" + prosemirror-collab "^1.3.1" + prosemirror-commands "^1.6.2" + prosemirror-dropcursor "^1.8.1" + prosemirror-gapcursor "^1.3.2" + prosemirror-history "^1.4.1" + prosemirror-inputrules "^1.4.0" + prosemirror-keymap "^1.2.2" + prosemirror-markdown "^1.13.1" + prosemirror-menu "^1.2.4" + prosemirror-model "^1.23.0" + prosemirror-schema-basic "^1.2.3" + prosemirror-schema-list "^1.4.1" + prosemirror-state "^1.4.3" + prosemirror-tables "^1.6.3" + prosemirror-trailing-node "^3.0.0" + prosemirror-transform "^1.10.2" + prosemirror-view "^1.37.0" + +"@tiptap/react@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.11.5.tgz#46ba23a56583e95b0020eb5778c35f3dd98aa673" + integrity sha512-Dp8eHL1G+R/C4+QzAczyb3t1ovexEIZx9ln7SGEM+cT1KHKAw9XGPRgsp92+NQaYI+EdEb/YqoBOSzQcd18/OQ== + dependencies: + "@tiptap/extension-bubble-menu" "^2.11.5" + "@tiptap/extension-floating-menu" "^2.11.5" + "@types/use-sync-external-store" "^0.0.6" + fast-deep-equal "^3" + use-sync-external-store "^1" + +"@tiptap/starter-kit@^2.9.1": + version "2.11.5" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.11.5.tgz#7d1b0b866b10c0f9c98214588639cda204c4f3b4" + integrity sha512-SLI7Aj2ruU1t//6Mk8f+fqW+18uTqpdfLUJYgwu0CkqBckrkRZYZh6GVLk/02k3H2ki7QkFxiFbZrdbZdng0JA== + dependencies: + "@tiptap/core" "^2.11.5" + "@tiptap/extension-blockquote" "^2.11.5" + "@tiptap/extension-bold" "^2.11.5" + "@tiptap/extension-bullet-list" "^2.11.5" + "@tiptap/extension-code" "^2.11.5" + "@tiptap/extension-code-block" "^2.11.5" + "@tiptap/extension-document" "^2.11.5" + "@tiptap/extension-dropcursor" "^2.11.5" + "@tiptap/extension-gapcursor" "^2.11.5" + "@tiptap/extension-hard-break" "^2.11.5" + "@tiptap/extension-heading" "^2.11.5" + "@tiptap/extension-history" "^2.11.5" + "@tiptap/extension-horizontal-rule" "^2.11.5" + "@tiptap/extension-italic" "^2.11.5" + "@tiptap/extension-list-item" "^2.11.5" + "@tiptap/extension-ordered-list" "^2.11.5" + "@tiptap/extension-paragraph" "^2.11.5" + "@tiptap/extension-strike" "^2.11.5" + "@tiptap/extension-text" "^2.11.5" + "@tiptap/extension-text-style" "^2.11.5" + "@tiptap/pm" "^2.11.5" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@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.0", "@types/estree@^1.0.6": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" + integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== + +"@types/hast@^2.0.0": + version "2.3.10" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" + integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== + 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/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz#6bba74383cdab98e8db4e20ce5b4a6b98caed010" + integrity sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/linkify-it@^5": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== + +"@types/markdown-it@^14.0.0": + version "14.1.2" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" + integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== + dependencies: + "@types/linkify-it" "^5" + "@types/mdurl" "^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/mdurl@^2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== + +"@types/ms@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + +"@types/node@*": + version "22.13.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.13.tgz#5e7d110fb509b0d4a43fbf48fa9d6e0f83e1b1e7" + integrity sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ== + dependencies: + undici-types "~6.20.0" + +"@types/papaparse@^5.3.9": + version "5.3.15" + resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.15.tgz#7cafa16757a1d121422deefbb10b6310b224ecc4" + integrity sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw== + dependencies: + "@types/node" "*" + +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + +"@types/prop-types@^15.7.14": + version "15.7.14" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" + integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== + +"@types/quill@^1.3.10": + version "1.3.10" + resolved "https://registry.yarnpkg.com/@types/quill/-/quill-1.3.10.tgz#dc1f7b6587f7ee94bdf5291bc92289f6f0497613" + integrity sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw== + dependencies: + parchment "^1.1.2" + +"@types/raf@^3.4.0": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04" + integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw== + +"@types/react-redux@^7.1.20": + version "7.1.34" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.34.tgz#83613e1957c481521e6776beeac4fd506d11bd0e" + integrity sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ== + dependencies: + "@types/hoist-non-react-statics" "^3.3.0" + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + redux "^4.0.0" + +"@types/react-transition-group@^4.4.11", "@types/react-transition-group@^4.4.12": + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== + +"@types/react@*": + version "19.0.12" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.12.tgz#338b3f7854adbb784be454b3a83053127af96bd3" + integrity sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA== + dependencies: + csstype "^3.0.2" + +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + +"@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": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== + +"@types/use-sync-external-store@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc" + integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== + +"@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz#ad1465aa6fe7e937801c291648dec951c4dc38e6" + integrity sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.28.0" + "@typescript-eslint/type-utils" "8.28.0" + "@typescript-eslint/utils" "8.28.0" + "@typescript-eslint/visitor-keys" "8.28.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^2.0.1" + +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.28.0.tgz#85321707e8711c0e66a949ea228224af35f45c98" + integrity sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ== + dependencies: + "@typescript-eslint/scope-manager" "8.28.0" + "@typescript-eslint/types" "8.28.0" + "@typescript-eslint/typescript-estree" "8.28.0" + "@typescript-eslint/visitor-keys" "8.28.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz#e495b20438a3787e00498774d5625e620d68f9fe" + integrity sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw== + dependencies: + "@typescript-eslint/types" "8.28.0" + "@typescript-eslint/visitor-keys" "8.28.0" + +"@typescript-eslint/type-utils@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz#fc565414ebc16de1fc65e0dd8652ce02c78ca61f" + integrity sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg== + dependencies: + "@typescript-eslint/typescript-estree" "8.28.0" + "@typescript-eslint/utils" "8.28.0" + debug "^4.3.4" + ts-api-utils "^2.0.1" + +"@typescript-eslint/types@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.28.0.tgz#7c73878385edfd9674c7aa10975e6c484b4f896e" + integrity sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA== + +"@typescript-eslint/typescript-estree@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz#56b999f26f7ca67b9d75d6a67af5c8b8e4e80114" + integrity sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA== + dependencies: + "@typescript-eslint/types" "8.28.0" + "@typescript-eslint/visitor-keys" "8.28.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.0.1" + +"@typescript-eslint/utils@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.28.0.tgz#7850856620a896b7ac621ac12d49c282aefbb528" + integrity sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.28.0" + "@typescript-eslint/types" "8.28.0" + "@typescript-eslint/typescript-estree" "8.28.0" + +"@typescript-eslint/visitor-keys@8.28.0": + version "8.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz#18eb9a25cc9dadb027835c58efe93a5c4ee81969" + integrity sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg== + dependencies: + "@typescript-eslint/types" "8.28.0" + eslint-visitor-keys "^4.2.0" + +"@uiw/react-json-view@^2.0.0-alpha.30": + version "2.0.0-alpha.30" + resolved "https://registry.yarnpkg.com/@uiw/react-json-view/-/react-json-view-2.0.0-alpha.30.tgz#85db25b1a61cccc5c6c51350894515f8b7100e52" + integrity sha512-ufvvirUQcITU9s4R12b7hn/t7ngLCYp1KbBxE+eAD35o3Ey+uxfKvgWmIwGFhV3hFXXxMJ8SHQKwl/ywNCHsDA== + +"@ungap/structured-clone@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@unrs/rspack-resolver-binding-darwin-arm64@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.2.2.tgz#4a40be18ae1d5a417ca9246b0e9c7eda11a49998" + integrity sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw== + +"@unrs/rspack-resolver-binding-darwin-x64@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.2.2.tgz#f1d9226724fa4f47f0eaab50fb046568e29d68e0" + integrity sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg== + +"@unrs/rspack-resolver-binding-freebsd-x64@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.2.2.tgz#3f14520900a130bf1b30922a7be0024968506e8c" + integrity sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA== + +"@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.2.2.tgz#7aa5ae2d6c762b0737694b48cd069629dd205c0c" + integrity sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw== + +"@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.2.2.tgz#1422b244db1ff7eb79d74260d25dac976c423e91" + integrity sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ== + +"@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.2.2.tgz#9cc30a98b25b704b3d3bb17b9932a24d39049719" + integrity sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ== + +"@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.2.2.tgz#1ce389a2317c96276ceec82de4e6e325974946a7" + integrity sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw== + +"@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.2.2.tgz#6d262acedac6d6e3d85c2d370de47e8e669cc316" + integrity sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg== + +"@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.2.2.tgz#72bf01b52c5e2d567b5f90ee842cde674e0356c7" + integrity sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.7" + +"@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.2.2.tgz#e1a74655a42d48d2c005dd69ba148547167e1701" + integrity sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg== + +"@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.2.2.tgz#ac441b3bd8cf97b7d3d35f4e7f9792f8e257e729" + integrity sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw== + +"@yr/monotone-cubic-spline@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz#7272d89f8e4f6fb7a1600c28c378cc18d3b577b9" + integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA== + +abs-svg-path@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" + integrity sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.14.0: + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +apexcharts@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-4.5.0.tgz#efddb1a9b48e5add201df1549ac654412182e1f9" + integrity sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ== + dependencies: + "@svgdotjs/svg.draggable.js" "^3.0.4" + "@svgdotjs/svg.filter.js" "^3.0.8" + "@svgdotjs/svg.js" "^3.2.4" + "@svgdotjs/svg.resize.js" "^2.0.2" + "@svgdotjs/svg.select.js" "^4.0.1" + "@yr/monotone-cubic-spline" "^1.0.3" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-includes@^3.1.6, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.findlastindex@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== + +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +attr-accept@^2.2.4: + version "2.2.5" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" + integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axe-core@^4.10.0: + version "4.10.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" + integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== + +axios@^1.7.2: + version "1.8.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== + +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.13" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz#7d445f0e0607ebc8fb6b01d7e8fb02069b91dd8b" + integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.4" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" + integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.3" + core-js-compat "^3.40.0" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz#428c615d3c177292a22b4f93ed99e358d7906a9b" + integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.4" + +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-arraybuffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" + integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== + +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + +base64-js@^1.1.2, base64-js@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bidi-js@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" + integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== + dependencies: + require-from-string "^2.0.2" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +brotli@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" + integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== + dependencies: + base64-js "^1.1.2" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.24.0, browserslist@^4.24.4: + version "4.24.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-from@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0" + integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg== + +busboy@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001688: + version "1.0.30001707" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz#c5e104d199e6f4355a898fcd995a066c7eb9bf41" + integrity sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw== + +canvg@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.11.tgz#4b4290a6c7fa36871fac2b14e432eff33b33cf2b" + integrity sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA== + dependencies: + "@babel/runtime" "^7.12.5" + "@types/raf" "^3.4.0" + core-js "^3.8.3" + raf "^3.4.1" + regenerator-runtime "^0.13.7" + rgbcolor "^1.0.1" + stackblur-canvas "^2.0.0" + svg-pathdata "^6.0.3" + +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +clone@^2.1.1, clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +clsx@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +clsx@^2.0.0, clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0, color-string@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.5.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +copy-to-clipboard@^3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + +core-js-compat@^3.40.0: + version "3.41.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.41.0.tgz#4cdfce95f39a8f27759b667cf693d96e5dda3d17" + integrity sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A== + dependencies: + browserslist "^4.24.4" + +core-js@^3.6.0, core-js@^3.8.3: + version "3.41.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.41.0.tgz#57714dafb8c751a6095d028a7428f1fb5834a776" + integrity sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cosmiconfig@^8.1.3: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crelt@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" + integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +css-box-model@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" + integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== + dependencies: + tiny-invariant "^1.0.6" + +css-line-break@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" + integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== + dependencies: + utrie "^1.0.2" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssjanus@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssjanus/-/cssjanus-2.3.0.tgz#af91e639a34d8b241e5032824f3f1b7f8dd91557" + integrity sha512-ZZXXn51SnxRxAZ6fdY7mBDPmA4OZd83q/J9Gdqz3YmE9TUq+9tZl+tdOnCi7PpNygI6PEkehj9rgifv5+W8a5A== + +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + +csstype@^3.0.2, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-fns@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" + integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: + 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" + +decode-named-character-reference@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz#5d6ce68792808901210dac42a8e9853511e2b8bf" + integrity sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w== + dependencies: + character-entities "^2.0.0" + +deep-equal@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" + integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== + dependencies: + is-arguments "^1.1.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + object-is "^1.1.5" + object-keys "^1.1.1" + regexp.prototype.flags "^1.5.1" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + +deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +detect-libc@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +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" + +dfa@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" + integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +dompurify@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.4.tgz#af5a5a11407524431456cf18836c55d13441cd8e" + integrity sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg== + optionalDependencies: + "@types/trusted-types" "^2.0.7" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer2@^0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== + dependencies: + readable-stream "^2.0.2" + +electron-to-chromium@^1.5.73: + version "1.5.123" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz#fae5bdba0ba27045895176327aa79831aba0790c" + integrity sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA== + +eml-parse-js@^1.2.0-beta.0: + version "1.2.0-beta.0" + resolved "https://registry.yarnpkg.com/eml-parse-js/-/eml-parse-js-1.2.0-beta.0.tgz#0b024d38093b42cd29168f7f5771726390e4b1f3" + integrity sha512-fDA5OcT9DmU+6Qiv6Ki6/+fIjrZ97SE6KIB0PUK2r0nnRqBbnbaWm844l8SLTd4mc3rF0T3izc8E7E/qXFCthA== + dependencies: + "@sinonjs/text-encoding" "^0.7.2" + js-base64 "^3.7.2" + +emoji-regex@^10.3.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@15.2.2: + version "15.2.2" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-15.2.2.tgz#114ffec6851ced10fde7aa2f62c3d3a4371df514" + integrity sha512-g34RI7RFS4HybYFwGa/okj+8WZM+/fy+pEM+aqRQoVvM4gQhKrd4wIEddKmlZfWD75j8LTwB5zwkmNv3DceH1A== + dependencies: + "@next/eslint-plugin-next" "15.2.2" + "@rushstack/eslint-patch" "^1.10.3" + "@typescript-eslint/eslint-plugin" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.31.0" + eslint-plugin-jsx-a11y "^6.10.0" + eslint-plugin-react "^7.37.0" + eslint-plugin-react-hooks "^5.0.0" + +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.5.2: + version "3.9.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.9.1.tgz#0ab8d0ed911e875684a96976a118adee5d1c9daa" + integrity sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw== + dependencies: + "@nolyfill/is-core-module" "1.0.39" + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^1.3.0" + rspack-resolver "^1.1.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.12" + +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.31.0: + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" + semver "^6.3.1" + string.prototype.trimend "^1.0.8" + tsconfig-paths "^3.15.0" + +eslint-plugin-jsx-a11y@^6.10.0: + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== + dependencies: + aria-query "^5.3.2" + array-includes "^3.1.8" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "^4.10.0" + axobject-query "^4.1.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + hasown "^2.0.2" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.1" + +eslint-plugin-react-hooks@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3" + integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== + +eslint-plugin-react@^7.37.0: + version "7.37.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz#1b6c80b6175b6ae4b26055ae4d55d04c414c7181" + integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.2.1" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.1" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" + +eslint-scope@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d" + integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@9.22.0: + version "9.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.22.0.tgz#0760043809fbf836f582140345233984d613c552" + integrity sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.2" + "@eslint/config-helpers" "^0.1.0" + "@eslint/core" "^0.12.0" + "@eslint/eslintrc" "^3.3.0" + "@eslint/js" "9.22.0" + "@eslint/plugin-kit" "^0.2.7" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.3.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +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== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" + integrity sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +export-to-csv@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/export-to-csv/-/export-to-csv-1.4.0.tgz#03fb42a4a4262cd03bde57a7b9bcad115149cf4b" + integrity sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg== + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0, extend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== + +fast-equals@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7" + integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg== + +fast-glob@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +fault@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" + integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== + dependencies: + format "^0.2.0" + +fdir@^6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" + integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== + +fflate@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +file-selector@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-2.1.2.tgz#fe7c7ee9e550952dfbc863d73b14dc740d7de8b4" + integrity sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig== + dependencies: + tslib "^2.7.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +fontkit@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-2.0.4.tgz#4765d664c68b49b5d6feb6bd1051ee49d8ec5ab0" + integrity sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g== + dependencies: + "@swc/helpers" "^0.5.12" + brotli "^1.3.2" + clone "^2.1.2" + dfa "^1.2.0" + fast-deep-equal "^3.1.3" + restructure "^3.0.0" + tiny-inflate "^1.0.3" + unicode-properties "^1.4.0" + unicode-trie "^2.0.0" + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +form-data@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.12" + +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== + +formik@2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.6.tgz#4da75ca80f1a827ab35b08fd98d5a76e928c9686" + integrity sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g== + dependencies: + "@types/hoist-non-react-statics" "^3.3.1" + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.21" + lodash-es "^4.17.21" + react-fast-compare "^2.0.1" + tiny-warning "^1.0.2" + tslib "^2.0.0" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +get-tsconfig@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb" + integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A== + dependencies: + resolve-pkg-maps "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +goober@^2.1.16: + version "2.1.16" + resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.16.tgz#7d548eb9b83ff0988d102be71f271ca8f9c82a95" + integrity sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g== + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +gray-matter@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.6" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== + 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 "^7.0.0" + space-separated-tokens "^2.0.0" + style-to-js "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + +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" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +highlight-words@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/highlight-words/-/highlight-words-2.0.0.tgz#06853d68f1f7c8e59d6ef2dd072fe2f64fc93936" + integrity sha512-If5n+IhSBRXTScE7wl16VPmd+44Vy7kof24EdqhjsZsDuHikpv1OCagVcJFpB4fS4UPUniedlWqrjIO8vWOsIQ== + +highlight.js@^10.4.1, highlight.js@~10.7.0: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +highlightjs-vue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz#fdfe97fbea6354e70ee44e3a955875e114db086d" + integrity sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA== + +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hsl-to-hex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz#c58c826dc6d2f1e0a5ff1da5a7ecbf03faac1352" + integrity sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA== + dependencies: + hsl-to-rgb-for-reals "^1.1.0" + +hsl-to-rgb-for-reals@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz#e1eb23f6b78016e3722431df68197e6dcdc016d9" + integrity sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg== + +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + +html-tokenize@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-tokenize/-/html-tokenize-2.0.1.tgz#c3b2ea6e2837d4f8c06693393e9d2a12c960be5f" + integrity sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w== + dependencies: + buffer-from "~0.1.1" + inherits "~2.0.1" + minimist "~1.2.5" + readable-stream "~1.0.27-1" + through2 "~0.4.1" + +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== + +html2canvas@^1.0.0-rc.5: + version "1.4.1" + resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" + integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== + dependencies: + css-line-break "^2.1.0" + text-segmentation "^1.0.3" + +htmlparser2@^3.9.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +hyphen@^1.6.4: + version "1.10.6" + resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.10.6.tgz#0e779d280e696102b97d7e42f5ca5de2cc97e274" + integrity sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw== + +i18next@24.2.3: + version "24.2.3" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-24.2.3.tgz#3a05f72615cbd7c00d7e348667e2aabef1df753b" + integrity sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A== + dependencies: + "@babel/runtime" "^7.26.10" + +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immer@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" + integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +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.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + +is-arguments@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-bun-module@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.3.0.tgz#ea4d24fdebfcecc98e81bcbcb506827fee288760" + integrity sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA== + dependencies: + semver "^7.6.3" + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-generator-function@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-regex@^1.1.4, is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iterator.prototype@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== + dependencies: + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" + +javascript-time-ago@^2.5.11: + version "2.5.11" + resolved "https://registry.yarnpkg.com/javascript-time-ago/-/javascript-time-ago-2.5.11.tgz#f2743040ccdec603cb4ec1029eeccb0c595c942a" + integrity sha512-Zeyf5R7oM1fSMW9zsU3YgAYwE0bimEeF54Udn2ixGd8PUwu+z1Yc5t4Y8YScJDMHD6uCx6giLt3VJR5K4CMwbg== + dependencies: + relative-time-format "^1.1.6" + +jay-peg@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/jay-peg/-/jay-peg-1.1.1.tgz#fdf410b89fa7a295bf74424ffe4c9083dbe7c363" + integrity sha512-D62KEuBxz/ip2gQKOEhk/mx14o7eiFRaU+VNNSP4MOiIkwb/D6B3G1Mfas7C/Fit8EsSV2/IWjZElx/Gs6A4ww== + dependencies: + restructure "^3.0.0" + +js-base64@^3.7.2: + version "3.7.7" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jspdf-autotable@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-5.0.2.tgz#bcf7aa2ff9eb46a2db6aa8c0407ab86c0a6c7b96" + integrity sha512-YNKeB7qmx3pxOLcNeoqAv3qTS7KuvVwkFe5AduCawpop3NOkBUtqDToxNc225MlNecxT4kP2Zy3z/y/yvGdXUQ== + +jspdf@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-3.0.1.tgz#d81e1964f354f60412516eb2449ea2cccd4d2a3b" + integrity sha512-qaGIxqxetdoNnFQQXxTKUD9/Z7AloLaw94fFsOiJMxbfYdBbrBuhWmbzI8TVjrw7s3jBY1PFHofBKMV/wZPapg== + dependencies: + "@babel/runtime" "^7.26.7" + atob "^2.1.2" + btoa "^1.2.1" + fflate "^0.8.1" + optionalDependencies: + canvg "^3.0.11" + core-js "^3.6.0" + dompurify "^3.2.4" + html2canvas "^1.0.0-rc.5" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +language-subtag-registry@^0.3.20: + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + dependencies: + language-subtag-registry "^0.3.20" + +leaflet-defaulticon-compatibility@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.2.tgz#f5e1a5841aeab9d1682d17887348855a741b3c2a" + integrity sha512-IrKagWxkTwzxUkFIumy/Zmo3ksjuAu3zEadtOuJcKzuXaD76Gwvg2Z1mLyx7y52ykOzM8rAH5ChBs4DnfdGa6Q== + +leaflet.markercluster@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz#9cdb52a4eab92671832e1ef9899669e80efc4056" + integrity sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA== + +leaflet@^1.9.4: + version "1.9.4" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.9.4.tgz#23fae724e282fa25745aff82ca4d394748db7d8d" + integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.isequal@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowlight@^1.17.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" + integrity sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw== + dependencies: + fault "^1.0.0" + highlight.js "~10.7.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +markdown-it@^14.0.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== + dependencies: + argparse "^2.0.1" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" + +material-react-table@^3.0.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/material-react-table/-/material-react-table-3.2.1.tgz#56f595755cab3b669b399999fed9eb305fbb6dd7" + integrity sha512-sQtTf7bETpkPN2Hm5BVtz89wrfXCVQguz6XlwMChSnfKFO5QCKAJJC5aSIKnUc3S0AvTz/k/ILi00FnnY1Gixw== + dependencies: + "@tanstack/match-sorter-utils" "8.19.4" + "@tanstack/react-table" "8.20.6" + "@tanstack/react-virtual" "3.11.2" + highlight-words "2.0.0" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +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-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.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== + 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@^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@^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@^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@^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.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + +media-engine@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/media-engine/-/media-engine-1.0.3.tgz#be3188f6cd243ea2a40804a35de5a5b032f58dad" + integrity sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg== + +"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromark-core-commonmark@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== + 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-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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^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@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== + 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@^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@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + +micromark@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== + 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" + +micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6, minimist@~1.2.5: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +monaco-editor@^0.52.0: + version "0.52.2" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.52.2.tgz#53c75a6fcc6802684e99fd1b2700299857002205" + integrity sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mui-tiptap@^1.14.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/mui-tiptap/-/mui-tiptap-1.18.0.tgz#99f42928638d4cce0a396c713c49454cadbc8441" + integrity sha512-SW4PS4jJuOXQHdS96eGq1dkNiLOOTP8yiBnOH6c49SF+Sg6Bowd1hnrDmqRR+l8t6Uer5O7DWhYpYuixvrrlYw== + dependencies: + encodeurl "^1.0.2" + lodash "^4.17.21" + react-colorful "^5.6.1" + tss-react "^4.8.3" + type-fest "^3.12.0" + +multipipe@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-1.0.2.tgz#cc13efd833c9cda99f224f868461b8e1a3fd939d" + integrity sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ== + dependencies: + duplexer2 "^0.1.2" + object-assign "^4.1.0" + +nanoid@^3.3.6: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next@^15.2.2: + version "15.2.4" + resolved "https://registry.yarnpkg.com/next/-/next-15.2.4.tgz#e05225e9511df98e3b2edc713e17f4c970bff961" + integrity sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ== + dependencies: + "@next/env" "15.2.4" + "@swc/counter" "0.1.3" + "@swc/helpers" "0.5.15" + busboy "1.6.0" + caniuse-lite "^1.0.30001579" + postcss "8.4.31" + styled-jsx "5.1.6" + optionalDependencies: + "@next/swc-darwin-arm64" "15.2.4" + "@next/swc-darwin-x64" "15.2.4" + "@next/swc-linux-arm64-gnu" "15.2.4" + "@next/swc-linux-arm64-musl" "15.2.4" + "@next/swc-linux-x64-gnu" "15.2.4" + "@next/swc-linux-x64-musl" "15.2.4" + "@next/swc-win32-arm64-msvc" "15.2.4" + "@next/swc-win32-x64-msvc" "15.2.4" + sharp "^0.33.5" + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +normalize-svg-path@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c" + integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg== + dependencies: + svg-arc-to-cubic-bezier "^3.0.0" + +nprogress@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +numeral@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506" + integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== + +object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.entries@^1.1.8: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +orderedmap@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-2.1.1.tgz#61481269c44031c449915497bf5a4ad273c512d2" + integrity sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g== + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +papaparse@^5.4.1: + version "5.5.2" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.5.2.tgz#fb67cc5a03ba8930cb435dc4641a25d6804bd4d7" + integrity sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA== + +parchment@^1.1.2, parchment@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5" + integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-entities@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== + dependencies: + "@types/unist" "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-svg-path@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" + integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prismjs@^1.27.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" + integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== + +prismjs@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" + integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +prop-types@15.8.1, prop-types@15.x, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-expr@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" + integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== + +property-information@^5.0.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +property-information@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.0.0.tgz#3508a6d6b0b8eb3ca6eb2c6623b164d2ed2ab112" + integrity sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg== + +prosemirror-changeset@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz#dae94b63aec618fac7bb9061648e6e2a79988383" + integrity sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ== + dependencies: + prosemirror-transform "^1.0.0" + +prosemirror-collab@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz#0e8c91e76e009b53457eb3b3051fb68dad029a33" + integrity sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ== + dependencies: + prosemirror-state "^1.0.0" + +prosemirror-commands@^1.0.0, prosemirror-commands@^1.6.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.7.0.tgz#c0a60c808f51157caa146922494fc59fe257f27c" + integrity sha512-6toodS4R/Aah5pdsrIwnTYPEjW70SlO5a66oo5Kk+CIrgJz3ukOoS+FYDGqvQlAX5PxoGWDX1oD++tn5X3pyRA== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.10.2" + +prosemirror-dropcursor@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz#49b9fb2f583e0d0f4021ff87db825faa2be2832d" + integrity sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw== + dependencies: + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + prosemirror-view "^1.1.0" + +prosemirror-gapcursor@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz#5fa336b83789c6199a7341c9493587e249215cb4" + integrity sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ== + dependencies: + prosemirror-keymap "^1.0.0" + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-view "^1.0.0" + +prosemirror-history@^1.0.0, prosemirror-history@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.4.1.tgz#cc370a46fb629e83a33946a0e12612e934ab8b98" + integrity sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ== + dependencies: + prosemirror-state "^1.2.2" + prosemirror-transform "^1.0.0" + prosemirror-view "^1.31.0" + rope-sequence "^1.3.0" + +prosemirror-inputrules@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz#e22bfaf1d6ea4fe240ad447c184af3d520d43c37" + integrity sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA== + dependencies: + prosemirror-state "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e" + integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== + dependencies: + prosemirror-state "^1.0.0" + w3c-keyname "^2.2.0" + +prosemirror-markdown@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz#863eb3fd5f57a444e4378174622b562735b1c503" + integrity sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g== + dependencies: + "@types/markdown-it" "^14.0.0" + markdown-it "^14.0.0" + prosemirror-model "^1.25.0" + +prosemirror-menu@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz#3cfdc7c06d10f9fbd1bce29082c498bd11a0a79a" + integrity sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA== + dependencies: + crelt "^1.0.0" + prosemirror-commands "^1.0.0" + prosemirror-history "^1.0.0" + prosemirror-state "^1.0.0" + +prosemirror-model@^1.0.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0, prosemirror-model@^1.24.1, prosemirror-model@^1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.0.tgz#c147113edc0718a14f03881e4c20367d0221f7af" + integrity sha512-/8XUmxWf0pkj2BmtqZHYJipTBMHIdVjuvFzMvEoxrtyGNmfvdhBiRwYt/eFwy2wA9DtBW3RLqvZnjurEkHaFCw== + dependencies: + orderedmap "^2.0.0" + +prosemirror-schema-basic@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz#389ce1ec09b8a30ea9bbb92c58569cb690c2d695" + integrity sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ== + dependencies: + prosemirror-model "^1.25.0" + +prosemirror-schema-list@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz#5869c8f749e8745c394548bb11820b0feb1e32f5" + integrity sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.7.3" + +prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080" + integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-transform "^1.0.0" + prosemirror-view "^1.27.0" + +prosemirror-tables@^1.6.3: + version "1.6.4" + resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.6.4.tgz#e36ebca70d9e398c4a3b99b122ba86bfc985293d" + integrity sha512-TkDY3Gw52gRFRfRn2f4wJv5WOgAOXLJA2CQJYIJ5+kdFbfj3acR4JUW6LX2e1hiEBiUwvEhzH5a3cZ5YSztpIA== + dependencies: + prosemirror-keymap "^1.2.2" + prosemirror-model "^1.24.1" + prosemirror-state "^1.4.3" + prosemirror-transform "^1.10.2" + prosemirror-view "^1.37.2" + +prosemirror-trailing-node@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz#5bc223d4fc1e8d9145e4079ec77a932b54e19e04" + integrity sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ== + dependencies: + "@remirror/core-constants" "3.0.0" + escape-string-regexp "^4.0.0" + +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.7.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.3.tgz#fae660bd7ffef3159aff44bc21e9e044aa31b67d" + integrity sha512-Nhh/+1kZGRINbEHmVu39oynhcap4hWTs/BlU7NnxWj3+l0qi8I1mu67v6mMdEe/ltD8hHvU4FV6PHiCw2VSpMw== + dependencies: + prosemirror-model "^1.21.0" + +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.37.0, prosemirror-view@^1.37.2: + version "1.38.1" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.38.1.tgz#566d30cc8b00a68d6b4c60f5d8a6ab97c82990b3" + integrity sha512-4FH/uM1A4PNyrxXbD+RAbAsf0d/mM0D/wAKSVVWK7o0A9Q/oOXJBrw786mBf2Vnrs/Edly6dH6Z2gsb7zWwaUw== + dependencies: + prosemirror-model "^1.20.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +quill-delta@^3.6.2: + version "3.6.3" + resolved "https://registry.yarnpkg.com/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032" + integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg== + dependencies: + deep-equal "^1.0.1" + extend "^3.0.2" + fast-diff "1.1.2" + +quill@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8" + integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g== + dependencies: + clone "^2.1.1" + deep-equal "^1.0.1" + eventemitter3 "^2.0.3" + extend "^3.0.2" + parchment "^1.1.4" + quill-delta "^3.6.2" + +raf-schd@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" + integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +react-apexcharts@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/react-apexcharts/-/react-apexcharts-1.7.0.tgz#bbd08425674224adb27c9f2c62477d43bd5de539" + integrity sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA== + dependencies: + prop-types "^15.8.1" + +react-beautiful-dnd@13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2" + integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ== + dependencies: + "@babel/runtime" "^7.9.2" + css-box-model "^1.2.0" + memoize-one "^5.1.1" + raf-schd "^4.0.2" + react-redux "^7.2.0" + redux "^4.0.4" + use-memo-one "^1.1.1" + +react-colorful@^5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b" + integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== + +react-copy-to-clipboard@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz#09aae5ec4c62750ccb2e6421a58725eabc41255c" + integrity sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A== + dependencies: + copy-to-clipboard "^3.3.1" + prop-types "^15.8.1" + +react-dom@19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" + integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== + dependencies: + scheduler "^0.25.0" + +react-draggable@^4.0.3, react-draggable@^4.4.5: + version "4.4.6" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.6.tgz#63343ee945770881ca1256a5b6fa5c9f5983fe1e" + integrity sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw== + dependencies: + clsx "^1.1.1" + prop-types "^15.8.1" + +react-dropzone@14.3.8: + version "14.3.8" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.8.tgz#a7eab118f8a452fe3f8b162d64454e81ba830582" + integrity sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== + dependencies: + attr-accept "^2.2.4" + file-selector "^2.1.0" + prop-types "^15.8.1" + +react-error-boundary@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-5.0.0.tgz#6b6c7e075c922afb0283147e5b084efa44e68570" + integrity sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ== + dependencies: + "@babel/runtime" "^7.12.5" + +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-grid-layout@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-1.5.1.tgz#800899fb17aa568e5f32574d07c12579f3d76fb2" + integrity sha512-4Fr+kKMk0+m1HL/BWfHxi/lRuaOmDNNKQDcu7m12+NEYcen20wIuZFo789u3qWCyvUsNUxCiyf0eKq4WiJSNYw== + dependencies: + clsx "^2.0.0" + fast-equals "^4.0.3" + prop-types "^15.8.1" + react-draggable "^4.4.5" + react-resizable "^3.0.5" + resize-observer-polyfill "^1.5.1" + +react-hook-form@^7.53.0: + version "7.54.2" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" + integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== + +react-hot-toast@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.5.2.tgz#b55328966a26add56513e2dc1682e2cb4753c244" + integrity sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw== + dependencies: + csstype "^3.1.3" + goober "^2.1.16" + +react-html-parser@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/react-html-parser/-/react-html-parser-2.0.2.tgz#6dbe1ddd2cebc1b34ca15215158021db5fc5685e" + integrity sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g== + dependencies: + htmlparser2 "^3.9.0" + +react-i18next@15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-15.4.1.tgz#33f3e89c2f6c68e2bfcbf9aa59986ad42fe78758" + integrity sha512-ahGab+IaSgZmNPYXdV1n+OYky95TGpFwnKRflX/16dY04DsYYKHtVLjeny7sBSCREEcoMbAgSkFiGLF5g5Oofw== + dependencies: + "@babel/runtime" "^7.25.0" + html-parse-stringify "^3.0.1" + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0.tgz#d6669fd389ff022a9684f708cf6fa4962d1fea7a" + integrity sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g== + +react-leaflet-markercluster@^5.0.0-rc.0: + version "5.0.0-rc.0" + resolved "https://registry.yarnpkg.com/react-leaflet-markercluster/-/react-leaflet-markercluster-5.0.0-rc.0.tgz#42b1b9786de565fe69ec95abc6ff3232713f5300" + integrity sha512-jWa4bPD5LfLV3Lid1RWgl+yKUuQtnqeYtJzzLb/fiRjvX+rtwzY8pMoUFuygqyxNrWxMTQlWKBHxkpI7Sxvu4Q== + dependencies: + "@react-leaflet/core" "^3.0.0" + leaflet "^1.9.4" + leaflet.markercluster "^1.5.3" + react-leaflet "^5.0.0" + +react-leaflet@5.0.0, react-leaflet@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-5.0.0.tgz#945d40bad13b69e8606278b19446b00bab57376a" + integrity sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw== + dependencies: + "@react-leaflet/core" "^3.0.0" + +react-markdown@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-10.1.0.tgz#e22bc20faddbc07605c15284255653c0f3bad5ca" + integrity sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.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-media-hook@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/react-media-hook/-/react-media-hook-0.5.0.tgz#f830231f31ea80049f8cbaf8058da90ab71e7150" + integrity sha512-OupDgOSCjUUWPiXq3HMoRwpsQry4cGf4vKzh2E984Xtm4I01ZFbq8JwCG/RPqXB9h0qxgzoYLbABC+LIZH8deQ== + +react-papaparse@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/react-papaparse/-/react-papaparse-4.4.0.tgz#754b18c62240782d9b3b0bbc132b08ed6ec8ca13" + integrity sha512-xTEwHZYJ+1dh9mQDQjjwJXmWyX20DdZ52u+ddw75V+Xm5qsjXSvWmC7c8K82vRwMjKAOH2S9uFyGpHEyEztkUQ== + dependencies: + "@types/papaparse" "^5.3.9" + papaparse "^5.4.1" + +react-quill@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-quill/-/react-quill-2.0.0.tgz#67a0100f58f96a246af240c9fa6841b363b3e017" + integrity sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg== + dependencies: + "@types/quill" "^1.3.10" + lodash "^4.17.4" + quill "^1.3.7" + +react-redux@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5" + integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g== + dependencies: + "@types/use-sync-external-store" "^0.0.6" + use-sync-external-store "^1.4.0" + +react-redux@^7.2.0: + version "7.2.9" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" + integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== + dependencies: + "@babel/runtime" "^7.15.4" + "@types/react-redux" "^7.1.20" + hoist-non-react-statics "^3.3.2" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^17.0.2" + +react-resizable@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1" + integrity sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w== + dependencies: + prop-types "15.x" + react-draggable "^4.0.3" + +react-syntax-highlighter@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz#fa567cb0a9f96be7bbccf2c13a3c4b5657d9543e" + integrity sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg== + dependencies: + "@babel/runtime" "^7.3.1" + highlight.js "^10.4.1" + highlightjs-vue "^1.0.0" + lowlight "^1.17.0" + prismjs "^1.27.0" + refractor "^3.6.0" + +react-time-ago@^7.3.3: + version "7.3.3" + resolved "https://registry.yarnpkg.com/react-time-ago/-/react-time-ago-7.3.3.tgz#d6344c6397eef5cfed1554545fb9daf5742f16df" + integrity sha512-5kh2Kuu/UhHzcZrGvf3GUrF2d+IXjkIXif5MR2iDWIfSqQuBW27/ejN/tmzJBRyPiryYTgbDIG6AZFJ4RW3yfw== + dependencies: + memoize-one "^6.0.0" + prop-types "^15.8.1" + raf "^3.4.1" + +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react-window@^1.8.10: + version "1.8.11" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.11.tgz#a857b48fa85bd77042d59cc460964ff2e0648525" + integrity sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ== + dependencies: + "@babel/runtime" "^7.0.0" + memoize-one ">=3.1.1 <6" + +react@19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" + integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== + +readable-stream@^2.0.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.0.17, readable-stream@~1.0.27-1: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +redux-devtools-extension@2.13.9: + version "2.13.9" + resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7" + integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A== + +redux-persist@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" + integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== + +redux-thunk@3.1.0, redux-thunk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" + integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== + +redux@5.0.1, redux@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== + +redux@^4.0.0, redux@^4.0.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== + dependencies: + "@babel/runtime" "^7.9.2" + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +refractor@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" + integrity sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== + dependencies: + hastscript "^6.0.0" + parse-entities "^2.0.0" + prismjs "~1.27.0" + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.7: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + +relative-time-format@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/relative-time-format/-/relative-time-format-1.1.6.tgz#724a5fbc3794b8e0471b6b61419af2ce699eb9f1" + integrity sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ== + +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-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" + +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +reselect@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.4: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restructure@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/restructure/-/restructure-3.0.2.tgz#e6b2fad214f78edee21797fa8160fef50eb9b49a" + integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw== + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rgbcolor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" + integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw== + +rope-sequence@^1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" + integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== + +rspack-resolver@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rspack-resolver/-/rspack-resolver-1.2.2.tgz#f4f8f740246c59bc83525f830aca628b71843e8a" + integrity sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw== + optionalDependencies: + "@unrs/rspack-resolver-binding-darwin-arm64" "1.2.2" + "@unrs/rspack-resolver-binding-darwin-x64" "1.2.2" + "@unrs/rspack-resolver-binding-freebsd-x64" "1.2.2" + "@unrs/rspack-resolver-binding-linux-arm-gnueabihf" "1.2.2" + "@unrs/rspack-resolver-binding-linux-arm64-gnu" "1.2.2" + "@unrs/rspack-resolver-binding-linux-arm64-musl" "1.2.2" + "@unrs/rspack-resolver-binding-linux-x64-gnu" "1.2.2" + "@unrs/rspack-resolver-binding-linux-x64-musl" "1.2.2" + "@unrs/rspack-resolver-binding-wasm32-wasi" "1.2.2" + "@unrs/rspack-resolver-binding-win32-arm64-msvc" "1.2.2" + "@unrs/rspack-resolver-binding-win32-x64-msvc" "1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +scheduler@0.25.0-rc-603e6108-20241029: + version "0.25.0-rc-603e6108-20241029" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-603e6108-20241029.tgz#684dd96647e104d23e0d29a37f18937daf82df19" + integrity sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA== + +scheduler@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" + integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.6.0, semver@^7.6.3: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +sharp@^0.33.5: + version "0.33.5" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e" + integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== + dependencies: + color "^4.2.3" + detect-libc "^2.0.3" + semver "^7.6.3" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.33.5" + "@img/sharp-darwin-x64" "0.33.5" + "@img/sharp-libvips-darwin-arm64" "1.0.4" + "@img/sharp-libvips-darwin-x64" "1.0.4" + "@img/sharp-libvips-linux-arm" "1.0.5" + "@img/sharp-libvips-linux-arm64" "1.0.4" + "@img/sharp-libvips-linux-s390x" "1.0.4" + "@img/sharp-libvips-linux-x64" "1.0.4" + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + "@img/sharp-linux-arm" "0.33.5" + "@img/sharp-linux-arm64" "0.33.5" + "@img/sharp-linux-s390x" "0.33.5" + "@img/sharp-linux-x64" "0.33.5" + "@img/sharp-linuxmusl-arm64" "0.33.5" + "@img/sharp-linuxmusl-x64" "0.33.5" + "@img/sharp-wasm32" "0.33.5" + "@img/sharp-win32-ia32" "0.33.5" + "@img/sharp-win32-x64" "0.33.5" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +simplebar-core@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/simplebar-core/-/simplebar-core-1.3.0.tgz#166cfbb4c1a2dc0a60833fe8e1fd590cdb32158b" + integrity sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA== + dependencies: + lodash "^4.17.21" + +simplebar-react@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-3.3.0.tgz#7170f29f0ea785c6881db81a8447c408fbc9056e" + integrity sha512-sxzy+xRuU41He4tT4QLGYutchtOuye/xxVeq7xhyOiwMiHNK1ZpvbOTyy+7P0i7gfpXLGTJ8Bep8+4Mhdgtz/g== + dependencies: + simplebar-core "^1.3.0" + +simplebar@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-6.3.0.tgz#5581558e532d9ecf6e42faef932d81537f94d3ca" + integrity sha512-SQJfKSvUPJxlOhYCpswEn5ke5WQGsgDZNmpScWL+MKXgYpCDTq1bGiv6uWXwSHMYTkMco32fDUL35sVwCMmzCw== + dependencies: + simplebar-core "^1.3.0" + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable-hash@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== + +stackblur-canvas@^2.0.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6" + integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ== + +state-local@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" + integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-to-js@^1.0.0: + version "1.1.16" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.16.tgz#e6bd6cd29e250bcf8fa5e6591d07ced7575dbe7a" + integrity sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw== + dependencies: + style-to-object "1.0.8" + +style-to-object@1.0.8: + 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" + +styled-jsx@5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" + integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== + dependencies: + client-only "0.0.1" + +stylis-plugin-rtl@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/stylis-plugin-rtl/-/stylis-plugin-rtl-2.1.1.tgz#16707809c878494835f77e5d4aadaae3db639b5e" + integrity sha512-q6xIkri6fBufIO/sV55md2CbgS5c6gg9EhSVATtHHCdOnbN/jcI0u3lYhNVeuI65c4lQPo67g8xmq5jrREvzlg== + dependencies: + cssjanus "^2.0.1" + +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-arc-to-cubic-bezier@^3.0.0, svg-arc-to-cubic-bezier@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6" + integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g== + +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svg-pathdata@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac" + integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw== + +svgo@^3.0.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.0.0" + +text-segmentation@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" + integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== + dependencies: + utrie "^1.0.2" + +through2@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" + integrity sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ== + dependencies: + readable-stream "~1.0.17" + xtend "~2.1.1" + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tiny-case@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" + integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== + +tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== + +tiny-invariant@^1.0.6: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tinyglobby@^0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" + +tippy.js@^6.3.7: + version "6.3.7" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" + integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== + dependencies: + "@popperjs/core" "^2.9.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + +ts-api-utils@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tss-react@^4.8.3: + version "4.9.15" + resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-4.9.15.tgz#a26fc24889a462ab4858094bc5b33cdda36e45ab" + integrity sha512-rLiEmDwUtln9RKTUR/ZPYBrufF0Tq/PFggO1M7P8M3/FAcodPQ746Ug9MCEFkURKDlntN17+Oja0DMMz5yBnsQ== + dependencies: + "@emotion/cache" "*" + "@emotion/serialize" "*" + "@emotion/utils" "*" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-fest@^3.12.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typescript@5.8.2: + version "5.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" + integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== + +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== + +unicode-properties@^1.4.0, unicode-properties@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" + integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== + dependencies: + base64-js "^1.3.0" + unicode-trie "^2.0.0" + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.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" + +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@^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-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@^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@^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" + +update-browserslist-db@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-memo-one@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" + integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== + +use-sync-external-store@^1, use-sync-external-store@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" + integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utrie@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" + integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== + dependencies: + base64-arraybuffer "^1.0.2" + +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@^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-compatible-readable-stream@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz#27267aebbdc9893c0ddf65a421279cbb1e31d8cd" + integrity sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +w3c-keyname@^2.2.0: + version "2.2.8" + resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" + integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== + dependencies: + object-keys "~0.4.0" + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yoga-layout@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/yoga-layout/-/yoga-layout-3.2.1.tgz#d2d1ba06f0e81c2eb650c3e5ad8b0b4adde1e843" + integrity sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ== + +yup@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.6.1.tgz#8defcff9daaf9feac178029c0e13b616563ada4b" + integrity sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA== + dependencies: + property-expr "^2.0.5" + tiny-case "^1.0.3" + toposort "^2.0.2" + type-fest "^2.19.0" + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From ae5c2b249c0b345f2e3881150edde756645f73dd Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 22:58:11 -0400 Subject: [PATCH 0511/1184] Update yarn.lock --- yarn.lock | 211 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 121 insertions(+), 90 deletions(-) diff --git a/yarn.lock b/yarn.lock index 16f8f6ee4de9..c473d1ba10c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1309,9 +1309,9 @@ prop-types "^15.8.1" "@mui/core-downloads-tracker@^6.4.7": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.8.tgz#ffabbdce0e7b341e9c2906bb06a00b34c9d15e05" - integrity sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw== + version "6.4.9" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.9.tgz#6f9f6a220b22ee24a70bbe73e5ec6cb7222a0713" + integrity sha512-3UvsvOjqZJcokHKSzA1lskj2XMM/G5GBgge6ykwmAij2pGGxydGxAXirQlLaeoMwTKDS6BcrLqPZyPVwzri20A== "@mui/icons-material@6.4.7": version "6.4.7" @@ -1360,10 +1360,10 @@ "@mui/utils" "^6.4.8" prop-types "^15.8.1" -"@mui/styled-engine@^6.4.6", "@mui/styled-engine@^6.4.8": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.4.8.tgz#a454115ab349cf729510c107f2564fd1e23c385a" - integrity sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw== +"@mui/styled-engine@^6.4.6", "@mui/styled-engine@^6.4.9": + version "6.4.9" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.4.9.tgz#d6d6b5f180466001284f897ff7d7010a8e329497" + integrity sha512-qZRWO0cT407NI4ZRjZcH+1SOu8f3JzLHqdMlg52GyEufM9pkSZFnf7xjpwnlvkixcGjco6wLlMD0VB43KRcBuA== dependencies: "@babel/runtime" "^7.26.0" "@emotion/cache" "^11.13.5" @@ -1387,20 +1387,27 @@ prop-types "^15.8.1" "@mui/system@^6.4.7": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.8.tgz#e4ecb65677c2268959effad1f4f885d9b836c09b" - integrity sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA== + version "6.4.9" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.4.9.tgz#19575feb3fc7b465b082c65c9c737e1a40ed06ef" + integrity sha512-JOj7efXGtZn+NIzX8KDyMpO1QKc0DhilPBsxvci1xAvI1e5AtAtfzrEuV5ZvN+lz2BDuzngCWlllnqQ/cg40RQ== dependencies: "@babel/runtime" "^7.26.0" "@mui/private-theming" "^6.4.8" - "@mui/styled-engine" "^6.4.8" + "@mui/styled-engine" "^6.4.9" "@mui/types" "~7.2.24" "@mui/utils" "^6.4.8" clsx "^2.1.1" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.21", "@mui/types@~7.2.24": +"@mui/types@^7.2.21": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.4.0.tgz#2304bab870721de1842c9ee0ff13fe8be6b8d0ed" + integrity sha512-TxJ4ezEeedWHBjOmLtxI203a9DII9l4k83RXmz1PYSAmnyEcK2PglTNmJGxswC/wM5cdl9ap2h8lnXvt2swAGQ== + dependencies: + "@babel/runtime" "^7.26.10" + +"@mui/types@~7.2.24": version "7.2.24" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== @@ -2200,9 +2207,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "22.13.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.13.tgz#5e7d110fb509b0d4a43fbf48fa9d6e0f83e1b1e7" - integrity sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ== + version "22.13.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.14.tgz#70d84ec91013dcd2ba2de35532a5a14c2b4cc912" + integrity sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w== dependencies: undici-types "~6.20.0" @@ -2368,62 +2375,82 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== -"@unrs/rspack-resolver-binding-darwin-arm64@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.2.2.tgz#4a40be18ae1d5a417ca9246b0e9c7eda11a49998" - integrity sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw== +"@unrs/resolver-binding-darwin-arm64@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.3.2.tgz#e2394af11511ed50025f890b3bbb83fc99c26e72" + integrity sha512-ddnlXgRi0Fog5+7U5Q1qY62wl95Q1lB4tXQX1UIA9YHmRCHN2twaQW0/4tDVGCvTVEU3xEayU7VemEr7GcBYUw== -"@unrs/rspack-resolver-binding-darwin-x64@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.2.2.tgz#f1d9226724fa4f47f0eaab50fb046568e29d68e0" - integrity sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg== +"@unrs/resolver-binding-darwin-x64@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.3.2.tgz#e971ef77c16ec295f4183dbc3b4d2498f81593de" + integrity sha512-tnl9xoEeg503jis+LW5cuq4hyLGQyqaoBL8VdPSqcewo/FL1C8POHbzl+AL25TidWYJD+R6bGUTE381kA1sT9w== -"@unrs/rspack-resolver-binding-freebsd-x64@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.2.2.tgz#3f14520900a130bf1b30922a7be0024968506e8c" - integrity sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA== +"@unrs/resolver-binding-freebsd-x64@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.3.2.tgz#89e0ee4d86c4d5d55d7b3c9b555a1e21946bdd13" + integrity sha512-zyPn9LFCCjhKPeCtECZaiMUgkYN/VpLb4a9Xv7QriJmTaQxsuDtXqOHifrzUXIhorJTyS+5MOKDuNL0X9I4EHA== -"@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.2.2.tgz#7aa5ae2d6c762b0737694b48cd069629dd205c0c" - integrity sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw== +"@unrs/resolver-binding-linux-arm-gnueabihf@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.3.2.tgz#f26b076e3de838161f8163cc81146cf7b959b06c" + integrity sha512-UWx56Wh59Ro69fe+Wfvld4E1n9KG0e3zeouWLn8eSasyi/yVH/7ZW3CLTVFQ81oMKSpXwr5u6RpzttDXZKiO4g== -"@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.2.2.tgz#1422b244db1ff7eb79d74260d25dac976c423e91" - integrity sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ== +"@unrs/resolver-binding-linux-arm-musleabihf@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.3.2.tgz#8b4effb38f066c9058ab3ab099ecc7526f7bb8cf" + integrity sha512-VYGQXsOEJtfaoY2fOm8Z9ii5idFaHFYlrq3yMFZPaFKo8ufOXYm8hnfru7qetbM9MX116iWaPC0ZX5sK+1Dr+g== -"@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.2.2.tgz#9cc30a98b25b704b3d3bb17b9932a24d39049719" - integrity sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ== +"@unrs/resolver-binding-linux-arm64-gnu@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.3.2.tgz#77fc9bae5f0e481d226fe30c853e9b8c3542639c" + integrity sha512-3zP420zxJfYPD1rGp2/OTIBxF8E3+/6VqCG+DEO6kkDgBiloa7Y8pw1o7N9BfgAC+VC8FPZsFXhV2lpx+lLRMQ== -"@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.2.2.tgz#1ce389a2317c96276ceec82de4e6e325974946a7" - integrity sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw== +"@unrs/resolver-binding-linux-arm64-musl@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.3.2.tgz#1a749cb3f5b54044828161317f67f19d4b50cd73" + integrity sha512-ZWjSleUgr88H4Kei7yT4PlPqySTuWN1OYDDcdbmMCtLWFly3ed+rkrcCb3gvqXdDbYrGOtzv3g2qPEN+WWNv5Q== -"@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.2.2.tgz#6d262acedac6d6e3d85c2d370de47e8e669cc316" - integrity sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg== +"@unrs/resolver-binding-linux-ppc64-gnu@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.3.2.tgz#d4b0cccbaff413cfd586eefe9f0507d376af1b16" + integrity sha512-p+5OvYJ2UOlpjes3WfBlxyvQok2u26hLyPxLFHkYlfzhZW0juhvBf/tvewz1LDFe30M7zL9cF4OOO5dcvtk+cw== -"@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.2.2.tgz#72bf01b52c5e2d567b5f90ee842cde674e0356c7" - integrity sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog== +"@unrs/resolver-binding-linux-s390x-gnu@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.3.2.tgz#d031764866b1cf0bdbcf153704d2515072f8b62a" + integrity sha512-yweY7I6SqNn3kvj6vE4PQRo7j8Oz6+NiUhmgciBNAUOuI3Jq0bnW29hbHJdxZRSN1kYkQnSkbbA1tT8VnK816w== + +"@unrs/resolver-binding-linux-x64-gnu@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.3.2.tgz#9b859eb8afb094260041b93afc687e2d7426c621" + integrity sha512-fNIvtzJcGN9hzWTIayrTSk2+KHQrqKbbY+I88xMVMOFV9t4AXha4veJdKaIuuks+2JNr6GuuNdsL7+exywZ32w== + +"@unrs/resolver-binding-linux-x64-musl@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.3.2.tgz#e382ce3b9e91a333eb4cbbdea852116ff18ffd7a" + integrity sha512-OaFEw8WAjiwBGxutQgkWhoAGB5BQqZJ8Gjt/mW+m6DWNjimcxU22uWCuEtfw1CIwLlKPOzsgH0429fWmZcTGkg== + +"@unrs/resolver-binding-wasm32-wasi@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.3.2.tgz#ad6afbbc53cec1fcfc22cb57a325b66f07b87f75" + integrity sha512-u+sumtO7M0AGQ9bNQrF4BHNpUyxo23FM/yXZfmVAicTQ+mXtG06O7pm5zQUw3Mr4jRs2I84uh4O0hd8bdouuvQ== dependencies: "@napi-rs/wasm-runtime" "^0.2.7" -"@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.2.2.tgz#e1a74655a42d48d2c005dd69ba148547167e1701" - integrity sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg== +"@unrs/resolver-binding-win32-arm64-msvc@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.3.2.tgz#5457aaf7abde1b9ca331f029ee6a4371db3f98a5" + integrity sha512-ZAJKy95vmDIHsRFuPNqPQRON8r2mSMf3p9DoX+OMOhvu2c8OXGg8MvhGRf3PNg45ozRrPdXDnngURKgaFfpGoQ== -"@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.2.2.tgz#ac441b3bd8cf97b7d3d35f4e7f9792f8e257e729" - integrity sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw== +"@unrs/resolver-binding-win32-ia32-msvc@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.3.2.tgz#ea8186a2cb6b4a84893ffdb5974e536ddf030972" + integrity sha512-nQG4YFAS2BLoKVQFK/FrWJvFATI5DQUWQrcPcsWG9Ve5BLLHZuPOrJ2SpAJwLXQrRv6XHSFAYGI8wQpBg/CiFA== + +"@unrs/resolver-binding-win32-x64-msvc@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.3.2.tgz#76d02a262d15865bb7ea51060c6c816ca96aecaf" + integrity sha512-XBWpUP0mHya6yGBwNefhyEa6V7HgYKCxEAY4qhTm/PcAQyBPNmjj97VZJOJkVdUsyuuii7xmq0pXWX/c2aToHQ== "@yr/monotone-cubic-spline@^1.0.3": version "1.0.3" @@ -3314,9 +3341,9 @@ duplexer2@^0.1.2: readable-stream "^2.0.2" electron-to-chromium@^1.5.73: - version "1.5.123" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz#fae5bdba0ba27045895176327aa79831aba0790c" - integrity sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA== + version "1.5.127" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.127.tgz#350a16aa09fb7f070ad118fade31260a5c173733" + integrity sha512-Ke5OggqOtEqzCzcUyV+9jgO6L6sv1gQVKGtSExXHjD/FK0p4qzPZbrDsrCdy0DptcQprD0V80RCBYSWLMhTTgQ== eml-parse-js@^1.2.0-beta.0: version "1.2.0-beta.0" @@ -3521,17 +3548,17 @@ eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-import-resolver-typescript@^3.5.2: - version "3.9.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.9.1.tgz#0ab8d0ed911e875684a96976a118adee5d1c9daa" - integrity sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw== + version "3.10.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.0.tgz#5bca4c579e17174e95bf67526b424d07b46c352e" + integrity sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ== dependencies: "@nolyfill/is-core-module" "1.0.39" debug "^4.4.0" get-tsconfig "^4.10.0" - is-bun-module "^1.3.0" - rspack-resolver "^1.1.0" + is-bun-module "^2.0.0" stable-hash "^0.0.5" tinyglobby "^0.2.12" + unrs-resolver "^1.3.2" eslint-module-utils@^2.12.0: version "2.12.0" @@ -4339,12 +4366,12 @@ is-boolean-object@^1.2.1: call-bound "^1.0.3" has-tostringtag "^1.0.2" -is-bun-module@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.3.0.tgz#ea4d24fdebfcecc98e81bcbcb506827fee288760" - integrity sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA== +is-bun-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-2.0.0.tgz#4d7859a87c0fcac950c95e666730e745eae8bddd" + integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== dependencies: - semver "^7.6.3" + semver "^7.7.1" is-callable@^1.2.7: version "1.2.7" @@ -6296,23 +6323,6 @@ rope-sequence@^1.3.0: resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== -rspack-resolver@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rspack-resolver/-/rspack-resolver-1.2.2.tgz#f4f8f740246c59bc83525f830aca628b71843e8a" - integrity sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw== - optionalDependencies: - "@unrs/rspack-resolver-binding-darwin-arm64" "1.2.2" - "@unrs/rspack-resolver-binding-darwin-x64" "1.2.2" - "@unrs/rspack-resolver-binding-freebsd-x64" "1.2.2" - "@unrs/rspack-resolver-binding-linux-arm-gnueabihf" "1.2.2" - "@unrs/rspack-resolver-binding-linux-arm64-gnu" "1.2.2" - "@unrs/rspack-resolver-binding-linux-arm64-musl" "1.2.2" - "@unrs/rspack-resolver-binding-linux-x64-gnu" "1.2.2" - "@unrs/rspack-resolver-binding-linux-x64-musl" "1.2.2" - "@unrs/rspack-resolver-binding-wasm32-wasi" "1.2.2" - "@unrs/rspack-resolver-binding-win32-arm64-msvc" "1.2.2" - "@unrs/rspack-resolver-binding-win32-x64-msvc" "1.2.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6381,7 +6391,7 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.6.0, semver@^7.6.3: +semver@^7.6.0, semver@^7.6.3, semver@^7.7.1: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== @@ -7050,6 +7060,27 @@ unist-util-visit@^5.0.0: unist-util-is "^6.0.0" unist-util-visit-parents "^6.0.0" +unrs-resolver@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.3.2.tgz#7c1dc0adabb1c3971c8c5cbdd8c1c2f742286e6d" + integrity sha512-ZKQBC351Ubw0PY8xWhneIfb6dygTQeUHtCcNGd0QB618zabD/WbFMYdRyJ7xeVT+6G82K5v/oyZO0QSHFtbIuw== + optionalDependencies: + "@unrs/resolver-binding-darwin-arm64" "1.3.2" + "@unrs/resolver-binding-darwin-x64" "1.3.2" + "@unrs/resolver-binding-freebsd-x64" "1.3.2" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.3.2" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.3.2" + "@unrs/resolver-binding-linux-arm64-gnu" "1.3.2" + "@unrs/resolver-binding-linux-arm64-musl" "1.3.2" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.3.2" + "@unrs/resolver-binding-linux-s390x-gnu" "1.3.2" + "@unrs/resolver-binding-linux-x64-gnu" "1.3.2" + "@unrs/resolver-binding-linux-x64-musl" "1.3.2" + "@unrs/resolver-binding-wasm32-wasi" "1.3.2" + "@unrs/resolver-binding-win32-arm64-msvc" "1.3.2" + "@unrs/resolver-binding-win32-ia32-msvc" "1.3.2" + "@unrs/resolver-binding-win32-x64-msvc" "1.3.2" + update-browserslist-db@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" From 901dd5253b316c812470e9935e33276e46ce9f23 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 23:10:12 -0400 Subject: [PATCH 0512/1184] pretty filters --- src/pages/tenant/standards/compare/index.js | 47 +++++++++++---------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index e48d4be51d71..151eaee6b3a6 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -24,6 +24,7 @@ import { Sync, FilterAlt, Close, + Search, } from "@mui/icons-material"; import { ArrowLeftIcon } from "@mui/x-date-pickers"; import standards from "/src/data/standards.json"; @@ -36,10 +37,7 @@ import { useRouter } from "next/router"; import { useDialog } from "../../../../hooks/use-dialog"; import { Grid } from "@mui/system"; import DOMPurify from "dompurify"; -import { - ClockIcon, - MagnifyingGlassIcon, -} from "@heroicons/react/24/outline"; +import { ClockIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline"; const Page = () => { const router = useRouter(); @@ -337,32 +335,35 @@ const Page = () => { }} > - - - setSearchQuery(e.target.value)} - InputProps={{ - endAdornment: searchQuery && ( - - setSearchQuery("")} - aria-label="Clear search" - > - - - - ), + slotProps={{ + input: { + startAdornment: ( + + + + ), + endAdornment: searchQuery && ( + + + setSearchQuery("")} + aria-label="Clear search" + > + + + + + ), + }, }} /> From 59a4d194ee34df4029135fbe3080c51f7ee2c5f8 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 23:15:54 -0400 Subject: [PATCH 0513/1184] Update index.js --- src/pages/tenant/standards/compare/index.js | 32 ++++++++++++--------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 151eaee6b3a6..dbad84aaf5f2 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -572,13 +572,15 @@ const Page = () => { {standard?.standardName} - + + + @@ -699,13 +701,15 @@ const Page = () => { {currentTenant} - + + + Date: Thu, 27 Mar 2025 23:19:25 -0400 Subject: [PATCH 0514/1184] Update index.js --- src/pages/tenant/standards/compare/index.js | 138 ++++++++++---------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index dbad84aaf5f2..b5537a6db6f3 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -324,75 +324,6 @@ const Page = () => { }} /> )} - - - - setSearchQuery(e.target.value)} - slotProps={{ - input: { - startAdornment: ( - - - - ), - endAdornment: searchQuery && ( - - - setSearchQuery("")} - aria-label="Clear search" - > - - - - - ), - }, - }} - /> - - - - - - - - {comparisonApi.isFetching && ( <> @@ -471,6 +402,75 @@ const Page = () => { )} + + + + setSearchQuery(e.target.value)} + slotProps={{ + input: { + startAdornment: ( + + + + ), + endAdornment: searchQuery && ( + + + setSearchQuery("")} + aria-label="Clear search" + > + + + + + ), + }, + }} + /> + + + + + + + + {comparisonApi.isError && ( From ca1ab19e58ea04fb2e9a6b3e1bdf9908d5107bbd Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 23:30:23 -0400 Subject: [PATCH 0515/1184] filter counts --- src/pages/tenant/standards/compare/index.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index b5537a6db6f3..d38776e56354 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -254,6 +254,10 @@ const Page = () => { return matchesFilter && matchesSearch; }); + const allCount = comparisonData?.length || 0; + const compliantCount = comparisonData?.filter((standard) => standard.complianceStatus === "Compliant").length || 0; + const nonCompliantCount = comparisonData?.filter((standard) => standard.complianceStatus === "Non-Compliant").length || 0; + return ( @@ -455,19 +459,19 @@ const Page = () => { variant={filter === "all" ? "contained" : "outlined"} onClick={() => setFilter("all")} > - All + All ({allCount}) From f9870745180712d3717fa507c3a0b26adea2e49f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 23:42:06 -0400 Subject: [PATCH 0516/1184] move info to chips --- src/pages/tenant/standards/compare/index.js | 44 ++++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index d38776e56354..5428b4a4be23 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -25,6 +25,7 @@ import { FilterAlt, Close, Search, + FactCheck, } from "@mui/icons-material"; import { ArrowLeftIcon } from "@mui/x-date-pickers"; import standards from "/src/data/standards.json"; @@ -38,6 +39,7 @@ import { useDialog } from "../../../../hooks/use-dialog"; import { Grid } from "@mui/system"; import DOMPurify from "dompurify"; import { ClockIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline"; +import { Clock } from "@mui/x-date-pickers/TimeClock/Clock"; const Page = () => { const router = useRouter(); @@ -255,8 +257,11 @@ const Page = () => { }); const allCount = comparisonData?.length || 0; - const compliantCount = comparisonData?.filter((standard) => standard.complianceStatus === "Compliant").length || 0; - const nonCompliantCount = comparisonData?.filter((standard) => standard.complianceStatus === "Non-Compliant").length || 0; + const compliantCount = + comparisonData?.filter((standard) => standard.complianceStatus === "Compliant").length || 0; + const nonCompliantCount = + comparisonData?.filter((standard) => standard.complianceStatus === "Non-Compliant").length || 0; + const compliancePercentage = allCount > 0 ? Math.round((compliantCount / allCount) * 100) : 0; return ( @@ -291,17 +296,36 @@ const Page = () => { {comparisonApi.data?.find((comparison) => comparison.RowKey === currentTenant) && ( - - - - - Updated on{" "} - {new Date( + + + + } + label={`${compliancePercentage}% Compliant`} + variant="outlined" + size="small" + color={ + compliancePercentage === 100 + ? "success" + : compliancePercentage >= 50 + ? "warning" + : "error" + } + sx={{ ml: 2 }} + /> + + + + } + label={`Updated on ${new Date( comparisonApi.data.find( (comparison) => comparison.RowKey === currentTenant ).LastRefresh - ).toLocaleString()} - + ).toLocaleString()}`} + /> )} From ab2da4acad6b276def2bb14137a9e9427cf7340f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 23:45:52 -0400 Subject: [PATCH 0517/1184] Update index.js --- src/pages/tenant/standards/compare/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 5428b4a4be23..5723ff4a37ea 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -38,8 +38,7 @@ import { useRouter } from "next/router"; import { useDialog } from "../../../../hooks/use-dialog"; import { Grid } from "@mui/system"; import DOMPurify from "dompurify"; -import { ClockIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline"; -import { Clock } from "@mui/x-date-pickers/TimeClock/Clock"; +import { ClockIcon } from "@heroicons/react/24/outline"; const Page = () => { const router = useRouter(); From 8cd3c3b768fcbc6241ad8282f0007a5bb16ba3dd Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 27 Mar 2025 23:59:08 -0400 Subject: [PATCH 0518/1184] Update index.js --- src/pages/tenant/standards/compare/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 5723ff4a37ea..7b96932616fe 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -319,6 +319,7 @@ const Page = () => { } + size="small" label={`Updated on ${new Date( comparisonApi.data.find( (comparison) => comparison.RowKey === currentTenant From 36a90c1267ab975a29dcc74d4111ab6faa606308 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 28 Mar 2025 12:13:16 +0100 Subject: [PATCH 0519/1184] https://github.com/KelvinTegelaar/CIPP/issues/3759 --- .../identity/administration/groups/index.js | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/pages/identity/administration/groups/index.js b/src/pages/identity/administration/groups/index.js index 0df2e951e942..ce0fd6b290f8 100644 --- a/src/pages/identity/administration/groups/index.js +++ b/src/pages/identity/administration/groups/index.js @@ -3,7 +3,15 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Layout as DashboardLayout } from "/src/layouts/index.js"; import Link from "next/link"; import { TrashIcon } from "@heroicons/react/24/outline"; -import { Visibility, VisibilityOff, GroupAdd, Edit, LockOpen, Lock } from "@mui/icons-material"; +import { + Visibility, + VisibilityOff, + GroupAdd, + Edit, + LockOpen, + Lock, + GroupSharp, +} from "@mui/icons-material"; const Page = () => { const pageTitle = "Groups"; @@ -72,6 +80,22 @@ const Page = () => { "Are you sure you want to allow messages from people inside and outside the organisation? Remember this will not work if the group is AD Synched.", multiPost: false, }, + { + label: "Create template based on group", + type: "POST", + url: "/api/AddGroupTemplate", + icon: , + data: { + Displayname: "displayname", + Description: "description", + GroupType: "calculatedGroupType", + MembershipRules: "membershipRule", + allowExternal: "allowExternal", + username: "mailNickname", + }, + confirmText: "Are you sure you want to create a template based on this group?", + multiPost: false, + }, { label: "Delete Group", type: "POST", From 61b46907288b3ce168a15cdefe3df8f6cc3ee3f1 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 28 Mar 2025 12:50:40 +0100 Subject: [PATCH 0520/1184] add punycode --- src/components/CippCards/CippDomainCards.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/CippCards/CippDomainCards.jsx b/src/components/CippCards/CippDomainCards.jsx index 286e7cc35808..03fd08306afc 100644 --- a/src/components/CippCards/CippDomainCards.jsx +++ b/src/components/CippCards/CippDomainCards.jsx @@ -28,6 +28,7 @@ import { CippCodeBlock } from "/src/components/CippComponents/CippCodeBlock"; import { CippOffCanvas } from "../CippComponents/CippOffCanvas"; import { CippPropertyListCard } from "./CippPropertyListCard"; import { getCippFormatting } from "../../utils/get-cipp-formatting"; +import punycode from "punycode"; const ResultList = ({ passes = [], warns = [], fails = [] }) => ( @@ -395,7 +396,8 @@ export const CippDomainCards = ({ domain: propDomain = "", fullwidth = false }) }, [propDomain, setValue]); const onSubmit = (values) => { - setDomain(values.domain); + const punycodedDomain = punycode.toASCII(values.domain); + setDomain(punycodedDomain); setSelector(values.dkimSelector); setSpfRecord(values.spfRecord); setSubdomains(values.subdomains); From b1a19a7f91d5169c3f1b9d15c1c3b93102bbd630 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 28 Mar 2025 12:50:50 +0100 Subject: [PATCH 0521/1184] add punycode for domains --- package.json | 1 + yarn.lock | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 9f1f4aeba9f5..879b3c54028c 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "nprogress": "0.2.0", "numeral": "2.0.6", "prop-types": "15.8.1", + "punycode": "^2.3.1", "react": "19.0.0", "react-apexcharts": "1.7.0", "react-beautiful-dnd": "13.1.1", diff --git a/yarn.lock b/yarn.lock index c473d1ba10c5..dcb80c7f0332 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5780,7 +5780,7 @@ punycode.js@^2.3.1: resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== From d89c55c85b79f32dcb0fcc71f4dd588667895dfc Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 28 Mar 2025 08:59:33 -0400 Subject: [PATCH 0522/1184] fix firefox bug --- .../CippComponents/CippApiDialog.jsx | 42 +++++++++---------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index f399f3743092..865e28e38d6c 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -282,40 +282,36 @@ export const CippApiDialog = (props) => { .reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj); }; - // Handling external link navigation const [linkClicked, setLinkClicked] = useState(false); useEffect(() => { - if (api.link && !linkClicked) { - const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { - return getNestedValue(row, key) || `[${key}]`; - }); - - if (!linkWithRowData.startsWith("/")) { - setLinkClicked(true); - window.open(linkWithRowData, api.target || "_blank"); - } - } - }, [api.link, linkClicked]); + if (api.link && !linkClicked && row && Object.keys(row).length > 0) { + const timeoutId = setTimeout(() => { + const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { + return getNestedValue(row, key) || `[${key}]`; + }); - // Handling internal link navigation - if (api.link && !linkClicked) { - const linkWithRowData = api.link.replace(/\[([^\]]+)\]/g, (_, key) => { - return getNestedValue(row, key) || `[${key}]`; - }); + if (linkWithRowData.startsWith("/")) { + // Internal link navigation + setLinkClicked(true); + router.push(linkWithRowData, undefined, { shallow: true }); + } else { + // External link navigation + setLinkClicked(true); + window.open(linkWithRowData, api.target || "_blank"); + } + }, 0); // Delay execution to the next event loop cycle - if (linkWithRowData.startsWith("/")) { - router.push(linkWithRowData, undefined, { shallow: true }); - setLinkClicked(true); + return () => clearTimeout(timeoutId); } - } + }, [api.link, linkClicked, row, router]); useEffect(() => { - if (api.noConfirm) { + if (api.noConfirm && !api.link) { formHook.handleSubmit(onSubmit)(); // Submits the form on mount createDialog.handleClose(); // Closes the dialog after submitting } - }, [api.noConfirm]); // Run effect only when api.noConfirm changes + }, [api.noConfirm, api.link]); // Run effect when noConfirm or link changes const handleClose = () => { createDialog.handleClose(); From 765f53be7003ed5e3c8e50eaedd90d77df984ea2 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 28 Mar 2025 16:07:16 -0400 Subject: [PATCH 0523/1184] up version --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index aaa3822d959a..e13bd0cafa30 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.4.1" + "version": "7.4.2" } From 9a0c926adebfd8766f773733d0daca6717e08498 Mon Sep 17 00:00:00 2001 From: Esco Date: Fri, 28 Mar 2025 14:54:06 +0100 Subject: [PATCH 0524/1184] feat: Spoof Intelligence standard shameful typo --- src/data/standards.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 71d668bf8bca..d47ac7edca66 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -2099,6 +2099,28 @@ "powershellEquivalent": "Set-MalwareFilterPolicy or New-MalwareFilterPolicy", "recommendedBy": ["CIS"] }, + { + "name": "standards.PhishSimSpoofIntelligence", + "cat": "Defender Standards", + "tag": [], + "helpText": "This adds allowed domains to the Spoof Intelligence Allow/Block List.", + "addedComponent": [ + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": false, + "label": "Allowed Domains", + "name": "standards.PhishSimSpoofIntelligence.AllowedDomains" + } + ], + "label": "Add allowed domains to Spoof Intelligence", + "impact": "Medium Impact", + "impactColour": "info", + "addedDate": "2025-03-28", + "powershellEquivalent": "New-TenantAllowBlockListSpoofItems", + "recommendedBy": [] + }, { "name": "standards.SpamFilterPolicy", "cat": "Defender Standards", From 9921e1b7df3725e933915fdcd4aeff34292bd2a4 Mon Sep 17 00:00:00 2001 From: Esco Date: Mon, 31 Mar 2025 14:50:11 +0200 Subject: [PATCH 0525/1184] feat: DefaultPlatformRestrictions standard Update standards.json --- src/data/standards.json | 74 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 71d668bf8bca..bda027c24276 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -2545,6 +2545,80 @@ "powershellEquivalent": "Graph API", "recommendedBy": [] }, + { + "name": "standards.DefaultPlatformRestrictions", + "cat": "Intune Standards", + "tag": [], + "helpText": "Sets the default platform restrictions for enrolling devices into Intune. Note: Do not block personally owned if platform is blocked.", + "addedComponent": [ + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.platformAndroidForWorkBlocked", + "label": "Block platform Android Enterprise (work profile)", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.personalAndroidForWorkBlocked", + "label": "Block personally owned Android Enterprise (work profile)", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.platformAndroidBlocked", + "label": "Block platform Android", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.personalAndroidBlocked", + "label": "Block personally owned Android", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.platformiOSBlocked", + "label": "Block platform iOS", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.personaliOSBlocked", + "label": "Block personally owned iOS", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.platformMacOSBlocked", + "label": "Block platform macOS", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.personalMacOSBlocked", + "label": "Block personally owned macOS", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.platformWindowsBlocked", + "label": "Block platform Windows", + "default": false + }, + { + "type": "switch", + "name": "standards.DefaultPlatformRestrictions.personalWindowsBlocked", + "label": "Block personally owned Windows", + "default": false + } + ], + "label": "Device enrollment restrictions", + "impact": "Low Impact", + "impactColour": "info", + "addedDate": "2025-04-01", + "powershellEquivalent": "Graph API", + "recommendedBy": [] + }, { "name": "standards.intuneDeviceReg", "cat": "Intune Standards", From fcd89d4830a71233b1f68aa25ecdb83681c97642 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 31 Mar 2025 11:43:53 -0400 Subject: [PATCH 0526/1184] fix multiple link clicks --- src/components/CippComponents/CippApiDialog.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 865e28e38d6c..779cca813dda 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -284,6 +284,10 @@ export const CippApiDialog = (props) => { const [linkClicked, setLinkClicked] = useState(false); + useEffect(() => { + setLinkClicked(false); + }, [api.link]); + useEffect(() => { if (api.link && !linkClicked && row && Object.keys(row).length > 0) { const timeoutId = setTimeout(() => { From ae64d69f25e30f779c45bf2ea6ea7f06f9825ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 31 Mar 2025 20:59:23 +0200 Subject: [PATCH 0527/1184] Add enable/disable mailbox rule actions with confirmation prompts --- .../administration/mailbox-rules/index.js | 33 +++++++++++++++++- .../administration/users/user/exchange.jsx | 34 +++++++++++++++++-- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/pages/email/administration/mailbox-rules/index.js b/src/pages/email/administration/mailbox-rules/index.js index e25ba44d8ae6..8dc0fcceb020 100644 --- a/src/pages/email/administration/mailbox-rules/index.js +++ b/src/pages/email/administration/mailbox-rules/index.js @@ -4,14 +4,45 @@ import { TrashIcon } from "@heroicons/react/24/outline"; import { getCippTranslation } from "../../../../utils/get-cipp-translation"; import { getCippFormatting } from "../../../../utils/get-cipp-formatting"; import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard"; +import { Block, PlayArrow, DeleteForever } from "@mui/icons-material"; const Page = () => { const pageTitle = "Mailbox Rules"; const actions = [ + { + label: "Enable Mailbox Rule", + type: "POST", + icon: , + url: "/api/ExecSetMailboxRule", + data: { + ruleId: "Identity", + userPrincipalName: "UserPrincipalName", + ruleName: "Name", + Enable: true, + }, + condition: (row) => !row.Enabled, + confirmText: "Are you sure you want to enable this mailbox rule?", + multiPost: false, + }, + { + label: "Disable Mailbox Rule", + type: "POST", + icon: , + url: "/api/ExecSetMailboxRule", + data: { + ruleId: "Identity", + userPrincipalName: "UserPrincipalName", + ruleName: "Name", + Disable: true, + }, + condition: (row) => row.Enabled, + confirmText: "Are you sure you want to disable this mailbox rule?", + multiPost: false, + }, { label: "Remove Mailbox Rule", type: "POST", - icon: , + icon: , url: "/api/ExecRemoveMailboxRule", data: { ruleId: "Identity", userPrincipalName: "UserPrincipalName", ruleName: "Name" }, confirmText: "Are you sure you want to remove this mailbox rule?", diff --git a/src/pages/identity/administration/users/user/exchange.jsx b/src/pages/identity/administration/users/user/exchange.jsx index 136636349783..9d3c263f3b95 100644 --- a/src/pages/identity/administration/users/user/exchange.jsx +++ b/src/pages/identity/administration/users/user/exchange.jsx @@ -18,7 +18,7 @@ import CippExchangeSettingsForm from "../../../../../components/CippFormPages/Ci import { useForm } from "react-hook-form"; import { Alert, Button, Collapse, CircularProgress, Typography } from "@mui/material"; import { CippApiResults } from "../../../../../components/CippComponents/CippApiResults"; -import { TrashIcon } from "@heroicons/react/24/outline"; +import { Block, PlayArrow, DeleteForever } from "@mui/icons-material"; import { CippPropertyListCard } from "../../../../../components/CippCards/CippPropertyListCard"; import { getCippTranslation } from "../../../../../utils/get-cipp-translation"; import { getCippFormatting } from "../../../../../utils/get-cipp-formatting"; @@ -188,10 +188,40 @@ const Page = () => { ]; const mailboxRuleActions = [ + { + label: "Enable Mailbox Rule", + type: "POST", + icon: , + url: "/api/ExecSetMailboxRule", + data: { + ruleId: "Identity", + userPrincipalName: graphUserRequest.data?.[0]?.userPrincipalName, + ruleName: "Name", + Enable: true, + }, + condition: (row) => !row.Enabled, + confirmText: "Are you sure you want to enable this mailbox rule?", + multiPost: false, + }, + { + label: "Disable Mailbox Rule", + type: "POST", + icon: , + url: "/api/ExecSetMailboxRule", + data: { + ruleId: "Identity", + userPrincipalName: graphUserRequest.data?.[0]?.userPrincipalName, + ruleName: "Name", + Disable: true, + }, + condition: (row) => row.Enabled, + confirmText: "Are you sure you want to disable this mailbox rule?", + multiPost: false, + }, { label: "Remove Mailbox Rule", type: "POST", - icon: , + icon: , url: "/api/ExecRemoveMailboxRule", data: { ruleId: "Identity", From b3db8ed546c0e3722bd5593f8599378fbd0ef2b9 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 1 Apr 2025 21:15:14 -0400 Subject: [PATCH 0528/1184] object flattening for better CSV export --- src/components/csvExportButton.js | 48 ++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/components/csvExportButton.js b/src/components/csvExportButton.js index c09474b0472c..266dbd443508 100644 --- a/src/components/csvExportButton.js +++ b/src/components/csvExportButton.js @@ -8,32 +8,60 @@ const csvConfig = mkConfig({ useKeysAsHeaders: true, }); +const flattenObject = (obj, parentKey = "") => { + const flattened = {}; + Object.keys(obj).forEach((key) => { + const fullKey = parentKey ? `${parentKey}.${key}` : key; + if (typeof obj[key] === "object" && obj[key] !== null && !Array.isArray(obj[key])) { + Object.assign(flattened, flattenObject(obj[key], fullKey)); + } else if (Array.isArray(obj[key])) { + obj[key].forEach((item, index) => { + if (typeof item === "object" && item !== null) { + Object.assign(flattened, flattenObject(item, `${fullKey}[${index}]`)); + } else { + flattened[`${fullKey}[${index}]`] = item; + } + }); + } else { + flattened[fullKey] = obj[key]; + } + }); + return flattened; +}; + export const CSVExportButton = (props) => { const { rows, columns, reportName, columnVisibility, ...other } = props; const handleExportRows = (rows) => { - const rowData = rows.map((row) => row.original); + const rowData = rows.map((row) => flattenObject(row.original)); const columnKeys = columns.filter((c) => columnVisibility[c.id]).map((c) => c.id); - rowData.forEach((row) => { - Object.keys(row).forEach((key) => { - if (!columnKeys.includes(key)) { - delete row[key]; + + const filterRowData = (row, allowedKeys) => { + const filteredRow = {}; + allowedKeys.forEach((key) => { + if (key in row) { + filteredRow[key] = row[key]; } }); - }); + return filteredRow; + }; + + const filteredData = rowData.map((row) => filterRowData(row, columnKeys)); - //for every existing row, get the valid formatting using getCippFormatting. - const formattedData = rowData.map((row) => { + const formattedData = filteredData.map((row) => { const formattedRow = {}; - Object.keys(row).forEach((key) => { - formattedRow[key] = getCippFormatting(row[key], key, "text", false); + columnKeys.forEach((key) => { + const value = row[key]; + formattedRow[key] = getCippFormatting(value, key, "text", false); }); return formattedRow; }); + const csv = generateCsv(csvConfig)(formattedData); csvConfig["filename"] = `${reportName}`; download(csvConfig)(csv); }; + return ( From 555827057b94c146f562465ae94b236ba8c09846 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 2 Apr 2025 00:32:48 -0400 Subject: [PATCH 0529/1184] handle formatting on nested objects --- src/components/csvExportButton.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/components/csvExportButton.js b/src/components/csvExportButton.js index 266dbd443508..5e7424dad1c8 100644 --- a/src/components/csvExportButton.js +++ b/src/components/csvExportButton.js @@ -15,13 +15,18 @@ const flattenObject = (obj, parentKey = "") => { if (typeof obj[key] === "object" && obj[key] !== null && !Array.isArray(obj[key])) { Object.assign(flattened, flattenObject(obj[key], fullKey)); } else if (Array.isArray(obj[key])) { - obj[key].forEach((item, index) => { - if (typeof item === "object" && item !== null) { - Object.assign(flattened, flattenObject(item, `${fullKey}[${index}]`)); - } else { - flattened[`${fullKey}[${index}]`] = item; - } - }); + // Handle arrays of objects by applying the formatter on each property + flattened[fullKey] = obj[key] + .map((item) => + typeof item === "object" + ? JSON.stringify( + Object.fromEntries( + Object.entries(flattenObject(item)).map(([k, v]) => [k, getCippFormatting(v, k, "text", false)]) + ) + ) + : getCippFormatting(item, fullKey, "text", false) + ) + .join(", "); } else { flattened[fullKey] = obj[key]; } @@ -52,6 +57,7 @@ export const CSVExportButton = (props) => { const formattedRow = {}; columnKeys.forEach((key) => { const value = row[key]; + // Pass flattened data to the formatter for CSV export formattedRow[key] = getCippFormatting(value, key, "text", false); }); return formattedRow; From f0d1ce9cf63b0b6676af9e23ec46849e9989b221 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 2 Apr 2025 12:54:39 -0400 Subject: [PATCH 0530/1184] sort integration companies --- src/components/CippIntegrations/CippIntegrationTenantMapping.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx index 53ed74c6e822..d495bc370e6c 100644 --- a/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx +++ b/src/components/CippIntegrations/CippIntegrationTenantMapping.jsx @@ -197,6 +197,7 @@ const CippIntegrationSettings = ({ children }) => { creatable={false} multiple={false} isFetching={mappings.isFetching} + sortOptions={true} /> From 82a3180ede70abf3b2b2aced463377b658cfc86f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 2 Apr 2025 22:37:23 +0200 Subject: [PATCH 0531/1184] feat: add litigation hold action to CippExchangeActions component --- .../CippComponents/CippExchangeActions.jsx | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippExchangeActions.jsx b/src/components/CippComponents/CippExchangeActions.jsx index 667b5b6fd686..46b583fdf766 100644 --- a/src/components/CippComponents/CippExchangeActions.jsx +++ b/src/components/CippComponents/CippExchangeActions.jsx @@ -15,8 +15,8 @@ import { Key, PostAdd, Add, + Gavel, } from "@mui/icons-material"; -import { useSettings } from "/src/hooks/use-settings.js"; export const CippExchangeActions = () => { // const tenant = useSettings().currentTenant; @@ -167,6 +167,27 @@ export const CippExchangeActions = () => { condition: (row) => row.MessageCopyForSentAsEnabled === true && row.recipientTypeDetails === "SharedMailbox", }, + { + label: "Set Litigation Hold", + type: "POST", + url: "/api/ExecSetLitigationHold", + data: { UPN: "UPN", Id: "Id" }, + confirmText: "Are you sure you want to set litigation hold?", + icon: , + fields: [ + { + type: "switch", + name: "disable", + label: "Disable Litigation Hold", + }, + { + type: "number", + name: "days", + label: "Hold Duration (Days)", + placeholder: "e.g. 30. 0 for indefinite", + }, + ], + }, { label: "Set mailbox locale", type: "POST", From 9b34ba6ed3576d60e4699e008dd0cd9a9017f651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 3 Apr 2025 21:17:19 +0200 Subject: [PATCH 0532/1184] fix: update litigation hold action to use 'Identity' and add condition for licensed users --- src/components/CippComponents/CippExchangeActions.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippExchangeActions.jsx b/src/components/CippComponents/CippExchangeActions.jsx index 46b583fdf766..0f20fe2b9cc4 100644 --- a/src/components/CippComponents/CippExchangeActions.jsx +++ b/src/components/CippComponents/CippExchangeActions.jsx @@ -171,9 +171,10 @@ export const CippExchangeActions = () => { label: "Set Litigation Hold", type: "POST", url: "/api/ExecSetLitigationHold", - data: { UPN: "UPN", Id: "Id" }, + data: { UPN: "UPN", Identity: "Id" }, confirmText: "Are you sure you want to set litigation hold?", icon: , + condition: (row) => row.LicensedForLitigationHold === true, fields: [ { type: "switch", @@ -184,7 +185,7 @@ export const CippExchangeActions = () => { type: "number", name: "days", label: "Hold Duration (Days)", - placeholder: "e.g. 30. 0 for indefinite", + placeholder: "Blank or 0 for indefinite", }, ], }, From 6dc321c792693bae4c8b436bb99a0cbb9986959e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 3 Apr 2025 21:23:32 +0200 Subject: [PATCH 0533/1184] Better text maybe? --- src/components/CippComponents/CippExchangeActions.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippExchangeActions.jsx b/src/components/CippComponents/CippExchangeActions.jsx index 0f20fe2b9cc4..0cce26aec516 100644 --- a/src/components/CippComponents/CippExchangeActions.jsx +++ b/src/components/CippComponents/CippExchangeActions.jsx @@ -172,7 +172,7 @@ export const CippExchangeActions = () => { type: "POST", url: "/api/ExecSetLitigationHold", data: { UPN: "UPN", Identity: "Id" }, - confirmText: "Are you sure you want to set litigation hold?", + confirmText: "What do you want to set the Litigation Hold to?", icon: , condition: (row) => row.LicensedForLitigationHold === true, fields: [ From eb7613a202c751203953f00668dc23eaa199d877 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 4 Apr 2025 10:42:29 -0400 Subject: [PATCH 0534/1184] fix replace text on JSX elements in CippApiDialog --- .../CippComponents/CippApiDialog.jsx | 43 +++++++++++++------ .../CippComponents/CippGdapActions.jsx | 2 +- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 779cca813dda..4cba7dd8d108 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -3,7 +3,7 @@ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid } from import { Stack } from "@mui/system"; import { CippApiResults } from "./CippApiResults"; import { ApiGetCall, ApiPostCall } from "../../api/ApiCall"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { useSettings } from "../../hooks/use-settings"; import CippFormComponent from "./CippFormComponent"; @@ -323,18 +323,37 @@ export const CippApiDialog = (props) => { }; var confirmText; - if (typeof api?.confirmText === "string" && !Array.isArray(row)) { - confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, (_, key) => { - return getNestedValue(row, key) || `[${key}]`; - }); - } else if (Array.isArray(row) && row.length > 1) { - confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, "the selected rows"); - } else if (Array.isArray(row) && row.length === 1) { - confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, (_, key) => { - return getNestedValue(row[0], key) || `[${key}]`; - }); + if (typeof api?.confirmText === "string") { + if (!Array.isArray(row)) { + confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, (_, key) => { + return getNestedValue(row, key) || `[${key}]`; + }); + } else if (row.length > 1) { + confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, "the selected rows"); + } else if (row.length === 1) { + confirmText = api.confirmText.replace(/\[([^\]]+)\]/g, (_, key) => { + return getNestedValue(row[0], key) || `[${key}]`; + }); + } } else { - confirmText = api.confirmText; + // Handle JSX/Component confirmText + const replaceTextInElement = (element) => { + if (!element) return element; + if (typeof element === 'string') { + if (Array.isArray(row) && row.length > 1) { + return element.replace(/\[([^\]]+)\]/g, "the selected rows"); + } else if (Array.isArray(row) && row.length === 1) { + return element.replace(/\[([^\]]+)\]/g, (_, key) => getNestedValue(row[0], key) || `[${key}]`); + } + return element.replace(/\[([^\]]+)\]/g, (_, key) => getNestedValue(row, key) || `[${key}]`); + } + if (React.isValidElement(element)) { + const newChildren = React.Children.map(element.props.children, replaceTextInElement); + return React.cloneElement(element, {}, newChildren); + } + return element; + }; + confirmText = replaceTextInElement(api?.confirmText); } return ( diff --git a/src/components/CippComponents/CippGdapActions.jsx b/src/components/CippComponents/CippGdapActions.jsx index d2ef3a41e531..b2200cd64b7b 100644 --- a/src/components/CippComponents/CippGdapActions.jsx +++ b/src/components/CippComponents/CippGdapActions.jsx @@ -82,7 +82,7 @@ export const CippGdapActions = () => [ confirmText: ( <> - Are you sure you want to reset the role mappings for this relationship? + Are you sure you want to reset the role mappings for [customer.displayName]? Resetting GDAP role mappings will perform the following actions: From 816201b2f339bdc57558e12867deef678cba5d89 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 4 Apr 2025 13:33:03 -0400 Subject: [PATCH 0535/1184] offcanvas support for CippInfoBar --- src/components/CippCards/CippInfoBar.jsx | 150 +++++++++++------- .../tenant/gdap-management/offboarding.js | 27 +++- 2 files changed, 123 insertions(+), 54 deletions(-) diff --git a/src/components/CippCards/CippInfoBar.jsx b/src/components/CippCards/CippInfoBar.jsx index c7ce557fdfbe..bcdf4930475f 100644 --- a/src/components/CippCards/CippInfoBar.jsx +++ b/src/components/CippCards/CippInfoBar.jsx @@ -1,58 +1,102 @@ +import React, { useState } from "react"; import { Box, Card, Stack, SvgIcon, Typography, Skeleton } from "@mui/material"; import Grid from "@mui/material/Grid"; +import { CippOffCanvas } from "../CippComponents/CippOffCanvas"; +import { CippPropertyListCard } from "./CippPropertyListCard"; -export const CippInfoBar = ({ data, isFetching }) => ( - - - {data.map((item) => ( - ({ - xs: `1px solid ${theme.palette.divider}`, - md: "none", - }), - borderRight: (theme) => ({ - md: `1px solid ${theme.palette.divider}`, - }), - "&:nth-of-type(3)": { - borderBottom: (theme) => ({ - xs: `1px solid ${theme.palette.divider}`, - sm: "none", - }), - }, - "&:nth-of-type(4)": { - borderBottom: "none", - borderRight: "none", - }, - }} - > - - {item?.icon && ( - - {item.icon} - - )} - { - if (!item?.icon) { - return { pl: 2 }; - } +export const CippInfoBar = ({ data, isFetching }) => { + const [visibleIndex, setVisibleIndex] = useState(null); + + return ( + + + {data.map((item, index) => ( + <> + setVisibleIndex(index) : undefined} + sx={{ + cursor: item.offcanvas ? "pointer" : "default", + borderBottom: (theme) => ({ + xs: `1px solid ${theme.palette.divider}`, + md: "none", + }), + borderRight: (theme) => ({ + md: `1px solid ${theme.palette.divider}`, + }), + "&:nth-of-type(3)": { + borderBottom: (theme) => ({ + xs: `1px solid ${theme.palette.divider}`, + sm: "none", + }), + }, + "&:nth-of-type(4)": { + borderBottom: "none", + borderRight: "none", + }, }} > - - {item.name} - - - {isFetching ? : item.data} - - - - - ))} - - -); + + {item?.icon && ( + + {item.icon} + + )} + { + if (!item?.icon) { + return { pl: 2 }; + } + }} + > + + {item.name} + + + {isFetching ? : item.data} + + + + + {item.offcanvas && ( + <> + {console.log("item.offcanvas", item.offcanvas)} + setVisibleIndex(null)} + > + + + + {item?.offcanvas?.propertyItems?.length > 0 && ( + + )} + + + + + + )} + + ))} + + + ); +}; diff --git a/src/pages/tenant/gdap-management/offboarding.js b/src/pages/tenant/gdap-management/offboarding.js index 57a6d31f381b..bba83bba45aa 100644 --- a/src/pages/tenant/gdap-management/offboarding.js +++ b/src/pages/tenant/gdap-management/offboarding.js @@ -137,6 +137,15 @@ const Page = () => { (relationship) => relationship?.customer?.tenantId === tenantId.value )?.length ?? 0, icon: , + offcanvas: { + title: "GDAP Relationships", + propertyItems: gdapRelationships.data?.Results + ?.filter((relationship) => relationship?.customer?.tenantId === tenantId.value) + ?.map((relationship) => ({ + label: `Relationship: ${relationship?.displayName}`, + value: `Id: ${relationship?.id}`, + })), + }, }, { name: "CSP Contract", @@ -152,11 +161,27 @@ const Page = () => { name: "MSP Applications", data: mspApps.data?.Results?.length ?? 0, icon: , + offcanvas: { + title: "MSP Applications", + propertyItems: mspApps.data?.Results?.map((app) => ({ + label: app?.displayName, + value: app?.appId, + })), + }, }, { name: "Vendor Applications", - data: 0, + data: vendorApps.data?.pages?.reduce((sum, page) => sum + (page?.Results?.length ?? 0), 0) ?? 0, icon: , + offcanvas: { + title: "Vendor Applications", + propertyItems: vendorApps.data?.pages + ?.reduce((sum, page) => sum.concat(page?.Results ?? []), []) + .map((app) => ({ + label: app?.displayName, + value: app?.appId, + })), + } }, ]} /> From 7e9fc57bbfce23088b9602e4d9740e48461ee56c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 4 Apr 2025 19:52:05 +0200 Subject: [PATCH 0536/1184] feat: add rename ap device action with validation --- .../endpoint/autopilot/list-devices/index.js | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/pages/endpoint/autopilot/list-devices/index.js b/src/pages/endpoint/autopilot/list-devices/index.js index 038e5b9d8d2a..2721b68924f9 100644 --- a/src/pages/endpoint/autopilot/list-devices/index.js +++ b/src/pages/endpoint/autopilot/list-devices/index.js @@ -2,7 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog.jsx"; import { Button } from "@mui/material"; -import { PersonAdd, Delete, Sync, Add } from "@mui/icons-material"; +import { PersonAdd, Delete, Sync, Add, Edit } from "@mui/icons-material"; import { useDialog } from "../../../../hooks/use-dialog"; import Link from "next/link"; import { useState } from "react"; @@ -51,6 +51,44 @@ const Page = () => { confirmText: "Are you sure you want to delete this device?", color: "danger", }, + { + label: "Rename Device", + icon: , + type: "POST", + url: "/api/ExecRenameAPDevice", + data: { + deviceId: "id", + serialNumber: "serialNumber", + }, + confirmText: "Enter the new display name for the device.", + fields: [ + { + type: "textField", + name: "displayName", + label: "New Display Name", + required: true, + validate: (value) => { + if (!value) { + return "Display name is required."; + } + if (value.length > 15) { + return "Display name must be 15 characters or less."; + } + if (/\s/.test(value)) { + return "Display name cannot contain spaces."; + } + if (!/^[a-zA-Z0-9-]+$/.test(value)) { + return "Display name can only contain letters, numbers, and hyphens."; + } + if (/^[0-9]+$/.test(value)) { + return "Display name cannot contain only numbers."; + } + return true; // Indicates validation passed + }, + }, + ], + color: "secondary", + }, ]; const offCanvas = { From 1be89a08d029f3e957e954f61b521e5dd874a2c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 4 Apr 2025 19:59:16 +0200 Subject: [PATCH 0537/1184] Reorder --- .../endpoint/autopilot/list-devices/index.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pages/endpoint/autopilot/list-devices/index.js b/src/pages/endpoint/autopilot/list-devices/index.js index 2721b68924f9..18958cd120ca 100644 --- a/src/pages/endpoint/autopilot/list-devices/index.js +++ b/src/pages/endpoint/autopilot/list-devices/index.js @@ -42,15 +42,6 @@ const Page = () => { ], color: "info", }, - { - label: "Delete Device", - icon: , - type: "POST", - url: "/api/RemoveAPDevice", - data: { ID: "id" }, - confirmText: "Are you sure you want to delete this device?", - color: "danger", - }, { label: "Rename Device", icon: , @@ -89,6 +80,15 @@ const Page = () => { ], color: "secondary", }, + { + label: "Delete Device", + icon: , + type: "POST", + url: "/api/RemoveAPDevice", + data: { ID: "id" }, + confirmText: "Are you sure you want to delete this device?", + color: "danger", + }, ]; const offCanvas = { From 2de712b1cb469a2a15627ea4c2376d97b38e68b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 4 Apr 2025 21:03:11 +0200 Subject: [PATCH 0538/1184] feat: add edit group tag action for autopilot devices with validation --- .../endpoint/autopilot/list-devices/index.js | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/pages/endpoint/autopilot/list-devices/index.js b/src/pages/endpoint/autopilot/list-devices/index.js index 18958cd120ca..4f641664f439 100644 --- a/src/pages/endpoint/autopilot/list-devices/index.js +++ b/src/pages/endpoint/autopilot/list-devices/index.js @@ -2,7 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { CippApiDialog } from "/src/components/CippComponents/CippApiDialog.jsx"; import { Button } from "@mui/material"; -import { PersonAdd, Delete, Sync, Add, Edit } from "@mui/icons-material"; +import { PersonAdd, Delete, Sync, Add, Edit, Sell } from "@mui/icons-material"; import { useDialog } from "../../../../hooks/use-dialog"; import Link from "next/link"; import { useState } from "react"; @@ -80,6 +80,31 @@ const Page = () => { ], color: "secondary", }, + { + label: "Edit Group Tag", + icon: , + type: "POST", + url: "/api/ExecSetAPDeviceGroupTag", + data: { + deviceId: "id", + serialNumber: "serialNumber", + }, + confirmText: "Enter the new group tag for the device.", + fields: [ + { + type: "textField", + name: "groupTag", + label: "Group Tag", + validate: (value) => { + if (value && value.length > 128) { + return "Group tag cannot exceed 128 characters."; + } + return true; // Validation passed + }, + }, + ], + color: "secondary", + }, { label: "Delete Device", icon: , From 35f7da57a28c562bdd6ce7463a7b42c0987442f0 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 8 Apr 2025 16:26:21 +0200 Subject: [PATCH 0539/1184] multipost for quartinune --- src/pages/email/administration/quarantine/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/email/administration/quarantine/index.js b/src/pages/email/administration/quarantine/index.js index 9ed7c94d2160..fc0323c4f77e 100644 --- a/src/pages/email/administration/quarantine/index.js +++ b/src/pages/email/administration/quarantine/index.js @@ -104,6 +104,7 @@ const Page = () => { label: "Release", type: "POST", url: "/api/ExecQuarantineManagement", + multiPost: true, data: { Identity: "Identity", Type: "!Release", From 8a9667a9fbbed1fab43d47ab748584aae9b090fc Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 8 Apr 2025 16:41:54 +0200 Subject: [PATCH 0540/1184] message trace id --- src/pages/email/tools/message-trace/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pages/email/tools/message-trace/index.js b/src/pages/email/tools/message-trace/index.js index 1cde2ba78cba..9a856cefb8af 100644 --- a/src/pages/email/tools/message-trace/index.js +++ b/src/pages/email/tools/message-trace/index.js @@ -83,6 +83,12 @@ const Page = () => { }, icon: , }, + { + label: "View in Explorer", + noConfirm: true, + link: `https://security.microsoft.com/realtimereportsv3?tid=${tenantFilter}&dltarget=Explorer&dlstorage=Url&viewid=allemail&query-NetworkMessageId=[MessageTraceId]`, + icon: , + }, ]; const onSubmit = () => { From 6d6fe86d2f78ea66f6602cf97b530acfc6070077 Mon Sep 17 00:00:00 2001 From: Esco Date: Mon, 7 Apr 2025 13:49:13 +0200 Subject: [PATCH 0541/1184] feat: Sharepoint Mass Deletion Alert standard Update standards.json autocomplete switch to auto complete include license information a remove \n --- src/data/standards.json | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 50ea2a224e55..494319c2156e 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1687,6 +1687,41 @@ "powershellEquivalent": "New-ProtectionAlert and Set-ProtectionAlert", "recommendedBy": [] }, + { + "name": "standards.SharePointMassDeletionAlert", + "cat": "Defender Standards", + "tag": [], + "helpText": "Sets a e-mail address to alert when a User deletes more than 20 SharePoint files within 60 minutes. NB: Requires a Office 365 E5 subscription, Office 365 E3 with Threat Intelligence or Office 365 EquivioAnalytics add-on.", + "docsDescription": "Sets a e-mail address to alert when a User deletes more than 20 SharePoint files within 60 minutes. This is useful for monitoring and ensuring that the correct SharePoint files are deleted. NB: Requires a Office 365 E5 subscription, Office 365 E3 with Threat Intelligence or Office 365 EquivioAnalytics add-on.", + "addedComponent": [ + { + "type": "number", + "name": "standards.SharePointMassDeletionAlert.Threshold", + "label": "Max files to delete within the time frame", + "defaultValue": 20 + }, + { + "type": "number", + "name": "standards.SharePointMassDeletionAlert.TimeWindow", + "label": "Time frame in minutes", + "defaultValue": 60 + }, + { + "type": "autoComplete", + "multiple": true, + "creatable": true, + "required": true, + "name": "standards.SharePointMassDeletionAlert.NotifyUser", + "label": "E-mail to receive the alert" + } + ], + "label": "SharePoint Mass Deletion Alert", + "impact": "Low Impact", + "impactColour": "info", + "addedDate": "2025-04-07", + "powershellEquivalent": "New-ProtectionAlert and Set-ProtectionAlert", + "recommendedBy": [] + }, { "name": "standards.SafeLinksPolicy", "cat": "Defender Standards", From a0eb6abcee11464b431ba6f6ff3a23ab4f589123 Mon Sep 17 00:00:00 2001 From: Esco Date: Wed, 9 Apr 2025 10:16:19 +0200 Subject: [PATCH 0542/1184] dev feat: cspell --- .vscode/extensions.json | 6 ++++++ cspell.json | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 .vscode/extensions.json create mode 100644 cspell.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000000..6eaf6dd1ea6f --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "editorconfig.editorconfig", + "streetsidesoftware.code-spell-checker", + ] +} diff --git a/cspell.json b/cspell.json new file mode 100644 index 000000000000..93017de9bc12 --- /dev/null +++ b/cspell.json @@ -0,0 +1,25 @@ +{ + "version": "0.2", + "ignorePaths": [], + "dictionaryDefinitions": [], + "dictionaries": [], + "words": [ + "CIPP", + "CIPP-API", + "Entra", + "Intune", + "GDAP", + "Yubikey", + "Sherweb", + "Autotask", + "Datto", + "Syncro", + "ImmyBot", + "Choco", + ], + "ignoreWords": [ + "CIPPAPI", + "locationcipp", + ], + "import": [] +} From d34a722737849876c7e159a424769b9d45737b1d Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 9 Apr 2025 12:56:32 -0400 Subject: [PATCH 0543/1184] fix BEC polling --- src/pages/identity/administration/users/user/bec.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/identity/administration/users/user/bec.jsx b/src/pages/identity/administration/users/user/bec.jsx index ed7c586489ec..9e8c1a59eb9e 100644 --- a/src/pages/identity/administration/users/user/bec.jsx +++ b/src/pages/identity/administration/users/user/bec.jsx @@ -58,7 +58,11 @@ const Page = () => { // Fetch BEC Check result using GUID const becPollingCall = ApiGetCall({ - url: `/api/execBECCheck?GUID=${becInitialCall.data?.GUID}`, + url: `/api/execBECCheck`, + data: { + GUID: becInitialCall.data?.GUID, + tenantFilter: userSettingsDefaults.currentTenant, + }, queryKey: `execBECCheck-polling-${becInitialCall.data?.GUID}`, waiting: false, }); From 08a325b68f79a583d631ed4c9e76d2259856b32d Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 10 Apr 2025 22:14:26 -0400 Subject: [PATCH 0544/1184] fix add group template --- src/pages/identity/administration/groups/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/identity/administration/groups/index.js b/src/pages/identity/administration/groups/index.js index ce0fd6b290f8..427a2ae002a5 100644 --- a/src/pages/identity/administration/groups/index.js +++ b/src/pages/identity/administration/groups/index.js @@ -86,7 +86,7 @@ const Page = () => { url: "/api/AddGroupTemplate", icon: , data: { - Displayname: "displayname", + Displayname: "displayName", Description: "description", GroupType: "calculatedGroupType", MembershipRules: "membershipRule", From 181bf3f6d884052dc83075a8876da2f075fd34f7 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Thu, 10 Apr 2025 22:49:39 -0400 Subject: [PATCH 0545/1184] fix bpa sync --- .../CippComponents/BPASyncDialog.jsx | 92 +++++++++++++++++++ .../CippComponents/CippApiResults.jsx | 2 +- .../tenant/standards/bpa-report/index.js | 39 +++++--- 3 files changed, 119 insertions(+), 14 deletions(-) create mode 100644 src/components/CippComponents/BPASyncDialog.jsx diff --git a/src/components/CippComponents/BPASyncDialog.jsx b/src/components/CippComponents/BPASyncDialog.jsx new file mode 100644 index 000000000000..cba62df8e67c --- /dev/null +++ b/src/components/CippComponents/BPASyncDialog.jsx @@ -0,0 +1,92 @@ +import React, { useState } from "react"; +import { + Dialog, + DialogContent, + DialogTitle, + Button, + DialogActions, + Alert, + CircularProgress, +} from "@mui/material"; +import { CheckCircle, Error, Sync } from "@mui/icons-material"; +import { useForm, FormProvider } from "react-hook-form"; +import { CippFormTenantSelector } from "./CippFormTenantSelector"; +import { ApiPostCall } from "/src/api/ApiCall"; +import { CippApiResults } from "./CippApiResults"; + +export const BPASyncDialog = ({ createDialog }) => { + const methods = useForm({ + defaultValues: { + tenantFilter: { + value: "AllTenants", + label: "*All Tenants", + }, + }, + }); + + // Use methods for form handling and control + const { handleSubmit, control } = methods; + + const [tenantId, setTenantId] = useState(""); + const [isSyncing, setIsSyncing] = useState(false); + + // Use ApiGetCall instead of useApiCall + const bpaSyncResults = ApiPostCall({ + urlfromdata: true, + }); + + const handleForm = (values) => { + setTenantId(values.tenantFilter || ""); + setIsSyncing(true); + + bpaSyncResults.mutate({ + url: "/api/ExecBPA", + queryKey: `bpa-sync-${tenantId}`, + data: tenantId ? { TenantFilter: tenantId } : {}, + }); + }; + + // Reset syncing state when dialog is closed + const handleClose = () => { + setIsSyncing(false); + createDialog.handleClose(); + }; + + return ( + + +
    + Force BPA Sync + +
    +

    + This will force a Best Practice Analyzer (BPA) sync. Select a tenant (or all + tenants) below. +

    + +
    + +
    + + + + +
    +
    +
    + ); +}; diff --git a/src/components/CippComponents/CippApiResults.jsx b/src/components/CippComponents/CippApiResults.jsx index b7bcc0a675be..21917507c396 100644 --- a/src/components/CippComponents/CippApiResults.jsx +++ b/src/components/CippComponents/CippApiResults.jsx @@ -1,4 +1,4 @@ -import { Close, Download, RouterOutlined } from "@mui/icons-material"; +import { Close, Download } from "@mui/icons-material"; import { Alert, CircularProgress, diff --git a/src/pages/tenant/standards/bpa-report/index.js b/src/pages/tenant/standards/bpa-report/index.js index 5307dfa9a934..1c98aad23b69 100644 --- a/src/pages/tenant/standards/bpa-report/index.js +++ b/src/pages/tenant/standards/bpa-report/index.js @@ -3,17 +3,22 @@ import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx" import { Layout as DashboardLayout } from "/src/layouts/index.js"; // had to add an extra path here because I added an extra folder structure. We should switch to absolute pathing so we dont have to deal with relative. import Link from "next/link"; import { EyeIcon } from "@heroicons/react/24/outline"; -import { CopyAll, Delete, Edit, AddBox, GitHub } from "@mui/icons-material"; +import { CopyAll, Delete, Edit, AddBox, GitHub, Sync } from "@mui/icons-material"; import { ApiGetCall } from "/src/api/ApiCall"; +import { Stack } from "@mui/system"; +import { BPASyncDialog } from "/src/components/CippComponents/BPASyncDialog"; +import { useDialog } from "/src/hooks/use-dialog"; const Page = () => { const pageTitle = "Best Practice Reports"; + const bpaDialog = useDialog(); const integrations = ApiGetCall({ url: "/api/ListExtensionsConfig", queryKey: "Integrations", refetchOnMount: false, refetchOnReconnect: false, }); + const actions = [ { label: "View Report", @@ -95,18 +100,26 @@ const Page = () => { ]; return ( - }> - Add Template - - } - actions={actions} - simpleColumns={["Name", "Style"]} - queryKey="ListBPATemplates" - /> + <> + + + + + } + actions={actions} + simpleColumns={["Name", "Style"]} + queryKey="ListBPATemplates" + /> + + ); }; From e5332e813bfee8dbd95be6b01e6583457b6c7cbd Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 11 Apr 2025 14:18:59 -0400 Subject: [PATCH 0546/1184] fix edit alert with tenant exclusions --- .../alert-configuration/alert.jsx | 40 ++++++++++++++----- src/utils/get-cipp-formatting.js | 12 +++++- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/pages/tenant/administration/alert-configuration/alert.jsx b/src/pages/tenant/administration/alert-configuration/alert.jsx index ba6943f77d9c..53475d4b31c7 100644 --- a/src/pages/tenant/administration/alert-configuration/alert.jsx +++ b/src/pages/tenant/administration/alert-configuration/alert.jsx @@ -81,22 +81,43 @@ const AlertWizard = () => { const alert = existingAlert?.data?.find((alert) => alert.RowKey === router.query.id); if (alert?.LogType === "Scripted") { setAlertType("script"); - formControl.setValue("tenantFilter", { - value: alert.RawAlert.Tenant, - label: alert.RawAlert.Tenant, - }); + + console.log(alert); + + // Create formatted excluded tenants array if it exists + const excludedTenantsFormatted = Array.isArray(alert.excludedTenants) + ? alert.excludedTenants.map((tenant) => ({ value: tenant, label: tenant })) + : []; + + // Format the command object const usedCommand = alertList?.find( (cmd) => cmd.name === alert.RawAlert.Command.replace("Get-CIPPAlert", "") ); - formControl.setValue("command", { value: usedCommand, label: usedCommand.label }); - formControl.setValue( - "recurrence", - recurrenceOptions?.find((opt) => opt.value === alert.RawAlert.Recurrence) + + // Format recurrence option + const recurrenceOption = recurrenceOptions?.find( + (opt) => opt.value === alert.RawAlert.Recurrence ); + + // Format post execution values const postExecutionValue = postExecutionOptions.filter((opt) => alert.RawAlert.PostExecution.split(",").includes(opt.value) ); - formControl.setValue("postExecution", postExecutionValue); + + // Reset the form with all values at once + formControl.reset( + { + tenantFilter: { + value: alert.RawAlert.Tenant, + label: alert.RawAlert.Tenant, + }, + excludedTenants: excludedTenantsFormatted, + command: { value: usedCommand, label: usedCommand.label }, + recurrence: recurrenceOption, + postExecution: postExecutionValue, + }, + { keepDirty: false } + ); } if (alert?.PartitionKey === "Webhookv2") { setAlertType("audit"); @@ -113,6 +134,7 @@ const AlertWizard = () => { formControl.reset({ RowKey: router.query.clone ? undefined : router.query.id ? router.query.id : undefined, tenantFilter: alert.RawAlert.Tenants, + excludedTenants: alert.RawAlert.excludedTenants, Actions: alert.RawAlert.Actions, conditions: alert.RawAlert.Conditions, logbook: foundLogbook, diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 8eb3e4e1dc5a..019407339e10 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -264,12 +264,20 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { } if (cellName === "excludedTenants") { + // Handle null or undefined data + if (data === null || data === undefined) { + return isText ? "No data" : ; + } //check if data is an array. if (Array.isArray(data)) { return isText - ? data.join(", ") + ? data.map(item => (typeof item === 'object' && item?.label) ? item.label : item).join(", ") : data.map((item) => ( - + item && )); } } From edff8a6f2672905e53e9b420af431a3be756aab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:02:22 +0200 Subject: [PATCH 0547/1184] Update Close_Stale_Issues_and_PRs.yml --- .github/workflows/Close_Stale_Issues_and_PRs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Close_Stale_Issues_and_PRs.yml b/.github/workflows/Close_Stale_Issues_and_PRs.yml index 41dc1be235d7..96b5dc6d5e14 100644 --- a/.github/workflows/Close_Stale_Issues_and_PRs.yml +++ b/.github/workflows/Close_Stale_Issues_and_PRs.yml @@ -13,6 +13,6 @@ jobs: stale-issue-message: 'This issue is stale because it has been open 10 days with no activity. We will close this issue soon. If you want this feature implemented you can contribute it. See: https://docs.cipp.app/dev-documentation/contributing-to-the-code . Please notify the team if you are working on this yourself.' close-issue-message: 'This issue was closed because it has been stalled for 14 days with no activity.' stale-issue-label: 'no-activity' - exempt-issue-labels: 'planned' + exempt-issue-labels: 'planned,bug' days-before-stale: 9 - days-before-close: 14 + days-before-close: 5 From 6c11192dcfd9233cd5809826f5a1a11f9fb40fda Mon Sep 17 00:00:00 2001 From: Esco Date: Sat, 12 Apr 2025 00:11:34 +0200 Subject: [PATCH 0548/1184] chore: more words & cleanup standards.json --- cspell.json | 6 ++++++ src/data/standards.json | 28 ++++++++++++++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/cspell.json b/cspell.json index 93017de9bc12..921542d92e48 100644 --- a/cspell.json +++ b/cspell.json @@ -9,6 +9,9 @@ "Entra", "Intune", "GDAP", + "OBEE", + "AITM", + "Passwordless", "Yubikey", "Sherweb", "Autotask", @@ -20,6 +23,9 @@ "ignoreWords": [ "CIPPAPI", "locationcipp", + "TNEF", + "winmail", + "PSTN", ], "import": [] } diff --git a/src/data/standards.json b/src/data/standards.json index 50ea2a224e55..31889ee2842c 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -217,7 +217,7 @@ "name": "standards.DisableBasicAuthSMTP", "cat": "Global Standards", "tag": [], - "helpText": "Disables SMTP AUTH for the organization and all users. This is the default for new tenants. ", + "helpText": "Disables SMTP AUTH for the organization and all users. This is the default for new tenants.", "docsDescription": "Disables SMTP basic authentication for the tenant and all users with it explicitly enabled.", "addedComponent": [], "label": "Disable SMTP Basic Authentication", @@ -546,7 +546,7 @@ "name": "standards.DisableTenantCreation", "cat": "Entra (AAD) Standards", "tag": ["CIS"], - "helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles. ", + "helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles.", "docsDescription": "Users by default are allowed to create M365 tenants. This disables that so only admins can create new M365 tenants.", "addedComponent": [], "label": "Disable M365 Tenant creation by users", @@ -785,7 +785,7 @@ { "type": "number", "name": "standards.StaleEntraDevices.deviceAgeThreshold", - "label": "Days before stale(Dont set below 30)" + "label": "Days before stale(Do not set below 30)" } ], "disabledFeatures": { @@ -1691,7 +1691,7 @@ "name": "standards.SafeLinksPolicy", "cat": "Defender Standards", "tag": ["CIS", "mdo_safelinksforemail", "mdo_safelinksforOfficeApps"], - "helpText": "This creates a safelink policy that automatically scans, tracks, and and enables safe links for Email, Office, and Teams for both external and internal senders", + "helpText": "This creates a Safe Links policy that automatically scans, tracks, and and enables safe links for Email, Office, and Teams for both external and internal senders", "addedComponent": [ { "type": "switch", @@ -1717,7 +1717,7 @@ "label": "Do not rewrite the following URLs in email" } ], - "label": "Default SafeLinks Policy", + "label": "Default Safe Links Policy", "impact": "Low Impact", "impactColour": "info", "addedDate": "2024-03-25", @@ -1737,7 +1737,7 @@ "mdo_antiphishingpolicies", "mdo_phishthresholdlevel" ], - "helpText": "This creates a Anti-Phishing policy that automatically enables Mailbox Intelligence and spoofing, optional switches for Mailtips.", + "helpText": "This creates a Anti-Phishing policy that automatically enables Mailbox Intelligence and spoofing, optional switches for Mail tips.", "addedComponent": [ { "type": "number", @@ -1930,7 +1930,7 @@ "impact": "Low Impact", "impactColour": "info", "addedDate": "2024-03-25", - "powershellEquivalent": "Set-AntiphishPolicy or New-AntiphishPolicy", + "powershellEquivalent": "Set-AntiPhishPolicy or New-AntiPhishPolicy", "recommendedBy": ["CIS"] }, { @@ -2704,7 +2704,7 @@ "cat": "Intune Standards", "tag": [], "helpText": "Requires MFA for all users to register devices with Intune. This is useful when not using Conditional Access.", - "label": "Require Multifactor Authentication to register or join devices with Microsoft Entra", + "label": "Require Multi-factor Authentication to register or join devices with Microsoft Entra", "impact": "Medium Impact", "impactColour": "warning", "addedDate": "2023-10-23", @@ -2812,7 +2812,7 @@ "impactColour": "info", "addedDate": "2024-07-09", "powershellEquivalent": "Set-SPOTenant -EnableAzureADB2BIntegration $true", - "recommendedBy": ["CIS 3.0"] + "recommendedBy": ["CIS"] }, { "name": "standards.SPDisallowInfectedFiles", @@ -2870,7 +2870,7 @@ "impactColour": "warning", "addedDate": "2024-07-09", "powershellEquivalent": "Set-SPOTenant -ExternalUserExpireInDays 30 -ExternalUserExpirationRequired $True", - "recommendedBy": ["CIS 3.0"] + "recommendedBy": ["CIS"] }, { "name": "standards.SPEmailAttestation", @@ -3012,7 +3012,7 @@ "helpText": "Disables the ability for external users to share files they don't own. Sharing links can only be made for People with existing access", "docsDescription": "Disables the ability for external users to share files they don't own. Sharing links can only be made for People with existing access. This is a tenant wide setting and overrules any settings set on the site level", "addedComponent": [], - "label": "Disable Resharing by External Users", + "label": "Disable Re-sharing by External Users", "impact": "High Impact", "impactColour": "danger", "addedDate": "2022-06-15", @@ -3188,7 +3188,7 @@ "impactColour": "info", "addedDate": "2024-11-12", "powershellEquivalent": "Set-CsTeamsMeetingPolicy -AllowAnonymousUsersToJoinMeeting $false -AllowAnonymousUsersToStartMeeting $false -AutoAdmittedUsers EveryoneInCompanyExcludingGuests -AllowPSTNUsersToBypassLobby $false -MeetingChatEnabledType EnabledExceptAnonymous -DesignatedPresenterRoleMode $DesignatedPresenterRoleMode -AllowExternalParticipantGiveRequestControl $false", - "recommendedBy": ["CIS 3.0"] + "recommendedBy": ["CIS"] }, { "name": "standards.TeamsEmailIntegration", @@ -3208,7 +3208,7 @@ "impactColour": "info", "addedDate": "2024-07-30", "powershellEquivalent": "Set-CsTeamsClientConfiguration -AllowEmailIntoChannel $false", - "recommendedBy": ["CIS 3.0"] + "recommendedBy": ["CIS"] }, { "name": "standards.TeamsExternalFileSharing", @@ -3247,7 +3247,7 @@ "impactColour": "info", "addedDate": "2024-07-28", "powershellEquivalent": "Set-CsTeamsClientConfiguration -AllowGoogleDrive $false -AllowShareFile $false -AllowBox $false -AllowDropBox $false -AllowEgnyte $false", - "recommendedBy": ["CIS 3.0"] + "recommendedBy": ["CIS"] }, { "name": "standards.TeamsEnrollUser", From 8534996ec2adeada89c76df36c980669d6673625 Mon Sep 17 00:00:00 2001 From: Esco Date: Sat, 12 Apr 2025 00:55:32 +0200 Subject: [PATCH 0549/1184] chore: add missing powershellEquivalent value --- src/data/standards.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index 06d5cf3efadc..92ef2e2806f5 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -772,7 +772,7 @@ "impact": "Medium Impact", "impactColour": "warning", "addedDate": "2024-11-12", - "powershellEquivalent": "", + "powershellEquivalent": "Graph API", "recommendedBy": [] }, { @@ -2606,7 +2606,7 @@ "impact": "Low Impact", "impactColour": "info", "addedDate": "2024-11-12", - "powershellEquivalent": "", + "powershellEquivalent": "Graph API", "recommendedBy": [] }, { From 18db036a40970901abe9bd53d2167f87ca60d556 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sat, 12 Apr 2025 12:50:33 +0200 Subject: [PATCH 0550/1184] Sherweb code changes --- src/data/Extensions.json | 102 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/src/data/Extensions.json b/src/data/Extensions.json index 4be4aec14662..895bb0971b14 100644 --- a/src/data/Extensions.json +++ b/src/data/Extensions.json @@ -95,6 +95,108 @@ "compareValue": true, "action": "disable" } + }, + { + "type": "switch", + "name": "Sherweb.AutoMigrations", + "label": "Enable automated migration to Sherweb", + "condition": { + "field": "Sherweb.Enabled", + "compareType": "is", + "compareValue": true, + "action": "disable" + } + }, + { + "type": "autoComplete", + "name": "Sherweb.migrationMethods", + "label": "Select how you'd like automated migrations to be handled", + "options": [ + { + "label": "Notify only - This will notify you when a subscription is in its cancellation window for non Sherweb subscriptions", + "value": "notifyOnly" + }, + { + "label": "Buy and notify - This will automatically buy the subscription and notify you when a subscription is in its cancellation window for non Sherweb subscriptions", + "value": "buyAndNotify" + }, + { + "label": "Buy and cancel - This will automatically buy the subscription and cancel the old subscription when a subscription is in its cancellation window for non Sherweb subscriptions", + "value": "buyAndCancel" + } + ], + "multiple": false, + "condition": { + "field": "Sherweb.AutoMigrations", + "compareType": "is", + "compareValue": true + } + }, + { + "type": "autoComplete", + "name": "Sherweb.migrateFrom", + "label": "Select the vendor to automatically migrate from", + "options": [ + { + "label": "Pax8", + "value": "Pax8" + } + ], + "multiple": false, + "condition": { + "field": "Sherweb.migrationMethods", + "compareType": "is", + "compareValue": "buyAndCancel" + } + }, + { + "type": "autoComplete", + "name": "Sherweb.migrateToLicense", + "label": "Select the type of license to automatically migrate to", + "options": [ + { + "label": "Yearly", + "value": "Y1Y" + }, + { + "label": "Annual paid monthly", + "value": "M1Y" + }, + { + "label": "Monthly", + "value": "M2M" + } + ], + "multiple": false, + "condition": { + "field": "Sherweb.migrationMethods", + "compareType": "contains", + "compareValue": "buy" + } + }, + { + "type": "password", + "name": "Sherweb.paxclientId", + "label": "Pax8 Client Id", + "placeholder": "Enter your Pax Client Id", + "required": true, + "condition": { + "field": "Sherweb.migrateFrom", + "compareType": "is", + "compareValue": "Pax8" + } + }, + { + "type": "password", + "name": "Sherweb.paxclientSecret", + "label": "Pax8 Client Secret", + "placeholder": "Enter your Pax Client Secret", + "required": true, + "condition": { + "field": "Sherweb.migrateFrom", + "compareType": "is", + "compareValue": "Pax8" + } } ] }, From da805ecaf591e3260a4f8dfbd2cbe41233cbfa12 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 12 Apr 2025 16:47:19 -0400 Subject: [PATCH 0551/1184] fix scheduler form and add run now --- .../CippFormPages/CippSchedulerForm.jsx | 21 ++++++++++++++----- src/pages/cipp/scheduler/index.js | 12 +++++++++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/components/CippFormPages/CippSchedulerForm.jsx b/src/components/CippFormPages/CippSchedulerForm.jsx index 325fd788757e..d49b2f069254 100644 --- a/src/components/CippFormPages/CippSchedulerForm.jsx +++ b/src/components/CippFormPages/CippSchedulerForm.jsx @@ -51,7 +51,7 @@ const CippSchedulerForm = (props) => { }; const recurrenceOptions = [ - { value: "0", label: "Only once" }, + { value: "0", label: "Once" }, { value: "1d", label: "Every 1 day" }, { value: "7d", label: "Every 7 days" }, { value: "30d", label: "Every 30 days" }, @@ -69,8 +69,8 @@ const CippSchedulerForm = (props) => { }); const tenantList = ApiGetCall({ - url: "/api/ListTenants", - queryKey: "ListTenants", + url: "/api/ListTenants?AllTenantSelector=true", + queryKey: "ListTenants-AllTenants", }); useEffect(() => { if (scheduledTaskList.isSuccess && router.query.id) { @@ -86,16 +86,27 @@ const CippSchedulerForm = (props) => { ); if (commands.isSuccess) { const command = commands.data.find((command) => command.Function === task.Command); + var recurrence = recurrenceOptions.find( + (option) => option.value === task.Recurrence || option.label === task.Recurrence + ); + + // if scheduledtime type is a date, convert to unixtime + if (typeof task.ScheduledTime === "date") { + task.ScheduledTime = Math.floor(task.ScheduledTime.getTime() / 1000); + } else if (typeof task.ScheduledTime === "string") { + task.ScheduledTime = Math.floor(new Date(task.ScheduledTime).getTime() / 1000); + } + const ResetParams = { tenantFilter: { value: tenantFilter?.defaultDomainName, - label: tenantFilter?.defaultDomainName, + label: `${tenantFilter?.displayName} (${tenantFilter?.defaultDomainName})`, }, RowKey: router.query.Clone ? null : task.RowKey, Name: router.query.Clone ? `${task.Name} (Clone)` : task?.Name, command: { label: task.Command, value: task.Command, addedFields: command }, ScheduledTime: task.ScheduledTime, - Recurrence: task.Recurrence, + Recurrence: recurrence, parameters: task.Parameters, postExecution: postExecution, advancedParameters: task.RawJsonParameters ? true : false, diff --git a/src/pages/cipp/scheduler/index.js b/src/pages/cipp/scheduler/index.js index 81cf3213ed02..02d7d3c93ae0 100644 --- a/src/pages/cipp/scheduler/index.js +++ b/src/pages/cipp/scheduler/index.js @@ -2,13 +2,21 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import CippTablePage from "/src/components/CippComponents/CippTablePage"; import { Button, Typography } from "@mui/material"; import Link from "next/link"; -import { CalendarDaysIcon, EyeIcon, TrashIcon } from "@heroicons/react/24/outline"; +import { CalendarDaysIcon, TrashIcon } from "@heroicons/react/24/outline"; import { useState } from "react"; -import { CopyAll, Edit } from "@mui/icons-material"; +import { CopyAll, Edit, PlayArrow } from "@mui/icons-material"; import { CippCodeBlock } from "../../../components/CippComponents/CippCodeBlock"; const Page = () => { const actions = [ + { + label: "Run Now", + type: "POST", + url: "/api/AddScheduledItem", + data: { RowKey: "RowKey", RunNow: true }, + icon: , + confirmText: "Are you sure you want to run [Name]?", + }, { label: "Edit Job", link: "/cipp/scheduler/job?id=[RowKey]", From 3064fbaa169f64c4f19e9fe643150b9c09190c21 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 12 Apr 2025 18:21:18 -0400 Subject: [PATCH 0552/1184] new scheduled task details --- .../CippComponents/ScheduledTaskDetails.jsx | 202 ++++++++++++++++++ src/pages/cipp/scheduler/index.js | 10 +- 2 files changed, 205 insertions(+), 7 deletions(-) create mode 100644 src/components/CippComponents/ScheduledTaskDetails.jsx diff --git a/src/components/CippComponents/ScheduledTaskDetails.jsx b/src/components/CippComponents/ScheduledTaskDetails.jsx new file mode 100644 index 000000000000..b9f78247c361 --- /dev/null +++ b/src/components/CippComponents/ScheduledTaskDetails.jsx @@ -0,0 +1,202 @@ +import React, { useEffect, useState } from "react"; +import { + Box, + Typography, + Dialog, + DialogContent, + DialogTitle, + IconButton, + Accordion, + AccordionSummary, + AccordionDetails, + Stack, + Chip, + Button, +} from "@mui/material"; +import { CippCodeBlock } from "./CippCodeBlock"; +import { ApiGetCall } from "../../api/ApiCall"; +import { getCippTranslation } from "../../utils/get-cipp-translation"; +import { CippPropertyListCard } from "../CippCards/CippPropertyListCard"; +import { Close, ExpandMore, Sync } from "@mui/icons-material"; +import { ClipboardDocumentListIcon } from "@heroicons/react/24/outline"; +import { getCippFormatting } from "../../utils/get-cipp-formatting"; +import { CippDataTable } from "../CippTable/CippDataTable"; +import { CippTimeAgo } from "/src/components/CippComponents/CippTimeAgo"; + +const ScheduledTaskDetails = ({ data }) => { + const [taskDetails, setTaskDetails] = useState(null); + const [dialogOpen, setDialogOpen] = useState(false); + const [selectedResult, setSelectedResult] = useState(null); + const [expanded, setExpanded] = useState(false); + + const handleChange = (panel) => (event, newExpanded) => { + setExpanded(newExpanded ? panel : false); + }; + + const taskDetailResults = ApiGetCall({ + url: `/api/ListScheduledItemDetails`, + data: { + RowKey: data.RowKey, + }, + queryKey: `ListScheduledItemDetails-${data.RowKey}`, + }); + + const taskProperties = [ + "Name", + "Command", + "Tenant", + "Recurrence", + "ScheduledTime", + "ExecutedTime", + "PostExecution", + ]; + + useEffect(() => { + if (taskDetailResults.isSuccess && taskDetailResults?.data) { + setTaskDetails(taskDetailResults.data); + } + }, [data.RowKey, taskDetailResults.isSuccess, taskDetailResults.data]); + + const handleViewResult = (result) => { + setSelectedResult(result); + setDialogOpen(true); + }; + + return ( + <> + setDialogOpen(false)}> + + Task Result Details + setDialogOpen(false)} + sx={{ position: "absolute", right: 8, top: 8 }} + > + + + + + setDialogOpen(false)} + code={selectedResult?.Results} + /> + + + + + Task Details + taskDetailResults.refetch()} startIcon={}> + Refresh + + } + layout="dual" + showDivider={false} + propertyItems={taskProperties + .filter((prop) => taskDetails?.Task?.[prop] != null && taskDetails?.Task?.[prop] !== "") + .map((prop) => { + return { + label: getCippTranslation(prop), + value: getCippFormatting(taskDetails?.Task?.[prop], prop), + }; + })} + isFetching={taskDetailResults.isFetching} + /> + + {taskDetails?.Task?.Parameters && ( + + }> + Task Parameters + + + { + return { + label: key, + value: getCippFormatting(value, key), + }; + })} + isFetching={taskDetailResults.isFetching} + /> + + + )} + + {taskDetails?.Details?.length > 0 && ( + <> + + Execution Results + + + {taskDetails.Details.map((result, index) => ( + + } + sx={{ + "& .MuiAccordionSummary-content": { + display: "flex", + justifyContent: "space-between", + alignItems: "center", + width: "100%", + }, + }} + > + {result.TenantName || result.Tenant} + } + sx={{ mx: 1 }} + /> + + + {result.Results === "null" ? ( + No data available + ) : Array.isArray(result.Results) ? ( + + ) : typeof result.Results === "object" ? ( + ({ + label: key, + value: typeof value === "object" ? JSON.stringify(value) : value, + }))} + /> + ) : ( + +
    +                          {result.Results}
    +                        
    +
    + )} +
    +
    + ))} +
    + + )} +
    + + ); +}; + +export default ScheduledTaskDetails; diff --git a/src/pages/cipp/scheduler/index.js b/src/pages/cipp/scheduler/index.js index 02d7d3c93ae0..867826ca579a 100644 --- a/src/pages/cipp/scheduler/index.js +++ b/src/pages/cipp/scheduler/index.js @@ -5,7 +5,7 @@ import Link from "next/link"; import { CalendarDaysIcon, TrashIcon } from "@heroicons/react/24/outline"; import { useState } from "react"; import { CopyAll, Edit, PlayArrow } from "@mui/icons-material"; -import { CippCodeBlock } from "../../../components/CippComponents/CippCodeBlock"; +import ScheduledTaskDetails from "../../../components/CippComponents/ScheduledTaskDetails"; const Page = () => { const actions = [ @@ -66,12 +66,8 @@ const Page = () => { ]; const offCanvas = { - children: (extendedData) => ( - <> - Job Results - - - ), + children: (extendedData) => , + size: "xl", actions: actions, }; const [showHiddenJobs, setShowHiddenJobs] = useState(false); From a7ca3d3c4b2f0483ba0fc7dee6d4fe6ff4b433c7 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 12 Apr 2025 19:00:39 -0400 Subject: [PATCH 0553/1184] add more filters and tweaks to scheduled task detail --- .../CippComponents/ScheduledTaskDetails.jsx | 245 +++++++++++------- src/pages/cipp/scheduler/index.js | 2 +- 2 files changed, 153 insertions(+), 94 deletions(-) diff --git a/src/components/CippComponents/ScheduledTaskDetails.jsx b/src/components/CippComponents/ScheduledTaskDetails.jsx index b9f78247c361..618ae131ef67 100644 --- a/src/components/CippComponents/ScheduledTaskDetails.jsx +++ b/src/components/CippComponents/ScheduledTaskDetails.jsx @@ -2,23 +2,20 @@ import React, { useEffect, useState } from "react"; import { Box, Typography, - Dialog, - DialogContent, - DialogTitle, IconButton, Accordion, AccordionSummary, AccordionDetails, - Stack, Chip, - Button, + TextField, + InputAdornment, + Tooltip, + Stack, } from "@mui/material"; -import { CippCodeBlock } from "./CippCodeBlock"; import { ApiGetCall } from "../../api/ApiCall"; import { getCippTranslation } from "../../utils/get-cipp-translation"; import { CippPropertyListCard } from "../CippCards/CippPropertyListCard"; -import { Close, ExpandMore, Sync } from "@mui/icons-material"; -import { ClipboardDocumentListIcon } from "@heroicons/react/24/outline"; +import { ExpandMore, Sync, Search, Close } from "@mui/icons-material"; import { getCippFormatting } from "../../utils/get-cipp-formatting"; import { CippDataTable } from "../CippTable/CippDataTable"; import { CippTimeAgo } from "/src/components/CippComponents/CippTimeAgo"; @@ -28,6 +25,7 @@ const ScheduledTaskDetails = ({ data }) => { const [dialogOpen, setDialogOpen] = useState(false); const [selectedResult, setSelectedResult] = useState(null); const [expanded, setExpanded] = useState(false); + const [searchQuery, setSearchQuery] = useState(""); const handleChange = (panel) => (event, newExpanded) => { setExpanded(newExpanded ? panel : false); @@ -54,44 +52,50 @@ const ScheduledTaskDetails = ({ data }) => { useEffect(() => { if (taskDetailResults.isSuccess && taskDetailResults?.data) { setTaskDetails(taskDetailResults.data); + + // Auto-expand the only result if there's just one + if (taskDetailResults.data.Details?.length === 1) { + setExpanded(`execution-results-0`); + } } }, [data.RowKey, taskDetailResults.isSuccess, taskDetailResults.data]); - const handleViewResult = (result) => { - setSelectedResult(result); - setDialogOpen(true); - }; + const filteredDetails = taskDetails?.Details?.filter((result) => { + if (!searchQuery) return true; + + const searchLower = searchQuery.toLowerCase(); + const tenantMatches = (result.TenantName || result.Tenant || "") + .toLowerCase() + .includes(searchLower); + + let resultsMatches = false; + if (typeof result.Results === "object" && result.Results !== null) { + const resultsStr = JSON.stringify(result.Results).toLowerCase(); + resultsMatches = resultsStr.includes(searchLower); + } + + return tenantMatches || resultsMatches; + }); return ( <> - setDialogOpen(false)}> - - Task Result Details - setDialogOpen(false)} - sx={{ position: "absolute", right: 8, top: 8 }} - > - - - - - setDialogOpen(false)} - code={selectedResult?.Results} - /> - - - - Task Details + + Task Details + taskDetailResults.refetch()}> + + + taskDetailResults.refetch()} startIcon={}> - Refresh - - } layout="dual" showDivider={false} propertyItems={taskProperties @@ -133,64 +137,119 @@ const ScheduledTaskDetails = ({ data }) => { {taskDetails?.Details?.length > 0 && ( <> - - Execution Results - + + + Execution Results{" "} + {filteredDetails && ( + + ({filteredDetails.length} of {taskDetails.Details.length}) + + )} + + setSearchQuery(e.target.value)} + InputProps={{ + startAdornment: ( + + + + ), + endAdornment: searchQuery && ( + + + setSearchQuery("")} + aria-label="Clear search" + > + + + + + ), + }} + /> + - {taskDetails.Details.map((result, index) => ( - - } - sx={{ - "& .MuiAccordionSummary-content": { - display: "flex", - justifyContent: "space-between", - alignItems: "center", - width: "100%", - }, - }} + {filteredDetails && + filteredDetails.map((result, index) => ( + - {result.TenantName || result.Tenant} - } - sx={{ mx: 1 }} - /> - - - {result.Results === "null" ? ( - No data available - ) : Array.isArray(result.Results) ? ( - } + sx={{ + "& .MuiAccordionSummary-content": { + display: "flex", + justifyContent: "space-between", + alignItems: "center", + width: "100%", + }, + }} + > + {result.TenantName || result.Tenant} + } + sx={{ mx: 1 }} /> - ) : typeof result.Results === "object" ? ( - ({ - label: key, - value: typeof value === "object" ? JSON.stringify(value) : value, - }))} - /> - ) : ( - -
    -                          {result.Results}
    -                        
    -
    - )} -
    -
    - ))} + + + {result.Results === "null" ? ( + No data available + ) : Array.isArray(result.Results) ? ( + + ) : typeof result.Results === "object" ? ( + ({ + label: key, + value: typeof value === "object" ? JSON.stringify(value) : value, + }))} + /> + ) : ( + +
    +                            {result.Results}
    +                          
    +
    + )} +
    + + ))} + {filteredDetails && filteredDetails.length === 0 && ( + + + No results match your search criteria + + + )}
    )} diff --git a/src/pages/cipp/scheduler/index.js b/src/pages/cipp/scheduler/index.js index 867826ca579a..bf162c3147da 100644 --- a/src/pages/cipp/scheduler/index.js +++ b/src/pages/cipp/scheduler/index.js @@ -1,6 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import CippTablePage from "/src/components/CippComponents/CippTablePage"; -import { Button, Typography } from "@mui/material"; +import { Button } from "@mui/material"; import Link from "next/link"; import { CalendarDaysIcon, TrashIcon } from "@heroicons/react/24/outline"; import { useState } from "react"; From 96935f7859abef58ee9a38dc2f030e38de926b72 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 12 Apr 2025 19:22:18 -0400 Subject: [PATCH 0554/1184] standards ui tweaks --- .../CippStandards/CippStandardAccordion.jsx | 454 ++++++++++++------ src/pages/tenant/standards/template.jsx | 7 +- 2 files changed, 323 insertions(+), 138 deletions(-) diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx index fdb538a4dec0..a46d27e6db13 100644 --- a/src/components/CippStandards/CippStandardAccordion.jsx +++ b/src/components/CippStandards/CippStandardAccordion.jsx @@ -12,8 +12,20 @@ import { Grid, Tooltip, Chip, + TextField, + InputAdornment, + ButtonGroup, + Button, } from "@mui/material"; -import { ExpandMore as ExpandMoreIcon, Delete, Add, Public } from "@mui/icons-material"; +import { + ExpandMore as ExpandMoreIcon, + Delete, + Add, + Public, + Search, + Close, + FilterAlt, +} from "@mui/icons-material"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { useWatch } from "react-hook-form"; import _ from "lodash"; @@ -78,6 +90,8 @@ const CippStandardAccordion = ({ formControl, }) => { const [configuredState, setConfiguredState] = useState({}); + const [filter, setFilter] = useState("all"); + const [searchQuery, setSearchQuery] = useState(""); const watchedValues = useWatch({ control: formControl.control, @@ -100,7 +114,6 @@ const CippStandardAccordion = ({ const isConfigured = actionFilled && addedComponentsFilled; - // Only update state if there's a change to reduce unnecessary re-renders. if (newConfiguredState[standardName] !== isConfigured) { newConfiguredState[standardName] = isConfigured; } @@ -110,148 +123,319 @@ const CippStandardAccordion = ({ if (!_.isEqual(newConfiguredState, configuredState)) { setConfiguredState(newConfiguredState); } - // eslint-disable-next-line react-hooks/exhaustive-deps }, [watchedValues, standards, selectedStandards]); - return Object.keys(selectedStandards)?.map((standardName) => { - const standard = standards.find((s) => s.name === standardName.split("[")[0]); - if (!standard) return null; + const groupedStandards = useMemo(() => { + const result = {}; + + Object.keys(selectedStandards).forEach((standardName) => { + const standard = standards.find((s) => s.name === standardName.split("[")[0]); + if (!standard) return; + + const category = standard.cat || "Other Standards"; + + if (!result[category]) { + result[category] = []; + } + + result[category].push({ + standardName, + standard, + }); + }); - const isExpanded = expanded === standardName; - const hasAddedComponents = standard.addedComponent && standard.addedComponent.length > 0; - const isConfigured = configuredState[standardName]; - const disabledFeatures = standard.disabledFeatures || {}; + Object.keys(result).forEach((category) => { + result[category].sort((a, b) => a.standard.label.localeCompare(b.standard.label)); + }); + + return result; + }, [selectedStandards, standards]); - let selectedActions = _.get(watchedValues, `${standardName}.action`); - //if selectedActions is not an array, convert it to an array - if (selectedActions && !Array.isArray(selectedActions)) { - selectedActions = [selectedActions]; + const filteredGroupedStandards = useMemo(() => { + if (!searchQuery && filter === "all") { + return groupedStandards; } - const selectedTemplateName = standard.multiple - ? _.get(watchedValues, `${standardName}.${standard.addedComponent?.[0]?.name}`) - : ""; - const accordionTitle = selectedTemplateName - ? `${standard.label} - ${selectedTemplateName.label}` - : standard.label; - - return ( - - - - - {standard.cat === "Global Standards" ? ( - - ) : standard.cat === "Entra (AAD) Standards" ? ( - - ) : standard.cat === "Exchange Standards" ? ( - - ) : standard.cat === "Defender Standards" ? ( - - ) : standard.cat === "Intune Standards" ? ( - - ) : ( - - )} - - - {accordionTitle} - {selectedActions && selectedActions?.length > 0 && ( - - {selectedActions?.map((action, index) => ( - <> - - - ))} - - - )} - { - //add a chip that shows the impact - } - - {standard.helpText} - - - - - {standard.multiple && ( - - handleAddMultipleStandard(standardName)}> - - - - )} - - {isConfigured ? "Configured" : "Unconfigured"} - handleRemoveStandard(standardName)}> - - - - handleAccordionToggle(standardName)}> - { + const filteredStandards = groupedStandards[category].filter(({ standardName, standard }) => { + const matchesSearch = + !searchQuery || + standard.label.toLowerCase().includes(searchQuery.toLowerCase()) || + (standard.helpText && + standard.helpText.toLowerCase().includes(searchQuery.toLowerCase())); + + const isConfigured = configuredState[standardName]; + const matchesFilter = + filter === "all" || + (filter === "configured" && isConfigured) || + (filter === "unconfigured" && !isConfigured); + + return matchesSearch && matchesFilter; + }); + + if (filteredStandards.length > 0) { + result[category] = filteredStandards; + } + }); + + return result; + }, [groupedStandards, searchQuery, filter, configuredState]); + + const standardCounts = useMemo(() => { + let allCount = 0; + let configuredCount = 0; + let unconfiguredCount = 0; + + Object.keys(groupedStandards).forEach((category) => { + groupedStandards[category].forEach(({ standardName }) => { + allCount++; + if (configuredState[standardName]) { + configuredCount++; + } else { + unconfiguredCount++; + } + }); + }); + + return { allCount, configuredCount, unconfiguredCount }; + }, [groupedStandards, configuredState]); + + const hasFilteredStandards = Object.keys(filteredGroupedStandards).length > 0; + + return ( + <> + {Object.keys(selectedStandards).length > 0 && ( + <> + + + setSearchQuery(e.target.value)} + slotProps={{ + input: { + startAdornment: ( + + + + ), + endAdornment: searchQuery && ( + + + setSearchQuery("")} + aria-label="Clear search" + > + + + + + ), + }, + }} /> - + + + + + + + - - - - - - - - - - - {hasAddedComponents && ( - - - {standard.addedComponent?.map((component, idx) => ( - + + No standards match the selected filter criteria or search query. + + + )} + + )} + + {Object.keys(filteredGroupedStandards).map((category) => ( + + + {category} + + + {filteredGroupedStandards[category].map(({ standardName, standard }) => { + const isExpanded = expanded === standardName; + const hasAddedComponents = + standard.addedComponent && standard.addedComponent.length > 0; + const isConfigured = configuredState[standardName]; + const disabledFeatures = standard.disabledFeatures || {}; + + let selectedActions = _.get(watchedValues, `${standardName}.action`); + if (selectedActions && !Array.isArray(selectedActions)) { + selectedActions = [selectedActions]; + } + + const selectedTemplateName = standard.multiple + ? _.get(watchedValues, `${standardName}.${standard.addedComponent?.[0]?.name}`) + : ""; + const accordionTitle = selectedTemplateName + ? `${standard.label} - ${selectedTemplateName.label}` + : standard.label; + + return ( + + + + + {standard.cat === "Global Standards" ? ( + + ) : standard.cat === "Entra (AAD) Standards" ? ( + + ) : standard.cat === "Exchange Standards" ? ( + + ) : standard.cat === "Defender Standards" ? ( + + ) : standard.cat === "Intune Standards" ? ( + + ) : ( + + )} + + + {accordionTitle} + {selectedActions && selectedActions?.length > 0 && ( + + {selectedActions?.map((action, index) => ( + + + + ))} + + + )} + + {standard.helpText} + + + + + {standard.multiple && ( + + handleAddMultipleStandard(standardName)}> + + + + )} + + + {isConfigured ? "Configured" : "Unconfigured"} + + handleRemoveStandard(standardName)}> + + + + handleAccordionToggle(standardName)}> + - ))} -
    -
    - )} -
    - - - - ); - }); + + + + + + + + + + + + + {hasAddedComponents && ( + + + {standard.addedComponent?.map((component, idx) => ( + + ))} + + + )} + + + + + ); + })} + + ))} + + ); }; export default CippStandardAccordion; diff --git a/src/pages/tenant/standards/template.jsx b/src/pages/tenant/standards/template.jsx index fb9f23ae4b3f..04c8b9b9c906 100644 --- a/src/pages/tenant/standards/template.jsx +++ b/src/pages/tenant/standards/template.jsx @@ -1,4 +1,5 @@ -import { Box, Button, Container, Stack, Typography, SvgIcon, Grid, Skeleton } from "@mui/material"; +import { Box, Button, Container, Stack, Typography, SvgIcon, Skeleton } from "@mui/material"; +import { Grid } from "@mui/system"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { useForm } from "react-hook-form"; import { useRouter } from "next/router"; @@ -200,7 +201,7 @@ const Page = () => { {/* Left Column for Accordions */} - + { updatedAt={updatedAt} /> - + {/* Show accordions based on selectedStandards (which is populated by API when editing) */} {existingTemplate.isLoading ? ( From c668b0d8d3652621eb35692426e455648bb8ed28 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 12 Apr 2025 19:28:53 -0400 Subject: [PATCH 0555/1184] also filter by category --- .../CippStandards/CippStandardAccordion.jsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx index a46d27e6db13..4564e4dc49c9 100644 --- a/src/components/CippStandards/CippStandardAccordion.jsx +++ b/src/components/CippStandards/CippStandardAccordion.jsx @@ -157,14 +157,21 @@ const CippStandardAccordion = ({ } const result = {}; + const searchLower = searchQuery.toLowerCase(); Object.keys(groupedStandards).forEach((category) => { + const categoryMatchesSearch = !searchQuery || category.toLowerCase().includes(searchLower); + const filteredStandards = groupedStandards[category].filter(({ standardName, standard }) => { const matchesSearch = !searchQuery || - standard.label.toLowerCase().includes(searchQuery.toLowerCase()) || - (standard.helpText && - standard.helpText.toLowerCase().includes(searchQuery.toLowerCase())); + categoryMatchesSearch || + standard.label.toLowerCase().includes(searchLower) || + (standard.helpText && standard.helpText.toLowerCase().includes(searchLower)) || + (standard.cat && standard.cat.toLowerCase().includes(searchLower)) || + (standard.tag && + Array.isArray(standard.tag) && + standard.tag.some((tag) => tag.toLowerCase().includes(searchLower))); const isConfigured = configuredState[standardName]; const matchesFilter = From c9dc223c24252b88dbe968015387e5908a159cc5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 12 Apr 2025 20:32:26 -0400 Subject: [PATCH 0556/1184] add status check for if reporting is enabled on the template --- src/pages/tenant/standards/compare/index.js | 136 +++++++++++++------- 1 file changed, 88 insertions(+), 48 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 7b96932616fe..f78f32f4cee6 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -172,6 +172,13 @@ const Page = () => { const standardInfo = standards.find((s) => s.name === standardId); const standardSettings = standardConfig.standards?.[standardKey] || {}; console.log(standardInfo); + + // Check if reporting is enabled for this standard by checking the action property + // The standard should be reportable if there's an action with value === 'Report' + const actions = standardConfig.action || []; + const reportingEnabled = + actions.filter((action) => action.value === "Report").length > 0; + // Find the tenant's value for this standard const currentTenantStandard = currentTenantData.find( (s) => s.standardId === standardId @@ -179,6 +186,7 @@ const Page = () => { // Determine compliance status let isCompliant = false; + let reportingDisabled = !reportingEnabled; // Check if the standard is directly in the tenant object (like "standards.AuditLog": true) const standardIdWithoutPrefix = standardId.replace("standards.", ""); @@ -203,6 +211,13 @@ const Page = () => { } } + // Determine compliance status text based on reporting flag + const complianceStatus = reportingDisabled + ? "Reporting Disabled" + : isCompliant + ? "Compliant" + : "Non-Compliant"; + // Use the direct standard value from the tenant object if it exists allStandards.push({ standardId, @@ -212,7 +227,8 @@ const Page = () => { ? directStandardValue : currentTenantStandard?.value, standardValue: standardSettings, - complianceStatus: isCompliant ? "Compliant" : "Non-Compliant", + complianceStatus, + reportingDisabled, complianceDetails: standardInfo?.docsDescription || standardInfo?.helpText || "", standardDescription: standardInfo?.helpText || "", standardImpact: standardInfo?.impact || "Medium Impact", @@ -260,7 +276,13 @@ const Page = () => { comparisonData?.filter((standard) => standard.complianceStatus === "Compliant").length || 0; const nonCompliantCount = comparisonData?.filter((standard) => standard.complianceStatus === "Non-Compliant").length || 0; - const compliancePercentage = allCount > 0 ? Math.round((compliantCount / allCount) * 100) : 0; + const reportingDisabledCount = + comparisonData?.filter((standard) => standard.complianceStatus === "Reporting Disabled") + .length || 0; + const compliancePercentage = + allCount > 0 + ? Math.round((compliantCount / (allCount - reportingDisabledCount || 1)) * 100) + : 0; return ( @@ -589,11 +611,15 @@ const Page = () => { bgcolor: standard.complianceStatus === "Compliant" ? "success.main" + : standard.complianceStatus === "Reporting Disabled" + ? "grey.500" : "error.main", }} > {standard.complianceStatus === "Compliant" ? ( + ) : standard.complianceStatus === "Reporting Disabled" ? ( + ) : ( )} @@ -751,6 +777,8 @@ const Page = () => { backgroundColor: standard.complianceStatus === "Compliant" ? "success.main" + : standard.complianceStatus === "Reporting Disabled" + ? "grey.500" : "error.main", borderRadius: "50%", width: 8, @@ -777,49 +805,55 @@ const Page = () => { borderColor: "divider", }} > - {Object.entries(standard.currentTenantValue).map(([key, value]) => { - const standardValueForKey = - standard.standardValue && typeof standard.standardValue === "object" - ? standard.standardValue[key] - : undefined; - - const isDifferent = - standardValueForKey !== undefined && - JSON.stringify(value) !== JSON.stringify(standardValueForKey); - - return ( - - - {key}: - - - {standard.complianceStatus === "Compliant" && value === true - ? "Compliant" - : typeof value === "object" && value !== null - ? value.label || JSON.stringify(value) - : value === true - ? "Enabled" - : value === false - ? "Disabled" - : String(value)} - - - ); - })} + {standard.complianceStatus === "Reporting Disabled" ? ( + + Reporting is disabled for this standard in the template configuration. + + ) : ( + Object.entries(standard.currentTenantValue).map(([key, value]) => { + const standardValueForKey = + standard.standardValue && typeof standard.standardValue === "object" + ? standard.standardValue[key] + : undefined; + + const isDifferent = + standardValueForKey !== undefined && + JSON.stringify(value) !== JSON.stringify(standardValueForKey); + + return ( + + + {key}: + + + {standard.complianceStatus === "Compliant" && value === true + ? "Compliant" + : typeof value === "object" && value !== null + ? value.label || JSON.stringify(value) + : value === true + ? "Enabled" + : value === false + ? "Disabled" + : String(value)} + + + ); + }) + )} ) : ( { color: standard.complianceStatus === "Compliant" ? "success.main" + : standard.complianceStatus === "Reporting Disabled" + ? "text.secondary" : "error.main", fontWeight: - standard.complianceStatus !== "Compliant" ? "medium" : "inherit", + standard.complianceStatus === "Non-Compliant" ? "medium" : "inherit", }} > - {standard.complianceStatus === "Compliant" && - standard.currentTenantValue === true ? ( + {standard.complianceStatus === "Reporting Disabled" ? ( + + Reporting is disabled for this standard in the template configuration. + + ) : standard.complianceStatus === "Compliant" && + standard.currentTenantValue === true ? ( This setting is configured correctly From 49d2beea4450e2ee2cb62dbc9fe1010cf4e681e5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 12 Apr 2025 20:51:43 -0400 Subject: [PATCH 0557/1184] update extensions --- src/data/Extensions.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/data/Extensions.json b/src/data/Extensions.json index 895bb0971b14..3c61cbbba574 100644 --- a/src/data/Extensions.json +++ b/src/data/Extensions.json @@ -176,9 +176,9 @@ }, { "type": "password", - "name": "Sherweb.paxclientId", - "label": "Pax8 Client Id", - "placeholder": "Enter your Pax Client Id", + "name": "Pax8.clientId", + "label": "Pax8 Client ID", + "placeholder": "Enter your Pax8 Client ID", "required": true, "condition": { "field": "Sherweb.migrateFrom", @@ -188,7 +188,7 @@ }, { "type": "password", - "name": "Sherweb.paxclientSecret", + "name": "Pax8.APIKey", "label": "Pax8 Client Secret", "placeholder": "Enter your Pax Client Secret", "required": true, From 015cf88341fa72bb8e3d581ca20cc90b1d15f4e2 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 12 Apr 2025 22:41:48 -0400 Subject: [PATCH 0558/1184] fix resubmit support --- src/components/CippComponents/CippApiDialog.jsx | 7 +++++-- src/components/CippTable/CippDataTable.js | 1 + src/pages/cipp/scheduler/index.js | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index 4cba7dd8d108..d083a3c9d2bf 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -339,11 +339,14 @@ export const CippApiDialog = (props) => { // Handle JSX/Component confirmText const replaceTextInElement = (element) => { if (!element) return element; - if (typeof element === 'string') { + if (typeof element === "string") { if (Array.isArray(row) && row.length > 1) { return element.replace(/\[([^\]]+)\]/g, "the selected rows"); } else if (Array.isArray(row) && row.length === 1) { - return element.replace(/\[([^\]]+)\]/g, (_, key) => getNestedValue(row[0], key) || `[${key}]`); + return element.replace( + /\[([^\]]+)\]/g, + (_, key) => getNestedValue(row[0], key) || `[${key}]` + ); } return element.replace(/\[([^\]]+)\]/g, (_, key) => getNestedValue(row, key) || `[${key}]`); } diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 9237ab580ad1..25beed16fb5d 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -429,6 +429,7 @@ export const CippDataTable = (props) => { api={actionData.action} row={actionData.data} relatedQueryKeys={queryKey ? queryKey : title} + {...actionData.action} /> ); }, [actionData.ready, createDialog, actionData.action, actionData.data, queryKey, title])} diff --git a/src/pages/cipp/scheduler/index.js b/src/pages/cipp/scheduler/index.js index bf162c3147da..89aa1634241a 100644 --- a/src/pages/cipp/scheduler/index.js +++ b/src/pages/cipp/scheduler/index.js @@ -16,6 +16,7 @@ const Page = () => { data: { RowKey: "RowKey", RunNow: true }, icon: , confirmText: "Are you sure you want to run [Name]?", + allowResubmit: true, }, { label: "Edit Job", From 84f4e75614e3dfa30b123f7939ec51cd1c72c90c Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 13 Apr 2025 01:18:13 -0400 Subject: [PATCH 0559/1184] scheduled task info page --- .../CippComponents/ScheduledTaskDetails.jsx | 315 +++++++++--------- src/pages/cipp/scheduler/index.js | 7 +- src/pages/cipp/scheduler/task.js | 22 ++ 3 files changed, 189 insertions(+), 155 deletions(-) create mode 100644 src/pages/cipp/scheduler/task.js diff --git a/src/components/CippComponents/ScheduledTaskDetails.jsx b/src/components/CippComponents/ScheduledTaskDetails.jsx index 618ae131ef67..88aabea0f512 100644 --- a/src/components/CippComponents/ScheduledTaskDetails.jsx +++ b/src/components/CippComponents/ScheduledTaskDetails.jsx @@ -11,6 +11,7 @@ import { InputAdornment, Tooltip, Stack, + Skeleton, } from "@mui/material"; import { ApiGetCall } from "../../api/ApiCall"; import { getCippTranslation } from "../../utils/get-cipp-translation"; @@ -22,8 +23,6 @@ import { CippTimeAgo } from "/src/components/CippComponents/CippTimeAgo"; const ScheduledTaskDetails = ({ data }) => { const [taskDetails, setTaskDetails] = useState(null); - const [dialogOpen, setDialogOpen] = useState(false); - const [selectedResult, setSelectedResult] = useState(null); const [expanded, setExpanded] = useState(false); const [searchQuery, setSearchQuery] = useState(""); @@ -40,7 +39,7 @@ const ScheduledTaskDetails = ({ data }) => { }); const taskProperties = [ - "Name", + "TaskState", "Command", "Tenant", "Recurrence", @@ -79,24 +78,19 @@ const ScheduledTaskDetails = ({ data }) => { return ( <> - - - Task Details - taskDetailResults.refetch()}> - - - + + {taskDetails?.Task?.Name} + taskDetailResults.refetch()}> + + + + } layout="dual" + title="Details" + variant="outlined" showDivider={false} propertyItems={taskProperties .filter((prop) => taskDetails?.Task?.[prop] != null && taskDetails?.Task?.[prop] !== "") @@ -109,151 +103,164 @@ const ScheduledTaskDetails = ({ data }) => { isFetching={taskDetailResults.isFetching} /> - {taskDetails?.Task?.Parameters && ( - - }> - Task Parameters - - - { - return { - label: key, - value: getCippFormatting(value, key), - }; - })} - isFetching={taskDetailResults.isFetching} - /> - - + {taskDetailResults.isFetching ? ( + + ) : ( + <> + {taskDetails?.Task?.Parameters && ( + + }> + Task Parameters + + + { + return { + label: key, + value: getCippFormatting(value, key), + }; + } + )} + isFetching={taskDetailResults.isFetching} + /> + + + )} + )} - {taskDetails?.Details?.length > 0 && ( + {taskDetailResults.isFetching ? ( + + ) : ( <> - - - Execution Results{" "} - {filteredDetails && ( - - ({filteredDetails.length} of {taskDetails.Details.length}) + {taskDetails?.Details?.length > 0 && ( + <> + + + Execution Results{" "} + {filteredDetails && ( + + ({filteredDetails.length} of {taskDetails.Details.length}) + + )} - )} - - setSearchQuery(e.target.value)} - InputProps={{ - startAdornment: ( - - - - ), - endAdornment: searchQuery && ( - - - setSearchQuery("")} - aria-label="Clear search" - > - - - - - ), - }} - /> - - - {filteredDetails && - filteredDetails.map((result, index) => ( - - } + sx={{ width: 250 }} + placeholder="Search results..." + value={searchQuery} + onChange={(e) => setSearchQuery(e.target.value)} + InputProps={{ + startAdornment: ( + + + + ), + endAdornment: searchQuery && ( + + + setSearchQuery("")} + aria-label="Clear search" + > + + + + + ), + }} + /> + + + {filteredDetails && + filteredDetails.map((result, index) => ( + + } + sx={{ + "& .MuiAccordionSummary-content": { + display: "flex", + justifyContent: "space-between", + alignItems: "center", + width: "100%", + }, + }} + > + {result.TenantName || result.Tenant} + } + sx={{ mx: 1 }} + /> + + + {result.Results === "null" ? ( + No data available + ) : Array.isArray(result.Results) ? ( + + ) : typeof result.Results === "object" ? ( + ({ + label: key, + value: typeof value === "object" ? JSON.stringify(value) : value, + }))} + /> + ) : ( + +
    +                                {result.Results}
    +                              
    +
    + )} +
    +
    + ))} + {filteredDetails && filteredDetails.length === 0 && ( + - {result.TenantName || result.Tenant} - } - sx={{ mx: 1 }} - /> - - - {result.Results === "null" ? ( - No data available - ) : Array.isArray(result.Results) ? ( - - ) : typeof result.Results === "object" ? ( - ({ - label: key, - value: typeof value === "object" ? JSON.stringify(value) : value, - }))} - /> - ) : ( - -
    -                            {result.Results}
    -                          
    -
    - )} -
    - - ))} - {filteredDetails && filteredDetails.length === 0 && ( - - - No results match your search criteria - - - )} -
    + + No results match your search criteria + +
    + )} +
    + + )} )} - + ); }; diff --git a/src/pages/cipp/scheduler/index.js b/src/pages/cipp/scheduler/index.js index 89aa1634241a..6bd64ff2d6fd 100644 --- a/src/pages/cipp/scheduler/index.js +++ b/src/pages/cipp/scheduler/index.js @@ -2,13 +2,18 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import CippTablePage from "/src/components/CippComponents/CippTablePage"; import { Button } from "@mui/material"; import Link from "next/link"; -import { CalendarDaysIcon, TrashIcon } from "@heroicons/react/24/outline"; +import { CalendarDaysIcon, EyeIcon, TrashIcon } from "@heroicons/react/24/outline"; import { useState } from "react"; import { CopyAll, Edit, PlayArrow } from "@mui/icons-material"; import ScheduledTaskDetails from "../../../components/CippComponents/ScheduledTaskDetails"; const Page = () => { const actions = [ + { + label: "View Task Details", + link: "/cipp/scheduler/task?id=[RowKey]", + icon: , + }, { label: "Run Now", type: "POST", diff --git a/src/pages/cipp/scheduler/task.js b/src/pages/cipp/scheduler/task.js new file mode 100644 index 000000000000..a41c47ee55bf --- /dev/null +++ b/src/pages/cipp/scheduler/task.js @@ -0,0 +1,22 @@ +import { useRouter } from "next/router"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import ScheduledTaskDetails from "../../../components/CippComponents/ScheduledTaskDetails"; +import CippPageCard from "../../../components/CippCards/CippPageCard"; +import { CardContent, CardHeader } from "@mui/material"; + +const Page = () => { + const router = useRouter(); + const { id } = router.query; + + return ( + + + + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; From 69fe571cba6e98b6cb537df6b820881604c196c8 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 13 Apr 2025 13:04:34 +0200 Subject: [PATCH 0560/1184] Add sort --- src/layouts/top-nav.js | 125 +++++++++++++++++++++++++++++++++++------ 1 file changed, 107 insertions(+), 18 deletions(-) diff --git a/src/layouts/top-nav.js b/src/layouts/top-nav.js index 0cebc1ac3acd..f41183ba0f11 100644 --- a/src/layouts/top-nav.js +++ b/src/layouts/top-nav.js @@ -5,6 +5,10 @@ import Bars3Icon from "@heroicons/react/24/outline/Bars3Icon"; import MoonIcon from "@heroicons/react/24/outline/MoonIcon"; import SunIcon from "@heroicons/react/24/outline/SunIcon"; import BookmarkIcon from "@mui/icons-material/Bookmark"; +import ArrowUpwardIcon from "@mui/icons-material/ArrowUpward"; +import ArrowDownwardIcon from "@mui/icons-material/ArrowDownward"; +import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp"; +import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown"; import { Box, Divider, @@ -27,6 +31,8 @@ import { NotificationsPopover } from "./notifications-popover"; import { useDialog } from "../hooks/use-dialog"; import { MagnifyingGlassIcon } from "@heroicons/react/24/outline"; import { CippCentralSearch } from "../components/CippComponents/CippCentralSearch"; +import { applySort } from "../utils/apply-sort"; + const TOP_NAV_HEIGHT = 64; export const TopNav = (props) => { @@ -42,6 +48,7 @@ export const TopNav = (props) => { }, [settings]); const [anchorEl, setAnchorEl] = useState(null); + const [sortOrder, setSortOrder] = useState("asc"); const handleBookmarkClick = (event) => { setAnchorEl(event.currentTarget); @@ -51,8 +58,42 @@ export const TopNav = (props) => { setAnchorEl(null); }; - const open = Boolean(anchorEl); - const id = open ? "bookmark-popover" : undefined; + const handleSortToggle = () => { + const newSortOrder = sortOrder === "asc" ? "desc" : "asc"; + setSortOrder(newSortOrder); + + // Save the new sort order and re-order bookmarks + const sortedBookmarks = applySort(settings.bookmarks || [], "label", newSortOrder); + settings.handleUpdate({ + bookmarks: sortedBookmarks, + sortOrder: newSortOrder, + }); + }; + + // Move a bookmark up in the list + const moveBookmarkUp = (index) => { + if (index <= 0) return; + + const updatedBookmarks = [...(settings.bookmarks || [])]; + const temp = updatedBookmarks[index]; + updatedBookmarks[index] = updatedBookmarks[index - 1]; + updatedBookmarks[index - 1] = temp; + + settings.handleUpdate({ bookmarks: updatedBookmarks }); + }; + + // Move a bookmark down in the list + const moveBookmarkDown = (index) => { + const bookmarks = settings.bookmarks || []; + if (index >= bookmarks.length - 1) return; + + const updatedBookmarks = [...bookmarks]; + const temp = updatedBookmarks[index]; + updatedBookmarks[index] = updatedBookmarks[index + 1]; + updatedBookmarks[index + 1] = temp; + + settings.handleUpdate({ bookmarks: updatedBookmarks }); + }; useEffect(() => { const handleKeyDown = (event) => { @@ -67,10 +108,22 @@ export const TopNav = (props) => { }; }, []); + useEffect(() => { + if (settings.sortOrder) { + setSortOrder(settings.sortOrder); + } + }, [settings.sortOrder]); + const openSearch = () => { searchDialog.handleOpen(); }; + // Use the sorted bookmarks if sorting is applied, otherwise use the bookmarks in their current order + const displayBookmarks = settings.bookmarks || []; + + const open = Boolean(anchorEl); + const id = open ? "bookmark-popover" : undefined; + return ( { horizontal: "center", }} > - - {(settings.bookmarks || []).length === 0 ? ( + + + + + {sortOrder === "asc" ? : } + + + Sort Alphabetically + + {displayBookmarks.length === 0 ? ( No bookmarks added yet - } + primary={No bookmarks added yet} /> ) : ( - settings.bookmarks.map((bookmark, idx) => ( + displayBookmarks.map((bookmark, idx) => ( handleBookmarkClose()} + sx={{ + color: "inherit", + display: "flex", + justifyContent: "space-between", + }} > - {bookmark.label} - } - /> + handleBookmarkClose()} + sx={{ + textDecoration: "none", + color: "inherit", + flexGrow: 1, + marginRight: 2, + }} + > + {bookmark.label} + + + { + e.preventDefault(); + moveBookmarkUp(idx); + }} + disabled={idx === 0} + > + + + { + e.preventDefault(); + moveBookmarkDown(idx); + }} + disabled={idx === displayBookmarks.length - 1} + > + + + )) )} From 9bf1fee3708a60336cf87ae5751c3696ce83a3a9 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 13 Apr 2025 13:30:23 +0200 Subject: [PATCH 0561/1184] task removal --- .../conditional/deploy-vacation/index.js | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/pages/tenant/conditional/deploy-vacation/index.js b/src/pages/tenant/conditional/deploy-vacation/index.js index ca4092689195..e1c24e2a761c 100644 --- a/src/pages/tenant/conditional/deploy-vacation/index.js +++ b/src/pages/tenant/conditional/deploy-vacation/index.js @@ -3,8 +3,22 @@ import CippTablePage from "/src/components/CippComponents/CippTablePage"; import { Button } from "@mui/material"; import { EventAvailable } from "@mui/icons-material"; import Link from "next/link"; +import { Delete } from "@mui/icons-material"; const Page = () => { + const actions = [ + { + label: "Cancel Vacation Mode", + type: "POST", + url: "/api/RemoveScheduledItem", + data: { ID: "RowKey" }, + confirmText: + "Are you sure you want to cancel this vacation mode entry? This might mean the user will remain in vacation mode permanently.", + icon: , + multiPost: false, + }, + ]; + return ( { apiUrl="/api/ListScheduledItems?Type=Set-CIPPCAExclusion" queryKey="VacationMode" tenantInTitle={false} + actions={actions} simpleColumns={[ "Name", "TaskState", @@ -26,6 +41,18 @@ const Page = () => { "Parameters.UserName", "Parameters.PolicyId", ]} + offCanvas={{ + extendedInfoFields: [ + "Name", + "TaskState", + "ScheduledTime", + "Parameters.UserName", + "Parameters.PolicyId", + "Tenant", + "ExecutedTime", + ], + actions: actions, + }} /> ); }; From d8e150ae8e15d028d1ca486e8e5f58bae6d56230 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 13 Apr 2025 13:10:51 -0400 Subject: [PATCH 0562/1184] standards organization --- .../CippStandards/CippStandardAccordion.jsx | 15 +- src/pages/tenant/standards/compare/index.js | 685 ++++++++++-------- 2 files changed, 382 insertions(+), 318 deletions(-) diff --git a/src/components/CippStandards/CippStandardAccordion.jsx b/src/components/CippStandards/CippStandardAccordion.jsx index 4564e4dc49c9..8037de3b2e2b 100644 --- a/src/components/CippStandards/CippStandardAccordion.jsx +++ b/src/components/CippStandards/CippStandardAccordion.jsx @@ -36,6 +36,7 @@ import Defender from "../../icons/iconly/bulk/defender"; import Intune from "../../icons/iconly/bulk/intune"; import GDAPRoles from "/src/data/GDAPRoles"; import timezoneList from "/src/data/timezoneList"; +import standards from "/src/data/standards.json"; const getAvailableActions = (disabledFeatures) => { const allActions = [ @@ -81,7 +82,7 @@ const CippAddedComponent = React.memo(({ standardName, component, formControl }) CippAddedComponent.displayName = "CippAddedComponent"; const CippStandardAccordion = ({ - standards, + standards: providedStandards, selectedStandards, expanded, handleAccordionToggle, @@ -101,7 +102,7 @@ const CippStandardAccordion = ({ const newConfiguredState = { ...configuredState }; Object.keys(selectedStandards).forEach((standardName) => { - const standard = standards.find((s) => s.name === standardName.split("[")[0]); + const standard = providedStandards.find((s) => s.name === standardName.split("[")[0]); if (standard) { const actionFilled = !!_.get(watchedValues, `${standardName}.action`, false); @@ -123,16 +124,18 @@ const CippStandardAccordion = ({ if (!_.isEqual(newConfiguredState, configuredState)) { setConfiguredState(newConfiguredState); } - }, [watchedValues, standards, selectedStandards]); + }, [watchedValues, providedStandards, selectedStandards]); const groupedStandards = useMemo(() => { const result = {}; Object.keys(selectedStandards).forEach((standardName) => { - const standard = standards.find((s) => s.name === standardName.split("[")[0]); + const baseStandardName = standardName.split("[")[0]; + const standard = providedStandards.find((s) => s.name === baseStandardName); if (!standard) return; - const category = standard.cat || "Other Standards"; + const standardInfo = standards.find((s) => s.name === baseStandardName); + const category = standardInfo?.cat || "Other Standards"; if (!result[category]) { result[category] = []; @@ -149,7 +152,7 @@ const CippStandardAccordion = ({ }); return result; - }, [selectedStandards, standards]); + }, [selectedStandards, providedStandards]); const filteredGroupedStandards = useMemo(() => { if (!searchQuery && filter === "all") { diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index f78f32f4cee6..59f092bd81ab 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import React, { useState, useEffect, useMemo } from "react"; import { Button, Card, @@ -257,19 +257,69 @@ const Page = () => { ]); const comparisonModeOptions = [{ label: "Compare Tenant to Standard", value: "standard" }]; - const filteredData = comparisonData?.filter((standard) => { - const matchesFilter = - filter === "all" || - (filter === "compliant" && standard.complianceStatus === "Compliant") || - (filter === "nonCompliant" && standard.complianceStatus === "Non-Compliant"); + // Group standards by category + const groupedStandards = useMemo(() => { + if (!comparisonData) return {}; - const matchesSearch = - !searchQuery || - standard.standardName.toLowerCase().includes(searchQuery.toLowerCase()) || - standard.standardDescription.toLowerCase().includes(searchQuery.toLowerCase()); + const result = {}; - return matchesFilter && matchesSearch; - }); + comparisonData.forEach((standard) => { + // Find the standard info in the standards.json data + const standardInfo = standards.find((s) => s.name === standard.standardId); + + // Use the category from standards.json, or default to "Other Standards" + const category = standardInfo?.cat || "Other Standards"; + + if (!result[category]) { + result[category] = []; + } + + result[category].push(standard); + }); + + // Sort standards within each category + Object.keys(result).forEach((category) => { + result[category].sort((a, b) => a.standardName.localeCompare(b.standardName)); + }); + + return result; + }, [comparisonData]); + + const filteredGroupedStandards = useMemo(() => { + if (!groupedStandards) return {}; + + if (!searchQuery && filter === "all") { + return groupedStandards; + } + + const result = {}; + const searchLower = searchQuery.toLowerCase(); + + Object.keys(groupedStandards).forEach((category) => { + const categoryMatchesSearch = !searchQuery || category.toLowerCase().includes(searchLower); + + const filteredStandards = groupedStandards[category].filter((standard) => { + const matchesFilter = + filter === "all" || + (filter === "compliant" && standard.complianceStatus === "Compliant") || + (filter === "nonCompliant" && standard.complianceStatus === "Non-Compliant"); + + const matchesSearch = + !searchQuery || + categoryMatchesSearch || + standard.standardName.toLowerCase().includes(searchLower) || + standard.standardDescription.toLowerCase().includes(searchLower); + + return matchesFilter && matchesSearch; + }); + + if (filteredStandards.length > 0) { + result[category] = filteredStandards; + } + }); + + return result; + }, [groupedStandards, searchQuery, filter]); const allCount = comparisonData?.length || 0; const compliantCount = @@ -571,7 +621,7 @@ const Page = () => { )} - {filteredData && filteredData.length === 0 && ( + {filteredGroupedStandards && Object.keys(filteredGroupedStandards).length === 0 && ( No standards match the selected filter criteria or search query. @@ -581,344 +631,355 @@ const Page = () => { )} - {filteredData && - filteredData.length > 0 && - filteredData.map((standard, index) => ( - - - - + + {Object.keys(filteredGroupedStandards).map((category) => ( + + + {category} + + + {filteredGroupedStandards[category].map((standard, index) => ( + + + - - - {standard.complianceStatus === "Compliant" ? ( - - ) : standard.complianceStatus === "Reporting Disabled" ? ( - - ) : ( - - )} - - - {standard?.standardName} - - - - - - - - - - {!standard.standardValue ? ( - - This data has not yet been collected. Collect the data by pressing the - report button on the top of the page. - - ) : ( - - + + - {standard.standardValue && - typeof standard.standardValue === "object" && - Object.keys(standard.standardValue).length > 0 ? ( - Object.entries(standard.standardValue).map(([key, value]) => ( - - - {key}: - - - {typeof value === "object" && value !== null - ? value.label || JSON.stringify(value) - : value === true - ? "Enabled" - : value === false - ? "Disabled" - : String(value)} - - - )) + {standard.complianceStatus === "Compliant" ? ( + + ) : standard.complianceStatus === "Reporting Disabled" ? ( + ) : ( - - {standard.standardValue === true ? ( - - This setting is configured correctly - - ) : standard.standardValue === false ? ( - - This setting is not configured correctly - - ) : standard.standardValue !== undefined ? ( - typeof standard.standardValue === "object" ? ( - "No settings configured" - ) : ( - String(standard.standardValue) - ) - ) : ( - - This setting is not configured, or data has not been collected. - If you are getting this after data collection, the tenant might - not be licensed for this feature - - )} - + )} + + {standard?.standardName} + + + + + + + + + + {!standard.standardValue ? ( + + This data has not yet been collected. Collect the data by pressing the + report button on the top of the page. + + ) : ( + + + + {standard.standardValue && + typeof standard.standardValue === "object" && + Object.keys(standard.standardValue).length > 0 ? ( + Object.entries(standard.standardValue).map(([key, value]) => ( + + + {key}: + + + {typeof value === "object" && value !== null + ? value.label || JSON.stringify(value) + : value === true + ? "Enabled" + : value === false + ? "Disabled" + : String(value)} + + + )) + ) : ( + + {standard.standardValue === true ? ( + + This setting is configured correctly + + ) : standard.standardValue === false ? ( + + This setting is not configured correctly + + ) : standard.standardValue !== undefined ? ( + typeof standard.standardValue === "object" ? ( + "No settings configured" + ) : ( + String(standard.standardValue) + ) + ) : ( + + This setting is not configured, or data has not been + collected. If you are getting this after data collection, the + tenant might not be licensed for this feature + + )} + + )} + + + )} + + + - )} - - - - - - + + - - - + + - + + + + + + + {currentTenant} + + + + + - + + + {standard.complianceStatus} + - - {currentTenant} - - - - - + + + + {/* Existing tenant comparison content */} + {typeof standard.currentTenantValue === "object" && + standard.currentTenantValue !== null ? ( + {standard.complianceStatus === "Reporting Disabled" ? ( + + Reporting is disabled for this standard in the template configuration. + + ) : ( + Object.entries(standard.currentTenantValue).map(([key, value]) => { + const standardValueForKey = + standard.standardValue && typeof standard.standardValue === "object" + ? standard.standardValue[key] + : undefined; + + const isDifferent = + standardValueForKey !== undefined && + JSON.stringify(value) !== JSON.stringify(standardValueForKey); + + return ( + + + {key}: + + + {standard.complianceStatus === "Compliant" && value === true + ? "Compliant" + : typeof value === "object" && value !== null + ? value.label || JSON.stringify(value) + : value === true + ? "Enabled" + : value === false + ? "Disabled" + : String(value)} + + + ); + }) + )} + + ) : ( + - - {standard.complianceStatus} + > + {standard.complianceStatus === "Reporting Disabled" ? ( + + Reporting is disabled for this standard in the template configuration. + + ) : standard.complianceStatus === "Compliant" && + standard.currentTenantValue === true ? ( + + This setting is configured correctly + + ) : standard.currentTenantValue === false ? ( + + This setting is not configured correctly + + ) : standard.currentTenantValue !== undefined ? ( + String(standard.currentTenantValue) + ) : ( + + This setting is not configured, or data has not been collected. If you + are getting this after data collection, the tenant might not be + licensed for this feature + + )} - - - - - - {typeof standard.currentTenantValue === "object" && - standard.currentTenantValue !== null ? ( - - {standard.complianceStatus === "Reporting Disabled" ? ( - - Reporting is disabled for this standard in the template configuration. - - ) : ( - Object.entries(standard.currentTenantValue).map(([key, value]) => { - const standardValueForKey = - standard.standardValue && typeof standard.standardValue === "object" - ? standard.standardValue[key] - : undefined; - - const isDifferent = - standardValueForKey !== undefined && - JSON.stringify(value) !== JSON.stringify(standardValueForKey); - - return ( - - - {key}: - - - {standard.complianceStatus === "Compliant" && value === true - ? "Compliant" - : typeof value === "object" && value !== null - ? value.label || JSON.stringify(value) - : value === true - ? "Enabled" - : value === false - ? "Disabled" - : String(value)} - - - ); - }) - )} - - ) : ( - - {standard.complianceStatus === "Reporting Disabled" ? ( - - Reporting is disabled for this standard in the template configuration. - - ) : standard.complianceStatus === "Compliant" && - standard.currentTenantValue === true ? ( - - This setting is configured correctly - - ) : standard.currentTenantValue === false ? ( - - This setting is not configured correctly - - ) : standard.currentTenantValue !== undefined ? ( - String(standard.currentTenantValue) - ) : ( - - This setting is not configured, or data has not been collected. If you - are getting this after data collection, the tenant might not be licensed - for this feature - - )} - - )} - - - - - {standard.complianceDetails && ( - - - - - - - {standard.complianceDetails} - + )} +
    - )} -
    - ))} + + {standard.complianceDetails && ( + + + + + + + {standard.complianceDetails} + + + + )} +
    + ))} + + ))} Date: Sun, 13 Apr 2025 19:50:31 +0200 Subject: [PATCH 0563/1184] version up --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index e13bd0cafa30..a687242f92c7 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.4.2" + "version": "7.5.0" } From 3c868ca85976d685e1d9b3cfa252505b21eeb13d Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 14 Apr 2025 12:45:18 +0200 Subject: [PATCH 0564/1184] Update Label_Issues.yml Signed-off-by: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> --- .github/workflows/Label_Issues.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Label_Issues.yml b/.github/workflows/Label_Issues.yml index a0ec41e47894..38865a62fae8 100644 --- a/.github/workflows/Label_Issues.yml +++ b/.github/workflows/Label_Issues.yml @@ -14,7 +14,7 @@ jobs: - name: Label Issues uses: andymckay/labeler@5c59dabdfd4dd5bd9c6e6d255b01b9d764af4414 with: - add-labels: 'unconfirmed-by-user' + add-labels: 'not-assigned' repo-token: ${{ secrets.GITHUB_TOKEN }} label_issues_frs: if: github.repository_owner == 'KelvinTegelaar' && contains(github.event.issue.title, 'Feature') @@ -25,5 +25,5 @@ jobs: - name: Label Issues uses: andymckay/labeler@5c59dabdfd4dd5bd9c6e6d255b01b9d764af4414 with: - add-labels: 'enhancement, no-priority' + add-labels: 'enhancement, not-assigned' repo-token: ${{ secrets.GITHUB_TOKEN }} From 2aa112c77dd0d4d90b4f1c75520c67f4e5e3b338 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 14 Apr 2025 14:09:02 +0200 Subject: [PATCH 0565/1184] fixes new bpa sync --- src/components/CippComponents/BPASyncDialog.jsx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/components/CippComponents/BPASyncDialog.jsx b/src/components/CippComponents/BPASyncDialog.jsx index cba62df8e67c..10ae3cecd724 100644 --- a/src/components/CippComponents/BPASyncDialog.jsx +++ b/src/components/CippComponents/BPASyncDialog.jsx @@ -27,22 +27,16 @@ export const BPASyncDialog = ({ createDialog }) => { // Use methods for form handling and control const { handleSubmit, control } = methods; - const [tenantId, setTenantId] = useState(""); const [isSyncing, setIsSyncing] = useState(false); - - // Use ApiGetCall instead of useApiCall const bpaSyncResults = ApiPostCall({ urlfromdata: true, }); const handleForm = (values) => { - setTenantId(values.tenantFilter || ""); - setIsSyncing(true); - bpaSyncResults.mutate({ url: "/api/ExecBPA", - queryKey: `bpa-sync-${tenantId}`, - data: tenantId ? { TenantFilter: tenantId } : {}, + queryKey: `bpa-sync-${values.tenantFilter}`, + data: values.tenantFilter ? { TenantFilter: values.tenantFilter } : {}, }); }; From 47e539194b7c564e4d21ba63d96eeceed0298d8f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 14 Apr 2025 12:29:44 -0400 Subject: [PATCH 0566/1184] csv fix prettify licenses in table and allow for multi select sorting --- src/components/csvExportButton.js | 37 ++++++++++----- src/utils/get-cipp-filter-variant.js | 8 ++++ src/utils/get-cipp-formatting.js | 56 +++++++++++++++++------ src/utils/get-cipp-license-translation.js | 11 +++-- 4 files changed, 83 insertions(+), 29 deletions(-) diff --git a/src/components/csvExportButton.js b/src/components/csvExportButton.js index 5e7424dad1c8..1d1dedddbb28 100644 --- a/src/components/csvExportButton.js +++ b/src/components/csvExportButton.js @@ -14,19 +14,28 @@ const flattenObject = (obj, parentKey = "") => { const fullKey = parentKey ? `${parentKey}.${key}` : key; if (typeof obj[key] === "object" && obj[key] !== null && !Array.isArray(obj[key])) { Object.assign(flattened, flattenObject(obj[key], fullKey)); + } else if (Array.isArray(obj[key]) && typeof obj[key][0] === "string") { + flattened[fullKey] = obj[key]; } else if (Array.isArray(obj[key])) { - // Handle arrays of objects by applying the formatter on each property - flattened[fullKey] = obj[key] - .map((item) => - typeof item === "object" - ? JSON.stringify( - Object.fromEntries( - Object.entries(flattenObject(item)).map(([k, v]) => [k, getCippFormatting(v, k, "text", false)]) + let testFormatting = getCippFormatting(obj[key], key, "text", false, false); + if (typeof testFormatting === "string" && !testFormatting.includes("[object Object]")) { + flattened[fullKey] = testFormatting; + } else { + flattened[fullKey] = obj[key] + .map((item) => + typeof item === "object" + ? JSON.stringify( + Object.fromEntries( + Object.entries(flattenObject(item)).map(([k, v]) => [ + k, + getCippFormatting(v, k, "text", false), + ]) + ) ) - ) - : getCippFormatting(item, fullKey, "text", false) - ) - .join(", "); + : getCippFormatting(item, fullKey, "text", false, false) + ) + .join(", "); + } } else { flattened[fullKey] = obj[key]; } @@ -57,6 +66,12 @@ export const CSVExportButton = (props) => { const formattedRow = {}; columnKeys.forEach((key) => { const value = row[key]; + // check for string and do not format + if (typeof value === "string") { + formattedRow[key] = value; + return; + } + // Pass flattened data to the formatter for CSV export formattedRow[key] = getCippFormatting(value, key, "text", false); }); diff --git a/src/utils/get-cipp-filter-variant.js b/src/utils/get-cipp-filter-variant.js index cbd5ac15f227..375b470e7bf3 100644 --- a/src/utils/get-cipp-filter-variant.js +++ b/src/utils/get-cipp-filter-variant.js @@ -32,6 +32,14 @@ export const getCippFilterVariant = (providedColumnKeys) => { case "assignedLicenses": return { filterVariant: "multi-select", + sortingFn: "alphanumeric", + filterFn: "arrIncludesSome", + }; + case "Tenant": + return { + filterVariant: "multi-select", + sortingFn: "alphanumeric", + filterFn: "arrIncludesSome", }; case "accountEnabled": return { diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 019407339e10..12292a9395ef 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -32,7 +32,7 @@ import { getCippTranslation } from "./get-cipp-translation"; import DOMPurify from "dompurify"; import { getSignInErrorCodeTranslation } from "./get-cipp-signin-errorcode-translation"; -export const getCippFormatting = (data, cellName, type, canReceive) => { +export const getCippFormatting = (data, cellName, type, canReceive, flatten = true) => { const isText = type === "text"; const cellNameLower = cellName.toLowerCase(); // if data is a data object, return a fFormatted date @@ -266,19 +266,30 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { if (cellName === "excludedTenants") { // Handle null or undefined data if (data === null || data === undefined) { - return isText ? "No data" : ; + return isText ? ( + "No data" + ) : ( + + + + ); } //check if data is an array. if (Array.isArray(data)) { return isText - ? data.map(item => (typeof item === 'object' && item?.label) ? item.label : item).join(", ") - : data.map((item) => ( - item && - )); + ? data + .map((item) => (typeof item === "object" && item?.label ? item.label : item)) + .join(", ") + : data.map( + (item) => + item && ( + + ) + ); } } if (cellName === "bulkUser") { @@ -331,7 +342,7 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { ); } - if (cellName === 'AccessRights') { + if (cellName === "AccessRights") { // Handle data as an array or string const accessRights = Array.isArray(data) ? data.flatMap((item) => (typeof item === "string" ? item.split(", ") : [])) @@ -380,6 +391,9 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { // Handle proxyAddresses if (cellName === "proxyAddresses") { + if (!Array.isArray(data)) { + data = [data]; + } const emails = data.map((email) => email.replace(/smtp:/i, "")); return isText ? emails.join(", ") @@ -388,7 +402,21 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { // Handle assigned licenses if (cellName === "assignedLicenses") { - return isText ? getCippLicenseTranslation(data) : getCippLicenseTranslation(data); + var translatedLicenses = getCippLicenseTranslation(data); + return isText + ? Array.isArray(translatedLicenses) + ? translatedLicenses.join(", ") + : translatedLicenses + : translatedLicenses.map((license) => ( + + )); + } + + if (cellName === "unifiedRoles") { + if (Array.isArray(data)) { + const roles = data.map((role) => getCippRoleTranslation(role.roleDefinitionId)); + return isText ? roles.join(", ") : roles; + } } // Handle roleDefinitionId @@ -540,7 +568,7 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { } // Handle arrays of strings - if (Array.isArray(data) && data.every((item) => typeof item === "string")) { + if (Array.isArray(data) && data.every((item) => typeof item === "string") && flatten) { // if string matches json format, parse it if (data.every((item) => item.startsWith("{") || item.startsWith("["))) { return isText ? ( @@ -560,7 +588,7 @@ export const getCippFormatting = (data, cellName, type, canReceive) => { } // Handle objects - if (typeof data === "object" && data !== null) { + if (typeof data === "object" && data !== null && flatten) { return isText ? ( JSON.stringify(data) ) : ( diff --git a/src/utils/get-cipp-license-translation.js b/src/utils/get-cipp-license-translation.js index e77574c713a9..9303303a9a27 100644 --- a/src/utils/get-cipp-license-translation.js +++ b/src/utils/get-cipp-license-translation.js @@ -3,6 +3,10 @@ import M365Licenses from "../data/M365Licenses.json"; export const getCippLicenseTranslation = (licenseArray) => { let licenses = []; + if (!Array.isArray(licenseArray) && typeof licenseArray === "object") { + licenseArray = [licenseArray]; + } + licenseArray?.forEach((licenseAssignment) => { let found = false; for (let x = 0; x < M365Licenses.length; x++) { @@ -21,9 +25,8 @@ export const getCippLicenseTranslation = (licenseArray) => { } }); - const result = licenses.join(", "); - if (!result) { - return "No Licenses Assigned"; + if (!licenses || licenses.length === 0) { + return ["No Licenses Assigned"]; } - return result; + return licenses; }; From f6a4303f165bfa53bbe3d4f9d5b3483dac656f2a Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 14 Apr 2025 12:29:59 -0400 Subject: [PATCH 0567/1184] add null safety to standard report action --- src/pages/tenant/standards/compare/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 59f092bd81ab..144b96900376 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -175,9 +175,9 @@ const Page = () => { // Check if reporting is enabled for this standard by checking the action property // The standard should be reportable if there's an action with value === 'Report' - const actions = standardConfig.action || []; + const actions = standardConfig?.action ?? []; const reportingEnabled = - actions.filter((action) => action.value === "Report").length > 0; + actions.filter((action) => action?.value === "Report").length > 0; // Find the tenant's value for this standard const currentTenantStandard = currentTenantData.find( From f57111902656ec2581734230de7790c3a2c17daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Mon, 14 Apr 2025 21:03:44 +0200 Subject: [PATCH 0568/1184] update icons and fix casing --- .../CippComponents/CippExchangeActions.jsx | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/components/CippComponents/CippExchangeActions.jsx b/src/components/CippComponents/CippExchangeActions.jsx index 0cce26aec516..79ad7ee2e619 100644 --- a/src/components/CippComponents/CippExchangeActions.jsx +++ b/src/components/CippComponents/CippExchangeActions.jsx @@ -1,9 +1,4 @@ -import { - EyeIcon, - TrashIcon, - MagnifyingGlassIcon, - PlayCircleIcon, -} from "@heroicons/react/24/outline"; +import { TrashIcon, MagnifyingGlassIcon, PlayCircleIcon } from "@heroicons/react/24/outline"; import { Archive, MailOutline, @@ -14,8 +9,11 @@ import { PhonelinkLock, Key, PostAdd, - Add, Gavel, + Language, + Outbox, + NotificationImportant, + DataUsage, } from "@mui/icons-material"; export const CippExchangeActions = () => { @@ -190,12 +188,12 @@ export const CippExchangeActions = () => { ], }, { - label: "Set mailbox locale", + label: "Set Mailbox Locale", type: "POST", url: "/api/ExecSetMailboxLocale", data: { user: "UPN", ProhibitSendQuota: true }, confirmText: "Enter a locale, e.g. en-US", - icon: , + icon: , fields: [ { label: "Locale", @@ -211,7 +209,7 @@ export const CippExchangeActions = () => { url: "/api/ExecSetMailboxQuota", data: { user: "UPN", ProhibitSendQuota: true }, confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", - icon: , + icon: , fields: [ { label: "Quota", @@ -230,7 +228,7 @@ export const CippExchangeActions = () => { ProhibitSendReceiveQuota: true, }, confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", - icon: , + icon: , fields: [ { label: "Quota", @@ -246,7 +244,7 @@ export const CippExchangeActions = () => { url: "/api/ExecSetMailboxQuota", data: { user: "UPN", IssueWarningQuota: true }, confirmText: "Enter a quota. e.g. 1000MB, 10GB,1TB", - icon: , + icon: , fields: [ { label: "Quota", From 1cc846db7d3b012da1b460b53a6d05cf701938d1 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 14 Apr 2025 17:25:12 -0400 Subject: [PATCH 0569/1184] tidy console logging --- src/components/CippCards/CippInfoBar.jsx | 1 - src/components/CippComponents/CippAppPermissionBuilder.jsx | 2 +- src/components/CippTable/CippGraphExplorerFilter.js | 2 +- src/pages/cipp/custom-data/schema-extensions/add.js | 2 +- src/pages/tenant/administration/add-subscription/index.jsx | 1 - src/pages/tenant/administration/alert-configuration/alert.jsx | 2 +- src/pages/tenant/gdap-management/roles/add.js | 1 - src/pages/tenant/standards/compare/index.js | 2 +- 8 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/components/CippCards/CippInfoBar.jsx b/src/components/CippCards/CippInfoBar.jsx index bcdf4930475f..28ca740199f7 100644 --- a/src/components/CippCards/CippInfoBar.jsx +++ b/src/components/CippCards/CippInfoBar.jsx @@ -63,7 +63,6 @@ export const CippInfoBar = ({ data, isFetching }) => {
    {item.offcanvas && ( <> - {console.log("item.offcanvas", item.offcanvas)} { savePresetApi.mutate({ url: "/api/ExecGraphExplorerPreset", diff --git a/src/pages/cipp/custom-data/schema-extensions/add.js b/src/pages/cipp/custom-data/schema-extensions/add.js index 208e332c3773..605d50ed4f15 100644 --- a/src/pages/cipp/custom-data/schema-extensions/add.js +++ b/src/pages/cipp/custom-data/schema-extensions/add.js @@ -48,7 +48,7 @@ const Page = () => { }); const handleAddSchema = (data) => { - console.log(data); + //console.log(data); if (!data.properties || data.properties.length === 0) { formControl.setError("properties", { type: "manual", diff --git a/src/pages/tenant/administration/add-subscription/index.jsx b/src/pages/tenant/administration/add-subscription/index.jsx index 43e3e07b61ff..e46a5a2fb5ac 100644 --- a/src/pages/tenant/administration/add-subscription/index.jsx +++ b/src/pages/tenant/administration/add-subscription/index.jsx @@ -103,7 +103,6 @@ const Page = () => {
    {selectedSku?.value && ( - {console.log(selectedSku)} { if (alert?.LogType === "Scripted") { setAlertType("script"); - console.log(alert); + //console.log(alert); // Create formatted excluded tenants array if it exists const excludedTenantsFormatted = Array.isArray(alert.excludedTenants) diff --git a/src/pages/tenant/gdap-management/roles/add.js b/src/pages/tenant/gdap-management/roles/add.js index c6cbf12598ec..50fb24b47137 100644 --- a/src/pages/tenant/gdap-management/roles/add.js +++ b/src/pages/tenant/gdap-management/roles/add.js @@ -188,7 +188,6 @@ const Page = () => { The following groups will be created in your partner tenant if they do not already exist: - {console.log(selectedGdapRoles)} ({ label: `M365 GDAP ${role.label}${customSuffix ? ` - ${customSuffix}` : ""}`, diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 144b96900376..7f65d1eb1e48 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -171,7 +171,7 @@ const Page = () => { const standardId = `standards.${standardKey}`; const standardInfo = standards.find((s) => s.name === standardId); const standardSettings = standardConfig.standards?.[standardKey] || {}; - console.log(standardInfo); + //console.log(standardInfo); // Check if reporting is enabled for this standard by checking the action property // The standard should be reportable if there's an action with value === 'Report' From 909b6b4538d4f22b2d948285f261444c421b6740 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 14 Apr 2025 17:27:36 -0400 Subject: [PATCH 0570/1184] null safety --- src/pages/tenant/standards/compare/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 7f65d1eb1e48..d5710a31dcfa 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -221,7 +221,7 @@ const Page = () => { // Use the direct standard value from the tenant object if it exists allStandards.push({ standardId, - standardName: standardInfo.label || standardKey, + standardName: standardInf?.label || standardKey, currentTenantValue: directStandardValue !== undefined ? directStandardValue @@ -726,7 +726,7 @@ const Page = () => { {typeof value === "object" && value !== null - ? value.label || JSON.stringify(value) + ? value?.label || JSON.stringify(value) : value === true ? "Enabled" : value === false @@ -902,7 +902,7 @@ const Page = () => { {standard.complianceStatus === "Compliant" && value === true ? "Compliant" : typeof value === "object" && value !== null - ? value.label || JSON.stringify(value) + ? value?.label || JSON.stringify(value) : value === true ? "Enabled" : value === false From db8d7aefda0c747e9f2ccda36442066c9e541522 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 14 Apr 2025 17:29:50 -0400 Subject: [PATCH 0571/1184] typo --- src/pages/tenant/standards/compare/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index d5710a31dcfa..504fd330f526 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -221,7 +221,7 @@ const Page = () => { // Use the direct standard value from the tenant object if it exists allStandards.push({ standardId, - standardName: standardInf?.label || standardKey, + standardName: standardInfo?.label || standardKey, currentTenantValue: directStandardValue !== undefined ? directStandardValue From 853c50b74007ce2cc2d8745e39693e21e25e6aee Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 14 Apr 2025 17:43:00 -0400 Subject: [PATCH 0572/1184] handle no clients set up in azure --- src/components/CippIntegrations/CippApiClientManagement.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 71b60116dd50..9eadb67a9c7b 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -259,7 +259,7 @@ const CippApiClientManagement = () => { apiClients.data?.pages?.[0]?.Results?.filter((c) => c.Enabled) .map((c) => c.ClientId) .sort(), - azureConfig.data?.Results?.ClientIDs?.sort() + (azureConfig.data?.Results?.ClientIDs || []).sort() ) && ( From 20d413f8d98bd4bf4faeb745346cf29803d3c36b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 14 Apr 2025 17:44:08 -0400 Subject: [PATCH 0573/1184] Update CippApiClientManagement.jsx --- src/components/CippIntegrations/CippApiClientManagement.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippIntegrations/CippApiClientManagement.jsx b/src/components/CippIntegrations/CippApiClientManagement.jsx index 9eadb67a9c7b..5e7db0b495d5 100644 --- a/src/components/CippIntegrations/CippApiClientManagement.jsx +++ b/src/components/CippIntegrations/CippApiClientManagement.jsx @@ -253,7 +253,7 @@ const CippApiClientManagement = () => { showDivider={false} isFetching={azureConfig.isFetching} /> - {azureConfig.isSuccess && azureConfig.data?.Results?.ClientIDs && ( + {azureConfig.isSuccess && ( <> {!isEqual( apiClients.data?.pages?.[0]?.Results?.filter((c) => c.Enabled) From 60e6d908d462ca5f371fbf2355c7a3b881ebf670 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 14 Apr 2025 18:43:52 -0400 Subject: [PATCH 0574/1184] update icon --- src/pages/tenant/standards/list-standards/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/tenant/standards/list-standards/index.js b/src/pages/tenant/standards/list-standards/index.js index 132ac07cbb7e..236eefb61925 100644 --- a/src/pages/tenant/standards/list-standards/index.js +++ b/src/pages/tenant/standards/list-standards/index.js @@ -6,6 +6,7 @@ import { CopyAll, Delete, PlayArrow, AddBox, Edit, GitHub } from "@mui/icons-mat import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall"; import { Grid } from "@mui/system"; import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; +import { EyeIcon } from "@heroicons/react/24/outline"; const Page = () => { const oldStandards = ApiGetCall({ url: "/api/ListStandards", queryKey: "ListStandards-legacy" }); @@ -20,7 +21,7 @@ const Page = () => { { label: "View Tenant Report", link: "/tenant/standards/compare?templateId=[GUID]", - icon: , + icon: , color: "info", target: "_self", }, From 1ef7097973ee4f08e72b1bba51e9122f178665e5 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 15 Apr 2025 01:06:15 -0400 Subject: [PATCH 0575/1184] Fix category grouping --- src/pages/tenant/standards/compare/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tenant/standards/compare/index.js b/src/pages/tenant/standards/compare/index.js index 504fd330f526..b26632b4befd 100644 --- a/src/pages/tenant/standards/compare/index.js +++ b/src/pages/tenant/standards/compare/index.js @@ -265,7 +265,7 @@ const Page = () => { comparisonData.forEach((standard) => { // Find the standard info in the standards.json data - const standardInfo = standards.find((s) => s.name === standard.standardId); + const standardInfo = standards.find((s) => standard.standardId.includes(s.name)); // Use the category from standards.json, or default to "Other Standards" const category = standardInfo?.cat || "Other Standards"; From 48bba397860b9071c985034bbb27b930c8e01d5c Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 15 Apr 2025 10:36:42 -0400 Subject: [PATCH 0576/1184] trigger quarantine message viewer update after data change --- src/pages/email/administration/quarantine/index.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/email/administration/quarantine/index.js b/src/pages/email/administration/quarantine/index.js index fc0323c4f77e..e8eb9cf6603c 100644 --- a/src/pages/email/administration/quarantine/index.js +++ b/src/pages/email/administration/quarantine/index.js @@ -39,6 +39,7 @@ const Page = () => { const [traceDetails, setTraceDetails] = useState([]); const [traceMessageId, setTraceMessageId] = useState(null); const [messageSubject, setMessageSubject] = useState(null); + const [messageContentsWaiting, setMessageContentsWaiting] = useState(false); const getMessageContents = ApiGetCall({ url: "/api/ListMailQuarantineMessage", @@ -46,7 +47,7 @@ const Page = () => { tenantFilter: tenantFilter, Identity: messageId, }, - waiting: false, + waiting: messageContentsWaiting, queryKey: `ListMailQuarantineMessage-${messageId}`, }); @@ -61,7 +62,9 @@ const Page = () => { const viewMessage = (row) => { const id = row.Identity; setMessageId(id); - getMessageContents.waiting = true; + if (!messageContentsWaiting) { + setMessageContentsWaiting(true); + } getMessageContents.refetch(); setDialogOpen(true); }; @@ -85,7 +88,7 @@ const Page = () => { } else { setDialogContent(); } - }, [getMessageContents.isSuccess]); + }, [getMessageContents.isSuccess, getMessageContents.data]); const actions = [ { From 7ec97126fd8cbe7ed233b1f91d22aa1f44dfcc76 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 15 Apr 2025 10:39:03 -0400 Subject: [PATCH 0577/1184] up version --- public/version.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/version.json b/public/version.json index a687242f92c7..a85ab8e9a599 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.5.0" -} + "version": "7.5.1" +} \ No newline at end of file From 231140bd56808bfad6f0cc81f8db59a1515cea0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Wed, 16 Apr 2025 09:38:07 +0200 Subject: [PATCH 0578/1184] Update standards.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristian Kjærgård <31723128+kris6673@users.noreply.github.com> --- src/data/standards.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index 92ef2e2806f5..ceb9dd681d4b 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -779,8 +779,8 @@ "name": "standards.StaleEntraDevices", "cat": "Entra (AAD) Standards", "tag": ["CIS"], - "helpText": "Cleans up Entra devices that have not connected/signed in for the specified number of days.", - "docsDescription": "Cleans up Entra devices that have not connected/signed in for the specified number of days. First disables and later deletes the devices. More info can be found in the [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices)", + "helpText": "Remediate is currently not avaliable. Cleans up Entra devices that have not connected/signed in for the specified number of days.", + "docsDescription": "Remediate is currently not avaliable. Cleans up Entra devices that have not connected/signed in for the specified number of days. First disables and later deletes the devices. More info can be found in the [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices)", "addedComponent": [ { "type": "number", From c28c574d189ba7b67f91c2ba90048f7601dc2683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Wed, 16 Apr 2025 09:39:41 +0200 Subject: [PATCH 0579/1184] typo --- src/data/standards.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index ceb9dd681d4b..128dbeca2516 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -779,8 +779,8 @@ "name": "standards.StaleEntraDevices", "cat": "Entra (AAD) Standards", "tag": ["CIS"], - "helpText": "Remediate is currently not avaliable. Cleans up Entra devices that have not connected/signed in for the specified number of days.", - "docsDescription": "Remediate is currently not avaliable. Cleans up Entra devices that have not connected/signed in for the specified number of days. First disables and later deletes the devices. More info can be found in the [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices)", + "helpText": "Remediate is currently not available. Cleans up Entra devices that have not connected/signed in for the specified number of days.", + "docsDescription": "Remediate is currently not available. Cleans up Entra devices that have not connected/signed in for the specified number of days. First disables and later deletes the devices. More info can be found in the [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices)", "addedComponent": [ { "type": "number", From fb461f5272f183435b7b5ecc17637be5d835047a Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Wed, 16 Apr 2025 16:31:29 +0800 Subject: [PATCH 0580/1184] Update the Exchange Info Card to include more mailbox hold types --- .../CippCards/CippExchangeInfoCard.jsx | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/components/CippCards/CippExchangeInfoCard.jsx b/src/components/CippCards/CippExchangeInfoCard.jsx index 524ec7acce4d..e4dba29760d4 100644 --- a/src/components/CippCards/CippExchangeInfoCard.jsx +++ b/src/components/CippCards/CippExchangeInfoCard.jsx @@ -29,6 +29,13 @@ export const CippExchangeInfoCard = (props) => { { name: "ActiveSync", enabled: exchangeData?.MailboxActiveSyncEnabled }, ]; + // Define mailbox hold types array + const holds = [ + { name: "Compliance Tag Hold", enabled: exchangeData?.ComplianceTagHold }, + { name: "Retention Hold", enabled: exchangeData?.RetentionHold }, + { name: "Litigation Hold", enabled: exchangeData?.LitigationHold }, + ]; + return ( { ) } /> + {/* Combine all mailbox hold types into a single PropertyListItem */} + + ) : ( +
    + {holds.map((hold) => ( + : } + color={hold.enabled ? "success" : "default"} + variant="outlined" + size="small" + sx={{ mr: 1, mb: 1 }} + /> + ))} +
    + ) + } + /> {/* Combine protocols into a single PropertyListItem */} Date: Wed, 16 Apr 2025 22:54:35 +0800 Subject: [PATCH 0581/1184] Remove redundant Legal Hold card, Addition of Retention Hold action --- .../CippCards/CippExchangeInfoCard.jsx | 11 ----------- .../CippComponents/CippExchangeActions.jsx | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/components/CippCards/CippExchangeInfoCard.jsx b/src/components/CippCards/CippExchangeInfoCard.jsx index e4dba29760d4..ff2e1d45d75b 100644 --- a/src/components/CippCards/CippExchangeInfoCard.jsx +++ b/src/components/CippCards/CippExchangeInfoCard.jsx @@ -171,17 +171,6 @@ export const CippExchangeInfoCard = (props) => { ) } /> - - ) : ( - getCippFormatting(exchangeData?.LitigationHold, "LitigationHold") - ) - } - /> {/* Combine all mailbox hold types into a single PropertyListItem */} { @@ -187,6 +188,21 @@ export const CippExchangeActions = () => { }, ], }, + { + label: "Set Retention Hold", + type: "POST", + url: "/api/ExecSetRetentionHold", + data: { UPN: "UPN", Identity: "Id" }, + confirmText: "What do you want to set Retention Hold to?", + icon: , + fields: [ + { + type: "switch", + name: "disable", + label: "Disable Retention Hold", + }, + ], + }, { label: "Set Mailbox Locale", type: "POST", From 788039edf246e7bab832d03c16ba97ef165f291c Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Thu, 17 Apr 2025 00:01:47 +0800 Subject: [PATCH 0582/1184] inclusion of extra hold types from updated API --- src/components/CippCards/CippExchangeInfoCard.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/CippCards/CippExchangeInfoCard.jsx b/src/components/CippCards/CippExchangeInfoCard.jsx index ff2e1d45d75b..03f4473c745a 100644 --- a/src/components/CippCards/CippExchangeInfoCard.jsx +++ b/src/components/CippCards/CippExchangeInfoCard.jsx @@ -34,6 +34,10 @@ export const CippExchangeInfoCard = (props) => { { name: "Compliance Tag Hold", enabled: exchangeData?.ComplianceTagHold }, { name: "Retention Hold", enabled: exchangeData?.RetentionHold }, { name: "Litigation Hold", enabled: exchangeData?.LitigationHold }, + { name: "In-Place Hold", enabled: exchangeData?.InPlaceHold }, + { name: "eDiscovery Hold", enabled: exchangeData?.EDiscoveryHold }, + { name: "Purview Retention Hold", enabled: exchangeData?.PurviewRetentionHold }, + { name: "Excluded from Org-Wide Hold", enabled: exchangeData?.ExcludedFromOrgWideHold }, ]; return ( From 404c435597415236516ba40eb5fc10d5c4ca469b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 17 Apr 2025 17:50:39 +0200 Subject: [PATCH 0583/1184] fix: remove 'icon' from the icon import to fix page crash --- src/components/CippComponents/CippExchangeActions.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippExchangeActions.jsx b/src/components/CippComponents/CippExchangeActions.jsx index cda7b62f3f92..b947a19603fa 100644 --- a/src/components/CippComponents/CippExchangeActions.jsx +++ b/src/components/CippComponents/CippExchangeActions.jsx @@ -14,7 +14,7 @@ import { Outbox, NotificationImportant, DataUsage, - MailLockIcon, + MailLock, } from "@mui/icons-material"; export const CippExchangeActions = () => { @@ -194,7 +194,7 @@ export const CippExchangeActions = () => { url: "/api/ExecSetRetentionHold", data: { UPN: "UPN", Identity: "Id" }, confirmText: "What do you want to set Retention Hold to?", - icon: , + icon: , fields: [ { type: "switch", From ee950590cd1e4577b09c80bb79742974fe1884f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 17 Apr 2025 19:16:24 +0200 Subject: [PATCH 0584/1184] feat: add text selection on focus for search input --- src/components/CippComponents/CippCentralSearch.jsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/CippComponents/CippCentralSearch.jsx b/src/components/CippComponents/CippCentralSearch.jsx index 6a90c4e35b9d..a3a8c214b5af 100644 --- a/src/components/CippComponents/CippCentralSearch.jsx +++ b/src/components/CippComponents/CippCentralSearch.jsx @@ -96,6 +96,12 @@ export const CippCentralSearch = ({ handleClose, open }) => { label="Search any menu item or page in CIPP" onChange={handleChange} onKeyDown={handleKeyDown} + onFocus={(event) => { + // Select all text on focus if there's content + if (event.target.value) { + event.target.select(); + } + }} value={searchValue} autoFocus /> @@ -106,10 +112,7 @@ export const CippCentralSearch = ({ handleClose, open }) => { {filteredItems.map((item, index) => ( - + handleCardClick(item.path)} aria-label={`Navigate to ${item.title}`} From 9c27cb16c00ce21210dcc16e71f67f3695520ba6 Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Thu, 17 Apr 2025 19:08:13 +0100 Subject: [PATCH 0585/1184] Group permissions under "Mailbox Permissions" so that it is more readable --- .../CippExchangeSettingsForm.jsx | 262 +++++++++++------- 1 file changed, 155 insertions(+), 107 deletions(-) diff --git a/src/components/CippFormPages/CippExchangeSettingsForm.jsx b/src/components/CippFormPages/CippExchangeSettingsForm.jsx index 66d8bb4b6ecb..8c81187ce7a1 100644 --- a/src/components/CippFormPages/CippExchangeSettingsForm.jsx +++ b/src/components/CippFormPages/CippExchangeSettingsForm.jsx @@ -91,116 +91,164 @@ const CippExchangeSettingsForm = (props) => { const sections = [ { id: "mailboxPermissions", - cardLabelBox: "-", // This can be an icon or text label + cardLabelBox: "-", text: "Mailbox Permissions", subtext: "Manage mailbox permissions for users", formContent: ( - - - currentSettings?.Permissions?.some( - (perm) => - perm.AccessRights === "FullAccess" && perm.User === user.userPrincipalName - ) - ).map((user) => ({ - value: user.userPrincipalName, - label: `${user.displayName} (${user.userPrincipalName})`, - })) || [] - } - formControl={formControl} - /> - ({ - value: user.userPrincipalName, - label: `${user.displayName} (${user.userPrincipalName})`, - })) || [] - } - formControl={formControl} - /> - ({ - value: user.userPrincipalName, - label: `${user.displayName} (${user.userPrincipalName})`, - })) || [] - } - formControl={formControl} - /> - ({ - value: user.userPrincipalName, - label: `${user.displayName} (${user.userPrincipalName})`, - })) || [] - } - formControl={formControl} - /> - - currentSettings?.Permissions?.some( - (perm) => perm.AccessRights === "SendAs" && perm.User === user.userPrincipalName - ) - ).map((user) => ({ - value: user.userPrincipalName, - label: `${user.displayName} (${user.userPrincipalName})`, - })) || [] - } - formControl={formControl} - /> - ({ - value: user.userPrincipalName, - label: `${user.displayName} (${user.userPrincipalName})`, - })) || [] - } - formControl={formControl} - /> - - currentSettings?.Permissions?.some( - (perm) => - perm.AccessRights === "SendOnBehalf" && perm.User === user.userPrincipalName - ) - ).map((user) => ({ - value: user.userPrincipalName, - label: `${user.displayName} (${user.userPrincipalName})`, - })) || [] - } - formControl={formControl} - /> + + {/* Full Access Section */} + + Full Access + + Manage who has full access to this mailbox + + + + currentSettings?.Permissions?.some( + (perm) => + perm.AccessRights === "FullAccess" && perm.User === user.userPrincipalName + ) + ).map((user) => ({ + value: user.userPrincipalName, + label: `${user.displayName} (${user.userPrincipalName})`, + })) || [] + } + formControl={formControl} + /> + ({ + value: user.userPrincipalName, + label: `${user.displayName} (${user.userPrincipalName})`, + })) || [] + } + formControl={formControl} + /> + ({ + value: user.userPrincipalName, + label: `${user.displayName} (${user.userPrincipalName})`, + })) || [] + } + formControl={formControl} + /> + + + + {/* Send As Section */} + + Send As + + Manage who can send emails as this user + + + + currentSettings?.Permissions?.some( + (perm) => perm.AccessRights === "SendAs" && perm.User === user.userPrincipalName + ) + ).map((user) => ({ + value: user.userPrincipalName, + label: `${user.displayName} (${user.userPrincipalName})`, + })) || [] + } + formControl={formControl} + /> + ({ + value: user.userPrincipalName, + label: `${user.displayName} (${user.userPrincipalName})`, + })) || [] + } + formControl={formControl} + /> + + + + {/* Send On Behalf Section */} + + Send On Behalf + + Manage who can send emails on behalf of this user + + + + currentSettings?.Permissions?.some( + (perm) => + perm.AccessRights === "SendOnBehalf" && perm.User === user.userPrincipalName + ) + ).map((user) => ({ + value: user.userPrincipalName, + label: `${user.displayName} (${user.userPrincipalName})`, + })) || [] + } + formControl={formControl} + /> + ({ + value: user.userPrincipalName, + label: `${user.displayName} (${user.userPrincipalName})`, + })) || [] + } + formControl={formControl} + /> + + + From 3f53a8b0ab9ca9618b282f5655433c6080c175bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 17 Apr 2025 20:49:56 +0200 Subject: [PATCH 0586/1184] feat: add Teams Meeting Recording Expiration standard --- src/data/standards.json | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 128dbeca2516..85392f6923c4 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -3404,6 +3404,27 @@ "powershellEquivalent": "Set-CsTenantFederationConfiguration", "recommendedBy": [] }, + { + "name": "standards.TeamsMeetingRecordingExpiration", + "cat": "Teams Standards", + "tag": [], + "helpText": "Sets the default number of days after which Teams meeting recordings automatically expire. Valid values are -1 (Never Expire) or between 1 and 99999. The default value is 120 days.", + "docsDescription": "Allows administrators to configure a default expiration period (in days) for Teams meeting recordings. Recordings older than this period will be automatically moved to the recycle bin. This setting helps manage storage consumption and enforce data retention policies.", + "addedComponent": [ + { + "type": "number", + "name": "standards.TeamsMeetingRecordingExpiration.ExpirationDays", + "label": "Recording Expiration Days (e.g., 365)", + "required": true + } + ], + "label": "Set Teams Meeting Recording Expiration", + "impact": "Medium Impact", + "impactColour": "warning", + "addedDate": "2025-04-17", + "powershellEquivalent": "Set-CsTeamsMeetingPolicy -Identity Global -MeetingRecordingExpirationDays ", + "recommendedBy": [] + }, { "name": "standards.TeamsMessagingPolicy", "cat": "Teams Standards", From f406ab0c4288ac267e4a2c6f87c6976874772699 Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Thu, 17 Apr 2025 21:23:19 +0100 Subject: [PATCH 0587/1184] Added tracking and modification of per-mailbox recipient limits. --- .../CippExchangeSettingsForm.jsx | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/components/CippFormPages/CippExchangeSettingsForm.jsx b/src/components/CippFormPages/CippExchangeSettingsForm.jsx index 8c81187ce7a1..db924f6476d1 100644 --- a/src/components/CippFormPages/CippExchangeSettingsForm.jsx +++ b/src/components/CippFormPages/CippExchangeSettingsForm.jsx @@ -56,6 +56,8 @@ const CippExchangeSettingsForm = (props) => { setRelatedQueryKeys([`Mailbox-${userId}`]); } else if (type === "ooo") { setRelatedQueryKeys([`ooo-${userId}`]); + } else if (type === "recipientLimits") { + setRelatedQueryKeys([`Mailbox-${userId}`]); } const values = formControl.getValues(); @@ -65,6 +67,13 @@ const CippExchangeSettingsForm = (props) => { ...values[type], }; + // Format data for recipient limits + if (type === "recipientLimits") { + data.Identity = currentSettings.Mailbox[0].Identity; + data.recipientLimit = values[type].MaxRecipients; + delete data.MaxRecipients; + } + //remove all nulls and undefined values Object.keys(data).forEach((key) => { if (data[key] === "" || data[key] === null) { @@ -76,6 +85,7 @@ const CippExchangeSettingsForm = (props) => { calendar: "/api/ExecEditCalendarPermissions", forwarding: "/api/ExecEmailForward", ooo: "/api/ExecSetOoO", + recipientLimits: "/api/ExecSetRecipientLimits", }; postRequest.mutate({ url: url[type], @@ -506,6 +516,39 @@ const CippExchangeSettingsForm = (props) => { ), }, + { + id: "recipientLimits", + cardLabelBox: "RL", + text: "Recipient Limits", + subtext: "Set the maximum number of recipients per message", + formContent: ( + + + + + + + + + + + + + + ), + }, ]; return ( From c9b0a0d0ba719a94729f8399a2d3f469a036b543 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 18 Apr 2025 00:28:27 +0200 Subject: [PATCH 0588/1184] dont allow replacing the value --- src/pages/endpoint/applications/list/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/endpoint/applications/list/index.js b/src/pages/endpoint/applications/list/index.js index cfde01fbfce0..d10fe0727555 100644 --- a/src/pages/endpoint/applications/list/index.js +++ b/src/pages/endpoint/applications/list/index.js @@ -14,7 +14,7 @@ const Page = () => { type: "POST", url: "/api/ExecAssignApp", data: { - AssignTo: "AllUsers", + AssignTo: "!AllUsers", ID: "id", }, confirmText: "Are you sure you want to assign this app to all users?", @@ -26,7 +26,7 @@ const Page = () => { type: "POST", url: "/api/ExecAssignApp", data: { - AssignTo: "AllDevices", + AssignTo: "!AllDevices", ID: "id", }, confirmText: "Are you sure you want to assign this app to all devices?", @@ -38,7 +38,7 @@ const Page = () => { type: "POST", url: "/api/ExecAssignApp", data: { - AssignTo: "Both", + AssignTo: "!Both", ID: "id", }, confirmText: "Are you sure you want to assign this app to all users and devices?", From 388c98b41fb7a449a2c51ffe4827205207cf476a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= <31723128+kris6673@users.noreply.github.com> Date: Sun, 20 Apr 2025 09:03:48 +0200 Subject: [PATCH 0589/1184] Update Close_Stale_Issues_and_PRs.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristian Kjærgård <31723128+kris6673@users.noreply.github.com> --- .github/workflows/Close_Stale_Issues_and_PRs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Close_Stale_Issues_and_PRs.yml b/.github/workflows/Close_Stale_Issues_and_PRs.yml index 96b5dc6d5e14..88607a42675d 100644 --- a/.github/workflows/Close_Stale_Issues_and_PRs.yml +++ b/.github/workflows/Close_Stale_Issues_and_PRs.yml @@ -13,6 +13,6 @@ jobs: stale-issue-message: 'This issue is stale because it has been open 10 days with no activity. We will close this issue soon. If you want this feature implemented you can contribute it. See: https://docs.cipp.app/dev-documentation/contributing-to-the-code . Please notify the team if you are working on this yourself.' close-issue-message: 'This issue was closed because it has been stalled for 14 days with no activity.' stale-issue-label: 'no-activity' - exempt-issue-labels: 'planned,bug' + exempt-issue-labels: 'planned,bug,roadmap' days-before-stale: 9 days-before-close: 5 From 4b2eaf9bef205cf81cec6ffc1dc298948748de26 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 22 Apr 2025 10:25:12 -0400 Subject: [PATCH 0590/1184] fix org repo creation --- src/pages/tools/community-repos/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/tools/community-repos/index.js b/src/pages/tools/community-repos/index.js index 67eeafbe732b..beadf2237bf1 100644 --- a/src/pages/tools/community-repos/index.js +++ b/src/pages/tools/community-repos/index.js @@ -204,9 +204,9 @@ const Page = () => { { - createForm.setValue("Type", e.target.value); + createForm.setValue("type", e.target.value); }} > } label="User" /> @@ -214,7 +214,7 @@ const Page = () => { Date: Tue, 22 Apr 2025 16:45:21 -0400 Subject: [PATCH 0591/1184] fix import From fc957a474b1dffbbb4a4bc251191b14c87c1e655 Mon Sep 17 00:00:00 2001 From: Mikey O'Toole Date: Wed, 23 Apr 2025 22:35:10 +0100 Subject: [PATCH 0592/1184] Add Welsh to language list I'm assuming that this is what populates the language select for Office app deployment - we need Welsh for this and current have to add it in a rather specific way to the list (by language code) which is easy for folks to forget / get wrong. The language is present in the Intune wizard - this brings the list in CIPP closer to what Intune allows. Signed-off-by: Mikey O'Toole --- src/data/languageList.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/data/languageList.json b/src/data/languageList.json index 3bd0ec3d8e82..83b661b34b01 100644 --- a/src/data/languageList.json +++ b/src/data/languageList.json @@ -238,5 +238,11 @@ "Geographic area": "Vietnam", "tag": "vi-VN", "LCID": "1066" + }, + { + "language": "Welsh", + "Geographic area": "Wales" + "tag": "cy-GB", + "LCID": "1106" } ] From b24112a2a1fb845317010fd8ebceae95d394f9c0 Mon Sep 17 00:00:00 2001 From: Roel van der Wegen Date: Thu, 24 Apr 2025 09:38:42 +0200 Subject: [PATCH 0593/1184] Missing comma Signed-off-by: Roel van der Wegen --- src/data/languageList.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/languageList.json b/src/data/languageList.json index 83b661b34b01..fea7ddddc8ca 100644 --- a/src/data/languageList.json +++ b/src/data/languageList.json @@ -241,7 +241,7 @@ }, { "language": "Welsh", - "Geographic area": "Wales" + "Geographic area": "Wales", "tag": "cy-GB", "LCID": "1106" } From 5ceac612cd17edd340ac46689bc20539a1aa8210 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 24 Apr 2025 12:14:21 +0200 Subject: [PATCH 0594/1184] chore: enable report and alert for AutopilotStatusPage --- src/data/standards.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index 85392f6923c4..b399eb991e2d 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -3515,8 +3515,8 @@ "cat": "Device Management Standards", "tag": [], "disabledFeatures": { - "report": true, - "warn": true, + "report": false, + "warn": false, "remediate": false }, "helpText": "Deploy the Autopilot Status Page, which shows progress during device setup through Autopilot.", From ef69be6329592d9393de30592299e8cdc563cbb4 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 24 Apr 2025 14:16:55 +0200 Subject: [PATCH 0595/1184] chore: enable report and alert for AutopilotProfile --- src/data/standards.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index 85392f6923c4..f5300ba54ac4 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -3588,8 +3588,8 @@ "cat": "Device Management Standards", "tag": [], "disabledFeatures": { - "report": true, - "warn": true, + "report": false, + "warn": false, "remediate": false }, "helpText": "Assign the appropriate Autopilot profile to streamline device deployment.", @@ -3614,6 +3614,7 @@ "type": "autoComplete", "multiple": false, "creatable": false, + "required": false, "name": "standards.AutopilotProfile.Languages", "label": "Languages", "api": { From adb862e6cc36c47642954d2a17e320a4856e092b Mon Sep 17 00:00:00 2001 From: D-on-GitHub <23340866+D-on-GitHub@users.noreply.github.com> Date: Fri, 25 Apr 2025 11:25:51 +0200 Subject: [PATCH 0596/1184] Update Exchange Admin Center URL Signed-off-by: D-on-GitHub <23340866+D-on-GitHub@users.noreply.github.com> --- src/components/CippComponents/CippTenantSelector.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippTenantSelector.jsx b/src/components/CippComponents/CippTenantSelector.jsx index c21f75c58525..ee87c0ca3fdf 100644 --- a/src/components/CippComponents/CippTenantSelector.jsx +++ b/src/components/CippComponents/CippTenantSelector.jsx @@ -197,7 +197,7 @@ export const CippTenantSelector = (props) => { }, { label: "Exchange Portal", - link: `https://admin.exchange.microsoft.com/?landingpage=homepage&form=mac_sidebar&delegatedOrg=${currentTenant?.value}`, + link: `https://admin.cloud.microsoft/exchange?landingpage=homepage&form=mac_sidebar&delegatedOrg=${currentTenant?.value}`, icon: , }, { From f129df56dd9504fb852aad964b8d6672b557e59d Mon Sep 17 00:00:00 2001 From: D-on-GitHub <23340866+D-on-GitHub@users.noreply.github.com> Date: Fri, 25 Apr 2025 11:27:33 +0200 Subject: [PATCH 0597/1184] Change Exchange Admin URL --- src/data/portals.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/portals.json b/src/data/portals.json index d5fdbd5ebeb0..890176c83572 100644 --- a/src/data/portals.json +++ b/src/data/portals.json @@ -11,7 +11,7 @@ { "label": "Exchange Portal", "name": "Exchange_Portal", - "url": "https://admin.exchange.microsoft.com/?landingpage=homepage&form=mac_sidebar&delegatedOrg=defaultDomainName#", + "url": "https://admin.cloud.microsoft/exchange?landingpage=homepage&form=mac_sidebar&delegatedOrg=defaultDomainName#", "variable": "defaultDomainName", "target": "_blank", "external": true, From 61ecdd6c1dcb674453603e96b6573f9662de6c00 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 25 Apr 2025 22:40:09 -0400 Subject: [PATCH 0598/1184] better formatting for json strings --- src/utils/get-cipp-formatting.js | 27 ++++++++++++++++------- src/utils/get-cipp-license-translation.js | 4 ++++ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 12292a9395ef..091d06b18c17 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -571,14 +571,25 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr if (Array.isArray(data) && data.every((item) => typeof item === "string") && flatten) { // if string matches json format, parse it if (data.every((item) => item.startsWith("{") || item.startsWith("["))) { - return isText ? ( - JSON.stringify(data) - ) : ( - JSON.parse(item))} - tableTitle={getCippTranslation(cellName)} - /> - ); + try { + const parsedData = data.map(item => JSON.parse(item)); + // Check if parsedData contains simple strings + if (parsedData.every(item => typeof item === 'string')) { + return isText + ? parsedData.join(", ") + : parsedData.map((item) => ); + } + return isText ? ( + JSON.stringify(data) + ) : ( + + ); + } catch (e) { + return isText ? JSON.stringify(data) : data.join(", "); + } } //if the array is empty, return "No data" diff --git a/src/utils/get-cipp-license-translation.js b/src/utils/get-cipp-license-translation.js index 9303303a9a27..9e36c5cc7db1 100644 --- a/src/utils/get-cipp-license-translation.js +++ b/src/utils/get-cipp-license-translation.js @@ -7,6 +7,10 @@ export const getCippLicenseTranslation = (licenseArray) => { licenseArray = [licenseArray]; } + if (!licenseArray || licenseArray.length === 0) { + return ["No Licenses Assigned"]; + } + licenseArray?.forEach((licenseAssignment) => { let found = false; for (let x = 0; x < M365Licenses.length; x++) { From 1e7084fd715a5c32946b652f918fc4ac7a854e3f Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 25 Apr 2025 23:07:31 -0400 Subject: [PATCH 0599/1184] fix theme switching --- src/contexts/settings-context.js | 6 ++++++ src/layouts/top-nav.js | 1 + 2 files changed, 7 insertions(+) diff --git a/src/contexts/settings-context.js b/src/contexts/settings-context.js index 49b3eafedc6c..a265c9fd09aa 100644 --- a/src/contexts/settings-context.js +++ b/src/contexts/settings-context.js @@ -70,6 +70,7 @@ const storeSettings = (value) => { const initialSettings = { direction: "ltr", paletteMode: "light", + currentTheme: { value: "light", label: "light" }, pinNav: true, currentTenant: null, showDevtools: false, @@ -95,6 +96,10 @@ export const SettingsProvider = (props) => { const restored = restoreSettings(); if (restored) { + if (!restored.currentTheme && restored.paletteMode) { + restored.currentTheme = { value: restored.paletteMode, label: restored.paletteMode }; + } + setState((prevState) => ({ ...prevState, ...restored, @@ -129,6 +134,7 @@ export const SettingsProvider = (props) => { return !isEqual(initialSettings, { direction: state.direction, paletteMode: state.paletteMode, + currentTheme: state.currentTheme, pinNav: state.pinNav, }); }, [state]); diff --git a/src/layouts/top-nav.js b/src/layouts/top-nav.js index f41183ba0f11..ec7f06c7f3dd 100644 --- a/src/layouts/top-nav.js +++ b/src/layouts/top-nav.js @@ -44,6 +44,7 @@ export const TopNav = (props) => { const themeName = settings.currentTheme?.value === "light" ? "dark" : "light"; settings.handleUpdate({ currentTheme: { value: themeName, label: themeName }, + paletteMode: themeName, }); }, [settings]); From 8dc294e1df677ef7b1e777122c68d242809697c4 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 26 Apr 2025 00:02:00 -0400 Subject: [PATCH 0600/1184] formatting tweaks --- .../CippComponents/CollapsibleChipList.js | 29 ++++ .../gdap-management/onboarding/start.js | 2 +- src/utils/get-cipp-formatting.js | 137 +++++++++++------- 3 files changed, 118 insertions(+), 50 deletions(-) create mode 100644 src/components/CippComponents/CollapsibleChipList.js diff --git a/src/components/CippComponents/CollapsibleChipList.js b/src/components/CippComponents/CollapsibleChipList.js new file mode 100644 index 000000000000..23a9586e8034 --- /dev/null +++ b/src/components/CippComponents/CollapsibleChipList.js @@ -0,0 +1,29 @@ +import React, { useState } from "react"; +import { Box, Link } from "@mui/material"; + +export const CollapsibleChipList = ({ children, maxItems = 4 }) => { + const [expanded, setExpanded] = useState(false); + const childArray = React.Children.toArray(children); + const hasMoreItems = childArray.length > maxItems; + + const toggleExpanded = (e) => { + e.preventDefault(); + setExpanded(!expanded); + }; + + return ( + + {expanded ? childArray : childArray.slice(0, maxItems)} + + {hasMoreItems && ( + + {expanded ? "Show less" : `+${childArray.length - maxItems} more`} + + )} + + ); +}; diff --git a/src/pages/tenant/gdap-management/onboarding/start.js b/src/pages/tenant/gdap-management/onboarding/start.js index 3a14356c6cd8..0880f78a5192 100644 --- a/src/pages/tenant/gdap-management/onboarding/start.js +++ b/src/pages/tenant/gdap-management/onboarding/start.js @@ -496,7 +496,7 @@ const Page = () => { value: getCippFormatting( currentInvite ? currentInvite.RoleMappings - : currentRelationship?.addedFields?.accessDetails.unifiedRoles, + : currentRelationship?.addedFields?.accessDetails?.unifiedRoles, "unifiedRoles", "object" ), diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 091d06b18c17..6b54585891b2 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -31,6 +31,7 @@ import { import { getCippTranslation } from "./get-cipp-translation"; import DOMPurify from "dompurify"; import { getSignInErrorCodeTranslation } from "./get-cipp-signin-errorcode-translation"; +import { CollapsibleChipList } from "../components/CippComponents/CollapsibleChipList"; export const getCippFormatting = (data, cellName, type, canReceive, flatten = true) => { const isText = type === "text"; @@ -58,6 +59,25 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr portal_sharepoint: Description, }; + // Create a helper function to render chips with CollapsibleChipList + const renderChipList = (items, maxItems = 4) => { + if (!Array.isArray(items) || items.length === 0) { + return ; + } + + return ( + + {items.map((item, index) => ( + + ))} + + ); + }; + //if the cellName starts with portal_, return text, or a link with an icon if (cellName.startsWith("portal_")) { const IconComponent = portalIcons[cellName]; @@ -214,11 +234,10 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr if (Array.isArray(data)) { return isText ? data.join(", ") - : data.map((item) => ( - ({ + text: item?.label ? item.label : item, + icon: item?.type === "Group" ? ( @@ -227,11 +246,9 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr - ) : null - } - type="chip" - /> - )); + ) : null, + })) + ); } else { return isText ? ( data @@ -280,15 +297,10 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr ? data .map((item) => (typeof item === "object" && item?.label ? item.label : item)) .join(", ") - : data.map( - (item) => - item && ( - - ) + : renderChipList( + data + .filter((item) => item) + .map((item) => (typeof item === "object" && item?.label ? item.label : item)) ); } } @@ -349,11 +361,7 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr : typeof data === "string" ? data.split(", ") : []; - return isText - ? accessRights.join(", ") - : accessRights.map((accessRight) => ( - - )); + return isText ? accessRights.join(", ") : renderChipList(accessRights); } // Handle null or undefined data @@ -379,13 +387,11 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr if (cellName === "From") { // if data is array if (Array.isArray(data)) { - return isText ? data.join(", ") : data.join(", "); + return isText ? data.join(", ") : renderChipList(data); } else { // split on ; , and create chips per email const emails = data.split(/;|,/); - return isText - ? emails.join(", ") - : emails.map((email) => ); + return isText ? emails.join(", ") : renderChipList(emails); } } @@ -394,10 +400,33 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr if (!Array.isArray(data)) { data = [data]; } + + if (data.length === 0) { + return isText ? "No data" : ; + } + + const primaryEmail = data.find((email) => email.startsWith("SMTP:")); const emails = data.map((email) => email.replace(/smtp:/i, "")); - return isText - ? emails.join(", ") - : emails.map((email) => ); + return isText ? ( + emails.join(", ") + ) : ( + { + if (primaryEmail.includes(email)) { + return { + email: email, + primary: true, + }; + } else { + return { + email: email, + primary: false, + }; + } + })} + /> + ); } // Handle assigned licenses @@ -407,16 +436,21 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr ? Array.isArray(translatedLicenses) ? translatedLicenses.join(", ") : translatedLicenses - : translatedLicenses.map((license) => ( - - )); + : Array.isArray(translatedLicenses) + ? renderChipList(translatedLicenses) + : translatedLicenses; } if (cellName === "unifiedRoles") { if (Array.isArray(data)) { const roles = data.map((role) => getCippRoleTranslation(role.roleDefinitionId)); - return isText ? roles.join(", ") : roles; + return isText ? roles.join(", ") : renderChipList(roles, 12); } + return isText ? ( + "No roles" + ) : ( + + ); } // Handle roleDefinitionId @@ -444,12 +478,24 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr // if data is a json string, parse it and return a table if (typeof data === "string" && (data.startsWith("{") || data.startsWith("["))) { try { + const parsedData = JSON.parse(data); + // Check if parsed data is a simple array of strings + if ( + Array.isArray(parsedData) && + parsedData.every((item) => typeof item === "string") && + flatten + ) { + return isText ? parsedData.join(", ") : renderChipList(parsedData); + } return isText ? ( data ) : ( - + ); - } catch (e) {} + } catch (e) { + // If parsing fails, return the original string + return isText ? data : {data}; + } } if (cellName === "key") { @@ -572,20 +618,15 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr // if string matches json format, parse it if (data.every((item) => item.startsWith("{") || item.startsWith("["))) { try { - const parsedData = data.map(item => JSON.parse(item)); + const parsedData = data.map((item) => JSON.parse(item)); // Check if parsedData contains simple strings - if (parsedData.every(item => typeof item === 'string')) { - return isText - ? parsedData.join(", ") - : parsedData.map((item) => ); + if (parsedData.every((item) => typeof item === "string")) { + return isText ? parsedData.join(", ") : renderChipList(parsedData); } return isText ? ( JSON.stringify(data) ) : ( - + ); } catch (e) { return isText ? JSON.stringify(data) : data.join(", "); @@ -593,9 +634,7 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr } //if the array is empty, return "No data" - return isText - ? data.join(", ") - : data.map((item) => ); + return isText ? data.join(", ") : renderChipList(data); } // Handle objects From 147a5241af3e660e499d2ac5f35b2cf43e75ef46 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 26 Apr 2025 00:26:47 -0400 Subject: [PATCH 0601/1184] fix tenant filter --- src/utils/get-cipp-formatting.js | 56 +++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 6b54585891b2..0466412a89d7 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -67,13 +67,24 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr return ( - {items.map((item, index) => ( - - ))} + {items.map((item, index) => { + // Avoid JSON.stringify which can cause circular reference errors + let key = index; + if (typeof item === "string" || typeof item === "number") { + key = item; + } else if (typeof item === "object" && item?.label) { + key = `item-${item.label}-${index}`; + } + + return ( + + ); + })} ); }; @@ -235,19 +246,30 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr return isText ? data.join(", ") : renderChipList( - data.map((item) => ({ - text: item?.label ? item.label : item, - icon: - item?.type === "Group" ? ( + data.map((item, key) => { + const itemText = item?.label ? item.label : item; + let icon = null; + + if (item?.type === "Group") { + icon = ( - ) : item?.type === "Tenant" ? ( + ); + } else { + icon = ( - ) : null, - })) + ); + } + + return { + label: itemText, + icon: icon, + key: key, + }; + }) ); } else { return isText ? ( @@ -402,7 +424,11 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr } if (data.length === 0) { - return isText ? "No data" : ; + return isText ? ( + "No data" + ) : ( + + ); } const primaryEmail = data.find((email) => email.startsWith("SMTP:")); From 8c91f6c721966f570c537de556354805ff968466 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 26 Apr 2025 00:30:06 -0400 Subject: [PATCH 0602/1184] Update linearProgressWithLabel.jsx --- src/components/linearProgressWithLabel.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/linearProgressWithLabel.jsx b/src/components/linearProgressWithLabel.jsx index e6650ac86615..ffac26c2086b 100644 --- a/src/components/linearProgressWithLabel.jsx +++ b/src/components/linearProgressWithLabel.jsx @@ -6,7 +6,7 @@ export const LinearProgressWithLabel = (props) => { - {`${Math.round(props.value)}% ${props?.addedLabel}`} + {`${Math.round(props.value)}% ${props?.addedLabel ?? ""}`}
    ); }; From 97a0ad53f66a54aeb0a523e87ca432945f5d750b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 26 Apr 2025 00:50:15 -0400 Subject: [PATCH 0603/1184] more formatting tweaks --- src/utils/get-cipp-formatting.js | 33 ++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 0466412a89d7..1cfdb1decd38 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -70,7 +70,7 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr {items.map((item, index) => { // Avoid JSON.stringify which can cause circular reference errors let key = index; - if (typeof item === "string" || typeof item === "number") { + if (typeof item === "string" || typeof item === "number" || typeof item === "boolean") { key = item; } else if (typeof item === "object" && item?.label) { key = `item-${item.label}-${index}`; @@ -505,10 +505,39 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr if (typeof data === "string" && (data.startsWith("{") || data.startsWith("["))) { try { const parsedData = JSON.parse(data); + + // parsedData is an array and only contains one element + if ( + Array.isArray(parsedData) && + parsedData.length === 1 && + typeof parsedData[0] !== "object" + ) { + // Handle boolean values + if (typeof parsedData[0] === "boolean") { + return isText ? ( + parsedData[0] ? ( + "Yes" + ) : ( + "No" + ) + ) : parsedData[0] ? ( + + ) : ( + + ); + } + + return isText ? ( + JSON.stringify(parsedData[0]) + ) : ( + + ); + } + // Check if parsed data is a simple array of strings if ( Array.isArray(parsedData) && - parsedData.every((item) => typeof item === "string") && + parsedData.every((item) => typeof item === "string" || typeof item === "number") && flatten ) { return isText ? parsedData.join(", ") : renderChipList(parsedData); From 4f31273edfd7a0b1222258db2cb0b15240af3636 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 26 Apr 2025 11:23:47 -0400 Subject: [PATCH 0604/1184] fix delete prompt --- src/pages/tenant/standards/list-standards/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tenant/standards/list-standards/index.js b/src/pages/tenant/standards/list-standards/index.js index 236eefb61925..2f0c84037842 100644 --- a/src/pages/tenant/standards/list-standards/index.js +++ b/src/pages/tenant/standards/list-standards/index.js @@ -115,7 +115,7 @@ const Page = () => { data: { ID: "GUID", }, - confirmText: "Are you sure you want to delete this template?", + confirmText: "Are you sure you want to delete [templateName]?", multiPost: false, }, ]; From 3adca0d56cb227f9cfe0b26ca821db953c168f26 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 26 Apr 2025 18:27:25 -0400 Subject: [PATCH 0605/1184] add new filter functions --- src/components/CippTable/CippDataTable.js | 96 +++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 25beed16fb5d..058f97c09772 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -336,7 +336,103 @@ export const CippDataTable = (props) => { return aVal > bVal ? 1 : -1; }, }, + filterFns: { + notContains: (row, columnId, value) => { + const rowValue = row.getValue(columnId); + if (rowValue === null || rowValue === undefined) { + return false; + } + + const stringValue = String(rowValue); + if ( + stringValue.includes("[object Object]") || + !stringValue.toLowerCase().includes(value.toLowerCase()) + ) { + return true; + } else { + return false; + } + }, + regex: (row, columnId, value) => { + try { + const regex = new RegExp(value, "i"); + const rowValue = row.getValue(columnId); + if (typeof rowValue === "string" && !rowValue.includes("[object Object]")) { + return regex.test(rowValue); + } + return false; + } catch (error) { + // If regex is invalid, don't filter + return true; + } + }, + }, enableGlobalFilterModes: true, + renderGlobalFilterModeMenuItems: ({ internalFilterOptions, onSelectFilterMode }) => { + // add custom filter options + const customFilterOptions = [ + { + option: "regex", + label: "Regex", + symbol: "(.*)", + }, + ]; + + // add to the internalFilterOptions if not already present + customFilterOptions.forEach((filterOption) => { + if (!internalFilterOptions.some((option) => option.option === filterOption.option)) { + internalFilterOptions.push(filterOption); + } + }); + + internalFilterOptions.map((filterOption) => ( + onSelectFilterMode(filterOption.option)} + sx={{ + display: "flex", + alignItems: "center", + gap: "0.5rem", + }} + > + {filterOption.symbol} + {filterOption.label} + + )); + }, + renderColumnFilterModeMenuItems: ({ internalFilterOptions, onSelectFilterMode }) => { + // add custom filter options + const customFilterOptions = [ + { + option: "notContains", + label: "Not Contains", + symbol: "!*", + }, + { + option: "regex", + label: "Regex", + symbol: "(.*)", + }, + ]; + + // combine default and custom filter options + const combinedFilterOptions = [...internalFilterOptions, ...customFilterOptions]; + + return combinedFilterOptions.map((filterOption) => ( + onSelectFilterMode(filterOption.option)} + sx={{ + display: "flex", + alignItems: "center", + gap: "0.5rem", + }} + > + {filterOption.symbol} + {filterOption.label} + + )); + }, }); useEffect(() => { From c2e87c3a7649b2d56e63f6fe7e7ff89558028983 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sun, 27 Apr 2025 01:34:22 -0400 Subject: [PATCH 0606/1184] fix admin urls --- src/data/portals.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/data/portals.json b/src/data/portals.json index 890176c83572..2a3d78cdd3ae 100644 --- a/src/data/portals.json +++ b/src/data/portals.json @@ -2,8 +2,8 @@ { "label": "M365 Portal", "name": "M365_Portal", - "url": "https://admin.microsoft.com/Partner/BeginClientSession.aspx?CTID=customerId&CSDEST=o365admincenter", - "variable": "customerId", + "url": "https://admin.cloud.microsoft/?delegatedOrg=initialDomainName", + "variable": "initialDomainName", "target": "_blank", "external": true, "icon": "GlobeAltIcon" @@ -11,8 +11,8 @@ { "label": "Exchange Portal", "name": "Exchange_Portal", - "url": "https://admin.cloud.microsoft/exchange?landingpage=homepage&form=mac_sidebar&delegatedOrg=defaultDomainName#", - "variable": "defaultDomainName", + "url": "https://admin.cloud.microsoft/exchange?landingpage=homepage&form=mac_sidebar&delegatedOrg=initialDomainName#", + "variable": "initialDomainName", "target": "_blank", "external": true, "icon": "Mail" @@ -29,8 +29,8 @@ { "label": "Teams Portal", "name": "Teams_Portal", - "url": "https://admin.teams.microsoft.com/?delegatedOrg=defaultDomainName", - "variable": "defaultDomainName", + "url": "https://admin.teams.microsoft.com/?delegatedOrg=initialDomainName", + "variable": "initialDomainName", "target": "_blank", "external": true, "icon": "FilePresent" @@ -56,8 +56,8 @@ { "label": "SharePoint Admin", "name": "SharePoint_Admin", - "url": "https://admin.microsoft.com/Partner/beginclientsession.aspx?CTID=customerId&CSDEST=SharePoint", - "variable": "customerId", + "url": "/api/ListSharePointAdminUrl?tenantFilter=defaultDomainName", + "variable": "defaultDomainName", "target": "_blank", "external": true, "icon": "Share" @@ -80,4 +80,4 @@ "external": true, "icon": "ShieldMoon" } -] +] \ No newline at end of file From fbba3915e953f81dbc6d0376a29cd98af38d1db2 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 27 Apr 2025 19:38:06 +0200 Subject: [PATCH 0607/1184] add office --- src/pages/identity/administration/users/add.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/identity/administration/users/add.jsx b/src/pages/identity/administration/users/add.jsx index 6db4b2a4bbf6..dfbdc7891f03 100644 --- a/src/pages/identity/administration/users/add.jsx +++ b/src/pages/identity/administration/users/add.jsx @@ -56,7 +56,7 @@ const Page = () => { label="Copy properties from another user" multiple={false} select={ - "id,userPrincipalName,displayName,givenName,surname,mailNickname,jobTitle,department,streetAddress,postalCode,companyName,mobilePhone,businessPhones,usageLocation" + "id,userPrincipalName,displayName,givenName,surname,mailNickname,jobTitle,department,streetAddress,postalCode,companyName,mobilePhone,businessPhones,usageLocation,office" } addedField={{ groupType: "calculatedGroupType", @@ -74,6 +74,7 @@ const Page = () => { mobilePhone: "mobilePhone", businessPhones: "businessPhones", usageLocation: "usageLocation", + office: "office", }} /> From 46b10ae0232e345c9afb52aa99ae1d623192d0ca Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 27 Apr 2025 21:20:53 +0200 Subject: [PATCH 0608/1184] Fixes choco package --- src/pages/endpoint/applications/list/add.jsx | 23 ++++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/pages/endpoint/applications/list/add.jsx b/src/pages/endpoint/applications/list/add.jsx index 254162f48e4b..abede4094b9e 100644 --- a/src/pages/endpoint/applications/list/add.jsx +++ b/src/pages/endpoint/applications/list/add.jsx @@ -381,10 +381,14 @@ const ApplicationDeploymentForm = () => { type="autoComplete" label="Select Package" name="packageSearch" - options={winGetSearchResults.data?.data?.map((item) => ({ - value: item, - label: `${item.applicationName} - ${item.packagename}`, - }))} + options={ + winGetSearchResults.data?.data + ? winGetSearchResults.data?.data?.map((item) => ({ + value: item, + label: `${item.applicationName} - ${item.packagename}`, + })) + : [] + } multiple={false} formControl={formControl} isFetching={winGetSearchResults.isLoading} @@ -492,11 +496,12 @@ const ApplicationDeploymentForm = () => { label="Select Package" name="packageSearch" options={ - ChocosearchResults.isSuccess && - ChocosearchResults.data?.data?.Results?.map((item) => ({ - value: item, - label: `${item.applicationName} - ${item.packagename}`, - })) + ChocosearchResults.isSuccess && ChocosearchResults.data?.data + ? ChocosearchResults.data?.data?.Results?.map((item) => ({ + value: item, + label: `${item.applicationName} - ${item.packagename}`, + })) + : [] } multiple={false} formControl={formControl} From 0f7733a1957f17a111db411c96a37ab83b411237 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 28 Apr 2025 11:00:30 -0400 Subject: [PATCH 0609/1184] Update CippCustomVariables.jsx --- src/components/CippComponents/CippCustomVariables.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/CippComponents/CippCustomVariables.jsx b/src/components/CippComponents/CippCustomVariables.jsx index 18319a4064e1..ce27670a9aed 100644 --- a/src/components/CippComponents/CippCustomVariables.jsx +++ b/src/components/CippComponents/CippCustomVariables.jsx @@ -64,7 +64,7 @@ const CippCustomVariables = ({ id }) => { url: "/api/ExecCippReplacemap", data: { Action: "!AddEdit", - customerId: id, + tenantId: id, }, relatedQueryKeys: [`CustomVariables_${id}`], }, @@ -77,7 +77,7 @@ const CippCustomVariables = ({ id }) => { data: { Action: "Delete", RowKey: "RowKey", - customerId: id, + tenantId: id, }, relatedQueryKeys: [`CustomVariables_${id}`], multiPost: false, @@ -100,7 +100,7 @@ const CippCustomVariables = ({ id }) => { title={id === "AllTenants" ? "Global Variables" : "Custom Variables"} actions={actions} api={{ - url: `/api/ExecCippReplacemap?Action=List&customerId=${id}`, + url: `/api/ExecCippReplacemap?Action=List&tenantId=${id}`, dataKey: "Results", }} simpleColumns={["RowKey", "Value"]} @@ -147,7 +147,7 @@ const CippCustomVariables = ({ id }) => { api={{ type: "POST", url: "/api/ExecCippReplacemap", - data: { Action: "AddEdit", customerId: id }, + data: { Action: "AddEdit", tenantId: id }, relatedQueryKeys: [`CustomVariables_${id}`], }} /> From aaa9f685db41457f7c64cef99f54375ca12d33f0 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 28 Apr 2025 11:02:53 -0400 Subject: [PATCH 0610/1184] remove immybot --- src/pages/endpoint/applications/list/add.jsx | 21 -------------------- 1 file changed, 21 deletions(-) diff --git a/src/pages/endpoint/applications/list/add.jsx b/src/pages/endpoint/applications/list/add.jsx index abede4094b9e..d82b40deeceb 100644 --- a/src/pages/endpoint/applications/list/add.jsx +++ b/src/pages/endpoint/applications/list/add.jsx @@ -139,7 +139,6 @@ const ApplicationDeploymentForm = () => { options={[ { value: "datto", label: "Datto RMM" }, { value: "syncro", label: "Syncro RMM" }, - { value: "immy", label: "ImmyBot" }, { value: "huntress", label: "Huntress" }, { value: "automate", label: "CW Automate" }, { value: "cwcommand", label: "CW Command" }, @@ -208,26 +207,6 @@ const ApplicationDeploymentForm = () => { {/* Similar blocks for other rmmname values */} - {/* For "immy" */} - - {selectedTenants?.map((tenant, index) => ( - - - - ))} - - {/* For "huntress" */} Date: Mon, 28 Apr 2025 16:26:09 -0400 Subject: [PATCH 0611/1184] Update version.json --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index a85ab8e9a599..64ee67a6cf4b 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.5.1" + "version": "7.5.2" } \ No newline at end of file From 8d096203ecd67bf5ee4adaea658f04e5d025d49b Mon Sep 17 00:00:00 2001 From: John Duprey Date: Mon, 28 Apr 2025 21:15:57 -0400 Subject: [PATCH 0612/1184] fix performance issue with onedrive --- src/pages/teams-share/onedrive/index.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/pages/teams-share/onedrive/index.js b/src/pages/teams-share/onedrive/index.js index 842b0737cbcc..9ec970fbda1e 100644 --- a/src/pages/teams-share/onedrive/index.js +++ b/src/pages/teams-share/onedrive/index.js @@ -25,13 +25,21 @@ const Page = () => { multiple: false, creatable: false, api: { - url: "/api/listUsers", - labelField: (onedriveAccessUser) => - `${onedriveAccessUser.displayName} (${onedriveAccessUser.userPrincipalName})`, + url: "/api/ListGraphRequest", + data: { + Endpoint: "users", + $select: "id,displayName,userPrincipalName", + $top: 999, + $count: true, + }, + queryKey: "ListUsersAutoComplete", + dataKey: "Results", + labelField: (user) => `${user.displayName} (${user.userPrincipalName})`, valueField: "userPrincipalName", addedField: { - displayName: "displayName", + id: "id", }, + showRefresh: true, }, }, ], From a27d45a40570b6f889e0e3f360d2ff4e04fef985 Mon Sep 17 00:00:00 2001 From: Esco Date: Tue, 29 Apr 2025 13:55:07 +0200 Subject: [PATCH 0613/1184] feat: pages for Universal Search --- .../CippCards/CippUniversalSearch.jsx | 61 ++++++++++++++++--- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/src/components/CippCards/CippUniversalSearch.jsx b/src/components/CippCards/CippUniversalSearch.jsx index 9d9c90d63c5f..eed3d1207dcb 100644 --- a/src/components/CippCards/CippUniversalSearch.jsx +++ b/src/components/CippCards/CippUniversalSearch.jsx @@ -67,15 +67,60 @@ export const CippUniversalSearch = React.forwardRef( CippUniversalSearch.displayName = "CippUniversalSearch"; -const Results = ({ items = [], searchValue }) => ( - - {items.slice(0, 9).map((item, key) => ( - - +const Results = ({ items = [], searchValue }) => { + const [currentPage, setCurrentPage] = useState(1); + const resultsPerPage = 9; // Number of results per page + const totalResults = items.length; // Total number of results + const totalPages = Math.ceil(totalResults / resultsPerPage); // Total pages + + // Calculate the results to display for the current page + const startIndex = (currentPage - 1) * resultsPerPage; + const endIndex = startIndex + resultsPerPage; + const displayedResults = items.slice(startIndex, endIndex); + + const handleNextPage = () => { + if (currentPage < totalPages) { + setCurrentPage(currentPage + 1); + } + }; + + const handlePreviousPage = () => { + if (currentPage > 1) { + setCurrentPage(currentPage - 1); + } + }; + + return ( + <> + + {totalResults} results (Page {currentPage} of {totalPages}) + + + {displayedResults.map((item, key) => ( + + + + ))} - ))} - -); + + + + + + ); +}; const ResultsRow = ({ match, searchValue }) => { const highlightMatch = (text) => { From a638f7a63432b4d95b2bae93af33f885d73e189d Mon Sep 17 00:00:00 2001 From: Esco Date: Tue, 29 Apr 2025 14:33:28 +0200 Subject: [PATCH 0614/1184] fix: fix View User from Universal Search --- src/components/CippCards/CippUniversalSearch.jsx | 2 +- src/pages/identity/administration/users/user/index.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippCards/CippUniversalSearch.jsx b/src/components/CippCards/CippUniversalSearch.jsx index eed3d1207dcb..c4b5ddbaf294 100644 --- a/src/components/CippCards/CippUniversalSearch.jsx +++ b/src/components/CippCards/CippUniversalSearch.jsx @@ -163,7 +163,7 @@ const ResultsRow = ({ match, searchValue }) => { href={`identity/administration/users/user?tenantFilter=${ currentTenantInfo.data?.find((tenant) => tenant.customerId === match._tenantId) ?.defaultDomainName || match._tenantId - }&userId=${match.userPrincipalName}`} + }&userId=${match.id}`} variant="outlined" color="primary" size="small" diff --git a/src/pages/identity/administration/users/user/index.jsx b/src/pages/identity/administration/users/user/index.jsx index b36347b4a1f3..e91db17cadfc 100644 --- a/src/pages/identity/administration/users/user/index.jsx +++ b/src/pages/identity/administration/users/user/index.jsx @@ -81,7 +81,7 @@ const Page = () => { }, [userId]); const userRequest = ApiGetCall({ - url: `/api/ListUsers?UserId=${userId}&tenantFilter=${userSettingsDefaults.currentTenant}`, + url: `/api/ListUsers?UserId=${userId}&tenantFilter=${router.query.tenantFilter ?? userSettingsDefaults.currentTenant}`, queryKey: `ListUsers-${userId}`, waiting: waiting, }); From 635dda6c5b028eef937eee61dc1c452964ea9011 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Tue, 29 Apr 2025 10:58:13 -0400 Subject: [PATCH 0615/1184] Update get-cipp-formatting.js --- src/utils/get-cipp-formatting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/get-cipp-formatting.js b/src/utils/get-cipp-formatting.js index 1cfdb1decd38..bda8d8954651 100644 --- a/src/utils/get-cipp-formatting.js +++ b/src/utils/get-cipp-formatting.js @@ -439,7 +439,7 @@ export const getCippFormatting = (data, cellName, type, canReceive, flatten = tr { - if (primaryEmail.includes(email)) { + if (primaryEmail && primaryEmail.includes(email)) { return { email: email, primary: true, From 1782c8a8de7b6783a36f8c858753896ca22e0a05 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Wed, 30 Apr 2025 16:34:43 +0200 Subject: [PATCH 0616/1184] add support for exclusion groups. --- src/components/CippStandards/CippStandardsSideBar.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/CippStandards/CippStandardsSideBar.jsx b/src/components/CippStandards/CippStandardsSideBar.jsx index 522f2e69290e..d8c6092174d9 100644 --- a/src/components/CippStandards/CippStandardsSideBar.jsx +++ b/src/components/CippStandards/CippStandardsSideBar.jsx @@ -142,6 +142,7 @@ const CippStandardsSideBar = ({ name="excludedTenants" allTenants={false} formControl={formControl} + includeGroups={true} /> )} From a867a7aa1c18803b2947be197d917dfb73d0fd28 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 30 Apr 2025 10:50:30 -0400 Subject: [PATCH 0617/1184] fix inbox rule offcanvas --- src/pages/email/administration/mailbox-rules/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/email/administration/mailbox-rules/index.js b/src/pages/email/administration/mailbox-rules/index.js index 8dc0fcceb020..ba6a59439ea4 100644 --- a/src/pages/email/administration/mailbox-rules/index.js +++ b/src/pages/email/administration/mailbox-rules/index.js @@ -70,6 +70,7 @@ const Page = () => { title="Rule Details" propertyItems={properties} actionItems={actions} + data={data} /> ); }, From a3619bcadb549a0950c3b84c6a28d7d44e207b08 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 30 Apr 2025 17:31:41 -0400 Subject: [PATCH 0618/1184] Update version.json --- public/version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/version.json b/public/version.json index 64ee67a6cf4b..fea50d299123 100644 --- a/public/version.json +++ b/public/version.json @@ -1,3 +1,3 @@ { - "version": "7.5.2" + "version": "7.5.3" } \ No newline at end of file From 365f70dacbc6e43a3d5f08c634555ec78f0371db Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 30 Apr 2025 17:43:54 -0400 Subject: [PATCH 0619/1184] more link fixes --- src/components/CippComponents/CippApiDialog.jsx | 2 +- src/components/CippComponents/CippTenantSelector.jsx | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/CippComponents/CippApiDialog.jsx b/src/components/CippComponents/CippApiDialog.jsx index d083a3c9d2bf..87a9fe56b689 100644 --- a/src/components/CippComponents/CippApiDialog.jsx +++ b/src/components/CippComponents/CippApiDialog.jsx @@ -295,7 +295,7 @@ export const CippApiDialog = (props) => { return getNestedValue(row, key) || `[${key}]`; }); - if (linkWithRowData.startsWith("/")) { + if (linkWithRowData.startsWith("/") && !api?.external) { // Internal link navigation setLinkClicked(true); router.push(linkWithRowData, undefined, { shallow: true }); diff --git a/src/components/CippComponents/CippTenantSelector.jsx b/src/components/CippComponents/CippTenantSelector.jsx index ee87c0ca3fdf..61d0c32e37fd 100644 --- a/src/components/CippComponents/CippTenantSelector.jsx +++ b/src/components/CippComponents/CippTenantSelector.jsx @@ -66,7 +66,7 @@ export const CippTenantSelector = (props) => { }, [currentTenant?.value]); useEffect(() => { - if (tenant && currentTenant?.value && currentTenant?.value !== 'AllTenants') { + if (tenant && currentTenant?.value && currentTenant?.value !== "AllTenants") { tenantDetails.refetch(); } }, [tenant, offcanvasVisible]); @@ -85,6 +85,7 @@ export const CippTenantSelector = (props) => { defaultDomainName: matchingTenant.defaultDomainName, displayName: matchingTenant.displayName, customerId: matchingTenant.customerId, + initialDomainName: matchingTenant.initialDomainName, }, } : { @@ -192,12 +193,12 @@ export const CippTenantSelector = (props) => { actions={[ { label: "M365 Admin Portal", - link: `https://admin.microsoft.com/Partner/BeginClientSession.aspx?CTID=${currentTenant?.addedFields?.customerId}&CSDEST=o365admincenter`, + link: `https://admin.cloud.microsoft/?delegatedOrg=${currentTenant?.addedFields?.initialDomainName}`, icon: , }, { label: "Exchange Portal", - link: `https://admin.cloud.microsoft/exchange?landingpage=homepage&form=mac_sidebar&delegatedOrg=${currentTenant?.value}`, + link: `https://admin.cloud.microsoft/exchange?delegatedOrg=${currentTenant?.addedFields?.initialDomainName}`, icon: , }, { @@ -207,7 +208,7 @@ export const CippTenantSelector = (props) => { }, { label: "Teams Portal", - link: `https://admin.teams.microsoft.com/?delegatedOrg=${currentTenant?.value}`, + link: `https://admin.teams.microsoft.com/?delegatedOrg=${currentTenant?.addedFields?.initialDomainName}`, icon: , }, { @@ -222,8 +223,9 @@ export const CippTenantSelector = (props) => { }, { label: "SharePoint Portal", - link: `https://admin.microsoft.com/Partner/beginclientsession.aspx?CTID=${currentTenant?.addedFields?.customerId}&CSDEST=SharePoint`, + link: `/api/ListSharePointAdminUrl?tenantFilter=${currentTenant?.value}`, icon: , + external: true, }, { label: "Security Portal", From 59d9ba88a41a2012d801ecf0a1b8624ea3c99e4b Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Thu, 1 May 2025 18:43:09 +0800 Subject: [PATCH 0620/1184] addition of new options --- .../CippComponents/CippFormComponent.jsx | 3 + .../resources/management/list-rooms/edit.jsx | 554 ++++++++++++++---- 2 files changed, 458 insertions(+), 99 deletions(-) diff --git a/src/components/CippComponents/CippFormComponent.jsx b/src/components/CippComponents/CippFormComponent.jsx index f42f5b1fbb16..b0f3e571656f 100644 --- a/src/components/CippComponents/CippFormComponent.jsx +++ b/src/components/CippComponents/CippFormComponent.jsx @@ -155,6 +155,9 @@ export const CippFormComponent = (props) => { { + const timezones = `Azores Standard Time (UTC-01:00) Azores +Cape Verde Standard Time (UTC-01:00) Cabo Verde Is. +UTC-02 (UTC-02:00) Co-ordinated Universal Time-02 +Greenland Standard Time (UTC-02:00) Greenland +Mid-Atlantic Standard Time (UTC-02:00) Mid-Atlantic - Old +Tocantins Standard Time (UTC-03:00) Araguaina +Paraguay Standard Time (UTC-03:00) Asuncion +E. South America Standard Time (UTC-03:00) Brasilia +SA Eastern Standard Time (UTC-03:00) Cayenne, Fortaleza +Argentina Standard Time (UTC-03:00) City of Buenos Aires +Montevideo Standard Time (UTC-03:00) Montevideo +Magallanes Standard Time (UTC-03:00) Punta Arenas +Saint Pierre Standard Time (UTC-03:00) Saint Pierre and Miquelon +Bahia Standard Time (UTC-03:00) Salvador +Newfoundland Standard Time (UTC-03:30) Newfoundland +Atlantic Standard Time (UTC-04:00) Atlantic Time (Canada) +Venezuela Standard Time (UTC-04:00) Caracas +Central Brazilian Standard Time (UTC-04:00) Cuiaba +SA Western Standard Time (UTC-04:00) Georgetown, La Paz, Manaus, San Juan +Pacific SA Standard Time (UTC-04:00) Santiago +SA Pacific Standard Time (UTC-05:00) Bogota, Lima, Quito, Rio Branco +Eastern Standard Time (Mexico) (UTC-05:00) Chetumal +Eastern Standard Time (UTC-05:00) Eastern Time (US & Canada) +Haiti Standard Time (UTC-05:00) Haiti +Cuba Standard Time (UTC-05:00) Havana +US Eastern Standard Time (UTC-05:00) Indiana (East) +Turks And Caicos Standard Time (UTC-05:00) Turks and Caicos +Central America Standard Time (UTC-06:00) Central America +Central Standard Time (UTC-06:00) Central Time (US & Canada) +Easter Island Standard Time (UTC-06:00) Easter Island +Central Standard Time (Mexico) (UTC-06:00) Guadalajara, Mexico City, Monterrey +Canada Central Standard Time (UTC-06:00) Saskatchewan +US Mountain Standard Time (UTC-07:00) Arizona +Mountain Standard Time (Mexico) (UTC-07:00) La Paz, Mazatlan +Mountain Standard Time (UTC-07:00) Mountain Time (US & Canada) +Yukon Standard Time (UTC-07:00) Yukon +Pacific Standard Time (Mexico) (UTC-08:00) Baja California +UTC-08 (UTC-08:00) Co-ordinated Universal Time-08 +Pacific Standard Time (UTC-08:00) Pacific Time (US & Canada) +Alaskan Standard Time (UTC-09:00) Alaska +UTC-09 (UTC-09:00) Co-ordinated Universal Time-09 +Marquesas Standard Time (UTC-09:30) Marquesas Islands +Aleutian Standard Time (UTC-10:00) Aleutian Islands +Hawaiian Standard Time (UTC-10:00) Hawaii +UTC-11 (UTC-11:00) Co-ordinated Universal Time-11 +Dateline Standard Time (UTC-12:00) International Date Line West +UTC (UTC) Co-ordinated Universal Time +GMT Standard Time (UTC+00:00) Dublin, Edinburgh, Lisbon, London +Greenwich Standard Time (UTC+00:00) Monrovia, Reykjavik +Sao Tome Standard Time (UTC+00:00) Sao Tome +W. Europe Standard Time (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna +Central Europe Standard Time (UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague +Romance Standard Time (UTC+01:00) Brussels, Copenhagen, Madrid, Paris +Morocco Standard Time (UTC+01:00) Casablanca +Central European Standard Time (UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb +W. Central Africa Standard Time (UTC+01:00) West Central Africa +GTB Standard Time (UTC+02:00) Athens, Bucharest +Middle East Standard Time (UTC+02:00) Beirut +Egypt Standard Time (UTC+02:00) Cairo +E. Europe Standard Time (UTC+02:00) Chisinau +West Bank Standard Time (UTC+02:00) Gaza, Hebron +South Africa Standard Time (UTC+02:00) Harare, Pretoria +FLE Standard Time (UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius +Israel Standard Time (UTC+02:00) Jerusalem +South Sudan Standard Time (UTC+02:00) Juba +Kaliningrad Standard Time (UTC+02:00) Kaliningrad +Sudan Standard Time (UTC+02:00) Khartoum +Libya Standard Time (UTC+02:00) Tripoli +Namibia Standard Time (UTC+02:00) Windhoek +Jordan Standard Time (UTC+03:00) Amman +Arabic Standard Time (UTC+03:00) Baghdad +Syria Standard Time (UTC+03:00) Damascus +Turkey Standard Time (UTC+03:00) Istanbul +Arab Standard Time (UTC+03:00) Kuwait, Riyadh +Belarus Standard Time (UTC+03:00) Minsk +Russian Standard Time (UTC+03:00) Moscow, St Petersburg +E. Africa Standard Time (UTC+03:00) Nairobi +Volgograd Standard Time (UTC+03:00) Volgograd +Iran Standard Time (UTC+03:30) Tehran +Arabian Standard Time (UTC+04:00) Abu Dhabi, Muscat +Astrakhan Standard Time (UTC+04:00) Astrakhan, Ulyanovsk +Azerbaijan Standard Time (UTC+04:00) Baku +Russia Time Zone 3 (UTC+04:00) Izhevsk, Samara +Mauritius Standard Time (UTC+04:00) Port Louis +Saratov Standard Time (UTC+04:00) Saratov +Georgian Standard Time (UTC+04:00) Tbilisi +Caucasus Standard Time (UTC+04:00) Yerevan +Afghanistan Standard Time (UTC+04:30) Kabul +West Asia Standard Time (UTC+05:00) Ashgabat, Tashkent +Qyzylorda Standard Time (UTC+05:00) Astana +Ekaterinburg Standard Time (UTC+05:00) Ekaterinburg +Pakistan Standard Time (UTC+05:00) Islamabad, Karachi +India Standard Time (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi +Sri Lanka Standard Time (UTC+05:30) Sri Jayawardenepura +Nepal Standard Time (UTC+05:45) Kathmandu +Central Asia Standard Time (UTC+06:00) Bishkek +Bangladesh Standard Time (UTC+06:00) Dhaka +Omsk Standard Time (UTC+06:00) Omsk +Myanmar Standard Time (UTC+06:30) Yangon (Rangoon) +SE Asia Standard Time (UTC+07:00) Bangkok, Hanoi, Jakarta +Altai Standard Time (UTC+07:00) Barnaul, Gorno-Altaysk +W. Mongolia Standard Time (UTC+07:00) Hovd +North Asia Standard Time (UTC+07:00) Krasnoyarsk +N. Central Asia Standard Time (UTC+07:00) Novosibirsk +Tomsk Standard Time (UTC+07:00) Tomsk +China Standard Time (UTC+08:00) Beijing, Chongqing, Hong Kong SAR, Urumqi +North Asia East Standard Time (UTC+08:00) Irkutsk +Singapore Standard Time (UTC+08:00) Kuala Lumpur, Singapore +W. Australia Standard Time (UTC+08:00) Perth +Taipei Standard Time (UTC+08:00) Taipei +Ulaanbaatar Standard Time (UTC+08:00) Ulaanbaatar +Aus Central W. Standard Time (UTC+08:45) Eucla +Transbaikal Standard Time (UTC+09:00) Chita +Tokyo Standard Time (UTC+09:00) Osaka, Sapporo, Tokyo +North Korea Standard Time (UTC+09:00) Pyongyang +Korea Standard Time (UTC+09:00) Seoul +Yakutsk Standard Time (UTC+09:00) Yakutsk +Cen. Australia Standard Time (UTC+09:30) Adelaide +AUS Central Standard Time (UTC+09:30) Darwin +E. Australia Standard Time (UTC+10:00) Brisbane +AUS Eastern Standard Time (UTC+10:00) Canberra, Melbourne, Sydney +West Pacific Standard Time (UTC+10:00) Guam, Port Moresby +Tasmania Standard Time (UTC+10:00) Hobart +Vladivostok Standard Time (UTC+10:00) Vladivostok +Lord Howe Standard Time (UTC+10:30) Lord Howe Island +Bougainville Standard Time (UTC+11:00) Bougainville Island +Russia Time Zone 10 (UTC+11:00) Chokurdakh +Magadan Standard Time (UTC+11:00) Magadan +Norfolk Standard Time (UTC+11:00) Norfolk Island +Sakhalin Standard Time (UTC+11:00) Sakhalin +Central Pacific Standard Time (UTC+11:00) Solomon Is., New Caledonia +Russia Time Zone 11 (UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky +New Zealand Standard Time (UTC+12:00) Auckland, Wellington +UTC+12 (UTC+12:00) Co-ordinated Universal Time+12 +Fiji Standard Time (UTC+12:00) Fiji +Kamchatka Standard Time (UTC+12:00) Petropavlovsk-Kamchatsky - Old +Chatham Islands Standard Time (UTC+12:45) Chatham Islands +UTC+13 (UTC+13:00) Co-ordinated Universal Time+13 +Tonga Standard Time (UTC+13:00) Nuku'alofa +Samoa Standard Time (UTC+13:00) Samoa +Line Islands Standard Time (UTC+14:00) Kiritimati Island`; + + return timezones.split('\n').map(line => { + const parts = line.trim().split(/\s{2,}/); + if (parts.length >= 2) { + return { + value: parts[0].trim(), + label: parts[1].trim(), + }; + } + return null; + }).filter(Boolean); +}; + +// Work days options - just using the actual days +const workDaysOptions = [ + { value: "Sunday", label: "Sunday" }, + { value: "Monday", label: "Monday" }, + { value: "Tuesday", label: "Tuesday" }, + { value: "Wednesday", label: "Wednesday" }, + { value: "Thursday", label: "Thursday" }, + { value: "Friday", label: "Friday" }, + { value: "Saturday", label: "Saturday" } +]; + +// Automation Processing Options +const automateProcessingOptions = [ + { value: "None", label: "None - No processing" }, + { value: "AutoUpdate", label: "AutoUpdate - Accept/Decline but not delete" }, + { value: "AutoAccept", label: "AutoAccept - Accept and delete" } +]; + const EditRoomMailbox = () => { const router = useRouter(); const { roomId } = router.query; @@ -55,6 +229,29 @@ const EditRoomMailbox = () => { isWheelChairAccessible: room.isWheelChairAccessible, phone: room.phone, tags: room.tags?.map(tag => ({ label: tag, value: tag })) || [], + + // Calendar Properties + AllowConflicts: room.AllowConflicts, + AllowRecurringMeetings: room.AllowRecurringMeetings, + BookingWindowInDays: room.BookingWindowInDays, + MaximumDurationInMinutes: room.MaximumDurationInMinutes, + ProcessExternalMeetingMessages: room.ProcessExternalMeetingMessages, + EnforceCapacity: room.EnforceCapacity, + ForwardRequestsToDelegates: room.ForwardRequestsToDelegates, + ScheduleOnlyDuringWorkHours: room.ScheduleOnlyDuringWorkHours, + AutomateProcessing: room.AutomateProcessing, + + // Calendar Configuration + WorkDays: room.WorkDays?.split(',')?.map(day => ({ + label: day.trim(), + value: day.trim() + })) || [], + WorkHoursStartTime: room.WorkHoursStartTime, + WorkHoursEndTime: room.WorkHoursEndTime, + WorkingHoursTimeZone: room.WorkingHoursTimeZone ? { + value: room.WorkingHoursTimeZone, + label: createTimezoneOptions().find(tz => tz.value === room.WorkingHoursTimeZone)?.label || room.WorkingHoursTimeZone + } : null }); } }, [roomInfo.isSuccess, roomInfo.data]); @@ -101,10 +298,31 @@ const EditRoomMailbox = () => { isWheelChairAccessible: values.isWheelChairAccessible, phone: values.phone?.trim(), tags: values.tags?.map(tag => tag.value), + + // Calendar Properties + AllowConflicts: values.AllowConflicts, + AllowRecurringMeetings: values.AllowRecurringMeetings, + BookingWindowInDays: values.BookingWindowInDays, + MaximumDurationInMinutes: values.MaximumDurationInMinutes, + ProcessExternalMeetingMessages: values.ProcessExternalMeetingMessages, + EnforceCapacity: values.EnforceCapacity, + ForwardRequestsToDelegates: values.ForwardRequestsToDelegates, + ScheduleOnlyDuringWorkHours: values.ScheduleOnlyDuringWorkHours, + AutomateProcessing: values.AutomateProcessing?.value || values.AutomateProcessing, + + // Calendar Configuration + WorkDays: values.WorkDays?.map(day => day.value).join(','), + WorkHoursStartTime: values.WorkHoursStartTime, + WorkHoursEndTime: values.WorkHoursEndTime, + WorkingHoursTimeZone: values.WorkingHoursTimeZone?.value || values.WorkingHoursTimeZone, })} > - {/* Core & Booking Settings */} + {/* Basic Information */} + + Basic Information + + { + + + + + + {/* Booking Settings */} + + Booking Settings + + + { /> - + + + + + + + + + + + + + - + + + + + + + + + + + + + - {/* Location Information */} + {/* Working Hours */} - Location Information + Working Hours - {/* Building and Floor Info */} - + - - - - - - - - - - - - {/* Address Fields */} - + - - {/* City and Postal Code */} - - - - - - - - - {/* State and Country */} - - - - - - ({ - label: Name, - value: Code, - }))} - formControl={formControl} - /> - - + + + + + + + + + + - {/* Room Equipment */} + {/* Room Facilities */} - Room Equipment + Room Facilities & Equipment + + + + + + + + @@ -275,30 +562,99 @@ const EditRoomMailbox = () => { /> + + + + - {/* Room Features */} + {/* Location Information */} - Room Features + Location Information - + + + + + + + + + + + + + + + + + + + + + + + + + ({ + label: Name, + value: Code, + }))} formControl={formControl} - multiple={true} - creatable={true} /> @@ -308,4 +664,4 @@ const EditRoomMailbox = () => { EditRoomMailbox.getLayout = (page) => {page}; -export default EditRoomMailbox; \ No newline at end of file +export default EditRoomMailbox; \ No newline at end of file From dbdd972d2ea18edcb3a46d3d36425da8817463c5 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Sat, 3 May 2025 00:14:58 +0800 Subject: [PATCH 0621/1184] Addition of new languages --- src/data/languageList.json | 266 ++++++++++++++++++++++++++++++++++++- 1 file changed, 265 insertions(+), 1 deletion(-) diff --git a/src/data/languageList.json b/src/data/languageList.json index fea7ddddc8ca..c4e742af3a1e 100644 --- a/src/data/languageList.json +++ b/src/data/languageList.json @@ -5,6 +5,96 @@ "tag": "ar-SA", "LCID": "1025" }, + { + "language": "Arabic", + "Geographic area": "Algeria", + "tag": "ar-DZ", + "LCID": "5121" + }, + { + "language": "Arabic", + "Geographic area": "Egypt", + "tag": "ar-EG", + "LCID": "3073" + }, + { + "language": "Arabic", + "Geographic area": "Bahrain", + "tag": "ar-BH", + "LCID": "15361" + }, + { + "language": "Arabic", + "Geographic area": "Iraq", + "tag": "ar-IQ", + "LCID": "2049" + }, + { + "language": "Arabic", + "Geographic area": "Jordan", + "tag": "ar-JO", + "LCID": "11265" + }, + { + "language": "Arabic", + "Geographic area": "Kuwait", + "tag": "ar-KW", + "LCID": "13313" + }, + { + "language": "Arabic", + "Geographic area": "Lebanon", + "tag": "ar-LB", + "LCID": "12289" + }, + { + "language": "Arabic", + "Geographic area": "Libya", + "tag": "ar-LY", + "LCID": "4097" + }, + { + "language": "Arabic", + "Geographic area": "Morocco", + "tag": "ar-MA", + "LCID": "6145" + }, + { + "language": "Arabic", + "Geographic area": "Oman", + "tag": "ar-OM", + "LCID": "8193" + }, + { + "language": "Arabic", + "Geographic area": "Qatar", + "tag": "ar-QA", + "LCID": "16385" + }, + { + "language": "Arabic", + "Geographic area": "Syria", + "tag": "ar-SY", + "LCID": "10241" + }, + { + "language": "Arabic", + "Geographic area": "Tunisia", + "tag": "ar-TN", + "LCID": "7169" + }, + { + "language": "Arabic", + "Geographic area": "UAE", + "tag": "ar-AE", + "LCID": "14337" + }, + { + "language": "Arabic", + "Geographic area": "Yemen", + "tag": "ar-YE", + "LCID": "9217" + }, { "language": "Bulgarian", "Geographic area": "Bulgaria", @@ -23,6 +113,12 @@ "tag": "zh-TW", "LCID": "1028" }, + { + "language": "Chinese", + "Geographic area": "Hong Kong SAR", + "tag": "zh-HK", + "LCID": "3076" + }, { "language": "Croatian", "Geographic area": "Croatia", @@ -53,6 +149,42 @@ "tag": "en-US", "LCID": "1033" }, + { + "language": "English", + "Geographic area": "Australia", + "tag": "en-AU", + "LCID": "3081" + }, + { + "language": "English", + "Geographic area": "United Kingdom", + "tag": "en-GB", + "LCID": "2057" + }, + { + "language": "English", + "Geographic area": "New Zealand", + "tag": "en-NZ", + "LCID": "5129" + }, + { + "language": "English", + "Geographic area": "Canada", + "tag": "en-CA", + "LCID": "4105" + }, + { + "language": "English", + "Geographic area": "South Africa", + "tag": "en-ZA", + "LCID": "7177" + }, + { + "language": "English", + "Geographic area": "Singapore", + "tag": "en-SG", + "LCID": "4100" + }, { "language": "Estonian", "Geographic area": "Estonia", @@ -71,12 +203,30 @@ "tag": "fr-FR", "LCID": "1036" }, + { + "language": "French", + "Geographic area": "Canada", + "tag": "fr-CA", + "LCID": "3084" + }, + { + "language": "French", + "Geographic area": "Switzerland", + "tag": "fr-CH", + "LCID": "4108" + }, { "language": "German", "Geographic area": "Germany", "tag": "de-DE", "LCID": "1031" }, + { + "language": "German", + "Geographic area": "Switzerland", + "tag": "de-CH", + "LCID": "2055" + }, { "language": "Greek", "Geographic area": "Greece", @@ -155,6 +305,12 @@ "tag": "nb-NO", "LCID": "1044" }, + { + "language": "Persian", + "Geographic area": "Iran", + "tag": "fa-IR", + "LCID": "1065" + }, { "language": "Polish", "Geographic area": "Poland", @@ -209,6 +365,108 @@ "tag": "es-ES", "LCID": "3082" }, + { + "language": "Spanish", + "Geographic area": "Argentina", + "tag": "es-AR", + "LCID": "11274" + }, + { + "language": "Spanish", + "Geographic area": "Bolivia", + "tag": "es-BO", + "LCID": "16394" + }, + { + "language": "Spanish", + "Geographic area": "Chile", + "tag": "es-CL", + "LCID": "13322" + }, + { + "language": "Spanish", + "Geographic area": "Colombia", + "tag": "es-CO", + "LCID": "9226" + }, + { + "language": "Spanish", + "Geographic area": "Costa Rica", + "tag": "es-CR", + "LCID": "5130" + }, + { + "language": "Spanish", + "Geographic area": "Dominican Republic", + "tag": "es-DO", + "LCID": "7178" + }, + { + "language": "Spanish", + "Geographic area": "Ecuador", + "tag": "es-EC", + "LCID": "12298" + }, + { + "language": "Spanish", + "Geographic area": "El Salvador", + "tag": "es-SV", + "LCID": "17418" + }, + { + "language": "Spanish", + "Geographic area": "Guatemala", + "tag": "es-GT", + "LCID": "4106" + }, + { + "language": "Spanish", + "Geographic area": "Honduras", + "tag": "es-HN", + "LCID": "18442" + }, + { + "language": "Spanish", + "Geographic area": "Mexico", + "tag": "es-MX", + "LCID": "2058" + }, + { + "language": "Spanish", + "Geographic area": "Nicaragua", + "tag": "es-NI", + "LCID": "19466" + }, + { + "language": "Spanish", + "Geographic area": "Panama", + "tag": "es-PA", + "LCID": "6154" + }, + { + "language": "Spanish", + "Geographic area": "Paraguay", + "tag": "es-PY", + "LCID": "15370" + }, + { + "language": "Spanish", + "Geographic area": "Peru", + "tag": "es-PE", + "LCID": "10250" + }, + { + "language": "Spanish", + "Geographic area": "Uruguay", + "tag": "es-UY", + "LCID": "14346" + }, + { + "language": "Spanish", + "Geographic area": "Venezuela", + "tag": "es-VE", + "LCID": "8202" + }, { "language": "Swedish", "Geographic area": "Sweden", @@ -229,10 +487,16 @@ }, { "language": "Ukrainian", - "Geographic area": "Ukrainian", + "Geographic area": "Ukraine", "tag": "uk-UA", "LCID": "1058" }, + { + "language": "Urdu", + "Geographic area": "Pakistan", + "tag": "ur-PK", + "LCID": "1056" + }, { "language": "Vietnamese", "Geographic area": "Vietnam", From b89770ed383bcce28b5e5a09e843a6e61aed90a6 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Sat, 3 May 2025 13:13:57 +0800 Subject: [PATCH 0622/1184] parse raw alert data to populate the configurable input --- .../alert-configuration/alert.jsx | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/pages/tenant/administration/alert-configuration/alert.jsx b/src/pages/tenant/administration/alert-configuration/alert.jsx index bae9c27ba61c..a07ad0d7e572 100644 --- a/src/pages/tenant/administration/alert-configuration/alert.jsx +++ b/src/pages/tenant/administration/alert-configuration/alert.jsx @@ -104,20 +104,37 @@ const AlertWizard = () => { alert.RawAlert.PostExecution.split(",").includes(opt.value) ); - // Reset the form with all values at once - formControl.reset( - { - tenantFilter: { - value: alert.RawAlert.Tenant, - label: alert.RawAlert.Tenant, - }, - excludedTenants: excludedTenantsFormatted, - command: { value: usedCommand, label: usedCommand.label }, - recurrence: recurrenceOption, - postExecution: postExecutionValue, + // Create the reset object with all the form values + const resetObject = { + tenantFilter: { + value: alert.RawAlert.Tenant, + label: alert.RawAlert.Tenant, }, - { keepDirty: false } - ); + excludedTenants: excludedTenantsFormatted, + command: { value: usedCommand, label: usedCommand.label }, + recurrence: recurrenceOption, + postExecution: postExecutionValue, + }; + + // Parse Parameters field if it exists and is a string + if (usedCommand?.requiresInput && alert.RawAlert.Parameters) { + try { + // Check if Parameters is a string that needs parsing + const params = typeof alert.RawAlert.Parameters === 'string' + ? JSON.parse(alert.RawAlert.Parameters) + : alert.RawAlert.Parameters; + + // Set the input value if it exists + if (params.InputValue) { + resetObject[usedCommand.inputName] = params.InputValue; + } + } catch (error) { + console.error("Error parsing parameters:", error); + } + } + + // Reset the form with all values at once + formControl.reset(resetObject, { keepDirty: false }); } if (alert?.PartitionKey === "Webhookv2") { setAlertType("audit"); From bdd1fe1e98187ea745ea1bd14f76456f96ea7c47 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Sun, 4 May 2025 20:01:26 +0800 Subject: [PATCH 0623/1184] Default filter for table, updated mailbox report --- .../CippComponents/CippTablePage.jsx | 10 ++++++++ src/components/CippTable/CippDataTable.js | 24 +++++++++++++++++++ .../SharedMailboxEnabledAccount/index.js | 20 ++++++++-------- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/components/CippComponents/CippTablePage.jsx b/src/components/CippComponents/CippTablePage.jsx index 37a3a9d44ccc..eb75f6cc1ad1 100644 --- a/src/components/CippComponents/CippTablePage.jsx +++ b/src/components/CippComponents/CippTablePage.jsx @@ -4,6 +4,7 @@ import Head from "next/head"; import { CippDataTable } from "../CippTable/CippDataTable"; import { useSettings } from "../../hooks/use-settings"; import { CippHead } from "./CippHead"; +import { useState } from "react"; export const CippTablePage = (props) => { const { @@ -23,10 +24,12 @@ export const CippTablePage = (props) => { queryKey, tableFilter, tenantInTitle = true, + filters, sx = { flexGrow: 1, py: 4 }, ...other } = props; const tenant = useSettings().currentTenant; + const [tableFilters] = useState(filters || []); return ( <> @@ -61,6 +64,13 @@ export const CippTablePage = (props) => { columns={columns} columnsFromApi={columnsFromApi} offCanvas={offCanvas} + filters={tableFilters} + initialState={{ + columnFilters: filters ? filters.map(filter => ({ + id: filter.id || filter.columnId, + value: filter.value + })) : [] + }} {...other} /> diff --git a/src/components/CippTable/CippDataTable.js b/src/components/CippTable/CippDataTable.js index 058f97c09772..6c2269f0f6c1 100644 --- a/src/components/CippTable/CippDataTable.js +++ b/src/components/CippTable/CippDataTable.js @@ -66,6 +66,7 @@ export const CippDataTable = (props) => { const [actionData, setActionData] = useState({ data: {}, action: {}, ready: false }); const [graphFilterData, setGraphFilterData] = useState({}); const [sorting, setSorting] = useState([]); + const [columnFilters, setColumnFilters] = useState([]); const waitingBool = api?.url ? true : false; const settings = useSettings(); @@ -78,6 +79,12 @@ export const CippDataTable = (props) => { ...graphFilterData, }); + useEffect(() => { + if (filters && Array.isArray(filters) && filters.length > 0) { + setColumnFilters(filters); + } + }, [filters]); + useEffect(() => { if (Array.isArray(data) && !api?.url) { if (!isEqual(data, usedData)) { @@ -208,6 +215,7 @@ export const CippDataTable = (props) => { state: { columnVisibility, sorting, + columnFilters, showSkeletons: getRequestData.isFetchingNextPage ? false : getRequestData.isFetching @@ -217,6 +225,7 @@ export const CippDataTable = (props) => { onSortingChange: (newSorting) => { setSorting(newSorting ?? []); }, + onColumnFiltersChange: setColumnFilters, renderEmptyRowsFallback: ({ table }) => getRequestData.data?.pages?.[0].Metadata?.QueueMessage ? ( @@ -435,6 +444,21 @@ export const CippDataTable = (props) => { }, }); + useEffect(() => { + if (filters && Array.isArray(filters) && filters.length > 0 && memoizedColumns.length > 0) { + // Make sure the table and columns are ready + setTimeout(() => { + if (table && typeof table.setColumnFilters === 'function') { + const formattedFilters = filters.map(filter => ({ + id: filter.id || filter.columnId, + value: filter.value + })); + table.setColumnFilters(formattedFilters); + } + },); + } + }, [filters, memoizedColumns, table]); + useEffect(() => { if (onChange && table.getSelectedRowModel().rows) { onChange(table.getSelectedRowModel().rows.map((row) => row.original)); diff --git a/src/pages/email/reports/SharedMailboxEnabledAccount/index.js b/src/pages/email/reports/SharedMailboxEnabledAccount/index.js index 4b05494fa344..dbd167e86105 100644 --- a/src/pages/email/reports/SharedMailboxEnabledAccount/index.js +++ b/src/pages/email/reports/SharedMailboxEnabledAccount/index.js @@ -2,15 +2,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Block } from "@mui/icons-material"; -/* - NOTE for Devs: - - The original component used a Redux selector (`useSelector`) for tenant data, - which is handled by `CippTablePage` in the refactored version, thus eliminating `useSelector`. - - The `ModalService` with `confirm` handling was originally used to confirm blocking sign-in. - The action here replaces it with a confirmation text as per current guidelines. - - Original button and `FontAwesomeIcon` (faBan) are not used since action confirmation is handled by CippTablePage. -*/ - const Page = () => { return ( { icon: , url: "/api/ExecDisableUser", data: { ID: "id" }, - confirmText: "Are you sure you want to block the sign-in for this user?", + confirmText: "Are you sure you want to block the sign-in for this mailbox?", + condition: (row) => row.accountEnabled && !row.onPremisesSyncEnabled, }, ]} offCanvas={{ @@ -31,6 +23,7 @@ const Page = () => { "UserPrincipalName", "displayName", "accountEnabled", + "assignedLicenses", "onPremisesSyncEnabled", ], }} @@ -38,8 +31,15 @@ const Page = () => { "UserPrincipalName", "displayName", "accountEnabled", + "assignedLicenses", "onPremisesSyncEnabled", ]} + filters={[ + { + id: "accountEnabled", + value: "Yes" + } + ]} /> ); }; From 32f800a57e5597514b3115c4988bc83dc9a91531 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Mon, 5 May 2025 16:18:13 +0800 Subject: [PATCH 0624/1184] "recipientType" does not exist, conditional enable/disable device --- src/pages/identity/administration/devices/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/identity/administration/devices/index.js b/src/pages/identity/administration/devices/index.js index 09bd9ef0d42f..c547a0d800b1 100644 --- a/src/pages/identity/administration/devices/index.js +++ b/src/pages/identity/administration/devices/index.js @@ -27,6 +27,7 @@ const Page = () => { }, confirmText: "Are you sure you want to enable this device?", multiPost: false, + condition: (row) => !row.accountEnabled, icon: , }, { @@ -39,6 +40,7 @@ const Page = () => { }, confirmText: "Are you sure you want to disable this device?", multiPost: false, + condition: (row) => row.accountEnabled, icon: , }, { @@ -80,7 +82,7 @@ const Page = () => { simpleColumns={[ "displayName", "accountEnabled", - "recipientType", + "trustType", "enrollmentType", "manufacturer", "model", From 73e21827505106db36e94831953b78665d8d2745 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Mon, 5 May 2025 16:59:41 +0800 Subject: [PATCH 0625/1184] added all possible options to include WeekDay, WeekendDay and AllDays --- src/pages/email/resources/management/list-rooms/edit.jsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/pages/email/resources/management/list-rooms/edit.jsx b/src/pages/email/resources/management/list-rooms/edit.jsx index edc4cfadc4f8..924c23734c32 100644 --- a/src/pages/email/resources/management/list-rooms/edit.jsx +++ b/src/pages/email/resources/management/list-rooms/edit.jsx @@ -165,7 +165,7 @@ Line Islands Standard Time (UTC+14:00) Kiritimati Island`; }).filter(Boolean); }; -// Work days options - just using the actual days +// Work days options const workDaysOptions = [ { value: "Sunday", label: "Sunday" }, { value: "Monday", label: "Monday" }, @@ -173,7 +173,10 @@ const workDaysOptions = [ { value: "Wednesday", label: "Wednesday" }, { value: "Thursday", label: "Thursday" }, { value: "Friday", label: "Friday" }, - { value: "Saturday", label: "Saturday" } + { value: "Saturday", label: "Saturday" }, + { value: "WeekDay", label: "Weekdays (Monday-Friday)" }, + { value: "WeekendDay", label: "Weekend (Saturday-Sunday)" }, + { value: "AllDays", label: "All Days" } ]; // Automation Processing Options From 72fab028e7dc708e595821597f83bd3c6aa21a76 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Mon, 5 May 2025 19:28:25 +0800 Subject: [PATCH 0626/1184] Fixes turning your computer into a heater at the un-authed screen --- src/pages/unauthenticated.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pages/unauthenticated.js b/src/pages/unauthenticated.js index c9999fa4c155..c2cb0d5d4352 100644 --- a/src/pages/unauthenticated.js +++ b/src/pages/unauthenticated.js @@ -3,7 +3,7 @@ import Head from "next/head"; import { CippImageCard } from "../components/CippCards/CippImageCard"; import { Layout as DashboardLayout } from "../layouts/index.js"; import { ApiGetCall } from "../api/ApiCall"; -import { useState, useEffect } from "react"; +import { useState, useEffect, useMemo } from "react"; const Page = () => { const orgData = ApiGetCall({ @@ -12,17 +12,18 @@ const Page = () => { staleTime: 120000, refetchOnWindowFocus: true, }); - const blockedRoles = ["anonymous", "authenticated"]; + const blockedRoles = useMemo(() => ["anonymous", "authenticated"], []); const [userRoles, setUserRoles] = useState([]); + const userRolesData = orgData.data?.clientPrincipal?.userRoles; useEffect(() => { - if (orgData.isSuccess) { - const roles = orgData.data?.clientPrincipal?.userRoles.filter( + if (orgData.isSuccess && userRolesData) { + const roles = userRolesData.filter( (role) => !blockedRoles.includes(role) ); setUserRoles(roles ?? []); } - }, [orgData, blockedRoles]); + }, [orgData.isSuccess, userRolesData, blockedRoles]); return ( <> From 98714bca956e2b4b27532f5523386e0fb9561b4f Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Tue, 6 May 2025 10:38:35 +0800 Subject: [PATCH 0627/1184] new remove after option, validation and helper text --- .../CippComponents/CippFormComponent.jsx | 5 + .../tenant-allow-block-lists/add.jsx | 165 +++++++++++++++++- 2 files changed, 167 insertions(+), 3 deletions(-) diff --git a/src/components/CippComponents/CippFormComponent.jsx b/src/components/CippComponents/CippFormComponent.jsx index f42f5b1fbb16..21e445d0a88d 100644 --- a/src/components/CippComponents/CippFormComponent.jsx +++ b/src/components/CippComponents/CippFormComponent.jsx @@ -189,6 +189,11 @@ export const CippFormComponent = (props) => { {get(errors, convertedName, {})?.message} + {other.helperText && ( + + {other.helperText} + + )} ); diff --git a/src/pages/email/administration/tenant-allow-block-lists/add.jsx b/src/pages/email/administration/tenant-allow-block-lists/add.jsx index 434e4cbaa7fa..d82b261ad03f 100644 --- a/src/pages/email/administration/tenant-allow-block-lists/add.jsx +++ b/src/pages/email/administration/tenant-allow-block-lists/add.jsx @@ -1,4 +1,5 @@ import React from "react"; +import { useEffect } from "react"; import { Grid } from "@mui/material"; import { useForm } from "react-hook-form"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; @@ -17,9 +18,56 @@ const AddTenantAllowBlockList = () => { listType: null, listMethod: null, NoExpiration: false, + RemoveAfter: false, }, }); + useEffect(() => { + const subscription = formControl.watch((value, { name }) => { + // If NoExpiration is turned on, disable RemoveAfter + if (name === "NoExpiration" && value.NoExpiration) { + formControl.setValue("RemoveAfter", false); + } + + // If RemoveAfter is turned on, disable NoExpiration + if (name === "RemoveAfter" && value.RemoveAfter) { + formControl.setValue("NoExpiration", false); + } + + // If ListMethod is Block, disable RemoveAfter + if (name === "listMethod" && value.listMethod?.value === "Block") { + formControl.setValue("RemoveAfter", false); + } + + // If listType is not Sender, Url, or FileHash, disable RemoveAfter + if (name === "listType" && !["Sender", "Url", "FileHash"].includes(value.listType?.value)) { + formControl.setValue("RemoveAfter", false); + } + + // If listType is FileHash, set ListMethod to Block + if (name === "listType" && value.listType?.value === "FileHash") { + formControl.setValue("listMethod", { label: "Block", value: "Block" }); + } + + // Handle NoExpiration compatibility based on rules + const listMethod = value.listMethod?.value; + const listType = value.listType?.value; + + // Check if NoExpiration should be enabled + const isNoExpirationCompatible = + listMethod === "Block" || + (listMethod === "Allow" && (listType === "Url" || listType === "IP")); + + // If current selection is incompatible with NoExpiration, reset it to false + if ((name === "listMethod" || name === "listType") && + !isNoExpirationCompatible && value.NoExpiration) { + formControl.setValue("NoExpiration", false); + } + }); + + return () => subscription.unsubscribe(); + }, [formControl]); + return ( { notes: values.notes, listMethod: values.listMethod?.value, NoExpiration: values.NoExpiration, + RemoveAfter: values.RemoveAfter }; }} > @@ -46,7 +95,78 @@ const AddTenantAllowBlockList = () => { label="Entries" name="entries" formControl={formControl} - validators={{ required: "Entries field is required" }} + validators={{ + required: "Entries field is required", + validate: (value) => { + if (!value) return true; + + const entries = value.split(/[,;]/).map(e => e.trim()); + const listType = formControl.watch("listType")?.value; + + if (listType === "FileHash") { + // SHA256 hash validation - 64 hex characters + for (const entry of entries) { + if (entry.length !== 64) + return "File hash entries must be exactly 64 characters"; + if (!/^[A-Fa-f0-9]{64}$/.test(entry)) + return "File hash must contain only hexadecimal characters"; + } + } else if (listType === "IP") { + // IPv6 address validation (for IP list type - IPv6 only) + const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$/; + const ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])$/; + + for (const entry of entries) { + if (!ipv6Regex.test(entry) && !ipv6CidrRegex.test(entry)) + return "Invalid IPv6 address format. Use colon-hexadecimal or CIDR notation"; + } + } else if (listType === "Url") { + // For URL list type - check length and validate any IP addresses + // IPv4 regex + const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/; + // IPv4 CIDR regex + const ipv4CidrRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\/([0-9]|[12][0-9]|3[0-2])$/; + // IPv6 regex (same as above) + const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$/; + const ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])$/; + + // Hostname regex (allowing wildcards * and ~) + const hostnameRegex = /^((\*|\~)?[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\*|\~)?$/; + + for (const entry of entries) { + if (entry.length > 250) + return "URL entries must be 250 characters or less"; + + // Skip validation for entries with wildcards (more complex patterns) + if (entry.includes('*') || entry.includes('~')) continue; + + // If it's not a hostname and not an IP, it might be invalid + if (!ipv4Regex.test(entry) && !ipv4CidrRegex.test(entry) && + !ipv6Regex.test(entry) && !ipv6CidrRegex.test(entry) && + !hostnameRegex.test(entry)) { + // Allow some flexibility for wildcard patterns + // But at least provide a warning for obviously invalid formats + if (!/[a-zA-Z0-9\.\-\*\~]/.test(entry)) { + return "Invalid URL format. Enter hostnames, IPv4, or IPv6 addresses"; + } + } + } + } + + return true; + } + }} + helperText={ + formControl.watch("listType")?.value === "FileHash" + ? "Enter SHA256 hash values separated by commas or semicolons (e.g., 768a813668695ef2483b2bde7cf5d1b2db0423a0d3e63e498f3ab6f2eb13ea3)" + : formControl.watch("listType")?.value === "Url" + ? "Enter URLs, IPv4, or IPv6 addresses with optional wildcards separated by commas or semicolons" + : formControl.watch("listType")?.value === "Sender" + ? "Enter domains or email addresses separated by commas or semicolons (e.g., contoso.com,user@example.com)" + : formControl.watch("listType")?.value === "IP" + ? "Enter IPv6 addresses only in colon-hexadecimal format or CIDR notation" + : "" + } /> {/* Notes & List Type */} @@ -68,8 +188,9 @@ const AddTenantAllowBlockList = () => { creatable={false} options={[ { label: "Sender", value: "Sender" }, - { label: "Url", value: "Url" }, + { label: "Url/IPv4", value: "Url" }, { label: "FileHash", value: "FileHash" }, + { label: "IPv6", value: "IP" }, ]} validators={{ required: "Please choose a List Type." }} /> @@ -89,6 +210,16 @@ const AddTenantAllowBlockList = () => { { label: "Allow", value: "Allow" }, ]} validators={{ required: "Please select Block or Allow." }} + disabled={ + formControl.watch("listType")?.value === "FileHash" + ? true + : false + } + helperText={ + formControl.watch("listType")?.value === "FileHash" + ? "FileHash entries can only be Blocked" + : "Choose whether to block or allow the entries" + } /> @@ -96,9 +227,37 @@ const AddTenantAllowBlockList = () => { + + + {/* Remove After */} + + From 76502d96591766a67ea87875764170eb5d974101 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Tue, 6 May 2025 18:51:47 +0800 Subject: [PATCH 0628/1184] Less ambiguous wording for mailbox usage --- src/components/CippCards/CippExchangeInfoCard.jsx | 2 +- src/components/linearProgressWithLabel.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippCards/CippExchangeInfoCard.jsx b/src/components/CippCards/CippExchangeInfoCard.jsx index 03f4473c745a..1a368b99324d 100644 --- a/src/components/CippCards/CippExchangeInfoCard.jsx +++ b/src/components/CippCards/CippExchangeInfoCard.jsx @@ -82,7 +82,7 @@ export const CippExchangeInfoCard = (props) => { { - {`${Math.round(props.value)}% ${props?.addedLabel ?? ""}`} + {`${Math.round(props.value)}% ${props?.addedLabel ?? ""}`} ); }; From d6f3a2376f597799c13309730743c89537448321 Mon Sep 17 00:00:00 2001 From: Esco Date: Tue, 6 May 2025 13:25:14 +0200 Subject: [PATCH 0629/1184] chore: more cSpell words --- cspell.json | 73 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/cspell.json b/cspell.json index 921542d92e48..1ff07bf80063 100644 --- a/cspell.json +++ b/cspell.json @@ -4,28 +4,61 @@ "dictionaryDefinitions": [], "dictionaries": [], "words": [ - "CIPP", - "CIPP-API", - "Entra", - "Intune", - "GDAP", - "OBEE", - "AITM", - "Passwordless", - "Yubikey", - "Sherweb", - "Autotask", - "Datto", - "Syncro", - "ImmyBot", - "Choco", + "ADMS", + "AITM", + "Augmentt", + "Autotask", + "Choco", + "CIPP", + "CIPP-API", + "Datto", + "Entra", + "ESET", + "GDAP", + "HIBP", + "Hudu", + "ImmyBot", + "Intune", + "LCID", + "OBEE", + "Passwordless", + "pwpush", + "Rewst", + "Sherweb", + "Syncro", + "Yubikey" ], "ignoreWords": [ - "CIPPAPI", - "locationcipp", - "TNEF", - "winmail", - "PSTN", + "Addins", + "CIPPAPI", + "PSTN", + "TNEF", + "exo_individualsharing", + "exo_mailboxaudit", + "exo_mailtipsenabled", + "exo_outlookaddins", + "exo_storageproviderrestricted", + "locationcipp", + "mdo_antiphishingpolicies", + "mdo_autoforwardingmode", + "mdo_blockmailforward", + "mdo_commonattachmentsfilter", + "mdo_highconfidencephishaction", + "mdo_highconfidencespamaction", + "mdo_phishthresholdlevel", + "mdo_phisspamacation", + "mdo_safeattachmentpolicy", + "mdo_safeattachments", + "mdo_safedocuments", + "mdo_safelinksforOfficeApps", + "mdo_safelinksforemail", + "mdo_spam_notifications_only_for_admins", + "mdo_zapmalware", + "mdo_zapphish", + "mdo_zapspam", + "microsoftonline", + "mip_search_auditlog", + "winmail" ], "import": [] } From 1f267efa16ffd4b1a32825e42772d54e3341cec1 Mon Sep 17 00:00:00 2001 From: Esco Date: Wed, 7 May 2025 12:35:05 +0200 Subject: [PATCH 0630/1184] feat: Work from anywhere report Mainly for Windows 11 Readiness Report --- src/layouts/config.js | 1 + .../reports/workfromanywhere/index.js | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 src/pages/endpoint/reports/workfromanywhere/index.js diff --git a/src/layouts/config.js b/src/layouts/config.js index ccf67d86e9ba..b1d9e72b9623 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -258,6 +258,7 @@ export const nativeMenuItems = [ path: "/endpoint/reports", items: [ { title: "Analytics Device Score", path: "/endpoint/reports/analyticsdevicescore" }, + { title: "Work from anywhere", path: "/endpoint/reports/workfromanywhere" }, ], }, ], diff --git a/src/pages/endpoint/reports/workfromanywhere/index.js b/src/pages/endpoint/reports/workfromanywhere/index.js new file mode 100644 index 000000000000..cd963abfbe72 --- /dev/null +++ b/src/pages/endpoint/reports/workfromanywhere/index.js @@ -0,0 +1,87 @@ +import { EyeIcon } from "@heroicons/react/24/outline"; +import { Layout as DashboardLayout } from "/src/layouts/index.js"; +import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; +import { useSettings } from "/src/hooks/use-settings"; + +const Page = () => { + const pageTitle = "Work from anywhere Report"; + const tenantFilter = useSettings().currentTenant; + + // Actions from the source file + const actions = [ + { + label: "View in Intune", + link: `https://intune.microsoft.com/${tenantFilter}/#view/Microsoft_Intune_Devices/DeviceSettingsMenuBlade/~/overview/mdmDeviceId/[id]`, + color: "info", + icon: , + target: "_blank", + multiPost: false, + external: true, + }, + ]; + + // OffCanvas details based on the source file + const offCanvas = { + extendedInfoFields: [ + "id", + "deviceName", + "serialNumber", + "model", + "manufacturer", + "ownership", + "upgradeEligibility", + ], + actions: actions, + }; + + // Columns to be displayed in the table + const simpleColumns = [ + "deviceName", + "serialNumber", + "model", + "manufacturer", + "ownership", + "managedBy", + "osVersion", + "upgradeEligibility", + "ramCheckFailed", + "storageCheckFailed", + "processorCoreCountCheckFailed", + "processorSpeedCheckFailed", + "tpmCheckFailed", + "secureBootCheckFailed", + "processorFamilyCheckFailed", + "processor64BitCheckFailed", + "osCheckFailed", + ]; + + // Predefined filters to be applied to the table + const filterList = [ + { + filterName: "Upgrade not eligible", + value: [{ id: "upgradeEligibility", value: "notCapable" }], + type: "column", + }, + ]; + + return ( + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; From 9c73651212296e4cd80d6929f610331900c1de63 Mon Sep 17 00:00:00 2001 From: Esco Date: Thu, 8 May 2025 09:59:15 +0200 Subject: [PATCH 0631/1184] fix: fix for disable Out of Office * fixes https://discord.com/channels/905453405936447518/905454401639047228/1369906134814818314 Fix disable state --- src/components/CippComponents/CippUserActions.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/CippComponents/CippUserActions.jsx b/src/components/CippComponents/CippUserActions.jsx index b443b4bcb856..4b0f5fe1b6c9 100644 --- a/src/components/CippComponents/CippUserActions.jsx +++ b/src/components/CippComponents/CippUserActions.jsx @@ -154,7 +154,10 @@ export const CippUserActions = () => { type: "POST", icon: , url: "/api/ExecSetOoO", - data: { user: "userPrincipalName", AutoReplyState: "Disabled" }, + data: { + userId: "userPrincipalName", + AutoReplyState: { value: "Disabled" } + }, confirmText: "Are you sure you want to disable the out of office?", multiPost: false, }, From 5652ef9c196fc7cd33ee05f7d47a1edf851eb20a Mon Sep 17 00:00:00 2001 From: Esco Date: Fri, 9 May 2025 10:01:44 +0200 Subject: [PATCH 0632/1184] feat: Editable City and Country --- src/components/CippCards/CippUserInfoCard.jsx | 8 ++++++++ .../CippFormPages/CippAddEditUser.jsx | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/components/CippCards/CippUserInfoCard.jsx b/src/components/CippCards/CippUserInfoCard.jsx index f0de3777f71a..97e6917e9126 100644 --- a/src/components/CippCards/CippUserInfoCard.jsx +++ b/src/components/CippCards/CippUserInfoCard.jsx @@ -130,6 +130,14 @@ export const CippUserInfoCard = (props) => { label="Postal code" value={isFetching ? : user?.postalCode || "N/A"} /> + : user?.city || "N/A"} + /> + : user?.country || "N/A"} + /> { formControl={formControl} /> + + + + + + Date: Tue, 13 May 2025 00:03:14 +0200 Subject: [PATCH 0633/1184] include groups --- .../administration/alert-configuration/alert.jsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/pages/tenant/administration/alert-configuration/alert.jsx b/src/pages/tenant/administration/alert-configuration/alert.jsx index a07ad0d7e572..41f09ddd481b 100644 --- a/src/pages/tenant/administration/alert-configuration/alert.jsx +++ b/src/pages/tenant/administration/alert-configuration/alert.jsx @@ -120,10 +120,11 @@ const AlertWizard = () => { if (usedCommand?.requiresInput && alert.RawAlert.Parameters) { try { // Check if Parameters is a string that needs parsing - const params = typeof alert.RawAlert.Parameters === 'string' - ? JSON.parse(alert.RawAlert.Parameters) - : alert.RawAlert.Parameters; - + const params = + typeof alert.RawAlert.Parameters === "string" + ? JSON.parse(alert.RawAlert.Parameters) + : alert.RawAlert.Parameters; + // Set the input value if it exists if (params.InputValue) { resetObject[usedCommand.inputName] = params.InputValue; @@ -345,6 +346,7 @@ const AlertWizard = () => { formControl={formControl} allTenants={true} label="Included Tenants for alert" + includeGroups={true} /> Date: Tue, 13 May 2025 12:19:03 +0800 Subject: [PATCH 0634/1184] Fixes Moved validation to existing central validator Moved useWatch outside of useEffect scope Replaced formcontrol.Watch with useWatch --- .../tenant-allow-block-lists/add.jsx | 263 ++++++++++-------- src/utils/get-cipp-validator.js | 24 ++ 2 files changed, 170 insertions(+), 117 deletions(-) diff --git a/src/pages/email/administration/tenant-allow-block-lists/add.jsx b/src/pages/email/administration/tenant-allow-block-lists/add.jsx index d82b261ad03f..99edb083a70d 100644 --- a/src/pages/email/administration/tenant-allow-block-lists/add.jsx +++ b/src/pages/email/administration/tenant-allow-block-lists/add.jsx @@ -1,11 +1,11 @@ -import React from "react"; import { useEffect } from "react"; import { Grid } from "@mui/material"; -import { useForm } from "react-hook-form"; +import { useForm, useWatch } from "react-hook-form"; import { Layout as DashboardLayout } from "/src/layouts/index.js"; import CippFormPage from "/src/components/CippFormPages/CippFormPage"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; import { useSettings } from "../../../../hooks/use-settings"; +import { getCippValidator } from "/src/utils/get-cipp-validator"; const AddTenantAllowBlockList = () => { const tenantDomain = useSettings().currentTenant; @@ -22,51 +22,141 @@ const AddTenantAllowBlockList = () => { }, }); + const noExpiration = useWatch({ control: formControl.control, name: "NoExpiration" }); + const removeAfter = useWatch({ control: formControl.control, name: "RemoveAfter" }); + const listMethod = useWatch({ control: formControl.control, name: "listMethod" }); + const listType = useWatch({ control: formControl.control, name: "listType" }); + + const isListMethodBlock = listMethod?.value === "Block"; + const isListTypeFileHash = listType?.value === "FileHash"; + const isListTypeSenderUrlOrFileHash = ["Sender", "Url", "FileHash"].includes(listType?.value); + const isNoExpirationCompatible = isListMethodBlock || + (listMethod?.value === "Allow" && (listType?.value === "Url" || listType?.value === "IP")); + useEffect(() => { - const subscription = formControl.watch((value, { name }) => { - // If NoExpiration is turned on, disable RemoveAfter - if (name === "NoExpiration" && value.NoExpiration) { - formControl.setValue("RemoveAfter", false); - } - - // If RemoveAfter is turned on, disable NoExpiration - if (name === "RemoveAfter" && value.RemoveAfter) { + if (noExpiration) { + formControl.setValue("RemoveAfter", false); + } + + if (removeAfter) { + formControl.setValue("NoExpiration", false); + } + + if (isListMethodBlock) { + formControl.setValue("RemoveAfter", false); + } + + if (listType && !isListTypeSenderUrlOrFileHash) { + formControl.setValue("RemoveAfter", false); + } + + if (isListTypeFileHash) { + formControl.setValue("listMethod", { label: "Block", value: "Block" }); + } + + if (listMethod || listType) { + if (!isNoExpirationCompatible && noExpiration) { formControl.setValue("NoExpiration", false); } - - // If ListMethod is Block, disable RemoveAfter - if (name === "listMethod" && value.listMethod?.value === "Block") { - formControl.setValue("RemoveAfter", false); + } + }, [ + noExpiration, + removeAfter, + isListMethodBlock, + listType, + isListTypeSenderUrlOrFileHash, + isListTypeFileHash, + isNoExpirationCompatible, + formControl + ]); + + const validateEntries = (value) => { + if (!value) return true; + + const entries = value.split(/[,;]/).map(e => e.trim()); + const currentListType = listType?.value; + + if (currentListType === "FileHash") { + for (const entry of entries) { + if (entry.length !== 64) + return "File hash entries must be exactly 64 characters"; + + const hashResult = getCippValidator(entry, "sha256"); + if (hashResult !== true) + return hashResult; } - - // If listType is not Sender, Url, or FileHash, disable RemoveAfter - if (name === "listType" && !["Sender", "Url", "FileHash"].includes(value.listType?.value)) { - formControl.setValue("RemoveAfter", false); + } else if (currentListType === "IP") { + for (const entry of entries) { + const ipv6Result = getCippValidator(entry, "ipv6"); + const ipv6CidrResult = getCippValidator(entry, "ipv6cidr"); + + if (ipv6Result !== true && ipv6CidrResult !== true) + return "Invalid IPv6 address format. Use colon-hexadecimal or CIDR notation"; } - - // If listType is FileHash, set ListMethod to Block - if (name === "listType" && value.listType?.value === "FileHash") { - formControl.setValue("listMethod", { label: "Block", value: "Block" }); + } else if (currentListType === "Url") { + for (const entry of entries) { + if (entry.length > 250) + return "URL entries must be 250 characters or less"; + + // For entries with wildcards, use the improved wildcard validators + if (entry.includes('*') || entry.includes('~')) { + // Try both wildcard validators + const wildcardUrlResult = getCippValidator(entry, "wildcardUrl"); + const wildcardDomainResult = getCippValidator(entry, "wildcardDomain"); + + if (wildcardUrlResult !== true && wildcardDomainResult !== true) { + // If basic pattern check fails too, give a more specific message + if (!/^[a-zA-Z0-9\.\-\*\~\/]+$/.test(entry)) { + return "Invalid wildcard pattern. Use only letters, numbers, dots, hyphens, slashes, and wildcards (* or ~)"; + } + + // If it has basic valid characters but doesn't match our patterns + return "Invalid wildcard format. Common formats are *.domain.com or domain.*"; + } + continue; + } + + // For non-wildcard entries, use standard validators + const ipv4Result = getCippValidator(entry, "ip"); + const ipv4CidrResult = getCippValidator(entry, "ipv4cidr"); + const ipv6Result = getCippValidator(entry, "ipv6"); + const ipv6CidrResult = getCippValidator(entry, "ipv6cidr"); + const hostnameResult = getCippValidator(entry, "hostname"); + const urlResult = getCippValidator(entry, "url"); + + // If none of the validators pass + if (ipv4Result !== true && + ipv4CidrResult !== true && + ipv6Result !== true && + ipv6CidrResult !== true && + hostnameResult !== true && + urlResult !== true) { + return "Invalid URL format. Enter hostnames, IPv4, or IPv6 addresses"; + } } - - // Handle NoExpiration compatibility based on rules - const listMethod = value.listMethod?.value; - const listType = value.listType?.value; - - // Check if NoExpiration should be enabled - const isNoExpirationCompatible = - listMethod === "Block" || - (listMethod === "Allow" && (listType === "Url" || listType === "IP")); - - // If current selection is incompatible with NoExpiration, reset it to false - if ((name === "listMethod" || name === "listType") && - !isNoExpirationCompatible && value.NoExpiration) { - formControl.setValue("NoExpiration", false); + } else if (currentListType === "Sender") { + for (const entry of entries) { + // Check for wildcards first + if (entry.includes('*') || entry.includes('~')) { + const wildcardDomainResult = getCippValidator(entry, "wildcardDomain"); + + if (wildcardDomainResult !== true) { + return "Invalid sender wildcard pattern. Common format is *.domain.com"; + } + continue; + } + + // For non-wildcard entries, use senderEntry validator + const senderResult = getCippValidator(entry, "senderEntry"); + + if (senderResult !== true) { + return senderResult; + } } - }); + } - return () => subscription.unsubscribe(); - }, [formControl]); + return true; + }; return ( { formControl={formControl} validators={{ required: "Entries field is required", - validate: (value) => { - if (!value) return true; - - const entries = value.split(/[,;]/).map(e => e.trim()); - const listType = formControl.watch("listType")?.value; - - if (listType === "FileHash") { - // SHA256 hash validation - 64 hex characters - for (const entry of entries) { - if (entry.length !== 64) - return "File hash entries must be exactly 64 characters"; - if (!/^[A-Fa-f0-9]{64}$/.test(entry)) - return "File hash must contain only hexadecimal characters"; - } - } else if (listType === "IP") { - // IPv6 address validation (for IP list type - IPv6 only) - const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$/; - const ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])$/; - - for (const entry of entries) { - if (!ipv6Regex.test(entry) && !ipv6CidrRegex.test(entry)) - return "Invalid IPv6 address format. Use colon-hexadecimal or CIDR notation"; - } - } else if (listType === "Url") { - // For URL list type - check length and validate any IP addresses - // IPv4 regex - const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/; - // IPv4 CIDR regex - const ipv4CidrRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\/([0-9]|[12][0-9]|3[0-2])$/; - // IPv6 regex (same as above) - const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$/; - const ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])$/; - - // Hostname regex (allowing wildcards * and ~) - const hostnameRegex = /^((\*|\~)?[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\*|\~)?$/; - - for (const entry of entries) { - if (entry.length > 250) - return "URL entries must be 250 characters or less"; - - // Skip validation for entries with wildcards (more complex patterns) - if (entry.includes('*') || entry.includes('~')) continue; - - // If it's not a hostname and not an IP, it might be invalid - if (!ipv4Regex.test(entry) && !ipv4CidrRegex.test(entry) && - !ipv6Regex.test(entry) && !ipv6CidrRegex.test(entry) && - !hostnameRegex.test(entry)) { - // Allow some flexibility for wildcard patterns - // But at least provide a warning for obviously invalid formats - if (!/[a-zA-Z0-9\.\-\*\~]/.test(entry)) { - return "Invalid URL format. Enter hostnames, IPv4, or IPv6 addresses"; - } - } - } - } - - return true; - } + validate: validateEntries }} helperText={ - formControl.watch("listType")?.value === "FileHash" - ? "Enter SHA256 hash values separated by commas or semicolons (e.g., 768a813668695ef2483b2bde7cf5d1b2db0423a0d3e63e498f3ab6f2eb13ea3)" - : formControl.watch("listType")?.value === "Url" + listType?.value === "FileHash" + ? "Enter SHA256 hash values separated by commas or semicolons (e.g., 768a813668695ef2483b2bde7cf5d1b2db0423a0d3e63e498f3ab6f2eb13ea3e)" + : listType?.value === "Url" ? "Enter URLs, IPv4, or IPv6 addresses with optional wildcards separated by commas or semicolons" - : formControl.watch("listType")?.value === "Sender" + : listType?.value === "Sender" ? "Enter domains or email addresses separated by commas or semicolons (e.g., contoso.com,user@example.com)" - : formControl.watch("listType")?.value === "IP" + : listType?.value === "IP" ? "Enter IPv6 addresses only in colon-hexadecimal format or CIDR notation" : "" } @@ -210,13 +243,9 @@ const AddTenantAllowBlockList = () => { { label: "Allow", value: "Allow" }, ]} validators={{ required: "Please select Block or Allow." }} - disabled={ - formControl.watch("listType")?.value === "FileHash" - ? true - : false - } + disabled={isListTypeFileHash} helperText={ - formControl.watch("listType")?.value === "FileHash" + isListTypeFileHash ? "FileHash entries can only be Blocked" : "Choose whether to block or allow the entries" } @@ -231,16 +260,16 @@ const AddTenantAllowBlockList = () => { name="NoExpiration" formControl={formControl} helperText={ - formControl.watch("listMethod")?.value === "Block" + isListMethodBlock ? "Block entries will never expire" : "Available only for Block entries or specific Allow entries (URL/IP)" } disabled={ - formControl.watch("RemoveAfter") || - !(formControl.watch("listMethod")?.value === "Block" || - (formControl.watch("listMethod")?.value === "Allow" && - (formControl.watch("listType")?.value === "Url" || - formControl.watch("listType")?.value === "IP"))) + removeAfter || + !(isListMethodBlock || + (listMethod?.value === "Allow" && + (listType?.value === "Url" || + listType?.value === "IP"))) } /> @@ -254,9 +283,9 @@ const AddTenantAllowBlockList = () => { formControl={formControl} helperText="If checked, allow entries will be removed after 45 days of last use" disabled={ - formControl.watch("NoExpiration") || - formControl.watch("listMethod")?.value !== "Allow" || - !["Sender", "FileHash", "Url"].includes(formControl.watch("listType")?.value) + noExpiration || + listMethod?.value !== "Allow" || + !["Sender", "FileHash", "Url"].includes(listType?.value) } /> diff --git a/src/utils/get-cipp-validator.js b/src/utils/get-cipp-validator.js index 334bbe7dce49..3b42fb6c5101 100644 --- a/src/utils/get-cipp-validator.js +++ b/src/utils/get-cipp-validator.js @@ -19,11 +19,35 @@ export const getCippValidator = (value, type) => { return typeof value === "string" || "This is not a valid string"; case "ip": return /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/.test(value) || "This is not a valid IP address"; + case "ipv4cidr": + return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\/([0-9]|[12][0-9]|3[0-2])$/.test(value) || "This is not a valid IPv4 CIDR"; + case "ipv6": + return /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$/.test(value) || "This is not a valid IPv6 address"; + case "ipv6cidr": + return /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])$/.test(value) || "This is not a valid IPv6 CIDR"; + case "hostname": + return /^((\*|\~)?[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\*|\~)?$/.test(value) || "This is not a valid hostname"; + case "sha256": + return /^[A-Fa-f0-9]{64}$/.test(value) || "This is not a valid SHA256 hash"; case "guid": return ( /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value) || "This is not a valid GUID" ); + case "domain": + return /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$/.test(value) || "This is not a valid domain"; + case "wildcardDomain": + return /^(\*\.)?([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\.\*)?$/.test(value) || /^(\*)?[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\*)?(\.[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)*$/.test(value) || "This is not a valid domain pattern"; + case "wildcardUrl": + return /^(https?:\/\/)?(\*\.)?([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\.\*)?([\/\?\*][a-zA-Z0-9\-\.\~\*\/\?=&%]*)?$/.test(value) || "This is not a valid URL pattern"; + case "emailAddress": + return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value) || "This is not a valid email address"; + case "senderEntry": + return ( + /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$/.test(value) || + /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value) || + "This is not a valid domain or email address" + ); default: return true; } From d23002610f70f8ae81725d5fbd31519d79b88033 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Tue, 13 May 2025 12:35:17 +0800 Subject: [PATCH 0635/1184] Indentation fix for timezoneList.json --- src/data/timezoneList.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/timezoneList.json b/src/data/timezoneList.json index d259bc80e65d..57238fe7eedc 100644 --- a/src/data/timezoneList.json +++ b/src/data/timezoneList.json @@ -189,7 +189,7 @@ "timezone": "(UTC+04:00) Astrakhan, Ulyanovsk" }, { - "timezone": "(UTC+04:00) Baku" + "timezone": "(UTC+04:00) Baku" }, { "timezone": "(UTC+04:00) Izhevsk, Samara" From 872e2a9f70b43eaa3c41d0668c60d8d30bd2856a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 13 May 2025 16:54:38 +0200 Subject: [PATCH 0636/1184] feat: Add new Set Exchange Outbound Spam Limits standard --- src/data/standards.json | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/data/standards.json b/src/data/standards.json index 6abcb77d9791..3a75fdc58266 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1371,6 +1371,54 @@ "powershellEquivalent": "Set-MailboxFolderPermission", "recommendedBy": [] }, + { + "name": "standards.EXOOutboundSpamLimits", + "cat": "Exchange Standards", + "tag": ["CIS"], + "helpText": "Configures the outbound spam recipient limits (external per hour, internal per hour, per day) and the action to take when a limit is reached. The 'Set Outbound Spam Alert e-mail' standard is recommended to configure together with this one. ", + "docsDescription": "Configures the Exchange Online outbound spam recipient limits for external per hour, internal per hour, and per day, along with the action to take (e.g., BlockUser, Alert) when these limits are exceeded. This helps prevent abuse and manage email flow. Microsoft's recommendations can be found [here.](https://learn.microsoft.com/en-us/defender-office-365/recommended-settings-for-eop-and-office365#eop-outbound-spam-policy-settings) The 'Set Outbound Spam Alert e-mail' standard is recommended to configure together with this one.", + "addedComponent": [ + { + "type": "number", + "name": "standards.EXOOutboundSpamLimits.RecipientLimitExternalPerHour", + "label": "External Recipient Limit Per Hour", + "defaultValue": 400 + }, + { + "type": "number", + "name": "standards.EXOOutboundSpamLimits.RecipientLimitInternalPerHour", + "label": "Internal Recipient Limit Per Hour", + "defaultValue": 800 + }, + { + "type": "number", + "name": "standards.EXOOutboundSpamLimits.RecipientLimitPerDay", + "label": "Daily Recipient Limit", + "defaultValue": 800 + }, + { + "type": "autoComplete", + "multiple": false, + "creatable": false, + "name": "standards.EXOOutboundSpamLimits.ActionWhenThresholdReached", + "label": "Action When Threshold Reached", + "options": [ + { "label": "Alert", "value": "Alert" }, + { "label": "Block User", "value": "BlockUser" }, + { + "label": "Block user from sending mail for the rest of the day", + "value": "BlockUserForToday" + } + ] + } + ], + "label": "Set Exchange Outbound Spam Limits", + "impact": "Low Impact", + "impactColour": "info", + "addedDate": "2025-05-13", + "powershellEquivalent": "Set-HostedOutboundSpamFilterPolicy", + "recommendedBy": ["CIPP", "CIS"] + }, { "name": "standards.DisableExternalCalendarSharing", "cat": "Exchange Standards", From 4c50e24706f50a785c762546227e56106246cc38 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 13 May 2025 18:28:36 +0200 Subject: [PATCH 0637/1184] add persistor --- src/api/ApiCall.jsx | 12 +++++++++--- src/pages/_app.js | 32 +++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/api/ApiCall.jsx b/src/api/ApiCall.jsx index 936654ff16fd..07c80d9c211f 100644 --- a/src/api/ApiCall.jsx +++ b/src/api/ApiCall.jsx @@ -1,4 +1,10 @@ -import { keepPreviousData, useInfiniteQuery, useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { + keepPreviousData, + useInfiniteQuery, + useMutation, + useQuery, + useQueryClient, +} from "@tanstack/react-query"; import axios, { isAxiosError } from "axios"; import { useDispatch } from "react-redux"; import { showToast } from "../store/toasts"; @@ -15,7 +21,7 @@ export function ApiGetCall(props) { bulkRequest = false, toast = false, onResult, - staleTime = 600000, // 10 minutes + staleTime = 300000, refetchOnWindowFocus = false, refetchOnMount = true, refetchOnReconnect = true, @@ -212,7 +218,7 @@ export function ApiGetCallWithPagination({ } return lastPage?.Metadata?.nextLink ? { nextLink: lastPage.Metadata.nextLink } : undefined; }, - staleTime: 600000, // 10 minutes + staleTime: 30000, refetchOnWindowFocus: false, retry: retryFn, }); diff --git a/src/pages/_app.js b/src/pages/_app.js index bf72bf37c6a3..44b490dfd2ff 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -29,17 +29,13 @@ import { } from "@mui/icons-material"; import { SvgIcon } from "@mui/material"; import discordIcon from "../../public/discord-mark-blue.svg"; -import React from "react"; +import React, { useEffect } from "react"; import { usePathname } from "next/navigation"; import { useRouter } from "next/router"; +import { persistQueryClient } from "@tanstack/react-query-persist-client"; +import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; TimeAgo.addDefaultLocale(en); -const ReactQueryDevtoolsProduction = React.lazy(() => - import("@tanstack/react-query-devtools/build/modern/production.js").then((d) => ({ - default: d.ReactQueryDevtools, - })) -); - const queryClient = new QueryClient(); const clientSideEmotionCache = createEmotionCache(); const App = (props) => { @@ -49,6 +45,22 @@ const App = (props) => { const pathname = usePathname(); const route = useRouter(); + // 👇 Persist TanStack Query cache to localStorage + useEffect(() => { + if (typeof window !== "undefined") { + const localStoragePersister = createSyncStoragePersister({ + storage: window.localStorage, + }); + + persistQueryClient({ + queryClient, + persister: localStoragePersister, + maxAge: 1000 * 60 * 60 * 24, // 24 hours + buster: "v1", + }); + } + }, []); + const speedDialActions = [ { id: "license", @@ -98,6 +110,12 @@ const App = (props) => { }, ]; + const ReactQueryDevtoolsProduction = React.lazy(() => + import("@tanstack/react-query-devtools/build/modern/production.js").then((d) => ({ + default: d.ReactQueryDevtools, + })) + ); + return ( From b08b079725abf2fc1d5d4eaedb785b247c2d3a33 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 13 May 2025 18:29:14 +0200 Subject: [PATCH 0638/1184] added package --- package.json | 2 ++ yarn.lock | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/package.json b/package.json index 879b3c54028c..934681339eba 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,10 @@ "@musement/iso-duration": "^1.0.0", "@react-pdf/renderer": "4.3.0", "@reduxjs/toolkit": "2.6.1", + "@tanstack/query-sync-storage-persister": "^5.76.0", "@tanstack/react-query": "^5.51.11", "@tanstack/react-query-devtools": "^5.51.11", + "@tanstack/react-query-persist-client": "^5.76.0", "@tanstack/react-table": "^8.19.2", "@tiptap/core": "^2.9.1", "@tiptap/extension-heading": "^2.9.1", diff --git a/yarn.lock b/yarn.lock index dcb80c7f0332..d809e0a29713 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1872,11 +1872,31 @@ resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.69.0.tgz#c434505987ade936dc53e6e27aa1406b0295516f" integrity sha512-Kn410jq6vs1P8Nm+ZsRj9H+U3C0kjuEkYLxbiCyn3MDEiYor1j2DGVULqAz62SLZtUZ/e9Xt6xMXiJ3NJ65WyQ== +"@tanstack/query-core@5.76.0": + version "5.76.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.76.0.tgz#3b4d5d34ce307ba0cf7d1a3e90d7adcdc6c46be0" + integrity sha512-FN375hb8ctzfNAlex5gHI6+WDXTNpe0nbxp/d2YJtnP+IBM6OUm7zcaoCW6T63BawGOYZBbKC0iPvr41TteNVg== + "@tanstack/query-devtools@5.67.2": version "5.67.2" resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.67.2.tgz#890ae9913bd21d3969c7fd85c68b1bd1500cfc57" integrity sha512-O4QXFFd7xqp6EX7sdvc9tsVO8nm4lpWBqwpgjpVLW5g7IeOY6VnS/xvs/YzbRhBVkKTMaJMOUGU7NhSX+YGoNg== +"@tanstack/query-persist-client-core@5.76.0": + version "5.76.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-persist-client-core/-/query-persist-client-core-5.76.0.tgz#a3bcdd687384dc6b5b61b402bef153ad54515321" + integrity sha512-xcTZjILf4q49Nsl6wcnhBYZ4O0gpnuNwV6vPIEWIrwTuSNWz2zd/g9bc8SxnXy7xCV8SM1H0IJn8KjLQIUb2ag== + dependencies: + "@tanstack/query-core" "5.76.0" + +"@tanstack/query-sync-storage-persister@^5.76.0": + version "5.76.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-sync-storage-persister/-/query-sync-storage-persister-5.76.0.tgz#29643062f1a424873afb22032ce70ee72436bb9b" + integrity sha512-N8d8voY61XkM+jfXTySduLrevD6wRM3pwQ1kG0syLiWWx/sX2+CpaTMSPr0GggjQuhmjhUPo83LaV+e449tizA== + dependencies: + "@tanstack/query-core" "5.76.0" + "@tanstack/query-persist-client-core" "5.76.0" + "@tanstack/react-query-devtools@^5.51.11": version "5.69.0" resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.69.0.tgz#2cb8083028aab591b9a82caf68cd7a383a0c8b1a" @@ -1884,6 +1904,13 @@ dependencies: "@tanstack/query-devtools" "5.67.2" +"@tanstack/react-query-persist-client@^5.76.0": + version "5.76.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-persist-client/-/react-query-persist-client-5.76.0.tgz#97718fec844708cb98a5902d4b1eeb72adea555b" + integrity sha512-QPKgkHX1yC1Ec21FTQHBTbQcHYI+6157DgsmxABp94H7/ZUJ3szZ7wdpdBPQyZ9VxBXlKRN+aNZkOPC90+r/uA== + dependencies: + "@tanstack/query-persist-client-core" "5.76.0" + "@tanstack/react-query@^5.51.11": version "5.69.0" resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.69.0.tgz#8d58e800854cc11d0aa2c39569f53ae32ba442a9" From 79eafc69f82cefda1c89812f82592a7f413d9b6b Mon Sep 17 00:00:00 2001 From: Chris Brannon Date: Tue, 13 May 2025 12:40:22 -0400 Subject: [PATCH 0639/1184] Next Backup --- src/pages/cipp/settings/backup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/cipp/settings/backup.js b/src/pages/cipp/settings/backup.js index 6935872881c2..b4f633a74e90 100644 --- a/src/pages/cipp/settings/backup.js +++ b/src/pages/cipp/settings/backup.js @@ -55,7 +55,7 @@ const Page = () => { }); const NextBackupRun = (props) => { - const date = new Date(props.date * 1000); + const date = new Date(props.date); if (isNaN(date)) { return "Not Scheduled"; } else { From 892d2482bfc8888cba9a7d10c9f103e7cd1d6955 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 13 May 2025 18:42:07 +0200 Subject: [PATCH 0640/1184] fix early stales --- src/api/ApiCall.jsx | 2 +- src/pages/_app.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/api/ApiCall.jsx b/src/api/ApiCall.jsx index 07c80d9c211f..35554764168e 100644 --- a/src/api/ApiCall.jsx +++ b/src/api/ApiCall.jsx @@ -218,7 +218,7 @@ export function ApiGetCallWithPagination({ } return lastPage?.Metadata?.nextLink ? { nextLink: lastPage.Metadata.nextLink } : undefined; }, - staleTime: 30000, + staleTime: 300000, refetchOnWindowFocus: false, retry: retryFn, }); diff --git a/src/pages/_app.js b/src/pages/_app.js index 44b490dfd2ff..2894e590fb18 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -56,6 +56,7 @@ const App = (props) => { queryClient, persister: localStoragePersister, maxAge: 1000 * 60 * 60 * 24, // 24 hours + staleTime: 1000 * 60 * 5, // optional: 5 minutes buster: "v1", }); } From 3ebdcb00187d48e7f16054d1fc0dde764af594d3 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Tue, 13 May 2025 19:04:42 +0200 Subject: [PATCH 0641/1184] weirdness with dev and tools --- src/pages/_app.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/pages/_app.js b/src/pages/_app.js index 2894e590fb18..6d585563825b 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -35,6 +35,7 @@ import { useRouter } from "next/router"; import { persistQueryClient } from "@tanstack/react-query-persist-client"; import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; TimeAgo.addDefaultLocale(en); +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; const queryClient = new QueryClient(); const clientSideEmotionCache = createEmotionCache(); @@ -111,12 +112,6 @@ const App = (props) => { }, ]; - const ReactQueryDevtoolsProduction = React.lazy(() => - import("@tanstack/react-query-devtools/build/modern/production.js").then((d) => ({ - default: d.ReactQueryDevtools, - })) - ); - return ( @@ -163,7 +158,7 @@ const App = (props) => { {settings.isInitialized && settings?.showDevtools === true ? ( - + ) : null} From c1c10e7739d491220caf99319f00667c04462313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 13 May 2025 20:30:17 +0200 Subject: [PATCH 0642/1184] Add "Edit permissions" action to room management page --- src/pages/email/resources/management/list-rooms/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/pages/email/resources/management/list-rooms/index.js b/src/pages/email/resources/management/list-rooms/index.js index bbf9e9f2d1c2..68c79ba360c2 100644 --- a/src/pages/email/resources/management/list-rooms/index.js +++ b/src/pages/email/resources/management/list-rooms/index.js @@ -2,7 +2,7 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; import Link from "next/link"; -import { AddHomeWork, Edit, Block, LockOpen } from "@mui/icons-material"; +import { AddHomeWork, Edit, Block, LockOpen, Key } from "@mui/icons-material"; import { TrashIcon } from "@heroicons/react/24/outline"; const Page = () => { @@ -16,6 +16,12 @@ const Page = () => { color: "info", condition: (row) => !row.isDirSynced, }, + { + label: "Edit permissions", + link: "/identity/administration/users/user/exchange?userId=[id]", + color: "info", + icon: , + }, { label: "Block Sign In", type: "POST", From e2f60422dd6b15d16a24e9ba1d9d62511a345b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Tue, 13 May 2025 22:11:49 +0200 Subject: [PATCH 0643/1184] feat: Add validation messages for user selection, policy selection, and end date input --- src/pages/tenant/conditional/deploy-vacation/add.jsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pages/tenant/conditional/deploy-vacation/add.jsx b/src/pages/tenant/conditional/deploy-vacation/add.jsx index 5e64bb392ea3..dda5279515f2 100644 --- a/src/pages/tenant/conditional/deploy-vacation/add.jsx +++ b/src/pages/tenant/conditional/deploy-vacation/add.jsx @@ -56,6 +56,7 @@ const Page = () => { formControl={formControl} name="UserId" multiple={false} + validators={{ required: "Picking a user is required" }} /> @@ -73,6 +74,7 @@ const Page = () => { }} multiple={false} formControl={formControl} + validators={{ required: "Picking a policy is required" }} />
    @@ -95,6 +97,7 @@ const Page = () => { name="endDate" dateTimeType="dateTime" formControl={formControl} + validators={{ required: "Picking an end date is required" }} />
    From 574ace793c5218624c7635c31962a47f745e838f Mon Sep 17 00:00:00 2001 From: Zacgoose <107489668+Zacgoose@users.noreply.github.com> Date: Wed, 14 May 2025 22:41:56 +0800 Subject: [PATCH 0644/1184] Update backup.js Signed-off-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- src/pages/cipp/settings/backup.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/cipp/settings/backup.js b/src/pages/cipp/settings/backup.js index b4f633a74e90..9c81366d5712 100644 --- a/src/pages/cipp/settings/backup.js +++ b/src/pages/cipp/settings/backup.js @@ -135,6 +135,7 @@ const Page = () => { confirmText: "Are you sure you want to restore this backup?", relatedQueryKeys: ["BackupList"], multiPost: false, + hideBulk: true, }, { label: "Download Backup", From f851ca841a41ee6b38bda36f5cdfb9f25c93de31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 14 May 2025 16:56:40 +0200 Subject: [PATCH 0645/1184] update icons import and add permanently delete action --- .../administration/deleted-items/index.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/pages/identity/administration/deleted-items/index.js b/src/pages/identity/administration/deleted-items/index.js index b82213e9e8c9..66d27c8bfd83 100644 --- a/src/pages/identity/administration/deleted-items/index.js +++ b/src/pages/identity/administration/deleted-items/index.js @@ -1,6 +1,6 @@ import { Layout as DashboardLayout } from "/src/layouts/index.js"; import { CippTablePage } from "/src/components/CippComponents/CippTablePage.jsx"; -import RestoreFromTrashIcon from "@mui/icons-material/RestoreFromTrash"; +import { RestoreFromTrash, Warning } from "@mui/icons-material"; const Page = () => { const pageTitle = "Deleted Items"; @@ -9,10 +9,20 @@ const Page = () => { { label: "Restore Object", type: "POST", - icon: , + icon: , url: "/api/ExecRestoreDeleted", - data: { ID: "id" }, - confirmText: "Are you sure you want to restore this user?", + data: { ID: "id", userPrincipalName: "userPrincipalName", displayName: "displayName" }, + confirmText: "Are you sure you want to restore this object?", + multiPost: false, + }, + { + label: "Permanently Delete Object", + type: "POST", + icon: , + url: "/api/RemoveDeletedObject", + data: { ID: "id", userPrincipalName: "userPrincipalName", displayName: "displayName" }, + confirmText: + "Are you sure you want to permanently delete this object? This action cannot be undone.", multiPost: false, }, ]; From 70dfb409c48209561802768a7d0c1dce15172395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Wed, 14 May 2025 17:49:06 +0200 Subject: [PATCH 0646/1184] Enhance user deletion logging --- src/components/CippComponents/CippUserActions.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippUserActions.jsx b/src/components/CippComponents/CippUserActions.jsx index 4b0f5fe1b6c9..1f7dea46433e 100644 --- a/src/components/CippComponents/CippUserActions.jsx +++ b/src/components/CippComponents/CippUserActions.jsx @@ -156,7 +156,7 @@ export const CippUserActions = () => { url: "/api/ExecSetOoO", data: { userId: "userPrincipalName", - AutoReplyState: { value: "Disabled" } + AutoReplyState: { value: "Disabled" }, }, confirmText: "Are you sure you want to disable the out of office?", multiPost: false, @@ -311,7 +311,7 @@ export const CippUserActions = () => { type: "POST", icon: , url: "/api/RemoveUser", - data: { ID: "id" }, + data: { ID: "id", userPrincipalName: "userPrincipalName" }, confirmText: "Are you sure you want to delete this user?", multiPost: false, }, From 56cfb643343e107b95180b2ecd99db84f9f9b462 Mon Sep 17 00:00:00 2001 From: lsmith090 <47199231+lsmith090@users.noreply.github.com> Date: Wed, 14 May 2025 13:34:01 -0400 Subject: [PATCH 0647/1184] fix validators prop --- src/components/CippComponents/CippCustomVariables.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CippComponents/CippCustomVariables.jsx b/src/components/CippComponents/CippCustomVariables.jsx index ce27670a9aed..0f75743a8029 100644 --- a/src/components/CippComponents/CippCustomVariables.jsx +++ b/src/components/CippComponents/CippCustomVariables.jsx @@ -50,7 +50,7 @@ const CippCustomVariables = ({ id }) => { label: "Variable Name", placeholder: "Enter the key for the custom variable.", required: true, - validators: validateVariableName, + validators: { validate: validateVariableName }, }, { type: "textField", @@ -134,7 +134,7 @@ const CippCustomVariables = ({ id }) => { label: "Variable Name", placeholder: "Enter the name for the custom variable without %.", required: true, - validators: validateVariableName, + validators: { validate: validateVariableName }, }, { type: "textField", From 4b684916a1c1a1408b20d039c9afd4c8e4053700 Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Thu, 15 May 2025 17:14:08 +0800 Subject: [PATCH 0648/1184] Update CippWizardOffboarding.jsx --- src/components/CippWizard/CippWizardOffboarding.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CippWizard/CippWizardOffboarding.jsx b/src/components/CippWizard/CippWizardOffboarding.jsx index 4faeb57318c2..b543618c883e 100644 --- a/src/components/CippWizard/CippWizardOffboarding.jsx +++ b/src/components/CippWizard/CippWizardOffboarding.jsx @@ -277,7 +277,7 @@ export const CippWizardOffboarding = (props) => { {showAlert && ( - You have selected more than 3 users. This offboarding must be scheduled. + You have selected more than 2 users. This offboarding must be scheduled. )} From 89f371738d229fcc644bda5f4965ad60bafb7849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 15 May 2025 18:29:48 +0200 Subject: [PATCH 0649/1184] feat:Add action to set max send/receive size for mailboxes --- .../CippComponents/CippExchangeActions.jsx | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/components/CippComponents/CippExchangeActions.jsx b/src/components/CippComponents/CippExchangeActions.jsx index b947a19603fa..cbe8f656e633 100644 --- a/src/components/CippComponents/CippExchangeActions.jsx +++ b/src/components/CippComponents/CippExchangeActions.jsx @@ -15,6 +15,7 @@ import { NotificationImportant, DataUsage, MailLock, + SettingsEthernet, } from "@mui/icons-material"; export const CippExchangeActions = () => { @@ -219,6 +220,28 @@ export const CippExchangeActions = () => { }, ], }, + { + label: "Set Max Send/Receive Size", + type: "POST", + url: "/api/ExecSetMailboxEmailSize", + data: { UPN: "UPN", id: "ExternalDirectoryObjectId" }, + confirmText: "Enter a size in from 1 to 150. Leave blank to not change.", + icon: , + fields: [ + { + label: "Send Size(MB)", + name: "maxSendSize", + type: "number", + placeholder: "e.g. 35", + }, + { + label: "Receive Size(MB)", + name: "maxReceiveSize", + type: "number", + placeholder: "e.g. 36", + }, + ], + }, { label: "Set Send Quota", type: "POST", From 8876672e9bc82636ec4c56e4f2ed4acfd40ab77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Thu, 15 May 2025 23:35:34 +0200 Subject: [PATCH 0650/1184] Feat: Add "Change Primary User" action to Intune device management --- src/pages/endpoint/MEM/devices/index.js | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/pages/endpoint/MEM/devices/index.js b/src/pages/endpoint/MEM/devices/index.js index 17197aff1e9b..e3a66509ea79 100644 --- a/src/pages/endpoint/MEM/devices/index.js +++ b/src/pages/endpoint/MEM/devices/index.js @@ -15,6 +15,7 @@ import { Archive, AutoMode, Recycling, + ManageAccounts, } from "@mui/icons-material"; const Page = () => { @@ -31,6 +32,43 @@ const Page = () => { multiPost: false, external: true, }, + { + label: "Change Primary User", + type: "POST", + icon: , + url: "/api/ExecDeviceAction", + data: { + GUID: "id", + Action: "!users", + }, + fields: [ + { + type: "autoComplete", + name: "user", + label: "Select User", + multiple: false, + creatable: false, + api: { + url: "/api/ListGraphRequest", + data: { + Endpoint: "users", + $select: "id,displayName,userPrincipalName", + $top: 999, + $count: true, + }, + queryKey: "ListUsersAutoComplete", + dataKey: "Results", + labelField: (user) => `${user.displayName} (${user.userPrincipalName})`, + valueField: "id", + addedField: { + userPrincipalName: "userPrincipalName", + }, + showRefresh: true, + }, + }, + ], + confirmText: "Select the User to set as the primary user for this device", + }, { label: "Sync Device", type: "POST", From 77bffa9a58737d14f89e96317fca765a3a8794fd Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 16 May 2025 02:08:27 +0200 Subject: [PATCH 0651/1184] MSAL magic --- .../CippComponents/CIPPM365OAuthButton.js | 469 ++++++++++++++++++ .../CippWizard/CIPPDeploymentStep.js | 69 +-- .../CippWizard/CIPPDeploymentUpdateTokens.js | 57 +++ src/pages/onboardingv2.js | 107 ++++ 4 files changed, 636 insertions(+), 66 deletions(-) create mode 100644 src/components/CippComponents/CIPPM365OAuthButton.js create mode 100644 src/components/CippWizard/CIPPDeploymentUpdateTokens.js create mode 100644 src/pages/onboardingv2.js diff --git a/src/components/CippComponents/CIPPM365OAuthButton.js b/src/components/CippComponents/CIPPM365OAuthButton.js new file mode 100644 index 000000000000..9d162aba8971 --- /dev/null +++ b/src/components/CippComponents/CIPPM365OAuthButton.js @@ -0,0 +1,469 @@ +import { useState } from "react"; +import { + Alert, + Button, + Stack, + Typography, + CircularProgress, + Box, +} from "@mui/material"; +import { ApiGetCall } from "../../api/ApiCall"; + +/** + * CIPPM365OAuthButton - A reusable button component for Microsoft 365 OAuth authentication + * + * @param {Object} props - Component props + * @param {Function} props.onAuthSuccess - Callback function called when authentication is successful with token data + * @param {Function} props.onAuthError - Callback function called when authentication fails with error data + * @param {string} props.buttonText - Text to display on the button (default: "Login with Microsoft") + * @param {boolean} props.showResults - Whether to show authentication results in the component (default: true) + * @param {string} props.scope - OAuth scope to request (default: "https://graph.microsoft.com/.default offline_access profile openid") + * @returns {JSX.Element} The CIPPM365OAuthButton component + */ +export const CIPPM365OAuthButton = ({ + onAuthSuccess, + onAuthError, + buttonText = "Login with Microsoft", + showResults = true, + scope = "https://graph.microsoft.com/.default offline_access profile openid", +}) => { + const [authInProgress, setAuthInProgress] = useState(false); + const [authError, setAuthError] = useState(null); + const [tokens, setTokens] = useState({ + accessToken: null, + refreshToken: null, + accessTokenExpiresOn: null, + refreshTokenExpiresOn: null, + username: null, + tenantId: null, + onmicrosoftDomain: null, + }); + + // Get application ID information + const appId = ApiGetCall({ + url: `/api/ExecListAppId`, + queryKey: `ExecListAppId`, + waiting: true, + }); + + // Handle closing the error + const handleCloseError = () => { + setAuthError(null); + }; + + // MSAL-like authentication function + const handleMsalAuthentication = () => { + // Clear previous authentication state when starting a new authentication + setAuthInProgress(true); + setAuthError(null); + setTokens({ + accessToken: null, + refreshToken: null, + accessTokenExpiresOn: null, + refreshTokenExpiresOn: null, + username: null, + tenantId: null, + onmicrosoftDomain: null, + }); + + // Generate MSAL-like authentication parameters + const msalConfig = { + auth: { + clientId: appId?.data?.applicationId, + authority: `https://login.microsoftonline.com/common`, + redirectUri: window.location.origin, + }, + }; + + // Define the request object similar to MSAL + const loginRequest = { + scopes: [scope], + }; + + console.log("MSAL Config:", msalConfig); + console.log("Login Request:", loginRequest); + + // Generate PKCE code verifier and challenge + const generateCodeVerifier = () => { + const array = new Uint8Array(32); + window.crypto.getRandomValues(array); + return Array.from(array, (byte) => ("0" + (byte & 0xff).toString(16)).slice(-2)).join(""); + }; + + const base64URLEncode = (str) => { + return btoa(str).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); + }; + + // Generate code verifier for PKCE + const codeVerifier = generateCodeVerifier(); + // In a real implementation, we would hash the code verifier to create the code challenge + // For simplicity, we'll use the same value + const codeChallenge = codeVerifier; + + // Note: We're not storing the code verifier in session storage for security reasons + // Instead, we'll use it directly in the token exchange + + // Create a random state value for security + const state = Math.random().toString(36).substring(2, 15); + + // Create the auth URL with PKCE parameters + const authUrl = + `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?` + + `client_id=${appId?.data?.applicationId}` + + `&response_type=code` + + `&redirect_uri=${encodeURIComponent(window.location.origin)}` + + `&scope=${encodeURIComponent(scope)}` + + `&code_challenge=${codeChallenge}` + + `&code_challenge_method=plain` + + `&state=${state}` + + `&prompt=select_account`; + + console.log("MSAL Auth URL:", authUrl); + + // Open popup for authentication + const width = 500; + const height = 600; + const left = window.screen.width / 2 - width / 2; + const top = window.screen.height / 2 - height / 2; + + const popup = window.open( + authUrl, + "msalAuthPopup", + `width=${width},height=${height},left=${left},top=${top}` + ); + + // Function to actually exchange the authorization code for tokens + const handleAuthorizationCode = async (code, receivedState) => { + // Verify the state parameter matches what we sent (security check) + if (receivedState !== state) { + const errorMessage = "State mismatch in auth response - possible CSRF attack"; + console.error(errorMessage); + const error = { + errorCode: "state_mismatch", + errorMessage: errorMessage, + timestamp: new Date().toISOString(), + }; + setAuthError(error); + if (onAuthError) onAuthError(error); + setAuthInProgress(false); + return; + } + + console.log("Authorization code received:", code); + + try { + // Actually exchange the code for tokens using the token endpoint + console.log("Exchanging authorization code for tokens..."); + + // Prepare the token request + const tokenRequest = { + grant_type: "authorization_code", + client_id: appId?.data?.applicationId, + code: code, + redirect_uri: window.location.origin, + code_verifier: codeVerifier, + }; + + // Make the token request + const tokenResponse = await fetch( + `https://login.microsoftonline.com/common/oauth2/v2.0/token`, + { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: new URLSearchParams(tokenRequest).toString(), + } + ); + + // Parse the token response + const tokenData = await tokenResponse.json(); + + if (tokenResponse.ok) { + // Extract token information + const accessTokenExpiresOn = new Date(Date.now() + tokenData.expires_in * 1000); + // Refresh tokens typically last for 90 days, but this can vary + // For demonstration, we'll set it to 90 days from now + const refreshTokenExpiresOn = new Date(Date.now() + 90 * 24 * 60 * 60 * 1000); + + // Extract information from ID token if available + let username = "unknown user"; + let tenantId = appId?.data?.tenantId || "unknown tenant"; + let onmicrosoftDomain = null; + + if (tokenData.id_token) { + try { + const idTokenPayload = JSON.parse(atob(tokenData.id_token.split(".")[1])); + + // Extract username + username = + idTokenPayload.preferred_username || + idTokenPayload.email || + idTokenPayload.upn || + idTokenPayload.name || + "unknown user"; + + // Extract tenant ID if available in the token + if (idTokenPayload.tid) { + tenantId = idTokenPayload.tid; + } + + // Try to extract onmicrosoft domain from the username or issuer + if (username && username.includes("@") && username.includes(".onmicrosoft.com")) { + onmicrosoftDomain = username.split("@")[1]; + } else if (idTokenPayload.iss) { + const issuerMatch = idTokenPayload.iss.match(/https:\/\/sts\.windows\.net\/([^/]+)\//); + if (issuerMatch && issuerMatch[1]) { + // We have the tenant ID, but not the domain name + // We could potentially make an API call to get the domain, but for now we'll leave it null + } + } + } catch (error) { + console.error("Error parsing ID token:", error); + } + } + + // Create token result object + const tokenResult = { + accessToken: tokenData.access_token, + refreshToken: tokenData.refresh_token, + accessTokenExpiresOn: accessTokenExpiresOn, + refreshTokenExpiresOn: refreshTokenExpiresOn, + username: username, + tenantId: tenantId, + onmicrosoftDomain: onmicrosoftDomain, + }; + + // Store tokens in component state + setTokens(tokenResult); + + // Log only the necessary token information to console + console.log("Access Token:", tokenData.access_token); + console.log("Refresh Token:", tokenData.refresh_token); + + // Call the onAuthSuccess callback if provided + if (onAuthSuccess) onAuthSuccess(tokenResult); + } else { + // Handle token error - display in error box instead of throwing + const error = { + errorCode: tokenData.error || "token_error", + errorMessage: + tokenData.error_description || "Failed to exchange authorization code for tokens", + timestamp: new Date().toISOString(), + }; + setAuthError(error); + if (onAuthError) onAuthError(error); + } + } catch (error) { + console.error("Error exchanging code for tokens:", error); + const errorObj = { + errorCode: "token_exchange_error", + errorMessage: error.message || "Failed to exchange authorization code for tokens", + timestamp: new Date().toISOString(), + }; + setAuthError(errorObj); + if (onAuthError) onAuthError(errorObj); + } finally { + // Close the popup window if it's still open + if (popup && !popup.closed) { + popup.close(); + } + + // Update UI state + setAuthInProgress(false); + } + }; + + // Monitor for the redirect with the authorization code + // This is what MSAL does internally + const checkPopupLocation = setInterval(() => { + if (!popup || popup.closed) { + clearInterval(checkPopupLocation); + + // If authentication is still in progress when popup closes, it's an error + if (authInProgress) { + const errorMessage = "Authentication was cancelled. Please try again."; + console.error(errorMessage); + const error = { + errorCode: "user_cancelled", + errorMessage: errorMessage, + timestamp: new Date().toISOString(), + }; + setAuthError(error); + if (onAuthError) onAuthError(error); + + // Ensure we're not showing any previous success state + setTokens({ + accessToken: null, + refreshToken: null, + accessTokenExpiresOn: null, + refreshTokenExpiresOn: null, + username: null, + tenantId: null, + onmicrosoftDomain: null, + }); + } + + setAuthInProgress(false); + return; + } + + try { + // Try to access the popup location to check for the authorization code + const currentUrl = popup.location.href; + + // Check if the URL contains a code parameter (authorization code) + if (currentUrl.includes("code=") && currentUrl.includes("state=")) { + clearInterval(checkPopupLocation); + + console.log("Detected authorization code in URL:", currentUrl); + + // Parse the URL to extract the code and state + const urlParams = new URLSearchParams(popup.location.search); + const code = urlParams.get("code"); + const receivedState = urlParams.get("state"); + + // Process the authorization code + handleAuthorizationCode(code, receivedState); + } + + // Check for error in the URL + if (currentUrl.includes("error=")) { + clearInterval(checkPopupLocation); + + console.error("Detected error in authentication response:", currentUrl); + + // Parse the URL to extract the error details + const urlParams = new URLSearchParams(popup.location.search); + const errorCode = urlParams.get("error"); + const errorDescription = urlParams.get("error_description"); + + // Set the error state + const error = { + errorCode: errorCode, + errorMessage: errorDescription || "Unknown authentication error", + timestamp: new Date().toISOString(), + }; + setAuthError(error); + if (onAuthError) onAuthError(error); + + // Close the popup + popup.close(); + setAuthInProgress(false); + } + } catch (error) { + // This will throw an error when the popup is on a different domain + // due to cross-origin restrictions, which is normal during auth flow + // Just continue monitoring + } + }, 500); + + // Also monitor for popup closing as a fallback + const checkPopupClosed = setInterval(() => { + if (popup.closed) { + clearInterval(checkPopupClosed); + clearInterval(checkPopupLocation); + + // If authentication is still in progress when popup closes, it's an error + if (authInProgress) { + const errorMessage = "Authentication was cancelled. Please try again."; + console.error(errorMessage); + const error = { + errorCode: "user_cancelled", + errorMessage: errorMessage, + timestamp: new Date().toISOString(), + }; + setAuthError(error); + if (onAuthError) onAuthError(error); + + // Ensure we're not showing any previous success state + setTokens({ + accessToken: null, + refreshToken: null, + accessTokenExpiresOn: null, + refreshTokenExpiresOn: null, + username: null, + tenantId: null, + onmicrosoftDomain: null, + }); + } + + setAuthInProgress(false); + } + }, 1000); + }; + + return ( +
    + + + {!appId.isLoading && + !/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( + appId?.data?.applicationId + ) && ( + + The Application ID is not valid. Please check your configuration. + + ) + } + + {showResults && ( + + {tokens.accessToken ? ( + + Authentication Successful + + You've successfully refreshed your token. The account you're using for authentication + is: {tokens.username} + + + Tenant ID: {tokens.tenantId} + {tokens.onmicrosoftDomain && ( + <> | Domain: {tokens.onmicrosoftDomain} + )} + + + Refresh token expires: {tokens.refreshTokenExpiresOn?.toLocaleString()} + + + ) : authError ? ( + + Authentication Error: {authError.errorCode} + {authError.errorMessage} + + Time: {authError.timestamp} + + + + + + ) : null} + + )} +
    + ); +}; + +export default CIPPM365OAuthButton; \ No newline at end of file diff --git a/src/components/CippWizard/CIPPDeploymentStep.js b/src/components/CippWizard/CIPPDeploymentStep.js index 070b38811dbf..6ecb6d560a4e 100644 --- a/src/components/CippWizard/CIPPDeploymentStep.js +++ b/src/components/CippWizard/CIPPDeploymentStep.js @@ -16,10 +16,11 @@ import { CippWizardStepButtons } from "./CippWizardStepButtons"; import { ApiGetCall } from "../../api/ApiCall"; import CippButtonCard from "../CippCards/CippButtonCard"; import { CippCopyToClipBoard } from "../CippComponents/CippCopyToClipboard"; -import { CheckCircle, OpenInNew, Sync } from "@mui/icons-material"; +import { CheckCircle } from "@mui/icons-material"; import CippPermissionCheck from "../CippSettings/CippPermissionCheck"; import { useQueryClient } from "@tanstack/react-query"; import { CippApiResults } from "../CippComponents/CippApiResults"; +import { CIPPDeploymentUpdateTokens } from "./CIPPDeploymentUpdateTokens"; export const CippDeploymentStep = (props) => { const queryClient = useQueryClient(); @@ -40,11 +41,6 @@ export const CippDeploymentStep = (props) => { queryKey: `checkSetupStep${pollingStep}`, waiting: !pollingStep, }); - const appId = ApiGetCall({ - url: `/api/ExecListAppId`, - queryKey: `ExecListAppId`, - waiting: true, - }); useEffect(() => { if ( startSetupApi.data && @@ -237,66 +233,7 @@ export const CippDeploymentStep = (props) => { )} {values.selectedOption === "UpdateTokens" && ( - - Update Tokens - - {appId.isLoading ? ( - - ) : ( - - - - )} - - - } - CardButton={ - <> - - - {!/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( - appId?.data?.applicationId - ) && ( - - The Application ID is not valid. Please return to the first page of the SAM - wizard and use the Manual . - - )} - - } - > - - Click the button below to refresh your token. - - {formControl.setValue("noSubmitButton", true)} - - + )} {values.selectedOption === "Manual" && ( diff --git a/src/components/CippWizard/CIPPDeploymentUpdateTokens.js b/src/components/CippWizard/CIPPDeploymentUpdateTokens.js new file mode 100644 index 000000000000..099fcef8a39a --- /dev/null +++ b/src/components/CippWizard/CIPPDeploymentUpdateTokens.js @@ -0,0 +1,57 @@ +import { useState } from "react"; +import { Stack, Typography, CircularProgress, SvgIcon, Box } from "@mui/material"; +import { CheckCircle } from "@mui/icons-material"; +import CippButtonCard from "../CippCards/CippButtonCard"; +import { ApiGetCall } from "../../api/ApiCall"; +import { CippApiResults } from "../CippComponents/CippApiResults"; +import { CIPPM365OAuthButton } from "../CippComponents/CIPPM365OAuthButton"; + +export const CIPPDeploymentUpdateTokens = ({ formControl }) => { + const values = formControl.getValues(); + const [tokens, setTokens] = useState(null); + + // Get application ID information for the card header + const appId = ApiGetCall({ + url: `/api/ExecListAppId`, + queryKey: `ExecListAppId`, + waiting: true, + }); + + // Handle successful authentication + const handleAuthSuccess = (tokenData) => { + setTokens(tokenData); + console.log("Token data received:", tokenData); + }; + + return ( + + Update Tokens (MSAL Style) + + {appId.isLoading ? ( + + ) : ( + + + + )} + + + } + CardButton={ + + } + > + + Click the button to refresh the Graph token for your tenants. We should write some text here + for replacing token for partner tenant vs client tenant. + + {formControl.setValue("noSubmitButton", true)} + + + ); +}; + +export default CIPPDeploymentUpdateTokens; diff --git a/src/pages/onboardingv2.js b/src/pages/onboardingv2.js new file mode 100644 index 000000000000..4de309be07ae --- /dev/null +++ b/src/pages/onboardingv2.js @@ -0,0 +1,107 @@ +import { Layout as DashboardLayout } from "../layouts/index.js"; +import { CippWizardConfirmation } from "../components/CippWizard/CippWizardConfirmation.js"; +import { CippDeploymentStep } from "../components/CippWizard/CIPPDeploymentStep.js"; +import CippWizardPage from "../components/CippWizard/CippWizardPage.jsx"; +import { CippWizardOptionsList } from "../components/CippWizard/CippWizardOptionsList.jsx"; +import { BuildingOfficeIcon, CloudIcon, CpuChipIcon } from "@heroicons/react/24/outline"; + +const Page = () => { + const steps = [ + { + title: "Step 1", + description: "Onboarding", + component: CippWizardOptionsList, + componentProps: { + title: "Select your setup method", + subtext: `This wizard will guide you through setting up CIPPs access to your client tenants. If this is your first time setting up CIPP you will want to choose the option "Create application for me and connect to my tenants",`, + valuesKey: "SyncTool", + options: [ + { + description: + "Choose this option if this is your first setup, or if you'd like to redo the previous setup.", + icon: , + label: "First Setup", + value: "FirstSetup", + }, + { + description: + "Choose this option if you would like to add a tenant to your environment.", + icon: , + label: "Add a tenant", + value: "AddTenant", + }, + { + description: + "Choose this option if you want to setup which application registration is used to connect to your tenants.", + icon: , + label: "Create a new application registration for me and connect to my tenants", + value: "CreateApp", + }, + { + description: "I would like to refresh my token or replace the account I've used.", + icon: , + label: "Refresh Tokens for existing application registration", + value: "UpdateTokens", + }, + { + description: + "I have an existing application and would like to manually enter my token, or update them. This is only recommended for advanced users.", + icon: , + label: "Manually enter credentials", + value: "Manual", + }, + ], + }, + }, + { + title: "Step 2", + description: "Application", + component: CippDeploymentStep, + }, + { + title: "Step 3", + description: "Tenants", + component: CippDeploymentStep, + }, + { + title: "Step 4", + description: "Baselines", + component: CippDeploymentStep, + }, + { + title: "Step 5", + description: "Integrations", + component: CippDeploymentStep, + }, + { + title: "Step 6", + description: "Notifications", + component: CippDeploymentStep, + }, + { + title: "Step 7", + description: "Alerts", + component: CippDeploymentStep, + }, + { + title: "Step 8", + description: "Confirmation", + component: CippWizardConfirmation, + }, + ]; + + return ( + <> + + + ); +}; + +Page.getLayout = (page) => {page}; + +export default Page; From 1a50daf3164e59da7274f8ee5cdfa527c0a3c3b4 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Fri, 16 May 2025 02:42:03 +0200 Subject: [PATCH 0652/1184] Experimentation with new MSAL and creation --- .../CippComponents/CIPPDeviceCodeButton.js | 253 ++++++++++++++ .../CippComponents/CIPPM365OAuthButton.js | 326 +++++++++++++----- .../CippWizard/CIPPDeploymentUpdateTokens.js | 90 +++-- 3 files changed, 566 insertions(+), 103 deletions(-) create mode 100644 src/components/CippComponents/CIPPDeviceCodeButton.js diff --git a/src/components/CippComponents/CIPPDeviceCodeButton.js b/src/components/CippComponents/CIPPDeviceCodeButton.js new file mode 100644 index 000000000000..e262b69c7912 --- /dev/null +++ b/src/components/CippComponents/CIPPDeviceCodeButton.js @@ -0,0 +1,253 @@ +import { useState, useEffect } from "react"; +import { + Alert, + Button, + Stack, + Typography, + CircularProgress, + Box, +} from "@mui/material"; +import { ApiGetCall, ApiPostCall } from "../../api/ApiCall"; + +/** + * CIPPDeviceCodeButton - A button component for Microsoft 365 OAuth authentication using device code flow + * + * @param {Object} props - Component props + * @param {Function} props.onAuthSuccess - Callback function called when authentication is successful with token data + * @param {Function} props.onAuthError - Callback function called when authentication fails with error data + * @param {string} props.buttonText - Text to display on the button (default: "Login with Device Code") + * @param {boolean} props.showResults - Whether to show authentication results in the component (default: true) + * @returns {JSX.Element} The CIPPDeviceCodeButton component + */ +export const CIPPDeviceCodeButton = ({ + onAuthSuccess, + onAuthError, + buttonText = "Login with Device Code", + showResults = true, +}) => { + const [authInProgress, setAuthInProgress] = useState(false); + const [authError, setAuthError] = useState(null); + const [deviceCodeInfo, setDeviceCodeInfo] = useState(null); + const [currentStep, setCurrentStep] = useState(0); + const [pollInterval, setPollInterval] = useState(null); + const [tokens, setTokens] = useState({ + accessToken: null, + refreshToken: null, + accessTokenExpiresOn: null, + refreshTokenExpiresOn: null, + username: null, + tenantId: null, + onmicrosoftDomain: null, + }); + + // Get application ID information from API + const appIdInfo = ApiGetCall({ + url: `/api/ExecListAppId`, + queryKey: `ExecListAppId`, + waiting: true, + }); + + // Handle closing the error + const handleCloseError = () => { + setAuthError(null); + }; + + // Clear polling interval when component unmounts + useEffect(() => { + return () => { + if (pollInterval) { + clearInterval(pollInterval); + } + }; + }, [pollInterval]); + + // Start device code authentication + const startDeviceCodeAuth = async () => { + try { + setAuthInProgress(true); + setAuthError(null); + setDeviceCodeInfo(null); + setCurrentStep(1); + + // Call the API to start device code flow + const response = await fetch(`/api/ExecSAMSetup?CreateSAM=true`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }); + + const data = await response.json(); + + if (response.ok && data.code) { + // Store device code info + setDeviceCodeInfo({ + user_code: data.code, + verification_uri: data.url, + expires_in: 900, // Default to 15 minutes if not provided + }); + + // Start polling for token + const interval = setInterval(checkAuthStatus, 5000); + setPollInterval(interval); + } else { + // Error getting device code + setAuthError({ + errorCode: "device_code_error", + errorMessage: data.message || "Failed to get device code", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + if (onAuthError) onAuthError(error); + } + } catch (error) { + console.error("Error starting device code authentication:", error); + setAuthError({ + errorCode: "device_code_error", + errorMessage: error.message || "An error occurred during device code authentication", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + if (onAuthError) onAuthError(error); + } + }; + + // Check authentication status + const checkAuthStatus = async () => { + try { + // Call the API to check auth status + const response = await fetch(`/api/ExecSAMSetup?CheckSetupProcess=true&step=1`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }); + + const data = await response.json(); + + if (response.ok) { + if (data.step === 2) { + // Authentication successful + clearInterval(pollInterval); + setPollInterval(null); + + // Process token data + const tokenData = { + accessToken: "Successfully authenticated", + refreshToken: "Token stored on server", + accessTokenExpiresOn: new Date(Date.now() + 3600 * 1000), // 1 hour from now + refreshTokenExpiresOn: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000), // 90 days from now + username: "authenticated user", + tenantId: data.tenantId || "unknown", + onmicrosoftDomain: null, + }; + + // Store tokens in component state + setTokens(tokenData); + setDeviceCodeInfo(null); + setCurrentStep(2); + + // Call the onAuthSuccess callback if provided + if (onAuthSuccess) onAuthSuccess(tokenData); + + // Update UI state + setAuthInProgress(false); + } + } else { + // Error checking auth status + clearInterval(pollInterval); + setPollInterval(null); + + setAuthError({ + errorCode: "auth_status_error", + errorMessage: data.message || "Failed to check authentication status", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + if (onAuthError) onAuthError({ + errorCode: "auth_status_error", + errorMessage: data.message || "Failed to check authentication status", + timestamp: new Date().toISOString(), + }); + } + } catch (error) { + console.error("Error checking auth status:", error); + // Don't stop polling on transient errors + } + }; + + return ( +
    + + + {!appIdInfo.isLoading && + !appIdInfo?.data?.applicationId && ( + + The Application ID is not valid. Please check your configuration. + + ) + } + + {showResults && ( + + {deviceCodeInfo && authInProgress ? ( + + Device Code Authentication + + To sign in, use a web browser to open the page {deviceCodeInfo.verification_uri} and enter the code {deviceCodeInfo.user_code} to authenticate. + + + Code expires in {Math.round(deviceCodeInfo.expires_in / 60)} minutes + + + ) : tokens.accessToken ? ( + + Authentication Successful + + You've successfully refreshed your token using device code flow. + + {tokens.tenantId && ( + + Tenant ID: {tokens.tenantId} + + )} + + ) : authError ? ( + + Authentication Error: {authError.errorCode} + {authError.errorMessage} + + Time: {authError.timestamp} + + + + + + ) : null} + + )} +
    + ); +}; + +export default CIPPDeviceCodeButton; \ No newline at end of file diff --git a/src/components/CippComponents/CIPPM365OAuthButton.js b/src/components/CippComponents/CIPPM365OAuthButton.js index 9d162aba8971..9c1e3ae58675 100644 --- a/src/components/CippComponents/CIPPM365OAuthButton.js +++ b/src/components/CippComponents/CIPPM365OAuthButton.js @@ -8,16 +8,19 @@ import { Box, } from "@mui/material"; import { ApiGetCall } from "../../api/ApiCall"; +import { CippCopyToClipBoard } from "./CippCopyToClipboard"; /** * CIPPM365OAuthButton - A reusable button component for Microsoft 365 OAuth authentication - * + * * @param {Object} props - Component props * @param {Function} props.onAuthSuccess - Callback function called when authentication is successful with token data * @param {Function} props.onAuthError - Callback function called when authentication fails with error data * @param {string} props.buttonText - Text to display on the button (default: "Login with Microsoft") * @param {boolean} props.showResults - Whether to show authentication results in the component (default: true) * @param {string} props.scope - OAuth scope to request (default: "https://graph.microsoft.com/.default offline_access profile openid") + * @param {boolean} props.useDeviceCode - Whether to use device code flow instead of popup (default: false) + * @param {string} props.applicationId - Application ID to use for authentication (default: uses the one from API) * @returns {JSX.Element} The CIPPM365OAuthButton component */ export const CIPPM365OAuthButton = ({ @@ -26,9 +29,12 @@ export const CIPPM365OAuthButton = ({ buttonText = "Login with Microsoft", showResults = true, scope = "https://graph.microsoft.com/.default offline_access profile openid", + useDeviceCode = false, + applicationId = null, }) => { const [authInProgress, setAuthInProgress] = useState(false); const [authError, setAuthError] = useState(null); + const [deviceCodeInfo, setDeviceCodeInfo] = useState(null); const [tokens, setTokens] = useState({ accessToken: null, refreshToken: null, @@ -39,8 +45,8 @@ export const CIPPM365OAuthButton = ({ onmicrosoftDomain: null, }); - // Get application ID information - const appId = ApiGetCall({ + // Get application ID information from API if not provided + const appIdInfo = ApiGetCall({ url: `/api/ExecListAppId`, queryKey: `ExecListAppId`, waiting: true, @@ -51,6 +57,216 @@ export const CIPPM365OAuthButton = ({ setAuthError(null); }; + // Device code authentication function + const handleDeviceCodeAuthentication = async () => { + setAuthInProgress(true); + setAuthError(null); + setDeviceCodeInfo(null); + setTokens({ + accessToken: null, + refreshToken: null, + accessTokenExpiresOn: null, + refreshTokenExpiresOn: null, + username: null, + tenantId: null, + onmicrosoftDomain: null, + }); + + try { + // Get the application ID to use + const appId = applicationId || appIdInfo?.data?.applicationId || "1b730954-1685-4b74-9bfd-dac224a7b894"; // Default to MS Graph Explorer app ID + + // Request device code from our API endpoint + const deviceCodeResponse = await fetch(`/api/ExecDeviceCodeLogon?operation=getDeviceCode&clientId=${appId}&scope=${encodeURIComponent(scope)}`); + const deviceCodeData = await deviceCodeResponse.json(); + + if (deviceCodeResponse.ok && deviceCodeData.user_code) { + // Store device code info + setDeviceCodeInfo(deviceCodeData); + + // Open popup to device login page + const width = 500; + const height = 600; + const left = window.screen.width / 2 - width / 2; + const top = window.screen.height / 2 - height / 2; + + const popup = window.open( + "https://microsoft.com/devicelogin", + "deviceLoginPopup", + `width=${width},height=${height},left=${left},top=${top}` + ); + + // Start polling for token + const pollInterval = deviceCodeData.interval || 5; + const expiresIn = deviceCodeData.expires_in || 900; + const startTime = Date.now(); + + const pollForToken = async () => { + // Check if popup was closed + if (popup && popup.closed) { + clearInterval(checkPopupClosed); + setAuthError({ + errorCode: "user_cancelled", + errorMessage: "Authentication was cancelled. Please try again.", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + return; + } + + // Check if we've exceeded the expiration time + if (Date.now() - startTime >= expiresIn * 1000) { + if (popup && !popup.closed) { + popup.close(); + } + setAuthError({ + errorCode: "timeout", + errorMessage: "Device code authentication timed out", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + return; + } + + try { + // Poll for token using our API endpoint + const tokenResponse = await fetch(`/api/ExecDeviceCodeLogon?operation=checkToken&clientId=${appId}&deviceCode=${deviceCodeData.device_code}`); + const tokenData = await tokenResponse.json(); + + if (tokenResponse.ok && tokenData.status === "success") { + // Successfully got token + if (popup && !popup.closed) { + popup.close(); + } + handleTokenResponse(tokenData); + } else if (tokenData.error === 'authorization_pending' || tokenData.status === "pending") { + // User hasn't completed authentication yet, continue polling + setTimeout(pollForToken, pollInterval * 1000); + } else if (tokenData.error === 'slow_down') { + // Server asking us to slow down polling + setTimeout(pollForToken, (pollInterval + 5) * 1000); + } else { + // Other error + if (popup && !popup.closed) { + popup.close(); + } + setAuthError({ + errorCode: tokenData.error || "token_error", + errorMessage: tokenData.error_description || "Failed to get token", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + } + } catch (error) { + console.error("Error polling for token:", error); + setTimeout(pollForToken, pollInterval * 1000); + } + }; + + // Also monitor for popup closing as a fallback + const checkPopupClosed = setInterval(() => { + if (popup && popup.closed) { + clearInterval(checkPopupClosed); + setAuthInProgress(false); + setAuthError({ + errorCode: "user_cancelled", + errorMessage: "Authentication was cancelled. Please try again.", + timestamp: new Date().toISOString(), + }); + } + }, 1000); + + // Start polling + setTimeout(pollForToken, pollInterval * 1000); + } else { + // Error getting device code + setAuthError({ + errorCode: deviceCodeData.error || "device_code_error", + errorMessage: deviceCodeData.error_description || "Failed to get device code", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + } + } catch (error) { + console.error("Error in device code authentication:", error); + setAuthError({ + errorCode: "device_code_error", + errorMessage: error.message || "An error occurred during device code authentication", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + } + }; + + // Process token response (common for both auth methods) + const handleTokenResponse = (tokenData) => { + // Extract token information + const accessTokenExpiresOn = new Date(Date.now() + tokenData.expires_in * 1000); + // Refresh tokens typically last for 90 days, but this can vary + const refreshTokenExpiresOn = new Date(Date.now() + 90 * 24 * 60 * 60 * 1000); + + // Extract information from ID token if available + let username = "unknown user"; + let tenantId = "unknown tenant"; + let onmicrosoftDomain = null; + + if (tokenData.id_token) { + try { + const idTokenPayload = JSON.parse(atob(tokenData.id_token.split(".")[1])); + + // Extract username + username = + idTokenPayload.preferred_username || + idTokenPayload.email || + idTokenPayload.upn || + idTokenPayload.name || + "unknown user"; + + // Extract tenant ID if available in the token + if (idTokenPayload.tid) { + tenantId = idTokenPayload.tid; + } + + // Try to extract onmicrosoft domain from the username or issuer + if (username && username.includes("@") && username.includes(".onmicrosoft.com")) { + onmicrosoftDomain = username.split("@")[1]; + } else if (idTokenPayload.iss) { + const issuerMatch = idTokenPayload.iss.match(/https:\/\/sts\.windows\.net\/([^/]+)\//); + if (issuerMatch && issuerMatch[1]) { + // We have the tenant ID, but not the domain name + } + } + } catch (error) { + console.error("Error parsing ID token:", error); + } + } + + // Create token result object + const tokenResult = { + accessToken: tokenData.access_token, + refreshToken: tokenData.refresh_token, + accessTokenExpiresOn: accessTokenExpiresOn, + refreshTokenExpiresOn: refreshTokenExpiresOn, + username: username, + tenantId: tenantId, + onmicrosoftDomain: onmicrosoftDomain, + }; + + // Store tokens in component state + setTokens(tokenResult); + setDeviceCodeInfo(null); + + // Log only the necessary token information to console + console.log("Access Token:", tokenData.access_token); + console.log("Refresh Token:", tokenData.refresh_token); + + // Call the onAuthSuccess callback if provided + if (onAuthSuccess) onAuthSuccess(tokenResult); + + // Update UI state + setAuthInProgress(false); + }; + // MSAL-like authentication function const handleMsalAuthentication = () => { // Clear previous authentication state when starting a new authentication @@ -66,10 +282,13 @@ export const CIPPM365OAuthButton = ({ onmicrosoftDomain: null, }); + // Get the application ID to use + const appId = applicationId || appIdInfo?.data?.applicationId; + // Generate MSAL-like authentication parameters const msalConfig = { auth: { - clientId: appId?.data?.applicationId, + clientId: appId, authority: `https://login.microsoftonline.com/common`, redirectUri: window.location.origin, }, @@ -109,7 +328,7 @@ export const CIPPM365OAuthButton = ({ // Create the auth URL with PKCE parameters const authUrl = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?` + - `client_id=${appId?.data?.applicationId}` + + `client_id=${appId}` + `&response_type=code` + `&redirect_uri=${encodeURIComponent(window.location.origin)}` + `&scope=${encodeURIComponent(scope)}` + @@ -158,7 +377,7 @@ export const CIPPM365OAuthButton = ({ // Prepare the token request const tokenRequest = { grant_type: "authorization_code", - client_id: appId?.data?.applicationId, + client_id: appId, code: code, redirect_uri: window.location.origin, code_verifier: codeVerifier, @@ -180,69 +399,7 @@ export const CIPPM365OAuthButton = ({ const tokenData = await tokenResponse.json(); if (tokenResponse.ok) { - // Extract token information - const accessTokenExpiresOn = new Date(Date.now() + tokenData.expires_in * 1000); - // Refresh tokens typically last for 90 days, but this can vary - // For demonstration, we'll set it to 90 days from now - const refreshTokenExpiresOn = new Date(Date.now() + 90 * 24 * 60 * 60 * 1000); - - // Extract information from ID token if available - let username = "unknown user"; - let tenantId = appId?.data?.tenantId || "unknown tenant"; - let onmicrosoftDomain = null; - - if (tokenData.id_token) { - try { - const idTokenPayload = JSON.parse(atob(tokenData.id_token.split(".")[1])); - - // Extract username - username = - idTokenPayload.preferred_username || - idTokenPayload.email || - idTokenPayload.upn || - idTokenPayload.name || - "unknown user"; - - // Extract tenant ID if available in the token - if (idTokenPayload.tid) { - tenantId = idTokenPayload.tid; - } - - // Try to extract onmicrosoft domain from the username or issuer - if (username && username.includes("@") && username.includes(".onmicrosoft.com")) { - onmicrosoftDomain = username.split("@")[1]; - } else if (idTokenPayload.iss) { - const issuerMatch = idTokenPayload.iss.match(/https:\/\/sts\.windows\.net\/([^/]+)\//); - if (issuerMatch && issuerMatch[1]) { - // We have the tenant ID, but not the domain name - // We could potentially make an API call to get the domain, but for now we'll leave it null - } - } - } catch (error) { - console.error("Error parsing ID token:", error); - } - } - - // Create token result object - const tokenResult = { - accessToken: tokenData.access_token, - refreshToken: tokenData.refresh_token, - accessTokenExpiresOn: accessTokenExpiresOn, - refreshTokenExpiresOn: refreshTokenExpiresOn, - username: username, - tenantId: tenantId, - onmicrosoftDomain: onmicrosoftDomain, - }; - - // Store tokens in component state - setTokens(tokenResult); - - // Log only the necessary token information to console - console.log("Access Token:", tokenData.access_token); - console.log("Refresh Token:", tokenData.refresh_token); - - // Call the onAuthSuccess callback if provided - if (onAuthSuccess) onAuthSuccess(tokenResult); + handleTokenResponse(tokenData); } else { // Handle token error - display in error box instead of throwing const error = { @@ -398,13 +555,13 @@ export const CIPPM365OAuthButton = ({ - {!appId.isLoading && + {!applicationId && !appIdInfo.isLoading && !/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( - appId?.data?.applicationId + appIdInfo?.data?.applicationId ) && ( The Application ID is not valid. Please check your configuration. @@ -429,7 +586,22 @@ export const CIPPM365OAuthButton = ({ {showResults && ( - {tokens.accessToken ? ( + {deviceCodeInfo && authInProgress ? ( + + Device Code Authentication + + A popup window has been opened to microsoft.com/devicelogin. + Enter this code to authenticate: + + + If the popup was blocked or you closed it, you can also go to microsoft.com/devicelogin manually + and enter the code shown above. + + + Code expires in {Math.round(deviceCodeInfo.expires_in / 60)} minutes + + + ) : tokens.accessToken ? ( Authentication Successful diff --git a/src/components/CippWizard/CIPPDeploymentUpdateTokens.js b/src/components/CippWizard/CIPPDeploymentUpdateTokens.js index 099fcef8a39a..14f57cf99202 100644 --- a/src/components/CippWizard/CIPPDeploymentUpdateTokens.js +++ b/src/components/CippWizard/CIPPDeploymentUpdateTokens.js @@ -24,33 +24,71 @@ export const CIPPDeploymentUpdateTokens = ({ formControl }) => { }; return ( - - Update Tokens (MSAL Style) - - {appId.isLoading ? ( - - ) : ( - - - - )} + + + Update Tokens (MSAL Style) + + {appId.isLoading ? ( + + ) : ( + + + + )} + - - } - CardButton={ - - } - > - - Click the button to refresh the Graph token for your tenants. We should write some text here - for replacing token for partner tenant vs client tenant. - - {formControl.setValue("noSubmitButton", true)} - - + } + CardButton={ + + } + > + + Click the button to refresh the Graph token for your tenants using popup authentication. + This method opens a popup window where you can sign in to your Microsoft account. + + {formControl.setValue("noSubmitButton", true)} + + + + + Update Tokens (Device Code Flow) + + {appId.isLoading ? ( + + ) : ( + + + + )} + + + } + CardButton={ + + } + > + + Click the button to refresh the Graph token using Device Code Flow. This will open a popup + to microsoft.com/devicelogin where you can enter the provided code to authenticate. This + method is useful when regular popup authentication fails or when you need to authenticate + from a different device than the one running CIPP. + + + ); }; From e9775ca35de6142bd30576652ccf690be83e4e0a Mon Sep 17 00:00:00 2001 From: Zac Richards <107489668+Zacgoose@users.noreply.github.com> Date: Fri, 16 May 2025 16:21:38 +0800 Subject: [PATCH 0653/1184] Fixes view of filtered standards when 3 or less results returned --- src/components/CippStandards/CippStandardDialog.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/CippStandards/CippStandardDialog.jsx b/src/components/CippStandards/CippStandardDialog.jsx index cb9f571218c3..5bc741800718 100644 --- a/src/components/CippStandards/CippStandardDialog.jsx +++ b/src/components/CippStandards/CippStandardDialog.jsx @@ -59,6 +59,7 @@ const CippStandardDialog = ({ open={dialogOpen} onClose={handleCloseDialog} maxWidth="xxl" + fullWidth PaperProps={{ sx: { minWidth: "720px", From 838098bc06afd46e64f37aa492002ef6a010ba6e Mon Sep 17 00:00:00 2001 From: Esco Date: Fri, 16 May 2025 10:41:32 +0200 Subject: [PATCH 0654/1184] fix: Skype Consumer Interoperability with Teams is no longer supported --- src/data/standards.json | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index 3a75fdc58266..6af613f0a7eb 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -3377,11 +3377,6 @@ "name": "standards.TeamsExternalAccessPolicy.EnableFederationAccess", "label": "Allow communication from trusted organizations" }, - { - "type": "switch", - "name": "standards.TeamsExternalAccessPolicy.EnablePublicCloudAccess", - "label": "Allow user to communicate with Skype users" - }, { "type": "switch", "name": "standards.TeamsExternalAccessPolicy.EnableTeamsConsumerAccess", @@ -3407,11 +3402,6 @@ "name": "standards.TeamsFederationConfiguration.AllowTeamsConsumer", "label": "Allow users to communicate with other organizations" }, - { - "type": "switch", - "name": "standards.TeamsFederationConfiguration.AllowPublicUsers", - "label": "Allow users to communicate with Skype Users" - }, { "type": "autoComplete", "required": true, From 6b8f38c432f9087e4089708e99b04b0b007a96db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 16 May 2025 19:11:39 +0200 Subject: [PATCH 0655/1184] Set 'creatable' to false for some autoCompletes --- .../tenant/administration/alert-configuration/alert.jsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pages/tenant/administration/alert-configuration/alert.jsx b/src/pages/tenant/administration/alert-configuration/alert.jsx index 41f09ddd481b..6cff52e95ff7 100644 --- a/src/pages/tenant/administration/alert-configuration/alert.jsx +++ b/src/pages/tenant/administration/alert-configuration/alert.jsx @@ -399,6 +399,7 @@ const AlertWizard = () => { type="autoComplete" name="logbook" multiple={false} + creatable={false} formControl={formControl} validators={{ required: { value: true, message: "This field is required" }, @@ -503,7 +504,8 @@ const AlertWizard = () => { required: { value: true, message: "This field is required" }, }} formControl={formControl} - multiple + multiple={true} + creatable={false} options={actionstoTake} /> @@ -574,6 +576,7 @@ const AlertWizard = () => { type="autoComplete" validators={{ required: true }} multiple={false} + creatable={false} name="command" formControl={formControl} label="What alerting script should run" @@ -588,6 +591,7 @@ const AlertWizard = () => { { required: { value: true, message: "This field is required" }, }} formControl={formControl} - multiple + multiple={true} + creatable={false} options={postExecutionOptions} /> From dac4c8766b1b871db657c27640d19a4570f9ba55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Kj=C3=A6rg=C3=A5rd?= Date: Fri, 16 May 2025 19:12:34 +0200 Subject: [PATCH 0656/1184] Feat: Add EntraConnectSyncStatus alert --- src/data/alerts.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/data/alerts.json b/src/data/alerts.json index 4779d23e58e1..e71be4e1547f 100644 --- a/src/data/alerts.json +++ b/src/data/alerts.json @@ -28,6 +28,15 @@ "inputName": "InactiveLicensedUsersExcludeDisabled", "recommendedRunInterval": "1d" }, + { + "name": "EntraConnectSyncStatus", + "label": "Alert if Entra Connect sync is enabled and has not run in the last X hours", + "requiresInput": true, + "inputType": "number", + "inputLabel": "Hours(Default:72)", + "inputName": "EntraConnectSyncStatusHours", + "recommendedRunInterval": "1d" + }, { "name": "QuotaUsed", "label": "Alert on % mailbox quota used", From c11fc3d0c2856c3487be78547a5afd89603182fb Mon Sep 17 00:00:00 2001 From: John Duprey Date: Fri, 16 May 2025 16:02:58 -0400 Subject: [PATCH 0657/1184] add psa test option --- src/pages/cipp/settings/notifications.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pages/cipp/settings/notifications.js b/src/pages/cipp/settings/notifications.js index b9fc1cd25aa6..4c693d10cbd9 100644 --- a/src/pages/cipp/settings/notifications.js +++ b/src/pages/cipp/settings/notifications.js @@ -171,6 +171,11 @@ const Page = () => { name: "sendWebhookNow", label: "Send Webhook Now", }, + { + type: "switch", + name: "sendPsaNow", + label: "Send to PSA Now", + }, ]} api={{ confirmText: From 790dd320625724837855a4434c2d01dad91be0da Mon Sep 17 00:00:00 2001 From: ngms-psh Date: Fri, 16 May 2025 22:24:11 +0200 Subject: [PATCH 0658/1184] Added standard for Custom Quarantine Policies --- src/data/standards.json | 112 ++++++++++++++++++++++++++++++++++------ 1 file changed, 97 insertions(+), 15 deletions(-) diff --git a/src/data/standards.json b/src/data/standards.json index 3a75fdc58266..8e97645da4d2 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1871,6 +1871,7 @@ { "type": "select", "multiple": false, + "creatable": true, "label": "Quarantine policy for Spoof", "name": "standards.AntiPhishPolicy.SpoofQuarantineTag", "options": [ @@ -1911,6 +1912,7 @@ { "type": "select", "multiple": false, + "creatable": true, "label": "Quarantine policy for user impersonation", "name": "standards.AntiPhishPolicy.TargetedUserQuarantineTag", "options": [ @@ -1951,6 +1953,7 @@ { "type": "select", "multiple": false, + "creatable": true, "label": "Quarantine policy for domain impersonation", "name": "standards.AntiPhishPolicy.TargetedDomainQuarantineTag", "options": [ @@ -1991,6 +1994,7 @@ { "type": "select", "multiple": false, + "creatable": true, "label": "Apply quarantine policy", "name": "standards.AntiPhishPolicy.MailboxIntelligenceQuarantineTag", "options": [ @@ -2045,6 +2049,7 @@ { "type": "select", "multiple": false, + "creatable": true, "label": "QuarantineTag", "name": "standards.SafeAttachmentPolicy.QuarantineTag", "options": [ @@ -2171,6 +2176,7 @@ { "type": "select", "multiple": false, + "creatable": true, "label": "QuarantineTag", "name": "standards.MalwareFilterPolicy.QuarantineTag", "options": [ @@ -2276,7 +2282,7 @@ "type": "autoComplete", "required": true, "multiple": false, - "creatable": false, + "creatable": true, "label": "Spam Quarantine Tag", "name": "standards.SpamFilterPolicy.SpamQuarantineTag", "options": [ @@ -2316,7 +2322,7 @@ "type": "autoComplete", "required": true, "multiple": false, - "creatable": false, + "creatable": true, "label": "High Confidence Spam Quarantine Tag", "name": "standards.SpamFilterPolicy.HighConfidenceSpamQuarantineTag", "options": [ @@ -2356,7 +2362,7 @@ "type": "autoComplete", "required": true, "multiple": false, - "creatable": false, + "creatable": true, "label": "Bulk Quarantine Tag", "name": "standards.SpamFilterPolicy.BulkQuarantineTag", "options": [ @@ -2396,7 +2402,7 @@ "type": "autoComplete", "required": true, "multiple": false, - "creatable": false, + "creatable": true, "label": "Phish Quarantine Tag", "name": "standards.SpamFilterPolicy.PhishQuarantineTag", "options": [ @@ -2418,7 +2424,7 @@ "type": "autoComplete", "required": true, "multiple": false, - "creatable": false, + "creatable": true, "label": "High Confidence Phish Quarantine Tag", "name": "standards.SpamFilterPolicy.HighConfidencePhishQuarantineTag", "options": [ @@ -2527,6 +2533,92 @@ "addedDate": "2024-07-15", "powershellEquivalent": "New-HostedContentFilterPolicy or Set-HostedContentFilterPolicy", "recommendedBy": [] + }, + { + "name": "standards.QuarantineTemplate", + "cat": "Defender Standards", + "disabledFeatures": { + "report": false, + "warn": false, + "remediate": false + }, + "tag": [], + "helpText": "This standard creates a Custom Quarantine Policies that can be used in Anti-Spam and all MDO365 policies. Quarantine Policies can be used to specify recipients permissions, enable end-user spam notifications, and specify the release action preference", + "addedComponent": [ + { + "type": "autoComplete", + "multiple": false, + "creatable": true, + "name": "displayName", + "label": "Quarantine Display Name", + "required": true + }, + { + "type": "switch", + "label": "Enable end-user spam notifications", + "name": "ESNEnabled", + "defaultValue": true, + "required": false + }, + { + "type": "select", + "multiple": false, + "label": "Select release action preference", + "name": "ReleaseAction", + "options": [ + { + "label": "Allow recipients to request a message to be released from quarantine", + "value": "PermissionToRequestRelease" + }, + { + "label": "Allow recipients to release a message from quarantine", + "value": "PermissionToRelease" + } + ] + }, + { + "type": "switch", + "label": "Include Messages From Blocked Sender Address", + "name": "IncludeMessagesFromBlockedSenderAddress", + "defaultValue": false, + "required": false + }, + { + "type": "switch", + "label": "Allow recipients to delete message", + "name": "PermissionToDelete", + "defaultValue": false, + "required": false + }, + { + "type": "switch", + "label": "Allow recipients to preview message", + "name": "PermissionToPreview", + "defaultValue": false, + "required": false + }, + { + "type": "switch", + "label": "Allow recipients to block Sender Address", + "name": "PermissionToBlockSender", + "defaultValue": false, + "required": false + }, + { + "type": "switch", + "label": "Allow recipients to whitelist Sender Address", + "name": "PermissionToAllowSender", + "defaultValue": false, + "required": false + } + ], + "label": "Custom Quarantine Policy", + "multiple": true, + "impact": "Low Impact", + "impactColour": "info", + "addedDate": "2025-05-16", + "powershellEquivalent": "Set-QuarantinePolicy or New-QuarantinePolicy", + "recommendedBy": [] }, { "name": "standards.intuneDeviceRetirementDays", @@ -3377,11 +3469,6 @@ "name": "standards.TeamsExternalAccessPolicy.EnableFederationAccess", "label": "Allow communication from trusted organizations" }, - { - "type": "switch", - "name": "standards.TeamsExternalAccessPolicy.EnablePublicCloudAccess", - "label": "Allow user to communicate with Skype users" - }, { "type": "switch", "name": "standards.TeamsExternalAccessPolicy.EnableTeamsConsumerAccess", @@ -3407,11 +3494,6 @@ "name": "standards.TeamsFederationConfiguration.AllowTeamsConsumer", "label": "Allow users to communicate with other organizations" }, - { - "type": "switch", - "name": "standards.TeamsFederationConfiguration.AllowPublicUsers", - "label": "Allow users to communicate with Skype Users" - }, { "type": "autoComplete", "required": true, From 911532734b2cff04d418987388d85a4cf14a99c2 Mon Sep 17 00:00:00 2001 From: Jr7468 Date: Fri, 16 May 2025 21:53:58 +0100 Subject: [PATCH 0659/1184] feat: Enhance CippExchangeSettingsForm with dynamic permission handling and tooltip for private item visibility --- .../CippExchangeSettingsForm.jsx | 102 ++++++++++++------ 1 file changed, 70 insertions(+), 32 deletions(-) diff --git a/src/components/CippFormPages/CippExchangeSettingsForm.jsx b/src/components/CippFormPages/CippExchangeSettingsForm.jsx index db924f6476d1..1b293aefd7d1 100644 --- a/src/components/CippFormPages/CippExchangeSettingsForm.jsx +++ b/src/components/CippFormPages/CippExchangeSettingsForm.jsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; import { Box, Button, @@ -9,6 +9,7 @@ import { Stack, SvgIcon, Typography, + Tooltip, } from "@mui/material"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import CippFormComponent from "/src/components/CippComponents/CippFormComponent"; @@ -18,6 +19,7 @@ import { ApiGetCall, ApiPostCall } from "../../api/ApiCall"; import { useSettings } from "../../hooks/use-settings"; import { Grid } from "@mui/system"; import { CippApiResults } from "../CippComponents/CippApiResults"; +import { useWatch, useFormContext } from "react-hook-form"; const CippExchangeSettingsForm = (props) => { const userSettingsDefaults = useSettings(); @@ -312,44 +314,80 @@ const CippExchangeSettingsForm = (props) => { multiple={false} formControl={formControl} /> - - - value ? true : "Select the permission level for the calendar", - }} - isFetching={isFetching || usersList.isFetching} - options={[ - { value: "Author", label: "Author" }, - { value: "Contributor", label: "Contributor" }, - { value: "Editor", label: "Editor" }, - { value: "Owner", label: "Owner" }, - { value: "NonEditingAuthor", label: "Non Editing Author" }, - { value: "PublishingAuthor", label: "Publishing Author" }, - { value: "PublishingEditor", label: "Publishing Editor" }, - { value: "Reviewer", label: "Reviewer" }, - { value: "LimitedDetails", label: "Limited Details" }, - { value: "AvailabilityOnly", label: "Availability Only" }, - ]} - multiple={false} - formControl={formControl} - /> + + + value ? true : "Select the permission level for the calendar", + }} + isFetching={isFetching || usersList.isFetching} + options={[ + { value: "Author", label: "Author" }, + { value: "Contributor", label: "Contributor" }, + { value: "Editor", label: "Editor" }, + { value: "Owner", label: "Owner" }, + { value: "NonEditingAuthor", label: "Non Editing Author" }, + { value: "PublishingAuthor", label: "Publishing Author" }, + { value: "PublishingEditor", label: "Publishing Editor" }, + { value: "Reviewer", label: "Reviewer" }, + { value: "LimitedDetails", label: "Limited Details" }, + { value: "AvailabilityOnly", label: "Availability Only" }, + ]} + multiple={false} + formControl={formControl} + /> + + {(() => { + const permissionLevel = useWatch({ + control: formControl.control, + name: "calendar.Permissions" + }); + const isEditor = permissionLevel?.value === "Editor"; + + // Use useEffect to handle the switch value reset + useEffect(() => { + if (!isEditor) { + formControl.setValue("calendar.CanViewPrivateItems", false); + } + }, [isEditor, formControl]); + + return ( + + + + + + ); + })()} + + + From 5a261ae31b3d0be4c9e2d0b571f281cfd96a33c7 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sat, 17 May 2025 12:58:24 +0200 Subject: [PATCH 0660/1184] first new wizard step --- .../CippComponents/CIPPM365OAuthButton.js | 144 +++++++++--------- .../CippComponents/CippApiResults.jsx | 6 +- .../CippComponents/CippCopyToClipboard.jsx | 92 ++++++----- .../CippWizard/CIPPDeploymentUpdateTokens.js | 5 +- src/components/CippWizard/CippSAMDeploy.js | 130 ++++++++++++++++ src/pages/onboardingv2.js | 16 +- 6 files changed, 272 insertions(+), 121 deletions(-) create mode 100644 src/components/CippWizard/CippSAMDeploy.js diff --git a/src/components/CippComponents/CIPPM365OAuthButton.js b/src/components/CippComponents/CIPPM365OAuthButton.js index 9c1e3ae58675..f562c275ea50 100644 --- a/src/components/CippComponents/CIPPM365OAuthButton.js +++ b/src/components/CippComponents/CIPPM365OAuthButton.js @@ -1,33 +1,14 @@ import { useState } from "react"; -import { - Alert, - Button, - Stack, - Typography, - CircularProgress, - Box, -} from "@mui/material"; +import { Alert, Button, Stack, Typography, CircularProgress, SvgIcon, Box } from "@mui/material"; import { ApiGetCall } from "../../api/ApiCall"; import { CippCopyToClipBoard } from "./CippCopyToClipboard"; -/** - * CIPPM365OAuthButton - A reusable button component for Microsoft 365 OAuth authentication - * - * @param {Object} props - Component props - * @param {Function} props.onAuthSuccess - Callback function called when authentication is successful with token data - * @param {Function} props.onAuthError - Callback function called when authentication fails with error data - * @param {string} props.buttonText - Text to display on the button (default: "Login with Microsoft") - * @param {boolean} props.showResults - Whether to show authentication results in the component (default: true) - * @param {string} props.scope - OAuth scope to request (default: "https://graph.microsoft.com/.default offline_access profile openid") - * @param {boolean} props.useDeviceCode - Whether to use device code flow instead of popup (default: false) - * @param {string} props.applicationId - Application ID to use for authentication (default: uses the one from API) - * @returns {JSX.Element} The CIPPM365OAuthButton component - */ export const CIPPM365OAuthButton = ({ onAuthSuccess, onAuthError, buttonText = "Login with Microsoft", showResults = true, + showSuccessAlert = true, scope = "https://graph.microsoft.com/.default offline_access profile openid", useDeviceCode = false, applicationId = null, @@ -74,33 +55,38 @@ export const CIPPM365OAuthButton = ({ try { // Get the application ID to use - const appId = applicationId || appIdInfo?.data?.applicationId || "1b730954-1685-4b74-9bfd-dac224a7b894"; // Default to MS Graph Explorer app ID - + const appId = + applicationId || appIdInfo?.data?.applicationId || "1b730954-1685-4b74-9bfd-dac224a7b894"; // Default to MS Graph Explorer app ID + // Request device code from our API endpoint - const deviceCodeResponse = await fetch(`/api/ExecDeviceCodeLogon?operation=getDeviceCode&clientId=${appId}&scope=${encodeURIComponent(scope)}`); + const deviceCodeResponse = await fetch( + `/api/ExecDeviceCodeLogon?operation=getDeviceCode&clientId=${appId}&scope=${encodeURIComponent( + scope + )}` + ); const deviceCodeData = await deviceCodeResponse.json(); - + if (deviceCodeResponse.ok && deviceCodeData.user_code) { // Store device code info setDeviceCodeInfo(deviceCodeData); - + // Open popup to device login page const width = 500; const height = 600; const left = window.screen.width / 2 - width / 2; const top = window.screen.height / 2 - height / 2; - + const popup = window.open( "https://microsoft.com/devicelogin", "deviceLoginPopup", `width=${width},height=${height},left=${left},top=${top}` ); - + // Start polling for token const pollInterval = deviceCodeData.interval || 5; const expiresIn = deviceCodeData.expires_in || 900; const startTime = Date.now(); - + const pollForToken = async () => { // Check if popup was closed if (popup && popup.closed) { @@ -113,7 +99,7 @@ export const CIPPM365OAuthButton = ({ setAuthInProgress(false); return; } - + // Check if we've exceeded the expiration time if (Date.now() - startTime >= expiresIn * 1000) { if (popup && !popup.closed) { @@ -127,22 +113,27 @@ export const CIPPM365OAuthButton = ({ setAuthInProgress(false); return; } - + try { // Poll for token using our API endpoint - const tokenResponse = await fetch(`/api/ExecDeviceCodeLogon?operation=checkToken&clientId=${appId}&deviceCode=${deviceCodeData.device_code}`); + const tokenResponse = await fetch( + `/api/ExecDeviceCodeLogon?operation=checkToken&clientId=${appId}&deviceCode=${deviceCodeData.device_code}` + ); const tokenData = await tokenResponse.json(); - + if (tokenResponse.ok && tokenData.status === "success") { // Successfully got token if (popup && !popup.closed) { popup.close(); } handleTokenResponse(tokenData); - } else if (tokenData.error === 'authorization_pending' || tokenData.status === "pending") { + } else if ( + tokenData.error === "authorization_pending" || + tokenData.status === "pending" + ) { // User hasn't completed authentication yet, continue polling setTimeout(pollForToken, pollInterval * 1000); - } else if (tokenData.error === 'slow_down') { + } else if (tokenData.error === "slow_down") { // Server asking us to slow down polling setTimeout(pollForToken, (pollInterval + 5) * 1000); } else { @@ -162,7 +153,7 @@ export const CIPPM365OAuthButton = ({ setTimeout(pollForToken, pollInterval * 1000); } }; - + // Also monitor for popup closing as a fallback const checkPopupClosed = setInterval(() => { if (popup && popup.closed) { @@ -175,7 +166,7 @@ export const CIPPM365OAuthButton = ({ }); } }, 1000); - + // Start polling setTimeout(pollForToken, pollInterval * 1000); } else { @@ -209,11 +200,11 @@ export const CIPPM365OAuthButton = ({ let username = "unknown user"; let tenantId = "unknown tenant"; let onmicrosoftDomain = null; - + if (tokenData.id_token) { try { const idTokenPayload = JSON.parse(atob(tokenData.id_token.split(".")[1])); - + // Extract username username = idTokenPayload.preferred_username || @@ -221,12 +212,12 @@ export const CIPPM365OAuthButton = ({ idTokenPayload.upn || idTokenPayload.name || "unknown user"; - + // Extract tenant ID if available in the token if (idTokenPayload.tid) { tenantId = idTokenPayload.tid; } - + // Try to extract onmicrosoft domain from the username or issuer if (username && username.includes("@") && username.includes(".onmicrosoft.com")) { onmicrosoftDomain = username.split("@")[1]; @@ -262,7 +253,7 @@ export const CIPPM365OAuthButton = ({ // Call the onAuthSuccess callback if provided if (onAuthSuccess) onAuthSuccess(tokenResult); - + // Update UI state setAuthInProgress(false); }; @@ -448,7 +439,7 @@ export const CIPPM365OAuthButton = ({ }; setAuthError(error); if (onAuthError) onAuthError(error); - + // Ensure we're not showing any previous success state setTokens({ accessToken: null, @@ -532,7 +523,7 @@ export const CIPPM365OAuthButton = ({ }; setAuthError(error); if (onAuthError) onAuthError(error); - + // Ensure we're not showing any previous success state setTokens({ accessToken: null, @@ -557,9 +548,10 @@ export const CIPPM365OAuthButton = ({ disabled={ appIdInfo.isLoading || authInProgress || - (!applicationId && !/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( - appIdInfo?.data?.applicationId - )) + (!applicationId && + !/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( + appIdInfo?.data?.applicationId + )) } onClick={useDeviceCode ? handleDeviceCodeAuthentication : handleMsalAuthentication} color="primary" @@ -574,15 +566,15 @@ export const CIPPM365OAuthButton = ({ )} - {!applicationId && !appIdInfo.isLoading && + {!applicationId && + !appIdInfo.isLoading && !/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( appIdInfo?.data?.applicationId ) && ( The Application ID is not valid. Please check your configuration. - ) - } + )} {showResults && ( @@ -590,37 +582,45 @@ export const CIPPM365OAuthButton = ({ Device Code Authentication - A popup window has been opened to microsoft.com/devicelogin. - Enter this code to authenticate: + A popup window has been opened to microsoft.com/devicelogin. Enter + this code to authenticate:{" "} + - If the popup was blocked or you closed it, you can also go to microsoft.com/devicelogin manually - and enter the code shown above. + If the popup was blocked or you closed it, you can also go to{" "} + microsoft.com/devicelogin manually and enter the code shown above. Code expires in {Math.round(deviceCodeInfo.expires_in / 60)} minutes ) : tokens.accessToken ? ( - - Authentication Successful - - You've successfully refreshed your token. The account you're using for authentication - is: {tokens.username} - - - Tenant ID: {tokens.tenantId} - {tokens.onmicrosoftDomain && ( - <> | Domain: {tokens.onmicrosoftDomain} - )} - - - Refresh token expires: {tokens.refreshTokenExpiresOn?.toLocaleString()} - - + showSuccessAlert ? ( + + Authentication Successful + + You've successfully refreshed your token. The account you're using for + authentication is: {tokens.username} + + + Tenant ID: {tokens.tenantId} + {tokens.onmicrosoftDomain && ( + <> + {" "} + | Domain: {tokens.onmicrosoftDomain} + + )} + + + Refresh token expires: {tokens.refreshTokenExpiresOn?.toLocaleString()} + + + ) : null ) : authError ? ( - Authentication Error: {authError.errorCode} + + Authentication Error: {authError.errorCode} + {authError.errorMessage} Time: {authError.timestamp} @@ -637,5 +637,3 @@ export const CIPPM365OAuthButton = ({
    ); }; - -export default CIPPM365OAuthButton; \ No newline at end of file diff --git a/src/components/CippComponents/CippApiResults.jsx b/src/components/CippComponents/CippApiResults.jsx index 21917507c396..b351ec4dd80b 100644 --- a/src/components/CippComponents/CippApiResults.jsx +++ b/src/components/CippComponents/CippApiResults.jsx @@ -73,7 +73,7 @@ const extractAllResults = (data) => { results.push(processed); } } else { - const ignoreKeys = ["metadata", "Metadata"]; + const ignoreKeys = ["metadata", "Metadata", "severity"]; if (typeof obj === "object") { Object.keys(obj).forEach((key) => { @@ -296,7 +296,9 @@ export const CippApiResults = (props) => { ))} )} - {(apiObject.isSuccess || apiObject.isError) && finalResults?.length > 0 ? ( + {(apiObject.isSuccess || apiObject.isError) && + finalResults?.length > 0 && + hasVisibleResults ? ( tableDialog.handleOpen()}> diff --git a/src/components/CippComponents/CippCopyToClipboard.jsx b/src/components/CippComponents/CippCopyToClipboard.jsx index 8f2cefd686a4..6d3603790df7 100644 --- a/src/components/CippComponents/CippCopyToClipboard.jsx +++ b/src/components/CippComponents/CippCopyToClipboard.jsx @@ -4,58 +4,68 @@ import { useState } from "react"; import CopyToClipboard from "react-copy-to-clipboard"; export const CippCopyToClipBoard = (props) => { - const { text, type = "button", ...other } = props; + const { text, type = "button", visible = true, ...other } = props; const [showPassword, setShowPassword] = useState(false); + const handleTogglePassword = () => { setShowPassword((prev) => !prev); }; - return ( - <> - {type === "button" && ( - - - - - - - - - - )} - {type === "chip" && ( - + + if (!visible) return null; + + if (type === "button") { + return ( + + + + + + + + + + ); + } + + if (type === "chip") { + return ( + + + + + + ); + } + + if (type === "password") { + return ( + <> + + + {showPassword ? : } + + + - )} - {type === "password" && ( - <> - - - {showPassword ? : } - - - - - - - - - )} - - ); + + ); + } + + return null; }; diff --git a/src/components/CippWizard/CIPPDeploymentUpdateTokens.js b/src/components/CippWizard/CIPPDeploymentUpdateTokens.js index 14f57cf99202..fd70341ab548 100644 --- a/src/components/CippWizard/CIPPDeploymentUpdateTokens.js +++ b/src/components/CippWizard/CIPPDeploymentUpdateTokens.js @@ -82,10 +82,7 @@ export const CIPPDeploymentUpdateTokens = ({ formControl }) => { } > - Click the button to refresh the Graph token using Device Code Flow. This will open a popup - to microsoft.com/devicelogin where you can enter the provided code to authenticate. This - method is useful when regular popup authentication fails or when you need to authenticate - from a different device than the one running CIPP. + Device code flow test diff --git a/src/components/CippWizard/CippSAMDeploy.js b/src/components/CippWizard/CippSAMDeploy.js new file mode 100644 index 000000000000..e45fa2a9f87b --- /dev/null +++ b/src/components/CippWizard/CippSAMDeploy.js @@ -0,0 +1,130 @@ +import { useState } from "react"; +import { Alert, Stack, Box, CircularProgress } from "@mui/material"; +import { CIPPM365OAuthButton } from "../CippComponents/CIPPM365OAuthButton"; +import { CippApiResults } from "../CippComponents/CippApiResults"; +import { ApiPostCall } from "../../api/ApiCall"; +import { CippWizardStepButtons } from "./CippWizardStepButtons"; + +export const CippSAMDeploy = (props) => { + const { formControl, currentStep, onPreviousStep, onNextStep } = props; + const [authStatus, setAuthStatus] = useState({ + success: false, + error: null, + loading: false, + }); + + //TODO: Make sure to block next button until the app is created. + + // API call to create/update SAM app + const createSamApp = ApiPostCall({ urlfromdata: true }); + // Handle successful authentication + const handleAuthSuccess = (tokenData) => { + setAuthStatus({ + success: false, + error: null, + loading: true, + }); + + // Send the access token to the API to create/update SAM app + createSamApp.mutate({ + url: "/api/ExecCreateSamApp", + data: { access_token: tokenData.accessToken }, + }); + }; + + // Handle authentication error + const handleAuthError = (error) => { + setAuthStatus({ + success: false, + error: error.errorMessage || "Authentication failed", + loading: false, + }); + }; + + // Update status when API call completes + if (createSamApp.isSuccess && authStatus.loading) { + const data = createSamApp.data; + if (data.severity === "error") { + setAuthStatus({ + success: false, + error: data.message || "Failed to create SAM application", + loading: false, + }); + } else if (data.severity === "success") { + setAuthStatus({ + success: true, + error: null, + loading: false, + }); + // Allow user to proceed to next step + formControl.setValue("samAppCreated", true); + } + } + + // Handle API error + if (createSamApp.isError && authStatus.loading) { + setAuthStatus({ + success: false, + error: "An error occurred while creating the SAM application", + loading: false, + }); + } + + return ( + + + This step will create or update the CIPP Application Registration in your tenant. Make sure + the account you use is one of the following roles: +
      +
    • Global Administrator or Privileged Role Administrator
    • +
    • Application Administrator
    • +
    • Cloud Application Administrator
    • +
    +
    + + {/* Show API results */} + + + {/* Show error message if any */} + {authStatus.error && ( + + {authStatus.error} + + )} + + {/* Show success message when authentication is successful */} + {authStatus.success && !authStatus.loading && ( + + SAM application has been successfully created/updated. You can now proceed to the next + step. + + )} + + {/* Show authenticate button only if not successful yet */} + {(!authStatus.success || authStatus.loading) && ( + + + + + + )} + + +
    + ); +}; + +export default CippSAMDeploy; diff --git a/src/pages/onboardingv2.js b/src/pages/onboardingv2.js index 4de309be07ae..f2cb811cedc7 100644 --- a/src/pages/onboardingv2.js +++ b/src/pages/onboardingv2.js @@ -3,6 +3,7 @@ import { CippWizardConfirmation } from "../components/CippWizard/CippWizardConfi import { CippDeploymentStep } from "../components/CippWizard/CIPPDeploymentStep.js"; import CippWizardPage from "../components/CippWizard/CippWizardPage.jsx"; import { CippWizardOptionsList } from "../components/CippWizard/CippWizardOptionsList.jsx"; +import { CippSAMDeploy } from "../components/CippWizard/CippSAMDeploy.js"; import { BuildingOfficeIcon, CloudIcon, CpuChipIcon } from "@heroicons/react/24/outline"; const Page = () => { @@ -56,37 +57,50 @@ const Page = () => { { title: "Step 2", description: "Application", - component: CippDeploymentStep, + component: CippSAMDeploy, + componentProps: { + title: "SAM Application Setup", + subtext: "This step will create or update the SAM application in your tenant.", + }, }, { title: "Step 3", description: "Tenants", component: CippDeploymentStep, + //set the tenant mode to "GDAP", "perTenant" or "mixed". + //if the tenant mode is set to GDAP, show MSAL button to update token. Send to /api/ExecUpdateRefreshToken with body { "tenantId": tenantId, "refreshToken": refreshToken, "tenantMode": "GDAP" } + //if the tenant mode is set to perTenant, show MSAL button to get token. Send to /api/ExecUpdateRefreshToken with body { "tenantId": tenantId, "refreshToken": refreshToken, "tenantMode": "perTenant" }. List each tenant that has authenticated and been added. + //if the tenant mode is set to mixed, show first MSAL button to update GDAP access, then show second MSAL button to update perTenant access. Send to /api/ExecUpdateRefreshToken with body { "tenantId": tenantId, "refreshToken": refreshToken, "tenantMode": "mixed" } }, { title: "Step 4", description: "Baselines", component: CippDeploymentStep, + //give choice to download baselines from repos. }, { title: "Step 5", description: "Integrations", component: CippDeploymentStep, + //give the choice to configure integrations. }, { title: "Step 6", description: "Notifications", component: CippDeploymentStep, + //explain notifications, test if email is setup,etc. }, { title: "Step 7", description: "Alerts", component: CippDeploymentStep, + //show template alerts, allow user to configure them. }, { title: "Step 8", description: "Confirmation", component: CippWizardConfirmation, + //confirm and finish button, perform tasks, launch checks etc. }, ]; From 4204310110067c357f9002c45fd771053a759aa6 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 18 May 2025 01:11:45 +0200 Subject: [PATCH 0661/1184] updates to new sam wizard --- ...OAuthButton.js => CIPPM365OAuthButton.jsx} | 547 +++++++++++------- ...ploymentStep.js => CIPPDeploymentStep.jsx} | 0 ...kens.js => CIPPDeploymentUpdateTokens.jsx} | 1 + ...ialsStep.js => CippPSACredentialsStep.jsx} | 0 ...ASyncOptions.js => CippPSASyncOptions.jsx} | 0 .../{CippSAMDeploy.js => CippSAMDeploy.jsx} | 27 +- .../CippWizard/CippTenantModeDeploy.jsx | 326 +++++++++++ ...irmation.js => CippWizardConfirmation.jsx} | 0 src/pages/authredirect.js | 46 ++ src/pages/onboardingv2.js | 17 +- .../tenant/administration/tenants/add.js | 2 +- 11 files changed, 721 insertions(+), 245 deletions(-) rename src/components/CippComponents/{CIPPM365OAuthButton.js => CIPPM365OAuthButton.jsx} (58%) rename src/components/CippWizard/{CIPPDeploymentStep.js => CIPPDeploymentStep.jsx} (100%) rename src/components/CippWizard/{CIPPDeploymentUpdateTokens.js => CIPPDeploymentUpdateTokens.jsx} (98%) rename src/components/CippWizard/{CippPSACredentialsStep.js => CippPSACredentialsStep.jsx} (100%) rename src/components/CippWizard/{CippPSASyncOptions.js => CippPSASyncOptions.jsx} (100%) rename src/components/CippWizard/{CippSAMDeploy.js => CippSAMDeploy.jsx} (82%) create mode 100644 src/components/CippWizard/CippTenantModeDeploy.jsx rename src/components/CippWizard/{CippWizardConfirmation.js => CippWizardConfirmation.jsx} (100%) create mode 100644 src/pages/authredirect.js diff --git a/src/components/CippComponents/CIPPM365OAuthButton.js b/src/components/CippComponents/CIPPM365OAuthButton.jsx similarity index 58% rename from src/components/CippComponents/CIPPM365OAuthButton.js rename to src/components/CippComponents/CIPPM365OAuthButton.jsx index f562c275ea50..6241823034c7 100644 --- a/src/components/CippComponents/CIPPM365OAuthButton.js +++ b/src/components/CippComponents/CIPPM365OAuthButton.jsx @@ -1,5 +1,5 @@ -import { useState } from "react"; -import { Alert, Button, Stack, Typography, CircularProgress, SvgIcon, Box } from "@mui/material"; +import { useState, useEffect } from "react"; +import { Alert, Button, Typography, CircularProgress, Box } from "@mui/material"; import { ApiGetCall } from "../../api/ApiCall"; import { CippCopyToClipBoard } from "./CippCopyToClipboard"; @@ -12,10 +12,14 @@ export const CIPPM365OAuthButton = ({ scope = "https://graph.microsoft.com/.default offline_access profile openid", useDeviceCode = false, applicationId = null, + autoStartDeviceLogon = false, + validateServiceAccount = true, // Add prop to control service account validation }) => { const [authInProgress, setAuthInProgress] = useState(false); const [authError, setAuthError] = useState(null); const [deviceCodeInfo, setDeviceCodeInfo] = useState(null); + const [codeRetrievalInProgress, setCodeRetrievalInProgress] = useState(false); + const [isServiceAccount, setIsServiceAccount] = useState(true); // Default to true to avoid showing warning initially const [tokens, setTokens] = useState({ accessToken: null, refreshToken: null, @@ -29,29 +33,35 @@ export const CIPPM365OAuthButton = ({ // Get application ID information from API if not provided const appIdInfo = ApiGetCall({ url: `/api/ExecListAppId`, - queryKey: `ExecListAppId`, waiting: true, }); + // Ensure appId is refetched every time the component is mounted + useEffect(() => { + // Refetch appId when component mounts + appIdInfo.refetch(); + }, []); // Empty dependency array ensures this runs only on mount + // Handle closing the error const handleCloseError = () => { setAuthError(null); }; - // Device code authentication function - const handleDeviceCodeAuthentication = async () => { - setAuthInProgress(true); + // Check if username is a service account (contains "service" or "cipp") + const checkIsServiceAccount = (username) => { + if (!username || !validateServiceAccount) return true; // If no username or validation disabled, don't show warning + + const lowerUsername = username.toLowerCase(); + return lowerUsername.includes("service") || lowerUsername.includes("cipp"); + }; + + // Function to retrieve device code + const retrieveDeviceCode = async () => { + setCodeRetrievalInProgress(true); setAuthError(null); - setDeviceCodeInfo(null); - setTokens({ - accessToken: null, - refreshToken: null, - accessTokenExpiresOn: null, - refreshTokenExpiresOn: null, - username: null, - tenantId: null, - onmicrosoftDomain: null, - }); + + // Refetch appId to ensure we have the latest + await appIdInfo.refetch(); try { // Get the application ID to use @@ -69,117 +79,151 @@ export const CIPPM365OAuthButton = ({ if (deviceCodeResponse.ok && deviceCodeData.user_code) { // Store device code info setDeviceCodeInfo(deviceCodeData); + } else { + // Error getting device code + setAuthError({ + errorCode: deviceCodeData.error || "device_code_error", + errorMessage: deviceCodeData.error_description || "Failed to get device code", + timestamp: new Date().toISOString(), + }); + } + } catch (error) { + setAuthError({ + errorCode: "device_code_error", + errorMessage: error.message || "An error occurred retrieving device code", + timestamp: new Date().toISOString(), + }); + } finally { + setCodeRetrievalInProgress(false); + } + }; - // Open popup to device login page - const width = 500; - const height = 600; - const left = window.screen.width / 2 - width / 2; - const top = window.screen.height / 2 - height / 2; - - const popup = window.open( - "https://microsoft.com/devicelogin", - "deviceLoginPopup", - `width=${width},height=${height},left=${left},top=${top}` - ); - - // Start polling for token - const pollInterval = deviceCodeData.interval || 5; - const expiresIn = deviceCodeData.expires_in || 900; - const startTime = Date.now(); - - const pollForToken = async () => { - // Check if popup was closed - if (popup && popup.closed) { - clearInterval(checkPopupClosed); - setAuthError({ - errorCode: "user_cancelled", - errorMessage: "Authentication was cancelled. Please try again.", - timestamp: new Date().toISOString(), - }); - setAuthInProgress(false); - return; + // Device code authentication function - opens popup and starts polling + const handleDeviceCodeAuthentication = async () => { + // Refetch appId to ensure we have the latest + await appIdInfo.refetch(); + + if (!deviceCodeInfo) { + // If we don't have a device code yet, retrieve it first + await retrieveDeviceCode(); + return; + } + + setAuthInProgress(true); + setTokens({ + accessToken: null, + refreshToken: null, + accessTokenExpiresOn: null, + refreshTokenExpiresOn: null, + username: null, + tenantId: null, + onmicrosoftDomain: null, + }); + + try { + // Get the application ID to use - refetch already happened at the start of this function + const appId = + applicationId || appIdInfo?.data?.applicationId || "1b730954-1685-4b74-9bfd-dac224a7b894"; // Default to MS Graph Explorer app ID + + // Open popup to device login page + const width = 500; + const height = 600; + const left = window.screen.width / 2 - width / 2; + const top = window.screen.height / 2 - height / 2; + + const popup = window.open( + "https://microsoft.com/devicelogin", + "deviceLoginPopup", + `width=${width},height=${height},left=${left},top=${top}` + ); + + // Start polling for token + const pollInterval = deviceCodeInfo.interval || 5; + const expiresIn = deviceCodeInfo.expires_in || 900; + const startTime = Date.now(); + + const pollForToken = async () => { + // Check if popup was closed + if (popup && popup.closed) { + clearInterval(checkPopupClosed); + setAuthError({ + errorCode: "user_cancelled", + errorMessage: "Authentication was cancelled. Please try again.", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + return; + } + + // Check if we've exceeded the expiration time + if (Date.now() - startTime >= expiresIn * 1000) { + if (popup && !popup.closed) { + popup.close(); } + setAuthError({ + errorCode: "timeout", + errorMessage: "Device code authentication timed out", + timestamp: new Date().toISOString(), + }); + setAuthInProgress(false); + return; + } + + try { + // Poll for token using our API endpoint + const tokenResponse = await fetch( + `/api/ExecDeviceCodeLogon?operation=checkToken&clientId=${appId}&deviceCode=${deviceCodeInfo.device_code}` + ); + const tokenData = await tokenResponse.json(); - // Check if we've exceeded the expiration time - if (Date.now() - startTime >= expiresIn * 1000) { + if (tokenResponse.ok && tokenData.status === "success") { + // Successfully got token + if (popup && !popup.closed) { + popup.close(); + } + handleTokenResponse(tokenData); + } else if ( + tokenData.error === "authorization_pending" || + tokenData.status === "pending" + ) { + // User hasn't completed authentication yet, continue polling + setTimeout(pollForToken, pollInterval * 1000); + } else if (tokenData.error === "slow_down") { + // Server asking us to slow down polling + setTimeout(pollForToken, (pollInterval + 5) * 1000); + } else { + // Other error if (popup && !popup.closed) { popup.close(); } setAuthError({ - errorCode: "timeout", - errorMessage: "Device code authentication timed out", + errorCode: tokenData.error || "token_error", + errorMessage: tokenData.error_description || "Failed to get token", timestamp: new Date().toISOString(), }); setAuthInProgress(false); - return; - } - - try { - // Poll for token using our API endpoint - const tokenResponse = await fetch( - `/api/ExecDeviceCodeLogon?operation=checkToken&clientId=${appId}&deviceCode=${deviceCodeData.device_code}` - ); - const tokenData = await tokenResponse.json(); - - if (tokenResponse.ok && tokenData.status === "success") { - // Successfully got token - if (popup && !popup.closed) { - popup.close(); - } - handleTokenResponse(tokenData); - } else if ( - tokenData.error === "authorization_pending" || - tokenData.status === "pending" - ) { - // User hasn't completed authentication yet, continue polling - setTimeout(pollForToken, pollInterval * 1000); - } else if (tokenData.error === "slow_down") { - // Server asking us to slow down polling - setTimeout(pollForToken, (pollInterval + 5) * 1000); - } else { - // Other error - if (popup && !popup.closed) { - popup.close(); - } - setAuthError({ - errorCode: tokenData.error || "token_error", - errorMessage: tokenData.error_description || "Failed to get token", - timestamp: new Date().toISOString(), - }); - setAuthInProgress(false); - } - } catch (error) { - console.error("Error polling for token:", error); - setTimeout(pollForToken, pollInterval * 1000); } - }; + } catch (error) { + setTimeout(pollForToken, pollInterval * 1000); + } + }; - // Also monitor for popup closing as a fallback - const checkPopupClosed = setInterval(() => { - if (popup && popup.closed) { - clearInterval(checkPopupClosed); - setAuthInProgress(false); - setAuthError({ - errorCode: "user_cancelled", - errorMessage: "Authentication was cancelled. Please try again.", - timestamp: new Date().toISOString(), - }); - } - }, 1000); + // Also monitor for popup closing as a fallback + const checkPopupClosed = setInterval(() => { + if (popup && popup.closed) { + clearInterval(checkPopupClosed); + setAuthInProgress(false); + setAuthError({ + errorCode: "user_cancelled", + errorMessage: "Authentication was cancelled. Please try again.", + timestamp: new Date().toISOString(), + }); + } + }, 1000); - // Start polling - setTimeout(pollForToken, pollInterval * 1000); - } else { - // Error getting device code - setAuthError({ - errorCode: deviceCodeData.error || "device_code_error", - errorMessage: deviceCodeData.error_description || "Failed to get device code", - timestamp: new Date().toISOString(), - }); - setAuthInProgress(false); - } + // Start polling + setTimeout(pollForToken, pollInterval * 1000); } catch (error) { - console.error("Error in device code authentication:", error); setAuthError({ errorCode: "device_code_error", errorMessage: error.message || "An error occurred during device code authentication", @@ -227,9 +271,10 @@ export const CIPPM365OAuthButton = ({ // We have the tenant ID, but not the domain name } } - } catch (error) { - console.error("Error parsing ID token:", error); - } + + // Check if username is a service account + setIsServiceAccount(checkIsServiceAccount(username)); + } catch (error) {} } // Create token result object @@ -243,15 +288,9 @@ export const CIPPM365OAuthButton = ({ onmicrosoftDomain: onmicrosoftDomain, }; - // Store tokens in component state setTokens(tokenResult); setDeviceCodeInfo(null); - // Log only the necessary token information to console - console.log("Access Token:", tokenData.access_token); - console.log("Refresh Token:", tokenData.refresh_token); - - // Call the onAuthSuccess callback if provided if (onAuthSuccess) onAuthSuccess(tokenResult); // Update UI state @@ -259,7 +298,7 @@ export const CIPPM365OAuthButton = ({ }; // MSAL-like authentication function - const handleMsalAuthentication = () => { + const handleMsalAuthentication = async () => { // Clear previous authentication state when starting a new authentication setAuthInProgress(true); setAuthError(null); @@ -273,7 +312,10 @@ export const CIPPM365OAuthButton = ({ onmicrosoftDomain: null, }); - // Get the application ID to use + // Refetch app ID info to ensure we have the latest + await appIdInfo.refetch(); + + // Get the application ID to use - now we're sure to have the latest after the await const appId = applicationId || appIdInfo?.data?.applicationId; // Generate MSAL-like authentication parameters @@ -281,7 +323,7 @@ export const CIPPM365OAuthButton = ({ auth: { clientId: appId, authority: `https://login.microsoftonline.com/common`, - redirectUri: window.location.origin, + redirectUri: `${window.location.origin}/authredirect`, }, }; @@ -290,9 +332,6 @@ export const CIPPM365OAuthButton = ({ scopes: [scope], }; - console.log("MSAL Config:", msalConfig); - console.log("Login Request:", loginRequest); - // Generate PKCE code verifier and challenge const generateCodeVerifier = () => { const array = new Uint8Array(32); @@ -300,36 +339,20 @@ export const CIPPM365OAuthButton = ({ return Array.from(array, (byte) => ("0" + (byte & 0xff).toString(16)).slice(-2)).join(""); }; - const base64URLEncode = (str) => { - return btoa(str).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); - }; - - // Generate code verifier for PKCE const codeVerifier = generateCodeVerifier(); - // In a real implementation, we would hash the code verifier to create the code challenge - // For simplicity, we'll use the same value const codeChallenge = codeVerifier; - - // Note: We're not storing the code verifier in session storage for security reasons - // Instead, we'll use it directly in the token exchange - - // Create a random state value for security const state = Math.random().toString(36).substring(2, 15); - - // Create the auth URL with PKCE parameters const authUrl = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?` + `client_id=${appId}` + `&response_type=code` + - `&redirect_uri=${encodeURIComponent(window.location.origin)}` + + `&redirect_uri=${encodeURIComponent(window.location.origin)}/authredirect` + `&scope=${encodeURIComponent(scope)}` + `&code_challenge=${codeChallenge}` + `&code_challenge_method=plain` + `&state=${state}` + `&prompt=select_account`; - console.log("MSAL Auth URL:", authUrl); - // Open popup for authentication const width = 500; const height = 600; @@ -347,7 +370,6 @@ export const CIPPM365OAuthButton = ({ // Verify the state parameter matches what we sent (security check) if (receivedState !== state) { const errorMessage = "State mismatch in auth response - possible CSRF attack"; - console.error(errorMessage); const error = { errorCode: "state_mismatch", errorMessage: errorMessage, @@ -358,38 +380,70 @@ export const CIPPM365OAuthButton = ({ setAuthInProgress(false); return; } - - console.log("Authorization code received:", code); - try { - // Actually exchange the code for tokens using the token endpoint - console.log("Exchanging authorization code for tokens..."); - // Prepare the token request const tokenRequest = { grant_type: "authorization_code", client_id: appId, code: code, - redirect_uri: window.location.origin, + redirect_uri: `${window.location.origin}/authredirect`, code_verifier: codeVerifier, }; - // Make the token request - const tokenResponse = await fetch( - `https://login.microsoftonline.com/common/oauth2/v2.0/token`, - { - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - }, - body: new URLSearchParams(tokenRequest).toString(), - } - ); + // Make the token request through our API proxy to avoid origin header issues + const tokenResponse = await fetch(`/api/ExecTokenExchange`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + tokenRequest, + tokenUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/token", + tenantId: appId, // Pass the tenant ID to retrieve the correct client secret + }), + }); // Parse the token response const tokenData = await tokenResponse.json(); + // Check if the response contains an error + if (tokenData.error) { + const error = { + errorCode: tokenData.error || "token_error", + errorMessage: + tokenData.error_description || "Failed to exchange authorization code for tokens", + timestamp: new Date().toISOString(), + }; + setAuthError(error); + if (onAuthError) onAuthError(error); + setAuthInProgress(false); + return; + } + if (tokenResponse.ok) { + // If we have a refresh token, store it + if (tokenData.refresh_token) { + try { + // Store the refresh token + const refreshResponse = await fetch(`/api/ExecUpdateRefreshToken`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + tenantId: appId, + refreshtoken: tokenData.refresh_token, + }), + }); + + if (!refreshResponse.ok) { + console.warn("Failed to store refresh token, but continuing with authentication"); + } + } catch (error) { + console.error("Failed to store refresh token:", error); + } + } + handleTokenResponse(tokenData); } else { // Handle token error - display in error box instead of throwing @@ -403,7 +457,6 @@ export const CIPPM365OAuthButton = ({ if (onAuthError) onAuthError(error); } } catch (error) { - console.error("Error exchanging code for tokens:", error); const errorObj = { errorCode: "token_exchange_error", errorMessage: error.message || "Failed to exchange authorization code for tokens", @@ -431,7 +484,6 @@ export const CIPPM365OAuthButton = ({ // If authentication is still in progress when popup closes, it's an error if (authInProgress) { const errorMessage = "Authentication was cancelled. Please try again."; - console.error(errorMessage); const error = { errorCode: "user_cancelled", errorMessage: errorMessage, @@ -463,9 +515,6 @@ export const CIPPM365OAuthButton = ({ // Check if the URL contains a code parameter (authorization code) if (currentUrl.includes("code=") && currentUrl.includes("state=")) { clearInterval(checkPopupLocation); - - console.log("Detected authorization code in URL:", currentUrl); - // Parse the URL to extract the code and state const urlParams = new URLSearchParams(popup.location.search); const code = urlParams.get("code"); @@ -478,9 +527,6 @@ export const CIPPM365OAuthButton = ({ // Check for error in the URL if (currentUrl.includes("error=")) { clearInterval(checkPopupLocation); - - console.error("Detected error in authentication response:", currentUrl); - // Parse the URL to extract the error details const urlParams = new URLSearchParams(popup.location.search); const errorCode = urlParams.get("error"); @@ -515,7 +561,6 @@ export const CIPPM365OAuthButton = ({ // If authentication is still in progress when popup closes, it's an error if (authInProgress) { const errorMessage = "Authentication was cancelled. Please try again."; - console.error(errorMessage); const error = { errorCode: "user_cancelled", errorMessage: errorMessage, @@ -541,33 +586,32 @@ export const CIPPM365OAuthButton = ({ }, 1000); }; + // Auto-start device code retrieval if requested + useEffect(() => { + if ( + useDeviceCode && + autoStartDeviceLogon && + !codeRetrievalInProgress && + !deviceCodeInfo && + !tokens.accessToken && + appIdInfo?.data + ) { + retrieveDeviceCode(); + } + }, [ + useDeviceCode, + autoStartDeviceLogon, + codeRetrievalInProgress, + deviceCodeInfo, + tokens.accessToken, + appIdInfo?.data, + ]); + return (
    - - {!applicationId && !appIdInfo.isLoading && + appIdInfo?.data && // Only check if data is available !/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( appIdInfo?.data?.applicationId ) && ( @@ -577,45 +621,77 @@ export const CIPPM365OAuthButton = ({ )} {showResults && ( - - {deviceCodeInfo && authInProgress ? ( + + {deviceCodeInfo ? ( Device Code Authentication - A popup window has been opened to microsoft.com/devicelogin. Enter - this code to authenticate:{" "} + {authInProgress ? ( + <> + A popup window has been opened to microsoft.com/devicelogin. + Enter this code to authenticate:{" "} + + ) : ( + <>Click the button below to authenticate. You will need to enter this code: + )} - If the popup was blocked or you closed it, you can also go to{" "} - microsoft.com/devicelogin manually and enter the code shown above. + {authInProgress ? ( + <> + If the popup was blocked or you closed it, you can also go to{" "} + microsoft.com/devicelogin manually and enter the code shown + above. + + ) : ( + <> + When you click the button below, a popup will open to{" "} + microsoft.com/devicelogin where you'll enter this code. + + )} Code expires in {Math.round(deviceCodeInfo.expires_in / 60)} minutes ) : tokens.accessToken ? ( - showSuccessAlert ? ( - - Authentication Successful - - You've successfully refreshed your token. The account you're using for - authentication is: {tokens.username} - - - Tenant ID: {tokens.tenantId} - {tokens.onmicrosoftDomain && ( - <> - {" "} - | Domain: {tokens.onmicrosoftDomain} - - )} - - - Refresh token expires: {tokens.refreshTokenExpiresOn?.toLocaleString()} - - - ) : null + <> + {showSuccessAlert ? ( + + Authentication Successful + + You've successfully refreshed your token. The account you're using for + authentication is: {tokens.username} + + + Tenant ID: {tokens.tenantId} + {tokens.onmicrosoftDomain && ( + <> + {" "} + | Domain: {tokens.onmicrosoftDomain} + + )} + + + Refresh token expires: {tokens.refreshTokenExpiresOn?.toLocaleString()} + + + ) : null} + + {!isServiceAccount && ( + + Service Account Required + + CIPP requires a service account for authentication. The account you're using ( + {tokens.username}) does not appear to be a service account. + + + Please redo authentication using an account with "service" or "cipp" in the + username. + + + )} + ) : authError ? ( @@ -634,6 +710,31 @@ export const CIPPM365OAuthButton = ({ ) : null} )} +
    ); }; diff --git a/src/components/CippWizard/CIPPDeploymentStep.js b/src/components/CippWizard/CIPPDeploymentStep.jsx similarity index 100% rename from src/components/CippWizard/CIPPDeploymentStep.js rename to src/components/CippWizard/CIPPDeploymentStep.jsx diff --git a/src/components/CippWizard/CIPPDeploymentUpdateTokens.js b/src/components/CippWizard/CIPPDeploymentUpdateTokens.jsx similarity index 98% rename from src/components/CippWizard/CIPPDeploymentUpdateTokens.js rename to src/components/CippWizard/CIPPDeploymentUpdateTokens.jsx index fd70341ab548..6bfa70481719 100644 --- a/src/components/CippWizard/CIPPDeploymentUpdateTokens.js +++ b/src/components/CippWizard/CIPPDeploymentUpdateTokens.jsx @@ -78,6 +78,7 @@ export const CIPPDeploymentUpdateTokens = ({ formControl }) => { buttonText="Refresh Graph Token (Device Code)" useDeviceCode={true} applicationId="1950a258-227b-4e31-a9cf-717495945fc2" + autoStartDeviceLogon={true} /> } > diff --git a/src/components/CippWizard/CippPSACredentialsStep.js b/src/components/CippWizard/CippPSACredentialsStep.jsx similarity index 100% rename from src/components/CippWizard/CippPSACredentialsStep.js rename to src/components/CippWizard/CippPSACredentialsStep.jsx diff --git a/src/components/CippWizard/CippPSASyncOptions.js b/src/components/CippWizard/CippPSASyncOptions.jsx similarity index 100% rename from src/components/CippWizard/CippPSASyncOptions.js rename to src/components/CippWizard/CippPSASyncOptions.jsx diff --git a/src/components/CippWizard/CippSAMDeploy.js b/src/components/CippWizard/CippSAMDeploy.jsx similarity index 82% rename from src/components/CippWizard/CippSAMDeploy.js rename to src/components/CippWizard/CippSAMDeploy.jsx index e45fa2a9f87b..3aef23bdb69d 100644 --- a/src/components/CippWizard/CippSAMDeploy.js +++ b/src/components/CippWizard/CippSAMDeploy.jsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { Alert, Stack, Box, CircularProgress } from "@mui/material"; +import { Alert, Stack, Box, CircularProgress, Link } from "@mui/material"; import { CIPPM365OAuthButton } from "../CippComponents/CIPPM365OAuthButton"; import { CippApiResults } from "../CippComponents/CippApiResults"; import { ApiPostCall } from "../../api/ApiCall"; @@ -73,15 +73,23 @@ export const CippSAMDeploy = (props) => { return ( - This step will create or update the CIPP Application Registration in your tenant. Make sure - the account you use is one of the following roles: -
      -
    • Global Administrator or Privileged Role Administrator
    • -
    • Application Administrator
    • -
    • Cloud Application Administrator
    • -
    + To run this setup you will need the following prerequisites: +
  • + A CIPP Service Account. For more information on how to create a service account, click{" "} + + here + +
  • +
  • (Temporary) Global Administrator permissions for the CIPP Service Account
  • +
  • + Multi-factor authentication enabled for the CIPP Service Account, with no trusted + locations or other exclusions. +
  • - {/* Show API results */} @@ -111,6 +119,7 @@ export const CippSAMDeploy = (props) => { useDeviceCode={true} applicationId="1950a258-227b-4e31-a9cf-717495945fc2" showSuccessAlert={false} + autoStartDeviceLogon={true} />
    diff --git a/src/components/CippWizard/CippTenantModeDeploy.jsx b/src/components/CippWizard/CippTenantModeDeploy.jsx new file mode 100644 index 000000000000..a478e8ea3b25 --- /dev/null +++ b/src/components/CippWizard/CippTenantModeDeploy.jsx @@ -0,0 +1,326 @@ +import { useState, useEffect } from "react"; +import { + Alert, + Stack, + Box, + Typography, + CircularProgress, + Divider, + List, + ListItem, + ListItemText, + Paper, + Switch, + FormControlLabel, +} from "@mui/material"; +import { CIPPM365OAuthButton } from "../CippComponents/CIPPM365OAuthButton"; +import { CippApiResults } from "../CippComponents/CippApiResults"; +import { ApiPostCall, ApiGetCall } from "../../api/ApiCall"; +import { CippWizardStepButtons } from "./CippWizardStepButtons"; +import { CippAutoComplete } from "../CippComponents/CippAutocomplete"; + +export const CippTenantModeDeploy = (props) => { + const { formControl, currentStep, onPreviousStep, onNextStep } = props; + + const [tenantMode, setTenantMode] = useState("GDAP"); + const [allowPartnerTenantManagement, setAllowPartnerTenantManagement] = useState(false); + const [gdapAuthStatus, setGdapAuthStatus] = useState({ + success: false, + loading: false, + }); + const [perTenantAuthStatus, setPerTenantAuthStatus] = useState({ + success: false, + loading: false, + }); + const [authenticatedTenants, setAuthenticatedTenants] = useState([]); + + // API call to update refresh token + const updateRefreshToken = ApiPostCall({ urlfromdata: true }); + + // API call to get list of authenticated tenants (for perTenant mode) + const tenantList = ApiGetCall({ + url: "/api/ListTenants", + queryKey: "ListTenants", + }); + + // Update authenticated tenants list when tenantList changes + useEffect(() => { + if (tenantList.data && tenantMode === "perTenant") { + setAuthenticatedTenants(tenantList.data); + } + }, [tenantList.data, tenantMode]); + + // Handle tenant mode change + const handleTenantModeChange = (selectedOption) => { + if (selectedOption) { + setTenantMode(selectedOption.value); + // Reset auth status when changing modes + setGdapAuthStatus({ + success: false, + loading: false, + }); + setPerTenantAuthStatus({ + success: false, + loading: false, + }); + // Reset partner tenant management option + setAllowPartnerTenantManagement(false); + } + }; + + // Tenant mode options + const tenantModeOptions = [ + { + label: "GDAP - Uses your partner center to connect to tenants", + value: "GDAP", + }, + { + label: "Per Tenant - Add each tenant individually", + value: "perTenant", + }, + { + label: "Mixed - Use Partner Center and add tenants individually", + value: "mixed", + }, + ]; + + // Handle GDAP authentication success + const handleGdapAuthSuccess = (tokenData) => { + setGdapAuthStatus({ + success: false, + loading: true, + }); + + // Send the refresh token to the API + updateRefreshToken.mutate({ + url: "/api/ExecUpdateRefreshToken", + data: { + tenantId: tokenData.tenantId, + refreshToken: tokenData.refreshToken, + tenantMode: tenantMode === "mixed" ? "GDAP" : tenantMode, + allowPartnerTenantManagement: tenantMode === "GDAP" ? allowPartnerTenantManagement : false, + }, + }); + }; + + // Handle perTenant authentication success + const handlePerTenantAuthSuccess = (tokenData) => { + setPerTenantAuthStatus({ + success: false, + loading: true, + }); + + // Send the refresh token to the API + updateRefreshToken.mutate({ + url: "/api/ExecUpdateRefreshToken", + data: { + tenantId: tokenData.tenantId, + refreshToken: tokenData.refreshToken, + tenantMode: tenantMode === "mixed" ? "perTenant" : tenantMode, + }, + }); + }; + + // Update status when API call completes + useEffect(() => { + if (updateRefreshToken.isSuccess) { + const data = updateRefreshToken.data; + + if (data.state === "error") { + if (tenantMode === "GDAP" || (tenantMode === "mixed" && gdapAuthStatus.loading)) { + setGdapAuthStatus({ + success: false, + loading: false, + }); + } else { + setPerTenantAuthStatus({ + success: false, + loading: false, + }); + } + } else if (data.state === "success") { + if (tenantMode === "GDAP" || (tenantMode === "mixed" && gdapAuthStatus.loading)) { + setGdapAuthStatus({ + success: true, + loading: false, + }); + // Allow user to proceed to next step if not in mixed mode + if (tenantMode !== "mixed") { + formControl.setValue("tenantModeSet", true); + } + } else { + setPerTenantAuthStatus({ + success: true, + loading: false, + }); + // Allow user to proceed to next step + formControl.setValue("tenantModeSet", true); + + // Refresh tenant list for perTenant mode + if (tenantMode === "perTenant") { + tenantList.refetch(); + } + } + } + } + }, [updateRefreshToken.isSuccess, updateRefreshToken.data]); + + // Handle API error + useEffect(() => { + if (updateRefreshToken.isError) { + if (tenantMode === "GDAP" || (tenantMode === "mixed" && gdapAuthStatus.loading)) { + setGdapAuthStatus({ + success: false, + loading: false, + }); + } else { + setPerTenantAuthStatus({ + success: false, + loading: false, + }); + } + } + }, [updateRefreshToken.isError]); + + return ( + + + Select how you want to connect to your tenants. You have three options: +
      +
    • + GDAP: Use delegated administration (recommended) +
    • +
    • + Per Tenant: Authenticate to each tenant individually +
    • +
    • + Mixed: Use both GDAP and per-tenant authentication +
    • +
    +
    + + {/* Tenant mode selection */} + + + Tenant Connection Mode + + option.value === tenantMode)} + onChange={handleTenantModeChange} + multiple={false} + required={true} + /> + + + + + {/* Show API results */} + + + {/* GDAP Authentication Section */} + {(tenantMode === "GDAP" || tenantMode === "mixed") && ( + + + GDAP Authentication + + + {/* Show success message when authentication is successful */} + {gdapAuthStatus.success && ( + + GDAP authentication successful. You can now proceed to the next step. + + )} + + {/* GDAP Partner Tenant Management Switch */} + setAllowPartnerTenantManagement(e.target.checked)} + color="primary" + /> + } + label="Allow management of the partner tenant" + /> + + {/* Show authenticate button only if not successful yet */} + {(!gdapAuthStatus.success || gdapAuthStatus.loading) && ( + + + + + + )} + + )} + + {/* Per Tenant Authentication Section */} + {(tenantMode === "perTenant" || (tenantMode === "mixed" && gdapAuthStatus.success)) && ( + + + Per-Tenant Authentication + + + {/* Show success message when authentication is successful */} + {perTenantAuthStatus.success && ( + + Per-tenant authentication successful. You can add another tenant or proceed to the + next step. + + )} + + {/* Show authenticate button */} + + + + {(perTenantAuthStatus.loading || updateRefreshToken.isLoading) && ( + + )} + + + + {/* List authenticated tenants for perTenant mode */} + {tenantMode === "perTenant" && authenticatedTenants.length > 0 && ( + + + Authenticated Tenants + + + + {authenticatedTenants.map((tenant, index) => ( + + + + ))} + + + + )} + + )} + + +
    + ); +}; + +export default CippTenantModeDeploy; diff --git a/src/components/CippWizard/CippWizardConfirmation.js b/src/components/CippWizard/CippWizardConfirmation.jsx similarity index 100% rename from src/components/CippWizard/CippWizardConfirmation.js rename to src/components/CippWizard/CippWizardConfirmation.jsx diff --git a/src/pages/authredirect.js b/src/pages/authredirect.js new file mode 100644 index 000000000000..892b712bdc47 --- /dev/null +++ b/src/pages/authredirect.js @@ -0,0 +1,46 @@ +import { Box, Container, Grid, Stack } from "@mui/material"; +import Head from "next/head"; +import { CippImageCard } from "../components/CippCards/CippImageCard.jsx"; +import { Layout as DashboardLayout } from "../layouts/index.js"; + +const Page = () => ( + <> + + + Authentication complete + + + + + + + + + + + + + + +); + +export default Page; diff --git a/src/pages/onboardingv2.js b/src/pages/onboardingv2.js index f2cb811cedc7..ba5890e30d46 100644 --- a/src/pages/onboardingv2.js +++ b/src/pages/onboardingv2.js @@ -1,9 +1,10 @@ import { Layout as DashboardLayout } from "../layouts/index.js"; -import { CippWizardConfirmation } from "../components/CippWizard/CippWizardConfirmation.js"; -import { CippDeploymentStep } from "../components/CippWizard/CIPPDeploymentStep.js"; +import { CippWizardConfirmation } from "../components/CippWizard/CippWizardConfirmation.jsx"; +import { CippDeploymentStep } from "../components/CippWizard/CIPPDeploymentStep.jsx"; import CippWizardPage from "../components/CippWizard/CippWizardPage.jsx"; import { CippWizardOptionsList } from "../components/CippWizard/CippWizardOptionsList.jsx"; -import { CippSAMDeploy } from "../components/CippWizard/CippSAMDeploy.js"; +import { CippSAMDeploy } from "../components/CippWizard/CippSAMDeploy.jsx"; +import { CippTenantModeDeploy } from "../components/CippWizard/CippTenantModeDeploy.jsx"; import { BuildingOfficeIcon, CloudIcon, CpuChipIcon } from "@heroicons/react/24/outline"; const Page = () => { @@ -58,19 +59,11 @@ const Page = () => { title: "Step 2", description: "Application", component: CippSAMDeploy, - componentProps: { - title: "SAM Application Setup", - subtext: "This step will create or update the SAM application in your tenant.", - }, }, { title: "Step 3", description: "Tenants", - component: CippDeploymentStep, - //set the tenant mode to "GDAP", "perTenant" or "mixed". - //if the tenant mode is set to GDAP, show MSAL button to update token. Send to /api/ExecUpdateRefreshToken with body { "tenantId": tenantId, "refreshToken": refreshToken, "tenantMode": "GDAP" } - //if the tenant mode is set to perTenant, show MSAL button to get token. Send to /api/ExecUpdateRefreshToken with body { "tenantId": tenantId, "refreshToken": refreshToken, "tenantMode": "perTenant" }. List each tenant that has authenticated and been added. - //if the tenant mode is set to mixed, show first MSAL button to update GDAP access, then show second MSAL button to update perTenant access. Send to /api/ExecUpdateRefreshToken with body { "tenantId": tenantId, "refreshToken": refreshToken, "tenantMode": "mixed" } + component: CippTenantModeDeploy, }, { title: "Step 4", diff --git a/src/pages/tenant/administration/tenants/add.js b/src/pages/tenant/administration/tenants/add.js index 68235a1135a8..cdfa1b05143d 100644 --- a/src/pages/tenant/administration/tenants/add.js +++ b/src/pages/tenant/administration/tenants/add.js @@ -3,7 +3,7 @@ import CippWizardPage from "../../../../components/CippWizard/CippWizardPage.jsx import { CippWizardOptionsList } from "../../../../components/CippWizard/CippWizardOptionsList.jsx"; import { CippAddTenantForm } from "../../../../components/CippWizard/CippAddTenantForm.jsx"; import { BuildingOfficeIcon, CloudIcon } from "@heroicons/react/24/outline"; -import CippWizardConfirmation from "../../../../components/CippWizard/CippWizardConfirmation.js"; +import CippWizardConfirmation from "../../../../components/CippWizard/CippWizardConfirmation.jsx"; const Page = () => { const steps = [ From 4592916e5175e3e31f72f727221cdff57c247f9b Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Sun, 18 May 2025 23:22:40 +0200 Subject: [PATCH 0662/1184] Updates for single tenant mode --- .../CippComponents/CIPPM365OAuthButton.jsx | 2 + .../CippWizard/CippTenantModeDeploy.jsx | 231 +++++++++--------- 2 files changed, 119 insertions(+), 114 deletions(-) diff --git a/src/components/CippComponents/CIPPM365OAuthButton.jsx b/src/components/CippComponents/CIPPM365OAuthButton.jsx index 6241823034c7..83eae0dc7ebe 100644 --- a/src/components/CippComponents/CIPPM365OAuthButton.jsx +++ b/src/components/CippComponents/CIPPM365OAuthButton.jsx @@ -433,6 +433,8 @@ export const CIPPM365OAuthButton = ({ body: JSON.stringify({ tenantId: appId, refreshtoken: tokenData.refresh_token, + tenantMode: tokenData.tenantMode, + allowPartnerTenantManagement: tokenData.allowPartnerTenantManagement, }), }); diff --git a/src/components/CippWizard/CippTenantModeDeploy.jsx b/src/components/CippWizard/CippTenantModeDeploy.jsx index a478e8ea3b25..93b49e5bb2c5 100644 --- a/src/components/CippWizard/CippTenantModeDeploy.jsx +++ b/src/components/CippWizard/CippTenantModeDeploy.jsx @@ -34,8 +34,9 @@ export const CippTenantModeDeploy = (props) => { }); const [authenticatedTenants, setAuthenticatedTenants] = useState([]); - // API call to update refresh token + // API calls const updateRefreshToken = ApiPostCall({ urlfromdata: true }); + const addTenant = ApiPostCall({ urlfromdata: true }); // API call to get list of authenticated tenants (for perTenant mode) const tenantList = ApiGetCall({ @@ -45,7 +46,7 @@ export const CippTenantModeDeploy = (props) => { // Update authenticated tenants list when tenantList changes useEffect(() => { - if (tenantList.data && tenantMode === "perTenant") { + if (tenantList.data && (tenantMode === "perTenant" || tenantMode === "mixed")) { setAuthenticatedTenants(tenantList.data); } }, [tenantList.data, tenantMode]); @@ -87,100 +88,65 @@ export const CippTenantModeDeploy = (props) => { // Handle GDAP authentication success const handleGdapAuthSuccess = (tokenData) => { setGdapAuthStatus({ - success: false, - loading: true, + success: true, + loading: false, }); - // Send the refresh token to the API - updateRefreshToken.mutate({ - url: "/api/ExecUpdateRefreshToken", - data: { - tenantId: tokenData.tenantId, - refreshToken: tokenData.refreshToken, - tenantMode: tenantMode === "mixed" ? "GDAP" : tenantMode, - allowPartnerTenantManagement: tenantMode === "GDAP" ? allowPartnerTenantManagement : false, - }, - }); + // Allow user to proceed to next step for GDAP mode + if (tenantMode === "GDAP") { + formControl.setValue("tenantModeSet", true); + } else if (tenantMode === "mixed") { + // For mixed mode, allow proceeding if either authentication is successful + formControl.setValue("tenantModeSet", true); + } }; // Handle perTenant authentication success const handlePerTenantAuthSuccess = (tokenData) => { setPerTenantAuthStatus({ - success: false, - loading: true, - }); - - // Send the refresh token to the API - updateRefreshToken.mutate({ - url: "/api/ExecUpdateRefreshToken", - data: { - tenantId: tokenData.tenantId, - refreshToken: tokenData.refreshToken, - tenantMode: tenantMode === "mixed" ? "perTenant" : tenantMode, - }, + success: true, + loading: false, }); - }; - // Update status when API call completes - useEffect(() => { - if (updateRefreshToken.isSuccess) { - const data = updateRefreshToken.data; + // For perTenant mode or mixed mode with perTenant auth, add the tenant to the cache + if (tenantMode === "perTenant" || tenantMode === "mixed") { + // Call the AddTenant API to add the tenant to the cache with directTenant status + addTenant.mutate({ + url: "/api/ExecAddTenant", + data: { + tenantId: tokenData.tenantId, + }, + }); + } - if (data.state === "error") { - if (tenantMode === "GDAP" || (tenantMode === "mixed" && gdapAuthStatus.loading)) { - setGdapAuthStatus({ - success: false, - loading: false, - }); - } else { - setPerTenantAuthStatus({ - success: false, - loading: false, - }); - } - } else if (data.state === "success") { - if (tenantMode === "GDAP" || (tenantMode === "mixed" && gdapAuthStatus.loading)) { - setGdapAuthStatus({ - success: true, - loading: false, - }); - // Allow user to proceed to next step if not in mixed mode - if (tenantMode !== "mixed") { - formControl.setValue("tenantModeSet", true); - } - } else { - setPerTenantAuthStatus({ - success: true, - loading: false, - }); - // Allow user to proceed to next step - formControl.setValue("tenantModeSet", true); + // Allow user to proceed to next step + formControl.setValue("tenantModeSet", true); - // Refresh tenant list for perTenant mode - if (tenantMode === "perTenant") { - tenantList.refetch(); - } - } - } + // Refresh tenant list for perTenant and mixed modes + if (tenantMode === "perTenant" || tenantMode === "mixed") { + tenantList.refetch(); } - }, [updateRefreshToken.isSuccess, updateRefreshToken.data]); + }; // Handle API error useEffect(() => { - if (updateRefreshToken.isError) { - if (tenantMode === "GDAP" || (tenantMode === "mixed" && gdapAuthStatus.loading)) { - setGdapAuthStatus({ - success: false, - loading: false, - }); - } else { - setPerTenantAuthStatus({ - success: false, - loading: false, - }); - } + if (addTenant.isError) { + setPerTenantAuthStatus({ + success: false, + loading: false, + }); + } + }, [addTenant.isError]); + + // Handle AddTenant API response + useEffect(() => { + if (addTenant.isSuccess) { + console.log("Tenant added to cache successfully:", addTenant.data); + } else if (addTenant.isError) { + console.error("Failed to add tenant to cache:", addTenant.error); } - }, [updateRefreshToken.isError]); + }, [addTenant.isSuccess, addTenant.isError]); + return ( @@ -217,19 +183,31 @@ export const CippTenantModeDeploy = (props) => { {/* Show API results */} - + + {addTenant.isSuccess && ( + + Tenant successfully added to the cache. + + )} + {addTenant.isError && ( + + Failed to add tenant to the cache: {addTenant.error?.message || "Unknown error"} + + )} {/* GDAP Authentication Section */} {(tenantMode === "GDAP" || tenantMode === "mixed") && ( - GDAP Authentication + Partner Tenant {/* Show success message when authentication is successful */} {gdapAuthStatus.success && ( - GDAP authentication successful. You can now proceed to the next step. + {tenantMode === "mixed" + ? "GDAP authentication successful. You can now proceed to the next step or connect to separate tenants below." + : "GDAP authentication successful. You can now proceed to the next step."} )} @@ -242,7 +220,7 @@ export const CippTenantModeDeploy = (props) => { color="primary" /> } - label="Allow management of the partner tenant" + label="Allow management of the partner tenant." /> {/* Show authenticate button only if not successful yet */} @@ -250,8 +228,18 @@ export const CippTenantModeDeploy = (props) => { { + // Add the tenantMode and allowPartnerTenantManagement parameters to the tokenData + const updatedTokenData = { + ...tokenData, + tenantMode: tenantMode === "mixed" ? "GDAP" : tenantMode, + allowPartnerTenantManagement: allowPartnerTenantManagement, + }; + handleGdapAuthSuccess(updatedTokenData); + }} + buttonText={ + tenantMode === "mixed" ? "Connect to GDAP" : "Authenticate with Microsoft GDAP" + } showSuccessAlert={false} /> @@ -261,7 +249,7 @@ export const CippTenantModeDeploy = (props) => { )} {/* Per Tenant Authentication Section */} - {(tenantMode === "perTenant" || (tenantMode === "mixed" && gdapAuthStatus.success)) && ( + {(tenantMode === "perTenant" || tenantMode === "mixed") && ( Per-Tenant Authentication @@ -270,45 +258,60 @@ export const CippTenantModeDeploy = (props) => { {/* Show success message when authentication is successful */} {perTenantAuthStatus.success && ( - Per-tenant authentication successful. You can add another tenant or proceed to the - next step. + {tenantMode === "mixed" + ? "Tenant authentication successful. You can add another tenant or proceed to the next step." + : "Per-tenant authentication successful. You can add another tenant or proceed to the next step."} )} + + {tenantMode === "mixed" + ? "Click the button below to connect to individual tenants. You can authenticate to multiple tenants one by one." + : "You can click the button below to authenticate to a tenant. Perform this authentication for every tenant you wish to manage using CIPP."} + {/* Show authenticate button */} { + // Add the tenantMode parameter to the tokenData + const updatedTokenData = { + ...tokenData, + tenantMode: tenantMode === "mixed" ? "perTenant" : tenantMode, + }; + handlePerTenantAuthSuccess(updatedTokenData); + }} + buttonText={ + tenantMode === "mixed" + ? "Connect to Separate Tenants" + : "Authenticate with Microsoft" + } showSuccessAlert={false} /> - {(perTenantAuthStatus.loading || updateRefreshToken.isLoading) && ( - - )} - {/* List authenticated tenants for perTenant mode */} - {tenantMode === "perTenant" && authenticatedTenants.length > 0 && ( - - - Authenticated Tenants - - - - {authenticatedTenants.map((tenant, index) => ( - - - - ))} - - - - )} + {/* List authenticated tenants for perTenant and mixed modes */} + {(tenantMode === "perTenant" || tenantMode === "mixed") && + authenticatedTenants.length > 0 && ( + + + Authenticated Tenants + + + + {authenticatedTenants.map((tenant, index) => ( + + + + ))} + + + + )} )} From 573fc22c5f5a6aedc6c0693a57d217681d7a4595 Mon Sep 17 00:00:00 2001 From: KelvinTegelaar <49186168+KelvinTegelaar@users.noreply.github.com> Date: Mon, 19 May 2025 10:59:51 +0200 Subject: [PATCH 0663/1184] changes --- src/components/CippWizard/CippTenantModeDeploy.jsx | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/components/CippWizard/CippTenantModeDeploy.jsx b/src/components/CippWizard/CippTenantModeDeploy.jsx index 93b49e5bb2c5..d0eee14a96e6 100644 --- a/src/components/CippWizard/CippTenantModeDeploy.jsx +++ b/src/components/CippWizard/CippTenantModeDeploy.jsx @@ -147,7 +147,6 @@ export const CippTenantModeDeploy = (props) => { } }, [addTenant.isSuccess, addTenant.isError]); - return ( @@ -202,14 +201,7 @@ export const CippTenantModeDeploy = (props) => { Partner Tenant - {/* Show success message when authentication is successful */} - {gdapAuthStatus.success && ( - - {tenantMode === "mixed" - ? "GDAP authentication successful. You can now proceed to the next step or connect to separate tenants below." - : "GDAP authentication successful. You can now proceed to the next step."} - - )} + {/* GDAP Partner Tenant Management Switch */} Date: Mon, 19 May 2025 17:06:43 +0800 Subject: [PATCH 0664/1184] Passthrough default sorting to CippTablePage to use in Tenant Groups List --- src/components/CippComponents/CippTablePage.jsx | 2 ++ src/pages/tenant/administration/tenants/groups/index.js | 1 + 2 files changed, 3 insertions(+) diff --git a/src/components/CippComponents/CippTablePage.jsx b/src/components/CippComponents/CippTablePage.jsx index eb75f6cc1ad1..60a50c974dc3 100644 --- a/src/components/CippComponents/CippTablePage.jsx +++ b/src/components/CippComponents/CippTablePage.jsx @@ -25,6 +25,7 @@ export const CippTablePage = (props) => { tableFilter, tenantInTitle = true, filters, + defaultSorting = [], sx = { flexGrow: 1, py: 4 }, ...other } = props; @@ -65,6 +66,7 @@ export const CippTablePage = (props) => { columnsFromApi={columnsFromApi} offCanvas={offCanvas} filters={tableFilters} + defaultSorting={defaultSorting} initialState={{ columnFilters: filters ? filters.map(filter => ({ id: filter.id || filter.columnId, diff --git a/src/pages/tenant/administration/tenants/groups/index.js b/src/pages/tenant/administration/tenants/groups/index.js index 8d3e4c328ceb..d8d201634969 100644 --- a/src/pages/tenant/administration/tenants/groups/index.js +++ b/src/pages/tenant/administration/tenants/groups/index.js @@ -38,6 +38,7 @@ const Page = () => { queryKey="TenantGroupListPage" apiDataKey="Results" actions={actions} + defaultSorting={[{ id: "Name", desc: false }]} cardButton={ + + + { + setOffcanvasVisible(false); + }} + > + + + {`${cat}.${obj}`} + + + Listed below are the available API endpoints based on permission level, ReadWrite + level includes endpoints under Read. + + {[apiPermissions[cat][obj]].map((permissions, key) => { + var sections = Object.keys(permissions).map((type) => { + var items = []; + for (var api in permissions[type]) { + items.push({ heading: "", content: permissions[type][api] }); + } + return ( + + {type} + + {items.map((item, idx) => ( + + {item.content} + + ))} + + + ); + }); + return sections; + })} + + + + ); + }; + + return ( + <> + + + + {!selectedRole && ( + + )} + {selectedRole && isBaseRole && ["admin", "superadmin"].includes(selectedRole) && ( + }> + This is a highly privileged role and overrides any custom role restrictions. + + )} + {cippApiRoleSelected && ( + + This is the default role for all API clients in the CIPP-API integration. If you + would like different permissions for specific applications, create a role per + application and select it from the CIPP-API integrations page. + + )} + + + {!isBaseRole && ( + <> + + + {allTenantSelected && blockedTenants?.length == 0 && ( + + All tenants selected, no tenant restrictions will be applied unless blocked + tenants are specified. + + )} + + {allTenantSelected && ( + + + + )} + + )} + {apiPermissionFetching && } + {apiPermissionSuccess && ( + <> + API Permissions + {!isBaseRole && ( + + Set All Permissions + + + + + + )} + + <> + {Object.keys(apiPermissions) + .sort() + .map((cat, catIndex) => ( + + }>{cat} + + {Object.keys(apiPermissions[cat]) + .sort() + .map((obj, index) => { + const readOnly = baseRolePermissions?.[cat] ? true : false; + return ( + + + + ); + })} + + + ))} + + + + )} + + + + {selectedEntraGroup && ( + + This role will be assigned to the Entra Group:{" "} + {selectedEntraGroup.label} + + )} + {selectedTenant?.length > 0 && ( + <> +
    Allowed Tenants
    +
      + {selectedTenant.map((tenant, idx) => ( +
    • {tenant?.label}
    • + ))} +
    + + )} + {blockedTenants?.length > 0 && ( + <> +
    Blocked Tenants
    +
      + {blockedTenants.map((tenant, idx) => ( +
    • {tenant?.label}
    • + ))} +
    + + )} + {selectedPermissions && apiPermissionSuccess && ( + <> +
    Selected Permissions
    +
      + {selectedPermissions && + Object.keys(selectedPermissions) + ?.sort() + .map((cat, idx) => ( + <> + {selectedPermissions?.[cat] && + typeof selectedPermissions[cat] === "string" && + !selectedPermissions[cat]?.includes("None") && ( +
    • {selectedPermissions[cat]}
    • + )} + + ))} +
    + + )} +
    +
    + + + + + + + ); +}; + +export default CippRoleAddEdit; diff --git a/src/components/CippSettings/CippRoles.jsx b/src/components/CippSettings/CippRoles.jsx new file mode 100644 index 000000000000..15766897d4f4 --- /dev/null +++ b/src/components/CippSettings/CippRoles.jsx @@ -0,0 +1,115 @@ +import React from "react"; +import { Box, Button, SvgIcon } from "@mui/material"; +import { CippDataTable } from "../CippTable/CippDataTable"; +import { PencilIcon, TrashIcon } from "@heroicons/react/24/outline"; +import NextLink from "next/link"; +import { CippPropertyListCard } from "../../components/CippCards/CippPropertyListCard"; +import { getCippTranslation } from "../../utils/get-cipp-translation"; +import { getCippFormatting } from "../../utils/get-cipp-formatting"; +import { Stack } from "@mui/system"; +import { CippCopyToClipBoard } from "../CippComponents/CippCopyToClipboard"; + +const CippRoles = () => { + const actions = [ + { + label: "Edit", + icon: ( + + + + ), + link: "/cipp/super-admin/cipp-roles/edit?role=[RoleName]", + }, + { + label: "Delete", + icon: ( + + + + ), + confirmText: "Are you sure you want to delete this custom role?", + url: "/api/ExecCustomRole", + type: "POST", + data: { + Action: "Delete", + RoleName: "RoleName", + }, + condition: (row) => row?.Type === "Custom", + relatedQueryKeys: ["customRoleList"], + }, + ]; + + const offCanvas = { + children: (data) => { + const includeProps = ["RoleName", "Type", "EntraGroup", "AllowedTenants", "BlockedTenants"]; + const keys = includeProps.filter((key) => Object.keys(data).includes(key)); + const properties = []; + keys.forEach((key) => { + if (data[key] && data[key].length > 0) { + properties.push({ + label: getCippTranslation(key), + value: getCippFormatting(data[key], key), + }); + } + }); + + if (data["Permissions"] && Object.keys(data["Permissions"]).length > 0) { + properties.push({ + label: "Permissions", + value: ( + + {Object.keys(data["Permissions"]) + .sort() + .map((permission, idx) => ( + + + + ))} + + ), + }); + } + + return ( + + ); + }, + }; + + return ( + + + + + } + component={NextLink} + href="/cipp/super-admin/cipp-roles/add" + > + Add Role + + } + api={{ + url: "/api/ListCustomRole", + }} + queryKey="customRoleTable" + simpleColumns={["RoleName", "Type", "EntraGroup", "AllowedTenants", "BlockedTenants"]} + offCanvas={offCanvas} + /> + + ); +}; + +export default CippRoles; diff --git a/src/components/PrivateRoute.js b/src/components/PrivateRoute.js index 011886bc4499..10e41a3dbb98 100644 --- a/src/components/PrivateRoute.js +++ b/src/components/PrivateRoute.js @@ -1,5 +1,6 @@ import { ApiGetCall } from "../api/ApiCall.jsx"; import UnauthenticatedPage from "../pages/unauthenticated.js"; +import LoadingPage from "../pages/loading.js"; export const PrivateRoute = ({ children, routeType }) => { const { @@ -7,27 +8,39 @@ export const PrivateRoute = ({ children, routeType }) => { error, isLoading, } = ApiGetCall({ - url: "/.auth/me", + url: "/api/me", queryKey: "authmecipp", refetchOnWindowFocus: true, + }); + + const session = ApiGetCall({ + url: "/.auth/me", + queryKey: "authmeswa", + refetchOnWindowFocus: true, staleTime: 120000, // 2 minutes }); + // if not logged into swa + if (null === session?.data?.clientPrincipal || session?.data === undefined) { + return ; + } + if (isLoading) { - return "Loading..."; + return ; } let roles = null; - if (null !== profile?.clientPrincipal) { - roles = profile?.clientPrincipal.userRoles; - } else if (null === profile?.clientPrincipal) { + + if (null !== profile?.clientPrincipal && undefined !== profile) { + roles = profile?.clientPrincipal?.userRoles; + } else if (null === profile?.clientPrincipal || undefined === profile) { return ; } if (null === roles) { return ; } else { const blockedRoles = ["anonymous", "authenticated"]; - const userRoles = roles.filter((role) => !blockedRoles.includes(role)); + const userRoles = roles?.filter((role) => !blockedRoles.includes(role)) ?? []; const isAuthenticated = userRoles.length > 0 && !error; const isAdmin = roles.includes("admin"); if (routeType === "admin") { diff --git a/src/data/cipp-roles.json b/src/data/cipp-roles.json new file mode 100644 index 000000000000..f95e32fa18c6 --- /dev/null +++ b/src/data/cipp-roles.json @@ -0,0 +1,23 @@ +{ + "readonly": { + "include": ["*.Read"], + "exclude": ["CIPP.SuperAdmin.*"] + }, + "editor": { + "include": ["*.Read", "*.ReadWrite"], + "exclude": [ + "CIPP.SuperAdmin.*", + "CIPP.Admin.*", + "CIPP.AppSettings.*", + "Tenant.Standards.ReadWrite" + ] + }, + "admin": { + "include": ["*"], + "exclude": ["CIPP.SuperAdmin.*"] + }, + "superadmin": { + "include": ["*"], + "exclude": [] + } +} diff --git a/src/layouts/account-popover.js b/src/layouts/account-popover.js index ab6b9a11155b..6f16a30e8788 100644 --- a/src/layouts/account-popover.js +++ b/src/layouts/account-popover.js @@ -38,10 +38,8 @@ export const AccountPopover = (props) => { const popover = usePopover(); const orgData = ApiGetCall({ - url: "/.auth/me", + url: "/api/me", queryKey: "authmecipp", - staleTime: 120000, - refetchOnWindowFocus: true, }); const handleLogout = useCallback(async () => { diff --git a/src/layouts/index.js b/src/layouts/index.js index ddd1b2460645..5a6c9d86b701 100644 --- a/src/layouts/index.js +++ b/src/layouts/index.js @@ -82,13 +82,20 @@ export const Layout = (props) => { const [menuItems, setMenuItems] = useState(nativeMenuItems); const currentTenant = settings?.currentTenant; const currentRole = ApiGetCall({ - url: "/.auth/me", + url: "/api/me", queryKey: "authmecipp", staleTime: 120000, refetchOnWindowFocus: true, }); const [hideSidebar, setHideSidebar] = useState(false); + const swaStatus = ApiGetCall({ + url: "/.auth/me", + queryKey: "authmeswa", + staleTime: 120000, + refetchOnWindowFocus: true, + }); + useEffect(() => { if (currentRole.isSuccess && !currentRole.isFetching) { const userRoles = currentRole.data?.clientPrincipal?.userRoles; @@ -118,8 +125,15 @@ export const Layout = (props) => { const filteredMenu = filterItemsByRole(nativeMenuItems); setMenuItems(filteredMenu); + } else if ( + swaStatus.isLoading || + swaStatus.data?.clientPrincipal === null || + swaStatus.data === undefined || + currentRole.isLoading + ) { + setHideSidebar(true); } - }, [currentRole.isSuccess]); + }, [currentRole.isSuccess, swaStatus.data, swaStatus.isLoading]); const handleNavPin = useCallback(() => { settings.handleUpdate({ @@ -181,11 +195,11 @@ export const Layout = (props) => { }); useEffect(() => { - if (version.isFetched && !alertsAPI.isFetched) { + if (!hideSidebar && version.isFetched && !alertsAPI.isFetched) { alertsAPI.waiting = true; alertsAPI.refetch(); } - }, [version, alertsAPI]); + }, [version, alertsAPI, hideSidebar]); useEffect(() => { if (alertsAPI.isSuccess && !alertsAPI.isFetching) { @@ -238,6 +252,27 @@ export const Layout = (props) => { }} > + + Setup Wizard + + + + + {!setupCompleted && ( + + + + Setup has not been completed. + + + + + )} {(currentTenant === "AllTenants" || !currentTenant) && !allTenantsSupport ? ( @@ -255,30 +290,7 @@ export const Layout = (props) => { ) : ( - <> - - Setup Wizard - - - - - {!setupCompleted && ( - - - - Setup has not been completed. - - - - - )} - {children} - + <>{children} )}