From 2ef2156bb842992be8407bbeb50bfafbe0b06b78 Mon Sep 17 00:00:00 2001 From: ava-vellozzi Date: Thu, 25 Jul 2024 09:06:49 -0700 Subject: [PATCH 01/18] Avavellozzi/diagnosticLogConsole (#2419) * merge avavellozzi/diagnosticApp branch * fixing pnpm yaml * Delete unused files, fixs logs, scenario test * Fixed pnpm install issues * Fixed captureConsoleLogs issue * Fix log console file * Fixed build error * Deleted gitignore files * Changed pdf to txt * Update e2e tests with targetted versions for getUser update (#2420) * Update e2e tests with targetted versions for getUser update * update missing test version * remove expected failure test for now * update comparison operators * Fix build issues * Fixed build issues * fix merge conflict with package lock * Fixed package json * fixed build issue --------- Co-authored-by: Ava Vellozzi Co-authored-by: alexneyman-MSFT <112656629+alexneyman-MSFT@users.noreply.github.com> --- apps/teamsjs-diagnostic-app/package-lock.json | 56 ++++++- .../src/components/sample/LogConsole.css | 156 ++++++++++++++---- .../src/components/sample/LogConsole.tsx | 102 +++++++++++- .../src/components/sample/Scenarios.test.tsx | 30 ++-- 4 files changed, 295 insertions(+), 49 deletions(-) diff --git a/apps/teamsjs-diagnostic-app/package-lock.json b/apps/teamsjs-diagnostic-app/package-lock.json index 0ac86539a7..ee87cf6bb7 100644 --- a/apps/teamsjs-diagnostic-app/package-lock.json +++ b/apps/teamsjs-diagnostic-app/package-lock.json @@ -666,7 +666,6 @@ }, "../../node_modules/.pnpm/@types+node@18.19.39/node_modules/@types/node": { "version": "18.19.39", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -815,7 +814,60 @@ "node": ">=8.0.0" } }, - "../../node_modules/.pnpm/husky@9.0.11/node_modules/husky": { + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { "version": "9.0.11", "dev": true, "license": "MIT", diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.css b/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.css index 2c3759c2f6..eac609c129 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.css +++ b/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.css @@ -1,29 +1,127 @@ - .scenario-container { - display: flex; - gap: 20px; - margin-bottom: 20px; - } - - .horizontal-box { - width: 1300px; - height: 600px; - overflow: auto; - background-color: lightgray; - } - - .content { - width: 100%; - height: 100%; - } - - .log-console { - margin-top: 20px; - padding: 20px; - background-color: lightgray; - } - - .log-statement { - padding: 5px; - border-bottom: 1px solid #ccc; - overflow: auto; - } +.scenario-container { + display: flex; + gap: 20px; + margin-bottom: 2px; +} + +.horizontal-box { + width: 1300px; + height: 600px; + display: flex; + flex-direction: column; + overflow: auto; + background-color: lightgray; +} + +.content { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} + +.log-console { + margin-top: 20px; + padding: 20px; + background-color: lightgray; + display: flex; + flex-direction: column; +} + +.log-actions { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; + gap: 10px; +} + +.action-buttons { + display: flex; + gap: 10px; +} + +.clear-logs-button, +.download-logs-button, +.share-logs-button { + padding: 8px 16px; + color: white; + border: none; + cursor: pointer; +} + +.clear-logs-button { + background-color: #f44336; +} + +.clear-logs-button:hover { + background-color: #ff6666; +} + +.download-logs-button { + background-color: #464eb8; +} + +.download-logs-button:hover { + background-color: #787dc0; +} + +.share-logs-button { + background-color: #464eb8; +} + +.share-logs-button:hover { + background-color: #787dc0; +} + +.share-logs-dropdown { + position: relative; +} + +.share-options { + position: absolute; + top: 100%; + left: 0; + background-color: white; + border: 1px solid #ccc; + z-index: 1; +} + +.share-option { + display: block; + padding: 8px 16px; + width: 100%; + text-align: left; + background: none; + border: none; + cursor: pointer; +} + +.share-option:hover { + background-color: #f0f0f0; +} + +.log-statement { + padding: 5px; + border-bottom: 1px solid #ccc; + overflow: auto; + margin-bottom: 8px; +} + +.search-input-container { + flex-grow: 1; +} + +.search-input { + padding: 8px; + width: 100%; + max-width: 300px; + border: 1px solid #ccc; + border-radius: 4px; +} + +.log-line-number { + color: #888; + margin-right: 15px; + font-weight: bold; +} diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.tsx b/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.tsx index aa36c13301..db658a41ae 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.tsx +++ b/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.tsx @@ -3,17 +3,25 @@ import './LogConsole.css'; interface LogConsoleProps { initialLogs?: string[]; + maxLogs?: number; // Allow passing maximum logs as prop } -const MAX_LOGS = 100; +const MAX_LOGS = 1000; const LogConsole: React.FC = ({ initialLogs = [] }) => { const [logStatements, setLogStatements] = useState(initialLogs); + const [filteredLogs, setFilteredLogs] = useState(initialLogs); + const [searchTerm, setSearchTerm] = useState(''); + const [showShareOptions, setShowShareOptions] = useState(false); + // Function to capture console logs with line numbers const captureConsoleLogs = (...args: any[]) => { - const timestampedLog = `${new Date()} - ${args.join(' ')}`; setLogStatements(prevLogs => { - const updatedLogs = [...prevLogs.slice(-MAX_LOGS + 1), timestampedLog]; + const lineNumber = prevLogs.length + 1; + const timestamp = new Date(); + const logMessage = args.join(' '); + const formattedLog = `${lineNumber}| ${timestamp} - ${logMessage}`; + const updatedLogs = [...prevLogs.slice(-MAX_LOGS + 1), formattedLog]; sessionStorage.setItem('logStatements', JSON.stringify(updatedLogs)); return updatedLogs; }); @@ -24,7 +32,7 @@ const LogConsole: React.FC = ({ initialLogs = [] }) => { const storedLogs = sessionStorage.getItem('logStatements'); if (storedLogs) { const parsedLogs = JSON.parse(storedLogs); - // Ensure maximum 100 logs loaded + // Ensure maximum logs loaded const cappedLogs = parsedLogs.slice(-MAX_LOGS); setLogStatements(cappedLogs); } @@ -43,17 +51,95 @@ const LogConsole: React.FC = ({ initialLogs = [] }) => { }; }, []); + useEffect(() => { + if (searchTerm === '') { + setFilteredLogs(logStatements); + } else { + const lowerCaseSearchTerm = searchTerm.toLowerCase(); + setFilteredLogs(logStatements.filter(log => log.toLowerCase().includes(lowerCaseSearchTerm))); + } + }, [searchTerm, logStatements]); + + const handleClearLogs = () => { + setLogStatements([]); + setFilteredLogs([]); + sessionStorage.removeItem('logStatements'); + }; + + const handleDownloadLogs = () => { + const logsText = logStatements.join('\n'); + const blob = new Blob([logsText], { type: 'text/plain' }); + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = 'log_statements.txt'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + window.URL.revokeObjectURL(url); + }; + + const handleShareLogs = (option: 'teams' | 'outlook') => { + const logsText = logStatements.join('\n'); + if (option === 'teams') { + const teamsUrl = `https://teams.microsoft.com/l/chat/0/0?users=&message=${encodeURIComponent(logsText)}`; + window.open(teamsUrl, '_blank'); + } else if (option === 'outlook') { + const mailtoLink = `mailto:?subject=Log Statements&body=${encodeURIComponent(logsText)}`; + window.open(mailtoLink, '_blank'); + } + }; + return (

Log Console

- {logStatements.map((statement, index) => ( -
- {statement} +
+
+ setSearchTerm(e.target.value)} + /> +
+
+ + +
+ + {showShareOptions && ( +
+ + +
+ )} +
- ))} +
+ {filteredLogs.map((statement, index) => { + const parts = statement.split('|').map(part => part.trim()); + return ( +
+ {parts[0]} + {parts[1]} + {parts[2]} +
+ ); + })}
diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/Scenarios.test.tsx b/apps/teamsjs-diagnostic-app/src/components/sample/Scenarios.test.tsx index 0d79b08431..649674302d 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/Scenarios.test.tsx +++ b/apps/teamsjs-diagnostic-app/src/components/sample/Scenarios.test.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; +import { render, screen, fireEvent } from '@testing-library/react'; import AppInitializationScenario from './AppInitializationScenario'; jest.mock('@microsoft/teams-js', () => ({ @@ -18,23 +18,33 @@ jest.mock('../../apis/AuthenticationStart', () => ({ describe('App Initialization Component', () => { afterEach(() => { - // Clear all mock functions after each test + // Clear all mock functions after each test jest.clearAllMocks(); }); - test('app initialization scenario', async () => { + test('app initialization scenario', () => { render(); fireEvent.click(screen.getByTestId('run-scenario-button')); - await waitFor(() => { - console.log('waiting for successMessage'); - const successMessage = screen.queryByText(/App Initialization Scenario successfully completed/i); - expect(successMessage).not.toBeNull(); - }, { - timeout: 5000, + return new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + clearTimeout(timeout); + reject(new Error('Timeout waiting for success message')); + }, 5000); + + const checkSuccessMessage = () => { + const successMessage = screen.queryByText(/App Initialization Scenario successfully completed/i); + if (successMessage) { + clearTimeout(timeout); + resolve(); + } else { + setTimeout(checkSuccessMessage, 100); // Check every 100ms + } + }; + + checkSuccessMessage(); }); }); - // Add more test cases later }); From 5debfffa1fcf3f1c07018d373690f5666efda9fb Mon Sep 17 00:00:00 2001 From: Toni Solarin-Sodara Date: Fri, 26 Jul 2024 18:53:39 +0100 Subject: [PATCH 02/18] Video frame capabilities and attributes (#2383) * Allow specifying additional capabilities to be applied to a video frame * Add changefile * Update videoEffectsEx unit tests * Update VideoEffectsExAPI e2e test * Fix formatting * Fix tests * Add tests for attribute parsing logic * Update sharedFrame test json * Test frame attribute parsing through API surface * Revert whitespace change * Update apps/teams-test-app/e2e-test-data/video.sharedFrame.json * Update apps/teams-test-app/e2e-test-data/video.sharedFrame.json --------- Co-authored-by: Trevor Harris --- .../e2e-test-data/video.sharedFrame.json | 15 +++ .../privateApis/VideoEffectsExAPIs.tsx | 4 + ...-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json | 7 ++ .../src/internal/videoEffectsUtils.ts | 63 +++++++++- .../teams-js/src/private/videoEffectsEx.ts | 18 +++ .../test/private/videoEffectsEx.spec.ts | 119 ++++++++++++++++++ 6 files changed, 223 insertions(+), 3 deletions(-) create mode 100644 change/@microsoft-teams-js-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json diff --git a/apps/teams-test-app/e2e-test-data/video.sharedFrame.json b/apps/teams-test-app/e2e-test-data/video.sharedFrame.json index d3c3a92b72..7188910e20 100644 --- a/apps/teams-test-app/e2e-test-data/video.sharedFrame.json +++ b/apps/teams-test-app/e2e-test-data/video.sharedFrame.json @@ -17,9 +17,24 @@ "type": "callResponse", "version": ">2.12.0", "boxSelector": "#box_videoExSharedFrameRegisterForVideoFrame1", + "hostSdkVersion": { + "web": "<=4.0.0" + }, "modulesToDisable": ["videoMediaStream"], "expectedTestAppValue": "Registration attempt has been initiated. If successful, this message will change when it is invoked on video frame received.", "expectedAlertValue": "sharedFrame.registerForVideoFrame called with config: {\"format\":\"NV12\",\"requireCameraStream\":false,\"audioInferenceModel\":{}}" + }, + { + "title": "videoEx.sharedFrame.registerForVideoFrame - Success", + "type": "callResponse", + "version": ">2.12.0", + "boxSelector": "#box_videoExSharedFrameRegisterForVideoFrame1", + "hostSdkVersion": { + "web": ">4.0.0" + }, + "modulesToDisable": ["videoMediaStream"], + "expectedTestAppValue": "Registration attempt has been initiated. If successful, this message will change when it is invoked on video frame received.", + "expectedAlertValue": "sharedFrame.registerForVideoFrame called with config: {\"format\":\"NV12\",\"requireCameraStream\":false,\"audioInferenceModel\":{},\"requiredCapabilities\":[]}" } ] } diff --git a/apps/teams-test-app/src/components/privateApis/VideoEffectsExAPIs.tsx b/apps/teams-test-app/src/components/privateApis/VideoEffectsExAPIs.tsx index 953cba8639..9a2889eaf9 100644 --- a/apps/teams-test-app/src/components/privateApis/VideoEffectsExAPIs.tsx +++ b/apps/teams-test-app/src/components/privateApis/VideoEffectsExAPIs.tsx @@ -107,6 +107,7 @@ const MediaStreamRegisterForVideoFrame = (): React.ReactElement => onClick: async (setResult) => { try { const audioInferenceModel = new ArrayBuffer(8); + const requiredCapabilities = []; const view = new Uint8Array(audioInferenceModel); for (let i = 0; i < view.length; i++) { view[i] = i; @@ -121,6 +122,7 @@ const MediaStreamRegisterForVideoFrame = (): React.ReactElement => format: videoEffects.VideoFrameFormat.NV12, requireCameraStream: false, audioInferenceModel, + requiredCapabilities, }, }); } catch (error) { @@ -169,6 +171,7 @@ const SharedFrameRegisterForVideoFrame = (): React.ReactElement => onClick: async (setResult) => { try { const audioInferenceModel = new ArrayBuffer(8); + const requiredCapabilities = []; const view = new Uint8Array(audioInferenceModel); for (let i = 0; i < view.length; i++) { view[i] = i; @@ -184,6 +187,7 @@ const SharedFrameRegisterForVideoFrame = (): React.ReactElement => format: videoEffects.VideoFrameFormat.NV12, requireCameraStream: false, audioInferenceModel, + requiredCapabilities, }, }); } catch (error) { diff --git a/change/@microsoft-teams-js-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json b/change/@microsoft-teams-js-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json new file mode 100644 index 0000000000..a3cee39993 --- /dev/null +++ b/change/@microsoft-teams-js-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Added new fields to `VideoFrameConfig` and `VideoFrameData` to allow specifying additional capabilities to be applied to a video frame and reading arbitrary attributes on a video frame respectively. The capability is still awaiting support in one or most host applications. To track availability of this capability across different hosts see https://aka.ms/capmatrix", + "packageName": "@microsoft/teams-js", + "email": "olsolari@microsoft.com", + "dependentChangeType": "patch" +} \ No newline at end of file diff --git a/packages/teams-js/src/internal/videoEffectsUtils.ts b/packages/teams-js/src/internal/videoEffectsUtils.ts index e3ba5b85d2..0e723158dd 100644 --- a/packages/teams-js/src/internal/videoEffectsUtils.ts +++ b/packages/teams-js/src/internal/videoEffectsUtils.ts @@ -286,6 +286,7 @@ class OneTextureMetadata { // Stream id for audio inference metadata, which is the 4-byte ASCII string "1dia" hardcoded by the host // (1dia stands for "audio inference data version 1") private readonly AUDIO_INFERENCE_RESULT_STREAM_ID = 0x31646961; + private readonly ATTRIBUTE_ID_MAP_STREAM_ID = 0x4d444941; public constructor(metadataBuffer: ArrayBuffer, streamCount: number) { const metadataDataView = new Uint32Array(metadataBuffer); for (let i = 0, index = 0; i < streamCount; i++) { @@ -300,6 +301,58 @@ class OneTextureMetadata { public get audioInferenceResult(): Uint8Array | undefined { return this.metadataMap.get(this.AUDIO_INFERENCE_RESULT_STREAM_ID); } + + /** + * @hidden + * Additional attributes on the video frame are string-indexed, with their stream Id dynamically generated. + * The mapping of attribute Ids to their stream Ids is itself stored as frame metadata with layout: + * + * | attribute count | attribute stream Id | attribute id | ... | + * | :---: | :---: | :---: | :---: | + * | 4 bytes | 4 bytes | variable length string (null terminated, 4 byte aligned) | ... | + * + * + * @internal + * Limited to Microsoft-internal use + */ + public get attributes(): ReadonlyMap | undefined { + const data = this.metadataMap.get(this.ATTRIBUTE_ID_MAP_STREAM_ID); + if (data === undefined) { + return undefined; + } + + const map: Map = new Map(); + const textDecoder = new TextDecoder('utf-8'); + + let offset = 0; + const count = data[offset] + (data[++offset] << 8) + (data[++offset] << 16) + (data[++offset] << 24); + + for (let i = 0; i < count && offset < data.length - 1; i++) { + const streamId = data[++offset] + (data[++offset] << 8) + (data[++offset] << 16) + (data[++offset] << 24); + + // Find start of null-terminator for the subsequent variable-length string entry + const nullTerminatorStartIndex = data.findIndex((value, index, _) => { + return value == 0 && index > offset; + }); + + const attributeId = textDecoder.decode(data.slice(++offset, nullTerminatorStartIndex)); + + // Read attribute value from metadata map + const metadata = this.metadataMap.get(streamId); + if (metadata !== undefined) { + map.set(attributeId, metadata); + } + + // Variable length attribute Id strings are null-terminated to a 4-byte alignment + const stringByteLength = nullTerminatorStartIndex - offset; + const paddingSize = 4 - (stringByteLength % 4); + + // Set offset to index of last trailing zero + offset = nullTerminatorStartIndex + (paddingSize - 1); + } + + return map; + } } class TransformerWithMetadata { @@ -325,9 +378,9 @@ class TransformerWithMetadata { const timestamp = originalFrame.timestamp; if (timestamp !== null) { try { - const { videoFrame, metadata: { audioInferenceResult } = {} } = + const { videoFrame, metadata: { audioInferenceResult, attributes } = {} } = await this.extractVideoFrameAndMetadata(originalFrame); - const frameProcessedByApp = await this.videoFrameHandler({ videoFrame, audioInferenceResult }); + const frameProcessedByApp = await this.videoFrameHandler({ videoFrame, audioInferenceResult, attributes }); // the current typescript version(4.6.4) dosn't support webcodecs API fully, we have to do type conversion here. const processedFrame = new VideoFrame(frameProcessedByApp as unknown as CanvasImageSource, { // we need the timestamp to be unchanged from the oirginal frame, so we explicitly set it here. @@ -373,7 +426,10 @@ class TransformerWithMetadata { */ private extractVideoFrameAndMetadata = async ( texture: VideoFrame, - ): Promise<{ videoFrame: VideoFrame; metadata: { audioInferenceResult?: Uint8Array } }> => { + ): Promise<{ + videoFrame: VideoFrame; + metadata: { audioInferenceResult?: Uint8Array; attributes?: ReadonlyMap }; + }> => { if (inServerSideRenderingEnvironment()) { throw errorNotSupportedOnPlatform; } @@ -427,6 +483,7 @@ class TransformerWithMetadata { }) as VideoFrame, metadata: { audioInferenceResult: this.shouldDiscardAudioInferenceResult ? undefined : metadata.audioInferenceResult, + attributes: metadata.attributes, }, }; }; diff --git a/packages/teams-js/src/private/videoEffectsEx.ts b/packages/teams-js/src/private/videoEffectsEx.ts index 54a1fa4aaf..f565809f1c 100644 --- a/packages/teams-js/src/private/videoEffectsEx.ts +++ b/packages/teams-js/src/private/videoEffectsEx.ts @@ -71,6 +71,15 @@ export namespace videoEffectsEx { * Limited to Microsoft-internal use */ audioInferenceModel?: ArrayBuffer; + /** + * @hidden + * Specifies additional capabilities that should be applied to the video frame + * @beta + * + * @internal + * Limited to Microsoft-internal use + */ + requiredCapabilities?: string[]; } /** @@ -139,6 +148,15 @@ export namespace videoEffectsEx { * Limited to Microsoft-internal use */ audioInferenceResult?: Uint8Array; + /** + * @hidden + * Additional metadata determined by capabilities specified in {@linkcode VideoFrameConfig.requiredCapabilities} + * @beta + * + * @internal + * Limited to Microsoft-internal use + */ + attributes?: ReadonlyMap; }; /** diff --git a/packages/teams-js/test/private/videoEffectsEx.spec.ts b/packages/teams-js/test/private/videoEffectsEx.spec.ts index 8860eeae40..6dc1a6ca41 100644 --- a/packages/teams-js/test/private/videoEffectsEx.spec.ts +++ b/packages/teams-js/test/private/videoEffectsEx.spec.ts @@ -1,3 +1,5 @@ +import { TextDecoder, TextEncoder } from 'util'; + import { GlobalVars } from '../../src/internal/globalVars'; import { DOMMessageEvent } from '../../src/internal/interfaces'; import { MessageRequest } from '../../src/internal/messageObjects'; @@ -8,6 +10,8 @@ import { errorNotSupportedOnPlatform, FrameContexts } from '../../src/public/con import { videoEffects } from '../../src/public/videoEffects'; import { Utils } from '../utils'; +Object.assign(global, { TextDecoder, TextEncoder }); + /* eslint-disable */ /* As part of enabling eslint on test files, we need to disable eslint checking on the specific files with large numbers of errors. Then, over time, we can fix the errors and reenable eslint on a per file basis. */ @@ -40,6 +44,7 @@ describe('videoEffectsEx', () => { format: videoEffects.VideoFrameFormat.NV12, requireCameraStream: false, audioInferenceModel: new ArrayBuffer(100), + requiredCapabilities: [], }; const registerForVideoFrameParameters: videoEffectsEx.RegisterForVideoFrameParameters = { @@ -80,6 +85,7 @@ describe('videoEffectsEx', () => { const message = utils.findMessageByFunc('video.registerForVideoFrame') as MessageRequest; expect(message).not.toBeNull(); expect(message?.args?.[0]).toHaveProperty('audioInferenceModel'); + expect(message?.args?.[0]).toHaveProperty('requiredCapabilities'); expect(message?.args?.[0].format).toBe(videoEffects.VideoFrameFormat.NV12); expect(message?.args?.[0].requireCameraStream).toBe(false); }); @@ -391,6 +397,36 @@ describe('videoEffectsEx', () => { ); }); + it('should receive attributes with video frame', async () => { + expect.assertions(3); + + // Arrange + const expectedFrameAttributes = window['FrameAttributes'] as ReadonlyMap; + let receivedFrameAttributes; + const videoFrameHandler = (data) => { + receivedFrameAttributes = data.attributes; + return Promise.resolve(data.videoFrame); + }; + + // Act + videoEffectsEx.registerForVideoFrame({ + ...registerForVideoFrameParameters, + videoFrameHandler, + }); + await utils.respondToFramelessMessage({ + data: { + func: 'video.startVideoExtensibilityVideoStream', + args: [{ streamId: 'stream id', metadataInTexture: true }], + }, + } as DOMMessageEvent); + await utils.flushPromises(); + + // Assert + expect(receivedFrameAttributes).not.toEqual(undefined); + expect(receivedFrameAttributes.size).toEqual(expectedFrameAttributes.size); + expect(receivedFrameAttributes).toEqual(expectedFrameAttributes); + }); + it('should get and register stream with streamId received from startVideoExtensibilityVideoStream', async () => { expect.assertions(5); @@ -698,6 +734,7 @@ describe('videoEffectsEx', () => { format: videoEffects.VideoFrameFormat.NV12, requireCameraStream: false, audioInferenceModel: new ArrayBuffer(100), + requiredCapabilities: [], }; const registerForVideoFrameParameters: videoEffectsEx.RegisterForVideoFrameParameters = { videoBufferHandler: (_bufferData, _onSuccess, _onError) => {}, @@ -1166,6 +1203,52 @@ describe('videoEffectsEx', () => { }); }); +function numToByteArray(num: number): Uint8Array { + return new Uint8Array((new Uint32Array([num])).buffer); +} + +function generateOneTextureMetadataMock(attributes: ReadonlyMap, streamCount: number): Uint8Array { + const metadataHeaderSize = 12 * streamCount; + + let streamId = 2; + const headerSegment = new Array(); + const dataSegment = new Array(); + const textEncoder = new TextEncoder(); + + const attributesData = new Array(); + attributesData.push(...numToByteArray(attributes.size)); + + attributes.forEach((attributeData, attributeId, _) => { + const stringBytes = textEncoder.encode(attributeId); + const paddingSize = 4 - (stringBytes.length % 4); // null terminator bytes length + + headerSegment.push(streamId); + headerSegment.push(metadataHeaderSize + dataSegment.length); + headerSegment.push(attributeData.length); + + attributesData.push(...numToByteArray(streamId++)); + attributesData.push(...stringBytes); + attributesData.push(...(new Uint8Array(paddingSize))); + + dataSegment.push(...attributeData); + }); + + headerSegment.push(0x4d444941); // ATTRIBUTE_ID_MAP_STREAM_ID + headerSegment.push(metadataHeaderSize + dataSegment.length); + headerSegment.push(attributesData.length); + + dataSegment.push(...attributesData); + + const headerBuffer = new Uint32Array(headerSegment); + const dataBuffer = new Uint8Array(dataSegment); + + const metadata = new Uint8Array(headerBuffer.byteLength + dataBuffer.byteLength); + metadata.set(new Uint8Array(headerBuffer.buffer)); + metadata.set(dataBuffer, headerBuffer.byteLength); + + return metadata; +} + function mockMediaStreamAPI() { // Jest doesn't support MediaStream API yet, so we need to mock it. // Reference: @@ -1192,6 +1275,33 @@ function mockMediaStreamAPI() { writable: true, }); + const originalVideoFrame = global['VideoFrame']; + + Object.defineProperty(global, 'VideoFrame', { + value: jest.fn().mockImplementation(() => ({})), + writable: true, + }); + + const frameAttributesMock = new Map(); + frameAttributesMock.set('attribute-id-1', new Uint8Array([23, 45, 2, 75, 134])); + frameAttributesMock.set('attribute-id-2', new Uint8Array([76, 145, 9])); + frameAttributesMock.set('attribute-id-3', new Uint8Array([213, 78, 82, 237, 12, 34, 97, 6])); + + window['FrameAttributes'] = frameAttributesMock; + + const oneTextureHeaderMock = new Uint32Array([ + 0x6f746931, // ONE_TEXTURE_INPUT_ID + 1, // version + 2, // frameOffset + 0, // frameFormat + 100, // frameWidth + 90, // frameHeight + 92, // multiStreamHeaderRowOffset (frameRowOffset + frameHeight) + 1 + frameAttributesMock.size, // multiStreamCount + ]); + + const oneTextureMetadataMock = new Uint8Array(generateOneTextureMetadataMock(frameAttributesMock, oneTextureHeaderMock[7])); + const originalReadableStream = window['ReadableStream']; Object.defineProperty(window, 'ReadableStream', { @@ -1205,6 +1315,10 @@ function mockMediaStreamAPI() { timestamp: 0, codedWidth: 100, codedHeight: 100, + format: 'NV12', + copyTo: jest.fn() + .mockImplementationOnce((buffer) => new Uint32Array(buffer).set(oneTextureHeaderMock)) + .mockImplementationOnce((buffer) => new Uint8Array(buffer).set(oneTextureMetadataMock)), // eslint-disable-next-line @typescript-eslint/no-empty-function close: () => {}, }, @@ -1270,6 +1384,11 @@ function mockMediaStreamAPI() { // restore original APIs return () => { + Object.defineProperty(global, 'VideoFrame', { + value: originalVideoFrame, + writable: true, + }); + Object.defineProperties(window, { MediaStream: { value: originalMediaStream, From a8f5866d6338a630e44a102273d1fa328ab310ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AE=20=28=20=CD=A1=E0=B2=A0=20=CA=96=CC=AF=20=CD=A1?= =?UTF-8?q?=E0=B2=A0=29?= <36546967+AE-MS@users.noreply.github.com> Date: Fri, 26 Jul 2024 15:23:30 -0700 Subject: [PATCH 03/18] Add support for *.cloud.microsoft domains (#2429) * Add support for *.cloud.microsoft domains * Add changefile * Add high-profile validDomains origin validation to unit tests --- ...ams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json | 7 +++++++ .../teams-js/src/artifactsForCDN/validDomains.json | 4 +--- .../teams-js/test/internal/validOrigins.spec.ts | 13 +++++++++++++ packages/teams-js/test/private/privateAPIs.spec.ts | 4 ++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 change/@microsoft-teams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json diff --git a/change/@microsoft-teams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json b/change/@microsoft-teams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json new file mode 100644 index 0000000000..ff54e1c17c --- /dev/null +++ b/change/@microsoft-teams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Added support for any `*.cloud.microsoft` domain to be a valid host", + "packageName": "@microsoft/teams-js", + "email": "36546967+AE-MS@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/teams-js/src/artifactsForCDN/validDomains.json b/packages/teams-js/src/artifactsForCDN/validDomains.json index d74cfbc07e..983eb70b77 100644 --- a/packages/teams-js/src/artifactsForCDN/validDomains.json +++ b/packages/teams-js/src/artifactsForCDN/validDomains.json @@ -29,9 +29,7 @@ "edgeservices.bing.com", "www.bing.com", "www.staging-bing-int.com", - "teams.cloud.microsoft", - "outlook.cloud.microsoft", - "m365.cloud.microsoft", + "*.cloud.microsoft", "copilot.microsoft.com", "windows.msn.com", "fa000000125.resources.office.net", diff --git a/packages/teams-js/test/internal/validOrigins.spec.ts b/packages/teams-js/test/internal/validOrigins.spec.ts index d975b95783..205deb2d09 100644 --- a/packages/teams-js/test/internal/validOrigins.spec.ts +++ b/packages/teams-js/test/internal/validOrigins.spec.ts @@ -123,6 +123,19 @@ describe('validOrigins', () => { GlobalVars.additionalValidOrigins = ['https://*.testdomain.com']; expect(result).toBe(false); }); + it('validateOrigin returns true for high-profile *.cloud.microsoft origins', async () => { + let messageOrigin = new URL('https://teams.cloud.microsoft'); + let result = await validateOrigin(messageOrigin); + expect(result).toBe(true); + + messageOrigin = new URL('https://outlook.cloud.microsoft'); + result = await validateOrigin(messageOrigin); + expect(result).toBe(true); + + messageOrigin = new URL('https://m365.cloud.microsoft'); + result = await validateOrigin(messageOrigin); + expect(result).toBe(true); + }); }); describe('testing main validOrigins flow with invalid json object', () => { let utils: Utils = new Utils(); diff --git a/packages/teams-js/test/private/privateAPIs.spec.ts b/packages/teams-js/test/private/privateAPIs.spec.ts index 886e4aab6c..3f70758294 100644 --- a/packages/teams-js/test/private/privateAPIs.spec.ts +++ b/packages/teams-js/test/private/privateAPIs.spec.ts @@ -117,6 +117,10 @@ describe('AppSDK-privateAPIs', () => { 'https://www.microsoft365.com', 'https://tasks.office.com', 'https://www.example.com', + 'https://teams.cloud.microsoft', + 'https://outlook.cloud.microsoft', + 'https://m365.cloud.microsoft', + 'https://anythingbecauseitsawildcard.cloud.microsoft', ]; supportedDomains.forEach((supportedDomain) => { From 414af38d0779e6baf5deb66ecb5048e20c7b834f Mon Sep 17 00:00:00 2001 From: jadahiya-MSFT <95651173+jadahiya-MSFT@users.noreply.github.com> Date: Fri, 26 Jul 2024 17:29:45 -0700 Subject: [PATCH 04/18] Adding in new domain for WXP (#2430) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added in WXP domain for unified store * Added in changefile --------- Co-authored-by: AE ( ͡ಠ ʖ̯ ͡ಠ) <36546967+AE-MS@users.noreply.github.com> --- ...soft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json | 7 +++++++ packages/teams-js/src/artifactsForCDN/validDomains.json | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 change/@microsoft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json diff --git a/change/@microsoft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json b/change/@microsoft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json new file mode 100644 index 0000000000..0483079d25 --- /dev/null +++ b/change/@microsoft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Added in WXP domain for unified store", + "packageName": "@microsoft/teams-js", + "email": "jadahiya@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/packages/teams-js/src/artifactsForCDN/validDomains.json b/packages/teams-js/src/artifactsForCDN/validDomains.json index 983eb70b77..268ee3121d 100644 --- a/packages/teams-js/src/artifactsForCDN/validDomains.json +++ b/packages/teams-js/src/artifactsForCDN/validDomains.json @@ -35,6 +35,7 @@ "fa000000125.resources.office.net", "fa000000129.resources.office.net", "fa000000124.resources.office.net", - "fa000000128.resources.office.net" + "fa000000128.resources.office.net", + "fa000000136.resources.office.net" ] } From 4673be9c470cefb1851713e58373b63690a05a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AE=20=28=20=CD=A1=E0=B2=A0=20=CA=96=CC=AF=20=CD=A1?= =?UTF-8?q?=E0=B2=A0=29?= <36546967+AE-MS@users.noreply.github.com> Date: Mon, 29 Jul 2024 09:20:18 -0700 Subject: [PATCH 05/18] Fixed behavior of the `isValidOriginsCacheEmpty` function whose name was backwards (#2431) * Fix inverse function name * changefile --- ...soft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json | 7 +++++++ packages/teams-js/src/internal/validOrigins.ts | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 change/@microsoft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json diff --git a/change/@microsoft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json b/change/@microsoft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json new file mode 100644 index 0000000000..778ad5f83c --- /dev/null +++ b/change/@microsoft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fixed behavior of the `isValidOriginsCacheEmpty` function whose name was backwards of what it was actually doing", + "packageName": "@microsoft/teams-js", + "email": "36546967+AE-MS@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/teams-js/src/internal/validOrigins.ts b/packages/teams-js/src/internal/validOrigins.ts index ea3dc6e422..ebec2773c7 100644 --- a/packages/teams-js/src/internal/validOrigins.ts +++ b/packages/teams-js/src/internal/validOrigins.ts @@ -11,11 +11,11 @@ export async function prefetchOriginsFromCDN(): Promise { } function isValidOriginsCacheEmpty(): boolean { - return validOriginsCache.length !== 0; + return validOriginsCache.length === 0; } async function getValidOriginsListFromCDN(): Promise { - if (isValidOriginsCacheEmpty()) { + if (!isValidOriginsCacheEmpty()) { return validOriginsCache; } if (!inServerSideRenderingEnvironment()) { From 92fc58c40b5ac87d6242fea26542f84c9a192f72 Mon Sep 17 00:00:00 2001 From: Toni Solarin-Sodara Date: Mon, 29 Jul 2024 19:03:54 +0100 Subject: [PATCH 06/18] Update version constraint in video.sharedFrame test (#2433) Co-authored-by: Trevor Harris --- apps/teams-test-app/e2e-test-data/video.sharedFrame.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/teams-test-app/e2e-test-data/video.sharedFrame.json b/apps/teams-test-app/e2e-test-data/video.sharedFrame.json index 7188910e20..6679fdf299 100644 --- a/apps/teams-test-app/e2e-test-data/video.sharedFrame.json +++ b/apps/teams-test-app/e2e-test-data/video.sharedFrame.json @@ -15,7 +15,7 @@ { "title": "videoEx.sharedFrame.registerForVideoFrame - Success", "type": "callResponse", - "version": ">2.12.0", + "version": "<=2.25.0", "boxSelector": "#box_videoExSharedFrameRegisterForVideoFrame1", "hostSdkVersion": { "web": "<=4.0.0" @@ -27,7 +27,7 @@ { "title": "videoEx.sharedFrame.registerForVideoFrame - Success", "type": "callResponse", - "version": ">2.12.0", + "version": ">2.25.0", "boxSelector": "#box_videoExSharedFrameRegisterForVideoFrame1", "hostSdkVersion": { "web": ">4.0.0" From b998d3355922fad798a6a7c26aedcfdcdc3b9029 Mon Sep 17 00:00:00 2001 From: alexneyman-MSFT <112656629+alexneyman-MSFT@users.noreply.github.com> Date: Mon, 29 Jul 2024 18:04:43 -0400 Subject: [PATCH 07/18] Swap getUser auth test fixes to an earlier patch version (#2436) * Swap getUser auth test fixes to an earlier patch version --------- Co-authored-by: Shreyas <98348000+shrshindeMSFT@users.noreply.github.com> Co-authored-by: Erin --- apps/teams-test-app/e2e-test-data/authentication.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/teams-test-app/e2e-test-data/authentication.json b/apps/teams-test-app/e2e-test-data/authentication.json index b0b3e85209..a02a11b651 100644 --- a/apps/teams-test-app/e2e-test-data/authentication.json +++ b/apps/teams-test-app/e2e-test-data/authentication.json @@ -22,7 +22,7 @@ "title": "getUser API Call - Failure (Not full trust)", "version": ">2.25.0", "hostSdkVersion": { - "web": "<=3.1.0" + "web": "<=3.0.2" }, "type": "callResponse", "platformsExcluded": ["iOS"], @@ -34,7 +34,7 @@ "title": "getUser API Call - Failure (Not full trust and not Microsoft owned)", "version": ">2.25.0", "hostSdkVersion": { - "web": ">3.1.0" + "web": ">3.0.2" }, "type": "callResponse", "platformsExcluded": ["iOS"], @@ -46,7 +46,7 @@ "title": "getUser API Call - Success (Full trust app)", "version": ">2.25.0", "hostSdkVersion": { - "web": ">3.1.0" + "web": ">3.0.2" }, "type": "callResponse", "platformsExcluded": ["iOS"], @@ -58,7 +58,7 @@ "title": "getUser API Call - Success (Full trust and Microsoft owned app)", "version": ">2.25.0", "hostSdkVersion": { - "web": ">3.1.0" + "web": ">3.0.2" }, "type": "callResponse", "platformsExcluded": ["iOS"], From dafe146922abe4dbe785cacf4319dc6bb48362b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 03:27:26 +0000 Subject: [PATCH 08/18] Bump fast-xml-parser in /apps/teamsjs-diagnostic-app/api (#2438) Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.4.0 to 4.4.1. - [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases) - [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.4.0...v4.4.1) --- updated-dependencies: - dependency-name: fast-xml-parser dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- apps/teamsjs-diagnostic-app/api/package-lock.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/teamsjs-diagnostic-app/api/package-lock.json b/apps/teamsjs-diagnostic-app/api/package-lock.json index 0806d81381..1180820f37 100644 --- a/apps/teamsjs-diagnostic-app/api/package-lock.json +++ b/apps/teamsjs-diagnostic-app/api/package-lock.json @@ -1739,9 +1739,9 @@ } }, "node_modules/fast-xml-parser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", - "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ { "type": "github", @@ -1752,7 +1752,6 @@ "url": "https://paypal.me/naturalintelligence" } ], - "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, From 3adb795d1c3baf13ea43ae23834262d461273dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AE=20=28=20=CD=A1=E0=B2=A0=20=CA=96=CC=AF=20=CD=A1?= =?UTF-8?q?=E0=B2=A0=29?= <36546967+AE-MS@users.noreply.github.com> Date: Mon, 5 Aug 2024 09:10:09 -0700 Subject: [PATCH 09/18] Split the web E2E tests by starting letter (#2432) * First attempt at splitting the tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * More tests * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * more test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates * test updates --- azure-pipelines.yml | 90 ++++++---------------- tools/yaml-templates/web-e2e-tests-job.yml | 73 ++++++++++++++++++ 2 files changed, 96 insertions(+), 67 deletions(-) create mode 100644 tools/yaml-templates/web-e2e-tests-job.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c510e2e67a..cc750adf70 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -133,72 +133,28 @@ extends: mergeTestResults: true condition: succeededOrFailed() - - job: E2ETest2 - displayName: 'E2E Test - Default' - timeoutInMinutes: 90 - pool: - name: Azure-Pipelines-1ESPT-ExDShared - image: 'ubuntu-2004' - os: linux - steps: - - template: tools/yaml-templates/build-app-host.yml@self - parameters: - appHostGitPath: AppHostingSdk - - - bash: 'node tools/cli/runAppsWithE2ETests.js --useDataFromLocal=true' - displayName: 'Run E2E integration tests' - condition: succeeded() - workingDirectory: '$(AppHostingSdkProjectDirectory)' - - - task: CMDLine@2 - displayName: 'Run tests for electron webview' - inputs: - script: | - pnpm exec xvfb-maybe playwright test - workingDirectory: '$(AppHostingSdkProjectDirectory)' - - - task: PublishTestResults@2 - inputs: - testResultsFormat: 'JUnit' - testResultsFiles: '**/e2e-tests-report*.xml' - testRunTitle: 'E2E Tests - Default' - mergeTestResults: true - condition: succeededOrFailed() - - - job: E2ETest3 - displayName: 'E2E Test - Local Tag' - timeoutInMinutes: 90 - pool: - name: Azure-Pipelines-1ESPT-ExDShared - image: 'ubuntu-latest' - os: linux - steps: - - template: tools/yaml-templates/build-app-host.yml@self - parameters: - appHostGitPath: AppHostingSdk - - - task: CmdLine@2 - displayName: 'Build Test App Local' - inputs: - script: | - pnpm build-test-app-local - workingDirectory: '$(ClientSdkProjectDirectory)' - - - bash: 'node tools/cli/runAppsWithE2ETests.js --useDataFromLocal=true --reportFileName=e2e-tests-report-local-script-tag --envType=localScriptTag' - displayName: 'Run E2E integration tests with local script tag' - condition: succeeded() - workingDirectory: '$(AppHostingSdkProjectDirectory)' - - - task: PublishTestResults@2 - inputs: - testResultsFormat: 'JUnit' - testResultsFiles: '**/e2e-tests-report*.xml' - testRunTitle: 'E2E Tests - Local Tag' - mergeTestResults: true - condition: succeededOrFailed() + - template: tools/yaml-templates/web-e2e-tests-job.yml@self + parameters: + AppHostingSdk: AppHostingSdk + hostingEnvironmentType: 'standardWeb' + teamsJsReferenceType: 'npm' + testPrefixPatternGroups: ['{[0-9],[A-D],[a-d]}', '{[E],[e]}', '{[F-M],[f-m]}', '{[N-Z],[n-z]}'] + + - template: tools/yaml-templates/web-e2e-tests-job.yml@self + parameters: + AppHostingSdk: AppHostingSdk + hostingEnvironmentType: 'standardWeb' + teamsJsReferenceType: 'scriptTag' + testPrefixPatternGroups: ['{[0-9],[A-D],[a-d]}', '{[E],[e]}', '{[F-M],[f-m]}', '{[N-Z],[n-z]}'] + + - template: tools/yaml-templates/web-e2e-tests-job.yml@self + parameters: + AppHostingSdk: AppHostingSdk + hostingEnvironmentType: 'electron' + teamsJsReferenceType: 'npm' - job: E2ETestCDN - displayName: 'E2E Test - CDN (only runs on release builds)' + displayName: 'E2E Tests - CDN (only runs on release builds)' # This test only runs after deployment from a release branch and the new CDN version has been deployed # This check will run on the PR to merge the release branch back into main condition: and( @@ -237,7 +193,7 @@ extends: condition: succeededOrFailed() - job: E2ETestAndroid - displayName: 'E2E Test - Android' + displayName: 'E2E Tests - Android' pool: name: Azure Pipelines image: internal-macos12 @@ -248,7 +204,7 @@ extends: androidAppHostingSdkGitPath: AndroidAppHostingSdk - job: E2ETestIOS - displayName: 'E2E Test - IOS - Plan A' + displayName: 'E2E Tests - IOS - Plan A' pool: name: Azure Pipelines image: internal-macos12 @@ -260,7 +216,7 @@ extends: testPlan: iosE2ETestPlanA - job: E2ETestIOS2 - displayName: 'E2E Test - IOS - Plan B' + displayName: 'E2E Tests - IOS - Plan B' pool: name: Azure Pipelines image: internal-macos12 diff --git a/tools/yaml-templates/web-e2e-tests-job.yml b/tools/yaml-templates/web-e2e-tests-job.yml new file mode 100644 index 0000000000..f47c3b3c20 --- /dev/null +++ b/tools/yaml-templates/web-e2e-tests-job.yml @@ -0,0 +1,73 @@ +# This template handles running E2E tests (including all necessary setup steps) from the host SDK repo for various environments. +# It will run one E2E job for each testPrefixPattern selector in the testPrefixPatternGroups parameter. + +parameters: + - name: AppHostingSdk + default: none + type: string + - name: hostingEnvironmentType + type: string + values: + - 'electron' + - 'standardWeb' + - name: teamsJsReferenceType + type: string + values: + - 'npm' + - 'scriptTag' + - name: testPrefixPatternGroups + type: object + default: ['{[A-Z],[a-z],[0-9]}'] + +jobs: + - ${{each testPrefixPattern in parameters.testPrefixPatternGroups}}: + - job: E2ETestsWeb_${{parameters.teamsJsReferenceType}}_${{ replace(replace(replace(replace(replace(replace(testPrefixPattern, '[', '_'), ']', '_' ), '{', '_'), '}', '_'), ',', '_'), '-', '_') }} + displayName: 'E2E Tests - Web - Via ${{parameters.teamsJsReferenceType}} - ${{parameters.hostingEnvironmentType}} Hosted - ${{testPrefixPattern}}' + pool: + name: Azure-Pipelines-1ESPT-ExDShared + image: 'ubuntu-2004' + os: linux + variables: + - name: envType + ${{ if eq(parameters.teamsJsReferenceType, 'npm') }}: + value: 'test' + ${{ else }}: + value: 'localScriptTag' + steps: + - template: build-app-host.yml + parameters: + appHostGitPath: AppHostingSdk + + - task: CmdLine@2 + displayName: 'Build Local Test App to Reference via Script Tag' + condition: and(succeeded(), eq('${{ parameters.teamsJsReferenceType }}', 'scriptTag')) + inputs: + script: | + pnpm build-test-app-local + workingDirectory: '$(ClientSdkProjectDirectory)' + + - bash: > + node tools/cli/runAppsWithE2ETests.js + --useDataFromLocal=true + --testPrefixPattern "${{testPrefixPattern}}" + --envType=${{ variables.envType }} + displayName: 'Run web hosted E2E integration tests (${{testPrefixPattern}})' + condition: and(succeeded(), eq('${{ parameters.hostingEnvironmentType }}', 'standardWeb')) + workingDirectory: '$(AppHostingSdkProjectDirectory)' + + - bash: | + # This sets up the server but runs no tests + node tools/cli/runAppsWithE2ETests.js --useDataFromLocal=true --testPrefixPattern "{[]}" + # This runs the Electron tests, which currently cannot be filtered + pnpm exec xvfb-maybe playwright test + displayName: 'Run Electron E2E tests' + condition: and(succeeded(), eq('${{ parameters.hostingEnvironmentType }}', 'electron')) + workingDirectory: '$(AppHostingSdkProjectDirectory)' + + - task: PublishTestResults@2 + inputs: + testResultsFormat: 'JUnit' + testResultsFiles: '**/e2e-tests-report*.xml' + testRunTitle: 'E2E Tests - Default' + mergeTestResults: true + condition: succeededOrFailed() From 3f0c6e65654b94620c4250214024ea88d13eea08 Mon Sep 17 00:00:00 2001 From: jadahiya-MSFT <95651173+jadahiya-MSFT@users.noreply.github.com> Date: Mon, 5 Aug 2024 15:55:38 -0700 Subject: [PATCH 10/18] Updated packages with CG vulnerabilities (#2437) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated packages with CG vulnerabilities * Removing unnecessary lock files and updated packages for more CG vulnerabilities --------- Co-authored-by: AE ( ͡ಠ ʖ̯ ͡ಠ) <36546967+AE-MS@users.noreply.github.com> --- .../api/package-lock.json | 3826 ----------------- apps/teamsjs-diagnostic-app/api/package.json | 6 +- apps/teamsjs-diagnostic-app/package-lock.json | 1661 ------- apps/teamsjs-diagnostic-app/package.json | 16 +- package.json | 11 +- pnpm-lock.yaml | 1550 ++++--- 6 files changed, 861 insertions(+), 6209 deletions(-) delete mode 100644 apps/teamsjs-diagnostic-app/api/package-lock.json delete mode 100644 apps/teamsjs-diagnostic-app/package-lock.json diff --git a/apps/teamsjs-diagnostic-app/api/package-lock.json b/apps/teamsjs-diagnostic-app/api/package-lock.json deleted file mode 100644 index 1180820f37..0000000000 --- a/apps/teamsjs-diagnostic-app/api/package-lock.json +++ /dev/null @@ -1,3826 +0,0 @@ -{ - "name": "teamsfx-template-api", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "teamsfx-template-api", - "version": "1.0.0", - "dependencies": { - "@azure/functions": "^4.0.0", - "@microsoft/microsoft-graph-client": "^3.0.1", - "@microsoft/teamsfx": "^2.0.0", - "isomorphic-fetch": "^3.0.0" - }, - "devDependencies": { - "@types/node": "^18.x", - "env-cmd": "^10.1.0", - "rimraf": "^5.0.0", - "typescript": "^4.4.4" - }, - "engines": { - "node": "18 || 20" - } - }, - "node_modules/@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/core-auth": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", - "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-client": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", - "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.9.1", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-http": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.4.tgz", - "integrity": "sha512-Fok9VVhMdxAFOtqiiAtg74fL0UJkt0z3D+ouUUxcRLzZNBioPRAMJFVxiWoJljYpXsRi4GDQHzQHDc9AiYaIUQ==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-tracing": "1.0.0-preview.13", - "@azure/core-util": "^1.1.1", - "@azure/logger": "^1.0.0", - "@types/node-fetch": "^2.5.0", - "@types/tunnel": "^0.0.3", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7", - "process": "^0.11.10", - "tslib": "^2.2.0", - "tunnel": "^0.0.6", - "uuid": "^8.3.0", - "xml2js": "^0.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@azure/core-http-compat": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.1.2.tgz", - "integrity": "sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-client": "^1.3.0", - "@azure/core-rest-pipeline": "^1.3.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-http-compat/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-http/node_modules/@azure/core-tracing": { - "version": "1.0.0-preview.13", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", - "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", - "license": "MIT", - "dependencies": { - "@opentelemetry/api": "^1.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/core-lro": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", - "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.2.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-lro/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-paging": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", - "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.0.tgz", - "integrity": "sha512-CeuTvsXxCUmEuxH5g/aceuSl6w2EugvNHKAtKKVdiX915EjJJxAwfzNNWZreNnbxHZ2fi0zaM6wwS23x2JVqSQ==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.9.0", - "@azure/logger": "^1.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-tracing": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", - "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", - "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/functions": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@azure/functions/-/functions-4.5.0.tgz", - "integrity": "sha512-WNCiOHMQEZpezxgThD3o2McKEjUEljtQBvdw4X4oE5714eTw76h33kIj0660ZJGEnxYSx4dx18oAbg5kLMs9iQ==", - "license": "MIT", - "dependencies": { - "cookie": "^0.6.0", - "long": "^4.0.0", - "undici": "^5.13.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@azure/identity": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.1.0.tgz", - "integrity": "sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-client": "^1.4.0", - "@azure/core-rest-pipeline": "^1.1.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.0.0", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^2.26.0", - "@azure/msal-common": "^7.0.0", - "@azure/msal-node": "^1.10.0", - "events": "^3.0.0", - "jws": "^4.0.0", - "open": "^8.0.0", - "stoppable": "^1.1.0", - "tslib": "^2.2.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/identity/node_modules/@azure/msal-browser": { - "version": "2.38.4", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.4.tgz", - "integrity": "sha512-d1qSanWO9fRKurrxhiyMOIj2jMoGw+2pHb51l2PXNwref7xQO+UeOP2q++5xfHQoUmgTtNuERhitynHla+dvhQ==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "13.3.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/identity/node_modules/@azure/msal-browser/node_modules/@azure/msal-common": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/keyvault-keys": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.8.0.tgz", - "integrity": "sha512-jkuYxgkw0aaRfk40OQhFqDIupqblIOIlYESWB6DKCVDxQet1pyv86Tfk9M+5uFM0+mCs6+MUHU+Hxh3joiUn4Q==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-client": "^1.5.0", - "@azure/core-http-compat": "^2.0.1", - "@azure/core-lro": "^2.2.0", - "@azure/core-paging": "^1.1.1", - "@azure/core-rest-pipeline": "^1.8.1", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.0.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/logger": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz", - "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.15.0.tgz", - "integrity": "sha512-jqngIR0zGLtEHCAhgXLl+VZTFcU/9DmRSjGj5RbrLnFPL/0L9Hr68k8grvLrTIq7tjhTM5Xgh6Xc0l7JlViHQQ==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "14.10.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": { - "version": "14.10.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.10.0.tgz", - "integrity": "sha512-Zk6DPDz7e1wPgLoLgAp0349Yay9RvcjPM5We/ehuenDNsz/t9QEFI7tRoHpp/e47I4p20XE3FiDlhKwAo3utDA==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.6.0.tgz", - "integrity": "sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node": { - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", - "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", - "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "13.3.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": "10 || 12 || 14 || 16 || 18" - } - }, - "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", - "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@js-joda/core": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.2.tgz", - "integrity": "sha512-ow4R+7C24xeTjiMTTZ4k6lvxj7MRBqvqLCQjThQff3RjOmIMokMP20LNYVFhGafJtUx/Xo2Qp4qU8eNoTVH0SA==", - "license": "BSD-3-Clause" - }, - "node_modules/@microsoft/adaptivecards-tools": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@microsoft/adaptivecards-tools/-/adaptivecards-tools-1.3.4.tgz", - "integrity": "sha512-gWWmh4el5MNRkaqqi2ijfSyfs6h+buFlEs1I4V44KQKBV54QZQtH2dXwBOODAs6fC98ripjuphfUqswToZd4RQ==", - "license": "MIT", - "dependencies": { - "adaptive-expressions": "^4.20.0", - "adaptivecards": "~2.10.0", - "adaptivecards-templating": "^2.1.0", - "markdown-it": "^13.0.2", - "react": "^17.0.2" - } - }, - "node_modules/@microsoft/microsoft-graph-client": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-3.0.7.tgz", - "integrity": "sha512-/AazAV/F+HK4LIywF9C+NYHcJo038zEnWkteilcxC1FM/uK/4NVGDKGrxx7nNq1ybspAroRKT4I1FHfxQzxkUw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependenciesMeta": { - "@azure/identity": { - "optional": true - }, - "@azure/msal-browser": { - "optional": true - }, - "buffer": { - "optional": true - }, - "stream-browserify": { - "optional": true - } - } - }, - "node_modules/@microsoft/recognizers-text": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text/-/recognizers-text-1.1.4.tgz", - "integrity": "sha512-hlSVXcaX5i8JcjuUJpVxmy2Z/GxvFXarF0KVySCFop57wNEnrLWMHe4I4DjP866G19VyIKRw+vPA32pkGhZgTg==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/recognizers-text-choice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-choice/-/recognizers-text-choice-1.1.4.tgz", - "integrity": "sha512-4CddwFe4RVhZeJgW65ocBrEdeukBMghK8pgI0K0Qy2eA5ysPZQpeZ7BGSDz5QMQei5LPY+QaAQ3CHU+ORHoO7A==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.1.4", - "grapheme-splitter": "^1.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/recognizers-text-data-types-timex-expression": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-data-types-timex-expression/-/recognizers-text-data-types-timex-expression-1.3.0.tgz", - "integrity": "sha512-REHUXmMUI1jL3b9v+aSdzKxLxRdejsfg9McYRxY3LW0Gu4UbwD7Q+K6mtSo40cwg8uh6fiV9GY8hDuKXHH6dVA==", - "license": "MIT", - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@microsoft/recognizers-text-date-time": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-date-time/-/recognizers-text-date-time-1.1.4.tgz", - "integrity": "sha512-leMnjN+KYNwNvRD5T4G0ORUzkjlek/BBZDvQIjAujtyrd/pkViUnuouWIPkFT/dbSOxXML8et54CSk2KfHiWIA==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.1.4", - "@microsoft/recognizers-text-number": "~1.1.4", - "@microsoft/recognizers-text-number-with-unit": "~1.1.4", - "lodash.isequal": "^4.5.0", - "lodash.tonumber": "^4.0.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/recognizers-text-date-time/node_modules/@microsoft/recognizers-text-number": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz", - "integrity": "sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.1.4", - "bignumber.js": "^7.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.sortby": "^4.7.0", - "lodash.trimend": "^4.5.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/recognizers-text-number": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.3.1.tgz", - "integrity": "sha512-JBxhSdihdQLQilCtqISEBw5kM+CNGTXzy5j5hNoZECNUEvBUPkAGNEJAeQPMP5abrYks29aSklnSvSyLObXaNQ==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.3.1", - "bignumber.js": "^7.2.1", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@microsoft/recognizers-text-number-with-unit": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number-with-unit/-/recognizers-text-number-with-unit-1.1.4.tgz", - "integrity": "sha512-zl+CfmfWK0x/x+iSgaBAevKTYO0F4+z7SYHAHztaaaGuX8FERw2jmUjSgVetm5KA3EveyCx0XYGU1mRNY8p7Eg==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.1.4", - "@microsoft/recognizers-text-number": "~1.1.4", - "lodash.escaperegexp": "^4.1.2", - "lodash.last": "^3.0.0", - "lodash.max": "^4.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/recognizers-text-number-with-unit/node_modules/@microsoft/recognizers-text-number": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz", - "integrity": "sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.1.4", - "bignumber.js": "^7.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.sortby": "^4.7.0", - "lodash.trimend": "^4.5.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/recognizers-text-number/node_modules/@microsoft/recognizers-text": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text/-/recognizers-text-1.3.1.tgz", - "integrity": "sha512-HikLoRUgSzM4OKP3JVBzUUp3Q7L4wgI17p/3rERF01HVmopcujY3i6wgx8PenCwbenyTNxjr1AwSDSVuFlYedQ==", - "license": "MIT", - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@microsoft/recognizers-text-sequence": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-sequence/-/recognizers-text-sequence-1.1.4.tgz", - "integrity": "sha512-rb5j8/aE7HSOdIxaVfCGFrj0wWPpSq0CuykFg/A/iJNPP+FnAU71bgP5HexrwQcpCsDinauisX7u0DKIChrHRA==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.1.4", - "grapheme-splitter": "^1.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/recognizers-text-suite": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-suite/-/recognizers-text-suite-1.1.4.tgz", - "integrity": "sha512-hNIaR4M2G0nNeI9WZxt9C0KYh/1vhjeKzX5Ds8XDdT0pxF7zwCSo19WNcPjrVK6aCOeZTw/ULofsAjdu9gSkcA==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.1.4", - "@microsoft/recognizers-text-choice": "~1.1.4", - "@microsoft/recognizers-text-date-time": "~1.1.4", - "@microsoft/recognizers-text-number": "~1.1.4", - "@microsoft/recognizers-text-number-with-unit": "~1.1.4", - "@microsoft/recognizers-text-sequence": "~1.1.4" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/recognizers-text-suite/node_modules/@microsoft/recognizers-text-number": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz", - "integrity": "sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text": "~1.1.4", - "bignumber.js": "^7.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.sortby": "^4.7.0", - "lodash.trimend": "^4.5.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/teams-js": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-2.23.0.tgz", - "integrity": "sha512-KDJrREwAeILVo0t/89ItbAWoUeJ6QytrTeCFXLYp3T9r1K2LEAJ2aOEvTsW2rzlKReg9CeWPVWGseundrSfBCw==", - "license": "MIT", - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "debug": "^4.3.3" - } - }, - "node_modules/@microsoft/teamsfx": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@microsoft/teamsfx/-/teamsfx-2.3.2.tgz", - "integrity": "sha512-jogzwpdER0b4szC6MCd9PNGfiRwZIsnAJHYnjhSH9S2VsmcDNzy5uc2elm2q6e5UyeugrI53SsxOA+YDs/QdAw==", - "license": "MIT", - "dependencies": { - "@azure/identity": "^2.0.1", - "@azure/msal-browser": "^3.0.2", - "@azure/msal-node": "^1.14.6", - "@microsoft/adaptivecards-tools": "1.3.4", - "@microsoft/microsoft-graph-client": "^3.0.7", - "axios": "^1.6.8", - "botbuilder": "^4.22.1", - "botbuilder-dialogs": "^4.22.1", - "botframework-connector": "^4.22.1", - "botframework-schema": "^4.22.1", - "jwt-decode": "^3.1.2", - "tedious": "^14.3.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "@microsoft/teams-js": "^2.19.0" - } - }, - "node_modules/@opentelemetry/api": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", - "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@types/atob-lite": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/atob-lite/-/atob-lite-2.0.2.tgz", - "integrity": "sha512-BbCDWqZzlBBq8czVNYPiQNnHPrdPmR1mcyv3c8autpLEDmBMJY4hjziedi4RlXC+jnquD6Ba/yFU6bboZ3ZKVA==", - "license": "MIT" - }, - "node_modules/@types/btoa-lite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", - "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==", - "license": "MIT" - }, - "node_modules/@types/es-aggregate-error": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.6.tgz", - "integrity": "sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", - "license": "MIT" - }, - "node_modules/@types/lodash.isequal": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/@types/lodash.isequal/-/lodash.isequal-4.5.8.tgz", - "integrity": "sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==", - "license": "MIT", - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "18.19.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", - "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/tunnel": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", - "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", - "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/xmldom": { - "version": "0.1.34", - "resolved": "https://registry.npmjs.org/@types/xmldom/-/xmldom-0.1.34.tgz", - "integrity": "sha512-7eZFfxI9XHYjJJuugddV6N5YNeXgQE1lArWOcd1eCOKWb/FGs5SIjacSYuEJuwhsGS3gy4RuZ5EUIcqYscuPDA==", - "license": "MIT" - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/adaptive-expressions": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/adaptive-expressions/-/adaptive-expressions-4.22.2.tgz", - "integrity": "sha512-isI6hyqzsUb/hTXuYQSM8ATbTnFhyX3KZzzoMYbrBYcGd8KYT3Fke3WG3Ayz9AaWzXe5R1YAJ9laYYxEJ3Yg/w==", - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text-data-types-timex-expression": "1.3.0", - "@types/atob-lite": "^2.0.0", - "@types/btoa-lite": "^1.0.0", - "@types/lodash.isequal": "^4.5.5", - "@types/lru-cache": "^5.1.0", - "@types/xmldom": "^0.1.30", - "@xmldom/xmldom": "^0.8.6", - "antlr4ts": "0.5.0-alpha.3", - "atob-lite": "^2.0.0", - "big-integer": "^1.6.48", - "btoa-lite": "^1.0.0", - "d3-format": "^1.4.4", - "dayjs": "^1.10.3", - "fast-xml-parser": "^4.2.5", - "jspath": "^0.4.0", - "lodash.isequal": "^4.5.0", - "lru-cache": "^5.1.1", - "uuid": "^8.3.2", - "xpath": "^0.0.32" - } - }, - "node_modules/adaptivecards": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/adaptivecards/-/adaptivecards-2.10.0.tgz", - "integrity": "sha512-QcgXGFlX3rgIfZkxvQY896zEVBh30mE37z3XKhcQW2OqSUrVH6dNT78MkM//W4wRdrZizSHqXKLaKyVVxAgVFg==", - "license": "MIT" - }, - "node_modules/adaptivecards-templating": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/adaptivecards-templating/-/adaptivecards-templating-2.3.1.tgz", - "integrity": "sha512-rYN1tCb+4NeWUCbo7xzGhwuOG3XllpGWCtgdl/drSJA32tljAvDrMeBO/eUk7uwXx8/1hSc5WJvzbAZQWMd35Q==", - "license": "MIT", - "peerDependencies": { - "adaptive-expressions": "^4.11.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.3", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.3.tgz", - "integrity": "sha512-La89tKkGcHFIVuruv4Bm1esc3zLmES2NOTEwwNS1pudz+zx/0FNqQeUu9p48i9/QHKPVqjN87LB+q3buTg7oDQ==", - "license": "BSD-3-Clause" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==", - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/botbuilder": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.22.2.tgz", - "integrity": "sha512-pfMbpN5nKyDNMKZZl4palWET+Q7oNHLYLSEyBie5sA4xJ1Gbzn7DT0T1QykATsr9O9s13mojJRyqnNYRflH0rw==", - "license": "MIT", - "dependencies": { - "@azure/core-http": "^3.0.2", - "@azure/msal-node": "^1.18.4", - "axios": "^0.28.0", - "botbuilder-core": "4.22.2", - "botbuilder-stdlib": "4.22.2-internal", - "botframework-connector": "4.22.2", - "botframework-schema": "4.22.2", - "botframework-streaming": "4.22.2", - "dayjs": "^1.10.3", - "filenamify": "^4.1.0", - "fs-extra": "^7.0.1", - "htmlparser2": "^6.0.1", - "uuid": "^8.3.2", - "zod": "^3.22.4" - } - }, - "node_modules/botbuilder-core": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/botbuilder-core/-/botbuilder-core-4.22.2.tgz", - "integrity": "sha512-3qzdiq0V51mrKzEZzle6TSAcX/XfiKyxyKQfStV8C4ivmYFC1RDAv2MVvvg2U4hcLvcp1MHqnDBlQJq/bwrT2w==", - "license": "MIT", - "dependencies": { - "botbuilder-dialogs-adaptive-runtime-core": "4.22.2-preview", - "botbuilder-stdlib": "4.22.2-internal", - "botframework-connector": "4.22.2", - "botframework-schema": "4.22.2", - "uuid": "^8.3.2", - "zod": "^3.22.4" - } - }, - "node_modules/botbuilder-dialogs": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/botbuilder-dialogs/-/botbuilder-dialogs-4.22.2.tgz", - "integrity": "sha512-Y2tBEmi7cHa/2/5dyLLD6IT6KaggyG9iv46iuqbNV4CxI/c21fxL4TTB+YM64exD7YjUPQQC+UiUXQGOOaHFPw==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@microsoft/recognizers-text-choice": "1.1.4", - "@microsoft/recognizers-text-date-time": "1.1.4", - "@microsoft/recognizers-text-number": "1.3.1", - "@microsoft/recognizers-text-suite": "1.1.4", - "botbuilder-core": "4.22.2", - "botbuilder-dialogs-adaptive-runtime-core": "4.22.2-preview", - "botframework-connector": "4.22.2", - "globalize": "^1.4.2", - "lodash": "^4.17.21", - "uuid": "^8.3.2", - "zod": "^3.22.4" - } - }, - "node_modules/botbuilder-dialogs-adaptive-runtime-core": { - "version": "4.22.2-preview", - "resolved": "https://registry.npmjs.org/botbuilder-dialogs-adaptive-runtime-core/-/botbuilder-dialogs-adaptive-runtime-core-4.22.2-preview.tgz", - "integrity": "sha512-eMUkwu2dmf7r+tA1jPp4lP3XD2mVHGv1oRRcqkkWV/4B3xS9vnGpMywKL1xYVwm88eyZA64QGQFlxi6GOtpPaA==", - "license": "MIT", - "dependencies": { - "dependency-graph": "^0.10.0" - } - }, - "node_modules/botbuilder-stdlib": { - "version": "4.22.2-internal", - "resolved": "https://registry.npmjs.org/botbuilder-stdlib/-/botbuilder-stdlib-4.22.2-internal.tgz", - "integrity": "sha512-ny6rFD/KM63XtiIITrYdwM+1qh9A5m83bf9E8O0cTrFQjvHLP+zHAHslbl1/Wpv7j6nEnAoLUJB6IVBEkb53Kw==", - "license": "MIT" - }, - "node_modules/botbuilder/node_modules/axios": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz", - "integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/botframework-connector": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/botframework-connector/-/botframework-connector-4.22.2.tgz", - "integrity": "sha512-V6mRsQPthhlKHxNw73fW7ZcfM0AlOXlTR6u49O+5+PQ8fDwLbNNswN4AyUpSp+JFW9facR407dd2vNbUoKYOcA==", - "license": "MIT", - "dependencies": { - "@azure/core-http": "^3.0.2", - "@azure/identity": "^2.0.4", - "@azure/msal-node": "^1.18.4", - "base64url": "^3.0.0", - "botbuilder-stdlib": "4.22.2-internal", - "botframework-schema": "4.22.2", - "cross-fetch": "^3.0.5", - "https-proxy-agent": "^7.0.2", - "jsonwebtoken": "^9.0.0", - "node-fetch": "^2.6.7", - "openssl-wrapper": "^0.3.4", - "rsa-pem-from-mod-exp": "^0.8.4", - "zod": "^3.22.4" - } - }, - "node_modules/botframework-schema": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/botframework-schema/-/botframework-schema-4.22.2.tgz", - "integrity": "sha512-D2SauTdimpfN6TRfDS94GYrRGn/dpTq/n24yAR1cQ9GcV8qq1MydxCYyVbsgzdlkNOFSRJHYJMAp85VKUoYUGg==", - "license": "MIT", - "dependencies": { - "adaptivecards": "1.2.3", - "uuid": "^8.3.2", - "zod": "^3.22.4" - } - }, - "node_modules/botframework-schema/node_modules/adaptivecards": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/adaptivecards/-/adaptivecards-1.2.3.tgz", - "integrity": "sha512-amQ5OSW3OpIkrxVKLjxVBPk/T49yuOtnqs1z5ZPfZr0+OpTovzmiHbyoAGDIsu5SNYHwOZFp/3LGOnRaALFa/g==", - "license": "MIT" - }, - "node_modules/botframework-streaming": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/botframework-streaming/-/botframework-streaming-4.22.2.tgz", - "integrity": "sha512-xsozFqv3B65jPQnmPa1r7Cq/OMXe1iod+MmcwiVs4oa8Th8YQ1m38+eyUPIm8vCMfeNeULm8EOvYiC9XC8P1NA==", - "license": "MIT", - "dependencies": { - "@types/node": "^10.17.27", - "@types/ws": "^6.0.3", - "uuid": "^8.3.2", - "ws": "^7.1.2" - } - }, - "node_modules/botframework-streaming/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", - "license": "MIT" - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/cldrjs": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz", - "integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", - "license": "BSD-3-Clause" - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dependency-graph": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.10.0.tgz", - "integrity": "sha512-c9amUgpgxSi1bE5/sbLwcs5diLD0ygCQYmhfM5H1s5VH1mCsYkcmAL3CcNdv4kdSw6JuMoHeDGzLgj/gAXdWVg==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-cmd": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", - "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^4.0.0", - "cross-spawn": "^7.0.0" - }, - "bin": { - "env-cmd": "bin/env-cmd.js" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "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", - "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", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "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", - "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", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-aggregate-error": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.13.tgz", - "integrity": "sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "license": "MIT", - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globalize": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.7.0.tgz", - "integrity": "sha512-faR46vTIbFCeAemyuc9E6/d7Wrx9k2ae2L60UhakztFg6VuE42gENVJNuPFtt7Sdjrk9m2w8+py7Jj+JTNy59w==", - "license": "MIT", - "dependencies": { - "cldrjs": "^0.5.4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "license": "MIT", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "node_modules/jackspeak": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", - "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/js-md4": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/jsbi": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", - "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==", - "license": "Apache-2.0" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jsonwebtoken/node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jspath": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/jspath/-/jspath-0.4.0.tgz", - "integrity": "sha512-2/R8wkot8NCXrppBT/onp+4mcAUAZqtPxsW6aSJU3hrFAVqKqtFYcat2XJZ7inN4RtATUxfv0UQSYOmvJKiIGA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jwt-decode": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", - "license": "MIT" - }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "license": "MIT", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "license": "MIT" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.last": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", - "integrity": "sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A==", - "license": "MIT" - }, - "node_modules/lodash.max": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", - "integrity": "sha512-iykTDTb7PK33HSQmKy34zv+hh4WEu7WonJPXQcgODzUbbtradtNs8RsD/GI7XV++60KaKR1xhW56N4ISqHesfQ==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "license": "MIT" - }, - "node_modules/lodash.tonumber": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz", - "integrity": "sha512-SY0SwuPOHRwKcCNTdsntPYb+Zddz5mDUIVFABzRMqmAiL41pMeyoQFGxYAw5zdc9NnH4pbJqiqqp5ckfxa+zSA==", - "license": "MIT" - }, - "node_modules/lodash.trimend": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz", - "integrity": "sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA==", - "license": "MIT" - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "license": "Apache-2.0" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/markdown-it": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", - "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "license": "MIT" - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/native-duplexpair": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", - "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==", - "license": "MIT" - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openssl-wrapper": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/openssl-wrapper/-/openssl-wrapper-0.3.4.tgz", - "integrity": "sha512-iITsrx6Ho8V3/2OVtmZzzX8wQaKAaFXEJQdzoPUZDtyf5jWFlqo+h+OhGT4TATQ47f9ACKHua8nw7Qoy85aeKQ==", - "license": "MIT" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rimraf": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz", - "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rsa-pem-from-mod-exp": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.6.tgz", - "integrity": "sha512-c5ouQkOvGHF1qomUUDJGFcXsomeSO2gbEs6hVhMAtlkE1CuaZase/WzoaKFG/EZQuNmq6pw/EMCeEnDvOgCJYQ==", - "license": "MIT" - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "license": "MIT", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "license": "MIT" - }, - "node_modules/tedious": { - "version": "14.7.0", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-14.7.0.tgz", - "integrity": "sha512-d3qlmZcvZyt7akyPHiOdR+knfzObWZH3mW+gouQTSb7YTSwtpHuYHcvsQabfbY7oOvgbs51xRb7CwOahWK/t9w==", - "license": "MIT", - "dependencies": { - "@azure/identity": "^2.0.4", - "@azure/keyvault-keys": "^4.4.0", - "@js-joda/core": "^5.2.0", - "@types/es-aggregate-error": "^1.0.2", - "bl": "^5.0.0", - "es-aggregate-error": "^1.0.8", - "iconv-lite": "^0.6.3", - "js-md4": "^0.3.2", - "jsbi": "^4.3.0", - "native-duplexpair": "^1.0.0", - "node-abort-controller": "^3.0.1", - "punycode": "^2.1.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=12.3.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "license": "MIT", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "license": "MIT" - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "license": "MIT", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xpath": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", - "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==", - "license": "MIT", - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/apps/teamsjs-diagnostic-app/api/package.json b/apps/teamsjs-diagnostic-app/api/package.json index f01b580a08..8252ff44d0 100644 --- a/apps/teamsjs-diagnostic-app/api/package.json +++ b/apps/teamsjs-diagnostic-app/api/package.json @@ -16,9 +16,9 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { - "@azure/functions": "^4.0.0", - "@microsoft/teamsfx": "^2.0.0", - "@microsoft/microsoft-graph-client": "^3.0.1", + "@azure/functions": "^4.5.0", + "@microsoft/teamsfx": "^2.3.2", + "@microsoft/microsoft-graph-client": "^3.0.7", "isomorphic-fetch": "^3.0.0" }, "devDependencies": { diff --git a/apps/teamsjs-diagnostic-app/package-lock.json b/apps/teamsjs-diagnostic-app/package-lock.json deleted file mode 100644 index ee87cf6bb7..0000000000 --- a/apps/teamsjs-diagnostic-app/package-lock.json +++ /dev/null @@ -1,1661 +0,0 @@ -{ - "name": "teamsjs-diagnostic-app", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "teamsjs-diagnostic-app", - "version": "0.1.0", - "dependencies": { - "@babel/preset-react": "^7.24.1", - "@fluentui/react-components": "^9.54.2", - "@microsoft/teamsfx": "^2.2.0", - "@microsoft/teamsfx-react": "^3.0.0", - "@testing-library/dom": "^10.0.0", - "axios": "^0.21.1", - "react": "^18.3.1", - "react-dnd": "^16.0.1", - "react-dnd-html5-backend": "^16.0.1", - "react-dom": "^18.3.1", - "react-router-dom": "^6.23.1", - "scheduler": "0.23.0", - "ts-node": "^10.9.2", - "uuid": "^10.0.0" - }, - "devDependencies": { - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/preset-env": "^7.24.7", - "@babel/preset-typescript": "^7.24.7", - "@jest/types": "^29.6.3", - "@microsoft/teams-js": "^2.24.0", - "@testing-library/jest-dom": "^6.4.6", - "@testing-library/react": "^16.0.0", - "@testing-library/user-event": "^14.5.2", - "@types/jest": "^29.5.12", - "@types/node": "^18.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.0", - "@types/react-router-dom": "^5.3.3", - "@types/uuid": "^10.0.0", - "babel-jest": "^29.7.0", - "concurrently": "^8.2.2", - "env-cmd": "^10.1.0", - "husky": "^9.0.11", - "identity-obj-proxy": "^3.0.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "29.7.0", - "jsdom": "^24.1.0", - "react-scripts": "^5.0.1", - "ts-jest": "^29.1.5", - "typescript": "^4.9.5" - }, - "engines": { - "node": "18 || 20" - } - }, - "../../node_modules/.pnpm/@babel+plugin-transform-private-property-in-object@7.24.7_@babel+core@7.24.7/node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "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" - }, - "devDependencies": { - "@babel/core": "^7.24.7", - "@babel/helper-plugin-test-runner": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../../node_modules/.pnpm/@babel+preset-env@7.24.7_@babel+core@7.24.7/node_modules/@babel/preset-env": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", - "@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-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.24.7", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.24.7", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@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.24.7", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.24.7", - "@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.7", - "@babel/plugin-transform-modules-systemjs": "^7.24.7", - "@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.7", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@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.7", - "@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.24.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "devDependencies": { - "@babel/core": "^7.24.7", - "@babel/core-7.12": "npm:@babel/core@7.12.9", - "@babel/helper-plugin-test-runner": "^7.24.7", - "@babel/traverse": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../../node_modules/.pnpm/@babel+preset-react@7.24.7_@babel+core@7.24.7/node_modules/@babel/preset-react": { - "version": "7.24.7", - "license": "MIT", - "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" - }, - "devDependencies": { - "@babel/core": "^7.24.7", - "@babel/helper-plugin-test-runner": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../../node_modules/.pnpm/@babel+preset-typescript@7.24.7_@babel+core@7.24.7/node_modules/@babel/preset-typescript": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "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" - }, - "devDependencies": { - "@babel/core": "^7.24.7", - "@babel/helper-plugin-test-runner": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../../node_modules/.pnpm/@fluentui+react-components@9.54.2_@types+react-dom@18.3.0_@types+react@18.3.3_react-dom@18.3._irapujz3oi246eepg2qwqe4leq/node_modules/@fluentui/react-components": { - "version": "9.54.2", - "license": "MIT", - "dependencies": { - "@fluentui/react-accordion": "^9.4.1", - "@fluentui/react-alert": "9.0.0-beta.124", - "@fluentui/react-aria": "^9.12.1", - "@fluentui/react-avatar": "^9.6.30", - "@fluentui/react-badge": "^9.2.38", - "@fluentui/react-breadcrumb": "^9.0.30", - "@fluentui/react-button": "^9.3.84", - "@fluentui/react-card": "^9.0.84", - "@fluentui/react-checkbox": "^9.2.29", - "@fluentui/react-combobox": "^9.11.8", - "@fluentui/react-dialog": "^9.11.2", - "@fluentui/react-divider": "^9.2.70", - "@fluentui/react-drawer": "^9.5.2", - "@fluentui/react-field": "^9.1.68", - "@fluentui/react-image": "^9.1.68", - "@fluentui/react-infobutton": "9.0.0-beta.102", - "@fluentui/react-infolabel": "^9.0.37", - "@fluentui/react-input": "^9.4.79", - "@fluentui/react-label": "^9.1.71", - "@fluentui/react-link": "^9.2.25", - "@fluentui/react-menu": "^9.14.8", - "@fluentui/react-message-bar": "^9.2.3", - "@fluentui/react-motion": "^9.2.0", - "@fluentui/react-overflow": "^9.1.22", - "@fluentui/react-persona": "^9.2.89", - "@fluentui/react-popover": "^9.9.12", - "@fluentui/react-portal": "^9.4.28", - "@fluentui/react-positioning": "^9.15.3", - "@fluentui/react-progress": "^9.1.79", - "@fluentui/react-provider": "^9.16.3", - "@fluentui/react-radio": "^9.2.24", - "@fluentui/react-rating": "^9.0.12", - "@fluentui/react-search": "^9.0.8", - "@fluentui/react-select": "^9.1.79", - "@fluentui/react-shared-contexts": "^9.19.0", - "@fluentui/react-skeleton": "^9.1.7", - "@fluentui/react-slider": "^9.1.86", - "@fluentui/react-spinbutton": "^9.2.79", - "@fluentui/react-spinner": "^9.4.9", - "@fluentui/react-swatch-picker": "^9.1.3", - "@fluentui/react-switch": "^9.1.86", - "@fluentui/react-table": "^9.15.8", - "@fluentui/react-tabs": "^9.4.24", - "@fluentui/react-tabster": "^9.22.0", - "@fluentui/react-tag-picker": "^9.1.1", - "@fluentui/react-tags": "^9.3.9", - "@fluentui/react-teaching-popover": "^9.1.8", - "@fluentui/react-text": "^9.4.20", - "@fluentui/react-textarea": "^9.3.79", - "@fluentui/react-theme": "^9.1.19", - "@fluentui/react-toast": "^9.3.47", - "@fluentui/react-toolbar": "^9.1.87", - "@fluentui/react-tooltip": "^9.4.31", - "@fluentui/react-tree": "^9.7.1", - "@fluentui/react-utilities": "^9.18.10", - "@fluentui/react-virtualizer": "9.0.0-alpha.79", - "@griffel/react": "^1.5.22", - "@swc/helpers": "^0.5.1" - }, - "devDependencies": { - "@fluentui/eslint-plugin": "*", - "@fluentui/scripts-api-extractor": "*", - "@fluentui/scripts-tasks": "*" - }, - "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" - } - }, - "../../node_modules/.pnpm/@jest+types@29.6.3/node_modules/@jest/types": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "devDependencies": { - "@tsd/typescript": "^5.0.4", - "tsd-lite": "^0.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "../../node_modules/.pnpm/@microsoft+teams-js@2.24.0/node_modules/@microsoft/teams-js": { - "version": "2.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "debug": "^4.3.3" - }, - "devDependencies": { - "@types/debug": "^4.1.7" - } - }, - "../../node_modules/.pnpm/@microsoft+teamsfx-react@3.1.2_@fluentui+react-components@9.54.2_@types+react-dom@18.3.0_@typ_nmf7uf5mpun7unumrf2l5kda2e/node_modules/@microsoft/teamsfx-react": { - "version": "3.1.2", - "license": "MIT", - "dependencies": { - "@fluentui/react": "^8.106.1", - "@microsoft/teamsfx": "2.3.2" - }, - "devDependencies": { - "@istanbuljs/nyc-config-typescript": "^1.0.2", - "@testing-library/react": "^13.4.0", - "@types/enzyme": "^3.10.10", - "@types/jest": "^29.4.0", - "@types/node": "^14.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.0", - "@typescript-eslint/eslint-plugin": "^5.13.0", - "@typescript-eslint/parser": "^6.5.0", - "eslint": "^8.15.0", - "eslint-config-standard": "^17.0.0", - "eslint-plugin-header": "^3.1.1", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-jest": "^27.2.1", - "eslint-plugin-n": "^15.2.0", - "eslint-plugin-no-secrets": "^0.8.9", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-react": "^7.26.0", - "eslint-plugin-react-hooks": "^4.2.0", - "isomorphic-fetch": "^3.0.0", - "jest": "^29.4.0", - "jest-environment-jsdom": "^29.4.1", - "jest-junit": "^15.0.0", - "jwt-decode": "^3.1.2", - "lint-staged": "^12.3.4", - "mocha": "^10.0.0", - "nyc": "^15.1.0", - "prettier": "^2.5.1", - "react-test-renderer": "^18.2.0", - "rimraf": "^3.0.2", - "scheduler": "^0.20.2", - "ts-jest": "29.1.0", - "tslib": "^2.3.1", - "typescript": "latest" - }, - "peerDependencies": { - "@fluentui/react-components": "^9.15.0", - "@microsoft/microsoft-graph-client": "^3.0.7", - "@microsoft/teams-js": "^2.19.0", - "@microsoft/teamsfx": "^2.2.2", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" - } - }, - "../../node_modules/.pnpm/@microsoft+teamsfx@2.3.2_@microsoft+teams-js@2.24.0_encoding@0.1.13/node_modules/@microsoft/teamsfx": { - "version": "2.3.2", - "license": "MIT", - "dependencies": { - "@azure/identity": "^2.0.1", - "@azure/msal-browser": "^3.0.2", - "@azure/msal-node": "^1.14.6", - "@microsoft/adaptivecards-tools": "1.3.4", - "@microsoft/microsoft-graph-client": "^3.0.7", - "axios": "^1.6.8", - "botbuilder": "^4.22.1", - "botbuilder-dialogs": "^4.22.1", - "botframework-connector": "^4.22.1", - "botframework-schema": "^4.22.1", - "jwt-decode": "^3.1.2", - "tedious": "^14.3.0", - "uuid": "^8.3.2" - }, - "devDependencies": { - "@azure/core-auth": "^1.4.0", - "@azure/msal-common": "^14.0.2", - "@istanbuljs/nyc-config-typescript": "^1.0.1", - "@microsoft/api-documenter": "^7.14.1", - "@microsoft/api-extractor": "^7.19.4", - "@rollup/plugin-json": "^4.1.0", - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.1.0", - "@sinonjs/samsam": "^8.0.0", - "@types/chai": "^4.2.22", - "@types/chai-as-promised": "^7.1.4", - "@types/jsonwebtoken": "^9.0.2", - "@types/mocha": "^9.0.0", - "@types/mochawesome": "^6.2.1", - "@types/node": "^16.11.7", - "@types/sinon": "^10.0.6", - "@types/tedious": "^4.0.5", - "@types/url-join": "^4.0.1", - "@types/uuid": "^8.3.1", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^4.13.0", - "adm-zip": "^0.5.9", - "assertion-error": "^2.0.0", - "axios-mock-adapter": "^1.20.0", - "botbuilder-core": "^4.22.1", - "chai": "^4.3.4", - "chai-as-promised": "^7.1.1", - "check-error": "^2.0.0", - "deep-eql": "^4.1.3", - "diff": "^5.1.0", - "dotenv": "^10.0.0", - "eslint": "^8.1.0", - "eslint-plugin-header": "^3.1.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-no-secrets": "^0.8.9", - "eslint-plugin-prettier": "^4.0.0", - "get-func-name": "^3.0.0", - "got": "^11.8.5", - "isomorphic-fetch": "^3.0.0", - "jwt-builder": "^1.1.0", - "karma": "^6.3.8", - "karma-chrome-launcher": "^3.1.0", - "karma-cli": "^2.0.0", - "karma-coverage": "^2.0.0", - "karma-env-preprocessor": "^0.1.1", - "karma-junit-reporter": "^2.0.1", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-sourcemap-loader": "^0.3.8", - "karma-webpack": "^5.0.0", - "lint-staged": "^11.2.6", - "lodash.get": "^4.4.2", - "mocha": "^9.2.0", - "mocha-multi-reporters": "^1.5.1", - "mochawesome": "^7.0.1", - "mocked-env": "^1.3.5", - "nise": "^5.1.4", - "nyc": "^15.1.0", - "pathval": "^2.0.0", - "prettier": "^2.4.1", - "puppeteer": "^13.1.3", - "rimraf": "^3.0.2", - "rollup": "^2.41.0", - "rollup-plugin-typescript2": "0.31.1", - "sinon": "^12.0.1", - "source-map-loader": "^3.0.0", - "supports-color": "^9.4.0", - "timers": "^0.1.1", - "ts-loader": "^9.2.6", - "ts-node": "^10.4.0", - "tslib": "^2.3.1", - "type-detect": "^4.0.8", - "typescript": "^4.4.4", - "url-join": "^4.0.1", - "webpack": "^5.62.1", - "yargs": "^17.2.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "@microsoft/teams-js": "^2.19.0" - } - }, - "../../node_modules/.pnpm/@testing-library+dom@10.3.1/node_modules/@testing-library/dom": { - "version": "10.3.1", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "devDependencies": { - "@testing-library/jest-dom": "^5.11.6", - "browserslist": "4.21.8", - "caniuse-lite": "1.0.30001502", - "jest-in-case": "^1.0.2", - "jest-snapshot-serializer-ansi": "^1.0.0", - "jest-watch-select-projects": "^2.0.0", - "jsdom": "20.0.0", - "kcd-scripts": "^13.0.0", - "typescript": "^4.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "../../node_modules/.pnpm/@testing-library+jest-dom@6.4.6_@jest+globals@29.7.0_@types+jest@29.5.12_jest@29.7.0_@types+n_zra2ud6a655gvjltfflctfudmq/node_modules/@testing-library/jest-dom": { - "version": "6.4.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@adobe/css-tools": "^4.4.0", - "@babel/runtime": "^7.9.2", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", - "redent": "^3.0.0" - }, - "devDependencies": { - "@jest/globals": "^29.6.2", - "@rollup/plugin-commonjs": "^25.0.4", - "@types/bun": "latest", - "@types/web": "latest", - "expect": "^29.6.2", - "jest-environment-jsdom-sixteen": "^1.0.3", - "jest-watch-select-projects": "^2.0.0", - "jsdom": "^16.2.1", - "kcd-scripts": "^14.0.0", - "pretty-format": "^25.1.0", - "rollup": "^3.28.1", - "rollup-plugin-delete": "^2.0.0", - "typescript": "^5.1.6", - "vitest": "^0.34.1" - }, - "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" - }, - "peerDependencies": { - "@jest/globals": ">= 28", - "@types/bun": "latest", - "@types/jest": ">= 28", - "jest": ">= 28", - "vitest": ">= 0.32" - }, - "peerDependenciesMeta": { - "@jest/globals": { - "optional": true - }, - "@types/bun": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "jest": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/@testing-library+react@16.0.0_@testing-library+dom@10.3.1_@types+react-dom@18.3.0_@types+reac_j4jrsphuc35kip2psnbzwbbzdq/node_modules/@testing-library/react": { - "version": "16.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "devDependencies": { - "@testing-library/dom": "^10.0.0", - "@testing-library/jest-dom": "^5.11.6", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.0", - "chalk": "^4.1.2", - "dotenv-cli": "^4.0.0", - "jest-diff": "^29.7.0", - "kcd-scripts": "^13.0.0", - "npm-run-all": "^4.1.5", - "react": "^18.3.1", - "react-dom": "^18.3.0", - "rimraf": "^3.0.2", - "typescript": "^4.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@testing-library/dom": "^10.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/@testing-library+user-event@14.5.2_@testing-library+dom@10.3.1/node_modules/@testing-library/user-event": { - "version": "14.5.2", - "dev": true, - "license": "MIT", - "devDependencies": { - "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "@ph.fritsche/scripts-config": "^2.4.0", - "@ph.fritsche/toolbox": "^1.0.0-alpha.11", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.3", - "@testing-library/react": "^13.4.0", - "@types/jest-in-case": "^1.0.3", - "@types/react": "^18.0.25", - "@types/sinonjs__fake-timers": "^8.1.2", - "css.escape": "^1.5.1", - "esbuild": "^0.19.10", - "esbuild-plugin-globals": "^0.2.0", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-local-rules": "^1.3.2", - "expect": "^28.1.3", - "is-ci": "^3.0.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.1.5", - "jest-in-case": "^1.0.2", - "jest-mock": "^28.1.3", - "jest-serializer-ansi": "^1.0.3", - "jsdom": "^20.0.3", - "kcd-scripts": "^12.1.0", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "shared-scripts": "^1.5.1", - "ts-node": "^10.9.1", - "typescript": "^4.9.3" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "../../node_modules/.pnpm/@types+jest@29.5.12/node_modules/@types/jest": { - "version": "29.5.12", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "../../node_modules/.pnpm/@types+node@18.19.39/node_modules/@types/node": { - "version": "18.19.39", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "../../node_modules/.pnpm/@types+react-dom@18.3.0/node_modules/@types/react-dom": { - "version": "18.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "../../node_modules/.pnpm/@types+react-router-dom@5.3.3/node_modules/@types/react-router-dom": { - "version": "5.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "../../node_modules/.pnpm/@types+react@18.3.3/node_modules/@types/react": { - "version": "18.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "../../node_modules/.pnpm/@types+uuid@10.0.0/node_modules/@types/uuid": { - "version": "10.0.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/.pnpm/babel-jest@29.7.0_@babel+core@7.24.7/node_modules/babel-jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "devDependencies": { - "@babel/core": "^7.11.6", - "@jest/test-utils": "^29.7.0", - "@types/graceful-fs": "^4.1.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "../../node_modules/.pnpm/concurrently@8.2.2/node_modules/concurrently": { - "version": "8.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "devDependencies": { - "@hirez_io/observer-spy": "^2.2.0", - "@swc/core": "^1.3.93", - "@swc/jest": "^0.2.29", - "@types/jest": "^29.5.6", - "@types/lodash": "^4.14.200", - "@types/node": "^14.18.62", - "@types/shell-quote": "^1.7.3", - "@types/supports-color": "^8.1.2", - "@types/yargs": "^17.0.29", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "coveralls-next": "^4.2.0", - "ctrlc-wrapper": "^0.0.4", - "esbuild": "~0.19.5", - "eslint": "^8.51.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jest": "^27.4.2", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-simple-import-sort": "^10.0.0", - "husky": "^8.0.3", - "jest": "^29.7.0", - "jest-create-mock-instance": "^2.0.0", - "lint-staged": "^13.3.0", - "prettier": "^3.0.3", - "safe-publish-latest": "^2.0.0", - "string-argv": "^0.3.2", - "typescript": "~5.2.2" - }, - "engines": { - "node": "^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "../../node_modules/.pnpm/env-cmd@10.1.0/node_modules/env-cmd": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^4.0.0", - "cross-spawn": "^7.0.0" - }, - "bin": { - "env-cmd": "bin/env-cmd.js" - }, - "devDependencies": { - "@types/chai": "^4.0.0", - "@types/cross-spawn": "^6.0.0", - "@types/mocha": "^7.0.0", - "@types/node": "^12.0.0", - "@types/sinon": "^7.0.0", - "chai": "^4.0.0", - "coveralls": "^3.0.0", - "mocha": "^7.0.0", - "nyc": "^15.0.0", - "sinon": "^8.0.0", - "ts-node": "^8.0.0", - "ts-standard": "^4.0.0", - "typescript": "^3.7.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "9.0.11", - "dev": true, - "license": "MIT", - "bin": { - "husky": "bin.mjs" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "../../node_modules/.pnpm/identity-obj-proxy@3.0.0/node_modules/identity-obj-proxy": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "devDependencies": { - "babel-core": "^6.11.4", - "babel-jest": "^14.1.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-stage-0": "^6.5.0", - "coveralls": "^2.11.12", - "eslint": "^3.2.2", - "eslint-config-airbnb-base": "^5.0.1", - "eslint-plugin-import": "^1.12.0", - "jest-cli": "^14.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "../../node_modules/.pnpm/jest-environment-jsdom@29.7.0/node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" - }, - "devDependencies": { - "@jest/test-utils": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/jest@29.7.0_@types+node@18.19.39_babel-plugin-macros@3.1.0_ts-node@10.9.2_@types+node@18.19.39_typescript@4.9.5_/node_modules/jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "devDependencies": { - "@tsd/typescript": "^5.0.4", - "tsd-lite": "^0.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/jsdom@24.1.0/node_modules/jsdom": { - "version": "24.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.10", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.17.0", - "xml-name-validator": "^5.0.0" - }, - "devDependencies": { - "@domenic/eslint-config": "^3.0.0", - "benchmark": "^2.1.4", - "eslint": "^8.57.0", - "eslint-plugin-html": "^7.1.0", - "eslint-plugin-jsdom-internal": "file:./scripts/eslint-plugin", - "js-yaml": "^4.1.0", - "minimatch": "^9.0.4", - "mocha": "^10.4.0", - "mocha-sugar-free": "^1.4.0", - "pngjs": "^7.0.0", - "server-destroy": "^1.0.1", - "webidl2js": "^18.0.0", - "yargs": "^17.7.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/react-dnd-html5-backend@16.0.1/node_modules/react-dnd-html5-backend": { - "version": "16.0.1", - "license": "MIT", - "dependencies": { - "dnd-core": "^16.0.1" - }, - "devDependencies": { - "@swc/cli": "^0.1.57", - "@swc/core": "^1.2.168", - "@types/jest": "^27.4.1", - "npm-run-all": "^4.1.5", - "shx": "^0.3.4", - "typescript": "^4.6.3" - } - }, - "../../node_modules/.pnpm/react-dnd@16.0.1_@types+node@18.19.39_@types+react@18.3.3_react@18.3.1/node_modules/react-dnd": { - "version": "16.0.1", - "license": "MIT", - "dependencies": { - "@react-dnd/invariant": "^4.0.1", - "@react-dnd/shallowequal": "^4.0.1", - "dnd-core": "^16.0.1", - "fast-deep-equal": "^3.1.3", - "hoist-non-react-statics": "^3.3.2" - }, - "devDependencies": { - "@swc/cli": "^0.1.57", - "@swc/core": "^1.2.168", - "@testing-library/react": "^13.1.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/jest": "^27.4.1", - "@types/node": "^17.0.25", - "@types/react": "^18.0.5", - "@types/react-dom": "^18.0.1", - "jest": "^27.5.1", - "jest-mock": "^27.5.1", - "npm-run-all": "^4.1.5", - "react": "^18.0.0", - "react-dnd-test-backend": "portal:../backend-test", - "react-dnd-test-utils": "portal:../test-utils", - "react-dom": "^18.0.0", - "shx": "^0.3.4", - "typescript": "^4.6.3" - }, - "peerDependencies": { - "@types/hoist-non-react-statics": ">= 3.3.1", - "@types/node": ">= 12", - "@types/react": ">= 16", - "react": ">= 16.14" - }, - "peerDependenciesMeta": { - "@types/hoist-non-react-statics": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom": { - "version": "18.3.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "../../node_modules/.pnpm/react-router-dom@6.24.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-router-dom": { - "version": "6.24.0", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.17.0", - "react-router": "6.24.0" - }, - "devDependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "../../node_modules/.pnpm/react-scripts@5.0.1_@babel+plugin-syntax-flow@7.24.7_@babel+core@7.24.7__@babel+plugin-transf_hlwzio5o2pyrlipp3lnjx3gj5y/node_modules/react-scripts": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "devDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/react@18.3.1/node_modules/react": { - "version": "18.3.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../../node_modules/.pnpm/scheduler@0.23.0/node_modules/scheduler": { - "version": "0.23.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "../../node_modules/.pnpm/ts-jest@29.1.5_@babel+core@7.24.7_@jest+transform@29.7.0_@jest+types@29.6.3_babel-jest@29.7.0_62oo57o5sfc37nhocjctfp72ia/node_modules/ts-jest": { - "version": "29.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "devDependencies": { - "@commitlint/cli": "^19.3.0", - "@commitlint/config-angular": "^19.3.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/babel__core": "7.20.5", - "@types/cross-spawn": "latest", - "@types/fs-extra": "latest", - "@types/js-yaml": "latest", - "@types/lodash.camelcase": "4.3.9", - "@types/lodash.memoize": "4.1.9", - "@types/lodash.set": "4.3.9", - "@types/micromatch": "4.0.7", - "@types/node": "20.14.2", - "@types/react": "18.x", - "@types/semver": "latest", - "@types/yargs": "latest", - "@types/yargs-parser": "21.0.3", - "@typescript-eslint/eslint-plugin": "^7.13.0", - "@typescript-eslint/parser": "^7.13.0", - "babel-jest": "^29.7.0", - "conventional-changelog-cli": "^5.0.0", - "cross-spawn": "latest", - "esbuild": "~0.21.5", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-jsdoc": "^48.2.12", - "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-prettier": "^5.1.3", - "execa": "5.1.1", - "fs-extra": "11.2.0", - "glob": "^10.2.6", - "glob-gitignore": "latest", - "husky": "4.x", - "jest": "^29.7.0", - "jest-snapshot-serializer-raw": "^1.2.0", - "js-yaml": "latest", - "json-schema-to-typescript": "^13.1.2", - "lint-staged": "latest", - "lodash.camelcase": "^4.3.0", - "lodash.set": "^4.3.2", - "node-fetch": "^3.3.2", - "prettier": "^3.3.2", - "typescript": "~5.1.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/ts-node@10.9.2_@types+node@18.19.39_typescript@4.9.5/node_modules/ts-node": { - "version": "10.9.2", - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript": { - "version": "4.9.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "devDependencies": { - "@octokit/rest": "latest", - "@types/chai": "latest", - "@types/fancy-log": "^2.0.0", - "@types/fs-extra": "^9.0.13", - "@types/glob": "latest", - "@types/gulp": "^4.0.9", - "@types/gulp-concat": "latest", - "@types/gulp-newer": "latest", - "@types/gulp-rename": "latest", - "@types/gulp-sourcemaps": "latest", - "@types/merge2": "latest", - "@types/microsoft__typescript-etw": "latest", - "@types/minimist": "latest", - "@types/mkdirp": "latest", - "@types/mocha": "latest", - "@types/ms": "latest", - "@types/node": "latest", - "@types/source-map-support": "latest", - "@types/which": "^2.0.1", - "@types/xml2js": "^0.4.11", - "@typescript-eslint/eslint-plugin": "^5.33.1", - "@typescript-eslint/parser": "^5.33.1", - "@typescript-eslint/utils": "^5.33.1", - "azure-devops-node-api": "^11.2.0", - "chai": "latest", - "chalk": "^4.1.2", - "del": "^6.1.1", - "diff": "^5.1.0", - "eslint": "^8.22.0", - "eslint-formatter-autolinkable-stylish": "^1.2.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.6", - "eslint-plugin-local": "^1.0.0", - "eslint-plugin-no-null": "^1.0.2", - "fancy-log": "latest", - "fs-extra": "^9.1.0", - "glob": "latest", - "gulp": "^4.0.2", - "gulp-concat": "latest", - "gulp-insert": "latest", - "gulp-newer": "latest", - "gulp-rename": "latest", - "gulp-sourcemaps": "latest", - "merge2": "latest", - "minimist": "latest", - "mkdirp": "latest", - "mocha": "latest", - "mocha-fivemat-progress-reporter": "latest", - "ms": "^2.1.3", - "node-fetch": "^3.2.10", - "source-map-support": "latest", - "typescript": "^4.8.4", - "vinyl": "latest", - "which": "^2.0.2", - "xml2js": "^0.4.23" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid": { - "version": "10.0.0", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - }, - "devDependencies": { - "@babel/cli": "7.24.6", - "@babel/core": "7.24.6", - "@babel/eslint-parser": "7.24.6", - "@babel/plugin-syntax-import-attributes": "7.24.6", - "@babel/preset-env": "7.24.6", - "@commitlint/cli": "19.3.0", - "@commitlint/config-conventional": "19.2.2", - "@wdio/browserstack-service": "7.16.10", - "@wdio/cli": "7.16.10", - "@wdio/jasmine-framework": "7.16.6", - "@wdio/local-runner": "7.16.10", - "@wdio/spec-reporter": "7.16.9", - "@wdio/static-server-service": "7.16.6", - "bundlewatch": "0.3.3", - "eslint": "9.4.0", - "eslint-plugin-prettier": "5.1.3", - "globals": "15.3.0", - "husky": "9.0.11", - "jest": "29.7.0", - "lint-staged": "15.2.5", - "neostandard": "0.5.1", - "npm-run-all": "4.1.5", - "optional-dev-dependency": "2.0.1", - "prettier": "3.3.0", - "random-seed": "0.3.0", - "runmd": "1.3.9", - "standard-version": "9.5.0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "resolved": "../../node_modules/.pnpm/@babel+plugin-transform-private-property-in-object@7.24.7_@babel+core@7.24.7/node_modules/@babel/plugin-transform-private-property-in-object", - "link": true - }, - "node_modules/@babel/preset-env": { - "resolved": "../../node_modules/.pnpm/@babel+preset-env@7.24.7_@babel+core@7.24.7/node_modules/@babel/preset-env", - "link": true - }, - "node_modules/@babel/preset-react": { - "resolved": "../../node_modules/.pnpm/@babel+preset-react@7.24.7_@babel+core@7.24.7/node_modules/@babel/preset-react", - "link": true - }, - "node_modules/@babel/preset-typescript": { - "resolved": "../../node_modules/.pnpm/@babel+preset-typescript@7.24.7_@babel+core@7.24.7/node_modules/@babel/preset-typescript", - "link": true - }, - "node_modules/@fluentui/react-components": { - "resolved": "../../node_modules/.pnpm/@fluentui+react-components@9.54.2_@types+react-dom@18.3.0_@types+react@18.3.3_react-dom@18.3._irapujz3oi246eepg2qwqe4leq/node_modules/@fluentui/react-components", - "link": true - }, - "node_modules/@jest/types": { - "resolved": "../../node_modules/.pnpm/@jest+types@29.6.3/node_modules/@jest/types", - "link": true - }, - "node_modules/@microsoft/teams-js": { - "resolved": "../../node_modules/.pnpm/@microsoft+teams-js@2.24.0/node_modules/@microsoft/teams-js", - "link": true - }, - "node_modules/@microsoft/teamsfx": { - "resolved": "../../node_modules/.pnpm/@microsoft+teamsfx@2.3.2_@microsoft+teams-js@2.24.0_encoding@0.1.13/node_modules/@microsoft/teamsfx", - "link": true - }, - "node_modules/@microsoft/teamsfx-react": { - "resolved": "../../node_modules/.pnpm/@microsoft+teamsfx-react@3.1.2_@fluentui+react-components@9.54.2_@types+react-dom@18.3.0_@typ_nmf7uf5mpun7unumrf2l5kda2e/node_modules/@microsoft/teamsfx-react", - "link": true - }, - "node_modules/@testing-library/dom": { - "resolved": "../../node_modules/.pnpm/@testing-library+dom@10.3.1/node_modules/@testing-library/dom", - "link": true - }, - "node_modules/@testing-library/jest-dom": { - "resolved": "../../node_modules/.pnpm/@testing-library+jest-dom@6.4.6_@jest+globals@29.7.0_@types+jest@29.5.12_jest@29.7.0_@types+n_zra2ud6a655gvjltfflctfudmq/node_modules/@testing-library/jest-dom", - "link": true - }, - "node_modules/@testing-library/react": { - "resolved": "../../node_modules/.pnpm/@testing-library+react@16.0.0_@testing-library+dom@10.3.1_@types+react-dom@18.3.0_@types+reac_j4jrsphuc35kip2psnbzwbbzdq/node_modules/@testing-library/react", - "link": true - }, - "node_modules/@testing-library/user-event": { - "resolved": "../../node_modules/.pnpm/@testing-library+user-event@14.5.2_@testing-library+dom@10.3.1/node_modules/@testing-library/user-event", - "link": true - }, - "node_modules/@types/jest": { - "resolved": "../../node_modules/.pnpm/@types+jest@29.5.12/node_modules/@types/jest", - "link": true - }, - "node_modules/@types/node": { - "resolved": "../../node_modules/.pnpm/@types+node@18.19.39/node_modules/@types/node", - "link": true - }, - "node_modules/@types/react": { - "resolved": "../../node_modules/.pnpm/@types+react@18.3.3/node_modules/@types/react", - "link": true - }, - "node_modules/@types/react-dom": { - "resolved": "../../node_modules/.pnpm/@types+react-dom@18.3.0/node_modules/@types/react-dom", - "link": true - }, - "node_modules/@types/react-router-dom": { - "resolved": "../../node_modules/.pnpm/@types+react-router-dom@5.3.3/node_modules/@types/react-router-dom", - "link": true - }, - "node_modules/@types/uuid": { - "resolved": "../../node_modules/.pnpm/@types+uuid@10.0.0/node_modules/@types/uuid", - "link": true - }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-jest": { - "resolved": "../../node_modules/.pnpm/babel-jest@29.7.0_@babel+core@7.24.7/node_modules/babel-jest", - "link": true - }, - "node_modules/concurrently": { - "resolved": "../../node_modules/.pnpm/concurrently@8.2.2/node_modules/concurrently", - "link": true - }, - "node_modules/env-cmd": { - "resolved": "../../node_modules/.pnpm/env-cmd@10.1.0/node_modules/env-cmd", - "link": true - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/husky": { - "resolved": "../../node_modules/.pnpm/husky@9.0.11/node_modules/husky", - "link": true - }, - "node_modules/identity-obj-proxy": { - "resolved": "../../node_modules/.pnpm/identity-obj-proxy@3.0.0/node_modules/identity-obj-proxy", - "link": true - }, - "node_modules/jest": { - "resolved": "../../node_modules/.pnpm/jest@29.7.0_@types+node@18.19.39_babel-plugin-macros@3.1.0_ts-node@10.9.2_@types+node@18.19.39_typescript@4.9.5_/node_modules/jest", - "link": true - }, - "node_modules/jest-environment-jsdom": { - "resolved": "../../node_modules/.pnpm/jest-environment-jsdom@29.7.0/node_modules/jest-environment-jsdom", - "link": true - }, - "node_modules/jsdom": { - "resolved": "../../node_modules/.pnpm/jsdom@24.1.0/node_modules/jsdom", - "link": true - }, - "node_modules/react": { - "resolved": "../../node_modules/.pnpm/react@18.3.1/node_modules/react", - "link": true - }, - "node_modules/react-dnd": { - "resolved": "../../node_modules/.pnpm/react-dnd@16.0.1_@types+node@18.19.39_@types+react@18.3.3_react@18.3.1/node_modules/react-dnd", - "link": true - }, - "node_modules/react-dnd-html5-backend": { - "resolved": "../../node_modules/.pnpm/react-dnd-html5-backend@16.0.1/node_modules/react-dnd-html5-backend", - "link": true - }, - "node_modules/react-dom": { - "resolved": "../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom", - "link": true - }, - "node_modules/react-router-dom": { - "resolved": "../../node_modules/.pnpm/react-router-dom@6.24.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-router-dom", - "link": true - }, - "node_modules/react-scripts": { - "resolved": "../../node_modules/.pnpm/react-scripts@5.0.1_@babel+plugin-syntax-flow@7.24.7_@babel+core@7.24.7__@babel+plugin-transf_hlwzio5o2pyrlipp3lnjx3gj5y/node_modules/react-scripts", - "link": true - }, - "node_modules/scheduler": { - "resolved": "../../node_modules/.pnpm/scheduler@0.23.0/node_modules/scheduler", - "link": true - }, - "node_modules/ts-jest": { - "resolved": "../../node_modules/.pnpm/ts-jest@29.1.5_@babel+core@7.24.7_@jest+transform@29.7.0_@jest+types@29.6.3_babel-jest@29.7.0_62oo57o5sfc37nhocjctfp72ia/node_modules/ts-jest", - "link": true - }, - "node_modules/ts-node": { - "resolved": "../../node_modules/.pnpm/ts-node@10.9.2_@types+node@18.19.39_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "node_modules/typescript": { - "resolved": "../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "node_modules/uuid": { - "resolved": "../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid", - "link": true - } - } -} diff --git a/apps/teamsjs-diagnostic-app/package.json b/apps/teamsjs-diagnostic-app/package.json index 37d6c0870e..9a3567f5f6 100644 --- a/apps/teamsjs-diagnostic-app/package.json +++ b/apps/teamsjs-diagnostic-app/package.json @@ -6,17 +6,17 @@ }, "private": true, "dependencies": { - "@babel/preset-react": "^7.24.1", - "@fluentui/react-components": "^9.54.2", - "@microsoft/teamsfx": "^2.2.0", - "@microsoft/teamsfx-react": "^3.0.0", - "@testing-library/dom": "^10.0.0", - "axios": "^0.21.1", + "@babel/preset-react": "^7.24.7", + "@fluentui/react-components": "^9.54.7", + "@microsoft/teamsfx": "^2.3.2", + "@microsoft/teamsfx-react": "^3.1.2", + "@testing-library/dom": "^10.4.0", + "axios": "^1.7.3", "react": "^18.3.1", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", "react-dom": "^18.3.1", - "react-router-dom": "^6.23.1", + "react-router-dom": "^6.26.0", "scheduler": "0.23.0", "ts-node": "^10.9.2", "uuid": "^10.0.0" @@ -45,7 +45,7 @@ "jest-environment-jsdom": "29.7.0", "jsdom": "^24.1.0", "react-scripts": "^5.0.1", - "ts-jest": "^29.1.5", + "ts-jest": "^29.2.4", "typescript": "^4.9.5" }, "scripts": { diff --git a/package.json b/package.json index e9f95f2a87..0f1ff2da6a 100644 --- a/package.json +++ b/package.json @@ -89,9 +89,9 @@ "ts-node": "^10.9.2", "typedoc": "^0.24.8", "typescript": "^4.9.5", - "webpack": "^5.91.0", + "webpack": "^5.93.0", "webpack-assets-manifest": "^5.2.1", - "webpack-bundle-analyzer": "^4.10.1", + "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^5.1.4", "webpack-dev-server": "^5.0.4", "webpack-merge": "^5.10.0", @@ -100,16 +100,17 @@ }, "pnpm": { "overrides": { - "axios": "^1.6.0", + "@azure/identity": ">=4.2.1", "dns-packet": "^1.3.2", "express": "^4.19.2", "follow-redirects": "^1.15.6", "glob-parent": "^5.1.2", "jsdom": "^24.0.0", - "ip": ">=1.1.9", + "ip": ">=2.0.1", "lodash": "^4.17.21", "merge": "^2.1.1", "minimist": "^0.2.4", + "nth-check": ">=2.0.1", "postcss": "^8.4.31", "semver": "^7.5.2", "serialize-javascript": "^3.1.0", @@ -125,8 +126,10 @@ }, "overrides-explanation": { "WHAT IS THIS SECTION": "pnpm ignores this section and comments aren't allowed in JSON files. This section documents why the above overrides have been put in place. If you add an override, describe it in this section.", + "@azure/identity": "There is a vulnerability in older versions of @azure/identity package and currently this is used by teamsfx package in the teamsjs-diagnostic-app.", "express": "There is a vulnerability in older versions of the express package that is consumed by webpack-dev-server, this has been patched in a later version of express that webpack-dev-server has not updated yet. Once they update this package, we can remove this override", "follow-redirects": "There is a vulnerability in the follow-redirects package, and a fix has been provided. However, we consume the follow-redirects package via webpack-dev-server, Lerna, and wait-on, eventually. We are using this newer version of follow-redirects to avoid the vulnerability. If webpack-dev-server, Lerna, and wait-on packages are ever updated to a version of follow-redirects that fixes the vulnerability, we can remove this override and update the three packages accordingly.", + "nth-check": "There is a vulnerability in older versions of nth-check package and currently this is used by teamsfx package in the teamsjs-diagnostic-app.", "socks": "There is a vulnerability in the ip package which has no fix. We consume ip via socks (eventually via lerna). Socks released a new version that removed the ip dependency. We are using this newer version of socks to avoid the vulnerability. If ip is ever updated or lerna (or any package in the chain) eventually updates to a version of socks that doesn't depend on ip, we can remove this override", "tar": "There is a vulnerability in the tar package which is being used by lerna that hasn't yet been updated. Once this is patched in lerna we can remove this override" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d4d258a4e..0d9cb01310 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,16 +5,17 @@ settings: excludeLinksFromLockfile: false overrides: - axios: ^1.6.0 + '@azure/identity': '>=4.2.1' dns-packet: ^1.3.2 express: ^4.19.2 follow-redirects: ^1.15.6 glob-parent: ^5.1.2 jsdom: ^24.0.0 - ip: '>=1.1.9' + ip: '>=2.0.1' lodash: ^4.17.21 merge: ^2.1.1 minimist: ^0.2.4 + nth-check: '>=2.0.1' postcss: ^8.4.31 semver: ^7.5.2 serialize-javascript: ^3.1.0 @@ -95,7 +96,7 @@ importers: version: 17.0.25 '@types/webpack': specifier: ^5.28.5 - version: 5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + version: 5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) '@typescript-eslint/eslint-plugin': specifier: ^7.13.1 version: 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5) @@ -104,19 +105,19 @@ importers: version: 7.14.1(eslint@8.57.0)(typescript@4.9.5) babel-loader: specifier: ^9.1.3 - version: 9.1.3(@babel/core@7.24.7)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 9.1.3(@babel/core@7.24.7)(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) beachball: specifier: ^2.43.0 version: 2.43.1(typescript@4.9.5) copy-webpack-plugin: specifier: 9.1.0 - version: 9.1.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 9.1.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) cross-env: specifier: ^7.0.3 version: 7.0.3 css-loader: specifier: ^6.11.0 - version: 6.11.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 6.11.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) dts-bundle-webpack: specifier: ^1.0.2 version: 1.0.2 @@ -152,13 +153,13 @@ importers: version: 0.1.2(eslint@8.57.0)(typescript@4.9.5) filemanager-webpack-plugin: specifier: ^8.0.0 - version: 8.0.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 8.0.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) fs-extra: specifier: ^9.1.0 version: 9.1.0 html-webpack-plugin: specifier: ^5.6.0 - version: 5.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 5.6.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@16.18.101)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@16.18.101)(typescript@4.9.5)) @@ -191,13 +192,13 @@ importers: version: 0.3.4 style-loader: specifier: ^3.3.4 - version: 3.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 3.3.4(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) ts-jest: specifier: ^29.1.2 version: 29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@16.18.101)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@16.18.101)(typescript@4.9.5)))(typescript@4.9.5) ts-loader: specifier: ^9.5.1 - version: 9.5.1(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 9.5.1(typescript@4.9.5)(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@16.18.101)(typescript@4.9.5) @@ -208,26 +209,26 @@ importers: specifier: ^4.9.5 version: 4.9.5 webpack: - specifier: ^5.91.0 - version: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + specifier: ^5.93.0 + version: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) webpack-assets-manifest: specifier: ^5.2.1 - version: 5.2.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 5.2.1(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) webpack-bundle-analyzer: - specifier: ^4.10.1 + specifier: ^4.10.2 version: 4.10.2 webpack-cli: specifier: ^5.1.4 - version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1) + version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0) webpack-dev-server: specifier: ^5.0.4 - version: 5.0.4(webpack-cli@5.1.4)(webpack@5.92.1) + version: 5.0.4(webpack-cli@5.1.4)(webpack@5.93.0) webpack-merge: specifier: ^5.10.0 version: 5.10.0 webpack-subresource-integrity: specifier: ^5.1.0 - version: 5.1.0(html-webpack-plugin@5.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + version: 5.1.0(html-webpack-plugin@5.6.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))))(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) yargs: specifier: ^17.7.2 version: 17.7.2 @@ -298,23 +299,23 @@ importers: apps/teamsjs-diagnostic-app: dependencies: '@babel/preset-react': - specifier: ^7.24.1 + specifier: ^7.24.7 version: 7.24.7(@babel/core@7.24.7) '@fluentui/react-components': - specifier: ^9.54.2 - version: 9.54.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + specifier: ^9.54.7 + version: 9.54.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@microsoft/teamsfx': - specifier: ^2.2.0 + specifier: ^2.3.2 version: 2.3.2(@microsoft/teams-js@2.24.0)(encoding@0.1.13) '@microsoft/teamsfx-react': - specifier: ^3.0.0 - version: 3.1.2(@fluentui/react-components@9.54.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0))(@microsoft/microsoft-graph-client@3.0.7)(@microsoft/teams-js@2.24.0)(@microsoft/teamsfx@2.3.2(@microsoft/teams-js@2.24.0)(encoding@0.1.13))(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^3.1.2 + version: 3.1.2(@fluentui/react-components@9.54.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0))(@microsoft/microsoft-graph-client@3.0.7)(@microsoft/teams-js@2.24.0)(@microsoft/teamsfx@2.3.2(@microsoft/teams-js@2.24.0)(encoding@0.1.13))(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/dom': - specifier: ^10.0.0 - version: 10.3.1 + specifier: ^10.4.0 + version: 10.4.0 axios: - specifier: ^1.6.0 - version: 1.7.2 + specifier: ^1.7.3 + version: 1.7.3 react: specifier: ^18.3.1 version: 18.3.1 @@ -328,8 +329,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) react-router-dom: - specifier: ^6.23.1 - version: 6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^6.26.0 + version: 6.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) scheduler: specifier: 0.23.0 version: 0.23.0 @@ -360,10 +361,10 @@ importers: version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))) '@testing-library/react': specifier: ^16.0.0 - version: 16.0.0(@testing-library/dom@10.3.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 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))(react@18.3.1) '@testing-library/user-event': specifier: ^14.5.2 - version: 14.5.2(@testing-library/dom@10.3.1) + version: 14.5.2(@testing-library/dom@10.4.0) '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -408,10 +409,10 @@ importers: version: 24.1.0 react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)))(eslint@8.57.0)(react@18.3.1)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))(type-fest@0.21.3)(typescript@4.9.5)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)))(eslint@8.57.0)(react@18.3.1)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))(type-fest@0.21.3)(typescript@4.9.5)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) ts-jest: - specifier: ^29.1.5 - version: 29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)))(typescript@4.9.5) + specifier: ^29.2.4 + version: 29.2.4(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)))(typescript@4.9.5) typescript: specifier: ^4.9.5 version: 4.9.5 @@ -498,6 +499,7 @@ packages: '@azure/core-http@3.0.4': resolution: {integrity: sha512-Fok9VVhMdxAFOtqiiAtg74fL0UJkt0z3D+ouUUxcRLzZNBioPRAMJFVxiWoJljYpXsRi4GDQHzQHDc9AiYaIUQ==} engines: {node: '>=14.0.0'} + deprecated: deprecating as we migrated to core v2 '@azure/core-lro@2.7.2': resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} @@ -523,9 +525,9 @@ packages: resolution: {integrity: sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==} engines: {node: '>=18.0.0'} - '@azure/identity@2.1.0': - resolution: {integrity: sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==} - engines: {node: '>=12.0.0'} + '@azure/identity@4.4.1': + resolution: {integrity: sha512-DwnG4cKFEM7S3T+9u05NstXU/HN0dk45kPOinUyNKsn5VWwpXd9sbPKEg6kgJzGbm1lMuhx9o31PVbCtM5sfBA==} + engines: {node: '>=18.0.0'} '@azure/keyvault-keys@4.8.0': resolution: {integrity: sha512-jkuYxgkw0aaRfk40OQhFqDIupqblIOIlYESWB6DKCVDxQet1pyv86Tfk9M+5uFM0+mCs6+MUHU+Hxh3joiUn4Q==} @@ -535,10 +537,6 @@ packages: resolution: {integrity: sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==} engines: {node: '>=18.0.0'} - '@azure/msal-browser@2.39.0': - resolution: {integrity: sha512-kks/n2AJzKUk+DBqZhiD+7zeQGBl+WpSOQYzWy6hff3bU0ZrYFqr4keFLlzB5VKuKZog0X59/FGHb1RPBDZLVg==} - engines: {node: '>=0.8.0'} - '@azure/msal-browser@3.17.0': resolution: {integrity: sha512-csccKXmW2z7EkZ0I3yAoW/offQt+JECdTIV/KrnRoZyM7wCSsQWODpwod8ZhYy7iOyamcHApR9uCh0oD1M+0/A==} engines: {node: '>=0.8.0'} @@ -547,16 +545,12 @@ packages: resolution: {integrity: sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==} engines: {node: '>=0.8.0'} - '@azure/msal-common@13.3.3': - resolution: {integrity: sha512-n278DdCXKeiWhLwhEL7/u9HRMyzhUXLefeajiknf6AmEedoiOiv2r5aRJ7LXdT3NGPyubkdIbthaJlVtmuEqvA==} - engines: {node: '>=0.8.0'} - '@azure/msal-common@14.12.0': resolution: {integrity: sha512-IDDXmzfdwmDkv4SSmMEyAniJf6fDu3FJ7ncOjlxkDuT85uSnLEhZi3fGZpoR7T4XZpOMx9teM9GXBgrfJgyeBw==} engines: {node: '>=0.8.0'} - '@azure/msal-common@7.6.0': - resolution: {integrity: sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==} + '@azure/msal-common@14.14.0': + resolution: {integrity: sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ==} engines: {node: '>=0.8.0'} '@azure/msal-node@1.18.4': @@ -564,6 +558,10 @@ packages: engines: {node: 10 || 12 || 14 || 16 || 18} deprecated: A newer major version of this library is available. Please upgrade to the latest available version. + '@azure/msal-node@2.12.0': + resolution: {integrity: sha512-jmk5Im5KujRA2AcyCb0awA3buV8niSrwXZs+NBJWIvxOz76RvNlusGIqi43A0h45BPUy93Qb+CPdpJn82NFTIg==} + engines: {node: '>=16'} + '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -1450,8 +1448,8 @@ packages: '@fluentui/priority-overflow@9.1.13': resolution: {integrity: sha512-yDojVpkhBZTXOYExrCgW1GXbw3x9pYIS617xlNJIc2t06Cd3H32y2p51QXFt94sBmlVyAvPu7UKBHaq1Yw7u+w==} - '@fluentui/react-accordion@9.4.1': - resolution: {integrity: sha512-xvQWtpnHVn4c8MCcCVUyoq284AtmQCvH4Dyd0kJUT13j8JwLSh2NxW0XPR+gutfoOVSlShEtpRFXdV0RO1ApsQ==} + '@fluentui/react-accordion@9.5.0': + resolution: {integrity: sha512-GKkY+626XF+k0oWZV2aI8UBhM3E3KE73udzAvJ18mHVVTZ6fSRvz71ieFA6nR8h5USf0CO8RPgF98iXxaz1LKQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' @@ -1466,80 +1464,80 @@ packages: react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-aria@9.12.1': - resolution: {integrity: sha512-YKI1e/rzOsC2x0OMjOEMY/YCPETA6P0/LV1N8UzeFSYU2NyRavacLpYfRY7LfQjCYqFfM5eHd3uWOQfuzjPPmw==} + '@fluentui/react-aria@9.13.2': + resolution: {integrity: sha512-lb93r/FiE3bj1/lfixy/Hb+LW8MQ9HCqdDWLRo1gmP4f3QgIj/Gz7oTB+NilwzytiH4OBDXq0apdUHGLwGkotA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-avatar@9.6.30': - resolution: {integrity: sha512-oujqsEzLgTUBkvcvTYM4WIi5DNOac0oATtOfMYSk5ws+kh0nPA5umUSC505snG2KrWySrpxHZeX/SaG8MZgHvA==} + '@fluentui/react-avatar@9.6.34': + resolution: {integrity: sha512-KojRJFErsutRLIOXJbaWhA/AkiKvQzKpQVBzpvYf1vQu+ZEn90Ng0J8cwGQcqjQ1E9NydrCGO7G3akEcBuaqHg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-badge@9.2.38': - resolution: {integrity: sha512-Tc9zJQLWr/+O2x2IGPBTlnC18TXtvFqA7MTeQK+GRrGPmmDR24wdubuJHDRvkHT7olF+bcpVf6v96kry+9eIKA==} + '@fluentui/react-badge@9.2.41': + resolution: {integrity: sha512-/GBKotH68XrBix1mCJybYHw+5QKYoAbINqYPj2mEfcDiC2VfS4w4Drjokcp2O1KD2cX/YZ9PThptKmWkjT3UOw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-breadcrumb@9.0.30': - resolution: {integrity: sha512-Q4O6M7C1PcvkbCo/tlBrIkJvuXShsoFMTf1k0drD0S2IlFVO+F1sI6RCT1hsq8PWDSfFj63EEOpWf1gPvyHY1w==} + '@fluentui/react-breadcrumb@9.0.34': + resolution: {integrity: sha512-uSMlQme/Rrt6giWJRz5el0soY9GjKsnm8v6b/md1cehivc6FX8iys2Lmk5oJM+m3a2gxKQYr3sp8CvKsyKOGlw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-button@9.3.84': - resolution: {integrity: sha512-tZX4mt2dUIguTOmBYGEL555sRnf8H9MIrqD8YsBU+2sADBWgaYOoajoZrN6TUXkmpQoG5AYggwscqJcFICzeQg==} + '@fluentui/react-button@9.3.87': + resolution: {integrity: sha512-Di8RWjIswa1jriYfed6FH90fqmTwBkaILWxzJzChaBbUAOtxEYn3K57F+9PS9s05z7PhlDuVnfd2RV0dIrYHtg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-card@9.0.84': - resolution: {integrity: sha512-P3mOPT4ON62tNrMXI79RZSbj789nt+E6B5gRX2/cuTLbiMyrOepaF4zsYRE4+8tX7YFiKbv45xobRI/Oe31WRg==} + '@fluentui/react-card@9.0.88': + resolution: {integrity: sha512-wEvgIonwR1r4e7N+fDxcW5DuBxGUjtOjNhrCqRxVFA1H0WjhLXHpGAlbBzROrCtolHBnv+Xv4ndKPm/ftguA5Q==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-checkbox@9.2.29': - resolution: {integrity: sha512-3KIY50KQ+i3Iwqi165zRo/kZ7sjeLoFX5yYYB3BXpqNey+EGP6zhm1C7NAOy3d6dUlREbOHHxbM+9QUHtgUv1w==} + '@fluentui/react-checkbox@9.2.33': + resolution: {integrity: sha512-5bccf0H4as8vjQXslFrZhEIosNUUOqpuZ20OLkpoI+NVzVfQtwa4sI8BaSr8oATJU3haXVBxItOa/zOOiBzWvA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-combobox@9.11.8': - resolution: {integrity: sha512-qOKRnotJ53cBWVtSfJ3ZM1cpJ05Fzidfsygz351Jw6Gk8CKgvO9Vi9EvpadP8rrWcnr1GcPhnW2KGP9qsEFnJQ==} + '@fluentui/react-combobox@9.13.3': + resolution: {integrity: sha512-q1B/1e/beA8dkPZS8MV+jHF092W8y0bCdxfTrsnWuapKIXIn0BMPSE04f0aNED8R4yxxZN27y8LR/9EGcWeHtA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-components@9.54.2': - resolution: {integrity: sha512-NcpmVmYtF7BQComrRcnjlHijXCApDXKKJx+aTxJb7lWl3C5oPIzWzKNtiIwm3zXKDlGMuN336FHc0I0sduMtHA==} + '@fluentui/react-components@9.54.7': + resolution: {integrity: sha512-X7B5rLEsx30bRtHMdNHgWnij+xSMleJg6tyRR9L2nwFaDIf89jaQU1iNDkIgEf4zSXGhBRXAlT0UlYcwcEWZjw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-context-selector@9.1.62': - resolution: {integrity: sha512-XXSCkqzisRWGjckdkZLLx0uYnQyfwa0xedEB6HMMeCnJqYWj4aFj27IhQC25UQ2SMdrl1vnjdfqUYjn6G3NsAQ==} + '@fluentui/react-context-selector@9.1.65': + resolution: {integrity: sha512-hpluiP2NtK01Kx1RdKnJkQr7snbFuFJUwRho3NsuzuX/ea9OaVNEAxcvLMUcwd5nItf5Y5U8i07ib7YX5qchmQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' @@ -1547,32 +1545,32 @@ packages: react-dom: '>=16.14.0 <19.0.0' scheduler: '>=0.19.0 <=0.23.0' - '@fluentui/react-dialog@9.11.2': - resolution: {integrity: sha512-us1JbZ7iucDyJyd372sJQqdcJPCgQJLsxR3OFVoecQ+wOC66eLKTHHKhyHhdIRem/dfpm8X1mzEmrj+ipws1jQ==} + '@fluentui/react-dialog@9.11.7': + resolution: {integrity: sha512-g0tcW2X7FyDGifwJU+Q2hX8pgLk+AUYBDK7d0xOyXpWhP/HN920r4E+MlgJhmmpf5hRh3959knZqoyrnG0+GGA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-divider@9.2.70': - resolution: {integrity: sha512-PtPAQp+j9icisZrmZR65LLug/uk/cWBdyQAMKse6jKmF/274xp9M9xuB833fgryJ3NIMp+dVHsJT8XJxhMVHcQ==} + '@fluentui/react-divider@9.2.73': + resolution: {integrity: sha512-AmkJPAFEszLbWh7vrV6vV+omnkQgfw1hhVBcTIlLD2b712Tk7GczZC2PXTq0fNKI3Aw8x4sNBbomozJp2y+X7w==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-drawer@9.5.2': - resolution: {integrity: sha512-uUXGrVRiG+LsF82EdtVlEdfO0EH5+zN/T7eOWdADm94M5LIK5VT+ifm31f+bERdJIPfCV2HbfUTtqgL9ubho1A==} + '@fluentui/react-drawer@9.5.7': + resolution: {integrity: sha512-9v755/LWQu76vvdsHiSMj/3XKvjfJT8NFQGHF+qwUj/wXmyW6ZfmVwW1HcwJ1dDMP6yOGBUXS9R56SqLIVGFxQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-field@9.1.68': - resolution: {integrity: sha512-PiXti7L9rBwk98S+BcS9EKj13nmvl/lymwdrw2vguOMJvNQYIW4UhmvAzFDxs92kpfeHIjZgcEv+cskhJ7Uo7g==} + '@fluentui/react-field@9.1.72': + resolution: {integrity: sha512-39DsB0nIOU7FdWN7+a8x2RKPaZrAMmsGaz85DOYryzbp8y9bn990BjU8WnhquNABkW2xJNI9gEi0goW/R3tmiQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' @@ -1596,8 +1594,8 @@ packages: peerDependencies: react: '>=16.8.0 <19.0.0' - '@fluentui/react-image@9.1.68': - resolution: {integrity: sha512-cjUoL7nt9cyO5WrPw5wG2GFYRvAEpOA2/nbeUooeAAQQ11V+d7ekSxpfD9OyyiA5KABpn909puzu96kqNTwKFg==} + '@fluentui/react-image@9.1.71': + resolution: {integrity: sha512-OKUbVsZLVe/kRP7KrweHDkztY8FUz6HzEPxZvJqIkwDf+KIJJxDV4R9Hpw8Fis6ceLbj/VI5JUVwGIp5YQlsjA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' @@ -1612,16 +1610,16 @@ packages: react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-infolabel@9.0.37': - resolution: {integrity: sha512-q3GzoMQXv6r6d/9d6PRA1XDTY9mJDO/7Kh538E1b4HEQwyVSW21NpuUZSHURp5O7v3tfuCq47BMO0339ePCu+g==} + '@fluentui/react-infolabel@9.0.41': + resolution: {integrity: sha512-Jp544tDHH+Ss2XsHJy18nQlWA8tv4jKWXR9wwNS8NbKk40mW+KIVV4fbq8fUvD29McHI9vpuAMl5Yfzpcu2hkg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' - react: '>=16.8.0 <19.0.0' + react: '>=16.14.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' - '@fluentui/react-input@9.4.79': - resolution: {integrity: sha512-Nuf3n4Py77v5zOVE9MLaQeC6ywwjfL7jTdEaKVGL3k/geWTG5WFqjG79CzNJo0Ajo0DKnPqul6MtLdRF+tqeNQ==} + '@fluentui/react-input@9.4.84': + resolution: {integrity: sha512-gl/HRKkxsJKlc9mBcblb6HSUWeqPJTpi2yAjyPMIHxVHOg1RftG3+5xQTcmkXwvFeUEfC/4krEMibsFBXtvwWg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' @@ -1634,72 +1632,78 @@ packages: '@types/react': '>=16.14.0 <19.0.0' react: '>=16.14.0 <19.0.0' - '@fluentui/react-label@9.1.71': - resolution: {integrity: sha512-PkzRsl86+AkSn6p26C0Y2AV4IxYUhbBV+lFNSwN/hVgiXwMVdUjPOZx4Nm4Fnvv5ctt/BVuaE0dB/nSSDsrnQw==} + '@fluentui/react-jsx-runtime@9.0.42': + resolution: {integrity: sha512-/iKhJx5htz+iBjWRjviM7cEAiG0y9oqVimmeWaZChi0M5abwvHkueYQ+n1BhzYOtsdeuXXcbrkx4VkaO5j5Efg==} + peerDependencies: + '@types/react': '>=16.14.0 <19.0.0' + react: '>=16.14.0 <19.0.0' + + '@fluentui/react-label@9.1.74': + resolution: {integrity: sha512-9EDwomVwcHJvI7QKIsBok3EQ5Ty5R3cDMnYZl7OIugffEvt+UWcmNyIOckYt80vsPYNbM9XqTt4rNAvCkFd1UQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-link@9.2.25': - resolution: {integrity: sha512-yhwgXjIFC39Nd5zveaOu3AgAra3H0Cv+gQ4rOLKW95ejlXHJqZEqcFPrf39d930YVCeIThiBH7IG1JCfo4z8/Q==} + '@fluentui/react-link@9.2.28': + resolution: {integrity: sha512-k1/i8ktTCbztK88YogIt2FYCpJJMFxC4IzXAvpKLioTw6N3ITmxo9KuNNMvOYckGgHyvJliWutu/rSozFXTDmg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-menu@9.14.8': - resolution: {integrity: sha512-FFY44tCxzQJaFVKXqJuR00++FSJPUSkx/qg41e73j/8+ytelD0FtyzLoS0r/ditAfDVSJtFwuuL10+3Dagk2WQ==} + '@fluentui/react-menu@9.14.12': + resolution: {integrity: sha512-aBFXf5dtDLctNTb5+VTS7zqZgV3VOv6hEOpf4PmRZiWfw1WAjSwMKdWTWXunqIdd5eOZu9mB7y1RWSoyBrN7Jg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-message-bar@9.2.3': - resolution: {integrity: sha512-l/Z2MWgXTcc4OkN5txduZidGghbEXUhN0xKkrhxNnQrQzZLjC9C3tyOKog8/v8rkT7HEDWX6idvzDCAPEIPf4A==} + '@fluentui/react-message-bar@9.2.6': + resolution: {integrity: sha512-A1OwuzCK9Rce4PHYyPnB56qVMj2bg9Qb9h2qpHrChhz6Giol5Ty45lmmVqEpd/w+lyMC73Sgqyfg2Lucy/p3vw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' - react: '>=16.8.0 <19.0.0' + react: '>=16.14.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' - '@fluentui/react-motion-preview@0.5.22': - resolution: {integrity: sha512-ii8y7eQm5NEq+XUs9ul1AtiwF40l8DBKkEbvrm4Q1nd/pwl8Je4Aw2lzI0DnSS8NbKkZyGcdnhZ0HKZ6ap/auQ==} + '@fluentui/react-motion-components-preview@0.1.1': + resolution: {integrity: sha512-V6NxqlIgNyad0FjwcseuMef0nJyyf9uKSy400EsfnL95X/u6zYze3WiXukSjU+HlL7iASvDZDovTX2oL0eVLTQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-motion@9.2.0': - resolution: {integrity: sha512-gM38DObOXXEcE1xUe/c2bDd4J4wWwEeHghuIMOlQ+yElr8F4906bEv+gIlEbfSdACGDJ3SWixhGkxlAoAjaBow==} + '@fluentui/react-motion@9.4.0': + resolution: {integrity: sha512-WeLA0/INSf74DKFjCxHjn16p0Pak7LnKlaxva8r5ZMNNQ2Mcl7dFGdY+2e+qejghR7+8fzeojr+nQfKXH94uVQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' - react: '>=16.8.0 <19.0.0' + react: '>=16.14.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' - '@fluentui/react-overflow@9.1.22': - resolution: {integrity: sha512-h+mFyOdozdlyd0F7gzqMHyKk6jFgyAZutBwtMKiocxSSzyU44G5ZUS3hVAY6+qnVk7Ft8DkjHOZybv85naXuGA==} + '@fluentui/react-overflow@9.1.26': + resolution: {integrity: sha512-zrJfbLvxrW10GH+JtRhPclCeV/mxUxSYRsHBpD/RwABaE+L2PR//3QKHXCV7xIlFpNJUpmRbFe71dtb7Eyt2Xw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-persona@9.2.89': - resolution: {integrity: sha512-WzQ9amNhtkKNP00Uf/5xopyci+Zo1oOg8uEkWhT69PwBYLdeLHu7RF5QFPz4U/HmlW8waR8vbH25GSHD2oo9oA==} + '@fluentui/react-persona@9.2.93': + resolution: {integrity: sha512-b/D7LzDC75L2yR3V6d3F3KTs72rGvagIuX7tEVtvs3e0Q6iX3vlJAsZFd/ce4T49gMm9+gbI9TYJlDQmgoBJ+w==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-popover@9.9.12': - resolution: {integrity: sha512-oyNiU/NIrRV7N/JUIyX0IZgQSBgrYZE4C4GEpxCkB/wd8IYuF4ws/hm18WMl8NomItiC04mMfOcaB/VH4/JS9A==} + '@fluentui/react-popover@9.9.16': + resolution: {integrity: sha512-edgBJBYXJ8N6LgxH0bKgnMCFp430BpqqOzqf2Ap/0360qo9YbK8oUP2rfh0YZZJKcSC0bro3smcMbFQkq8v/3Q==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' @@ -1712,182 +1716,182 @@ packages: '@types/react': '>=16.14.0 <19.0.0' react: '>=16.14.0 <19.0.0' - '@fluentui/react-portal@9.4.28': - resolution: {integrity: sha512-QtG/rVQ0ekF7irZDlI5KKQqmeT7I9aVsawP5E2/XISejVwFc5AGboPlXELldhGqgWx0M3nNRNVk1QdKkc0PlEQ==} + '@fluentui/react-portal@9.4.31': + resolution: {integrity: sha512-c/mrsn29MvBIxkyYrIAdI9E9JCMicF7mCxpWFbQQZMYKdu4/qLCtkmQfvQKEI9WFQzLS8IzTRM+NajNewUi/nA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-positioning@9.15.3': - resolution: {integrity: sha512-hW9CGHLlz5q+IlBdpTh1xtj2OZZ6abPcDQ4WjxWneWmG3jAf4sFkwS8ylvSZ7i7QcUk+ckVuCiuJsc/GjcRzKQ==} + '@fluentui/react-positioning@9.15.7': + resolution: {integrity: sha512-Zb+Td/a3nFDeLvz3pH6ebod7Bq9tsDtx2MGQ/aarfKAvbp9JRrmb/1nkqMEauth7NPg/JV9NfXJMGq5hvBQtrw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-progress@9.1.79': - resolution: {integrity: sha512-NBHnpcOKQ9OOKnAIVd3HW4cn/yv7xjureJxn8EM2Om7ZBPS5HrKJqZHwJVrUE/QJ4WssTfiU8MipKwWwot+8Vg==} + '@fluentui/react-progress@9.1.83': + resolution: {integrity: sha512-hZGlarZwPhi90LwUsNStEymd/oqHt3Dc8mBm402RHD3XJOhJ+T7k71ROLblZOwm98m2hNJ0lSB3o6FztQlrtsw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-provider@9.16.3': - resolution: {integrity: sha512-rF3FFvqsXPshpgk+nq1sxwzysFKRPFM0fV872qP/kHiyUU7IpEyRU8HcSU5j8sFgpRSNVatAjiD0I+rvy6ekjg==} + '@fluentui/react-provider@9.17.0': + resolution: {integrity: sha512-z2nKk8MEDmDivxhcySLhD4xuEuSJgXjO14SjMcLnerAimm3Wftgoayga23cvwGgLmoeqAjG7ykEgLEfAzRDk7A==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-radio@9.2.24': - resolution: {integrity: sha512-Wl19e4CQo4Fv2A+x0ta3rS2F1OMTL7mF4qVfdfhdTOTH2J/0WmmFPrz26E2ZhqENKivIv1+NXEV/KgpPFbWF0w==} + '@fluentui/react-radio@9.2.28': + resolution: {integrity: sha512-WoH95UndR6sx+BfBH4MdztHWIodi6smpZekKBUN7Y5YjvD2delCxEDaEn5Ct5qyF3pY6rwlkVTSvmZ+GSC/baQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-rating@9.0.12': - resolution: {integrity: sha512-d7fIVckXzdno4eXdN/bv9mdarvVxNh54CJJVO3/aNK8dfrcqH9NXPp4bCg+lCAYYr8fQVbe25OiUUFhYtaOJ+w==} + '@fluentui/react-rating@9.0.15': + resolution: {integrity: sha512-fa8rDyvxQplqL234IMThWRVfVj3U7y3LiJcjliZ1YrTNkTVRg/w7LK010625Ased2IOBIWS4YLP1UFBFdxIflw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' - react: '>=16.8.0 <19.0.0' + react: '>=16.14.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' - '@fluentui/react-search@9.0.8': - resolution: {integrity: sha512-Zbb3pUjLCeEUzxy2WS+gsZsk8PGLUHAeW8RWHSIsHJEe4zZmNfJxv1PI8DrOd3a08UiOfR5q5PixZ32oCWWtUg==} + '@fluentui/react-search@9.0.13': + resolution: {integrity: sha512-mg2vI15635/h/9/FffxrVBXrD8AiCRetCISbvNHCgzHMl/1M1C/7HsJnaLj+U6wl3sgBVaWYJgLgyLd8jcc1hg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-select@9.1.79': - resolution: {integrity: sha512-E9EuUIUy2MzHRkQPmXyJp5txVo5EYH+lNoV3xgZKd9zijg7QQJWxfgbNJqddubmnRdr8MtBt/fM4qmHia5cgSQ==} + '@fluentui/react-select@9.1.83': + resolution: {integrity: sha512-vdbkFOtkG3ychVsX1b1nMxsewzu2e+ox+p+rIn2X6hBqa989797VJdhXRRQYMfCs1phSlDL1HCPM1p1s7827Lw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-shared-contexts@9.19.0': - resolution: {integrity: sha512-KWHRVuKSvQpFdGGxj802AwoHlq7VyFKaj89cgX2pBu2ZqZrdpxkbkfFQIvxLoaZ/Bzm7fWXVQrDYpj+8JHAfCA==} + '@fluentui/react-shared-contexts@9.20.0': + resolution: {integrity: sha512-LOMgP51dC/dOQOopEhvRk9V/GlpkStMbXTsci+2raG+Zno3eIdS3TesWCango+r5rpBFCIZl4HOpGEErHGm03Q==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' react: '>=16.14.0 <19.0.0' - '@fluentui/react-skeleton@9.1.7': - resolution: {integrity: sha512-2Ve7NZ1LyssPgztw+K55znY/uiZRx/g8Iif7L6ETvvcn3nE3WZFWISLfVdCF7SQBTa+oV+gDBjUKpEZcFA512Q==} + '@fluentui/react-skeleton@9.1.11': + resolution: {integrity: sha512-e5Pl8EqclZ2NHAdRtwheFmrNwvynVooem0Hh+w19AZwuukjFDvpdWktJ6mpECtPQyaWgcFb67mO1IbfnQNffqA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-slider@9.1.86': - resolution: {integrity: sha512-icgE/5iYx69DQLcOlPicATxQJcNBYg2uJGvVgzVhhLuXy87mkqv7Lh5YFfmcMpMSWbOhoEbDle73MMTDu8UC9g==} + '@fluentui/react-slider@9.1.90': + resolution: {integrity: sha512-k+NppSxPKYji9KqtKbpfo6Lva8g6dO289Hpkt8UAwyuV1c7BxnwgOLfPXE9OyQg28J0vcsluxYXFwsLyRqj/Fg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-spinbutton@9.2.79': - resolution: {integrity: sha512-qqe7eQ4ra3Iu/RhZHXxjnYqhH9GNPr1FlTSqPRIHa7Kf0/0Hrig+gLQYw7N5BXzDSU4+cz29/9PyXowdg5mBLQ==} + '@fluentui/react-spinbutton@9.2.84': + resolution: {integrity: sha512-3Zsqk5zYXNrCjAR6wIrwvMMbrKthdXJKQH3Z37LhF+gfRfwq34dyj8N5CFhXYi0bClWRqK3namX2cMXZ7FqIsQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-spinner@9.4.9': - resolution: {integrity: sha512-+X9OmvDIhdwdiKO7I0CKrgjiS5Y2DzSVgkONMmpuu6u+DywhgLWh1JLatCiEl8Qp2/cBlg32XNfBl0lAfQHHFw==} + '@fluentui/react-spinner@9.4.12': + resolution: {integrity: sha512-pcIxhJtM0SFqDqL7/FUm9h2AbKn9D7WLjwXfE0Umx8T9cp8H/D1VgL9whCGqnvwa2BX2xWTmPbSz6QVRdwL7Jw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-swatch-picker@9.1.3': - resolution: {integrity: sha512-L8EE6jTOzQe1jLsZuZCWEUiNq3bkOYrmvwtHvHRCBLcdD6+fOcYxvZP9PIBLgkj+hNSf7E4A/8Kol/SOn419Wg==} + '@fluentui/react-swatch-picker@9.1.6': + resolution: {integrity: sha512-vLpmM2ENFPs+4qemjswfO5gEveUFIqSS/Gu1z7FiBbp/tUNS13rXYQBiUPFCS8xEsQG4gNcozBs9Lejdyean4g==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' - react: '>=16.8.0 <19.0.0' + react: '>=16.14.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' - '@fluentui/react-switch@9.1.86': - resolution: {integrity: sha512-tcgkSv+VwT4QzP/wuMT472R5oZJtiUhbLnSgMWGlyuETBMDMF0Vp3SNkp8noalTyNHPnrJgylKgUuKtt3MyL1Q==} + '@fluentui/react-switch@9.1.90': + resolution: {integrity: sha512-0xd7vn1o+XsGk4jIkA6mAXJm4HxnFcK2WoQI3NFjsJ1wXdghHZEEV+1YX0bgUUh4DouXfETrQzgZKkF0c1uCFA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-table@9.15.8': - resolution: {integrity: sha512-awEJcDF+LX0xCpIArGBRwUh4/4vw0rJcwVnmlujn2DoYBwasUoyL9QYZF2W5U+XnHazYBgX7Bm+JMJ7awVdSVQ==} + '@fluentui/react-table@9.15.12': + resolution: {integrity: sha512-J7oF4szGNhXboobgOeNGMy3F342IJYma76sEQhUN1rZEHpIkJIEfldUtdXlJK72N3RRaNruq26WTpeQFLaT9MQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-tabs@9.4.24': - resolution: {integrity: sha512-HBy+TNI0XoC1WqLjIAWokW5HeCD59h//Cy+nHELI4xSVc3gbWDb2KLRptDLYawcDT9hsUnwxtnSXmQgnGLhH2A==} + '@fluentui/react-tabs@9.4.27': + resolution: {integrity: sha512-aJmaTqXz77neyJpgffdKi9gpLtGQjRZcVcvhR/Ft0ZMC+u8XGkTlrtF0ntZZcnPwzeZ7P2qjMMrdvIyDsaSxMg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-tabster@9.22.0': - resolution: {integrity: sha512-R61y6/kRWjA8UP9F/wMvOBtOFM1frgiQA0zF49BfrQvwnJMFEYidaLsc1e6IkNS34IiwpsESaIIOlDMn5mUXzg==} + '@fluentui/react-tabster@9.22.3': + resolution: {integrity: sha512-z/icX1sMTHVXJxq2tlNKGM9A9J7RYLgu03vVh+0z4N+Q4k5Oe0HvKFNyi447+R5UEHbWebMEpabbTIox3DuLQw==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-tag-picker@9.1.1': - resolution: {integrity: sha512-S4RRX4TMm/EwxaHIDIrTJMIv4YXa849BTQuS9WUO/QKO4dlRiC1E5LdS8jm6Fo0wQRr/MVasG6EkGJ8atm6ruw==} + '@fluentui/react-tag-picker@9.2.4': + resolution: {integrity: sha512-pApWLCBA/Lpi7WRCyNEAr5Vmye6/WtOHdTpjLTWPb4ymWM1ifXZwHGmD1c7dvukhO4jxWbQHFCz0Jt3ElyoY5Q==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-tags@9.3.9': - resolution: {integrity: sha512-hwriI1Uj4rI5qQ0A8FrAlCHJ9pZCo8mwWM0VTKpssN5vK4nqcSpiMq91mw810+GUlNiXnTW+gZCn0RlaryCQFw==} + '@fluentui/react-tags@9.3.13': + resolution: {integrity: sha512-Q+vY6q8HecNIPH0VQ8nIIcInBFScfGvG+5VZkCV+LOQ/QLY7AhXt/dJPsx0nFJXhoxSrTXyPYm908RdBsfnv8A==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-teaching-popover@9.1.8': - resolution: {integrity: sha512-idi9GeIm4Hl3pcnELhN1mxvK9eIVCqdEES1IeTSGpEUHsjGiRZCmBV+Z6upv9HSpiTM+zJnCQPXCwp7x5KDP9Q==} + '@fluentui/react-teaching-popover@9.1.12': + resolution: {integrity: sha512-bzZQWZRgOWGNbohu0MKIbjQkQiosgBBetBvUrJZiQsV3Dw8rKuU1TyRBNbLuSyA0AOGPR0NHQBkbCkfnMgnKBQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' - react: '>=16.8.0 <19.0.0' + react: '>=16.14.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' - '@fluentui/react-text@9.4.20': - resolution: {integrity: sha512-9ulw77qtUfxmgFTIC3UwzCyw0mn9xWV16VZ3j8MzDeLOapvGUz4UnvOV8aLXIWmI7VbeEVRRcQ5eFMvL6dbhRQ==} + '@fluentui/react-text@9.4.23': + resolution: {integrity: sha512-ZQu7yBSULDIbCOvP9B1ViK4BFSb2T6VaWUbv5qfUEV4g24b812EspTYNdoicx7SqdaDt1tSdpy1wFl6QViC5/Q==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-textarea@9.3.79': - resolution: {integrity: sha512-7nAMBINpKWgvftXvKdynppiLhv0+O97bMwoLyhUdHnBu0fJi/2yYXlsCh1RFAaBg07qc+wqdQX1TdI4ad2nluQ==} + '@fluentui/react-textarea@9.3.84': + resolution: {integrity: sha512-ORBGHRX4rJMo3CMVt459KJucPSIo5liedQjs5Uzlp5eJsWuWQdWj0j9bKf34wNc3kD+ciyDrjGI4xSgaRd30OQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' @@ -1897,46 +1901,46 @@ packages: '@fluentui/react-theme@9.1.19': resolution: {integrity: sha512-mrVhKbr4o9UKERPxgghIRDU59S7gRizrgz3/wwyMt7elkr8Sw+OpwKIeEw9x6P0RTcFDC00nggaMJhBGs7Xo4A==} - '@fluentui/react-toast@9.3.47': - resolution: {integrity: sha512-sFvdp8OOniYMasIIQB2kwZkezb8lx7mw14RtnPyUG/E8bo5j96uVEZWVH8nAbZGezxSi2X75WZbplla55vhJ6Q==} + '@fluentui/react-toast@9.3.51': + resolution: {integrity: sha512-msbIdN1x4XlifDDxaoV54aQ+dCjIVH7l9J37mG98ySrjP1F+QpDcaZ87xPb0Cpfg/oUkdvsK6FCeCl6HrWIGWA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-toolbar@9.1.87': - resolution: {integrity: sha512-jxi5cSw4tj++goEjz85prAJdsfRSqZhY0IV4UAhYvcQLaNaR1mqdJzjynXWHwf5SyKj7u4lsgfJ8XYibBL9/JA==} + '@fluentui/react-toolbar@9.1.91': + resolution: {integrity: sha512-mkrtSd95uT2udBgHZXseAtSSziqm6BB0nRi4NEoXvRj9fbJTTP54Xb/HM6LZYEp+cxzcbNLPvKQzNw+Sh3VHow==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-tooltip@9.4.31': - resolution: {integrity: sha512-e6DZgYWDwzt1i0guZjUIrBxuX8sQ1KZg/snJ4puM6IWpbUC2dLahBvOdJbAZopyFRwhsvP37Cey4nTrwhhDVSA==} + '@fluentui/react-tooltip@9.4.35': + resolution: {integrity: sha512-UgFRwNaOYCgMv88ds5kBZY6NPsj5eH5RYSw09WsXPpeow84eDSovH4iAW3iduDYThoFIYdJc4cUuhn49f131zQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-tree@9.7.1': - resolution: {integrity: sha512-zyUW0NwuafZE1618ssOmBZidHg6Luccgmz67XO3zhv5VlVYvMnr1ci55tgyp4L1SY2P/6hVB216EVK0c7oJA6w==} + '@fluentui/react-tree@9.7.6': + resolution: {integrity: sha512-AaOziw3wZ5yTGXs7cGIblR2noqVP2O785/0ZUFdMj0DredAfU7m2coIFrj64xa2W7FvVOueiUcGU8LBRzXarpQ==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' react: '>=16.14.0 <19.0.0' react-dom: '>=16.14.0 <19.0.0' - '@fluentui/react-utilities@9.18.10': - resolution: {integrity: sha512-1yUFZrJyBO1qizHa20S35JATQwr0QoTZ5vBmov0K49BWxDpJxpiAClMpFaMlw0hj9cI7HMLFF8Y87OhUYvaheQ==} + '@fluentui/react-utilities@9.18.13': + resolution: {integrity: sha512-Qk9rL5tZI+az77+S2WKwLWu+WOSZZJSIthxp/ImjuiR6CS+LMrVdl0UC8lHpq03QU7hPgNxbbo0cVnCFazU3Lg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' react: '>=16.14.0 <19.0.0' - '@fluentui/react-virtualizer@9.0.0-alpha.79': - resolution: {integrity: sha512-L2X9PKaH88VcA5LE7DxsmDZu3qy9N8fUIrvoYc4x6WXa2cAefwknvkPj/tezDvkTz3lttck5/MlEeu88qpUmtg==} + '@fluentui/react-virtualizer@9.0.0-alpha.82': + resolution: {integrity: sha512-XvkDXua8Tn9If02RhLPzFMR7CivAZ+frCajQFKaWZjE7OJqYsJ+hKb5ZGz7SWdOPtFq6uxe3H96vG1aDcA0n+w==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' '@types/react-dom': '>=16.9.0 <19.0.0' @@ -2645,6 +2649,10 @@ packages: resolution: {integrity: sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==} engines: {node: '>=14.0.0'} + '@remix-run/router@1.19.0': + resolution: {integrity: sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA==} + engines: {node: '>=14.0.0'} + '@rollup/plugin-babel@5.3.1': resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} @@ -2786,8 +2794,8 @@ packages: '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - '@testing-library/dom@10.3.1': - resolution: {integrity: sha512-q/WL+vlXMpC0uXDyfsMtc1rmotzLV8Y0gq6q1gfrrDjQeHoeLrqHbxdPvPNAh1i+xuJl7+BezywcXArz7vLqKQ==} + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} '@testing-library/jest-dom@6.4.6': @@ -3621,8 +3629,11 @@ packages: resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} engines: {node: '>=4'} - axios@1.7.2: - resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} + axios@0.28.1: + resolution: {integrity: sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==} + + axios@1.7.3: + resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} axobject-query@3.1.1: resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} @@ -5086,8 +5097,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-xml-parser@4.4.0: - resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true fastest-levenshtein@1.0.16: @@ -7017,9 +7028,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -7993,12 +8001,25 @@ packages: react: '>=16.8' react-dom: '>=16.8' + react-router-dom@6.26.0: + resolution: {integrity: sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + react-router@6.24.0: resolution: {integrity: sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' + react-router@6.26.0: + resolution: {integrity: sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-scripts@5.0.1: resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} @@ -8746,8 +8767,8 @@ packages: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} - tabster@8.0.0: - resolution: {integrity: sha512-82pqhDwH3uq7hVcy1nOo7lyYgCJcVUPqb30hvoHtX8DQ5pxEtRz9+FqVcW5w7J6kTjNBBu7cwKvuMy9qoeQt1g==} + tabster@8.0.1: + resolution: {integrity: sha512-Df8La4+IkdbHjupybEDv4rCPSOwx8L3Xh7UVbl0tzyrkiVTKvZg3IRID6KHd/tXbyerO4cXwhY9aOQ+mbEP04w==} tailwindcss@3.4.4: resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} @@ -8949,6 +8970,30 @@ packages: esbuild: optional: true + ts-jest@29.2.4: + resolution: {integrity: sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + ts-loader@9.5.1: resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} @@ -9377,6 +9422,16 @@ packages: webpack-cli: optional: true + webpack@5.93.0: + resolution: {integrity: sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} @@ -9761,7 +9816,7 @@ snapshots: '@azure/abort-controller': 2.1.2 tslib: 2.6.3 - '@azure/identity@2.1.0': + '@azure/identity@4.4.1': dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.7.2 @@ -9770,15 +9825,13 @@ snapshots: '@azure/core-tracing': 1.1.2 '@azure/core-util': 1.9.0 '@azure/logger': 1.1.2 - '@azure/msal-browser': 2.39.0 - '@azure/msal-common': 7.6.0 - '@azure/msal-node': 1.18.4 + '@azure/msal-browser': 3.17.0 + '@azure/msal-node': 2.12.0 events: 3.3.0 jws: 4.0.0 open: 8.4.2 stoppable: 1.1.0 tslib: 2.6.3 - uuid: 8.3.2 transitivePeerDependencies: - supports-color @@ -9802,21 +9855,15 @@ snapshots: dependencies: tslib: 2.6.3 - '@azure/msal-browser@2.39.0': - dependencies: - '@azure/msal-common': 13.3.3 - '@azure/msal-browser@3.17.0': dependencies: '@azure/msal-common': 14.12.0 '@azure/msal-common@13.3.1': {} - '@azure/msal-common@13.3.3': {} - '@azure/msal-common@14.12.0': {} - '@azure/msal-common@7.6.0': {} + '@azure/msal-common@14.14.0': {} '@azure/msal-node@1.18.4': dependencies: @@ -9824,6 +9871,12 @@ snapshots: jsonwebtoken: 9.0.2 uuid: 8.3.2 + '@azure/msal-node@2.12.0': + dependencies: + '@azure/msal-common': 14.14.0 + jsonwebtoken: 9.0.2 + uuid: 8.3.2 + '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -10941,16 +10994,18 @@ snapshots: dependencies: '@swc/helpers': 0.5.11 - '@fluentui/react-accordion@9.4.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-accordion@9.5.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-motion': 9.4.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-motion-components-preview': 0.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -10962,13 +11017,13 @@ snapshots: '@fluentui/react-alert@9.0.0-beta.124(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-avatar': 9.6.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-button': 9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-avatar': 9.6.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-button': 9.3.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-icons': 2.0.245(react@18.3.1) '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -10978,31 +11033,31 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-aria@9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-aria@9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-avatar@9.6.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-avatar@9.6.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-badge': 9.2.38(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-badge': 9.2.41(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-popover': 9.9.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-popover': 9.9.16(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-tooltip': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tooltip': 9.4.35(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11012,13 +11067,13 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-badge@9.2.38(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-badge@9.2.41(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11026,17 +11081,17 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-breadcrumb@9.0.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-breadcrumb@9.0.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-button': 9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-button': 9.3.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-link': 9.2.25(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-link': 9.2.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11044,16 +11099,16 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-button@9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-button@9.3.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11061,13 +11116,14 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-card@9.0.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-card@9.0.88(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-text': 9.4.23(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11075,16 +11131,16 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-checkbox@9.2.29(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-checkbox@9.2.33(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-label': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-label': 9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11094,20 +11150,20 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-combobox@9.11.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-combobox@9.13.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-portal': 9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-positioning': 9.15.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-portal': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-positioning': 9.15.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11117,64 +11173,64 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-components@9.54.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-components@9.54.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-accordion': 9.4.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-accordion': 9.5.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-alert': 9.0.0-beta.124(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-avatar': 9.6.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-badge': 9.2.38(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-breadcrumb': 9.0.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-button': 9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-card': 9.0.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-checkbox': 9.2.29(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-combobox': 9.11.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-dialog': 9.11.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-divider': 9.2.70(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-drawer': 9.5.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-image': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-avatar': 9.6.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-badge': 9.2.41(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-breadcrumb': 9.0.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-button': 9.3.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-card': 9.0.88(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-checkbox': 9.2.33(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-combobox': 9.13.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-dialog': 9.11.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-divider': 9.2.73(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-drawer': 9.5.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-image': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-infobutton': 9.0.0-beta.102(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-infolabel': 9.0.37(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-input': 9.4.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-label': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-link': 9.2.25(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-menu': 9.14.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-message-bar': 9.2.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-motion': 9.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-overflow': 9.1.22(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-persona': 9.2.89(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-popover': 9.9.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-portal': 9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-positioning': 9.15.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-progress': 9.1.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-provider': 9.16.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-radio': 9.2.24(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-rating': 9.0.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-search': 9.0.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-select': 9.1.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-skeleton': 9.1.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-slider': 9.1.86(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-spinbutton': 9.2.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-spinner': 9.4.9(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-swatch-picker': 9.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-switch': 9.1.86(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-table': 9.15.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-tabs': 9.4.24(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-tag-picker': 9.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-tags': 9.3.9(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-teaching-popover': 9.1.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-text': 9.4.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-textarea': 9.3.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-infolabel': 9.0.41(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-input': 9.4.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-label': 9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-link': 9.2.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-menu': 9.14.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-message-bar': 9.2.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-motion': 9.4.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-overflow': 9.1.26(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-persona': 9.2.93(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-popover': 9.9.16(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-portal': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-positioning': 9.15.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-progress': 9.1.83(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-provider': 9.17.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-radio': 9.2.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-rating': 9.0.15(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-search': 9.0.13(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-select': 9.1.83(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-skeleton': 9.1.11(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-slider': 9.1.90(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-spinbutton': 9.2.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-spinner': 9.4.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-swatch-picker': 9.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-switch': 9.1.90(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-table': 9.15.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-tabs': 9.4.27(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-tag-picker': 9.2.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-tags': 9.3.13(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-teaching-popover': 9.1.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-text': 9.4.23(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-textarea': 9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-toast': 9.3.47(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-toolbar': 9.1.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-tooltip': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-tree': 9.7.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-virtualizer': 9.0.0-alpha.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-toast': 9.3.51(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-toolbar': 9.1.91(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-tooltip': 9.4.35(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-tree': 9.7.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-virtualizer': 9.0.0-alpha.82(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11184,9 +11240,9 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-context-selector@9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-context-selector@9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 '@types/react-dom': 18.3.0 @@ -11194,19 +11250,19 @@ snapshots: react-dom: 18.3.1(react@18.3.1) scheduler: 0.23.0 - '@fluentui/react-dialog@9.11.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-dialog@9.11.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-motion': 9.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-portal': 9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-motion': 9.4.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-portal': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11216,12 +11272,12 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-divider@9.2.70(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-divider@9.2.73(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11229,15 +11285,15 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-drawer@9.5.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-drawer@9.5.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-dialog': 9.11.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-motion-preview': 0.5.22(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-dialog': 9.11.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-motion': 9.4.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11247,14 +11303,14 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-field@9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-field@9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-label': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-label': 9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11290,12 +11346,12 @@ snapshots: react: 18.3.1 tslib: 2.6.3 - '@fluentui/react-image@9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-image@9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11307,11 +11363,11 @@ snapshots: dependencies: '@fluentui/react-icons': 2.0.245(react@18.3.1) '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-label': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-popover': 9.9.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-label': 9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-popover': 9.9.16(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11321,15 +11377,15 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-infolabel@9.0.37(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-infolabel@9.0.41(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-label': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-popover': 9.9.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-label': 9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-popover': 9.9.16(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11339,13 +11395,13 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-input@9.4.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-input@9.4.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11357,18 +11413,26 @@ snapshots: '@fluentui/react-jsx-runtime@9.0.39(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 react: 18.3.1 react-is: 17.0.2 - '@fluentui/react-label@9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-jsx-runtime@9.0.42(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) + '@swc/helpers': 0.5.11 + '@types/react': 18.3.3 + react: 18.3.1 + react-is: 17.0.2 + + '@fluentui/react-label@9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11376,14 +11440,14 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-link@9.2.25(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-link@9.2.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11391,19 +11455,19 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-menu@9.14.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-menu@9.14.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-portal': 9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-positioning': 9.15.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-portal': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-positioning': 9.15.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11413,14 +11477,14 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-message-bar@9.2.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-message-bar@9.2.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-button': 9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-button': 9.3.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11429,23 +11493,19 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-motion-preview@0.5.22(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-motion-components-preview@0.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) - '@griffel/react': 1.5.23(react@18.3.1) + '@fluentui/react-motion': 9.4.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-motion@9.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-motion@9.4.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 '@types/react-dom': 18.3.0 @@ -11453,12 +11513,12 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-is: 17.0.2 - '@fluentui/react-overflow@9.1.22(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-overflow@9.1.26(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/priority-overflow': 9.1.13 - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11468,14 +11528,14 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-persona@9.2.89(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-persona@9.2.93(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-avatar': 9.6.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-badge': 9.2.38(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-avatar': 9.6.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-badge': 9.2.41(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11485,18 +11545,18 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-popover@9.9.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-popover@9.9.16(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-portal': 9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-positioning': 9.15.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-portal': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-positioning': 9.15.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11512,11 +11572,11 @@ snapshots: '@types/react': 18.3.3 react: 18.3.1 - '@fluentui/react-portal@9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-portal@9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11525,13 +11585,13 @@ snapshots: react-dom: 18.3.1(react@18.3.1) use-disposable: 1.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-positioning@9.15.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-positioning@9.15.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/devtools': 0.2.1(@floating-ui/dom@1.6.6) '@floating-ui/dom': 1.6.6 - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11539,13 +11599,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-progress@9.1.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-progress@9.1.83(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11555,14 +11615,14 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-provider@9.16.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-provider@9.17.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/core': 1.17.0 '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 @@ -11571,15 +11631,15 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-radio@9.2.24(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-radio@9.2.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-label': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-label': 9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11589,13 +11649,13 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-rating@9.0.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-rating@9.0.15(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11603,13 +11663,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-search@9.0.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-search@9.0.13(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-input': 9.4.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-input': 9.4.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11619,14 +11679,14 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-select@9.1.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-select@9.1.83(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11636,20 +11696,20 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-shared-contexts@9.19.0(@types/react@18.3.3)(react@18.3.1)': + '@fluentui/react-shared-contexts@9.20.0(@types/react@18.3.3)(react@18.3.1)': dependencies: '@fluentui/react-theme': 9.1.19 '@swc/helpers': 0.5.11 '@types/react': 18.3.3 react: 18.3.1 - '@fluentui/react-skeleton@9.1.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-skeleton@9.1.11(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11659,14 +11719,14 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-slider@9.1.86(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-slider@9.1.90(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11676,15 +11736,15 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-spinbutton@9.2.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-spinbutton@9.2.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11694,13 +11754,13 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-spinner@9.4.9(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-spinner@9.4.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-label': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-label': 9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11708,15 +11768,15 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-swatch-picker@9.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-swatch-picker@9.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11726,16 +11786,16 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-switch@9.1.86(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-switch@9.1.90(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-label': 9.1.71(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-label': 9.1.74(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11745,20 +11805,20 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-table@9.15.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-table@9.15.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-avatar': 9.6.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-checkbox': 9.2.29(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-avatar': 9.6.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-checkbox': 9.2.33(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-radio': 9.2.24(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-radio': 9.2.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11768,14 +11828,14 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-tabs@9.4.24(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-tabs@9.4.27(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11785,11 +11845,11 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-tabster@9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-tabster@9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11797,24 +11857,24 @@ snapshots: keyborg: 2.6.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tabster: 8.0.0 + tabster: 8.0.1 - '@fluentui/react-tag-picker@9.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-tag-picker@9.2.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-combobox': 9.11.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-combobox': 9.13.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-portal': 9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-positioning': 9.15.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-tags': 9.3.9(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-portal': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-positioning': 9.15.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-tags': 9.3.13(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11824,17 +11884,17 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-tags@9.3.9(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-tags@9.3.13(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-avatar': 9.6.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-avatar': 9.6.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11844,18 +11904,18 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-teaching-popover@9.1.8(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-teaching-popover@9.1.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-button': 9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-button': 9.3.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-popover': 9.9.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-popover': 9.9.16(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11866,12 +11926,12 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-text@9.4.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-text@9.4.23(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11879,13 +11939,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-textarea@9.3.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-textarea@9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-field': 9.1.68(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-field': 9.1.72(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11900,18 +11960,18 @@ snapshots: '@fluentui/tokens': 1.0.0-alpha.16 '@swc/helpers': 0.5.11 - '@fluentui/react-toast@9.3.47(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-toast@9.3.51(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-motion': 9.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-portal': 9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-motion': 9.4.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-portal': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11919,17 +11979,17 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-toolbar@9.1.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-toolbar@9.1.91(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: - '@fluentui/react-button': 9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-divider': 9.2.70(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-radio': 9.2.24(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-button': 9.3.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-divider': 9.2.73(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-radio': 9.2.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11939,16 +11999,16 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-tooltip@9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-tooltip@9.4.35(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-portal': 9.4.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-positioning': 9.15.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-portal': 9.4.31(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-positioning': 9.15.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11956,21 +12016,21 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@fluentui/react-tree@9.7.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': + '@fluentui/react-tree@9.7.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-aria': 9.12.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-avatar': 9.6.30(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-button': 9.3.84(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-checkbox': 9.2.29(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-context-selector': 9.1.62(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-aria': 9.13.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-avatar': 9.6.34(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-button': 9.3.87(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-checkbox': 9.2.33(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-context-selector': 9.1.65(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) '@fluentui/react-icons': 2.0.245(react@18.3.1) - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-radio': 9.2.24(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-tabster': 9.22.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-radio': 9.2.28(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-tabster': 9.22.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@fluentui/react-theme': 9.1.19 - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -11980,19 +12040,19 @@ snapshots: transitivePeerDependencies: - scheduler - '@fluentui/react-utilities@9.18.10(@types/react@18.3.3)(react@18.3.1)': + '@fluentui/react-utilities@9.18.13(@types/react@18.3.3)(react@18.3.1)': dependencies: '@fluentui/keyboard-keys': 9.0.7 - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 react: 18.3.1 - '@fluentui/react-virtualizer@9.0.0-alpha.79(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fluentui/react-virtualizer@9.0.0-alpha.82(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@fluentui/react-jsx-runtime': 9.0.39(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-shared-contexts': 9.19.0(@types/react@18.3.3)(react@18.3.1) - '@fluentui/react-utilities': 9.18.10(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-jsx-runtime': 9.0.42(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-shared-contexts': 9.20.0(@types/react@18.3.3)(react@18.3.1) + '@fluentui/react-utilities': 9.18.13(@types/react@18.3.3)(react@18.3.1) '@griffel/react': 1.5.23(react@18.3.1) '@swc/helpers': 0.5.11 '@types/react': 18.3.3 @@ -12642,12 +12702,12 @@ snapshots: '@microsoft/load-themed-styles@1.10.295': {} - '@microsoft/microsoft-graph-client@3.0.7(@azure/identity@2.1.0)(@azure/msal-browser@3.17.0)': + '@microsoft/microsoft-graph-client@3.0.7(@azure/identity@4.4.1)(@azure/msal-browser@3.17.0)': dependencies: '@babel/runtime': 7.24.7 tslib: 2.6.3 optionalDependencies: - '@azure/identity': 2.1.0 + '@azure/identity': 4.4.1 '@azure/msal-browser': 3.17.0 '@microsoft/recognizers-text-choice@1.1.4': @@ -12712,11 +12772,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@microsoft/teamsfx-react@3.1.2(@fluentui/react-components@9.54.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0))(@microsoft/microsoft-graph-client@3.0.7)(@microsoft/teams-js@2.24.0)(@microsoft/teamsfx@2.3.2(@microsoft/teams-js@2.24.0)(encoding@0.1.13))(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@microsoft/teamsfx-react@3.1.2(@fluentui/react-components@9.54.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0))(@microsoft/microsoft-graph-client@3.0.7)(@microsoft/teams-js@2.24.0)(@microsoft/teamsfx@2.3.2(@microsoft/teams-js@2.24.0)(encoding@0.1.13))(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fluentui/react': 8.119.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fluentui/react-components': 9.54.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) - '@microsoft/microsoft-graph-client': 3.0.7(@azure/identity@2.1.0)(@azure/msal-browser@3.17.0) + '@fluentui/react-components': 9.54.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.0) + '@microsoft/microsoft-graph-client': 3.0.7(@azure/identity@4.4.1)(@azure/msal-browser@3.17.0) '@microsoft/teams-js': 2.24.0 '@microsoft/teamsfx': 2.3.2(@microsoft/teams-js@2.24.0)(encoding@0.1.13) react: 18.3.1 @@ -12727,13 +12787,13 @@ snapshots: '@microsoft/teamsfx@2.3.2(@microsoft/teams-js@2.24.0)(encoding@0.1.13)': dependencies: - '@azure/identity': 2.1.0 + '@azure/identity': 4.4.1 '@azure/msal-browser': 3.17.0 '@azure/msal-node': 1.18.4 '@microsoft/adaptivecards-tools': 1.3.4 - '@microsoft/microsoft-graph-client': 3.0.7(@azure/identity@2.1.0)(@azure/msal-browser@3.17.0) + '@microsoft/microsoft-graph-client': 3.0.7(@azure/identity@4.4.1)(@azure/msal-browser@3.17.0) '@microsoft/teams-js': 2.24.0 - axios: 1.7.2 + axios: 1.7.3 botbuilder: 4.22.2(encoding@0.1.13) botbuilder-dialogs: 4.22.2(encoding@0.1.13) botframework-connector: 4.22.2(encoding@0.1.13) @@ -13135,7 +13195,7 @@ snapshots: '@pkgr/core@0.1.1': {} - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)))(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)))(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.37.1 @@ -13145,11 +13205,11 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) optionalDependencies: - '@types/webpack': 5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + '@types/webpack': 5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) type-fest: 0.21.3 - webpack-dev-server: 4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + webpack-dev-server: 4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) '@polka/url@1.0.0-next.25': {} @@ -13161,6 +13221,8 @@ snapshots: '@remix-run/router@1.17.0': {} + '@remix-run/router@1.19.0': {} + '@rollup/plugin-babel@5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1)': dependencies: '@babel/core': 7.24.7 @@ -13334,7 +13396,7 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.6.3 - '@testing-library/dom@10.3.1': + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.24.7 '@babel/runtime': 7.24.7 @@ -13360,19 +13422,19 @@ snapshots: '@types/jest': 29.5.12 jest: 29.7.0(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)) - '@testing-library/react@16.0.0(@testing-library/dom@10.3.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@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))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.7 - '@testing-library/dom': 10.3.1 + '@testing-library/dom': 10.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.3 '@types/react-dom': 18.3.0 - '@testing-library/user-event@14.5.2(@testing-library/dom@10.3.1)': + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: - '@testing-library/dom': 10.3.1 + '@testing-library/dom': 10.4.0 '@trysound/sax@0.2.0': {} @@ -13674,11 +13736,11 @@ snapshots: '@types/uuid@10.0.0': {} - '@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))': + '@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))': dependencies: '@types/node': 16.18.101 tapable: 2.2.1 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) transitivePeerDependencies: - '@swc/core' - esbuild @@ -13956,22 +14018,22 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)))': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)))': dependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)))': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)))': dependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)))': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)))': dependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0) optionalDependencies: - webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.92.1) + webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.93.0) '@xmldom/xmldom@0.8.10': {} @@ -14033,7 +14095,7 @@ snapshots: btoa-lite: 1.0.0 d3-format: 1.4.5 dayjs: 1.11.11 - fast-xml-parser: 4.4.0 + fast-xml-parser: 4.4.1 jspath: 0.4.0 lodash.isequal: 4.5.0 lru-cache: 5.1.1 @@ -14314,7 +14376,15 @@ snapshots: axe-core@4.9.1: {} - axios@1.7.2: + axios@0.28.1: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.7.3: dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 @@ -14358,21 +14428,21 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@8.3.0(@babel/core@7.24.7)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + babel-loader@8.3.0(@babel/core@7.24.7)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@babel/core': 7.24.7 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) - babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) babel-plugin-istanbul@6.1.1: dependencies: @@ -14611,7 +14681,7 @@ snapshots: dependencies: '@azure/core-http': 3.0.4(encoding@0.1.13) '@azure/msal-node': 1.18.4 - axios: 1.7.2 + axios: 0.28.1 botbuilder-core: 4.22.2(encoding@0.1.13) botbuilder-stdlib: 4.22.2-internal botframework-connector: 4.22.2(encoding@0.1.13) @@ -14633,7 +14703,7 @@ snapshots: botframework-connector@4.22.2(encoding@0.1.13): dependencies: '@azure/core-http': 3.0.4(encoding@0.1.13) - '@azure/identity': 2.1.0 + '@azure/identity': 4.4.1 '@azure/msal-node': 1.18.4 base64url: 3.0.1 botbuilder-stdlib: 4.22.2-internal @@ -15049,7 +15119,7 @@ snapshots: cookie@0.6.0: {} - copy-webpack-plugin@9.1.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + copy-webpack-plugin@9.1.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: fast-glob: 3.3.2 glob-parent: 5.1.2 @@ -15057,7 +15127,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 3.3.0 serialize-javascript: 3.1.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) core-js-compat@3.37.1: dependencies: @@ -15165,7 +15235,7 @@ snapshots: postcss: 8.4.38 postcss-selector-parser: 6.1.0 - css-loader@6.11.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + css-loader@6.11.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 @@ -15176,9 +15246,22 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.2 optionalDependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) - css-minimizer-webpack-plugin@3.4.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + css-loader@6.11.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) + postcss-modules-values: 4.0.0(postcss@8.4.38) + postcss-value-parser: 4.2.0 + semver: 7.6.2 + optionalDependencies: + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + + css-minimizer-webpack-plugin@3.4.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: cssnano: 5.1.15(postcss@8.4.38) jest-worker: 27.5.1 @@ -15186,7 +15269,7 @@ snapshots: schema-utils: 4.2.0 serialize-javascript: 3.1.0 source-map: 0.6.1 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) css-prefers-color-scheme@6.0.3(postcss@8.4.38): dependencies: @@ -15199,7 +15282,7 @@ snapshots: boolbase: 1.0.0 css-what: 3.4.2 domutils: 1.7.0 - nth-check: 1.0.2 + nth-check: 2.1.1 css-select@4.3.0: dependencies: @@ -16008,7 +16091,7 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@types/eslint': 8.56.10 eslint: 8.57.0 @@ -16016,7 +16099,7 @@ snapshots: micromatch: 4.0.7 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) eslint@8.57.0: dependencies: @@ -16196,7 +16279,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-xml-parser@4.4.0: + fast-xml-parser@4.4.1: dependencies: strnum: 1.0.5 @@ -16222,17 +16305,17 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-loader@6.2.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + file-loader@6.2.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) filelist@1.0.4: dependencies: minimatch: 5.1.6 - filemanager-webpack-plugin@8.0.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + filemanager-webpack-plugin@8.0.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@types/archiver': 5.3.4 archiver: 5.3.2 @@ -16242,7 +16325,7 @@ snapshots: is-glob: 4.0.3 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) filename-reserved-regex@2.0.0: {} @@ -16325,7 +16408,7 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@babel/code-frame': 7.24.7 '@types/json-schema': 7.0.15 @@ -16341,7 +16424,7 @@ snapshots: semver: 7.6.2 tapable: 1.1.3 typescript: 4.9.5 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) optionalDependencies: eslint: 8.57.0 @@ -16657,7 +16740,17 @@ snapshots: relateurl: 0.2.7 terser: 5.31.1 - html-webpack-plugin@5.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + html-webpack-plugin@5.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + optionalDependencies: + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + + html-webpack-plugin@5.6.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -16665,7 +16758,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) htmlparser2@6.1.0: dependencies: @@ -18504,11 +18597,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + mini-css-extract-plugin@2.9.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) minimalistic-assert@1.0.1: {} @@ -18789,10 +18882,6 @@ snapshots: dependencies: path-key: 3.1.1 - nth-check@1.0.2: - dependencies: - boolbase: 1.0.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -18805,7 +18894,7 @@ snapshots: '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.7 - axios: 1.7.2 + axios: 1.7.3 chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 @@ -19351,13 +19440,13 @@ snapshots: postcss: 8.4.38 ts-node: 10.9.2(@types/node@18.19.39)(typescript@4.9.5) - postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.38 semver: 7.6.2 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) postcss-logical@5.0.4(postcss@8.4.38): dependencies: @@ -19750,7 +19839,7 @@ snapshots: regenerator-runtime: 0.13.11 whatwg-fetch: 3.6.20 - react-dev-utils@12.0.1(eslint@8.57.0)(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + react-dev-utils@12.0.1(eslint@8.57.0)(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@babel/code-frame': 7.24.7 address: 1.2.2 @@ -19761,7 +19850,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -19776,7 +19865,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: @@ -19830,73 +19919,73 @@ snapshots: react-dom: 17.0.2(react@17.0.2) react-router: 6.24.0(react@17.0.2) - react-router-dom@6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.17.0 + '@remix-run/router': 1.19.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.24.0(react@18.3.1) + react-router: 6.26.0(react@18.3.1) react-router@6.24.0(react@17.0.2): dependencies: '@remix-run/router': 1.17.0 react: 17.0.2 - react-router@6.24.0(react@18.3.1): + react-router@6.26.0(react@18.3.1): dependencies: - '@remix-run/router': 1.17.0 + '@remix-run/router': 1.19.0 react: 18.3.1 - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)))(eslint@8.57.0)(react@18.3.1)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))(type-fest@0.21.3)(typescript@4.9.5)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)))(eslint@8.57.0)(react@18.3.1)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))(type-fest@0.21.3)(typescript@4.9.5)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)): dependencies: '@babel/core': 7.24.7 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)))(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(@types/webpack@5.28.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)))(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) '@svgr/webpack': 5.5.0 babel-jest: 27.5.1(@babel/core@7.24.7) - babel-loader: 8.3.0(@babel/core@7.24.7)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + babel-loader: 8.3.0(@babel/core@7.24.7)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.7) babel-preset-react-app: 10.0.1 bfj: 7.1.0 browserslist: 4.23.1 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.11.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) - css-minimizer-webpack-plugin: 3.4.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + css-loader: 6.11.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + css-minimizer-webpack-plugin: 3.4.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.57.0 eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7))(eslint@8.57.0)(jest@27.5.1(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)))(typescript@4.9.5) - eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) - file-loader: 6.2.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + file-loader: 6.2.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) fs-extra: 10.1.0 - html-webpack-plugin: 5.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + html-webpack-plugin: 5.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) identity-obj-proxy: 3.0.0 jest: 27.5.1(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)) jest-resolve: 27.5.1 jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5))) - mini-css-extract-plugin: 2.9.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + mini-css-extract-plugin: 2.9.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) postcss: 8.4.38 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.38) - postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) postcss-normalize: 10.0.1(browserslist@4.23.1)(postcss@8.4.38) postcss-preset-env: 7.8.3(postcss@8.4.38) prompts: 2.4.2 react: 18.3.1 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) react-refresh: 0.11.0 resolve: 1.22.8 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + sass-loader: 12.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) semver: 7.6.2 - source-map-loader: 3.0.2(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) - style-loader: 3.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + source-map-loader: 3.0.2(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + style-loader: 3.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)) - terser-webpack-plugin: 5.3.10(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) - webpack-dev-server: 4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) - webpack-manifest-plugin: 4.1.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) - workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + terser-webpack-plugin: 5.3.10(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + webpack-dev-server: 4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + webpack-manifest-plugin: 4.1.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) optionalDependencies: fsevents: 2.3.3 typescript: 4.9.5 @@ -20231,11 +20320,11 @@ snapshots: sanitize.css@13.0.0: {} - sass-loader@12.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + sass-loader@12.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) sax@1.2.4: {} @@ -20456,12 +20545,12 @@ snapshots: source-map-js@1.2.0: {} - source-map-loader@3.0.2(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + source-map-loader@3.0.2(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) source-map-support@0.5.13: dependencies: @@ -20667,9 +20756,13 @@ snapshots: minimist: 0.2.4 through: 2.3.8 - style-loader@3.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + style-loader@3.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): + dependencies: + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + + style-loader@3.3.4(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) styled-jsx@5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1): dependencies: @@ -20751,7 +20844,7 @@ snapshots: '@pkgr/core': 0.1.1 tslib: 2.6.3 - tabster@8.0.0: + tabster@8.0.1: dependencies: keyborg: 2.6.0 tslib: 2.6.3 @@ -20806,7 +20899,7 @@ snapshots: tedious@14.7.0: dependencies: - '@azure/identity': 2.1.0 + '@azure/identity': 4.4.1 '@azure/keyvault-keys': 4.8.0 '@js-joda/core': 5.6.3 '@types/es-aggregate-error': 1.0.6 @@ -20838,14 +20931,23 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + terser-webpack-plugin@5.3.10(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 3.1.0 terser: 5.31.1 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + + terser-webpack-plugin@5.3.10(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 3.1.0 + terser: 5.31.1 + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) terser@5.31.1: dependencies: @@ -20964,9 +21066,10 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.7) - ts-jest@29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)))(typescript@4.9.5): + ts-jest@29.2.4(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)))(typescript@4.9.5): dependencies: bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.39)(typescript@4.9.5)) jest-util: 29.7.0 @@ -20982,7 +21085,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.7) - ts-loader@9.5.1(typescript@4.9.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + ts-loader@9.5.1(typescript@4.9.5)(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.0 @@ -20990,7 +21093,7 @@ snapshots: semver: 7.6.2 source-map: 0.7.4 typescript: 4.9.5 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) ts-node@10.9.2(@types/node@16.18.101)(typescript@4.9.5): dependencies: @@ -21305,7 +21408,7 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-assets-manifest@5.2.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + webpack-assets-manifest@5.2.1(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: chalk: 4.1.2 deepmerge: 4.3.1 @@ -21314,7 +21417,7 @@ snapshots: lodash.has: 4.5.2 schema-utils: 3.3.0 tapable: 2.2.1 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) webpack-bundle-analyzer@4.10.2: dependencies: @@ -21334,12 +21437,12 @@ snapshots: - bufferutil - utf-8-validate - webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1): + webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 @@ -21348,22 +21451,22 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) webpack-merge: 5.10.0 optionalDependencies: webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.92.1) + webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.93.0) - webpack-dev-middleware@5.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + webpack-dev-middleware@5.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) - webpack-dev-middleware@7.2.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + webpack-dev-middleware@7.2.1(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: colorette: 2.0.20 memfs: 4.9.3 @@ -21372,9 +21475,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) - webpack-dev-server@4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + webpack-dev-server@4.15.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -21404,18 +21507,18 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + webpack-dev-middleware: 5.3.4(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) ws: 8.17.1 optionalDependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.92.1): + webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.93.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -21445,21 +21548,21 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.2.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + webpack-dev-middleware: 7.2.1(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) ws: 8.17.1 optionalDependencies: - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-manifest-plugin@4.1.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + webpack-manifest-plugin@4.1.1(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: tapable: 2.2.1 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) webpack-sources: 2.3.1 webpack-merge@5.10.0: @@ -21480,14 +21583,47 @@ snapshots: webpack-sources@3.2.3: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))))(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))))(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: typed-assert: 1.0.9 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) + optionalDependencies: + html-webpack-plugin: 5.6.0(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + + webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.0 + acorn-import-attributes: 1.9.5(acorn@8.12.0) + browserslist: 4.23.1 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.0 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) + watchpack: 2.4.1 + webpack-sources: 3.2.3 optionalDependencies: - html-webpack-plugin: 5.6.0(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js - webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)): + webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -21510,11 +21646,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))) + terser-webpack-plugin: 5.3.10(webpack@5.93.0(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))) watchpack: 2.4.1 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -21720,12 +21856,12 @@ snapshots: workbox-sw@6.6.0: {} - workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1))): + workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0))): dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.92.1)) + webpack: 5.92.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.93.0)) webpack-sources: 1.4.3 workbox-build: 6.6.0(@types/babel__core@7.20.5) transitivePeerDependencies: From 52aa9eba4899d5d74d506d7253cb44204d1310d2 Mon Sep 17 00:00:00 2001 From: KangxuanYe <107154810+KangxuanYe@users.noreply.github.com> Date: Tue, 6 Aug 2024 10:24:32 -0700 Subject: [PATCH 11/18] Deprecated old StageView capability E2E testing Json data by providing Web Host SDK version range (#2446) --- apps/teams-test-app/e2e-test-data/stageView.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/teams-test-app/e2e-test-data/stageView.json b/apps/teams-test-app/e2e-test-data/stageView.json index 7b0e56688c..53903d15c7 100644 --- a/apps/teams-test-app/e2e-test-data/stageView.json +++ b/apps/teams-test-app/e2e-test-data/stageView.json @@ -11,6 +11,9 @@ "title": "openStageView API Call - Success", "type": "callResponse", "boxSelector": "#box_stageViewOpen", + "hostSdkVersion": { + "web": "<4.0.1" + }, "inputValue": { "appId": "appId", "contentUrl": "contentUrl", From 200d454df7c1e76d5b93ab276b4f27be06ce290b Mon Sep 17 00:00:00 2001 From: KangxuanYe <107154810+KangxuanYe@users.noreply.github.com> Date: Tue, 6 Aug 2024 13:26:35 -0700 Subject: [PATCH 12/18] Remove Fix Chrome Version Task (#2447) --- tools/yaml-templates/build-app-host.yml | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/tools/yaml-templates/build-app-host.yml b/tools/yaml-templates/build-app-host.yml index c3aee36444..0d71933e92 100644 --- a/tools/yaml-templates/build-app-host.yml +++ b/tools/yaml-templates/build-app-host.yml @@ -11,30 +11,6 @@ steps: - checkout: ${{ parameters.appHostGitPath }} persistCredentials: true - - script: | - if command -v google-chrome &> /dev/null; then - # Uninstall the existing Chrome - sudo apt remove google-chrome-stable --purge -y - else - echo "Google Chrome is not installed on your system." - fi - - CHROME_VERSION="116.0.5845.179" - - # Download the specific Chrome version package - wget https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb - - # Install the downloaded package - sudo dpkg -i google-chrome-stable_${CHROME_VERSION}-1_amd64.deb - - # Update package dependencies - sudo apt install -f -y - - echo "Google Chrome version ${CHROME_VERSION} has been installed." - - rm google-chrome-stable_${CHROME_VERSION}-1_amd64.deb - displayName: 'Fix Chrome browser on V116' - - task: NodeTool@0 inputs: versionSpec: '18.x' From 480f344529b82073327ae28dc622aa27e3a6199a Mon Sep 17 00:00:00 2001 From: ava-vellozzi Date: Tue, 6 Aug 2024 14:22:41 -0700 Subject: [PATCH 13/18] AvaVellozzi/diagnostiCustomScenario (#2427) * merge avavellozzi/diagnosticApp branch * fixing pnpm yaml * Custom scenario logic * Custom scenario logic * Fixed build error and deleted gitignore * Got rid of warnings in files * Fix unit test timeout * Fix unit test timeout issue * Fixed build error and deleted gitignore * Got rid of warnings in files * Fix unit test timeout * Fix unit test timeout issue * fix merge conflict * Fixed text from setSuccessMessage showing up on app screen * CSS Styling * Update gitignore to address test file issue * Update .gitignore to exclude Jest JUnit test results * fixed css so fits on all screen sixes * Fixed indentation and added geolocation functions * Added Component Wrapper to create more resuable code * Fix button icon to not use 3rd party * Made support/permission reusable functions and deleted unused files * Fix default input issue * Fixed handleRunScenario file * fixed typos * Task mod * added more concise log statemtn * Show Profile console log --------- Co-authored-by: Ava Vellozzi --- .gitignore | 9 +- .../src/apis/ApiWithoutInput.tsx | 25 - .../src/apis/AppApi.tsx | 96 ++- .../src/apis/AppInstallDialogApi.tsx | 113 ++- .../src/apis/AuthenticationEnd.tsx | 8 +- .../src/apis/BarCodeApi.tsx | 108 ++- .../src/apis/CalendarApi.tsx | 64 +- .../src/apis/CallApi.tsx | 53 +- .../src/apis/ChatApi.tsx | 97 ++- .../src/apis/ClipboardApi.tsx | 113 ++- .../src/apis/CustomApi.tsx | 9 - .../src/apis/DialogApi.tsx | 24 +- .../src/apis/DialogCardApi.tsx | 59 +- .../src/apis/GeolocationApi.tsx | 80 +++ .../src/apis/MenusApi.tsx | 103 +++ .../src/apis/PagesApi.tsx | 145 ++++ .../src/apis/PagesTabsApi.tsx | 69 ++ .../src/apis/PeopleApi.tsx | 65 ++ .../src/apis/ProfileApi.tsx | 55 ++ .../src/apis/SearchApi.tsx | 69 ++ .../src/apis/SecondaryBrowserApi.tsx | 50 ++ .../src/apis/SharingApi.tsx | 70 ++ .../src/apis/StageViewApi.tsx | 70 ++ .../src/apis/TeamsCoreApi.tsx | 114 +++ .../teamsjs-diagnostic-app/src/apis/index.tsx | 12 +- .../src/components/App.tsx | 2 +- .../src/components/sample/ApiComponents.tsx | 396 ++++++++++- .../sample/AppInitializationScenario.css | 133 ++-- .../sample/AppInitializationScenario.tsx | 29 +- .../src/components/sample/CustomScenario.css | 478 ++++++++++++- .../src/components/sample/CustomScenario.tsx | 251 ++++++- .../src/components/sample/LogConsole.css | 44 +- .../src/components/sample/Scenarios.test.tsx | 33 +- .../src/components/sample/Welcome.css | 7 +- .../src/components/sample/Welcome.tsx | 6 +- .../src/utils/ApiComponentWrapper.tsx | 69 ++ .../src/utils/CheckCapabilityUtils.tsx | 31 + .../src/utils/HandleRunScenario.tsx | 659 ++++++++++++++++++ .../src/utils/UseDragAndDrop.tsx | 13 + .../test-results/unit/unit-tests-report.xml | 7 - apps/teamsjs-diagnostic-app/tsconfig.json | 2 +- 41 files changed, 3453 insertions(+), 387 deletions(-) delete mode 100644 apps/teamsjs-diagnostic-app/src/apis/ApiWithoutInput.tsx delete mode 100644 apps/teamsjs-diagnostic-app/src/apis/CustomApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/GeolocationApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/MenusApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/PagesApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/PagesTabsApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/PeopleApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/ProfileApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/SearchApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/SecondaryBrowserApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/SharingApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/StageViewApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/apis/TeamsCoreApi.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/utils/ApiComponentWrapper.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/utils/CheckCapabilityUtils.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/utils/HandleRunScenario.tsx create mode 100644 apps/teamsjs-diagnostic-app/src/utils/UseDragAndDrop.tsx delete mode 100644 apps/teamsjs-diagnostic-app/test-results/unit/unit-tests-report.xml diff --git a/.gitignore b/.gitignore index ab86905537..54f29f57f0 100644 --- a/.gitignore +++ b/.gitignore @@ -75,4 +75,11 @@ appPackage/build /coverage # Dev tool directories -devTools/ \ No newline at end of file +devTools/ + +# Ignore Jest JUnit test results +apps/teamsjs-diagnostic-app/test-results/unit/unit-tests-report.xml + +#Ignore package locks +apps/teamsjs-diagnostic-app/package-lock.json +apps/teamsjs-diagnostic-app/api/package-lock.json \ No newline at end of file diff --git a/apps/teamsjs-diagnostic-app/src/apis/ApiWithoutInput.tsx b/apps/teamsjs-diagnostic-app/src/apis/ApiWithoutInput.tsx deleted file mode 100644 index f7ea33b517..0000000000 --- a/apps/teamsjs-diagnostic-app/src/apis/ApiWithoutInput.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; - -interface ApiWithoutInputProps { - name: string; - title: string; - onClick: () => Promise; -} - -export function ApiWithoutInput({ name, title, onClick }: ApiWithoutInputProps): React.ReactElement { - const handleButtonClick = async () => { - try { - const result = await onClick(); - console.log(`${title} executed successfully: ${result}`); - } catch (err) { - console.error(`Failed to execute ${title}:`, err); - } - }; - - return ( -
-

{title}

- -
- ); -} diff --git a/apps/teamsjs-diagnostic-app/src/apis/AppApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/AppApi.tsx index 0a951e9d67..d8aa39174e 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/AppApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/AppApi.tsx @@ -1,22 +1,80 @@ -import { app, ResumeContext } from '@microsoft/teams-js'; +import { + app, + ResumeContext, +} from '@microsoft/teams-js'; export const registerOnResume = async (): Promise => { - console.log("Calling registerOnResume API"); - - try { - - app.lifecycle.registerOnResumeHandler((context: ResumeContext): void => { - console.log('Successfully called with context: ' + JSON.stringify(context)); - app.notifySuccess(); - }); - - console.log("Registered on resume handler successfully"); - - return app.Messages.Success; - } catch (error: any) { - const registerError = new Error(`Failed to register resume handler: ${error.toString()}`); - console.error(registerError.message); - throw registerError; + console.log("Calling registerOnResume API"); + + try { + + app.lifecycle.registerOnResumeHandler((context: ResumeContext): void => { + console.log('Successfully called with context: ' + JSON.stringify(context)); + app.notifySuccess(); + }); + + console.log("Registered on resume handler successfully"); + + return app.Messages.Success; + } catch (error: any) { + console.error(error); + throw error; + } +}; + +export const getContextV2 = async (): Promise => { + console.log("Calling getContext API"); + + try { + const context = await app.getContext(); + console.log('Context retrieved successfully'); + return JSON.stringify(context); + } catch (error: any) { + const contextError = new Error(`Failed to get context: ${error.toString()}`); + console.error(contextError.message); + throw contextError; + } +}; + +export const registerOnThemeChangeHandlerV2 = async (): Promise => { + console.log("Calling registerOnThemeChangeHandler API"); + + try { + app.registerOnThemeChangeHandler((theme: string) => { + console.log('Theme changed to: ' + theme); + }); + + console.log("Registered on theme change handler successfully"); + return 'Success'; + } catch (error: any) { + const themeChangeError = new Error(`Failed to register theme change handler: ${error.toString()}`); + console.error(themeChangeError.message); + throw themeChangeError; + } +}; + +export const registerBeforeSuspendOrTerminateHandler = async (delay: number): Promise => { + console.log("Calling registerBeforeSuspendOrTerminateHandler API"); + + try { + if (typeof delay !== 'number' || isNaN(delay) || delay < 0) { + throw new Error('Delay should be a non-negative number'); } - }; - + + app.lifecycle.registerBeforeSuspendOrTerminateHandler(() => { + return new Promise((resolve) => { + setTimeout(() => { + console.log('Before suspend or terminate handler called'); + resolve(); + }, delay); + }); + }); + + console.log("Registered before suspend or terminate handler successfully"); + return 'Success'; + } catch (error: any) { + const suspendError = new Error(`Failed to register before suspend or terminate handler: ${error.toString()}`); + console.error(suspendError.message); + throw suspendError; + } +}; diff --git a/apps/teamsjs-diagnostic-app/src/apis/AppInstallDialogApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/AppInstallDialogApi.tsx index b81062b90b..3335787d21 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/AppInstallDialogApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/AppInstallDialogApi.tsx @@ -1,72 +1,67 @@ -import React, { useState } from 'react'; -import { useDrag } from 'react-dnd'; +import React from 'react'; import { ApiComponent } from '../components/sample/ApiComponents'; +import { appInstallDialog } from '@microsoft/teams-js'; +import * as microsoftTeams from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; -interface AppInstallDialogAPIsProps { - apiComponent: ApiComponent; - onDropToScenarioBox: (apiComponent: ApiComponent, func: string, input: string) => void; +export interface AppInstallDialogInput { + appId: string; } -const AppInstallDialogAPIs: React.FC = ({ apiComponent, onDropToScenarioBox }) => { - const [selectedFunction, setSelectedFunction] = useState(''); - const [inputValue, setInputValue] = useState(''); +export const appInstallDialog_CheckAppInstallCapability = async (): Promise => { + const module = appInstallDialog; + const moduleName = 'AppInstallDialog'; + const supportedMessage = 'App Install Dialog module is supported. AppInstall Dialog is supported on Teams Web, Teams Desktop, and Teams Mobile.'; + const notSupportedMessage = 'App Install Dialog module is not supported. AppInstallDialog is not supported on Outlook Web, Outlook Desktop, Outlook Mobile, or M365 Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; - const handleFunctionChange = (event: React.ChangeEvent) => { - const selectedFunc = event.target.value; - setSelectedFunction(selectedFunc); - if (selectedFunc === 'OpenAppInstallDialog') { - setInputValue(apiComponent.defaultInput || ''); - } else { - setInputValue(''); +export function appInstallDialog_OpenAppInstallDialog(input: { appId: string }) { + return new Promise((resolve, reject) => { + if (!input.appId) { + console.log('App ID is missing'); + return reject('App ID is required'); } - }; - const handleInputChange = (event: React.ChangeEvent) => { - setInputValue(event.target.value); - }; + console.log(`Starting OpenAppInstallDialog with appId: ${input.appId}`); - const [{ isDragging }, drag] = useDrag(() => ({ - type: 'API', - item: () => ({ - api: apiComponent, - func: selectedFunction, - input: selectedFunction === 'OpenAppInstallDialog' ? inputValue : '', - }), - collect: (monitor) => ({ - isDragging: monitor.isDragging(), - }), - }), [selectedFunction, inputValue]); + try { + const appId = input.appId; + // SDK/API call to open install dialog + microsoftTeams.tasks.startTask({ + title: 'Install App', + height: 600, + width: 400, + url: `https://teams.microsoft.com/l/app/${appId}`, + }); + + console.log('App install dialog opened successfully'); + resolve(); + } catch (error) { + console.error('Error opening app install dialog:', error); + reject(error); + } + }); +} + +const functionsRequiringInput = [ + 'OpenAppInstallDialog' +]; // List of functions requiring input + +interface AppInstallDialogAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} +const AppInstallDialogAPIs: React.FC = (props) => { return ( -
-
{apiComponent.title}
-
- - {selectedFunction === 'OpenAppInstallDialog' && ( -
- - -
- )} -
-
+ ); }; diff --git a/apps/teamsjs-diagnostic-app/src/apis/AuthenticationEnd.tsx b/apps/teamsjs-diagnostic-app/src/apis/AuthenticationEnd.tsx index 237eb94b5d..bd8d2f02ea 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/AuthenticationEnd.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/AuthenticationEnd.tsx @@ -14,12 +14,6 @@ const AuthEnd = () => { console.error('Authentication error:', hashParams.get('error')); authentication.notifyFailure('AuthenticationFailed'); } else if (hashParams.get('access_token') && hashParams.get('state') === state) { - const authResult = { - idToken: hashParams.get('id_token'), - accessToken: hashParams.get('access_token'), - tokenType: hashParams.get('token_type'), - expiresIn: hashParams.get('expires_in'), - }; authentication.notifySuccess('authResult'); } else { console.error('State does not match or access token missing'); @@ -31,7 +25,7 @@ const AuthEnd = () => { }; handleAuthResponse(); - }, []); + }, [navigate]); return
Handling authentication response...
; }; diff --git a/apps/teamsjs-diagnostic-app/src/apis/BarCodeApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/BarCodeApi.tsx index 0bacae8268..9fee918f8d 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/BarCodeApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/BarCodeApi.tsx @@ -1,72 +1,58 @@ -import React, { useState } from 'react'; -import { useDrag } from 'react-dnd'; +import { barCode } from '@microsoft/teams-js'; import { ApiComponent } from '../components/sample/ApiComponents'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport, checkPermission } from '../utils/CheckCapabilityUtils'; -interface BarCodeAPIsProps { - apiComponent: ApiComponent; - onDropToScenarioBox: (apiComponent: ApiComponent, func: string, input: string) => void; -} +export const barCode_CheckBarCodeCapability = async (): Promise => { + const module = barCode; + const moduleName = 'BarCode'; + const supportedMessage = 'BarCode module is supported.'; + const notSupportedMessage = 'BarCode module is not supported. BarCode is not supported on Teams, M365, or Outlook on Web, Desktop, or Mobile. Note: BarCode API is in Beta and provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; -const BarCodeAPIs: React.FC = ({ apiComponent, onDropToScenarioBox }) => { - const [selectedFunction, setSelectedFunction] = useState(''); - const [inputValue, setInputValue] = useState(''); +export const barCode_HasBarCodePermission = async (): Promise => { + const module = barCode; + const moduleName = 'BarCode'; + const permissionGrantedMessage = 'BarCode permission has been granted.'; + const errorMessage = 'HasBarCodePermission functionality is currently not supported on Teams, M365, or Outlook on Web, Desktop, or Mobile. Note: BarCode API is in Beta and provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.'; + + await checkPermission(module, moduleName, permissionGrantedMessage, errorMessage); +}; - const handleFunctionChange = (event: React.ChangeEvent) => { - const selectedFunc = event.target.value; - setSelectedFunction(selectedFunc); - if (selectedFunc === 'scanBarCode') { - setInputValue(apiComponent.defaultInput || ''); - } else { - setInputValue(''); - } - }; +export const barCode_ScanBarCode = async (config: barCode.BarCodeConfig = {}): Promise => { + console.log('Executing ScanBarCode with config:', JSON.stringify(config, null, 2)); - const handleInputChange = (event: React.ChangeEvent) => { - setInputValue(event.target.value); - }; + try { + const scannedCode = await barCode.scanBarCode(config); + console.log('Scanned code result:', scannedCode); + return scannedCode; - const [{ isDragging }, drag] = useDrag(() => ({ - type: 'API', - item: () => ({ - api: apiComponent, - func: selectedFunction, - input: selectedFunction === 'scanBarCode' ? inputValue : '', - }), - collect: (monitor) => ({ - isDragging: monitor.isDragging(), - }), - }), [selectedFunction, inputValue]); + } catch (error) { + console.log('Error scanning BarCode:', JSON.stringify(error, null, 2)); + console.log('ScanBarCode functionality is currently not supported on Teams, M365, or Outlook on Web, Desktop, or Mobile.'); + console.log ('Note: BarCode API is in Beta and provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.'); + throw error; + } +}; + +const functionsRequiringInput = [ + 'ScanBarCode' +]; // List of functions requiring input + +interface BarCodeAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} +const BarCodeAPIs: React.FC = (props) => { return ( -
-
{apiComponent.title}
-
- - {selectedFunction === 'scanBarCode' && ( -
- - -
- )} -
-
+ ); }; diff --git a/apps/teamsjs-diagnostic-app/src/apis/CalendarApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/CalendarApi.tsx index 9459e0d4b3..9e0cddbffc 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/CalendarApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/CalendarApi.tsx @@ -1,9 +1,67 @@ import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { calendar } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; -const CalendarAPIs: React.FC = () => { +export const calendar_CheckCalendarCapability = async (): Promise => { + const module = calendar; + const moduleName = 'Calendar'; + const supportedMessage = 'Calendar module is supported. Calendar is supported on Outlook Web, Outlook Desktop, and Outlook Mobile.'; + const notSupportedMessage = 'Calendar module is not supported. Calendar is only supported on the following platforms: Outlook Web, Outlook Desktop, and Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const calendar_ComposeMeeting = async (input: string): Promise => { + console.log('Executing ComposeMeeting with input:', input); + try { + const meetingDetails = JSON.parse(input); + await calendar.composeMeeting(meetingDetails); + console.log('Meeting composed successfully.'); + return 'Completed'; + } catch (error) { + console.log('Error composing meeting:', error); + console.log('Calendar is only supported on the following platforms: Outlook Web, Outlook Desktop, and Outlook Mobile.'); + throw error; + } +}; + +export const calendar_OpenCalendarItem = async (input: string): Promise => { + console.log('Executing OpenCalendarItem with input:', input); + try { + const calendarItemDetails = JSON.parse(input); + if (!calendarItemDetails.itemId) { + throw new Error('itemId is required'); + } + await calendar.openCalendarItem(calendarItemDetails); + console.log('Calendar item opened successfully.'); + return 'Completed'; + } catch (error) { + console.log('Error opening calendar item:', error); + console.log('Calendar is only supported on the following platforms: Outlook Web, Outlook Desktop, and Outlook Mobile.'); + throw error; + } +}; + +const functionsRequiringInput = [ + 'ComposeMeeting', + 'OpenCalendarItem', +]; // List of functions requiring input + +interface CalendarAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const CalendarAPIs: React.FC = (props) => { return ( -
API: Calendar
+ ); }; -export default CalendarAPIs; +export default CalendarAPIs;; diff --git a/apps/teamsjs-diagnostic-app/src/apis/CallApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/CallApi.tsx index 6725d9f08d..03d2b826d7 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/CallApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/CallApi.tsx @@ -1,8 +1,57 @@ import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { call } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; -const CallAPIs: React.FC = () => { +export const call_CheckCallCapability = async (): Promise => { + const module = call; + const moduleName = 'Call'; + const supportedMessage = 'Call module is supported. Call is supported on Teams Web, Outlook Web, Teams Desktop, Outlook Desktop, and Teams Mobile.'; + const notSupportedMessage = 'Call module is not supported. Call is not supported on M365 Web, M365 Desktop, Outlook Desktop, M365 Mobile, or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const call_StartCall = async (input: string): Promise => { + console.log('Executing StartCall with input:', input); + + try { + const validateInput = (input: string) => { + if (!input) { + console.log('Input is required for StartCall. Input includes a comma-separated list of user IDs representing the participants of the call, list of modalities for the call (defaults to [“audio”]), and an optional parameter that informs about the source of the deep link.'); + throw new Error('Input is required for StartCall'); + } + console.log('Input validation passed'); + }; + + validateInput(input); + + const result = await call.startCall({ targets: [input] }); + console.log('Call started successfully. StartCall result:', result); + return 'Call started successfully'; + } catch (error) { + console.log('Error in StartCall:', error); + throw error; + } +}; + +const functionsRequiringInput = [ + 'StartCall' +]; // List of functions requiring input + +interface CallAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const CallAPIs: React.FC = (props) => { return ( -
API: Call
+ ); }; diff --git a/apps/teamsjs-diagnostic-app/src/apis/ChatApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/ChatApi.tsx index 05c5f3245e..541774daee 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/ChatApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/ChatApi.tsx @@ -1,10 +1,99 @@ import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { chat, conversations } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; -const ChatAPIs: React.FC = () => { +export const chat_CheckChatCapability = async (): Promise => { + const module = chat; + const moduleName = 'Chat'; + const supportedMessage = 'Chat module is supported. Chat is supported on Teams Web, Outlook Web, Teams Desktop, Outlook Desktop (Version 2205 or later), and Teams Mobile.'; + const notSupportedMessage = 'Chat module is not supported. Chat is not supported on M365 Web, M365 Desktop, Outlook Desktop (Versions older than 2205), M365 Mobile, or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const chat_OpenChat = async (input: string): Promise => { + console.log('Executing OpenChat...'); + try { + const chatParams = JSON.parse(input); + if (!chatParams.user) { + console.log('User is required'); + throw new Error('User is required'); + } + + await chat.openChat({ user: chatParams.user, message: chatParams.message }); + console.log('Chat opened successfully'); + return 'chat.openChat() was called'; + } catch (error) { + console.log('Error opening chat:', error); + throw error; + } +}; + +export const chat_OpenGroupChat = async (input: string): Promise => { + console.log('Executing OpenGroupChat...'); + try { + const groupChatParams = JSON.parse(input); + if (!Array.isArray(groupChatParams.users) || groupChatParams.users.length === 0) { + console.log('Users array is required and must contain at least one user'); + throw new Error('Users array is required and must contain at least one user'); + } + + await chat.openGroupChat({ users: groupChatParams.users, message: groupChatParams.message }); + console.log('Group chat opened successfully'); + return 'chat.openGroupChat() was called'; + } catch (error) { + console.log('Error opening group chat:', error); + throw error; + } +}; + +export const chat_OpenConversation = async (input: string): Promise => { + console.log('Executing OpenConversation with input...'); + try { + const conversationParams = JSON.parse(input); + if (!conversationParams.entityId || !conversationParams.title || !conversationParams.subEntityId) { + throw new Error('entityId, title, and subEntityId are required'); + } + await conversations.openConversation(conversationParams); + console.log('Conversations opened successfully'); + return 'Conversation Opened'; + } catch (error) { + console.log('Error opening conversation:', error); + throw error; + } +}; + +export const chat_CloseConversation = async (): Promise => { + console.log('Executing CloseConversation...'); + try { + await conversations.closeConversation(); + console.log('Conversation closed successfully'); + return 'Conversation Closed'; + } catch (error) { + console.log('Error closing conversation:', error); + throw error; + } +}; + +const functionsRequiringInput = [ + 'OpenChat', + 'OpenGroupChat', + 'OpenConversation' +]; // List of functions requiring input +interface ChatAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const ChatAPIs: React.FC = (props) => { return ( -
-
API: Chat
-
+ ); }; diff --git a/apps/teamsjs-diagnostic-app/src/apis/ClipboardApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/ClipboardApi.tsx index 291c0320ad..5fb52b7f83 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/ClipboardApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/ClipboardApi.tsx @@ -1,8 +1,117 @@ import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { clipboard } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; -const ClipboardAPIs: React.FC = () => { +export const clipboard_CheckClipboardCapability = async (): Promise => { + const module = clipboard; + const moduleName = 'Clipboard'; + const supportedMessage = 'Clipboard module is supported. Clipboard is supported on new Teams (Version 23247.720.2421.8365 and above) Web, M365 Web, Outlook Web, new Teams (Version 23247.720.2421.8365 and above) Desktop, M365 Desktop, Outlook Desktop, M365 Mobile, and Outlook IOS.'; + const notSupportedMessage = 'Clipboard module is not supported.Clipboard is not supported on versions of Team below 23247.720.2421.8365 or Outlook Android.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const clipboard_CopyText = async ({ text }: { text: string }): Promise => { + console.log('Executing CopyText...'); + if (!text) { + return 'Error: Text input is missing'; + } + try { + const blob = new Blob([text], { type: 'text/plain' }); + await clipboard.write(blob); + console.log(`Successfully copied text '${blob}' to clipboard`); + return 'Text copied to clipboard'; + } catch (error) { + console.error('Error copying text to clipboard:', error); + throw error; + } +}; + +// Copy Image to Clipboard +export const clipboard_CopyImage = async ({ mimeType }: { mimeType: string }): Promise => { + console.log('Executing CopyImage...'); + if (!mimeType) { + return 'Error: mimeType input is missing'; + } + try { + // Example image data (base64 encoded PNG) + const byteCharacters = atob('iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='); + const byteArray = new Uint8Array(byteCharacters.length); + for (let i = 0; i < byteCharacters.length; i++) { + byteArray[i] = byteCharacters.charCodeAt(i); + } + const blob = new Blob([byteArray], { type: mimeType }); + await clipboard.write(blob); + console.log(`Successfully copied image '${JSON.stringify(blob, null, 2)}' to clipboard`); + return 'Image copied to clipboard'; + } catch (error) { + console.error('Error copying image to clipboard:', error); + throw error; + } +}; + +export const clipboard_Paste = async (): Promise => { + console.log('Executing Paste...'); + try { + const result = await clipboard.read(); + let pasteResult = ''; + + if (result.type.startsWith('text')) { + const reader = new FileReader(); + reader.readAsText(result); + pasteResult = await new Promise((resolve, reject) => { + reader.onloadend = () => { + if (reader.result) { + resolve(reader.result as string); + } else { + reject('Failed to read text from clipboard'); + } + }; + }); + console.log('Text pasted from clipboard:', pasteResult); + } else if (result.type.startsWith('image')) { + const image = document.createElement('img'); + image.src = URL.createObjectURL(result); + image.style.height = '150px'; + image.style.width = '150px'; + const root = document.getElementById('root'); + if (root) { + root.appendChild(image); + } + pasteResult = `Pasted image with id: ${image.id}`; + console.log(pasteResult); + } else { + pasteResult = 'No contents read from clipboard'; + console.log(pasteResult); + } + + return pasteResult; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.error('Error pasting from clipboard:', errorMessage); + throw error; + } +}; + +const functionsRequiringInput = [ + 'CopyText', + 'CopyImage' +]; // List of functions requiring input + +interface ClipboardAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const ClipboardAPIs: React.FC = (props) => { return ( -
API: Clipboard
+ ); }; diff --git a/apps/teamsjs-diagnostic-app/src/apis/CustomApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/CustomApi.tsx deleted file mode 100644 index c16c854cc5..0000000000 --- a/apps/teamsjs-diagnostic-app/src/apis/CustomApi.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; - -const CustomAPIs: React.FC = () => { - return ( -
API: Custom
- ); -}; - -export default CustomAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/DialogApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/DialogApi.tsx index 4fc43d707c..23a84db289 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/DialogApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/DialogApi.tsx @@ -1,8 +1,28 @@ import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { dialog } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; -const DialogAPIs: React.FC = () => { +export const dialog_CheckDialogCapability = async (): Promise => { + const module = dialog; + const moduleName = 'Dialog'; + const supportedMessage = 'Dialog module is supported. Dialog is supported on all platforms except M365 Mobile and Outlook Mobile.'; + const notSupportedMessage = 'Dialog module is not supported. Dialog is not supported on M365 Mobile or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; +interface DialogAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const DialogAPIs: React.FC = (props) => { return ( -
API: Dialog
+ ); }; diff --git a/apps/teamsjs-diagnostic-app/src/apis/DialogCardApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/DialogCardApi.tsx index 344b2e31a7..04b6fb5041 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/DialogCardApi.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/DialogCardApi.tsx @@ -1,8 +1,63 @@ import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { AdaptiveCardDialogInfo, dialog } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; -const DialogCardAPIs: React.FC = () => { +export const dialogCard_CheckDialogAdaptiveCardCapability = async (): Promise => { + const module = 'dialogCard'; + const moduleName = 'DialogCard'; + const supportedMessage = 'Dialog Adaptive Card module is supported. Dialog Adaptive Card is supported on all platforms except M365 Mobile and Outlook Mobile.'; + const notSupportedMessage = 'Dialog Adaptive Card module is not supported. Dialog Adaptive Card is not supported on M365 Mobile or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const dialogCard_OpenAdaptiveCardDialog = (input: AdaptiveCardDialogInfo): Promise => { + console.log('Executing openAdaptiveCardDialog with input:', JSON.stringify(input, null, 2)); + return new Promise((resolve, reject) => { + try { + console.log('Opening adaptive card dialog...'); + const onComplete = (resultObj: dialog.ISdkResponse): void => { + if (resultObj.err) { + if (resultObj.err === 'User cancelled/closed the task module.') { + console.log('User cancelled/closed the dialog'); + resolve(); + } else { + console.log('Error in adaptive card dialog result:', resultObj.err); + reject(resultObj.err); + } + } else { + console.log('Adaptive card dialog result:', resultObj.result); + resolve(); + } + }; + dialog.adaptiveCard.open(input, onComplete); + console.log('Adaptive card dialog opened successfully'); + } catch (error) { + console.log('Error opening adaptive card dialog:', error); + reject(error); + throw error; + } + }); +}; + +const functionsRequiringInput = [ + 'OpenAdaptiveCardDialog' +]; // List of functions requiring input + +interface DialogCardAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const DialogCardAPIs: React.FC = (props) => { return ( -
API: Dialog.Card
+ ); }; diff --git a/apps/teamsjs-diagnostic-app/src/apis/GeolocationApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/GeolocationApi.tsx new file mode 100644 index 0000000000..5f81b4442c --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/GeolocationApi.tsx @@ -0,0 +1,80 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { geoLocation } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport, checkPermission } from '../utils/CheckCapabilityUtils'; + +export const geolocation_CheckGeoLocationCapability = async (): Promise => { + const module = 'geolocation'; + const moduleName = 'Geolocation'; + const supportedMessage = 'Geolocation module is supported. Geolocation Map is supported on new Teams (Version 23247.720.2421.8365 and above) Web, M365 Web, new Teams (Version 23247.720.2421.8365 and above) Desktop, M365 Desktop, and Outlook Desktop.'; + const notSupportedMessage = 'Geolocation module is not supported. Geolocation is not supported on Teams versions less than 23247.720.2421.8365 on Web, Outlook Web, Teams versions less than 23247.720.2421.8365 on Desktop, or Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const geolocation_CheckGeoLocationMapCapability = async (): Promise => { + const module = 'geolocationMap'; + const moduleName = 'GeolocationMap'; + const supportedMessage = 'Geolocation Map module is supported. Geolocation Map is supported on new Teams (Version 23247.720.2421.8365 and above) Web and new Teams (Version 23247.720.2421.8365 and above) Desktop'; + const notSupportedMessage = 'Geolocation Map module is not supported. Geolocation Map is only supported on new Teams (Version 23247.720.2421.8365 and above) Web and new Teams (Version 23247.720.2421.8365 and above) Desktop.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const geolocation_HasGeoLocationPermission = async (): Promise => { + const module = 'geolocation'; + const moduleName = 'Geolocation'; + const permissionGrantedMessage = 'Geolocation permission has been granted.'; + const errorMessage = 'HasGeolocationPermission functionality is currently not supported on Teams versions less than 23247.720.2421.8365 on Web, Outlook Web, Teams versions less than 23247.720.2421.8365 on Desktop, or Mobile.'; + + await checkPermission(module, moduleName, permissionGrantedMessage, errorMessage); +}; + +export const geolocation_RequestGeoLocationPermission = async (): Promise => { + console.log('Executing RequestGeoLocationPermission...'); + try { + const result = await geoLocation.requestPermission(); + console.log('GeoLocation permission request result:', result); + } catch (error) { + console.log('Error requesting GeoLocation permission:', JSON.stringify(error, null, 2)); + throw error; + } +}; + +export const geolocation_GetCurrentLocation = async (): Promise => { + console.log('Executing GetCurrentLocation...'); + try { + const result = await geoLocation.getCurrentLocation(); + console.log('Current geoLocation:', result); + } catch (error) { + console.log('Error getting current geoLocation:', JSON.stringify(error, null, 2)); + throw error; + } +}; + +export const geolocation_ChooseLocation = async (): Promise => { + console.log('Executing ChooseLocation...'); + try { + const result = await geoLocation.map.chooseLocation(); + console.log('Chosen geoLocation:', result); + } catch (error) { + console.log('Error choosing geoLocation:', JSON.stringify(error, null, 2)); + throw error; + } +}; +interface GeolocationAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const GeolocationAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default GeolocationAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/MenusApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/MenusApi.tsx new file mode 100644 index 0000000000..d1710f0654 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/MenusApi.tsx @@ -0,0 +1,103 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { menus } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +export const menus_CheckMenusCapability = async (): Promise => { + const module = 'menus'; + const moduleName = 'Menus'; + const supportedMessage = 'Menus module is supported. Menus is supported on Teams Desktop and Teams Mobile, Versions below 23247.720.2421.8365.'; + const notSupportedMessage = 'Menus module is not supported. Menus is not supported on Teams Versions 23247.720.2421.8365 and above, M365 Web, M365 Desktop, Outlook Desktop, M365 Mobile, or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const menus_SetUpViews = async (input: string): Promise => { + console.log('Executing SetUpViews...'); + try { + const views: menus.ViewConfiguration[] = JSON.parse(input); + views.forEach(viewConfig => { + if (!viewConfig.id || !viewConfig.title) { + throw new Error('ID and Title are required for each viewConfiguration'); + } + }); + await menus.setUpViews(views, (id) => { + console.log('Handler called with id:', id); + return true; + }); + return 'SetUpViews completed successfully'; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.log('Error setting up views:', errorMessage); + throw error; + } +}; + +export const menus_SetNavBarMenu = async (input: string): Promise => { + console.log('Executing SetNavBarMenu...'); + try { + const menuItems: menus.MenuItem[] = JSON.parse(input); + menuItems.forEach(menuItem => { + if (!menuItem.id || !menuItem.title || !menuItem.icon) { + throw new Error('ID, Title, and Icon are required for each menuItem'); + } + }); + await menus.setNavBarMenu(menuItems, (id) => { + console.log('Handler called with id:', id); + return true; + }); + return 'SetNavBarMenu completed successfully'; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.log('Error setting up nav bar menu:', errorMessage); + throw error; + } +}; + +export const menus_ShowActionMenu = async (input: string): Promise => { + console.log('Executing ShowActionMenu...'); + try { + const actionMenuParams: menus.ActionMenuParameters = JSON.parse(input); + if (!actionMenuParams.title || !actionMenuParams.items) { + throw new Error('Title and Items are required for actionMenuParameters'); + } + actionMenuParams.items.forEach(menuItem => { + if (!menuItem.id || !menuItem.title || !menuItem.icon) { + throw new Error('ID, Title, and Icon are required for each menuItem'); + } + }); + await menus.showActionMenu(actionMenuParams, (id) => { + console.log('Handler called with id:', id); + return true; + }); + return 'ShowActionMenu completed successfully'; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.log('Error showing action menu:', errorMessage); + throw error; + } +}; + +const functionsRequiringInput = [ + 'SetUpViews', + 'SetNavBarMenu', + 'ShowActionMenu' +]; // List of functions requiring input + +interface MenuAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const MenuAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default MenuAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/PagesApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/PagesApi.tsx new file mode 100644 index 0000000000..c449c292e4 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/PagesApi.tsx @@ -0,0 +1,145 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { pages } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +export const pages_CheckCapability = async (): Promise => { + const module = 'pages'; + const moduleName = 'Pages'; + const supportedMessage = 'Pages module is supported. Pages is supported on all platforms.'; + const notSupportedMessage = 'Pages module is not supported.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const pages_NavigateCrossDomain = async (url: string): Promise => { + console.log('Executing NavigateCrossDomain...'); + + console.log('URL received:', url); + console.log('Type of URL:', typeof url); + + if (typeof url !== 'string') { + console.log('Url is invalid. Must be a URL string.'); + throw new Error('Url is invalid'); + } + + try { + await pages.navigateCrossDomain(url); + console.log(`Navigation to ${url} was successful.`); + } catch (error) { + console.error(`Error navigating to ${url}:`, error); + throw error; + } +}; + +export const pages_NavigateToApp = async (input: { + appId: string; + pageId: string; + webUrl: string; + subPageId?: string; + channelId?: string; +}): Promise => { + console.log('Executing NavigateToApp...'); + + try { + await pages.navigateToApp(input); + console.log(`Navigation to app with ID ${input.appId} was successful.`); + } catch (error) { + console.log(`Error navigating to app with ID ${input.appId}:`, error); + throw error; + } +}; + +export const pages_ShareDeepLink = async (input: { + subEntityId: string; + subEntityLabel: string; + subEntityWebUrl: string; + subPageId: string; + subPageLabel: string; + subPageWebUrl: string; +}): Promise => { + console.log('Executing ShareDeepLink...'); + try { + await pages.shareDeepLink(input); + console.log(`Deep link shared successfully.`); + } catch (error) { + console.error('Error sharing deep link:', error); + throw error; + } +}; + +export const pages_SetCurrentFrame = async (input: { + websiteUrl: string; + contentUrl: string; +}): Promise => { + console.log('Executing SetCurrentFrame...'); + try { + await pages.setCurrentFrame(input); + console.log('Current frame set successfully.'); + } catch (error) { + console.error('Error setting current frame:', error); + throw error; + } +}; + +export const pages_GetConfig = async (): Promise => { + console.log('Executing GetConfig...'); + try { + const config = await pages.getConfig(); + console.log('Page configuration retrieved:', JSON.stringify(config, null, 2)); + } catch (error) { + console.log('Error getting page configuration:', error); + throw error; + } +}; + +export const pages_RegisterFocusEnterHandler = async (): Promise => { + console.log('Executing RegisterChangeHandler...'); + try { + pages.registerFocusEnterHandler((event) => { + console.log('Page configuration changed:', event); + }); + console.log('Change handler registered successfully.'); + } catch (error) { + console.error('Error registering change handler:', error); + throw error; + } +}; + +export const pages_RegisterFullScreenChangeHandler = async (): Promise => { + console.log('Executing RegisterFullScreenChangeHandler...'); + try { + pages.registerFullScreenHandler((isFullScreen) => { + console.log(`Full screen mode changed: ${isFullScreen}`); + }); + + console.log('Full screen change handler registered successfully.'); + } catch (error) { + console.error('Error registering full screen change handler:', error); + throw error; + } +}; + +const functionsRequiringInput = [ + 'NavigateCrossDomain', + 'NavigateToApp', + 'ShareDeepLink', + 'SetCurrentFrame' +]; +interface PagesAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const PagesAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default PagesAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/PagesTabsApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/PagesTabsApi.tsx new file mode 100644 index 0000000000..c6906a75b4 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/PagesTabsApi.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { pages } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +export const pagesTabs_CheckPagesTabsCapability = async (): Promise => { + const module = 'pagesTabs'; + const moduleName = 'PagesTabs'; + const supportedMessage = 'Pages Tabs module is supported. Pages Tabs is supported on Teams Web and Teams Desktop.'; + const notSupportedMessage = 'PPages Tabs module is not supported. Pages Tabs is not supported on M365 Web, Outlook Web, M365 Desktop, Outlook Desktop, Teams Mobile, M365 Mobile, or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const pagesTabs_NavigateToTab = async (input: any): Promise => { + console.log('Executing NavigateToTab with input...'); + try { + await pages.tabs.navigateToTab(input); + console.log('Navigation to tab completed successfully.'); + } catch (error) { + console.log('Error navigating to tab:', JSON.stringify(error, null, 2)); + throw error; + } +}; + +export const pagesTabs_GetTabInstances = async (input: any): Promise => { + console.log('Executing GetTabInstances with input...'); + try { + const result = await pages.tabs.getTabInstances(input); + console.log('Tab instances retrieved:', JSON.stringify(result, null, 2)); + } catch (error) { + console.log('Error getting tab instances:', error); + throw error; + } +}; + +export const pagesTabs_GetMruTabInstances = async (input: any): Promise => { + console.log('Executing GetMruTabInstances with input...'); + try { + const result = await pages.tabs.getMruTabInstances(input); + console.log('MRU tab instances retrieved:', JSON.stringify(result, null, 2)); + } catch (error) { + console.log('Error getting MRU tab instances:', JSON.stringify(error, null, 2)); + throw error; + } +}; + +const functionsRequiringInput = [ + 'NavigateToTab', + 'GetTabInstances', + 'GetMruTabInstances', +]; +interface PagesTabsAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const PagesTabsAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default PagesTabsAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/PeopleApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/PeopleApi.tsx new file mode 100644 index 0000000000..91230e8542 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/PeopleApi.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { people, SdkError } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +interface SelectPeopleInput { + title?: string; + setSelected?: string[]; + openOrgWideSearchInChatOrChannel?: boolean; + singleSelect?: boolean; +} + +export const people_CheckPeopleCapability = async (): Promise => { + const module = 'people'; + const moduleName = 'People'; + const supportedMessage = 'People module is supported. People is supported on Teams Web, Teams Desktop, and Teams (versions under 23247.720.2421.8365) Mobile.'; + const notSupportedMessage = 'People module is not supported. People is not supported on M365 Web, Outlook Web, M365 Desktop, Outlook Desktop, M365 Mobile, or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const people_SelectPeople = async (input?: SelectPeopleInput): Promise => { + console.log('Executing SelectPeople with input:', JSON.stringify(input, null, 2)); + + try { + const result = await new Promise((resolve, reject) => { + people.selectPeople((error: SdkError, result: any) => { + if (error) { + reject(error); + } else { + resolve(result); + } + }, input); + }); + + console.log('SelectPeople result:', JSON.stringify(result, null, 2)); + return JSON.stringify(result); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.log('Error during SelectPeople operation:', errorMessage); + throw new Error(`Failure: SelectPeople for People API - ${errorMessage}`); + } +}; + +const functionsRequiringInput = [ + 'SelectPeople' +]; // List of functions requiring input + +interface PeopleAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const PeopleAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default PeopleAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/ProfileApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/ProfileApi.tsx new file mode 100644 index 0000000000..7a9c1e8b8e --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/ProfileApi.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { profile } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +export const profile_CheckProfileCapability = async (): Promise => { + const module = 'profile'; + const moduleName = 'Profile'; + const supportedMessage = 'Profile module is supported. Profile is supported on new Teams (Version 23247.720.2421.8365 and above) Web, Outlook Web, new Teams (Version 23247.720.2421.8365 and above) Desktop, and Outlook Desktop.'; + const notSupportedMessage = 'Profile module is not supported. Profile is not supported on Teams versions under 23247.720.2421.8365, M365, or any Mobile platforms.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export function profile_ShowProfile(input: profile.ShowProfileRequest) { + return new Promise((resolve, reject) => { + if (!input) { + console.log('ShowProfileRequest input is missing'); + return reject('ShowProfileRequest is required'); + } + + console.log('Starting ShowProfile with input:', JSON.stringify(input, null, 2)); + + try { + profile.showProfile(input); + console.log('Profile displayed successfully'); + resolve(); + } catch (error) { + console.error('Error displaying profile:', error); + reject(error); + } + }); +} + +const functionsRequiringInput = [ + 'ShowProfile' +]; // List of functions requiring input + +interface ProfileAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const ProfileAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default ProfileAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/SearchApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/SearchApi.tsx new file mode 100644 index 0000000000..be962e48e7 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/SearchApi.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { search } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; + +export function search_RegisterHandlers() { + return new Promise((resolve, reject) => { + console.log('Executing RegisterHandler...'); + try { + const onChange = (onChangeHandler: search.SearchQuery): void => { + console.log('Search query changed:', onChangeHandler.searchTerm); + }; + const onClosed = (onClosedHandler: search.SearchQuery): void => { + console.log('Search closed:', onClosedHandler.searchTerm); + }; + const onExecute = (onExecuteHandler: search.SearchQuery): void => { + console.log('Search executed:', onExecuteHandler.searchTerm); + }; + search.registerHandlers(onClosed, onExecute, onChange); + console.log('Search handlers registered successfully'); + resolve(); + } catch (error) { + console.log('Error registering search handlers:', JSON.stringify(error, null, 2)); + console.log('Search API is not supported in this current environment'); + reject(error); + throw error; + } + }); +} + +export const search_CloseSearch = async (): Promise => { + console.log('Executing CloseSearch...'); + + try { + const result = search.isSupported(); + if (result) { + console.log('Search module is supported'); + } else { + console.log('Search API is not supported in this current environment'); + throw new Error('Search API not supported'); + } + } catch (error) { + console.log('Error closing search:', JSON.stringify(error, null, 2)); + throw error; + } + + try { + await search.closeSearch(); + console.log('Search successfully closed'); + } catch (error) { + console.log('Error closing search:', JSON.stringify(error, null, 2)); + throw error; + } +}; +interface SearchAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const SearchAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default SearchAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/SecondaryBrowserApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/SecondaryBrowserApi.tsx new file mode 100644 index 0000000000..819d502608 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/SecondaryBrowserApi.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { secondaryBrowser } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +export const secondaryBrowser_CheckSecondaryBrowserCapability = async (): Promise => { + const module = 'secondaryBrowser'; + const moduleName = 'SecondaryBrowser'; + const supportedMessage = 'Secondary Browser module is supported. Secondary Browser is supported on M365 Mobile and Outlook Mobile.'; + const notSupportedMessage = 'Secondary Browser module is not supported. Secondary Browser is only supported on M365 Mobile and Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const secondaryBrowser_Open = async (input: string): Promise => { + console.log('Executing Open...'); + try{ + if (typeof input !== 'string') { + throw new Error('Input should be a string'); + } + // validate that input should also be a valid URL + new URL(input); + await secondaryBrowser.open(new URL(input)); + }catch (error){ + console.log('Error opening secondary browser:', JSON.stringify(error, null, 2)); + console.log('Secondary Browser module is not supported. Secondary Browser is only supported on M365 Mobile and Outlook Mobile.'); + throw error; + } +}; +const functionsRequiringInput = [ + 'Open' +]; // List of functions requiring input + +interface SecondaryBrowserAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const SecondaryBrowserAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default SecondaryBrowserAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/SharingApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/SharingApi.tsx new file mode 100644 index 0000000000..9d120cdff0 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/SharingApi.tsx @@ -0,0 +1,70 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { sharing } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +interface ShareWebContentInput { + content: { + type: 'URL'; + url: string; + message?: string; + preview?: boolean; + }[]; +} + +export const sharing_CheckSharingCapability = async (): Promise => { + const module = 'sharing'; + const moduleName = 'Sharing'; + const supportedMessage = 'Sharing module is supported. Sharing is supported on Teams Web, Teams Desktop, and Teams (versions under 23247.720.2421.8365) Mobile.'; + const notSupportedMessage = 'Sharing module is not supported. Sharing is not supported on M365 Web, Outlook Web, M365 Desktop, Outlook Desktop, M365 Mobile, or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const sharing_ShareWebContent = async (input: ShareWebContentInput): Promise => { + console.log('Executing ShareWebContent...'); + try { + if (!input.content || input.content.length === 0) { + throw new Error('content is required'); + } + for (const contentItem of input.content) { + if (contentItem.type !== 'URL') { + console.log("Each of the content items has to have type property with value 'URL'."); + throw new Error("Must have type property with value 'URL'."); + } + if (!contentItem.url) { + console.log('Each of the content items has to have url property set.'); + throw new Error('Must have url property set.'); + } + } + + await sharing.shareWebContent(input); + return 'Success'; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.log('Error sharing web content:', errorMessage); + throw error; + } +}; + +const functionsRequiringInput = [ + 'ShareWebContent' +]; // List of functions requiring input + +interface SharingAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const SharingAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default SharingAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/StageViewApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/StageViewApi.tsx new file mode 100644 index 0000000000..c5118f94ec --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/StageViewApi.tsx @@ -0,0 +1,70 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { stageView } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +interface StageViewInput { + appId: string; + contentUrl: string; + threadId: string; + title: string; + websiteUrl?: string; + entityId?: string; + openMode?: stageView.StageViewOpenMode; +} + +export const stageView_CheckStageViewCapability = async (): Promise => { + const module = 'stageView'; + const moduleName = 'StageView'; + const supportedMessage = 'Stage View module is supported. Stage View is supported on Teams Web and Teams Desktop.'; + const notSupportedMessage = 'Stage View module is not supported. Stage View is not supported on M365 Web, Outlook Web, M365 Desktop, Outlook Desktop, Teams Mobile, M365 Mobile, or Outlook Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const stageView_OpenStageView = async (input: StageViewInput): Promise => { + console.log('Executing OpenStageView...'); + try { + if (!input.appId) { + throw new Error('appId is required.'); + } + if (!input.contentUrl) { + throw new Error('contentUrl is required.'); + } + if (!input.threadId) { + throw new Error('threadId is required.'); + } + if (!input.title) { + throw new Error('title is required.'); + } + + await stageView.open(input); + return 'Success'; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.log('Error opening stage view:', errorMessage); + throw error; + } +}; + +const functionsRequiringInput = [ + 'OpenStageView' +]; // List of functions requiring input + +interface StageViewAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const StageViewAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default StageViewAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/TeamsCoreApi.tsx b/apps/teamsjs-diagnostic-app/src/apis/TeamsCoreApi.tsx new file mode 100644 index 0000000000..18b3810fb2 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/apis/TeamsCoreApi.tsx @@ -0,0 +1,114 @@ +import React from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { teamsCore } from '@microsoft/teams-js'; +import ApiComponentWrapper from '../utils/ApiComponentWrapper'; +import { checkCapabilitySupport } from '../utils/CheckCapabilityUtils'; + +export const teamsCore_CheckTeamsCoreCapability = async (): Promise => { + const module = 'teamsCore'; + const moduleName = 'TeamsCore'; + const supportedMessage = 'Teams Core module is supported. Teams Core is supported on Teams Web, Outlook Web, Teams Desktop, and Teams Mobile.'; + const notSupportedMessage = 'STeams Core module is not supported. Teams Core is only supported on Teams Web, Outlook Web, Teams Desktop, and Teams Mobile.'; + + await checkCapabilitySupport(module, moduleName, supportedMessage, notSupportedMessage); +}; + +export const teamsCore_EnablePrintCapability = async (): Promise => { + console.log('Executing EnablePrintCapability...'); + try { + await teamsCore.enablePrintCapability(); + console.log('Print capability enabled.'); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.error('Error enabling print capability:', errorMessage); + if (error instanceof Error) { + console.error('Stack trace:', error.stack); + } + throw error; + } +}; + +export const teamsCore_Print = async (): Promise => { + console.log('Executing Print with input...'); + try { + await teamsCore.print(); + console.log('Successfully printed'); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.error('Error executing print:', errorMessage); + if (error instanceof Error) { + console.error('Stack trace:', error.stack); + } + throw error; + } +}; + +export const teamsCore_RegisterOnLoadHandler = async (): Promise => { + console.log('Executing RegisterOnLoadHandler...'); + try { + teamsCore.registerOnLoadHandler((context) => { + console.log('On load handler called with context:', context); + }); + console.log('On load handler registered.'); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.error('Error registering on load handler:', errorMessage); + if (error instanceof Error) { + console.error('Stack trace:', error.stack); + } + throw error; + } +}; + +export const teamsCore_RegisterBeforeUnloadHandler = async (input: string): Promise => { + console.log('Executing RegisterBeforeUnloadHandler with input...'); + try { + const delay = parseInt(input, 10); + if (isNaN(delay)) { + throw new Error('Input should be a number'); + } + + teamsCore.registerBeforeUnloadHandler((readyToUnload) => { + const canUnload = true; + if (canUnload) { + setTimeout(() => { + readyToUnload(); + }, delay); + console.log(`Before unload handler registered; calling readyToUnload in ${delay / 1000} seconds`); + } else { + console.log('Unload operation blocked.'); + } + return canUnload; + }); + + console.log('Before unload handler registered with delay:', delay); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.error('Error registering before unload handler:', errorMessage); + if (error instanceof Error) { + console.error('Stack trace:', error.stack); + } + throw error; + } +}; + +const functionsRequiringInput = [ + 'RegisterBeforeUnloadHandler' +]; // List of functions requiring input + +interface TeamsCoreAPIsProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; +} + +const TeamsCoreAPIs: React.FC = (props) => { + return ( + + ); +}; + +export default TeamsCoreAPIs; diff --git a/apps/teamsjs-diagnostic-app/src/apis/index.tsx b/apps/teamsjs-diagnostic-app/src/apis/index.tsx index 2c1ac67048..d4357ca777 100644 --- a/apps/teamsjs-diagnostic-app/src/apis/index.tsx +++ b/apps/teamsjs-diagnostic-app/src/apis/index.tsx @@ -7,6 +7,16 @@ export * from './CalendarApi'; export * from './CallApi'; export * from './ChatApi'; export * from './ClipboardApi'; -export * from './CustomApi'; export * from './DialogApi'; export * from './DialogCardApi'; +export * from './GeolocationApi'; +export * from './PagesApi'; +export * from './ProfileApi'; +export * from './SearchApi'; +export * from './SharingApi'; +export * from './StageViewApi'; +export * from './PeopleApi'; +export * from './MenusApi'; +export * from './PagesTabsApi'; +export * from './TeamsCoreApi'; +export * from './SecondaryBrowserApi'; diff --git a/apps/teamsjs-diagnostic-app/src/components/App.tsx b/apps/teamsjs-diagnostic-app/src/components/App.tsx index f36e27388c..7c5b9526ee 100644 --- a/apps/teamsjs-diagnostic-app/src/components/App.tsx +++ b/apps/teamsjs-diagnostic-app/src/components/App.tsx @@ -30,7 +30,7 @@ export default function App() { ? teamsHighContrastTheme : { ...teamsLightTheme, - colorNeutralBackground3: "#eeeeee", + colorNeutralBackground3: "#ededffff", } } style={{ background: tokens.colorNeutralBackground3 }} diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/ApiComponents.tsx b/apps/teamsjs-diagnostic-app/src/components/sample/ApiComponents.tsx index f8fa19ea0a..dcd9f0fb46 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/ApiComponents.tsx +++ b/apps/teamsjs-diagnostic-app/src/components/sample/ApiComponents.tsx @@ -1,39 +1,401 @@ +import AppInstallDialogAPIs from './../../apis/AppInstallDialogApi'; +import BarCodeAPIs from './../../apis/BarCodeApi'; +import DialogAPIs from '../../apis/DialogApi'; +import ChatAPIs from '../../apis/ChatApi'; +import CallAPIs from '../../apis/CallApi'; +import CalendarAPIs from '../../apis/CalendarApi'; +import DialogCardAPIs from '../../apis/DialogCardApi'; +import PagesAPIs from '../../apis/PagesApi'; +import ProfileAPIs from '../../apis/ProfileApi'; +import SearchAPIs from '../../apis/SearchApi'; +import ClipboardAPIs from '../../apis/ClipboardApi'; +import GeolocationAPIs from '../../apis/GeolocationApi'; +import SharingAPIs from '../../apis/SharingApi'; +import StageViewAPIs from '../../apis/StageViewApi'; +import { stageView } from '@microsoft/teams-js'; +import PeopleAPIs from '../../apis/PeopleApi'; +import MenusAPIs from '../../apis/MenusApi'; +import PagesTabsAPIs from '../../apis/PagesTabsApi'; +import TeamsCoreAPIs from '../../apis/TeamsCoreApi'; +import SecondaryBrowserAPIs from '../../apis/SecondaryBrowserApi'; + export interface ApiComponent { title: string; name: string; - inputType: 'text' | 'checkbox' | 'none'; - onClick: any; + functions: { + name: string; + requiresInput: boolean; + }[]; defaultInput?: string; - defaultCheckboxState?: boolean; - label?: string; - options: string[]; + onClick: any; + renderComponent?: (props: { apiComponent: ApiComponent; onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void }) => JSX.Element; } const apiComponents: ApiComponent[] = [ { title: 'App Install Dialog API', name: 'appInstallDialog', - options: ['OpenAppInstallDialog', 'CheckAppInstallCapability'], - defaultInput: 'default input for OpenAppInstallDialog', - inputType: 'text', + functions: [ + { name: 'OpenAppInstallDialog', requiresInput: true }, + { name: 'CheckAppInstallCapability', requiresInput: false }, + ], + defaultInput: JSON.stringify({ + OpenAppInstallDialog: {appId: '957f8a7e-fbcd-411d-b69f-acb7eb58b515'} }), onClick: () => console.log('App Install Dialog API called'), + renderComponent: (props) => }, { title: 'Bar Code API', name: 'barCode', - options: ['checkBarCodeCapability', 'scanBarCode', 'hasBarCodePermission', 'requestBarCodePermission'], - defaultInput: '{}', - inputType: 'text', + functions: [ + { name: 'CheckBarCodeCapability', requiresInput: false }, + { name: 'ScanBarCode', requiresInput: true }, + { name: 'HasBarCodePermission', requiresInput: false }, + ], + defaultInput: JSON.stringify({ + ScanBarCode: '{}' }), onClick: () => console.log('Barcode API called'), - }, + renderComponent: (props) => + }, { - title: 'Calendar APIs', + title: 'Calendar API', name: 'calendar', - inputType: 'none', - onClick: () => console.log('Calendar API clicked'), - options: ['Option X', 'Option Y', 'Option Z'] + functions: [ + { name: 'CheckCalendarCapability', requiresInput: false }, + { name: 'ComposeMeeting', requiresInput: true }, + { name: 'OpenCalendarItem', requiresInput: true }, + ], + defaultInput: JSON.stringify({ + ComposeMeeting: { + attendees: ['attendees'], + startTime: 'startTime', + endTime: 'endTime', + subject: 'subject', + content: 'content', + }, + OpenCalendarItem: { + itemId: '123', + }, + }), + onClick: () => console.log('Calendar API called'), + renderComponent: (props) => + }, + { + title: 'Call API', + name: 'call', + functions: [ + { name: 'CheckCallCapability', requiresInput: false }, + { name: 'StartCall', requiresInput: true }, + ], + defaultInput: JSON.stringify({ + StartCall: { + targets: ['user1', 'user2'], + requestedModalities: ['video'], + source: 'source', + } + }), + onClick: () => console.log('Call API called'), + renderComponent: (props) => + }, + { + title: 'Chat API', + name: 'chat', + functions: [ + { name: 'CheckChatCapability', requiresInput: false }, + { name: 'OpenChat', requiresInput: true }, + { name: 'OpenGroupChat', requiresInput: true }, + { name: 'OpenConversation', requiresInput: true }, + { name: 'CloseConversation', requiresInput: false }, + ], + defaultInput: JSON.stringify({ + OpenChat: { + user: 'testUpn', + message: 'testMessage', + }, + OpenGroupChat: { + users: ['testUpn1', 'testUpn2'], + message: 'testMessage', + }, + OpenConversation: { + entityId: 'entityId1', + title: 'title1', + subEntityId: 'subEntityId1', + }, + }), + onClick: () => console.log('Chat API called'), + renderComponent: (props) => + }, + { + title: 'Dialog API', + name: 'dialog', + functions: [ + { name: 'CheckDialogCapability', requiresInput: false }, + ], + onClick: () => console.log('Dialog API called'), + renderComponent: (props) => + }, + { + title: 'DialogCard API', + name: 'dialogCard', + functions: [ + { name: 'CheckDialogAdaptiveCardCapability', requiresInput: false }, + { name: 'OpenAdaptiveCardDialog', requiresInput: true }, + ], + defaultInput: JSON.stringify({ + OpenAdaptiveCardDialog:{ + card: { + type: "AdaptiveCard", + version: "1.0", + body: [ + { + type: "TextBlock", + text: "Hello, Adaptive Card!" + } + ] + } + } }), + onClick: () => console.log('DialogCard API called'), + renderComponent: (props) => + }, + { + title: 'Pages API', + name: 'pages', + functions: [ + { name: 'CheckCapability', requiresInput: false }, + { name: 'GetConfig', requiresInput: false }, + { name: 'NavigateCrossDomain', requiresInput: true }, + { name: 'NavigateToApp', requiresInput: true }, + { name: 'ShareDeepLink', requiresInput: true }, + { name: 'RegisterFocusEnterHandler', requiresInput: false }, + { name: 'SetCurrentFrame', requiresInput: true }, + { name: 'RegisterFullScreenChangeHandler', requiresInput: false } + ], + defaultInput: JSON.stringify({ + NavigateCrossDomain: 'https://localhost:4000', + NavigateToApp: { + appId: 'appIdA', + pageId: 'pageIdB', + webUrl: 'webUrlC', + subPageId: 'subPageIdD', + channelId: 'channelIdE', + }, + ShareDeepLink: { + subEntityId: 'subEntityIdA', + subEntityLabel: 'subEntityLabelB', + subEntityWebUrl: 'subEntityWebUrlC', + subPageId: 'subPageIdD', + subPageLabel: 'subPageLabelE', + subPageWebUrl: 'subPageWebUrlF', + }, + SetCurrentFrame: { + websiteUrl: 'https://www.bing.com', + contentUrl: 'https://www.bing.com', + }, + }), + onClick: () => console.log('Pages API called'), + renderComponent: (props) => + }, + { + title: 'Profile API', + name: 'profile', + functions: [ + { name: 'CheckProfileCapability', requiresInput: false }, + { name: 'ShowProfile', requiresInput: true }, + ], + defaultInput: JSON.stringify({ + ShowProfile: { + modality: 'Card', + persona: { + identifiers: { + Smtp: 'test@microsoft.com', + }, + }, + targetElementBoundingRect: { + x: 0, + y: 0, + width: 0, + height: 0, + }, + triggerType: 'MouseClick', + } }), + onClick: () => console.log('Profile API called'), + renderComponent: (props) => + }, + { + title: 'Search API', + name: 'search', + functions: [ + { name: 'RegisterHandlers', requiresInput: false }, + { name: 'CloseSearch', requiresInput: false } + ], + onClick: () => console.log('Search API called'), + renderComponent: (props) => + }, + { + title: 'Clipboard API', + name: 'clipboard', + functions: [ + { name: 'CheckClipboardCapability', requiresInput: false }, + { name: 'CopyText', requiresInput: true }, + { name: 'CopyImage', requiresInput: true }, + { name: 'Paste', requiresInput: false } + ], + defaultInput: JSON.stringify({ + CopyText: { text: 'copy this test' }, + CopyImage: { mimeType: 'image/jpeg' } + }), + onClick: () => console.log('Clipboard API called'), + renderComponent: (props) => + }, + { + title: 'GeolocationAPI', + name: 'geolocation', + functions: [ + { name: 'CheckGeoLocationCapability', requiresInput: false }, + { name: 'CheckGeoLocationMapCapability', requiresInput: false }, + { name: 'HasGeoLocationPermission', requiresInput: false }, + { name: 'RequestGeoLocationPermission', requiresInput: false }, + { name: 'GetCurrentLocation', requiresInput: false }, + { name: 'ChooseLocation', requiresInput: false }, + ], + onClick: () => console.log('Geolocation API called'), + renderComponent: (props) => + }, + { + title: 'Sharing API', + name: 'sharing', + functions: [ + { name: 'CheckSharingCapability', requiresInput: false }, + { name: 'ShareWebContent', requiresInput: true } + ], + defaultInput: JSON.stringify({ + ShareWebContent: { + content: [ + { + type: 'URL', + url: 'https://www.bing.com', + message: 'Bing message', + preview: false, + }, + ], + } }), + onClick: () => console.log('Sharing API called'), + renderComponent: (props) => + }, + { + title: 'StageView API', + name: 'stageView', + functions: [ + { name: 'CheckStageViewCapability', requiresInput: false }, + { name: 'OpenStageView', requiresInput: true } + ], + defaultInput: JSON.stringify({ + OpenStageView: { + appId: 'appId1', + contentUrl: 'contentUrl1', + threadId: 'threadId1', + title: 'title1', + websiteUrl: 'websiteUrl1', + entityId: 'entityId1', + openMode: stageView.StageViewOpenMode.modal, + } }), + onClick: () => console.log('StageView API called'), + renderComponent: (props) => + }, + { + title: 'People API', + name: 'people', + functions: [ + { name: 'CheckPeopleCapability', requiresInput: false }, + { name: 'SelectPeople', requiresInput: true } + ], + defaultInput: JSON.stringify({ + SelectPeople: { + title: 'Select people', + setSelected: ['id1', 'id2', 'id3'], + openOrgWideSearchInChatOrChannel: true, + singleSelect: true, + } }), + onClick: () => console.log('People API called'), + renderComponent: (props) => + }, + { + title: 'Menus API', + name: 'menus', + functions: [ + { name: 'CheckMenusCapability', requiresInput: false }, + { name: 'SetUpViews', requiresInput: true }, + { name: 'SetNavBarMenu', requiresInput: true }, + { name: 'ShowActionMenu', requiresInput: true }, + ], + defaultInput: JSON.stringify({ + SetUpViews: { id: 'AAA', title: 'BBB', contentDescription: 'CCC' }, + SetNavBarMenu: { id: 'AAA', title: 'BBB', icon: 'CCC', enabled: true, selected: false }, + ShowActionMenu: { + title: 'Title', + items: [{ id: 'AAA', title: 'BBB', icon: 'CCC', enabled: true, selected: false }] + } + }), + onClick: () => console.log('Menus API called'), + renderComponent: (props) => + }, + { + title: 'PagesTabs API', + name: 'pagesTabs', + functions: [ + { name: 'CheckPagesTabsCapability', requiresInput: false }, + { name: 'NavigateToTab', requiresInput: true }, + { name: 'GetTabInstances', requiresInput: true }, + { name: 'GetMruTabInstances', requiresInput: true }, + ], + defaultInput: JSON.stringify({ + NavigateToTab: { + tabName: 'tab1', + internalTabInstanceId: 'internalTab1', + lastViewUnixEpochTime: '0', + entityId: 'entity1', + channelid: 'channel1', + channelName: 'channelName1', + channelIsFavorite: false, + teamId: 'team1', + teamName: 'teamName1', + teamIsFavorite: false, + groupId: 'group1', + url: 'https://localhost:4000', + websiteUrl: 'https://localhost:4000', + }, + GetTabInstances: { favoriteChannelOnly: false, favoriteTeamsOnly: false }, + GetMruTabInstances: { favoriteChannelOnly: false, favoriteTeamsOnly: false } + }), + onClick: () => console.log('PagesTabs API called'), + renderComponent: (props) => + }, + { + title: 'TeamsCore API', + name: 'teamsCore', + functions: [ + { name: 'CheckTeamsCoreCapability', requiresInput: false }, + { name: 'EnablePrintCapability', requiresInput: false }, + { name: 'Print', requiresInput: false }, + { name: 'RegisterOnLoadHandler', requiresInput: false }, + { name: 'RegisterBeforeUnloadHandler', requiresInput: true } + ], + defaultInput: JSON.stringify ({ + RegisterBeforeUnloadHandler: '4' }), + onClick: () => console.log('TeamsCore API called'), + renderComponent: (props) => + }, + { + title: 'SecondaryBrowser API', + name: 'secondaryBrowser', + functions: [ + { name: 'CheckSecondaryBrowserCapability', requiresInput: false }, + { name: 'Open', requiresInput: true }, + ], + defaultInput: JSON.stringify({ Open: "https://www.bing.com" }), + onClick: () => console.log('SecondaryBrowser API called'), + renderComponent: (props) => }, - // Add more API components ]; export default apiComponents; diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/AppInitializationScenario.css b/apps/teamsjs-diagnostic-app/src/components/sample/AppInitializationScenario.css index 8200b25beb..8813d40f44 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/AppInitializationScenario.css +++ b/apps/teamsjs-diagnostic-app/src/components/sample/AppInitializationScenario.css @@ -1,61 +1,72 @@ - .scenario-container { - display: flex; - gap: 20px; - margin-bottom: 20px; - } - - .scenario1-box { - width: 400px; - height: 400px; - background-color: lightgray; - display: flex; - flex-direction: column; - align-items: center; - padding: 20px; - overflow: hidden; - } - - .scenario1-button { - padding: 10px 20px; - font-size: 16px; - cursor: pointer; - background-color: #464eb8; - color: white; - } - - .api-section { - display: flex; - flex-direction: column; - align-items: center; - margin-top: 20px; - flex: 1; - } - - .api-header { - text-align: center; - margin-bottom: 10px; - font-weight: bold; - } - - .vertical-box-container { - display: flex; - flex-direction: column; - gap: 10px; - overflow-y: auto; - max-height: calc(100% - 40px); - } - - .vertical-box { - width: 100%; - background-color: white; - display: flex; - align-items: center; - border: 1px solid #ccc; - padding: 10px; - border-radius: 4px; - } - - .box-title { - flex-grow: 1; - } - \ No newline at end of file +.scenario-container { + display: flex; + gap: 20px; + margin-bottom: 20px; +} + +.scenario1-box { + width: 29vw; + height: 400px; + background-color: white; + border: 3px solid #4f52b0ff; + display: flex; + flex-direction: column; + align-items: center; + padding: 20px; + border-radius: 8px; + box-shadow: 4px 4px 8px #4f52b0ff; + overflow: hidden; +} + +.scenario1-button { + padding: 10px 20px; + font-size: 16px; + cursor: pointer; + background-color: #f5f5f5; + color: white; + border-radius: 4px; + border: none; + transition: background-color 0.3s; +} + +.scenario1-button:hover { + background-color: #3b3f92; +} + +.api-section { + display: flex; + flex-direction: column; + align-items: center; + margin-top: 20px; + flex: 1; +} + +.api-header { + text-align: center; + margin-bottom: 10px; + font-weight: bold; + font-size: 14px; +} + +.vertical-box-container { + display: flex; + flex-direction: column; + gap: 10px; + overflow-y: auto; + max-height: calc(100% - 40px); +} + +.vertical-box1 { + width: 100%; + background-color: rgb(239, 239, 239); + display: flex; + align-items: center; + border: 1px solid #ddd; + padding: 10px; + border-radius: 4px; +} + +.box-title { + flex-grow: 1; + font-size: 16px; +} diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/AppInitializationScenario.tsx b/apps/teamsjs-diagnostic-app/src/components/sample/AppInitializationScenario.tsx index 1eccab15d9..6a0d9edcc2 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/AppInitializationScenario.tsx +++ b/apps/teamsjs-diagnostic-app/src/components/sample/AppInitializationScenario.tsx @@ -1,10 +1,14 @@ import React, { useEffect, useState } from 'react'; -import './AppInitializationScenario.css' +import './AppInitializationScenario.css'; import { app } from '@microsoft/teams-js'; -import { registerOnResume } from '../../apis/AppApi'; +import { getContextV2, registerBeforeSuspendOrTerminateHandler, registerOnResume, registerOnThemeChangeHandlerV2 } from '../../apis/AppApi'; import { authenticateUser } from '../../apis/AuthenticationStart'; -const AppInitializationScenario: React.FC = () => { +interface AppInitializationScenarioProps { + showSuccessMessage?: boolean; +} + +const AppInitializationScenario: React.FC = ({ showSuccessMessage = false }) => { const [successMessage, setSuccessMessage] = useState(''); useEffect(() => { @@ -14,11 +18,16 @@ const AppInitializationScenario: React.FC = () => { const runAppInitializationScenario = async () => { try { console.log('Running App Initialization Scenario...'); - console.log('Attempting to register on resume handler...'); await registerOnResume(); + await getContextV2(); + await registerOnThemeChangeHandlerV2(); + await registerBeforeSuspendOrTerminateHandler(3000); + + // Authenticate user console.log('Attempting to authenticate user...'); const authSuccess = await authenticateUser(); if (authSuccess) { + console.log("User authenticated"); console.log('App Initialization Scenario successfully completed'); setSuccessMessage('App Initialization Scenario successfully completed'); } else { @@ -26,7 +35,7 @@ const AppInitializationScenario: React.FC = () => { showSignInPopup(); } } catch (error: any) { - console.log(`App initialization scenario failed. ${error.message}`); + console.error(`App initialization scenario failed. ${error.message}`); } }; @@ -40,7 +49,7 @@ const AppInitializationScenario: React.FC = () => {

Click the button to run the app initialization scenario.

-
+ {showSuccessMessage && successMessage &&
{successMessage}
}
); }; diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/CustomScenario.css b/apps/teamsjs-diagnostic-app/src/components/sample/CustomScenario.css index e648cc458d..c1445c96ad 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/CustomScenario.css +++ b/apps/teamsjs-diagnostic-app/src/components/sample/CustomScenario.css @@ -9,37 +9,69 @@ width: 1px; } +.scenario-container { + display: flex; + gap: 20px; + margin-bottom: 20px; +} + .custom-scenario-box { - width: 400px; + width: 29vw; height: 400px; - background-color: lightgray; + background-color: white; + border: 3px solid #4f52b0ff; display: flex; flex-direction: column; align-items: center; padding: 20px; position: relative; + overflow-y: auto; + overflow-x: auto; + border-radius: 8px; + box-shadow: 4px 4px 8px #4f52b0ff; } -.all-api-container { +.custom-scenario-box::-webkit-scrollbar { + width: 8px; +} + +.custom-scenario-box::-webkit-scrollbar-track { + background: #f1f1f1; +} + +.custom-scenario-box::-webkit-scrollbar-thumb { + background-color: #888; + border-radius: 4px; +} + +.custom-scenario-box::-webkit-scrollbar-thumb:hover { + background: #555; +} + +.scenario-container .all-api-container { display: flex; flex-direction: column; position: relative; - align-items: flex-start; + align-items: center; overflow-y: auto; + overflow-x: hidden; max-height: 600px; - background-color: lightgray; + background-color: white; + border: 3px solid #4f52b0ff; padding: 20px; height: 400px; + width: 29vw; margin-top: 88px; + border-radius: 8px; + box-shadow: 4px 4px 8px #4f52b0ff; } .all-api-box { - width: 400px; + width: 26vw; height: 400px; overflow: auto; } - .set-scenario-button { font-size: 16px; cursor: pointer; @@ -49,7 +81,7 @@ } .api-header { - text-align: center; + text-align: left; margin-bottom: 10px; font-weight: bold; } @@ -58,8 +90,9 @@ padding: 10px 20px; font-size: 16px; cursor: pointer; - background-color: #464eb8; - color: white; + background-color: #4f52b0ff; + color: #f5f5f5; + text-decoration-thickness: 2px; margin-bottom: 10px; } @@ -77,22 +110,43 @@ flex-direction: column; gap: 10px; overflow-y: auto; - max-height: calc(100% - 40px); + max-height: calc(100% - 80px); margin-bottom: 20px; } .vertical-box { width: 100%; - background-color: white; + background-color: rgb(239, 239, 239); display: flex; align-items: center; border: 1px solid #ccc; padding: 10px; border-radius: 4px; + margin-bottom: 5px; + box-shadow: 1px 1px 2px #4f52b0ff; + overflow: auto; + +} + +.vertical-box:hover{ + background-color: rgb(209, 209, 209); +} + +.vertical-box-container .dropped-api { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px; + border-radius: 4px; + margin-bottom: 4px; + background-color: rgb(239, 239, 239); + border: 1px solid #ddd; + overflow-x: auto; + overflow-y: hidden; } .box-dropdown { - margin-left: auto; + align-items: left; } .box-title { @@ -103,49 +157,419 @@ margin-left: 10px; } +.input-container{ + margin-left: 10px; + margin-top: 5px; +} .scenario2-header { gap: 20px; } +.dropped-api span { + flex-grow: 1; + margin-right: 10px; + word-break: break-word; +} -.search-bar { +.remove-api-button { + background-color: #f44336; + color: white; + border: none; + padding: 3px 6px; + cursor: pointer; + border-radius: 50%; + margin-left: auto; + font-size: 12px; +} + +.remove-api-button:hover { + background-color: #ff6666; +} + +.scenario1-button:hover { + background-color: #45a049; +} + +.transformer { width: 100%; - padding: 10px; - margin-bottom: 10px; + display: flex; + align-items: center; + justify-content: center; + margin: 10px 0; +} + +.transformer-label { + cursor: pointer; + padding: 5px 10px; + background-color: #ddd; border: 1px solid #ccc; border-radius: 4px; + margin-right: 5px; +} + +.transformer-trigger { + cursor: pointer; + color: blue; + text-decoration: underline; } -.dropped-api { +.transformer-dialog { + display: none; + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: white; + border: 1px solid #ccc; + padding: 20px; + z-index: 1000; +} + +.transformer-dialog.active { + display: block; + width: 400px; + max-width: 80%; + max-height: 80%; + overflow-y: auto; +} + +.tab { + padding: 5px 10px; + cursor: pointer; + background-color: #ddd; + border: 1px solid #ccc; + border-radius: 4px 4px 0 0; + margin-right: 5px; +} + +.tab:hover { + background-color: #ccc; +} + +.tab.active { + background-color: #bbb; +} + +.tab-content { + padding: 10px; + border: 1px solid #ccc; + border-top: none; + border-radius: 0 0 4px 4px; + background-color: #f9f9f9; + min-height: 50px; +} + +.add-scenario-button { + font-size: 24px; + cursor: pointer; + position: absolute; + top: 10px; + right: 10px; + background-color: transparent; + border: none; + color: #464eb8; + padding: 0; + margin: 0; +} + +.pop-up-window { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: white; + border: 1px solid #ccc; + padding: 20px; + z-index: 1000; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +.pop-up-content { + display: flex; + flex-direction: column; +} + +.api-selection { + margin-top: 10px; +} + +.pop-up-content label { + display: block; + margin-bottom: 10px; +} + +.pop-up-content input[type="text"] { + margin-left: 10px; +} + +.pop-up-content button { + margin-top: 10px; + padding: 5px 10px; +} + +.plus-sign-button { + position: absolute; + top: 10px; + right: 10px; + width: 30px; + height: 30px; + background-color: #464eb8; + color: white; + border: none; + border-radius: 50%; + font-size: 24px; + cursor: pointer; display: flex; align-items: center; - justify-content: space-between; + justify-content: center; +} + +.plus-sign-button:hover { + background-color: #7B83EB; +} + +.add-dialog { + display: none; + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); background-color: white; border: 1px solid #ccc; + padding: 20px; + z-index: 1000; +} + +.add-dialog.active { + display: block; + width: 400px; + max-width: 80%; + max-height: 80%; + overflow-y: auto; +} + +.addScenario-content { + display: flex; + flex-direction: column; + gap: 10px; + position: relative; +} + +.addScenario-content input[type="text"] { + width: 100%; + padding: 8px; + border: 1px solid #ccc; + border-radius: 4px; +} + +.addScenario-content .api-selection { + margin-top: 10px; +} + +.addScenario-content button { + margin-top: 10px; padding: 10px; + border: none; + background-color: #464eb8; + color: white; + cursor: pointer; border-radius: 4px; - margin-bottom: 10px; } -.dropped-api span { - flex-grow: 1; - margin-right: 10px; +.addScenario-content button:hover { + background-color: #3b3f92; } -.remove-api-button { +.saved-scenarios-dialog { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; +} + +.saved-scenarios-content { + background: white; + padding: 20px; + border-radius: 8px; + max-width: 500px; + width: 100%; +} + +.saved-scenarios-content h2 { + margin-top: 0; +} + +.saved-scenarios-content ul { + list-style-type: none; + padding: 0; +} + +.saved-scenarios-content li { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 0; + border-bottom: 1px solid #ddd; +} + +.saved-scenarios-content button { + background-color: #464eb8; + color: white; + border: none; + border-radius: 4px; + padding: 5px 10px; + cursor: pointer; +} + +.saved-scenarios-content button:hover { + background-color: #3b3f92; +} + +.saved-scenarios-content .delete-button { background-color: #f44336; color: white; border: none; + border-radius: 4px; padding: 5px 10px; cursor: pointer; - border-radius: 70%; } -.remove-api-button:hover { +.saved-scenarios-content .delete-button:hover { background-color: #ff6666; } -.scenario1-button:hover { - background-color: #45a049; +.saved-scenarios-content .close-button { + background-color: gray; + color: white; + border: none; +} + +.saved-scenarios-content .close-button:hover { + background-color: lightgray; +} + +.button-group-vertical { + display: flex; + flex-direction: column; + gap: 10px; } + +.default-input2 { + border-radius: 5px; + width: 95px; + height: 30px; + padding: 0; + font-size: 13px; + text-align: center; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + margin-bottom: 8px; + box-sizing: border-box; + line-height: 40px; +} + +.dialog-header { + display: flex; + justify-content: space-between; + align-items: center; +} + +.clear-all-button { + background-color: #fae5e3ff; + color: #c22a25ff; + border: none; + border-radius: 5px; + padding: 5px 10px; + cursor: pointer; + width: 125px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + text-decoration-thickness: 3px; +} + +.clear-all-button:hover { + background-color: rgb(250, 239, 238); +} + +.scenario-list-button { + background-color: rgb(240, 234, 255); + color: #464eb8; + border: none; + border-radius: 5px; + padding: 5px 10px; + cursor: pointer; + width: 125px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + text-decoration-thickness: 3px; +} + +.scenario-list-button:hover { + background-color: rgb(245, 240, 255); +} + +.dialog-header .clear-all-button2 { + background-color: #fae5e3ff; + color: #c22a25ff; + border: none; + border-radius: 5px; + padding: 5px 10px; + cursor: pointer; + width: 70px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; +} + +.dialog-header .clear-all-button2:hover { + background-color: rgb(250, 239, 238); +} + +.search-bar { + width: calc(100% - 40px); + padding: 10px; + font-size: 14px; + border: 1px solid #ccc; + border-radius: 5px; + margin-right: 50px; + margin-bottom: 10px; +} + +.btn-icon { + position: absolute; + top: 22px; + right: 20px; + width: 34px; + height: 34px; + padding: 0; + background-color: rgb(189, 191, 240); + cursor: pointer; + border-radius: 5px; + display: flex; + align-items: center; + justify-content: center; + font-size: 20px; + font-weight: bold; +} + +.btn-icon:hover { + background-color: rgb(221, 221, 240); +} + +.btn-icon i { + font-size: 20px; +} \ No newline at end of file diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/CustomScenario.tsx b/apps/teamsjs-diagnostic-app/src/components/sample/CustomScenario.tsx index cd5da451f5..0c3a785f05 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/CustomScenario.tsx +++ b/apps/teamsjs-diagnostic-app/src/components/sample/CustomScenario.tsx @@ -2,24 +2,55 @@ import React, { useState } from 'react'; import './CustomScenario.css'; import { useDrop } from 'react-dnd'; import apiComponents, { ApiComponent } from './ApiComponents'; -import AppInstallDialogAPIs from '../../apis/AppInstallDialogApi'; -import BarCodeAPIs from '../../apis/BarCodeApi'; +import { handleRunScenario } from '../../utils/HandleRunScenario'; +import { app } from '@microsoft/teams-js'; + +app.initialize(); const CustomScenario: React.FC = () => { const [searchQuery, setSearchQuery] = useState(''); const [customScenario, setCustomScenario] = useState>([]); + const [showAddScenario, setShowAddScenario] = useState(false); + const [newScenarioName, setNewScenarioName] = useState(''); + const [selectedApis, setSelectedApis] = useState<{ [key: string]: boolean }>({}); + const [selectedFunctions, setSelectedFunctions] = useState<{ [key: string]: string }>({}); + const [apiInputs, setApiInputs] = useState<{ [key: string]: string }>({}); + const [savedScenarios, setSavedScenarios] = useState }>>([]); + const [showScenarioList, setShowScenarioList] = useState(false); - const handleRunScenario = async () => { + const handleRunScenarioClick = async () => { console.log('Running custom scenario...'); + + let isSuccess = true; + for (const { api, func, input } of customScenario) { - console.log(`Executing ${func} for ${api.title} with input: ${input}`); - // Execute the API function based on the selected function and input + + try { + console.log("Enter"); + await handleRunScenario(api, func, input); + console.log(`Success: ${func} for ${api.title}`); + console.log("Exit"); + } catch (error: any) { + console.log(`Failure: ${func} for ${api.title} - ${error.message}`); + console.log("Exit"); + isSuccess = false; + console.log('Custom scenario failed.'); + break; // Stop further execution if any API fails + } + } + + if (isSuccess) { + console.log('Custom scenario completed successfully.'); } }; const addToScenario = (api: ApiComponent, func: string, input?: string) => { console.log(`Adding ${func} for ${api.title} with input: ${input}`); - setCustomScenario([...customScenario, { api, func, input }]); + if (customScenario.length < 5) { + setCustomScenario([...customScenario, { api, func, input }]); + } else { + console.log('Maximum limit reached. Cannot add more than 5 APIs to the scenario.'); + } }; const removeApiFromScenario = (index: number) => { @@ -30,28 +61,119 @@ const CustomScenario: React.FC = () => { setCustomScenario([]); }; + const saveScenario = () => { + if (!newScenarioName) { + console.log('Scenario name is required.'); + return; + } + + const newScenario = { + name: newScenarioName, + scenario: apiComponents + .filter(api => selectedApis[api.title]) + .map(api => ({ + api, + func: selectedFunctions[api.title] || '', + input: apiInputs[api.title] || '', + })), + }; + + if (newScenario.scenario.length > 0) { + setSavedScenarios([...savedScenarios, newScenario]); + setShowAddScenario(false); + setNewScenarioName(''); + setSelectedApis({}); + setSelectedFunctions({}); + setApiInputs({}); + } else { + console.log('No APIs selected.'); + } + }; + + const loadScenario = (scenario: { name: string, scenario: Array<{ api: ApiComponent, func: string, input?: string }> }) => { + setCustomScenario(scenario.scenario); + setShowScenarioList(false); + }; + const [{ isOver }, drop] = useDrop(() => ({ accept: 'API', drop: (item: { api: ApiComponent, func: string, input?: string }) => addToScenario(item.api, item.func, item.input), + canDrop: () => customScenario.length < 5, collect: (monitor) => ({ isOver: monitor.isOver(), }), - })); + }), [customScenario]); - const generateVerticalBoxes = () => { - const filteredApis = apiComponents.filter(api => - api.title.toLowerCase().includes(searchQuery.toLowerCase()) - ); + const generateCustomScenario = () => { + return customScenario.map((item, index) => ( + +
+ {`${item.api.title}, ${item.func}${item.input ? `(${item.input})` : ''}`} + +
+
+ )); + }; + const generateVerticalBoxes = () => { + const filteredApis = apiComponents + .filter(api => + api.title.toLowerCase().includes(searchQuery.toLowerCase()) + ) + // Alphabetical sorting + .sort((a, b) => a.title.localeCompare(b.title)); + return filteredApis.map((api: ApiComponent, index: number) => (
- {api.title === 'App Install Dialog API' ? ( - - ) : api.title === 'Bar Code API' ? ( - - ) : null} + {api.renderComponent ? ( + api.renderComponent({ apiComponent: api, onDropToScenarioBox: addToScenario }) + ) : ( +
+

{api.title}

+
+ )}
)); + }; + + const handleFunctionSelection = (apiTitle: string, func: string) => { + setSelectedFunctions(prev => ({ ...prev, [apiTitle]: func })); + }; + + const handleApiSelection = (apiTitle: string, isChecked: boolean) => { + setSelectedApis(prev => ({ ...prev, [apiTitle]: isChecked })); + if (!isChecked) { + // If unselecting, remove any related function and input + setSelectedFunctions(prev => ({ ...prev, [apiTitle]: '' })); + setApiInputs(prev => ({ ...prev, [apiTitle]: '' })); + } + }; + + const handleInputChange = (apiTitle: string, input: string) => { + setApiInputs(prev => ({ ...prev, [apiTitle]: input })); + }; + + const handleDeleteScenario = (index: number) => { + setSavedScenarios(savedScenarios.filter((_, i) => i !== index)); + }; + + const handleAddDefaultInput = (apiTitle: string) => { + const api = apiComponents.find(api => api.title === apiTitle); + if (api) { + const defaultInput = api.defaultInput || ''; + setApiInputs(prev => ({ ...prev, [apiTitle]: defaultInput })); + } + }; + + const handleClearAll = () => { + setSelectedApis({}); + setSelectedFunctions({}); + setApiInputs({}); + setNewScenarioName(''); + }; + + const handlePreviewClick = () => { + window.open('https://learn.microsoft.com/en-us/javascript/api/@microsoft/teams-js/?view=msteams-client-js-latest', '_blank'); }; return ( @@ -59,22 +181,21 @@ const CustomScenario: React.FC = () => {

Custom Scenario

-

Drag and drop API components here to build your custom scenario.

+

Drag and drop APIs here to build your custom scenario.

- +
APIs Being Run:
- {customScenario.map((item, index) => ( -
- {`${item.api.title}, ${item.func}${item.input ? `(${item.input})` : ''}`} - -
- ))} + {generateCustomScenario()}
+
+ + +
@@ -86,9 +207,91 @@ const CustomScenario: React.FC = () => { value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} /> +
{generateVerticalBoxes()}
+ + {showAddScenario && ( +
+
+
+

Create New Scenario

+ +
+ + setNewScenarioName(e.target.value)} + /> +
+ {apiComponents + //Alphabetical order + .sort((a, b) => a.title.localeCompare(b.title)) + .map((api, index) => ( +
+ handleApiSelection(api.title, e.target.checked)} + /> + + {selectedApis[api.title] && ( +
+ + {selectedFunctions[api.title] && api.functions.find(func => func.name === selectedFunctions[api.title])?.requiresInput && ( +
+ handleInputChange(api.title, e.target.value)} + /> + +
+ )} +
+ )} +
+ ))} +
+ +
+
+)} + + {showScenarioList && ( +
+
+

Saved Scenarios

+
    + {savedScenarios.map((scenario, index) => ( +
  • + + +
  • + ))} +
+ +
+
+ )} +
); }; diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.css b/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.css index eac609c129..c6caf69b0d 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.css +++ b/apps/teamsjs-diagnostic-app/src/components/sample/LogConsole.css @@ -5,12 +5,15 @@ } .horizontal-box { - width: 1300px; + width: 90vw; height: 600px; display: flex; flex-direction: column; overflow: auto; - background-color: lightgray; + background-color: white; + box-shadow: 4px 4px 8px #4f52b0ff; + border: 3px solid #4f52b0ff; + border-radius: 8px; } .content { @@ -21,9 +24,9 @@ } .log-console { - margin-top: 20px; + margin-top: 15px; padding: 20px; - background-color: lightgray; + background-color: white; display: flex; flex-direction: column; } @@ -48,30 +51,29 @@ color: white; border: none; cursor: pointer; + border-radius: 4px; + transition: background-color 0.3s; + margin-bottom: 20px; } .clear-logs-button { - background-color: #f44336; + background-color: #fae5e3ff; + color: #c22a25ff; } .clear-logs-button:hover { - background-color: #ff6666; -} - -.download-logs-button { - background-color: #464eb8; -} - -.download-logs-button:hover { - background-color: #787dc0; + background-color: rgb(250, 239, 238); } +.download-logs-button, .share-logs-button { background-color: #464eb8; + border-radius: 4px; } +.download-logs-button:hover, .share-logs-button:hover { - background-color: #787dc0; + background-color: #7B83EB; } .share-logs-dropdown { @@ -83,8 +85,10 @@ top: 100%; left: 0; background-color: white; - border: 1px solid #ccc; + border: 1px solid #ddd; + border-radius: 4px; z-index: 1; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .share-option { @@ -103,20 +107,24 @@ .log-statement { padding: 5px; - border-bottom: 1px solid #ccc; + border-bottom: 1px solid #ddd; overflow: auto; margin-bottom: 8px; } .search-input-container { flex-grow: 1; + box-shadow: 4px 4px 4px rgb(173, 173, 173); + max-width:300px; + border-radius: 4px; + margin-bottom: 20px; } .search-input { padding: 8px; width: 100%; max-width: 300px; - border: 1px solid #ccc; + border: 1px solid #ddd; border-radius: 4px; } diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/Scenarios.test.tsx b/apps/teamsjs-diagnostic-app/src/components/sample/Scenarios.test.tsx index 649674302d..75be7a5118 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/Scenarios.test.tsx +++ b/apps/teamsjs-diagnostic-app/src/components/sample/Scenarios.test.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { render, screen, fireEvent } from '@testing-library/react'; +import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import AppInitializationScenario from './AppInitializationScenario'; jest.mock('@microsoft/teams-js', () => ({ @@ -9,7 +9,10 @@ jest.mock('@microsoft/teams-js', () => ({ })); jest.mock('../../apis/AppApi', () => ({ + getContextV2: jest.fn(() => Promise.resolve({})), + registerBeforeSuspendOrTerminateHandler: jest.fn(() => Promise.resolve()), registerOnResume: jest.fn(() => Promise.resolve()), + registerOnThemeChangeHandlerV2: jest.fn(() => Promise.resolve()), })); jest.mock('../../apis/AuthenticationStart', () => ({ @@ -22,29 +25,19 @@ describe('App Initialization Component', () => { jest.clearAllMocks(); }); - test('app initialization scenario', () => { - render(); + test('app initialization scenario', async () => { + render(); fireEvent.click(screen.getByTestId('run-scenario-button')); - return new Promise((resolve, reject) => { - const timeout = setTimeout(() => { - clearTimeout(timeout); - reject(new Error('Timeout waiting for success message')); - }, 5000); - - const checkSuccessMessage = () => { + await waitFor( + () => { const successMessage = screen.queryByText(/App Initialization Scenario successfully completed/i); - if (successMessage) { - clearTimeout(timeout); - resolve(); - } else { - setTimeout(checkSuccessMessage, 100); // Check every 100ms + if (!successMessage) { + throw new Error('Success message not found'); } - }; - - checkSuccessMessage(); - }); + }, + { timeout: 5000 } + ); }); - }); diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/Welcome.css b/apps/teamsjs-diagnostic-app/src/components/sample/Welcome.css index 2010d6211e..ca55b454da 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/Welcome.css +++ b/apps/teamsjs-diagnostic-app/src/components/sample/Welcome.css @@ -31,7 +31,12 @@ border-bottom-color: rgb(98, 100, 167); } -.center { +.congratsMessage { + text-align: center; + color: #4f52b0ff; +} + +.runningMessage{ text-align: center; } diff --git a/apps/teamsjs-diagnostic-app/src/components/sample/Welcome.tsx b/apps/teamsjs-diagnostic-app/src/components/sample/Welcome.tsx index 109d67de66..fa2437a797 100644 --- a/apps/teamsjs-diagnostic-app/src/components/sample/Welcome.tsx +++ b/apps/teamsjs-diagnostic-app/src/components/sample/Welcome.tsx @@ -49,9 +49,9 @@ export function Welcome(props: { showFunction?: boolean; environment?: string })
-

Congratulations{userName ? ", " + userName : ""}!

- {hostName &&

The diagnostic app is running in {hostName}

} -

The diagnostic app is running in your {friendlyEnvironmentName}

+

Congratulations{userName ? ", " + userName : ""}!

+ {hostName &&

The diagnostic app is running in {hostName}

} +

The diagnostic app is running in your {friendlyEnvironmentName}

diff --git a/apps/teamsjs-diagnostic-app/src/utils/ApiComponentWrapper.tsx b/apps/teamsjs-diagnostic-app/src/utils/ApiComponentWrapper.tsx new file mode 100644 index 0000000000..a307c6d4ec --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/utils/ApiComponentWrapper.tsx @@ -0,0 +1,69 @@ +import React, { useState } from 'react'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { useDragAndDrop } from './UseDragAndDrop'; + +interface ApiComponentWrapperProps { + apiComponent: ApiComponent; + onDropToScenarioBox: (api: ApiComponent, func: string, input?: string) => void; + functionsRequiringInput?: string[]; // Functions that require input +} + +const ApiComponentWrapper: React.FC = ({ apiComponent, onDropToScenarioBox, functionsRequiringInput }) => { + const [selectedFunction, setSelectedFunction] = useState(''); + const [inputValue, setInputValue] = useState(''); + + const handleFunctionChange = (event: React.ChangeEvent) => { + const selectedFunc = event.target.value; + setSelectedFunction(selectedFunc); + setInputValue(''); // Reset input value when function changes + }; + + const handleInputChange = (event: React.ChangeEvent) => { + setInputValue(event.target.value); + }; + + const handleDefaultButtonClick = () => { + if (selectedFunction && apiComponent.defaultInput) { + const defaultInputs = JSON.parse(apiComponent.defaultInput); + setInputValue(defaultInputs[selectedFunction] ? JSON.stringify(defaultInputs[selectedFunction]) : ''); + } + }; + + const showInputBox = selectedFunction && functionsRequiringInput?.includes(selectedFunction); + + const { isDragging, drag } = useDragAndDrop('API', { api: apiComponent, func: selectedFunction, input: inputValue }); + + return ( +
+
{apiComponent.title}
+
+ + {showInputBox && ( +
+ + +
+ )} +
+
+ ); +}; + +export default ApiComponentWrapper; diff --git a/apps/teamsjs-diagnostic-app/src/utils/CheckCapabilityUtils.tsx b/apps/teamsjs-diagnostic-app/src/utils/CheckCapabilityUtils.tsx new file mode 100644 index 0000000000..9f18a9ff32 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/utils/CheckCapabilityUtils.tsx @@ -0,0 +1,31 @@ +export const checkCapabilitySupport = async (module: any, moduleName: string, supportedMessage: string, notSupportedMessage: string): Promise => { + console.log(`Executing Check${moduleName}Capability...`); + try { + const result = await module.isSupported(); + if (result) { + console.log(supportedMessage); + } else { + console.log(notSupportedMessage); + throw new Error(`${moduleName} capability is not supported`); + } + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + console.log(`Error checking ${moduleName} capability:`, errorMessage); + if (error instanceof Error) { + console.log('Stack trace:', error.stack); + } + throw error; + } + }; + + export const checkPermission = async (module: any, moduleName: string, permissionGrantedMessage: string, errorMessage: string): Promise => { + console.log(`Executing Has${moduleName}Permission...`); + try { + await module.hasPermission(); + console.log(permissionGrantedMessage); + } catch (error) { + console.log(`Error checking ${moduleName} permission:`, JSON.stringify(error, null, 2)); + console.log(errorMessage); + throw error; + } + }; diff --git a/apps/teamsjs-diagnostic-app/src/utils/HandleRunScenario.tsx b/apps/teamsjs-diagnostic-app/src/utils/HandleRunScenario.tsx new file mode 100644 index 0000000000..1f9828710a --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/utils/HandleRunScenario.tsx @@ -0,0 +1,659 @@ +import { + AdaptiveCardDialogInfo, + barCode, + profile, + stageView +} from '@microsoft/teams-js'; + +import { + appInstallDialog_CheckAppInstallCapability, + appInstallDialog_OpenAppInstallDialog, + AppInstallDialogInput +} from '../apis/AppInstallDialogApi'; + +import { + barCode_CheckBarCodeCapability, + barCode_HasBarCodePermission, + barCode_ScanBarCode, +} from '../apis/BarCodeApi'; + +import { + calendar_CheckCalendarCapability, + calendar_ComposeMeeting, + calendar_OpenCalendarItem +} from '../apis/CalendarApi'; + +import { + call_CheckCallCapability, + call_StartCall +} from '../apis/CallApi'; + +import { + chat_CheckChatCapability, + chat_CloseConversation, + chat_OpenChat, + chat_OpenConversation, + chat_OpenGroupChat +} from '../apis/ChatApi'; + +import { dialog_CheckDialogCapability } from '../apis/DialogApi'; +import { dialogCard_CheckDialogAdaptiveCardCapability, dialogCard_OpenAdaptiveCardDialog } from '../apis/DialogCardApi'; +import { ApiComponent } from '../components/sample/ApiComponents'; +import { + pages_CheckCapability, + pages_GetConfig, + pages_NavigateCrossDomain, + pages_NavigateToApp, + pages_RegisterFocusEnterHandler, + pages_RegisterFullScreenChangeHandler, + pages_SetCurrentFrame, + pages_ShareDeepLink +} from '../apis/PagesApi'; + +import { profile_CheckProfileCapability, profile_ShowProfile } from '../apis/ProfileApi'; +import { search_CloseSearch, search_RegisterHandlers } from '../apis/SearchApi'; +import { clipboard_CheckClipboardCapability, clipboard_CopyImage, clipboard_CopyText, clipboard_Paste } from '../apis/ClipboardApi'; +import { + geolocation_CheckGeoLocationCapability, + geolocation_CheckGeoLocationMapCapability, + geolocation_ChooseLocation, + geolocation_GetCurrentLocation, + geolocation_HasGeoLocationPermission, + geolocation_RequestGeoLocationPermission +} from '../apis/GeolocationApi'; + +import { sharing_CheckSharingCapability, sharing_ShareWebContent } from '../apis/SharingApi'; +import { stageView_CheckStageViewCapability, stageView_OpenStageView } from '../apis/StageViewApi'; +import { people_CheckPeopleCapability, people_SelectPeople } from '../apis/PeopleApi'; +import { menus_CheckMenusCapability, menus_SetNavBarMenu, menus_SetUpViews, menus_ShowActionMenu } from '../apis/MenusApi'; +import { + pagesTabs_CheckPagesTabsCapability, + pagesTabs_GetMruTabInstances, + pagesTabs_GetTabInstances, + pagesTabs_NavigateToTab +} from '../apis/PagesTabsApi'; + +import { + teamsCore_CheckTeamsCoreCapability, + teamsCore_EnablePrintCapability, + teamsCore_Print, + teamsCore_RegisterBeforeUnloadHandler, + teamsCore_RegisterOnLoadHandler +} from '../apis/TeamsCoreApi'; + +import { secondaryBrowser_CheckSecondaryBrowserCapability, secondaryBrowser_Open } from '../apis'; + +const appInstallDialogHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckAppInstallCapability': + return await appInstallDialog_CheckAppInstallCapability(); + case 'OpenAppInstallDialog': + if (input) { + const parsedInput: AppInstallDialogInput = JSON.parse(input); + return await appInstallDialog_OpenAppInstallDialog(parsedInput); + } else { + throw new Error('Input is required for OpenAppInstallDialog'); + } + default: + throw new Error(`Unknown function ${func} for App Install Dialog API`); + } +}; + +const barCodeHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckBarCodeCapability': + return await barCode_CheckBarCodeCapability(); + case 'ScanBarCode': + if (input) { + try { + const parsedInput: barCode.BarCodeConfig = JSON.parse(input); + return await barCode_ScanBarCode(parsedInput); + } catch (error) { + throw new Error('Invalid input format for ScanBarCode'); + } + } else { + throw new Error('Input is required for ScanBarCode'); + } + case 'HasBarCodePermission': + return await barCode_HasBarCodePermission(); + default: + throw new Error(`Unknown function ${func} for BarCode API`); + } +}; + +const calendarHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckCalendarCapability': + return await calendar_CheckCalendarCapability(); + case 'ComposeMeeting': + if (input) { + return await calendar_ComposeMeeting(input); + } else { + throw new Error('Input is required for ComposeMeeting'); + } + case 'OpenCalendarItem': + if (input) { + return await calendar_OpenCalendarItem(input); + } else { + throw new Error('Input is required for OpenCalendarItem'); + } + default: + throw new Error(`Unknown function ${func} for Calendar API`); + } +}; + +const callHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckCallCapability': + return await call_CheckCallCapability(); + case 'StartCall': + if (input) { + return await call_StartCall(input); + } else { + throw new Error('Input is required for StartCall'); + } + default: + throw new Error(`Unknown function ${func} for Call API`); + } +}; + +const chatHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckChatCapability': + return await chat_CheckChatCapability(); + case 'OpenChat': + if (input) { + return await chat_OpenChat(input); + } else { + throw new Error('Input is required for OpenChat'); + } + case 'OpenGroupChat': + if (input) { + return await chat_OpenGroupChat(input); + } else { + throw new Error('Input is required for OpenGroupChat'); + } + case 'OpenConversation': + if (input) { + return await chat_OpenConversation(input); + } else { + throw new Error('Input is required for OpenConversation'); + } + case 'CloseConversation': + return await chat_CloseConversation(); + default: + throw new Error(`Unknown function ${func} for Chat API`); + } +}; + +const dialogHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckDialogCapability': + return await dialog_CheckDialogCapability(); + default: + throw new Error(`Unknown function ${func} for Dialog API`); + } +}; + +const dialogCardHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckDialogAdaptiveCardCapability': + return await dialogCard_CheckDialogAdaptiveCardCapability(); + case 'OpenAdaptiveCardDialog': + if (input) { + try { + const parsedInput: AdaptiveCardDialogInfo = JSON.parse(input); + return await dialogCard_OpenAdaptiveCardDialog(parsedInput); + } catch (error) { + console.log('Invalid input format for OpenAdaptiveCardDialog'); + throw new Error('Invalid input format for OpenAdaptiveCardDialog'); + } + } else { + throw new Error('Input is required for OpenAdaptiveCardDialog'); + } + default: + throw new Error(`Unknown function ${func} for Dialog Card API`); + } +}; + +const pagesHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckCapability': + return await pages_CheckCapability(); + case 'NavigateCrossDomain': + if (typeof input === 'string') { + try { + return await pages_NavigateCrossDomain(input); + } catch (error) { + console.log('Invalid input format for NavigateCrossDomain', error); + throw new Error('Invalid input format for NavigateCrossDomain'); + } + } else { + throw new Error('Input must be a string for NavigateCrossDomain'); + } + case 'NavigateToApp': + if (input) { + try { + const parsedInput = JSON.parse(input); + return await pages_NavigateToApp(parsedInput); + } catch (error) { + console.log('Invalid input format for NavigateToApp'); + throw new Error('Invalid input format for NavigateToApp'); + } + } else { + throw new Error('Input is required for NavigateToApp'); + } + case 'ShareDeepLink': + if (input) { + try { + const parsedInput = JSON.parse(input); + return await pages_ShareDeepLink(parsedInput); + } catch (error) { + console.log('Invalid input format for ShareDeepLink'); + throw new Error('Invalid input format for ShareDeepLink'); + } + } else { + throw new Error('Input is required for ShareDeepLink'); + } + case 'SetCurrentFrame': + if (input) { + try { + const parsedInput = JSON.parse(input); + return await pages_SetCurrentFrame(parsedInput); + } catch (error) { + console.log('Invalid input format for SetCurrentFrame'); + throw new Error('Invalid input format for SetCurrentFrame'); + } + } else { + throw new Error('Input is required for SetCurrentFrame'); + } + case 'GetConfig': + return await pages_GetConfig(); + case 'RegisterFocusEnterHandler': + return await pages_RegisterFocusEnterHandler(); + case 'RegisterFullScreenChangeHandler': + return await pages_RegisterFullScreenChangeHandler(); + default: + throw new Error(`Unknown function ${func} for Pages API`); + } +}; + +const profileHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckProfileCapability': + return await profile_CheckProfileCapability; + case 'ShowProfile': + try { + if (!input) { + throw new Error('Input value for ShowProfile is missing.'); + } + + const showProfileRequest: profile.ShowProfileRequest = JSON.parse(input); + return await profile_ShowProfile(showProfileRequest); + } catch (error: unknown) { + if (error instanceof Error) { + throw new Error(`Error displaying profile: ${error.message}`); + } else { + throw new Error(`Unknown error occurred: ${String(error)}`); + } + } + default: + throw new Error(`Unknown function ${func} for Profile API`); + } +}; + +const searchHandler = async (func: string, input?: string) => { + switch (func) { + case 'RegisterHandlers': + return await search_RegisterHandlers(); + case 'CloseSearch': + try { + return await search_CloseSearch(); + } catch (error) { + console.error('Error closing search:', error); + throw error; + } + default: + throw new Error(`Unknown function ${func} for Search API`); + } +}; + +const clipboardHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckClipboardCapability': + try { + return await clipboard_CheckClipboardCapability(); + } catch (error) { + console.log('Error checking clipboard capability:', error); + throw error; + } + case 'CopyText': + if (input) { + try { + const parsedInput = JSON.parse(input); + if (typeof parsedInput === 'object' && 'text' in parsedInput) { + return await clipboard_CopyText(parsedInput); + } else { + throw new Error('Error: Parsed input for CopyText is not valid'); + } + } catch (error) { + console.error('Error copying text:', error); + throw error + } + } else { + throw new Error('Error: Input is required for CopyText'); + } + case 'CopyImage': + if (input) { + try { + const parsedInput = JSON.parse(input); + if (typeof parsedInput === 'object' && 'mimeType' in parsedInput) { + return await clipboard_CopyImage(parsedInput); + } else { + throw new Error('Error: Parsed input for CopyImage is not valid'); + } + } catch (error) { + console.log('Error copying image:', error); + throw error; + } + } else { + throw new Error('Error: Input is required for CopyImage'); + } + case 'Paste': + try { + return await clipboard_Paste(); + } catch (error) { + throw new Error('Error pasting from clipboard'); + } + default: + throw new Error(`Unknown function ${func} for Clipboard API`); + } +}; + +const geolocationHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckGeoLocationCapability': + return await geolocation_CheckGeoLocationCapability(); + case 'CheckGeoLocationMapCapability': + return await geolocation_CheckGeoLocationMapCapability(); + case 'HasGeoLocationPermission': + return await geolocation_HasGeoLocationPermission(); + case 'RequestGeoLocationPermission': + return await geolocation_RequestGeoLocationPermission(); + case 'GetCurrentLocation': + return await geolocation_GetCurrentLocation(); + case 'ChooseLocation': + return await geolocation_ChooseLocation(); + default: + throw new Error(`Unknown function ${func} for Geolocation API`); + } +}; + +const sharingHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckSharingCapability': + return await sharing_CheckSharingCapability(); + case 'ShareWebContent': + if (input) { + try { + const parsedInput = JSON.parse(input); + return await sharing_ShareWebContent(parsedInput); + } catch (error) { + console.log('Invalid input format for ShareWebContent'); + throw new Error('Invalid input format for ShareWebContent'); + } + } else { + throw new Error('Input is required for ShareWebContent'); + } + default: + throw new Error(`Unknown function ${func} for Sharing API`); + } +}; + +const stageViewHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckStageViewCapability': + return await stageView_CheckStageViewCapability(); + case 'OpenStageView': + if (input) { + try { + const parsedInput = JSON.parse(input); + const { appId, contentUrl, threadId, title, websiteUrl, entityId, openMode } = parsedInput; + return await stageView_OpenStageView({ + appId, + contentUrl, + threadId, + title, + websiteUrl, + entityId, + openMode: openMode || stageView.StageViewOpenMode.modal + }); + } catch (error) { + console.error('Invalid input format for OpenStageView', error); + throw new Error('Invalid input format for OpenStageView'); + } + } else { + throw new Error('Input is required for OpenStageView'); + } + default: + throw new Error(`Unknown function ${func} for Stage View API`); + } +}; + +const peopleHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckPeopleCapability': + return await people_CheckPeopleCapability(); + case 'SelectPeople': + try { + // Check if input is provided and is a valid JSON string + const parsedInput = input ? JSON.parse(input) : undefined; + return await people_SelectPeople(parsedInput); + } catch (error) { + if (error instanceof SyntaxError) { + console.log('Invalid input format for SelectPeople'); + throw new Error('Invalid input format for SelectPeople'); + } else { + console.log('Error during SelectPeople operation'); + throw new Error('Error during SelectPeople operation'); + } + } + default: + throw new Error(`Unknown function ${func} for People API`); + } +}; + +const menusHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckMenusCapability': + return await menus_CheckMenusCapability(); + case 'SetUpViews': + try { + const parsedInput = input ? JSON.parse(input) : undefined; + return await menus_SetUpViews(parsedInput); + } catch (error) { + if (error instanceof SyntaxError) { + console.log('Invalid input format for SetUpViews'); + throw new Error('Invalid input format for SetUpViews'); + } else { + throw new Error('Error during SetUpViews operation'); + } + } + case 'SetNavBarMenu': + try { + const parsedInput = input ? JSON.parse(input) : undefined; + return await menus_SetNavBarMenu(parsedInput); + } catch (error) { + if (error instanceof SyntaxError) { + console.log('Invalid input format for SetNavBarMenu'); + throw new Error('Invalid input format for SetNavBarMenu'); + } else { + throw new Error('Error during SetNavBarMenu operation'); + } + } + case 'ShowActionMenu': + try { + const parsedInput = input ? JSON.parse(input) : undefined; + return await menus_ShowActionMenu(parsedInput); + } catch (error) { + if (error instanceof SyntaxError) { + console.log('Invalid input format for ShowActionMenu'); + throw new Error('Invalid input format for ShowActionMenu'); + } else { + throw new Error('Error during ShowActionMenu operation'); + } + } + default: + throw new Error(`Unknown function ${func} for Menus API`); + } +}; + +const pagesTabsHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckPagesTabsCapability': + return await pagesTabs_CheckPagesTabsCapability(); + case 'NavigateToTab': + try { + const parsedInput = input ? JSON.parse(input) : undefined; + return await pagesTabs_NavigateToTab(parsedInput); + } catch (error) { + if (error instanceof SyntaxError) { + console.log('Invalid input format for NavigateToTab:', error); + throw new Error('Invalid input format for NavigateToTab'); + } else { + throw new Error('Error during NavigateToTab operation'); + } + } + case 'GetTabInstances': + try { + const parsedInput = input ? JSON.parse(input) : undefined; + return await pagesTabs_GetTabInstances(parsedInput); + } catch (error) { + if (error instanceof SyntaxError) { + console.log('Invalid input format for GetTabInstances'); + throw new Error('Invalid input format for GetTabInstances'); + } else { + throw new Error('Error during GetTabInstances operation'); + } + } + case 'GetMruTabInstances': + try { + const parsedInput = input ? JSON.parse(input) : undefined; + return await pagesTabs_GetMruTabInstances(parsedInput); + } catch (error) { + if (error instanceof SyntaxError) { + console.log('Invalid input format for GetMruTabInstances'); + throw new Error('Invalid input format for GetMruTabInstances'); + } else { + throw new Error('Error during GetMruTabInstances operation'); + } + } + default: + throw new Error(`Unknown function ${func} for Pages Tabs API`); + } +}; + +const teamsCoreHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckTeamsCoreCapability': + return await teamsCore_CheckTeamsCoreCapability(); + case 'EnablePrintCapability': + try { + return await teamsCore_EnablePrintCapability(); + } catch (error) { + throw new Error('Error during EnablePrintCapability operation'); + } + case 'Print': + try { + return await teamsCore_Print(); + } catch (error) { + throw new Error('Error during Print operation'); + } + case 'RegisterOnLoadHandler': + try { + return await teamsCore_RegisterOnLoadHandler(); + } catch (error) { + throw new Error('Error during RegisterOnLoadHandler operation'); + } + case 'RegisterBeforeUnloadHandler': + try { + const parsedInput = input ? JSON.parse(input) : ''; + return await teamsCore_RegisterBeforeUnloadHandler(parsedInput); + } catch (error) { + if (error instanceof SyntaxError) { + console.log('Invalid input format for RegisterBeforeUnloadHandler:', error); + throw new Error('Invalid input format for RegisterBeforeUnloadHandler'); + } else { + throw new Error('Error during RegisterBeforeUnloadHandler operation'); + } + } + default: + throw new Error(`Unknown function ${func} for Teams Core API`); + } +}; + +const secondaryBrowserHandler = async (func: string, input?: string) => { + switch (func) { + case 'CheckSecondaryBrowserCapability': + return await secondaryBrowser_CheckSecondaryBrowserCapability(); + case 'Open': + try { + const parsedInput = input ? JSON.parse(input) : ''; + return await secondaryBrowser_Open(parsedInput) + } catch (error) { + throw new Error('Error during Open operation'); + } + default: + throw new Error(`Unknown function ${func} for Secondary Browser API`); + } +}; + +export const handleRunScenario = async (api: ApiComponent, func: string, input?: string) => { + try { + switch (api.name) { + case 'appInstallDialog': + return await appInstallDialogHandler(func, input); + case 'barCode': + return await barCodeHandler(func, input); + case 'calendar': + return await calendarHandler(func, input); + case 'call': + return await callHandler(func, input); + case 'chat': + return await chatHandler(func, input); + case 'dialog': + return await dialogHandler(func, input); + case 'dialogCard': + return await dialogCardHandler(func, input); + case 'pages': + return await pagesHandler(func, input); + case 'profile': + return await profileHandler(func, input); + case 'search': + return await searchHandler(func, input); + case 'clipboard': + return await clipboardHandler(func, input); + case 'geolocation': + return await geolocationHandler(func, input); + case 'sharing': + return await sharingHandler(func, input); + case 'stageView': + return await stageViewHandler(func, input); + case 'people': + return await peopleHandler(func, input); + case 'menus': + return await menusHandler(func, input); + case 'pagesTabs': + return await pagesTabsHandler(func, input); + case 'teamsCore': + return await teamsCoreHandler(func, input); + case 'secondaryBrowser': + return await secondaryBrowserHandler(func, input); + default: + throw new Error(`Unknown API ${api.name}`); + } + } catch (error) { + console.error(error); + throw error; + } +}; diff --git a/apps/teamsjs-diagnostic-app/src/utils/UseDragAndDrop.tsx b/apps/teamsjs-diagnostic-app/src/utils/UseDragAndDrop.tsx new file mode 100644 index 0000000000..458133e485 --- /dev/null +++ b/apps/teamsjs-diagnostic-app/src/utils/UseDragAndDrop.tsx @@ -0,0 +1,13 @@ +import { useDrag } from 'react-dnd'; + +export const useDragAndDrop = (type: string, item: any) => { + const [{ isDragging }, drag] = useDrag(() => ({ + type, + item, + collect: (monitor) => ({ + isDragging: monitor.isDragging(), + }), + }), [item]); + + return { isDragging, drag }; +}; diff --git a/apps/teamsjs-diagnostic-app/test-results/unit/unit-tests-report.xml b/apps/teamsjs-diagnostic-app/test-results/unit/unit-tests-report.xml deleted file mode 100644 index beace13fcf..0000000000 --- a/apps/teamsjs-diagnostic-app/test-results/unit/unit-tests-report.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/apps/teamsjs-diagnostic-app/tsconfig.json b/apps/teamsjs-diagnostic-app/tsconfig.json index 9d379a3c4a..54cf34855d 100644 --- a/apps/teamsjs-diagnostic-app/tsconfig.json +++ b/apps/teamsjs-diagnostic-app/tsconfig.json @@ -16,5 +16,5 @@ "noEmit": true, "jsx": "react-jsx" }, - "include": ["src"] + "include": ["src", "babel.config.ts"] } From 9eafca5f8e47029f552f9459daeddad457584621 Mon Sep 17 00:00:00 2001 From: Debajyoti Chowdhury <57507664+debajyoti251088@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:39:13 -0700 Subject: [PATCH 14/18] Add the close API on the stage (#2380) * Add the currentCloseWindow API on stageView * Added the changelog * Moved the close API to a nested namespace * Addressed code comments * Added UT * Added more UTs * Add the json file * Moved the close API to the content context instead of the stage context * Added changes to the test tab * Addressed code comments * Added a self on the runtime * Fixed the self isSupported check * Removed the stageView self json * Removed the stage deeplink E2E test temporarily * Added hostsdkversion * Update packages/teams-js/src/public/stageView.ts * Update packages/teams-js/src/public/stageView.ts * Documentation changes * Added further documentation * Update packages/teams-js/src/public/stageView.ts * Updated documentation --------- Co-authored-by: dechowdhury Co-authored-by: Trevor Harris --- apps/teams-test-app/e2e-test-data/app.json | 6 ++ .../src/components/StageViewSelfAPIs.tsx | 31 +++++++++ apps/teams-test-app/src/pages/TestApp.tsx | 2 + ...-385a0467-ba06-419f-842e-89301a76c1e8.json | 7 ++ packages/teams-js/src/internal/telemetry.ts | 1 + packages/teams-js/src/public/runtime.ts | 4 +- packages/teams-js/src/public/stageView.ts | 43 ++++++++++++ .../teams-js/test/public/stageView.spec.ts | 69 ++++++++++++++++++- 8 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 apps/teams-test-app/src/components/StageViewSelfAPIs.tsx create mode 100644 change/@microsoft-teams-js-385a0467-ba06-419f-842e-89301a76c1e8.json diff --git a/apps/teams-test-app/e2e-test-data/app.json b/apps/teams-test-app/e2e-test-data/app.json index ae8ebd4b68..86d1fcaf3e 100644 --- a/apps/teams-test-app/e2e-test-data/app.json +++ b/apps/teams-test-app/e2e-test-data/app.json @@ -66,6 +66,9 @@ "title": "openLink stageView.open API Call with thread id - Success", "type": "callResponse", "boxSelector": "#box_executeDeepLink2", + "hostSdkVersion": { + "web": "<4.0.1" + }, "platformsExcluded": ["iOS"], "inputValue": "https://teams.microsoft.com/l/stage/testAppId/0?context=%7B%22contentUrl%22%3A%22testContentUrl%22%2C%22websiteUrl%22%3A%22testWebsiteUrl%22%2C%22title%22%3A%22TestTitle%22%2C%22threadId%22%3A%22TestThreadId%22%7D", "expectedAlertValue": "stageView.open called with {\"appId\":\"testAppId\",\"contentUrl\":\"testContentUrl\",\"threadId\":\"TestThreadId\",\"title\":\"TestTitle\",\"websiteUrl\":\"testWebsiteUrl\"}", @@ -75,6 +78,9 @@ "title": "openLink stageView.open API Call without thread id - Success", "type": "callResponse", "boxSelector": "#box_executeDeepLink2", + "hostSdkVersion": { + "web": "<4.0.1" + }, "platformsExcluded": ["iOS"], "inputValue": "https://teams.microsoft.com/l/stage/testAppId/0?context=%7B%22contentUrl%22%3A%22testContentUrl%22%2C%22websiteUrl%22%3A%22testWebsiteUrl%22%2C%22title%22%3A%22TestTitle%22%7D", "expectedAlertValue": "stageView.open called with {\"appId\":\"testAppId\",\"contentUrl\":\"testContentUrl\",\"title\":\"TestTitle\",\"websiteUrl\":\"testWebsiteUrl\"}", diff --git a/apps/teams-test-app/src/components/StageViewSelfAPIs.tsx b/apps/teams-test-app/src/components/StageViewSelfAPIs.tsx new file mode 100644 index 0000000000..a2c99e8024 --- /dev/null +++ b/apps/teams-test-app/src/components/StageViewSelfAPIs.tsx @@ -0,0 +1,31 @@ +import { /*SdkError,*/ stageView } from '@microsoft/teams-js'; +import React, { ReactElement } from 'react'; + +import { ApiWithoutInput /*, ApiWithTextInput*/ } from './utils'; +import { ModuleWrapper } from './utils/ModuleWrapper'; + +const CheckStageViewSelfCapability = (): React.ReactElement => + ApiWithoutInput({ + name: 'checkStageViewSelfCapability', + title: 'Check StageView Self Capability', + onClick: async () => `StageView Self ${stageView.self.isSupported() ? 'is' : 'is not'} supported`, + }); + +const CloseStageView = (): ReactElement => + ApiWithoutInput({ + name: 'stageViewSelfClose', + title: 'StageView Self Close', + onClick: async () => { + await stageView.self.close(); + return 'closed'; + }, + }); + +const StageViewSelfAPIs = (): ReactElement => ( + + + + +); + +export default StageViewSelfAPIs; diff --git a/apps/teams-test-app/src/pages/TestApp.tsx b/apps/teams-test-app/src/pages/TestApp.tsx index 78ef804a75..3e0a189111 100644 --- a/apps/teams-test-app/src/pages/TestApp.tsx +++ b/apps/teams-test-app/src/pages/TestApp.tsx @@ -55,6 +55,7 @@ import SearchAPIs from '../components/SearchAPIs'; import SecondaryBrowserAPIs from '../components/SecondaryBrowserAPIs'; import SharingAPIs from '../components/SharingAPIs'; import StageViewAPIs from '../components/StageViewAPIs'; +import StageViewSelfAPIs from '../components/StageViewSelfAPIs'; import TeamsCoreAPIs from '../components/TeamsCoreAPIs'; import ThirdPartyCloudStorageAPIs from '../components/ThirdPartyCloudStorageAPIs'; import CookieAccessComponent from '../components/ThirdPatryCookies'; @@ -123,6 +124,7 @@ export const TestApp: React.FC = () => { + diff --git a/change/@microsoft-teams-js-385a0467-ba06-419f-842e-89301a76c1e8.json b/change/@microsoft-teams-js-385a0467-ba06-419f-842e-89301a76c1e8.json new file mode 100644 index 0000000000..8712047072 --- /dev/null +++ b/change/@microsoft-teams-js-385a0467-ba06-419f-842e-89301a76c1e8.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Added `self` capability that will allow the stage to perform an operation on itself (eg. close). The capability is still awaiting support in one or most host applications. To track availability of this capability across different hosts see https://aka.ms/capmatrix", + "packageName": "@microsoft/teams-js", + "email": "dechowdhury@microsoft.com_msteamsmdb", + "dependentChangeType": "patch" +} diff --git a/packages/teams-js/src/internal/telemetry.ts b/packages/teams-js/src/internal/telemetry.ts index d7049ec8d5..3ff8f62a96 100644 --- a/packages/teams-js/src/internal/telemetry.ts +++ b/packages/teams-js/src/internal/telemetry.ts @@ -297,6 +297,7 @@ export const enum ApiName { Sharing_History_GetContent = 'sharing.history.getContent', Sharing_ShareWebContent = 'sharing.shareWebContent', StageView_Open = 'stageView.open', + StageView_Self_Close = 'stageView.self.close', Tasks_StartTask = 'tasks.startTask', Tasks_SubmitTask = 'tasks.submitTask', Tasks_UpdateTask = 'tasks.updateTask', diff --git a/packages/teams-js/src/public/runtime.ts b/packages/teams-js/src/public/runtime.ts index 5eb8918197..a4b2b37f14 100644 --- a/packages/teams-js/src/public/runtime.ts +++ b/packages/teams-js/src/public/runtime.ts @@ -279,7 +279,9 @@ interface IRuntimeV4 extends IBaseRuntime { readonly sharing?: { readonly history?: {}; }; - readonly stageView?: {}; + readonly stageView?: { + readonly self?: {}; + }; readonly teams?: { readonly fullTrust?: { readonly joinedTeams?: {}; diff --git a/packages/teams-js/src/public/stageView.ts b/packages/teams-js/src/public/stageView.ts index 867c9c3399..3e95f3ef61 100644 --- a/packages/teams-js/src/public/stageView.ts +++ b/packages/teams-js/src/public/stageView.ts @@ -115,4 +115,47 @@ export namespace stageView { export function isSupported(): boolean { return ensureInitialized(runtime) && runtime.supports.stageView ? true : false; } + + /** + * Namespace for actions that can be taken by the stage view itself. + * + * @beta + */ + export namespace self { + /** + * Closes the current stage view. This function will be a no-op if called from outside of a stage view. + * @returns Promise that resolves or rejects with an error once the stage view is closed. + * + * @beta + * @throws Error if stageView.self.close is not supported in the current context or if `app.initialize()` has not resolved successfully. + */ + export function close(): Promise { + return new Promise((resolve) => { + ensureInitialized(runtime, FrameContexts.content); + + if (!isSupported()) { + throw errorNotSupportedOnPlatform; + } + + resolve( + sendAndHandleSdkError( + getApiVersionTag(stageViewTelemetryVersionNumber, ApiName.StageView_Self_Close), + 'stageView.self.close', + ), + ); + }); + } + + /** + * Checks if stageView.self capability is supported by the host + * @beta + * @returns boolean to represent whether the stageView.self capability is supported + * + * @throws Error if {@linkcode app.initialize} has not successfully completed + * + */ + export function isSupported(): boolean { + return ensureInitialized(runtime) && runtime.supports.stageView?.self !== undefined; + } + } } diff --git a/packages/teams-js/test/public/stageView.spec.ts b/packages/teams-js/test/public/stageView.spec.ts index 8798e838c7..13b09500f0 100644 --- a/packages/teams-js/test/public/stageView.spec.ts +++ b/packages/teams-js/test/public/stageView.spec.ts @@ -12,10 +12,9 @@ import { Utils } from '../utils'; describe('stageView', () => { const utils = new Utils(); - const allowedContexts = [FrameContexts.content]; function makeRuntimeSupportStageViewCapability() { - utils.setRuntimeConfig({ apiVersion: 1, supports: { stageView: {} } }); + utils.setRuntimeConfig({ apiVersion: 1, supports: { stageView: {self: {}} } }); } beforeEach(() => { @@ -54,6 +53,7 @@ describe('stageView', () => { }); describe('open', () => { + const allowedContexts = [FrameContexts.content]; it('should not allow calls before initialization', async () => { await expect(stageView.open(stageViewParams)).rejects.toThrowError(new Error(errorLibraryNotInitialized)); }); @@ -133,4 +133,69 @@ describe('stageView', () => { } }); }); + + describe('self isSupported', () => { + it('should throw if called before initialization', () => { + utils.uninitializeRuntimeConfig(); + expect(() => stageView.self.isSupported()).toThrowError(new Error(errorLibraryNotInitialized)); + }); + }); + + describe('self', () => { + const allowedSelfContexts = [FrameContexts.content]; + + Object.values(FrameContexts).forEach((frameContext) => { + if (!allowedSelfContexts.some((allowedSelfContexts) => allowedSelfContexts === frameContext)) { + it(`should not allow calls from ${frameContext} context`, async () => { + await utils.initializeWithContext(frameContext); + + await expect(() => stageView.self.close()).rejects.toThrowError( + `This call is only allowed in following contexts: ["content"]. Current context: "${frameContext}".`, + ); + }); + } + }); + + it('should return promise and resolve', async () => { + await utils.initializeWithContext(FrameContexts.content); + makeRuntimeSupportStageViewCapability(); + + const promise = stageView.self.close(); + + const closeStageViewMessage = utils.findMessageByFunc('stageView.self.close'); + expect(closeStageViewMessage).not.toBeNull(); + + utils.respondToMessage(closeStageViewMessage, null); + + await expect(promise).resolves.not.toThrowError(); + }); + + it('should properly handle errors', async () => { + await utils.initializeWithContext(FrameContexts.content); + makeRuntimeSupportStageViewCapability(); + + const promise = stageView.self.close(); + + const err = { errorCode: ErrorCode.INTERNAL_ERROR }; + const closeStageViewMessage = utils.findMessageByFunc('stageView.self.close'); + expect(closeStageViewMessage).not.toBeNull(); + + utils.respondToMessage(closeStageViewMessage, err); + + await expect(promise).rejects.toEqual(err); + }); + + it('should throw error when stageView is not supported.', async () => { + await utils.initializeWithContext(FrameContexts.content); + utils.setRuntimeConfig({ apiVersion: 1, supports: {} }); + + expect.assertions(1); + + try { + await stageView.self.close(); + } catch (e) { + expect(e).toEqual(errorNotSupportedOnPlatform); + } + }); + }); }); From a86608c149dea23511c1881829d617ef5b59d4c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AE=20=28=20=CD=A1=E0=B2=A0=20=CA=96=CC=AF=20=CD=A1?= =?UTF-8?q?=E0=B2=A0=29?= <36546967+AE-MS@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:00:26 -0700 Subject: [PATCH 15/18] Switch all calls of runAppsWithE2ETest.js to the TS version (#2450) --- azure-pipelines.yml | 4 ++-- tools/yaml-templates/web-e2e-tests-job.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index cc750adf70..abedf9fdb9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -122,7 +122,7 @@ extends: condition: succeeded() inputs: targetType: inline - script: 'node tools/cli/runAppsWithE2ETests.js --appUrl=https://localhost:4002 --reportFileName=e2e-tests-report-perf --envType=perf' + script: 'pnpm exec ts-node tools/cli/runAppsWithE2ETests.ts --appUrl=https://localhost:4002 --reportFileName=e2e-tests-report-perf --envType=perf' workingDirectory: '$(AppHostingSdkProjectDirectory)' - task: PublishTestResults@2 @@ -178,7 +178,7 @@ extends: pnpm build-test-app-CDN workingDirectory: '$(ClientSdkProjectDirectory)' - - bash: 'node tools/cli/runAppsWithE2ETests.js --useDataFromLocal=true --reportFileName=e2e-tests-report-cdn-script-tag --envType=cdnScriptTag' + - bash: 'pnpm exec ts-node tools/cli/runAppsWithE2ETests.ts --useDataFromLocal=true --reportFileName=e2e-tests-report-cdn-script-tag --envType=cdnScriptTag' displayName: 'Run E2E integration tests with local script tag on latest cdn bundles' condition: succeeded() workingDirectory: '$(AppHostingSdkProjectDirectory)' diff --git a/tools/yaml-templates/web-e2e-tests-job.yml b/tools/yaml-templates/web-e2e-tests-job.yml index f47c3b3c20..ec2d71fbab 100644 --- a/tools/yaml-templates/web-e2e-tests-job.yml +++ b/tools/yaml-templates/web-e2e-tests-job.yml @@ -47,7 +47,7 @@ jobs: workingDirectory: '$(ClientSdkProjectDirectory)' - bash: > - node tools/cli/runAppsWithE2ETests.js + pnpm exec ts-node tools/cli/runAppsWithE2ETests.ts --useDataFromLocal=true --testPrefixPattern "${{testPrefixPattern}}" --envType=${{ variables.envType }} @@ -57,7 +57,7 @@ jobs: - bash: | # This sets up the server but runs no tests - node tools/cli/runAppsWithE2ETests.js --useDataFromLocal=true --testPrefixPattern "{[]}" + pnpm exec ts-node tools/cli/runAppsWithE2ETests.ts --useDataFromLocal=true --testPrefixPattern "{[]}" # This runs the Electron tests, which currently cannot be filtered pnpm exec xvfb-maybe playwright test displayName: 'Run Electron E2E tests' From 38fcac8aba8c4b42651f4f8ce7d00b083c8f6351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AE=20=28=20=CD=A1=E0=B2=A0=20=CA=96=CC=AF=20=CD=A1?= =?UTF-8?q?=E0=B2=A0=29?= <36546967+AE-MS@users.noreply.github.com> Date: Wed, 7 Aug 2024 13:28:00 -0700 Subject: [PATCH 16/18] Add documentation about when and how to update Teams fallback runtime objects (#2451) * Update documentation for when and how to update versionAndPlatformAgnosticTeamsRuntimeConfig * Changefile --- RUNTIME.md | 16 ++++++++---- ...-48fab7bb-bf40-4e94-9ff7-d08b07206e8c.json | 7 ++++++ packages/teams-js/src/public/runtime.ts | 25 +++++++++++++++++++ 3 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 change/@microsoft-teams-js-48fab7bb-bf40-4e94-9ff7-d08b07206e8c.json diff --git a/RUNTIME.md b/RUNTIME.md index a0547b7909..22626e768c 100644 --- a/RUNTIME.md +++ b/RUNTIME.md @@ -12,23 +12,23 @@ A minor version change is one by which the previous version can be transformed i ## I am making a change to the runtime object. Do I need to update the runtime version? -### *I have added a required property to IRuntime* +### _I have added a required property to IRuntime_ - Yes – new minor version is required number if this property can be generated by App SDK without loss of some previously supported functionality, new major version is required if some previously supported functionality is lost when this property is not provided by the host. -### *I have added an optional property or supported capability* +### _I have added an optional property or supported capability_ - No new version is required. -### *I have renamed or moved a supported capability* +### _I have renamed or moved a supported capability_ - Yes – new minor version is required. -### *I have removed a supported capability* +### _I have removed a supported capability_ - Yes – new major version is required. -### *I have merged or split capabilities* +### _I have merged or split capabilities_ - Yes – new major version is required. @@ -41,3 +41,9 @@ A minor version change is one by which the previous version can be transformed i 5. Add an `IRuntimeUpgrade` to the `upgradeChain` that will transform the previous runtime version to the new one 6. Update "runtime versioning" tests in `packages/teams-js/test/public/runtime.spec.ts` to use new version number 7. Add a test for upgrading from the previous runtime version to the new one + +## Do I need to update `mapTeamsVersionToSupportedCapabilities`? + +The documentation on the `mapTeamsVersionToSupportedCapabilities` structure should generally help answer this question. That said, +if you are adding a new capability and it will be supported by any version of TeamsV1 or Teams Mobile, you will need to update the +`mapTeamsVersionToSupportedCapabilities` structure to indicate which version and which platforms support your new capability. diff --git a/change/@microsoft-teams-js-48fab7bb-bf40-4e94-9ff7-d08b07206e8c.json b/change/@microsoft-teams-js-48fab7bb-bf40-4e94-9ff7-d08b07206e8c.json new file mode 100644 index 0000000000..2797a54c42 --- /dev/null +++ b/change/@microsoft-teams-js-48fab7bb-bf40-4e94-9ff7-d08b07206e8c.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Updated documentation on usage of `versionAndPlatformAgnosticTeamsRuntimeConfig` and `mapTeamsVersionToSupportedCapabilities`", + "packageName": "@microsoft/teams-js", + "email": "36546967+AE-MS@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/teams-js/src/public/runtime.ts b/packages/teams-js/src/public/runtime.ts index a4b2b37f14..44aaf2049e 100644 --- a/packages/teams-js/src/public/runtime.ts +++ b/packages/teams-js/src/public/runtime.ts @@ -332,6 +332,26 @@ export function isRuntimeInitialized(runtime: IBaseRuntime): runtime is Runtime export let runtime: Runtime | UninitializedRuntime = _uninitializedRuntime; +/** + * This object is used as the default runtime for versions of Teams which don't pass a runtime object during + * initialization. If the host DOES pass a runtime object during init, then this object is not used. + * + * In practice, this is used in Teams V1 and ALL versions of Teams mobile since they are the only hosts + * that don't pass a runtime object during initialization (since they don't use the host SDK). + * + * If there are certain versions of Teams V1 or Teams mobile which support a capability but not ALL + * versions, then you should modify the mapTeamsVersionToSupportedCapabilities structure for that purpose. That + * structure allows you to specify particular versions on particular platforms that support certain capabilities. + * This structure is version agnostic. + * + * In practice, if you are adding a new capability, you are likely only to need to update mapTeamsVersionToSupportedCapabilities + * and NOT this structure, as this structure is effectively only used for capabilities that have existed "forever." + * + * Remember that everything here all still ONLY applies to versions of Teams that don't pass a runtime object during + * initialization -- if they do, then neither this object nor the mapTeamsVersionToSupportedCapabilities structure is + * used -- all runtime capabilities are dynamically discovered at runtime in the case where the runtime object is passed + * during initialization. + */ export const versionAndPlatformAgnosticTeamsRuntimeConfig: Runtime = { apiVersion: 4, isNAAChannelRecommended: false, @@ -500,6 +520,11 @@ export const upgradeChain: IRuntimeUpgrade[] = [ }, ]; +/** + * This structure is used for versions of Teams that don't pass a runtime object during initialization. + * Please see the extensive comments in versionAndPlatformAgnosticTeamsRuntimeConfig for more information + * on when and how to use this structure. + */ export const mapTeamsVersionToSupportedCapabilities: Record> = { // 1.0.0 just signifies "these capabilities have practically always been supported." For some of these // we don't know what the real first version that supported them was -- but it was long enough ago that From 99465c26ae76737ed17e3fd0ead23a6f7c595e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AE=20=28=20=CD=A1=E0=B2=A0=20=CA=96=CC=AF=20=CD=A1?= =?UTF-8?q?=E0=B2=A0=29?= <36546967+AE-MS@users.noreply.github.com> Date: Fri, 9 Aug 2024 09:42:43 -0700 Subject: [PATCH 17/18] Add AppId class to use for storing app ids (#2454) * Add appId validation utility functions and tests * Add AppId class * changefile * Prettier and other related fixes * changefile --- .vscode/settings.json | 2 +- ...-c4732925-47c0-4279-aa4f-0ef18f84e7e9.json | 7 ++ packages/teams-js/src/internal/appId.ts | 30 +++++ .../teams-js/src/internal/appIdValidation.ts | 45 +++++++ packages/teams-js/test/internal/appId.spec.ts | 24 ++++ .../test/internal/appValidation.spec.ts | 112 ++++++++++++++++++ 6 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 change/@microsoft-teams-js-c4732925-47c0-4279-aa4f-0ef18f84e7e9.json create mode 100644 packages/teams-js/src/internal/appId.ts create mode 100644 packages/teams-js/src/internal/appIdValidation.ts create mode 100644 packages/teams-js/test/internal/appId.spec.ts create mode 100644 packages/teams-js/test/internal/appValidation.spec.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index f8d6c7489b..d7a523d902 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "cSpell.words": ["adal", "uninitialize"], + "cSpell.words": ["adal", "teamspace", "uninitialize"], "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, "editor.insertSpaces": true, diff --git a/change/@microsoft-teams-js-c4732925-47c0-4279-aa4f-0ef18f84e7e9.json b/change/@microsoft-teams-js-c4732925-47c0-4279-aa4f-0ef18f84e7e9.json new file mode 100644 index 0000000000..1301d70311 --- /dev/null +++ b/change/@microsoft-teams-js-c4732925-47c0-4279-aa4f-0ef18f84e7e9.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Added new `AppId` class to use as a type where app ids are being stored", + "packageName": "@microsoft/teams-js", + "email": "36546967+AE-MS@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/teams-js/src/internal/appId.ts b/packages/teams-js/src/internal/appId.ts new file mode 100644 index 0000000000..fad4cddd47 --- /dev/null +++ b/packages/teams-js/src/internal/appId.ts @@ -0,0 +1,30 @@ +import { validateStringAsAppId } from './appIdValidation'; + +/** + * A strongly-typed class used to represent a "valid" app id. + * + * Valid is a relative term, in this case. Truly valid app ids are UUIDs as documented in the schema: + * https://learn.microsoft.com/en-us/microsoftteams/platform/resources/schema/manifest-schema#id + * However, there are some older internal/hard-coded apps which violate this schema and use names like + * com.microsoft.teamspace.tab.youtube. For compatibility with these legacy apps, we unfortunately cannot + * securely and completely validate app ids as UUIDs. Based on this, the validation is limited to checking + * for script tags, length, and non-printable characters. + */ +export class AppId { + /** + * Creates a strongly-typed AppId from a string + * + * @param appIdAsString An app id represented as a string + * @throws Error with a message describing the exact validation violation + */ + public constructor(private readonly appIdAsString: string) { + validateStringAsAppId(appIdAsString); + } + + /** + * Returns the app id as a string + */ + public toString(): string { + return this.appIdAsString; + } +} diff --git a/packages/teams-js/src/internal/appIdValidation.ts b/packages/teams-js/src/internal/appIdValidation.ts new file mode 100644 index 0000000000..028b993a03 --- /dev/null +++ b/packages/teams-js/src/internal/appIdValidation.ts @@ -0,0 +1,45 @@ +/** + * This function can be used to validate if a string is a "valid" app id. + * Valid is a relative term, in this case. Truly valid app ids are UUIDs as documented in the schema: + * https://learn.microsoft.com/en-us/microsoftteams/platform/resources/schema/manifest-schema#id + * However, there are some older internal/hard-coded apps which violate this schema and use names like com.microsoft.teamspace.tab.youtube. + * For compatibility with these legacy apps, we unfortunately cannot securely and completely validate app ids as UUIDs. Based + * on this, the validation is limited to checking for script tags, length, and non-printable characters. + * + * @param potentialAppId A string to check if it's a "valid" app id + * @throws Error with a message describing the exact validation violation + */ +export function validateStringAsAppId(potentialAppId: string): void { + if (doesStringContainScriptTags(potentialAppId)) { + throw new Error(`Potential app id (${potentialAppId}) is invalid; it contains script tags.`); + } + + if (!isStringWithinAppIdLengthLimits(potentialAppId)) { + throw new Error( + `Potential app id (${potentialAppId}) is invalid; its length ${potentialAppId.length} is not within the length limits (${minimumValidAppIdLength}-${maximumValidAppIdLength}).`, + ); + } + + if (doesStringContainNonPrintableCharacters(potentialAppId)) { + throw new Error(`Potential app id (${potentialAppId}) is invalid; it contains non-printable characters.`); + } +} + +export function doesStringContainScriptTags(str: string): boolean { + const scriptRegex = /]*>[\s\S]*?<\/script[^>]*>/gi; + return scriptRegex.test(str); +} + +export const minimumValidAppIdLength = 4; +export const maximumValidAppIdLength = 256; + +export function isStringWithinAppIdLengthLimits(potentialAppId: string): boolean { + return potentialAppId.length < maximumValidAppIdLength && potentialAppId.length > minimumValidAppIdLength; +} + +export function doesStringContainNonPrintableCharacters(str: string): boolean { + return [...str].some((char) => { + const charCode = char.charCodeAt(0); + return charCode < 32 || charCode > 126; + }); +} diff --git a/packages/teams-js/test/internal/appId.spec.ts b/packages/teams-js/test/internal/appId.spec.ts new file mode 100644 index 0000000000..8ea8d1038c --- /dev/null +++ b/packages/teams-js/test/internal/appId.spec.ts @@ -0,0 +1,24 @@ +import { AppId } from '../../src/internal/appId'; +import { maximumValidAppIdLength } from '../../src/internal/appIdValidation'; + +// Since there are plenty of tests validating the individual validation functionality, these tests are intentionally not as +// comprehensive as those. It executes a few basic tests and also validates that the error messages thrown are as expected. +describe('doesStringContainNonPrintableCharacters', () => { + test('should not throw for "valid" app ids', () => { + expect(() => new AppId('8e6523aa-97f9-49ad-8614-75cae22f6597')).not.toThrow(); + expect(() => new AppId('com.microsoft.teamspace.tab.youtube')).not.toThrow(); + }); + + test('should throw error with "script" in message for app id containing script tag', () => { + expect(() => new AppId('')).toThrowError(/script/); + }); + + test('should throw error with "length" in message for app id too long or too short', () => { + expect(() => new AppId('a')).toThrowError(/length/); + expect(() => new AppId('a'.repeat(maximumValidAppIdLength))).toThrowError(/length/); + }); + + test('should throw error with "printable" in message for app id containing non-printable characters', () => { + expect(() => new AppId('hello\u0080world')).toThrowError(/printable/); + }); +}); diff --git a/packages/teams-js/test/internal/appValidation.spec.ts b/packages/teams-js/test/internal/appValidation.spec.ts new file mode 100644 index 0000000000..9fdfe95088 --- /dev/null +++ b/packages/teams-js/test/internal/appValidation.spec.ts @@ -0,0 +1,112 @@ +import { + doesStringContainNonPrintableCharacters, + doesStringContainScriptTags, + isStringWithinAppIdLengthLimits, + maximumValidAppIdLength, + minimumValidAppIdLength, + validateStringAsAppId, +} from '../../src/internal/appIdValidation'; + +describe('doesStringContainNonPrintableCharacters', () => { + test('should return true for strings with only non-printable characters', () => { + expect(doesStringContainNonPrintableCharacters('\u0000')).toBe(true); // Contains null character + expect(doesStringContainNonPrintableCharacters('\u007F')).toBe(true); // Contains delete character + }); + + test('should return true for strings with mixed printable and non-printable characters', () => { + expect(doesStringContainNonPrintableCharacters('hello\u0000')).toBe(true); // Ends with null character + expect(doesStringContainNonPrintableCharacters('\u007Fworld')).toBe(true); // Starts with delete character + expect(doesStringContainNonPrintableCharacters('hello\u0080world')).toBe(true); // Contains non-printable character + }); + + test('should return false for strings with only printable characters', () => { + expect(doesStringContainNonPrintableCharacters('hello world')).toBe(false); + expect(doesStringContainNonPrintableCharacters('AAAA')).toBe(false); + expect(doesStringContainNonPrintableCharacters('1234567890')).toBe(false); + expect(doesStringContainNonPrintableCharacters('!@#$%^&*()')).toBe(false); + expect(doesStringContainNonPrintableCharacters('8e6523aa-97f9-49ad-8614-75cae22f6597')).toBe(false); + expect(doesStringContainNonPrintableCharacters('com.microsoft.teamspace.tab.youtube')).toBe(false); + }); + + test('should return false for empty string', () => { + expect(doesStringContainNonPrintableCharacters('')).toBe(false); + }); +}); + +describe('isStringWithinAppIdLengthLimits', () => { + test('should return true for strings within the valid length limits', () => { + expect(isStringWithinAppIdLengthLimits('a'.repeat(minimumValidAppIdLength + 5))).toBe(true); + expect(isStringWithinAppIdLengthLimits('3789ff94-ceff-49d3-b2d8-ea3dfce76115')).toBe(true); + expect(isStringWithinAppIdLengthLimits('com.microsoft.teamspace.tab.youtube')).toBe(true); + }); + + test('should return false for strings shorter than the minimum valid length', () => { + expect(isStringWithinAppIdLengthLimits('a'.repeat(minimumValidAppIdLength - 1))).toBe(false); + expect(isStringWithinAppIdLengthLimits('')).toBe(false); + }); + + test('should return false for strings longer than the maximum valid length', () => { + expect(isStringWithinAppIdLengthLimits('a'.repeat(maximumValidAppIdLength + 1))).toBe(false); + }); + + test('should return false for strings exactly at the minimum valid length', () => { + expect(isStringWithinAppIdLengthLimits('a'.repeat(minimumValidAppIdLength))).toBe(false); + }); + + test('should return false for strings exactly at the maximum valid length', () => { + expect(isStringWithinAppIdLengthLimits('a'.repeat(maximumValidAppIdLength))).toBe(false); + }); +}); + +describe('doesStringContainScriptTags', () => { + test('should return true for strings containing script tags', () => { + expect(doesStringContainScriptTags('')).toBe(true); + expect(doesStringContainScriptTags('')).toBe(true); + expect(doesStringContainScriptTags('')).toBe(true); + }); + + test('should return false for strings without script tags', () => { + expect(doesStringContainScriptTags('This is a test string')).toBe(false); + expect(doesStringContainScriptTags('8e6523aa-97f9-49ad-8614-75cae22f6597')).toBe(false); + expect(doesStringContainScriptTags('com.microsoft.teamspace.tab.youtube')).toBe(false); + expect(doesStringContainScriptTags('
This is a div
')).toBe(false); + expect(doesStringContainScriptTags('Link')).toBe(false); + }); + + test('should return true for strings with script tags containing newlines and spaces', () => { + expect(doesStringContainScriptTags('')).toBe(true); + expect(doesStringContainScriptTags('')).toBe(true); + }); + + test('should return false for empty string', () => { + expect(doesStringContainScriptTags('')).toBe(false); + }); + + test('should return true for strings with multiple script tags', () => { + expect(doesStringContainScriptTags('')).toBe( + true, + ); + }); +}); + +// Since there are plenty of tests validating the individual validation functions, these tests are intentionally not as +// comprehensive as those. It executes a few basic tests and also validates that the error messages thrown are as expected. +describe('validateStringAsAppId', () => { + test('should not throw for "valid" app ids', () => { + expect(() => validateStringAsAppId('8e6523aa-97f9-49ad-8614-75cae22f6597')).not.toThrow(); + expect(() => validateStringAsAppId('com.microsoft.teamspace.tab.youtube')).not.toThrow(); + }); + + test('should throw error with "script" in message for app id containing script tag', () => { + expect(() => validateStringAsAppId('')).toThrowError(/script/); + }); + + test('should throw error with "length" in message for app id too long or too short', () => { + expect(() => validateStringAsAppId('a')).toThrowError(/length/); + expect(() => validateStringAsAppId('a'.repeat(maximumValidAppIdLength))).toThrowError(/length/); + }); + + test('should throw error with "printable" in message for app id containing non-printable characters', () => { + expect(() => validateStringAsAppId('hello\u0080world')).toThrowError(/printable/); + }); +}); From 3120d90369d8ddafe432561707179d703b5b9fc6 Mon Sep 17 00:00:00 2001 From: jadahiya-MSFT <95651173+jadahiya-MSFT@users.noreply.github.com> Date: Fri, 9 Aug 2024 12:35:41 -0700 Subject: [PATCH 18/18] Cleanup for 2.26.0 release of TeamsJS (#2457) * Setting up for release of 2.26.0 * Updated changelog * Setting up for release of 2.26.0 (#2453) * Setting up for release of 2.26.0 * Updated changelog --- apps/teams-test-app/index_cdn.html | 4 ++-- apps/teams-test-app/package.json | 2 +- ...-142eccf1-7044-4c9b-b363-1b7d828c2184.json | 7 ------- ...-1504ddf2-8a88-4f2a-80a7-84b8efeb180f.json | 7 ------- ...-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json | 7 ------- ...-385a0467-ba06-419f-842e-89301a76c1e8.json | 7 ------- ...-5dc9a9b4-40e6-4c9f-a580-8d6720cfc50f.json | 7 ------- ...-80426639-8e57-48b5-b260-c80b8ce77169.json | 7 ------- ...-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json | 7 ------- ...b3cc9e88-9329-4a98-95d5-6878864906cc.json} | 2 +- ...-cbfc373a-83b3-4276-bde7-0cb028ecc6f6.json | 7 ------- ...-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json | 7 ------- ...-fcf61832-de53-4b49-824d-233e1c99caab.json | 7 ------- packages/teams-js/CHANGELOG.md | 21 ++++++++++++++++++- packages/teams-js/README.md | 8 +++---- packages/teams-js/package.json | 2 +- 16 files changed, 29 insertions(+), 80 deletions(-) delete mode 100644 change/@microsoft-teams-js-142eccf1-7044-4c9b-b363-1b7d828c2184.json delete mode 100644 change/@microsoft-teams-js-1504ddf2-8a88-4f2a-80a7-84b8efeb180f.json delete mode 100644 change/@microsoft-teams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json delete mode 100644 change/@microsoft-teams-js-385a0467-ba06-419f-842e-89301a76c1e8.json delete mode 100644 change/@microsoft-teams-js-5dc9a9b4-40e6-4c9f-a580-8d6720cfc50f.json delete mode 100644 change/@microsoft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json delete mode 100644 change/@microsoft-teams-js-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json rename change/{@microsoft-teams-js-a5609caa-58c7-4c39-8d31-d34da9607b2f.json => @microsoft-teams-js-b3cc9e88-9329-4a98-95d5-6878864906cc.json} (74%) delete mode 100644 change/@microsoft-teams-js-cbfc373a-83b3-4276-bde7-0cb028ecc6f6.json delete mode 100644 change/@microsoft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json delete mode 100644 change/@microsoft-teams-js-fcf61832-de53-4b49-824d-233e1c99caab.json diff --git a/apps/teams-test-app/index_cdn.html b/apps/teams-test-app/index_cdn.html index 9e83b7bef0..ac62c53460 100644 --- a/apps/teams-test-app/index_cdn.html +++ b/apps/teams-test-app/index_cdn.html @@ -15,8 +15,8 @@
diff --git a/apps/teams-test-app/package.json b/apps/teams-test-app/package.json index 783268da17..43f341f518 100644 --- a/apps/teams-test-app/package.json +++ b/apps/teams-test-app/package.json @@ -3,7 +3,7 @@ "private": true, "author": "Microsoft Teams", "description": "Teams Test App utilizing Teams JavaScript client SDK to test Hosts", - "version": "2.25.0", + "version": "2.26.0", "scripts": { "build": "pnpm build:bundle", "build:bundle": "pnpm lint && webpack", diff --git a/change/@microsoft-teams-js-142eccf1-7044-4c9b-b363-1b7d828c2184.json b/change/@microsoft-teams-js-142eccf1-7044-4c9b-b363-1b7d828c2184.json deleted file mode 100644 index 20ee7f411f..0000000000 --- a/change/@microsoft-teams-js-142eccf1-7044-4c9b-b363-1b7d828c2184.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "none", - "comment": "Deprecated `pages.navigateCrossDomain`", - "packageName": "@microsoft/teams-js", - "email": "vikramtha@microsoft.com", - "dependentChangeType": "none" -} diff --git a/change/@microsoft-teams-js-1504ddf2-8a88-4f2a-80a7-84b8efeb180f.json b/change/@microsoft-teams-js-1504ddf2-8a88-4f2a-80a7-84b8efeb180f.json deleted file mode 100644 index 083868ea31..0000000000 --- a/change/@microsoft-teams-js-1504ddf2-8a88-4f2a-80a7-84b8efeb180f.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "Used app and authentication apis for diagnostic app functionality.", - "packageName": "@microsoft/teams-js", - "email": "t-avvellozzi", - "dependentChangeType": "patch" -} diff --git a/change/@microsoft-teams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json b/change/@microsoft-teams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json deleted file mode 100644 index ff54e1c17c..0000000000 --- a/change/@microsoft-teams-js-20c797d3-df8d-4eb9-a37c-7269e59c02e8.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minor", - "comment": "Added support for any `*.cloud.microsoft` domain to be a valid host", - "packageName": "@microsoft/teams-js", - "email": "36546967+AE-MS@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/change/@microsoft-teams-js-385a0467-ba06-419f-842e-89301a76c1e8.json b/change/@microsoft-teams-js-385a0467-ba06-419f-842e-89301a76c1e8.json deleted file mode 100644 index 8712047072..0000000000 --- a/change/@microsoft-teams-js-385a0467-ba06-419f-842e-89301a76c1e8.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minor", - "comment": "Added `self` capability that will allow the stage to perform an operation on itself (eg. close). The capability is still awaiting support in one or most host applications. To track availability of this capability across different hosts see https://aka.ms/capmatrix", - "packageName": "@microsoft/teams-js", - "email": "dechowdhury@microsoft.com_msteamsmdb", - "dependentChangeType": "patch" -} diff --git a/change/@microsoft-teams-js-5dc9a9b4-40e6-4c9f-a580-8d6720cfc50f.json b/change/@microsoft-teams-js-5dc9a9b4-40e6-4c9f-a580-8d6720cfc50f.json deleted file mode 100644 index 00b6b03251..0000000000 --- a/change/@microsoft-teams-js-5dc9a9b4-40e6-4c9f-a580-8d6720cfc50f.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minor", - "comment": "Add `chatId` in `pages.navigateToApp` api for deep link support in chat", - "packageName": "@microsoft/teams-js", - "email": "153236114+arsa-MSFT@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/change/@microsoft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json b/change/@microsoft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json deleted file mode 100644 index 0483079d25..0000000000 --- a/change/@microsoft-teams-js-80426639-8e57-48b5-b260-c80b8ce77169.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "Added in WXP domain for unified store", - "packageName": "@microsoft/teams-js", - "email": "jadahiya@microsoft.com", - "dependentChangeType": "patch" -} diff --git a/change/@microsoft-teams-js-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json b/change/@microsoft-teams-js-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json deleted file mode 100644 index a3cee39993..0000000000 --- a/change/@microsoft-teams-js-a8f9bbfe-abed-45eb-89dd-475510d7eb5a.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minor", - "comment": "Added new fields to `VideoFrameConfig` and `VideoFrameData` to allow specifying additional capabilities to be applied to a video frame and reading arbitrary attributes on a video frame respectively. The capability is still awaiting support in one or most host applications. To track availability of this capability across different hosts see https://aka.ms/capmatrix", - "packageName": "@microsoft/teams-js", - "email": "olsolari@microsoft.com", - "dependentChangeType": "patch" -} \ No newline at end of file diff --git a/change/@microsoft-teams-js-a5609caa-58c7-4c39-8d31-d34da9607b2f.json b/change/@microsoft-teams-js-b3cc9e88-9329-4a98-95d5-6878864906cc.json similarity index 74% rename from change/@microsoft-teams-js-a5609caa-58c7-4c39-8d31-d34da9607b2f.json rename to change/@microsoft-teams-js-b3cc9e88-9329-4a98-95d5-6878864906cc.json index 8aff356e09..a17f705c87 100644 --- a/change/@microsoft-teams-js-a5609caa-58c7-4c39-8d31-d34da9607b2f.json +++ b/change/@microsoft-teams-js-b3cc9e88-9329-4a98-95d5-6878864906cc.json @@ -1,6 +1,6 @@ { "type": "none", - "comment": "Released 2.25.0", + "comment": "\"Setup for 2.26.0 release\"", "packageName": "@microsoft/teams-js", "email": "jadahiya@microsoft.com", "dependentChangeType": "none" diff --git a/change/@microsoft-teams-js-cbfc373a-83b3-4276-bde7-0cb028ecc6f6.json b/change/@microsoft-teams-js-cbfc373a-83b3-4276-bde7-0cb028ecc6f6.json deleted file mode 100644 index a64625e788..0000000000 --- a/change/@microsoft-teams-js-cbfc373a-83b3-4276-bde7-0cb028ecc6f6.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "Updated error handling of malformed/missing origin URLs", - "packageName": "@microsoft/teams-js", - "email": "prmarcin@microsoft.com", - "dependentChangeType": "patch" -} diff --git a/change/@microsoft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json b/change/@microsoft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json deleted file mode 100644 index 778ad5f83c..0000000000 --- a/change/@microsoft-teams-js-f3565dc3-79ee-4e1a-97fb-fd15120450a5.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "Fixed behavior of the `isValidOriginsCacheEmpty` function whose name was backwards of what it was actually doing", - "packageName": "@microsoft/teams-js", - "email": "36546967+AE-MS@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/change/@microsoft-teams-js-fcf61832-de53-4b49-824d-233e1c99caab.json b/change/@microsoft-teams-js-fcf61832-de53-4b49-824d-233e1c99caab.json deleted file mode 100644 index 5619c9a7e4..0000000000 --- a/change/@microsoft-teams-js-fcf61832-de53-4b49-824d-233e1c99caab.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "Updated `authentication.getUser` to properly unwrap `SdkError` returned from host into a message", - "packageName": "@microsoft/teams-js", - "email": "36546967+AE-MS@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/packages/teams-js/CHANGELOG.md b/packages/teams-js/CHANGELOG.md index 151eb1e5b2..706ed773a9 100644 --- a/packages/teams-js/CHANGELOG.md +++ b/packages/teams-js/CHANGELOG.md @@ -1,9 +1,28 @@ # Change Log - @microsoft/teams-js -This log was last generated on Wed, 03 Jul 2024 18:11:19 GMT and should not be manually modified. +This log was last generated on Wed, 07 Aug 2024 19:24:31 GMT and should not be manually modified. +## 2.26.0 + +Wed, 07 Aug 2024 19:24:31 GMT + +### Minor changes + +- Added `self` capability that will allow the stage to perform an operation on itself (eg. close). The capability is still awaiting support in one or most host applications. To track availability of this capability across different hosts see https://aka.ms/capmatrix +- Added support for any `*.cloud.microsoft` domain to be a valid host +- Added new fields to `VideoFrameConfig` and `VideoFrameData` to allow specifying additional capabilities to be applied to a video frame and reading arbitrary attributes on a video frame respectively. The capability is still awaiting support in one or most host applications. To track availability of this capability across different hosts see https://aka.ms/capmatrix +- Added `chatId` in `pages.navigateToApp` api for deep link support in chat + +### Patches + +- Added WXP domain for unified store to the dynamic domain list +- Fixed behavior of the `isValidOriginsCacheEmpty` function whose name was backwards of what it was actually doing +- Updated error handling of malformed/missing origin URLs +- Updated `authentication.getUser` to properly unwrap `SdkError` returned from host into a message +- Used app and authentication apis for diagnostic app functionality. + ## 2.25.0 Wed, 03 Jul 2024 18:11:19 GMT diff --git a/packages/teams-js/README.md b/packages/teams-js/README.md index 24df725d9d..cc3371fb2d 100644 --- a/packages/teams-js/README.md +++ b/packages/teams-js/README.md @@ -24,7 +24,7 @@ To install the stable [version](https://learn.microsoft.com/javascript/api/overv ### Production -You can reference these files directly [from here](https://res.cdn.office.net/teams-js/2.25.0/js/MicrosoftTeams.min.js) or point your package manager at them. +You can reference these files directly [from here](https://res.cdn.office.net/teams-js/2.26.0/js/MicrosoftTeams.min.js) or point your package manager at them. ## Usage @@ -45,13 +45,13 @@ Reference the library inside of your `.html` page using: ```html - + diff --git a/packages/teams-js/package.json b/packages/teams-js/package.json index 3bc491a532..b5ffb772de 100644 --- a/packages/teams-js/package.json +++ b/packages/teams-js/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/teams-js", "author": "Microsoft Teams", - "version": "2.25.0", + "version": "2.26.0", "description": "Microsoft Client SDK for building app for Microsoft hosts", "repository": { "directory": "packages/teams-js",