diff --git a/packages/libs/sdk-mixins/jest.config.cjs b/packages/libs/sdk-mixins/jest.config.cjs index fdd6efcd1..e03b3ce37 100644 --- a/packages/libs/sdk-mixins/jest.config.cjs +++ b/packages/libs/sdk-mixins/jest.config.cjs @@ -9,10 +9,10 @@ module.exports = { collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}'], coverageThreshold: { global: { - branches: 80, - functions: 93.5, - lines: 93.5, - statements: 93.5, + branches: 12, + functions: 17, + lines: 36, + statements: 36, }, }, // A set of global variables that need to be available in all test environments diff --git a/packages/libs/sdk-mixins/package.json b/packages/libs/sdk-mixins/package.json index e10a6cd3d..2c66e2b21 100644 --- a/packages/libs/sdk-mixins/package.json +++ b/packages/libs/sdk-mixins/package.json @@ -21,7 +21,7 @@ "default": "./dist/cjs/index.js" } }, - "./themeMixin": { + "./theme-mixin": { "import": { "types": "./dist/index.d.ts", "default": "./dist/esm/mixins/themeMixin/index.js" @@ -30,13 +30,23 @@ "types": "./dist/index.d.ts", "default": "./dist/cjs/mixins/themeMixin/index.js" } + }, + "./static-resources-mixin": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/esm/mixins/staticResourcesMixin/index.js" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/cjs/mixins/staticResourcesMixin/index.js" + } } }, "type": "module", "description": "Descope JavaScript SDK mixins", "scripts": { "build": "rimraf dist && rollup -c", - "test": "echo no tests yet", + "test": "jest", "lint": "eslint '+(src|test|examples)/**/*.ts'" }, "license": "MIT", diff --git a/packages/libs/sdk-mixins/rollup.config.mjs b/packages/libs/sdk-mixins/rollup.config.mjs index d46c5c77e..9ea822e27 100644 --- a/packages/libs/sdk-mixins/rollup.config.mjs +++ b/packages/libs/sdk-mixins/rollup.config.mjs @@ -10,7 +10,11 @@ import noEmit from 'rollup-plugin-no-emit'; import packageJson from './package.json' assert { type: 'json' }; -const input = ['./src/index.ts', './src/mixins/themeMixin/index.ts']; +const input = [ + './src/index.ts', + './src/mixins/themeMixin/index.ts', + './src/mixins/staticResourcesMixin/index.ts', +]; const external = (id) => !id.startsWith('\0') && !id.startsWith('.') && !id.startsWith('/'); diff --git a/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/fetchWithFallbacks.ts b/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/fetchWithFallbacks.ts new file mode 100644 index 000000000..3509ef7c9 --- /dev/null +++ b/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/fetchWithFallbacks.ts @@ -0,0 +1,40 @@ +import { Logger } from '../loggerMixin'; + +type FetchParams = Parameters; +const notLastMsgSuffix = 'Trying the next fallback URL...'; + +export const fetchWithFallbacks = async ( + fallbacks: FetchParams['0'] | FetchParams['0'][], + init: FetchParams['1'], + { + logger, + onSuccess, + }: { logger?: Logger; onSuccess?: (urlIndex: number) => void }, +): ReturnType => { + const fallbacksArr = Array.isArray(fallbacks) ? fallbacks : [fallbacks]; + + for (let index = 0; index < fallbacksArr.length; index++) { + const url = fallbacksArr[index]; + const isLast = index === fallbacksArr.length - 1; + + try { + const res = await fetch(url.toString(), init); + if (res.ok) { + onSuccess?.(index); + return res; + } + + const errMsg = `Error fetching URL ${url} [${res.status}]`; + + if (isLast) throw new Error(errMsg); + + logger?.debug(`${errMsg}. ${notLastMsgSuffix}`); + } catch (e) { + const errMsg = `Error fetching URL ${url} [${e.message}]`; + + if (isLast) throw new Error(errMsg); + + logger?.debug(`${errMsg}. ${notLastMsgSuffix}`); + } + } +}; diff --git a/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/staticResourcesMixin.ts b/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/staticResourcesMixin.ts index 676156433..a84cb2936 100644 --- a/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/staticResourcesMixin.ts +++ b/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/staticResourcesMixin.ts @@ -7,24 +7,29 @@ import { } from './constants'; import { projectIdMixin } from '../projectIdMixin'; import { baseUrlMixin } from '../baseUrlMixin'; +import { fetchWithFallbacks } from './fetchWithFallbacks'; type Format = 'text' | 'json'; +type CustomUrl = URL & { baseUrl: string }; + export function getResourceUrl({ projectId, filename, assetsFolder = ASSETS_FOLDER, - baseUrl, + baseUrl = BASE_CONTENT_URL, }: { projectId: string; filename: string; assetsFolder?: string; baseUrl?: string; }) { - const url = new URL(OVERRIDE_CONTENT_URL || baseUrl || BASE_CONTENT_URL); + const url: CustomUrl = new URL(baseUrl) as any; url.pathname = pathJoin(url.pathname, projectId, assetsFolder, filename); + // we want to keep the baseUrl so we can use it later + url.baseUrl = baseUrl; - return url.toString(); + return url; } export const staticResourcesMixin = createSingletonMixin( @@ -35,7 +40,56 @@ export const staticResourcesMixin = createSingletonMixin( baseUrlMixin, )(superclass); + // the logic should be as following: + // if there is a local storage override, use it + // otherwise, if there is a base-static-url attribute, use it + // otherwise, try to use base-url, and check if it's working + // if it's working, use it + // if not, use the default content url return class StaticResourcesMixinClass extends BaseClass { + #lastBaseUrl?: string; + #workingBaseUrl?: string; + + #getResourceUrls(filename: string): CustomUrl[] | CustomUrl { + const overrideUrl = OVERRIDE_CONTENT_URL || this.baseStaticUrl; + + if (overrideUrl) { + return getResourceUrl({ + projectId: this.projectId, + filename, + baseUrl: overrideUrl, + }); + } + + const isBaseUrlUpdated = this.#lastBaseUrl !== this.baseUrl; + const shouldFallbackFetch = isBaseUrlUpdated && !!this.baseUrl; + + // if the base url has changed, reset the working base url + if (isBaseUrlUpdated) { + this.#lastBaseUrl = this.baseUrl; + this.#workingBaseUrl = undefined; + } + + const resourceUrl = getResourceUrl({ + projectId: this.projectId, + filename, + baseUrl: this.#workingBaseUrl, + }); + + // if there is no reason to check the baseUrl, generate the resource url according to the priority + if (!shouldFallbackFetch) { + return resourceUrl; + } + + const resourceUrlFromBaseUrl = getResourceUrl({ + projectId: this.projectId, + filename, + baseUrl: this.baseUrl + '/pages', + }); + + return [resourceUrlFromBaseUrl, resourceUrl]; + } + async fetchStaticResource( filename: string, format: F, @@ -43,22 +97,33 @@ export const staticResourcesMixin = createSingletonMixin( body: F extends 'json' ? Record : string; headers: Record; }> { - const resourceUrl = getResourceUrl({ - projectId: this.projectId, - filename, - baseUrl: this.baseStaticUrl, - }); - const res = await fetch(resourceUrl, { cache: 'default' }); - if (!res.ok) { - this.logger.error( - `Error fetching URL ${resourceUrl} [${res.status}]`, + const resourceUrls = this.#getResourceUrls(filename); + + // if there are multiple resource urls, it means that there are fallbacks, + // if one of the options (which is not the last) is working, we want to keep using it by updating the workingBaseUrl + const onSuccess = !Array.isArray(resourceUrls) + ? null + : (index: number) => { + if (index !== resourceUrls.length - 1) { + const { baseUrl } = resourceUrls[index]; + this.#workingBaseUrl = baseUrl; + } + }; + + try { + const res = await fetchWithFallbacks( + resourceUrls, + { cache: 'default' }, + { logger: this.logger, onSuccess }, ); - } - return { - body: await res[format](), - headers: Object.fromEntries(res.headers.entries()), - }; + return { + body: await res[format](), + headers: Object.fromEntries(res.headers.entries()), + }; + } catch (e) { + this.logger.error(e.message); + } } get baseStaticUrl() { diff --git a/packages/libs/sdk-mixins/test/staticResourcesMixin.test.ts b/packages/libs/sdk-mixins/test/staticResourcesMixin.test.ts new file mode 100644 index 000000000..b4b474b99 --- /dev/null +++ b/packages/libs/sdk-mixins/test/staticResourcesMixin.test.ts @@ -0,0 +1,149 @@ +import { staticResourcesMixin } from '../src'; + +const createResponse = async ({ + body, + statusCode = 200, +}: { + body: string; + statusCode: number; +}) => ({ + json: async () => JSON.parse(body), + text: async () => body, + ok: statusCode < 400, +}); + +const createMixin = (config: Record) => { + const MixinClass = staticResourcesMixin( + class { + getAttribute(attr: string) { + return config[attr]; + } + } as any, + ); + + const mixin = new MixinClass(); + + mixin.logger = { debug: jest.fn() }; + + return mixin; +}; + +describe('staticResourcesMixin', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + it('should fetch resource from static base url', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValue(createResponse({ body: '{}', statusCode: 400 })); + const mixin = createMixin({ + 'base-static-url': 'https://static.example.com/pages', + 'project-id': '123', + 'base-url': 'https://example.com', + }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenCalledWith( + 'https://static.example.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); + + it('should try to fetch resource from base url if there is no static content', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValue(createResponse({ body: '{}', statusCode: 400 })); + const mixin = createMixin({ + 'project-id': '123', + 'base-url': 'https://example.com', + }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://example.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 2, + 'https://static.descope.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(2); + }); + + it('should fetch resource from default url if there is no base url and base static url', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValue(createResponse({ body: '{}', statusCode: 400 })); + const mixin = createMixin({ 'project-id': '123' }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenCalledWith( + 'https://static.descope.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); + + it('should keep fetching content from base url in case it was ok', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValueOnce(createResponse({ body: '{}', statusCode: 200 })); + const mixin = createMixin({ + 'project-id': '123', + 'base-url': 'https://example.com', + }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://example.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + + globalThis.fetch = jest + .fn() + .mockResolvedValueOnce(createResponse({ body: '{}', statusCode: 400 })); + + await mixin.fetchStaticResource('file2', 'json'); + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://example.com/pages/123/v2-beta/file2', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); + + it('should not keep fetching content from base url in case it was not ok', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValueOnce(createResponse({ body: '{}', statusCode: 400 })); + const mixin = createMixin({ + 'project-id': '123', + 'base-url': 'https://example.com', + }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://example.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(2); + + globalThis.fetch = jest + .fn() + .mockResolvedValueOnce(createResponse({ body: '{}', statusCode: 400 })); + + await mixin.fetchStaticResource('file2', 'json'); + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://static.descope.com/pages/123/v2-beta/file2', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts b/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts index 4499338d4..663c10c19 100644 --- a/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts +++ b/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts @@ -1,6 +1,9 @@ -import createSdk from '@descope/web-js-sdk'; -import { themeMixin } from '@descope/sdk-mixins/themeMixin'; import { compose } from '@descope/sdk-helpers'; +// eslint-disable-next-line import/no-duplicates +import { staticResourcesMixin } from '@descope/sdk-mixins/static-resources-mixin'; +// eslint-disable-next-line import/no-duplicates +import { themeMixin } from '@descope/sdk-mixins/theme-mixin'; +import createSdk from '@descope/web-js-sdk'; import { CONFIG_FILENAME, ELEMENTS_TO_IGNORE_ENTER_KEY_ON, @@ -17,30 +20,34 @@ import { State, withMemCache, } from '../helpers'; +import { + extractNestedAttribute, + transformFlowInputFormData, +} from '../helpers/flowInputs'; import { IsChanged } from '../helpers/state'; import { formMountMixin } from '../mixins'; import { AutoFocusOptions, DebuggerMessage, DebugState, - FlowState, - FlowStateUpdateFn, - SdkConfig, DescopeUI, - ProjectConfiguration, FlowConfig, + FlowState, + FlowStateUpdateFn, FlowStatus, + ProjectConfiguration, + SdkConfig, } from '../types'; import initTemplate from './initTemplate'; -import { - extractNestedAttribute, - transformFlowInputFormData, -} from '../helpers/flowInputs'; // this is replaced in build time declare const BUILD_VERSION: string; -const BaseClass = compose(themeMixin, formMountMixin)(HTMLElement); +const BaseClass = compose( + themeMixin, + staticResourcesMixin, + formMountMixin, +)(HTMLElement); // this base class is responsible for WC initialization class BaseDescopeWc extends BaseClass { @@ -297,6 +304,8 @@ class BaseDescopeWc extends BaseClass { return config.isMissingConfig && (await this.#isPrevVerConfig()); } + // we are not using fetchStaticResource here + // because we do not want to use the fallbacks mechanism async #isPrevVerConfig() { const prevVerConfigUrl = getContentUrl({ projectId: this.projectId, @@ -314,13 +323,11 @@ class BaseDescopeWc extends BaseClass { // we want to get the config only if we don't have it already getConfig = withMemCache(async () => { - const configUrl = getContentUrl({ - projectId: this.projectId, - filename: CONFIG_FILENAME, - baseUrl: this.baseStaticUrl, - }); try { - const { body, headers } = await fetchContent(configUrl, 'json'); + const { body, headers } = await this.fetchStaticResource( + CONFIG_FILENAME, + 'json', + ); return { projectConfig: body as ProjectConfiguration, executionContext: { geo: headers['x-geo'] }, diff --git a/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts b/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts index d0fc714ff..d96e9b5ab 100644 --- a/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts +++ b/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts @@ -1,6 +1,6 @@ import { - ensureFingerprintIds, clearFingerprintData, + ensureFingerprintIds, } from '@descope/web-js-sdk'; import { CUSTOM_INTERACTIONS, @@ -15,30 +15,28 @@ import { URL_TOKEN_PARAM_NAME, } from '../constants'; import { - fetchContent, + clearPreviousExternalInputs, getAnimationDirection, - getContentUrl, getElementDescopeAttributes, + getFirstNonEmptyValue, + getUserLocale, handleAutoFocus, + handleReportValidityOnBlur, injectSamlIdpForm, isConditionalLoginSupported, - updateScreenFromScreenState, - updateTemplateFromScreenState, + leadingDebounce, setTOTPVariable, showFirstScreenOnExecutionInit, State, submitForm, - withMemCache, - getFirstNonEmptyValue, - leadingDebounce, - handleReportValidityOnBlur, - getUserLocale, - clearPreviousExternalInputs, timeoutPromise, + updateScreenFromScreenState, + updateTemplateFromScreenState, + withMemCache, } from '../helpers'; -import { calculateConditions, calculateCondition } from '../helpers/conditions'; -import { getLastAuth, setLastAuth } from '../helpers/lastAuth'; import { getABTestingKey } from '../helpers/abTestingKey'; +import { calculateCondition, calculateConditions } from '../helpers/conditions'; +import { getLastAuth, setLastAuth } from '../helpers/lastAuth'; import { IsChanged } from '../helpers/state'; import { disableWebauthnButtons, @@ -227,22 +225,25 @@ class DescopeWc extends BaseDescopeWc { return filenameWithLocale; } - async getPageContent(htmlUrl: string, htmlLocaleUrl: string) { - if (htmlLocaleUrl) { + async getPageContent(htmlFilename: string, htmlLocaleFilename: string) { + if (htmlLocaleFilename) { // try first locale url, if can't get for some reason, fallback to the original html url (the one without locale) try { - const { body } = await fetchContent(htmlLocaleUrl, 'text'); + const { body } = await this.fetchStaticResource( + htmlLocaleFilename, + 'text', + ); return body; } catch (ex) { this.loggerWrapper.error( - `Failed to fetch flow page from ${htmlLocaleUrl}. Fallback to url ${htmlUrl}`, + `Failed to fetch flow page from ${htmlLocaleFilename}. Fallback to url ${htmlFilename}`, ex, ); } } try { - const { body } = await fetchContent(htmlUrl, 'text'); + const { body } = await this.fetchStaticResource(htmlFilename, 'text'); return body; } catch (ex) { this.loggerWrapper.error(`Failed to fetch flow page`, ex.message); @@ -586,18 +587,8 @@ class DescopeWc extends BaseDescopeWc { name: this.sdk.getLastUserDisplayName() || loginId, }, }, - htmlUrl: getContentUrl({ - projectId, - filename: `${readyScreenId}.html`, - baseUrl: this.baseStaticUrl, - }), - htmlLocaleUrl: - filenameWithLocale && - getContentUrl({ - projectId, - filename: filenameWithLocale, - baseUrl: this.baseStaticUrl, - }), + htmlFilename: `${readyScreenId}.html`, + htmlLocaleFilename: filenameWithLocale, samlIdpUsername, oidcLoginHint, oidcPrompt, @@ -963,8 +954,8 @@ class DescopeWc extends BaseDescopeWc { async onStepChange(currentState: StepState, prevState: StepState) { const { - htmlUrl, - htmlLocaleUrl, + htmlFilename, + htmlLocaleFilename, direction, next, screenState, @@ -972,7 +963,10 @@ class DescopeWc extends BaseDescopeWc { } = currentState; const stepTemplate = document.createElement('template'); - stepTemplate.innerHTML = await this.getPageContent(htmlUrl, htmlLocaleUrl); + stepTemplate.innerHTML = await this.getPageContent( + htmlFilename, + htmlLocaleFilename, + ); const clone = stepTemplate.content.cloneNode(true) as DocumentFragment; @@ -1025,7 +1019,7 @@ class DescopeWc extends BaseDescopeWc { this.rootElement.replaceChildren(clone); // If before html url was empty, we deduce its the first time a screen is shown - const isFirstScreen = !prevState.htmlUrl; + const isFirstScreen = !prevState.htmlFilename; // we need to wait for all components to render before we can set its value setTimeout(() => { diff --git a/packages/sdks/web-component/src/lib/types.ts b/packages/sdks/web-component/src/lib/types.ts index f151b68ed..233d7b97d 100644 --- a/packages/sdks/web-component/src/lib/types.ts +++ b/packages/sdks/web-component/src/lib/types.ts @@ -91,8 +91,8 @@ export type FlowState = { export type StepState = { screenState: ScreenState; - htmlUrl: string; - htmlLocaleUrl: string; + htmlFilename: string; + htmlLocaleFilename: string; next: NextFn; direction: Direction | undefined; samlIdpUsername: string; diff --git a/packages/sdks/web-component/test/descope-wc.test.ts b/packages/sdks/web-component/test/descope-wc.test.ts index 351dbe3d8..2b9fdc1f1 100644 --- a/packages/sdks/web-component/test/descope-wc.test.ts +++ b/packages/sdks/web-component/test/descope-wc.test.ts @@ -3009,7 +3009,7 @@ describe('web-component', () => { await waitFor(() => expect(startMock).toHaveBeenCalled()); await waitFor(() => screen.findByShadowText('It works!'), { - timeout: WAIT_TIMEOUT, + timeout: WAIT_TIMEOUT * 2, }); fireEvent.click(screen.getByShadowText('click')); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f724a2dd..465a46d07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -878,7 +878,7 @@ importers: version: link:../web-component '@types/react': specifier: '>=18' - version: 18.3.3 + version: 19.0.0 react: specifier: '>=18' version: 18.3.1 @@ -925,7 +925,7 @@ importers: version: 6.4.6(@types/jest@29.5.12)(jest@29.7.0) '@testing-library/react': specifier: ^14.2.1 - version: 14.3.1(react-dom@18.3.1)(react@18.3.1) + version: 14.3.1(@types/react@19.0.0)(react-dom@18.3.1)(react@18.3.1) '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -1804,7 +1804,7 @@ importers: devDependencies: '@descope/web-components-ui': specifier: latest - version: 1.0.368 + version: 1.0.407 '@open-wc/rollup-plugin-html': specifier: 1.2.5 version: 1.2.5 @@ -1982,7 +1982,7 @@ importers: devDependencies: '@descope/web-components-ui': specifier: latest - version: 1.0.368 + version: 1.0.407 '@open-wc/rollup-plugin-html': specifier: 1.2.5 version: 1.2.5 @@ -2160,7 +2160,7 @@ importers: devDependencies: '@descope/web-components-ui': specifier: latest - version: 1.0.368 + version: 1.0.407 '@open-wc/rollup-plugin-html': specifier: 1.2.5 version: 1.2.5 @@ -2338,7 +2338,7 @@ importers: devDependencies: '@descope/web-components-ui': specifier: latest - version: 1.0.368 + version: 1.0.407 '@open-wc/rollup-plugin-html': specifier: 1.2.5 version: 1.2.5 @@ -2519,7 +2519,7 @@ importers: devDependencies: '@descope/web-components-ui': specifier: latest - version: 1.0.368 + version: 1.0.407 '@open-wc/rollup-plugin-html': specifier: 1.2.5 version: 1.2.5 @@ -2704,7 +2704,7 @@ importers: devDependencies: '@descope/web-components-ui': specifier: latest - version: 1.0.368 + version: 1.0.407 '@open-wc/rollup-plugin-html': specifier: 1.2.5 version: 1.2.5 @@ -3887,7 +3887,7 @@ packages: '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: - supports-color dev: true @@ -3903,7 +3903,7 @@ packages: '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: - supports-color dev: true @@ -3935,7 +3935,7 @@ packages: '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: - supports-color dev: true @@ -3951,7 +3951,7 @@ packages: '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: - supports-color dev: true @@ -7737,8 +7737,8 @@ packages: - encoding dev: false - /@descope/web-components-ui@1.0.368: - resolution: {integrity: sha512-b8U0HyL9bxJQCU0U4t999FwTeV1y0F1uYc1jOz0oZ06mA/DXeoNMQrpvs0IOqsSPnXsJF+09NVaE4bnUM2GhyQ==} + /@descope/web-components-ui@1.0.407: + resolution: {integrity: sha512-QozmOV/QqFflkuDJbfnYCNLYfoZrFpWh+7VoB5wbn5AWZmnKMpOCuxHioRLSM6djOxh67EDV+t8jhKJ1nU8Zfw==} requiresBuild: true dependencies: '@vaadin/avatar': 24.3.4 @@ -7746,7 +7746,6 @@ packages: '@vaadin/checkbox': 24.3.4 '@vaadin/combo-box': 24.3.4 '@vaadin/custom-field': 24.3.4 - '@vaadin/date-picker': 24.3.4 '@vaadin/dialog': 24.3.4 '@vaadin/email-field': 24.3.4 '@vaadin/grid': 24.3.4 @@ -7756,18 +7755,18 @@ packages: '@vaadin/notification': 24.3.4 '@vaadin/number-field': 24.3.4 '@vaadin/password-field': 24.3.4 + '@vaadin/popover': 24.5.3 '@vaadin/radio-group': 24.3.4 '@vaadin/text-area': 24.3.4 '@vaadin/text-field': 24.3.4 color: 4.2.3 + dompurify: 3.2.3 element-internals-polyfill: 1.3.11 highlight.js: 11.10.0 - lint-staged: 15.2.7 + libphonenumber-js: 1.11.17 lodash.debounce: 4.0.8 lodash.merge: 4.6.2 markdown-it: 14.1.0 - transitivePeerDependencies: - - supports-color dev: true /@descope/web-js-sdk@1.23.1: @@ -11636,7 +11635,7 @@ packages: resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} dependencies: '@swc/counter': 0.1.3 - tslib: 2.8.1 + tslib: 2.6.3 /@swc/types@0.1.12: resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} @@ -11705,9 +11704,9 @@ packages: engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: '@adobe/css-tools': 4.4.0 - '@babel/runtime': 7.23.5 + '@babel/runtime': 7.25.6 '@types/testing-library__jest-dom': 5.14.9 - aria-query: 5.3.0 + aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.5.16 @@ -11739,7 +11738,7 @@ packages: '@adobe/css-tools': 4.4.0 '@babel/runtime': 7.25.6 '@types/jest': 29.5.12 - aria-query: 5.3.0 + aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 @@ -11764,25 +11763,27 @@ packages: react-test-renderer: optional: true dependencies: - '@babel/runtime': 7.23.5 + '@babel/runtime': 7.25.6 '@types/react': 18.3.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-error-boundary: 3.1.4(react@18.3.1) dev: true - /@testing-library/react@14.3.1(react-dom@18.3.1)(react@18.3.1): + /@testing-library/react@14.3.1(@types/react@19.0.0)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==} engines: {node: '>=14'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.23.5 + '@babel/runtime': 7.25.6 '@testing-library/dom': 9.3.4 - '@types/react-dom': 18.3.0 + '@types/react-dom': 18.3.5(@types/react@19.0.0) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' dev: true /@testing-library/react@16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): @@ -11800,7 +11801,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.5 + '@babel/runtime': 7.25.6 '@testing-library/dom': 10.4.0 '@types/react': 18.3.3 '@types/react-dom': 18.3.0 @@ -12142,8 +12143,9 @@ packages: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + /@types/prop-types@15.7.14: + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + dev: true /@types/qs@6.9.15: resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} @@ -12159,6 +12161,14 @@ packages: '@types/react': 18.3.3 dev: true + /@types/react-dom@18.3.5(@types/react@19.0.0): + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 + dependencies: + '@types/react': 19.0.0 + dev: true + /@types/react-router-dom@5.3.3: resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} dependencies: @@ -12177,7 +12187,13 @@ packages: /@types/react@18.3.3: resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.14 + csstype: 3.1.3 + dev: true + + /@types/react@19.0.0: + resolution: {integrity: sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg==} + dependencies: csstype: 3.1.3 /@types/react@19.0.2: @@ -13511,6 +13527,15 @@ packages: lit: 3.2.0 dev: true + /@vaadin/a11y-base@24.5.6: + resolution: {integrity: sha512-wi7sfDNh+QCLS+4D5WPPior2z0h0hPicOGuiawjuTJPilCj+715ZHE4VZBHcnK1KLrjagzBRk8xZkrcFVnu1Ig==} + dependencies: + '@open-wc/dedupe-mixin': 1.4.0 + '@polymer/polymer': 3.5.1 + '@vaadin/component-base': 24.5.6 + lit: 3.2.0 + dev: true + /@vaadin/avatar@24.3.4: resolution: {integrity: sha512-T3+jH0HrKJmeYt4wGGWlxyyl2E08ET8O0BoAcRmx1U5+s24imr9cTxoXt2auh7Hkub+D6MdwuR4XXABgx2uF0w==} dependencies: @@ -13579,31 +13604,24 @@ packages: lit: 3.2.0 dev: true - /@vaadin/custom-field@24.3.4: - resolution: {integrity: sha512-5RMhqbIuKDj3rSEr7qeLLqLL6HHEwXLDDHSJzO4hTJY9KK39Ce3haC7WZNzVuJyJouu5u0ynJ8REVLPcIlDnPQ==} + /@vaadin/component-base@24.5.6: + resolution: {integrity: sha512-WBixuCQfQXszRLPWpsgulf20870JEeQebGxjJ9vfyLAKYxguuhCJhlmudefSt8f7atRto+ghw67iPUlen+4tYQ==} dependencies: '@open-wc/dedupe-mixin': 1.4.0 '@polymer/polymer': 3.5.1 - '@vaadin/a11y-base': 24.3.22 - '@vaadin/component-base': 24.3.22 - '@vaadin/field-base': 24.3.22 - '@vaadin/vaadin-lumo-styles': 24.3.22 - '@vaadin/vaadin-material-styles': 24.3.22 - '@vaadin/vaadin-themable-mixin': 24.3.22 + '@vaadin/vaadin-development-mode-detector': 2.0.7 + '@vaadin/vaadin-usage-statistics': 2.1.3 lit: 3.2.0 dev: true - /@vaadin/date-picker@24.3.4: - resolution: {integrity: sha512-5aHtQ/uovBm5KhtqQoO1WHP9L7Quz9PtyzLVrXnpLNtX6eVrZRDHLKyuoo6WVQwRlbCf6snVLgMYYr+Zyg+4rg==} + /@vaadin/custom-field@24.3.4: + resolution: {integrity: sha512-5RMhqbIuKDj3rSEr7qeLLqLL6HHEwXLDDHSJzO4hTJY9KK39Ce3haC7WZNzVuJyJouu5u0ynJ8REVLPcIlDnPQ==} dependencies: '@open-wc/dedupe-mixin': 1.4.0 '@polymer/polymer': 3.5.1 '@vaadin/a11y-base': 24.3.22 - '@vaadin/button': 24.3.4 '@vaadin/component-base': 24.3.22 '@vaadin/field-base': 24.3.22 - '@vaadin/input-container': 24.3.22 - '@vaadin/overlay': 24.3.22 '@vaadin/vaadin-lumo-styles': 24.3.22 '@vaadin/vaadin-material-styles': 24.3.22 '@vaadin/vaadin-themable-mixin': 24.3.22 @@ -13682,6 +13700,17 @@ packages: lit: 3.2.0 dev: true + /@vaadin/icon@24.5.6: + resolution: {integrity: sha512-5SXmTdvZ94JZzbq0Gqv417N5Md6M+PViaOWMGsYOJiAePYXdOkQ88C05j4ItlL0CT7IAhp5jhIDqJU2sm7bHxA==} + dependencies: + '@open-wc/dedupe-mixin': 1.4.0 + '@polymer/polymer': 3.5.1 + '@vaadin/component-base': 24.5.6 + '@vaadin/vaadin-lumo-styles': 24.5.6 + '@vaadin/vaadin-themable-mixin': 24.5.6 + lit: 3.2.0 + dev: true + /@vaadin/icons@24.3.4: resolution: {integrity: sha512-HK4c1Kq1tHabgGO6o/qLePi67lYBqkn7XD0M92fc6cwFSi8IerxEuKNaF71ZF8+32PXqhwT1IKgka2S9iUea8w==} dependencies: @@ -13718,6 +13747,12 @@ packages: lit: 3.2.0 dev: true + /@vaadin/lit-renderer@24.5.6: + resolution: {integrity: sha512-yEu3SCMenh6pC64KHj4FHmw60jR90u5T4YdDqleaQZLbRCYkoeE7iLetw473r7yZFJ2rrcg7u1D8OaEL6oYbyw==} + dependencies: + lit: 3.2.0 + dev: true + /@vaadin/multi-select-combo-box@24.3.4: resolution: {integrity: sha512-35BlqMDcCl/g/1rSMqCUnAfauYnWRXRLgET1ai7/WOe5dlqxaHCWt1ndvNnHGOtvGgrGb71YiVxBx80zHPtIjw==} dependencies: @@ -13774,6 +13809,19 @@ packages: '@vaadin/vaadin-themable-mixin': 24.3.22 dev: true + /@vaadin/overlay@24.5.6: + resolution: {integrity: sha512-oWPUf2DXmaetZNCnVbaSagziDfM/DcktXYeId/HRv5lnsO+AHAaCkW5A78KkNes0nQ4/M6ASsKPWS0mEjD3nug==} + dependencies: + '@open-wc/dedupe-mixin': 1.4.0 + '@polymer/polymer': 3.5.1 + '@vaadin/a11y-base': 24.5.6 + '@vaadin/component-base': 24.5.6 + '@vaadin/vaadin-lumo-styles': 24.5.6 + '@vaadin/vaadin-material-styles': 24.5.6 + '@vaadin/vaadin-themable-mixin': 24.5.6 + lit: 3.2.0 + dev: true + /@vaadin/password-field@24.3.4: resolution: {integrity: sha512-Pvx0aqml+2pjZzRB7sMalhDjP10GG1SUeRPNakNCacFCSUwuJZBl1Q+Mk5sye24Ey1r7zz5NVRCTMQ7CHRSCXg==} dependencies: @@ -13786,6 +13834,20 @@ packages: '@vaadin/vaadin-themable-mixin': 24.3.22 dev: true + /@vaadin/popover@24.5.3: + resolution: {integrity: sha512-oJkvKhE5hnWM+mgd8kFXNCUNOme3XKJqebFaaFqQcLz1/7w1H7jdv8q0f2TWwAtjtM9WezorKO3iCOp449kuug==} + dependencies: + '@open-wc/dedupe-mixin': 1.4.0 + '@vaadin/a11y-base': 24.5.6 + '@vaadin/component-base': 24.5.6 + '@vaadin/lit-renderer': 24.5.6 + '@vaadin/overlay': 24.5.6 + '@vaadin/vaadin-lumo-styles': 24.5.6 + '@vaadin/vaadin-material-styles': 24.5.6 + '@vaadin/vaadin-themable-mixin': 24.5.6 + lit: 3.2.0 + dev: true + /@vaadin/radio-group@24.3.4: resolution: {integrity: sha512-oxGbgLeBA3sCexVHUxhYxmpJ3i1iP1iqpxoYh8neUCHjgAQEPPrGX36jKoCPPIvqt04YOUfKJIOQ/aY6M3hRkQ==} dependencies: @@ -13856,6 +13918,15 @@ packages: '@vaadin/vaadin-themable-mixin': 24.3.22 dev: true + /@vaadin/vaadin-lumo-styles@24.5.6: + resolution: {integrity: sha512-PmxNzRiZEpJWBJLLP6QzCubaqurJq5FEIixGF4HiTUrFPEsF4W6v7FROEpHU9qU8fQXk30ghKo191CHc8sVDMw==} + dependencies: + '@polymer/polymer': 3.5.1 + '@vaadin/component-base': 24.5.6 + '@vaadin/icon': 24.5.6 + '@vaadin/vaadin-themable-mixin': 24.5.6 + dev: true + /@vaadin/vaadin-material-styles@24.3.22: resolution: {integrity: sha512-sCoZimM96Rj7i9DWCg3LsJq4EsLkJcj7U8NmbCo+XnRtGykElBb/xc3fJiAC8uuf39Yj6V8BbAahuq3ulwaRig==} dependencies: @@ -13864,6 +13935,14 @@ packages: '@vaadin/vaadin-themable-mixin': 24.3.22 dev: true + /@vaadin/vaadin-material-styles@24.5.6: + resolution: {integrity: sha512-wghz8Evkwda82hqwht+VCjyScbjTBGTN1pY294LpQ2JKHc9KgBc9Z/nZ1fzgCTzm7uFXEPmitZPdOnrNIjAaqw==} + dependencies: + '@polymer/polymer': 3.5.1 + '@vaadin/component-base': 24.5.6 + '@vaadin/vaadin-themable-mixin': 24.5.6 + dev: true + /@vaadin/vaadin-themable-mixin@24.3.22: resolution: {integrity: sha512-u+r0UXtCzMoZbR1UKQTPWUZEnkXlxwRuxjpNCAdyumqbFMMHd5yw1/LbXertouzj60CN3SUU1FXLtjCgFOeRXQ==} dependencies: @@ -13871,6 +13950,13 @@ packages: lit: 3.2.0 dev: true + /@vaadin/vaadin-themable-mixin@24.5.6: + resolution: {integrity: sha512-zPAhsZ6QfeUZJN8WXe9s6zIU5T/nYZ1ETDbHmGRtsDuGRaEADxGG8S49DVdUUWSoxg9poXIPQGVozur3q5TGmw==} + dependencies: + '@open-wc/dedupe-mixin': 1.4.0 + lit: 3.2.0 + dev: true + /@vaadin/vaadin-usage-statistics@2.1.3: resolution: {integrity: sha512-8r4TNknD7OJQADe3VygeofFR7UNAXZ2/jjBFP5dgI8+2uMfnuGYgbuHivasKr9WSQ64sPej6m8rDoM1uSllXjQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -15359,7 +15445,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.2 - caniuse-lite: 1.0.30001672 + caniuse-lite: 1.0.30001690 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.0 @@ -16062,7 +16148,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001668 + caniuse-lite: 1.0.30001690 electron-to-chromium: 1.5.38 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.0) @@ -16273,7 +16359,7 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.23.2 - caniuse-lite: 1.0.30001672 + caniuse-lite: 1.0.30001690 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true @@ -16286,13 +16372,6 @@ packages: resolution: {integrity: sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==} dev: true - /caniuse-lite@1.0.30001668: - resolution: {integrity: sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==} - dev: true - - /caniuse-lite@1.0.30001672: - resolution: {integrity: sha512-XhW1vRo1ob6aeK2w3rTohwTPBLse/rvjq+s3RTSBwnlZqoFFjx9cHsShJjAIbLsLjyoacaTxpLZy9v3gg6zypw==} - /caniuse-lite@1.0.30001690: resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} @@ -17384,6 +17463,15 @@ packages: postcss: 8.4.39 dev: true + /css-declaration-sorter@6.4.1(postcss@8.4.49): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.49 + dev: true + /css-loader@6.11.0(webpack@5.93.0): resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} engines: {node: '>= 12.13.0'} @@ -17396,12 +17484,12 @@ packages: webpack: optional: true dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.39) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.39) - postcss-modules-scope: 3.2.0(postcss@8.4.39) - postcss-modules-values: 4.0.0(postcss@8.4.39) + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.49) + postcss-modules-scope: 3.2.0(postcss@8.4.49) + postcss-modules-values: 4.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 semver: 7.6.3 webpack: 5.93.0 @@ -17443,9 +17531,9 @@ packages: esbuild: optional: true dependencies: - cssnano: 5.1.15(postcss@8.4.39) + cssnano: 5.1.15(postcss@8.4.49) jest-worker: 27.5.1 - postcss: 8.4.39 + postcss: 8.4.49 schema-utils: 4.2.0 serialize-javascript: 6.0.1 source-map: 0.6.1 @@ -17541,6 +17629,44 @@ packages: postcss-unique-selectors: 5.1.1(postcss@8.4.39) dev: true + /cssnano-preset-default@5.2.14(postcss@8.4.49): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.49) + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-calc: 8.2.4(postcss@8.4.49) + postcss-colormin: 5.3.1(postcss@8.4.49) + postcss-convert-values: 5.1.3(postcss@8.4.49) + postcss-discard-comments: 5.1.2(postcss@8.4.49) + postcss-discard-duplicates: 5.1.0(postcss@8.4.49) + postcss-discard-empty: 5.1.1(postcss@8.4.49) + postcss-discard-overridden: 5.1.0(postcss@8.4.49) + postcss-merge-longhand: 5.1.7(postcss@8.4.49) + postcss-merge-rules: 5.1.4(postcss@8.4.49) + postcss-minify-font-values: 5.1.0(postcss@8.4.49) + postcss-minify-gradients: 5.1.1(postcss@8.4.49) + postcss-minify-params: 5.1.4(postcss@8.4.49) + postcss-minify-selectors: 5.2.1(postcss@8.4.49) + postcss-normalize-charset: 5.1.0(postcss@8.4.49) + postcss-normalize-display-values: 5.1.0(postcss@8.4.49) + postcss-normalize-positions: 5.1.1(postcss@8.4.49) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.49) + postcss-normalize-string: 5.1.0(postcss@8.4.49) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.49) + postcss-normalize-unicode: 5.1.1(postcss@8.4.49) + postcss-normalize-url: 5.1.0(postcss@8.4.49) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.49) + postcss-ordered-values: 5.1.3(postcss@8.4.49) + postcss-reduce-initial: 5.1.2(postcss@8.4.49) + postcss-reduce-transforms: 5.1.0(postcss@8.4.49) + postcss-svgo: 5.1.0(postcss@8.4.49) + postcss-unique-selectors: 5.1.1(postcss@8.4.49) + dev: true + /cssnano-utils@3.1.0(postcss@8.4.39): resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} engines: {node: ^10 || ^12 || >=14.0} @@ -17550,6 +17676,15 @@ packages: postcss: 8.4.39 dev: true + /cssnano-utils@3.1.0(postcss@8.4.49): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + dev: true + /cssnano@5.1.15(postcss@8.4.39): resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} engines: {node: ^10 || ^12 || >=14.0} @@ -17562,6 +17697,18 @@ packages: yaml: 1.10.2 dev: true + /cssnano@5.1.15(postcss@8.4.49): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.49) + lilconfig: 2.1.0 + postcss: 8.4.49 + yaml: 1.10.2 + dev: true + /csso@4.2.0: resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} engines: {node: '>=8.0.0'} @@ -18041,6 +18188,12 @@ packages: domelementtype: 2.3.0 dev: true + /dompurify@3.2.3: + resolution: {integrity: sha512-U1U5Hzc2MO0oW3DF+G9qYN0aT7atAou4AgI0XjWz061nyBPbdxkfdhfy5uMgGn6+oLFCfn44ZGbdDqCzVmlOWA==} + optionalDependencies: + '@types/trusted-types': 2.0.7 + dev: true + /domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} dependencies: @@ -21817,6 +21970,15 @@ packages: postcss: 8.4.39 dev: true + /icss-utils@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.49 + dev: true + /identity-obj-proxy@3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} @@ -23993,6 +24155,10 @@ packages: type-check: 0.4.0 dev: true + /libphonenumber-js@1.11.17: + resolution: {integrity: sha512-Jr6v8thd5qRlOlc6CslSTzGzzQW03uiscab7KHQZX1Dfo4R6n6FDhZ0Hri6/X7edLIDv9gl4VMZXhxTjLnl0VQ==} + dev: true + /libphonenumber-js@1.11.4: resolution: {integrity: sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q==} dev: false @@ -24970,12 +25136,12 @@ packages: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: true /nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -25026,7 +25192,7 @@ packages: '@next/env': 14.2.10 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001672 + caniuse-lite: 1.0.30001690 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -25068,7 +25234,7 @@ packages: '@next/env': 14.2.10 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001672 + caniuse-lite: 1.0.30001690 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -26268,6 +26434,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-calc@8.2.4(postcss@8.4.49): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + dev: true + /postcss-colormin@5.3.1(postcss@8.4.39): resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} engines: {node: ^10 || ^12 || >=14.0} @@ -26281,6 +26457,19 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-colormin@5.3.1(postcss@8.4.49): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-convert-values@5.1.3(postcss@8.4.39): resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} engines: {node: ^10 || ^12 || >=14.0} @@ -26292,6 +26481,17 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-convert-values@5.1.3(postcss@8.4.49): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.2 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-discard-comments@5.1.2(postcss@8.4.39): resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} engines: {node: ^10 || ^12 || >=14.0} @@ -26301,6 +26501,15 @@ packages: postcss: 8.4.39 dev: true + /postcss-discard-comments@5.1.2(postcss@8.4.49): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + dev: true + /postcss-discard-duplicates@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} @@ -26310,6 +26519,15 @@ packages: postcss: 8.4.39 dev: true + /postcss-discard-duplicates@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + dev: true + /postcss-discard-empty@5.1.1(postcss@8.4.39): resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} engines: {node: ^10 || ^12 || >=14.0} @@ -26319,6 +26537,15 @@ packages: postcss: 8.4.39 dev: true + /postcss-discard-empty@5.1.1(postcss@8.4.49): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + dev: true + /postcss-discard-overridden@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} engines: {node: ^10 || ^12 || >=14.0} @@ -26328,6 +26555,15 @@ packages: postcss: 8.4.39 dev: true + /postcss-discard-overridden@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + dev: true + /postcss-loader@6.2.1(postcss@8.4.39)(webpack@5.93.0): resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} @@ -26369,6 +26605,17 @@ packages: stylehacks: 5.1.1(postcss@8.4.39) dev: true + /postcss-merge-longhand@5.1.7(postcss@8.4.49): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.49) + dev: true + /postcss-merge-rules@5.1.4(postcss@8.4.39): resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} engines: {node: ^10 || ^12 || >=14.0} @@ -26382,6 +26629,19 @@ packages: postcss-selector-parser: 6.1.1 dev: true + /postcss-merge-rules@5.1.4(postcss@8.4.49): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.2 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + dev: true + /postcss-minify-font-values@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} engines: {node: ^10 || ^12 || >=14.0} @@ -26392,6 +26652,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-minify-font-values@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-minify-gradients@5.1.1(postcss@8.4.39): resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} engines: {node: ^10 || ^12 || >=14.0} @@ -26404,6 +26674,18 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-minify-gradients@5.1.1(postcss@8.4.49): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-minify-params@5.1.4(postcss@8.4.39): resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} engines: {node: ^10 || ^12 || >=14.0} @@ -26416,6 +26698,18 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-minify-params@5.1.4(postcss@8.4.49): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.2 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-minify-selectors@5.2.1(postcss@8.4.39): resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} engines: {node: ^10 || ^12 || >=14.0} @@ -26426,6 +26720,16 @@ packages: postcss-selector-parser: 6.1.1 dev: true + /postcss-minify-selectors@5.2.1(postcss@8.4.49): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + dev: true + /postcss-modules-extract-imports@3.1.0(postcss@8.4.39): resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} @@ -26435,6 +26739,15 @@ packages: postcss: 8.4.39 dev: true + /postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.49 + dev: true + /postcss-modules-local-by-default@4.0.5(postcss@8.4.39): resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} @@ -26447,6 +26760,18 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-modules-local-by-default@4.0.5(postcss@8.4.49): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + dev: true + /postcss-modules-scope@3.2.0(postcss@8.4.39): resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} @@ -26457,6 +26782,16 @@ packages: postcss-selector-parser: 6.1.1 dev: true + /postcss-modules-scope@3.2.0(postcss@8.4.49): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + dev: true + /postcss-modules-values@4.0.0(postcss@8.4.39): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} @@ -26467,6 +26802,16 @@ packages: postcss: 8.4.39 dev: true + /postcss-modules-values@4.0.0(postcss@8.4.49): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + dev: true + /postcss-normalize-charset@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} @@ -26476,6 +26821,15 @@ packages: postcss: 8.4.39 dev: true + /postcss-normalize-charset@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + dev: true + /postcss-normalize-display-values@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} engines: {node: ^10 || ^12 || >=14.0} @@ -26486,6 +26840,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-display-values@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-positions@5.1.1(postcss@8.4.39): resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} engines: {node: ^10 || ^12 || >=14.0} @@ -26496,6 +26860,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-positions@5.1.1(postcss@8.4.49): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.39): resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} engines: {node: ^10 || ^12 || >=14.0} @@ -26506,6 +26880,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.49): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-string@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} engines: {node: ^10 || ^12 || >=14.0} @@ -26516,6 +26900,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-string@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} engines: {node: ^10 || ^12 || >=14.0} @@ -26526,6 +26920,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-unicode@5.1.1(postcss@8.4.39): resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} engines: {node: ^10 || ^12 || >=14.0} @@ -26537,6 +26941,17 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-unicode@5.1.1(postcss@8.4.49): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.2 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-url@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} engines: {node: ^10 || ^12 || >=14.0} @@ -26548,6 +26963,17 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-url@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-whitespace@5.1.1(postcss@8.4.39): resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} engines: {node: ^10 || ^12 || >=14.0} @@ -26558,6 +26984,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-whitespace@5.1.1(postcss@8.4.49): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-ordered-values@5.1.3(postcss@8.4.39): resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} engines: {node: ^10 || ^12 || >=14.0} @@ -26569,6 +27005,17 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-ordered-values@5.1.3(postcss@8.4.49): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-reduce-initial@5.1.2(postcss@8.4.39): resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} @@ -26580,6 +27027,17 @@ packages: postcss: 8.4.39 dev: true + /postcss-reduce-initial@5.1.2(postcss@8.4.49): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.2 + caniuse-api: 3.0.0 + postcss: 8.4.49 + dev: true + /postcss-reduce-transforms@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} engines: {node: ^10 || ^12 || >=14.0} @@ -26590,6 +27048,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-reduce-transforms@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + dev: true + /postcss-selector-parser@6.1.1: resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} engines: {node: '>=4'} @@ -26609,6 +27077,17 @@ packages: svgo: 2.8.0 dev: true + /postcss-svgo@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: true + /postcss-unique-selectors@5.1.1(postcss@8.4.39): resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} engines: {node: ^10 || ^12 || >=14.0} @@ -26619,6 +27098,16 @@ packages: postcss-selector-parser: 6.1.1 dev: true + /postcss-unique-selectors@5.1.1(postcss@8.4.49): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + dev: true + /postcss-url@10.1.3(postcss@8.4.39): resolution: {integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==} engines: {node: '>=10'} @@ -26648,7 +27137,7 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -29191,6 +29680,17 @@ packages: postcss-selector-parser: 6.1.1 dev: true + /stylehacks@5.1.1(postcss@8.4.49): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.2 + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -29231,7 +29731,7 @@ packages: css-select: 4.3.0 css-tree: 1.1.3 csso: 4.2.0 - picocolors: 1.1.0 + picocolors: 1.1.1 stable: 0.1.8 dev: true @@ -29249,7 +29749,7 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/core': 0.1.1 - tslib: 2.8.1 + tslib: 2.6.3 dev: true /systemjs@6.14.1: @@ -30237,9 +30737,6 @@ packages: /tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - /tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - /tsutils@3.21.0(typescript@4.9.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -30601,7 +31098,7 @@ packages: dependencies: browserslist: 4.23.2 escalade: 3.1.2 - picocolors: 1.1.0 + picocolors: 1.1.1 dev: true /update-browserslist-db@1.1.0(browserslist@4.23.3): @@ -30612,7 +31109,7 @@ packages: dependencies: browserslist: 4.23.3 escalade: 3.1.2 - picocolors: 1.1.0 + picocolors: 1.1.1 dev: true /update-browserslist-db@1.1.1(browserslist@4.24.0): @@ -30623,7 +31120,7 @@ packages: dependencies: browserslist: 4.24.0 escalade: 3.2.0 - picocolors: 1.1.0 + picocolors: 1.1.1 dev: true /update-browserslist-db@1.1.1(browserslist@4.24.3): @@ -30634,7 +31131,7 @@ packages: dependencies: browserslist: 4.24.3 escalade: 3.2.0 - picocolors: 1.1.0 + picocolors: 1.1.1 /update-check@1.5.4: resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==}