From 8f5be6db971c494f3c0d314e7ed13838a26dd40a Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Tue, 24 Mar 2026 16:58:25 +0100 Subject: [PATCH 01/15] Moving files and folders to get space for a new extension --- .npmrc => vscode-extension/.npmrc | 0 .vscode-test.mjs => vscode-extension/.vscode-test.mjs | 0 .vscodeignore => vscode-extension/.vscodeignore | 0 esbuild.js => vscode-extension/esbuild.js | 0 eslint.config.mjs => vscode-extension/eslint.config.mjs | 0 package-lock.json => vscode-extension/package-lock.json | 0 package.json => vscode-extension/package.json | 0 publish.ps1 => vscode-extension/publish.ps1 | 0 {src => vscode-extension/src}/README.md | 0 {src => vscode-extension/src}/backend/commands.ts | 0 {src => vscode-extension/src}/backend/configPanel.ts | 0 {src => vscode-extension/src}/backend/configurationFlow.ts | 0 {src => vscode-extension/src}/backend/constants.ts | 0 {src => vscode-extension/src}/backend/copyConfig.ts | 0 {src => vscode-extension/src}/backend/displayNames.ts | 0 {src => vscode-extension/src}/backend/facade.ts | 0 {src => vscode-extension/src}/backend/identity.ts | 0 {src => vscode-extension/src}/backend/integration.ts | 0 {src => vscode-extension/src}/backend/repoHygieneSkill.ts | 0 {src => vscode-extension/src}/backend/rollups.ts | 0 .../src}/backend/services/azureResourceService.ts | 0 .../src}/backend/services/blobUploadService.ts | 0 .../src}/backend/services/credentialService.ts | 0 .../src}/backend/services/dataPlaneService.ts | 0 {src => vscode-extension/src}/backend/services/queryService.ts | 0 {src => vscode-extension/src}/backend/services/syncService.ts | 0 {src => vscode-extension/src}/backend/services/utilityService.ts | 0 {src => vscode-extension/src}/backend/settings.ts | 0 {src => vscode-extension/src}/backend/sharingProfile.ts | 0 {src => vscode-extension/src}/backend/storageTables.ts | 0 {src => vscode-extension/src}/backend/types.ts | 0 {src => vscode-extension/src}/backend/ui/messages.ts | 0 {src => vscode-extension/src}/cacheManager.ts | 0 {src => vscode-extension/src}/continue.ts | 0 {src => vscode-extension/src}/crush.ts | 0 {src => vscode-extension/src}/customizationPatterns.json | 0 {src => vscode-extension/src}/extension.ts | 0 {src => vscode-extension/src}/maturityScoring.ts | 0 {src => vscode-extension/src}/modelPricing.json | 0 {src => vscode-extension/src}/opencode.ts | 0 {src => vscode-extension/src}/sessionDiscovery.ts | 0 {src => vscode-extension/src}/sessionParser.ts | 0 {src => vscode-extension/src}/tokenEstimation.ts | 0 {src => vscode-extension/src}/tokenEstimators.json | 0 {src => vscode-extension/src}/toolNames.json | 0 {src => vscode-extension/src}/types.ts | 0 {src => vscode-extension/src}/types/css.d.ts | 0 {src => vscode-extension/src}/types/jsdom.d.ts | 0 {src => vscode-extension/src}/types/json.d.ts | 0 {src => vscode-extension/src}/usageAnalysis.ts | 0 {src => vscode-extension/src}/utils/clipboard.ts | 0 {src => vscode-extension/src}/utils/dayKeys.ts | 0 {src => vscode-extension/src}/utils/errors.ts | 0 {src => vscode-extension/src}/utils/html.ts | 0 {src => vscode-extension/src}/visualstudio.ts | 0 {src => vscode-extension/src}/webview/chart/main.ts | 0 {src => vscode-extension/src}/webview/chart/styles.css | 0 {src => vscode-extension/src}/webview/dashboard/main.ts | 0 {src => vscode-extension/src}/webview/dashboard/styles.css | 0 {src => vscode-extension/src}/webview/details/main.ts | 0 {src => vscode-extension/src}/webview/details/styles.css | 0 {src => vscode-extension/src}/webview/diagnostics/main.ts | 0 {src => vscode-extension/src}/webview/diagnostics/styles.css | 0 {src => vscode-extension/src}/webview/environmental/main.ts | 0 {src => vscode-extension/src}/webview/environmental/styles.css | 0 .../src}/webview/fluency-level-viewer/main.ts | 0 .../src}/webview/fluency-level-viewer/styles.css | 0 {src => vscode-extension/src}/webview/logviewer/main.ts | 0 {src => vscode-extension/src}/webview/logviewer/styles.css | 0 {src => vscode-extension/src}/webview/maturity/main.ts | 0 {src => vscode-extension/src}/webview/maturity/styles.css | 0 {src => vscode-extension/src}/webview/shared/buttonConfig.ts | 0 {src => vscode-extension/src}/webview/shared/contextRefUtils.ts | 0 {src => vscode-extension/src}/webview/shared/domUtils.ts | 0 {src => vscode-extension/src}/webview/shared/formatUtils.ts | 0 {src => vscode-extension/src}/webview/shared/modelUtils.ts | 0 {src => vscode-extension/src}/webview/shared/theme.css | 0 {src => vscode-extension/src}/webview/usage/main.ts | 0 {src => vscode-extension/src}/webview/usage/styles.css | 0 {src => vscode-extension/src}/workspaceHelpers.ts | 0 .../sample-session-data/chatSessions/session-01-today.json | 0 .../chatSessions/session-02-five-days-ago.json | 0 .../chatSessions/session-03-twelve-days-ago.json | 0 .../chatSessions/session-04-twenty-days-ago.json | 0 .../chatSessions/session-05-twenty-seven-days-ago.json | 0 {test => vscode-extension/test}/integration/backend.test.ts | 0 {test => vscode-extension/test}/integration/extension.test.ts | 0 {test => vscode-extension/test}/unit/azureResourceService.test.ts | 0 .../test}/unit/backend-blobUploadService.test.ts | 0 .../test}/unit/backend-cache-integration.test.ts | 0 {test => vscode-extension/test}/unit/backend-commands.test.ts | 0 .../test}/unit/backend-configPanel-webview.test.ts | 0 {test => vscode-extension/test}/unit/backend-configPanel.test.ts | 0 .../test}/unit/backend-configurationFlow.test.ts | 0 {test => vscode-extension/test}/unit/backend-configurator.test.ts | 0 {test => vscode-extension/test}/unit/backend-copyConfig.test.ts | 0 .../test}/unit/backend-dataPlaneService.test.ts | 0 {test => vscode-extension/test}/unit/backend-displayNames.test.ts | 0 .../test}/unit/backend-facade-helpers.test.ts | 0 .../test}/unit/backend-facade-methods.test.ts | 0 {test => vscode-extension/test}/unit/backend-facade-query.test.ts | 0 .../test}/unit/backend-facade-rollups.test.ts | 0 {test => vscode-extension/test}/unit/backend-identity.test.ts | 0 {test => vscode-extension/test}/unit/backend-integration.test.ts | 0 {test => vscode-extension/test}/unit/backend-queryService.test.ts | 0 {test => vscode-extension/test}/unit/backend-redaction.test.ts | 0 {test => vscode-extension/test}/unit/backend-rollups.test.ts | 0 {test => vscode-extension/test}/unit/backend-settings.test.ts | 0 .../test}/unit/backend-sharingProfile.test.ts | 0 .../test}/unit/backend-storageTables.test.ts | 0 .../test}/unit/backend-sync-profiles.test.ts | 0 {test => vscode-extension/test}/unit/backend-syncService.test.ts | 0 {test => vscode-extension/test}/unit/backend-ui-messages.test.ts | 0 .../test}/unit/backend-utilityService.test.ts | 0 {test => vscode-extension/test}/unit/credentialService.test.ts | 0 {test => vscode-extension/test}/unit/logging-redaction.test.ts | 0 .../test}/unit/sessionParser-integration.test.ts | 0 {test => vscode-extension/test}/unit/sessionParser.test.ts | 0 {test => vscode-extension/test}/unit/utils-dayKeys.test.ts | 0 {test => vscode-extension/test}/unit/utils-errors.test.ts | 0 {test => vscode-extension/test}/unit/utils-html.test.ts | 0 {test => vscode-extension/test}/unit/vscode-shim-register.ts | 0 {test => vscode-extension/test}/unit/webview-utils.test.ts | 0 tsconfig.json => vscode-extension/tsconfig.json | 0 tsconfig.tests.json => vscode-extension/tsconfig.tests.json | 0 vs-session-sample.json => vscode-extension/vs-session-sample.json | 0 126 files changed, 0 insertions(+), 0 deletions(-) rename .npmrc => vscode-extension/.npmrc (100%) rename .vscode-test.mjs => vscode-extension/.vscode-test.mjs (100%) rename .vscodeignore => vscode-extension/.vscodeignore (100%) rename esbuild.js => vscode-extension/esbuild.js (100%) rename eslint.config.mjs => vscode-extension/eslint.config.mjs (100%) rename package-lock.json => vscode-extension/package-lock.json (100%) rename package.json => vscode-extension/package.json (100%) rename publish.ps1 => vscode-extension/publish.ps1 (100%) rename {src => vscode-extension/src}/README.md (100%) rename {src => vscode-extension/src}/backend/commands.ts (100%) rename {src => vscode-extension/src}/backend/configPanel.ts (100%) rename {src => vscode-extension/src}/backend/configurationFlow.ts (100%) rename {src => vscode-extension/src}/backend/constants.ts (100%) rename {src => vscode-extension/src}/backend/copyConfig.ts (100%) rename {src => vscode-extension/src}/backend/displayNames.ts (100%) rename {src => vscode-extension/src}/backend/facade.ts (100%) rename {src => vscode-extension/src}/backend/identity.ts (100%) rename {src => vscode-extension/src}/backend/integration.ts (100%) rename {src => vscode-extension/src}/backend/repoHygieneSkill.ts (100%) rename {src => vscode-extension/src}/backend/rollups.ts (100%) rename {src => vscode-extension/src}/backend/services/azureResourceService.ts (100%) rename {src => vscode-extension/src}/backend/services/blobUploadService.ts (100%) rename {src => vscode-extension/src}/backend/services/credentialService.ts (100%) rename {src => vscode-extension/src}/backend/services/dataPlaneService.ts (100%) rename {src => vscode-extension/src}/backend/services/queryService.ts (100%) rename {src => vscode-extension/src}/backend/services/syncService.ts (100%) rename {src => vscode-extension/src}/backend/services/utilityService.ts (100%) rename {src => vscode-extension/src}/backend/settings.ts (100%) rename {src => vscode-extension/src}/backend/sharingProfile.ts (100%) rename {src => vscode-extension/src}/backend/storageTables.ts (100%) rename {src => vscode-extension/src}/backend/types.ts (100%) rename {src => vscode-extension/src}/backend/ui/messages.ts (100%) rename {src => vscode-extension/src}/cacheManager.ts (100%) rename {src => vscode-extension/src}/continue.ts (100%) rename {src => vscode-extension/src}/crush.ts (100%) rename {src => vscode-extension/src}/customizationPatterns.json (100%) rename {src => vscode-extension/src}/extension.ts (100%) rename {src => vscode-extension/src}/maturityScoring.ts (100%) rename {src => vscode-extension/src}/modelPricing.json (100%) rename {src => vscode-extension/src}/opencode.ts (100%) rename {src => vscode-extension/src}/sessionDiscovery.ts (100%) rename {src => vscode-extension/src}/sessionParser.ts (100%) rename {src => vscode-extension/src}/tokenEstimation.ts (100%) rename {src => vscode-extension/src}/tokenEstimators.json (100%) rename {src => vscode-extension/src}/toolNames.json (100%) rename {src => vscode-extension/src}/types.ts (100%) rename {src => vscode-extension/src}/types/css.d.ts (100%) rename {src => vscode-extension/src}/types/jsdom.d.ts (100%) rename {src => vscode-extension/src}/types/json.d.ts (100%) rename {src => vscode-extension/src}/usageAnalysis.ts (100%) rename {src => vscode-extension/src}/utils/clipboard.ts (100%) rename {src => vscode-extension/src}/utils/dayKeys.ts (100%) rename {src => vscode-extension/src}/utils/errors.ts (100%) rename {src => vscode-extension/src}/utils/html.ts (100%) rename {src => vscode-extension/src}/visualstudio.ts (100%) rename {src => vscode-extension/src}/webview/chart/main.ts (100%) rename {src => vscode-extension/src}/webview/chart/styles.css (100%) rename {src => vscode-extension/src}/webview/dashboard/main.ts (100%) rename {src => vscode-extension/src}/webview/dashboard/styles.css (100%) rename {src => vscode-extension/src}/webview/details/main.ts (100%) rename {src => vscode-extension/src}/webview/details/styles.css (100%) rename {src => vscode-extension/src}/webview/diagnostics/main.ts (100%) rename {src => vscode-extension/src}/webview/diagnostics/styles.css (100%) rename {src => vscode-extension/src}/webview/environmental/main.ts (100%) rename {src => vscode-extension/src}/webview/environmental/styles.css (100%) rename {src => vscode-extension/src}/webview/fluency-level-viewer/main.ts (100%) rename {src => vscode-extension/src}/webview/fluency-level-viewer/styles.css (100%) rename {src => vscode-extension/src}/webview/logviewer/main.ts (100%) rename {src => vscode-extension/src}/webview/logviewer/styles.css (100%) rename {src => vscode-extension/src}/webview/maturity/main.ts (100%) rename {src => vscode-extension/src}/webview/maturity/styles.css (100%) rename {src => vscode-extension/src}/webview/shared/buttonConfig.ts (100%) rename {src => vscode-extension/src}/webview/shared/contextRefUtils.ts (100%) rename {src => vscode-extension/src}/webview/shared/domUtils.ts (100%) rename {src => vscode-extension/src}/webview/shared/formatUtils.ts (100%) rename {src => vscode-extension/src}/webview/shared/modelUtils.ts (100%) rename {src => vscode-extension/src}/webview/shared/theme.css (100%) rename {src => vscode-extension/src}/webview/usage/main.ts (100%) rename {src => vscode-extension/src}/webview/usage/styles.css (100%) rename {src => vscode-extension/src}/workspaceHelpers.ts (100%) rename {test => vscode-extension/test}/fixtures/sample-session-data/chatSessions/session-01-today.json (100%) rename {test => vscode-extension/test}/fixtures/sample-session-data/chatSessions/session-02-five-days-ago.json (100%) rename {test => vscode-extension/test}/fixtures/sample-session-data/chatSessions/session-03-twelve-days-ago.json (100%) rename {test => vscode-extension/test}/fixtures/sample-session-data/chatSessions/session-04-twenty-days-ago.json (100%) rename {test => vscode-extension/test}/fixtures/sample-session-data/chatSessions/session-05-twenty-seven-days-ago.json (100%) rename {test => vscode-extension/test}/integration/backend.test.ts (100%) rename {test => vscode-extension/test}/integration/extension.test.ts (100%) rename {test => vscode-extension/test}/unit/azureResourceService.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-blobUploadService.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-cache-integration.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-commands.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-configPanel-webview.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-configPanel.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-configurationFlow.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-configurator.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-copyConfig.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-dataPlaneService.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-displayNames.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-facade-helpers.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-facade-methods.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-facade-query.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-facade-rollups.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-identity.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-integration.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-queryService.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-redaction.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-rollups.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-settings.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-sharingProfile.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-storageTables.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-sync-profiles.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-syncService.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-ui-messages.test.ts (100%) rename {test => vscode-extension/test}/unit/backend-utilityService.test.ts (100%) rename {test => vscode-extension/test}/unit/credentialService.test.ts (100%) rename {test => vscode-extension/test}/unit/logging-redaction.test.ts (100%) rename {test => vscode-extension/test}/unit/sessionParser-integration.test.ts (100%) rename {test => vscode-extension/test}/unit/sessionParser.test.ts (100%) rename {test => vscode-extension/test}/unit/utils-dayKeys.test.ts (100%) rename {test => vscode-extension/test}/unit/utils-errors.test.ts (100%) rename {test => vscode-extension/test}/unit/utils-html.test.ts (100%) rename {test => vscode-extension/test}/unit/vscode-shim-register.ts (100%) rename {test => vscode-extension/test}/unit/webview-utils.test.ts (100%) rename tsconfig.json => vscode-extension/tsconfig.json (100%) rename tsconfig.tests.json => vscode-extension/tsconfig.tests.json (100%) rename vs-session-sample.json => vscode-extension/vs-session-sample.json (100%) diff --git a/.npmrc b/vscode-extension/.npmrc similarity index 100% rename from .npmrc rename to vscode-extension/.npmrc diff --git a/.vscode-test.mjs b/vscode-extension/.vscode-test.mjs similarity index 100% rename from .vscode-test.mjs rename to vscode-extension/.vscode-test.mjs diff --git a/.vscodeignore b/vscode-extension/.vscodeignore similarity index 100% rename from .vscodeignore rename to vscode-extension/.vscodeignore diff --git a/esbuild.js b/vscode-extension/esbuild.js similarity index 100% rename from esbuild.js rename to vscode-extension/esbuild.js diff --git a/eslint.config.mjs b/vscode-extension/eslint.config.mjs similarity index 100% rename from eslint.config.mjs rename to vscode-extension/eslint.config.mjs diff --git a/package-lock.json b/vscode-extension/package-lock.json similarity index 100% rename from package-lock.json rename to vscode-extension/package-lock.json diff --git a/package.json b/vscode-extension/package.json similarity index 100% rename from package.json rename to vscode-extension/package.json diff --git a/publish.ps1 b/vscode-extension/publish.ps1 similarity index 100% rename from publish.ps1 rename to vscode-extension/publish.ps1 diff --git a/src/README.md b/vscode-extension/src/README.md similarity index 100% rename from src/README.md rename to vscode-extension/src/README.md diff --git a/src/backend/commands.ts b/vscode-extension/src/backend/commands.ts similarity index 100% rename from src/backend/commands.ts rename to vscode-extension/src/backend/commands.ts diff --git a/src/backend/configPanel.ts b/vscode-extension/src/backend/configPanel.ts similarity index 100% rename from src/backend/configPanel.ts rename to vscode-extension/src/backend/configPanel.ts diff --git a/src/backend/configurationFlow.ts b/vscode-extension/src/backend/configurationFlow.ts similarity index 100% rename from src/backend/configurationFlow.ts rename to vscode-extension/src/backend/configurationFlow.ts diff --git a/src/backend/constants.ts b/vscode-extension/src/backend/constants.ts similarity index 100% rename from src/backend/constants.ts rename to vscode-extension/src/backend/constants.ts diff --git a/src/backend/copyConfig.ts b/vscode-extension/src/backend/copyConfig.ts similarity index 100% rename from src/backend/copyConfig.ts rename to vscode-extension/src/backend/copyConfig.ts diff --git a/src/backend/displayNames.ts b/vscode-extension/src/backend/displayNames.ts similarity index 100% rename from src/backend/displayNames.ts rename to vscode-extension/src/backend/displayNames.ts diff --git a/src/backend/facade.ts b/vscode-extension/src/backend/facade.ts similarity index 100% rename from src/backend/facade.ts rename to vscode-extension/src/backend/facade.ts diff --git a/src/backend/identity.ts b/vscode-extension/src/backend/identity.ts similarity index 100% rename from src/backend/identity.ts rename to vscode-extension/src/backend/identity.ts diff --git a/src/backend/integration.ts b/vscode-extension/src/backend/integration.ts similarity index 100% rename from src/backend/integration.ts rename to vscode-extension/src/backend/integration.ts diff --git a/src/backend/repoHygieneSkill.ts b/vscode-extension/src/backend/repoHygieneSkill.ts similarity index 100% rename from src/backend/repoHygieneSkill.ts rename to vscode-extension/src/backend/repoHygieneSkill.ts diff --git a/src/backend/rollups.ts b/vscode-extension/src/backend/rollups.ts similarity index 100% rename from src/backend/rollups.ts rename to vscode-extension/src/backend/rollups.ts diff --git a/src/backend/services/azureResourceService.ts b/vscode-extension/src/backend/services/azureResourceService.ts similarity index 100% rename from src/backend/services/azureResourceService.ts rename to vscode-extension/src/backend/services/azureResourceService.ts diff --git a/src/backend/services/blobUploadService.ts b/vscode-extension/src/backend/services/blobUploadService.ts similarity index 100% rename from src/backend/services/blobUploadService.ts rename to vscode-extension/src/backend/services/blobUploadService.ts diff --git a/src/backend/services/credentialService.ts b/vscode-extension/src/backend/services/credentialService.ts similarity index 100% rename from src/backend/services/credentialService.ts rename to vscode-extension/src/backend/services/credentialService.ts diff --git a/src/backend/services/dataPlaneService.ts b/vscode-extension/src/backend/services/dataPlaneService.ts similarity index 100% rename from src/backend/services/dataPlaneService.ts rename to vscode-extension/src/backend/services/dataPlaneService.ts diff --git a/src/backend/services/queryService.ts b/vscode-extension/src/backend/services/queryService.ts similarity index 100% rename from src/backend/services/queryService.ts rename to vscode-extension/src/backend/services/queryService.ts diff --git a/src/backend/services/syncService.ts b/vscode-extension/src/backend/services/syncService.ts similarity index 100% rename from src/backend/services/syncService.ts rename to vscode-extension/src/backend/services/syncService.ts diff --git a/src/backend/services/utilityService.ts b/vscode-extension/src/backend/services/utilityService.ts similarity index 100% rename from src/backend/services/utilityService.ts rename to vscode-extension/src/backend/services/utilityService.ts diff --git a/src/backend/settings.ts b/vscode-extension/src/backend/settings.ts similarity index 100% rename from src/backend/settings.ts rename to vscode-extension/src/backend/settings.ts diff --git a/src/backend/sharingProfile.ts b/vscode-extension/src/backend/sharingProfile.ts similarity index 100% rename from src/backend/sharingProfile.ts rename to vscode-extension/src/backend/sharingProfile.ts diff --git a/src/backend/storageTables.ts b/vscode-extension/src/backend/storageTables.ts similarity index 100% rename from src/backend/storageTables.ts rename to vscode-extension/src/backend/storageTables.ts diff --git a/src/backend/types.ts b/vscode-extension/src/backend/types.ts similarity index 100% rename from src/backend/types.ts rename to vscode-extension/src/backend/types.ts diff --git a/src/backend/ui/messages.ts b/vscode-extension/src/backend/ui/messages.ts similarity index 100% rename from src/backend/ui/messages.ts rename to vscode-extension/src/backend/ui/messages.ts diff --git a/src/cacheManager.ts b/vscode-extension/src/cacheManager.ts similarity index 100% rename from src/cacheManager.ts rename to vscode-extension/src/cacheManager.ts diff --git a/src/continue.ts b/vscode-extension/src/continue.ts similarity index 100% rename from src/continue.ts rename to vscode-extension/src/continue.ts diff --git a/src/crush.ts b/vscode-extension/src/crush.ts similarity index 100% rename from src/crush.ts rename to vscode-extension/src/crush.ts diff --git a/src/customizationPatterns.json b/vscode-extension/src/customizationPatterns.json similarity index 100% rename from src/customizationPatterns.json rename to vscode-extension/src/customizationPatterns.json diff --git a/src/extension.ts b/vscode-extension/src/extension.ts similarity index 100% rename from src/extension.ts rename to vscode-extension/src/extension.ts diff --git a/src/maturityScoring.ts b/vscode-extension/src/maturityScoring.ts similarity index 100% rename from src/maturityScoring.ts rename to vscode-extension/src/maturityScoring.ts diff --git a/src/modelPricing.json b/vscode-extension/src/modelPricing.json similarity index 100% rename from src/modelPricing.json rename to vscode-extension/src/modelPricing.json diff --git a/src/opencode.ts b/vscode-extension/src/opencode.ts similarity index 100% rename from src/opencode.ts rename to vscode-extension/src/opencode.ts diff --git a/src/sessionDiscovery.ts b/vscode-extension/src/sessionDiscovery.ts similarity index 100% rename from src/sessionDiscovery.ts rename to vscode-extension/src/sessionDiscovery.ts diff --git a/src/sessionParser.ts b/vscode-extension/src/sessionParser.ts similarity index 100% rename from src/sessionParser.ts rename to vscode-extension/src/sessionParser.ts diff --git a/src/tokenEstimation.ts b/vscode-extension/src/tokenEstimation.ts similarity index 100% rename from src/tokenEstimation.ts rename to vscode-extension/src/tokenEstimation.ts diff --git a/src/tokenEstimators.json b/vscode-extension/src/tokenEstimators.json similarity index 100% rename from src/tokenEstimators.json rename to vscode-extension/src/tokenEstimators.json diff --git a/src/toolNames.json b/vscode-extension/src/toolNames.json similarity index 100% rename from src/toolNames.json rename to vscode-extension/src/toolNames.json diff --git a/src/types.ts b/vscode-extension/src/types.ts similarity index 100% rename from src/types.ts rename to vscode-extension/src/types.ts diff --git a/src/types/css.d.ts b/vscode-extension/src/types/css.d.ts similarity index 100% rename from src/types/css.d.ts rename to vscode-extension/src/types/css.d.ts diff --git a/src/types/jsdom.d.ts b/vscode-extension/src/types/jsdom.d.ts similarity index 100% rename from src/types/jsdom.d.ts rename to vscode-extension/src/types/jsdom.d.ts diff --git a/src/types/json.d.ts b/vscode-extension/src/types/json.d.ts similarity index 100% rename from src/types/json.d.ts rename to vscode-extension/src/types/json.d.ts diff --git a/src/usageAnalysis.ts b/vscode-extension/src/usageAnalysis.ts similarity index 100% rename from src/usageAnalysis.ts rename to vscode-extension/src/usageAnalysis.ts diff --git a/src/utils/clipboard.ts b/vscode-extension/src/utils/clipboard.ts similarity index 100% rename from src/utils/clipboard.ts rename to vscode-extension/src/utils/clipboard.ts diff --git a/src/utils/dayKeys.ts b/vscode-extension/src/utils/dayKeys.ts similarity index 100% rename from src/utils/dayKeys.ts rename to vscode-extension/src/utils/dayKeys.ts diff --git a/src/utils/errors.ts b/vscode-extension/src/utils/errors.ts similarity index 100% rename from src/utils/errors.ts rename to vscode-extension/src/utils/errors.ts diff --git a/src/utils/html.ts b/vscode-extension/src/utils/html.ts similarity index 100% rename from src/utils/html.ts rename to vscode-extension/src/utils/html.ts diff --git a/src/visualstudio.ts b/vscode-extension/src/visualstudio.ts similarity index 100% rename from src/visualstudio.ts rename to vscode-extension/src/visualstudio.ts diff --git a/src/webview/chart/main.ts b/vscode-extension/src/webview/chart/main.ts similarity index 100% rename from src/webview/chart/main.ts rename to vscode-extension/src/webview/chart/main.ts diff --git a/src/webview/chart/styles.css b/vscode-extension/src/webview/chart/styles.css similarity index 100% rename from src/webview/chart/styles.css rename to vscode-extension/src/webview/chart/styles.css diff --git a/src/webview/dashboard/main.ts b/vscode-extension/src/webview/dashboard/main.ts similarity index 100% rename from src/webview/dashboard/main.ts rename to vscode-extension/src/webview/dashboard/main.ts diff --git a/src/webview/dashboard/styles.css b/vscode-extension/src/webview/dashboard/styles.css similarity index 100% rename from src/webview/dashboard/styles.css rename to vscode-extension/src/webview/dashboard/styles.css diff --git a/src/webview/details/main.ts b/vscode-extension/src/webview/details/main.ts similarity index 100% rename from src/webview/details/main.ts rename to vscode-extension/src/webview/details/main.ts diff --git a/src/webview/details/styles.css b/vscode-extension/src/webview/details/styles.css similarity index 100% rename from src/webview/details/styles.css rename to vscode-extension/src/webview/details/styles.css diff --git a/src/webview/diagnostics/main.ts b/vscode-extension/src/webview/diagnostics/main.ts similarity index 100% rename from src/webview/diagnostics/main.ts rename to vscode-extension/src/webview/diagnostics/main.ts diff --git a/src/webview/diagnostics/styles.css b/vscode-extension/src/webview/diagnostics/styles.css similarity index 100% rename from src/webview/diagnostics/styles.css rename to vscode-extension/src/webview/diagnostics/styles.css diff --git a/src/webview/environmental/main.ts b/vscode-extension/src/webview/environmental/main.ts similarity index 100% rename from src/webview/environmental/main.ts rename to vscode-extension/src/webview/environmental/main.ts diff --git a/src/webview/environmental/styles.css b/vscode-extension/src/webview/environmental/styles.css similarity index 100% rename from src/webview/environmental/styles.css rename to vscode-extension/src/webview/environmental/styles.css diff --git a/src/webview/fluency-level-viewer/main.ts b/vscode-extension/src/webview/fluency-level-viewer/main.ts similarity index 100% rename from src/webview/fluency-level-viewer/main.ts rename to vscode-extension/src/webview/fluency-level-viewer/main.ts diff --git a/src/webview/fluency-level-viewer/styles.css b/vscode-extension/src/webview/fluency-level-viewer/styles.css similarity index 100% rename from src/webview/fluency-level-viewer/styles.css rename to vscode-extension/src/webview/fluency-level-viewer/styles.css diff --git a/src/webview/logviewer/main.ts b/vscode-extension/src/webview/logviewer/main.ts similarity index 100% rename from src/webview/logviewer/main.ts rename to vscode-extension/src/webview/logviewer/main.ts diff --git a/src/webview/logviewer/styles.css b/vscode-extension/src/webview/logviewer/styles.css similarity index 100% rename from src/webview/logviewer/styles.css rename to vscode-extension/src/webview/logviewer/styles.css diff --git a/src/webview/maturity/main.ts b/vscode-extension/src/webview/maturity/main.ts similarity index 100% rename from src/webview/maturity/main.ts rename to vscode-extension/src/webview/maturity/main.ts diff --git a/src/webview/maturity/styles.css b/vscode-extension/src/webview/maturity/styles.css similarity index 100% rename from src/webview/maturity/styles.css rename to vscode-extension/src/webview/maturity/styles.css diff --git a/src/webview/shared/buttonConfig.ts b/vscode-extension/src/webview/shared/buttonConfig.ts similarity index 100% rename from src/webview/shared/buttonConfig.ts rename to vscode-extension/src/webview/shared/buttonConfig.ts diff --git a/src/webview/shared/contextRefUtils.ts b/vscode-extension/src/webview/shared/contextRefUtils.ts similarity index 100% rename from src/webview/shared/contextRefUtils.ts rename to vscode-extension/src/webview/shared/contextRefUtils.ts diff --git a/src/webview/shared/domUtils.ts b/vscode-extension/src/webview/shared/domUtils.ts similarity index 100% rename from src/webview/shared/domUtils.ts rename to vscode-extension/src/webview/shared/domUtils.ts diff --git a/src/webview/shared/formatUtils.ts b/vscode-extension/src/webview/shared/formatUtils.ts similarity index 100% rename from src/webview/shared/formatUtils.ts rename to vscode-extension/src/webview/shared/formatUtils.ts diff --git a/src/webview/shared/modelUtils.ts b/vscode-extension/src/webview/shared/modelUtils.ts similarity index 100% rename from src/webview/shared/modelUtils.ts rename to vscode-extension/src/webview/shared/modelUtils.ts diff --git a/src/webview/shared/theme.css b/vscode-extension/src/webview/shared/theme.css similarity index 100% rename from src/webview/shared/theme.css rename to vscode-extension/src/webview/shared/theme.css diff --git a/src/webview/usage/main.ts b/vscode-extension/src/webview/usage/main.ts similarity index 100% rename from src/webview/usage/main.ts rename to vscode-extension/src/webview/usage/main.ts diff --git a/src/webview/usage/styles.css b/vscode-extension/src/webview/usage/styles.css similarity index 100% rename from src/webview/usage/styles.css rename to vscode-extension/src/webview/usage/styles.css diff --git a/src/workspaceHelpers.ts b/vscode-extension/src/workspaceHelpers.ts similarity index 100% rename from src/workspaceHelpers.ts rename to vscode-extension/src/workspaceHelpers.ts diff --git a/test/fixtures/sample-session-data/chatSessions/session-01-today.json b/vscode-extension/test/fixtures/sample-session-data/chatSessions/session-01-today.json similarity index 100% rename from test/fixtures/sample-session-data/chatSessions/session-01-today.json rename to vscode-extension/test/fixtures/sample-session-data/chatSessions/session-01-today.json diff --git a/test/fixtures/sample-session-data/chatSessions/session-02-five-days-ago.json b/vscode-extension/test/fixtures/sample-session-data/chatSessions/session-02-five-days-ago.json similarity index 100% rename from test/fixtures/sample-session-data/chatSessions/session-02-five-days-ago.json rename to vscode-extension/test/fixtures/sample-session-data/chatSessions/session-02-five-days-ago.json diff --git a/test/fixtures/sample-session-data/chatSessions/session-03-twelve-days-ago.json b/vscode-extension/test/fixtures/sample-session-data/chatSessions/session-03-twelve-days-ago.json similarity index 100% rename from test/fixtures/sample-session-data/chatSessions/session-03-twelve-days-ago.json rename to vscode-extension/test/fixtures/sample-session-data/chatSessions/session-03-twelve-days-ago.json diff --git a/test/fixtures/sample-session-data/chatSessions/session-04-twenty-days-ago.json b/vscode-extension/test/fixtures/sample-session-data/chatSessions/session-04-twenty-days-ago.json similarity index 100% rename from test/fixtures/sample-session-data/chatSessions/session-04-twenty-days-ago.json rename to vscode-extension/test/fixtures/sample-session-data/chatSessions/session-04-twenty-days-ago.json diff --git a/test/fixtures/sample-session-data/chatSessions/session-05-twenty-seven-days-ago.json b/vscode-extension/test/fixtures/sample-session-data/chatSessions/session-05-twenty-seven-days-ago.json similarity index 100% rename from test/fixtures/sample-session-data/chatSessions/session-05-twenty-seven-days-ago.json rename to vscode-extension/test/fixtures/sample-session-data/chatSessions/session-05-twenty-seven-days-ago.json diff --git a/test/integration/backend.test.ts b/vscode-extension/test/integration/backend.test.ts similarity index 100% rename from test/integration/backend.test.ts rename to vscode-extension/test/integration/backend.test.ts diff --git a/test/integration/extension.test.ts b/vscode-extension/test/integration/extension.test.ts similarity index 100% rename from test/integration/extension.test.ts rename to vscode-extension/test/integration/extension.test.ts diff --git a/test/unit/azureResourceService.test.ts b/vscode-extension/test/unit/azureResourceService.test.ts similarity index 100% rename from test/unit/azureResourceService.test.ts rename to vscode-extension/test/unit/azureResourceService.test.ts diff --git a/test/unit/backend-blobUploadService.test.ts b/vscode-extension/test/unit/backend-blobUploadService.test.ts similarity index 100% rename from test/unit/backend-blobUploadService.test.ts rename to vscode-extension/test/unit/backend-blobUploadService.test.ts diff --git a/test/unit/backend-cache-integration.test.ts b/vscode-extension/test/unit/backend-cache-integration.test.ts similarity index 100% rename from test/unit/backend-cache-integration.test.ts rename to vscode-extension/test/unit/backend-cache-integration.test.ts diff --git a/test/unit/backend-commands.test.ts b/vscode-extension/test/unit/backend-commands.test.ts similarity index 100% rename from test/unit/backend-commands.test.ts rename to vscode-extension/test/unit/backend-commands.test.ts diff --git a/test/unit/backend-configPanel-webview.test.ts b/vscode-extension/test/unit/backend-configPanel-webview.test.ts similarity index 100% rename from test/unit/backend-configPanel-webview.test.ts rename to vscode-extension/test/unit/backend-configPanel-webview.test.ts diff --git a/test/unit/backend-configPanel.test.ts b/vscode-extension/test/unit/backend-configPanel.test.ts similarity index 100% rename from test/unit/backend-configPanel.test.ts rename to vscode-extension/test/unit/backend-configPanel.test.ts diff --git a/test/unit/backend-configurationFlow.test.ts b/vscode-extension/test/unit/backend-configurationFlow.test.ts similarity index 100% rename from test/unit/backend-configurationFlow.test.ts rename to vscode-extension/test/unit/backend-configurationFlow.test.ts diff --git a/test/unit/backend-configurator.test.ts b/vscode-extension/test/unit/backend-configurator.test.ts similarity index 100% rename from test/unit/backend-configurator.test.ts rename to vscode-extension/test/unit/backend-configurator.test.ts diff --git a/test/unit/backend-copyConfig.test.ts b/vscode-extension/test/unit/backend-copyConfig.test.ts similarity index 100% rename from test/unit/backend-copyConfig.test.ts rename to vscode-extension/test/unit/backend-copyConfig.test.ts diff --git a/test/unit/backend-dataPlaneService.test.ts b/vscode-extension/test/unit/backend-dataPlaneService.test.ts similarity index 100% rename from test/unit/backend-dataPlaneService.test.ts rename to vscode-extension/test/unit/backend-dataPlaneService.test.ts diff --git a/test/unit/backend-displayNames.test.ts b/vscode-extension/test/unit/backend-displayNames.test.ts similarity index 100% rename from test/unit/backend-displayNames.test.ts rename to vscode-extension/test/unit/backend-displayNames.test.ts diff --git a/test/unit/backend-facade-helpers.test.ts b/vscode-extension/test/unit/backend-facade-helpers.test.ts similarity index 100% rename from test/unit/backend-facade-helpers.test.ts rename to vscode-extension/test/unit/backend-facade-helpers.test.ts diff --git a/test/unit/backend-facade-methods.test.ts b/vscode-extension/test/unit/backend-facade-methods.test.ts similarity index 100% rename from test/unit/backend-facade-methods.test.ts rename to vscode-extension/test/unit/backend-facade-methods.test.ts diff --git a/test/unit/backend-facade-query.test.ts b/vscode-extension/test/unit/backend-facade-query.test.ts similarity index 100% rename from test/unit/backend-facade-query.test.ts rename to vscode-extension/test/unit/backend-facade-query.test.ts diff --git a/test/unit/backend-facade-rollups.test.ts b/vscode-extension/test/unit/backend-facade-rollups.test.ts similarity index 100% rename from test/unit/backend-facade-rollups.test.ts rename to vscode-extension/test/unit/backend-facade-rollups.test.ts diff --git a/test/unit/backend-identity.test.ts b/vscode-extension/test/unit/backend-identity.test.ts similarity index 100% rename from test/unit/backend-identity.test.ts rename to vscode-extension/test/unit/backend-identity.test.ts diff --git a/test/unit/backend-integration.test.ts b/vscode-extension/test/unit/backend-integration.test.ts similarity index 100% rename from test/unit/backend-integration.test.ts rename to vscode-extension/test/unit/backend-integration.test.ts diff --git a/test/unit/backend-queryService.test.ts b/vscode-extension/test/unit/backend-queryService.test.ts similarity index 100% rename from test/unit/backend-queryService.test.ts rename to vscode-extension/test/unit/backend-queryService.test.ts diff --git a/test/unit/backend-redaction.test.ts b/vscode-extension/test/unit/backend-redaction.test.ts similarity index 100% rename from test/unit/backend-redaction.test.ts rename to vscode-extension/test/unit/backend-redaction.test.ts diff --git a/test/unit/backend-rollups.test.ts b/vscode-extension/test/unit/backend-rollups.test.ts similarity index 100% rename from test/unit/backend-rollups.test.ts rename to vscode-extension/test/unit/backend-rollups.test.ts diff --git a/test/unit/backend-settings.test.ts b/vscode-extension/test/unit/backend-settings.test.ts similarity index 100% rename from test/unit/backend-settings.test.ts rename to vscode-extension/test/unit/backend-settings.test.ts diff --git a/test/unit/backend-sharingProfile.test.ts b/vscode-extension/test/unit/backend-sharingProfile.test.ts similarity index 100% rename from test/unit/backend-sharingProfile.test.ts rename to vscode-extension/test/unit/backend-sharingProfile.test.ts diff --git a/test/unit/backend-storageTables.test.ts b/vscode-extension/test/unit/backend-storageTables.test.ts similarity index 100% rename from test/unit/backend-storageTables.test.ts rename to vscode-extension/test/unit/backend-storageTables.test.ts diff --git a/test/unit/backend-sync-profiles.test.ts b/vscode-extension/test/unit/backend-sync-profiles.test.ts similarity index 100% rename from test/unit/backend-sync-profiles.test.ts rename to vscode-extension/test/unit/backend-sync-profiles.test.ts diff --git a/test/unit/backend-syncService.test.ts b/vscode-extension/test/unit/backend-syncService.test.ts similarity index 100% rename from test/unit/backend-syncService.test.ts rename to vscode-extension/test/unit/backend-syncService.test.ts diff --git a/test/unit/backend-ui-messages.test.ts b/vscode-extension/test/unit/backend-ui-messages.test.ts similarity index 100% rename from test/unit/backend-ui-messages.test.ts rename to vscode-extension/test/unit/backend-ui-messages.test.ts diff --git a/test/unit/backend-utilityService.test.ts b/vscode-extension/test/unit/backend-utilityService.test.ts similarity index 100% rename from test/unit/backend-utilityService.test.ts rename to vscode-extension/test/unit/backend-utilityService.test.ts diff --git a/test/unit/credentialService.test.ts b/vscode-extension/test/unit/credentialService.test.ts similarity index 100% rename from test/unit/credentialService.test.ts rename to vscode-extension/test/unit/credentialService.test.ts diff --git a/test/unit/logging-redaction.test.ts b/vscode-extension/test/unit/logging-redaction.test.ts similarity index 100% rename from test/unit/logging-redaction.test.ts rename to vscode-extension/test/unit/logging-redaction.test.ts diff --git a/test/unit/sessionParser-integration.test.ts b/vscode-extension/test/unit/sessionParser-integration.test.ts similarity index 100% rename from test/unit/sessionParser-integration.test.ts rename to vscode-extension/test/unit/sessionParser-integration.test.ts diff --git a/test/unit/sessionParser.test.ts b/vscode-extension/test/unit/sessionParser.test.ts similarity index 100% rename from test/unit/sessionParser.test.ts rename to vscode-extension/test/unit/sessionParser.test.ts diff --git a/test/unit/utils-dayKeys.test.ts b/vscode-extension/test/unit/utils-dayKeys.test.ts similarity index 100% rename from test/unit/utils-dayKeys.test.ts rename to vscode-extension/test/unit/utils-dayKeys.test.ts diff --git a/test/unit/utils-errors.test.ts b/vscode-extension/test/unit/utils-errors.test.ts similarity index 100% rename from test/unit/utils-errors.test.ts rename to vscode-extension/test/unit/utils-errors.test.ts diff --git a/test/unit/utils-html.test.ts b/vscode-extension/test/unit/utils-html.test.ts similarity index 100% rename from test/unit/utils-html.test.ts rename to vscode-extension/test/unit/utils-html.test.ts diff --git a/test/unit/vscode-shim-register.ts b/vscode-extension/test/unit/vscode-shim-register.ts similarity index 100% rename from test/unit/vscode-shim-register.ts rename to vscode-extension/test/unit/vscode-shim-register.ts diff --git a/test/unit/webview-utils.test.ts b/vscode-extension/test/unit/webview-utils.test.ts similarity index 100% rename from test/unit/webview-utils.test.ts rename to vscode-extension/test/unit/webview-utils.test.ts diff --git a/tsconfig.json b/vscode-extension/tsconfig.json similarity index 100% rename from tsconfig.json rename to vscode-extension/tsconfig.json diff --git a/tsconfig.tests.json b/vscode-extension/tsconfig.tests.json similarity index 100% rename from tsconfig.tests.json rename to vscode-extension/tsconfig.tests.json diff --git a/vs-session-sample.json b/vscode-extension/vs-session-sample.json similarity index 100% rename from vs-session-sample.json rename to vscode-extension/vs-session-sample.json From 747121b97c52526c73daff8137cbadfa25a2d59f Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Tue, 24 Mar 2026 16:58:43 +0100 Subject: [PATCH 02/15] More file updates --- .github/copilot-instructions.md | 226 ++++-------------- .github/instructions/cli.instructions.md | 61 +++++ .../visualstudio-extension.instructions.md | 39 +++ .../vscode-extension.instructions.md | 148 ++++++++++++ .github/workflows/build.yml | 22 +- .github/workflows/check-toolnames.yml | 6 +- .github/workflows/ci.yml | 21 +- .github/workflows/release.yml | 19 +- .vscode/launch.json | 4 +- .vscode/tasks.json | 15 ++ AGENTS.md | 1 + build.ps1 | 115 +++++++++ cli/esbuild.js | 2 +- cli/src/commands/environmental.ts | 2 +- cli/src/commands/fluency.ts | 2 +- cli/src/commands/usage.ts | 4 +- cli/src/helpers.ts | 26 +- cli/tsconfig.json | 2 +- visualstudio-extension/.gitkeep | 0 19 files changed, 498 insertions(+), 217 deletions(-) create mode 100644 .github/instructions/cli.instructions.md create mode 100644 .github/instructions/visualstudio-extension.instructions.md create mode 100644 .github/instructions/vscode-extension.instructions.md create mode 100644 AGENTS.md create mode 100644 build.ps1 create mode 100644 visualstudio-extension/.gitkeep diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 8773ee6d..94e76b28 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,125 +1,63 @@ -# GitHub Copilot Token Tracker Extension Instructions +# GitHub Copilot Token Tracker — Repository Instructions -This document provides instructions for AI agents to effectively contribute to the "Copilot Token Tracker" VS Code extension. +This document provides top-level guidance for AI agents contributing to this repository. Detailed, folder-specific instructions live in `.github/instructions/` and are applied automatically by Copilot when you work inside those folders. -## Architecture Overview +## Repository Structure -The entire extension's logic is contained within the `CopilotTokenTracker` class in `src/extension.ts`. Its primary function is to track GitHub Copilot token usage by reading and parsing session log files. - -- **Activation**: The extension activates on VS Code startup via the `onStartupFinished` event in `package.json`. The `activate` function in `src/extension.ts` instantiates `CopilotTokenTracker`. - -- **Data Source**: The core data comes from `.json` log files generated by the GitHub Copilot Chat extension. The `getCopilotSessionFiles` method locates these files in the user's OS-specific AppData directory for VS Code (e.g., `.../Code/User/workspaceStorage/.../chatSessions` and `.../Code/User/globalStorage/emptyWindowChatSessions`). - -- **Data Flow**: - 1. A timer in the `constructor` calls `updateTokenStats()` every 5 minutes. - 2. `updateTokenStats()` calls `calculateDetailedStats()` to aggregate data. - 3. `calculateDetailedStats()` reads all session files found by `getCopilotSessionFiles()`. - 4. For each file, it calculates token counts (`estimateTokensFromSession`), interactions (`countInteractionsInSession`), and per-model usage (`getModelUsageFromSession`). - 5. Token counts are *estimated* using character-to-token ratios defined in the `tokenEstimators` class property. This is a key convention. - -- **Thinking Token Tracking**: Models that use extended thinking (e.g., Claude) produce `kind: "thinking"` response items in session logs. These are tracked separately: - - `estimateTokensFromSession` and `estimateTokensFromJsonlSession` return `{ tokens, thinkingTokens }`. The `tokens` field is the **grand total** (input + output + thinking). The `thinkingTokens` field is a **breakdown** showing what portion of the total was thinking — it is NOT subtracted from `tokens`. - - `SessionFileCache` stores `thinkingTokens` alongside `tokens`. - - `extractResponseData` separates `responseText` and `thinkingText` so the logviewer can display them independently per turn. - - `getModelUsageFromSession` does NOT separate thinking — thinking tokens are counted as `outputTokens` in the per-model breakdown. This is intentional since it keeps cost estimation simple. - - **Critical invariant**: When computing token totals for display (per-turn, per-session, per-period), always include thinking tokens. In the logviewer, `totalTokens = input + output + thinking`. In stats aggregation, `sessionData.tokens` already includes thinking. Never subtract thinking from a total. - - `CACHE_VERSION` must be bumped when changing how tokens are counted so stale caches are invalidated. +``` +/ +├── build.ps1 ← Root build orchestrator (all projects) +├── vscode-extension/ ← VS Code extension (TypeScript / Node.js) +├── cli/ ← Command-line tool (TypeScript / Node.js) +├── visualstudio-extension/ ← Visual Studio extension (C# / .NET, planned) +├── docs/ ← Shared documentation +└── .github/ + ├── copilot-instructions.md ← This file + └── instructions/ + ├── vscode-extension.instructions.md ← VS Code extension guide + ├── cli.instructions.md ← CLI guide + ├── visualstudio-extension.instructions.md ← Visual Studio extension guide + └── workflows.instructions.md ← CI/CD workflow security guide +``` -- **OpenCode Support**: The extension also reads session data from [OpenCode](https://opencode.ai), a terminal-based coding agent. OpenCode stores its data in `~/.local/share/opencode/` (Linux/macOS) or the equivalent XDG data directory. +## Sub-project Instructions - - **Dual storage backends**: OpenCode originally stored sessions as individual JSON files under `storage/session/`, `storage/message/`, and `storage/part/`. It later migrated to a SQLite database (`opencode.db`) in the same data directory. The extension supports **both** backends — it tries the SQLite DB first and falls back to JSON files. - - **SQLite reading**: The extension uses `sql.js` (a pure JS/WASM SQLite reader, no native dependencies) to read `opencode.db`. The WASM binary (`sql-wasm.wasm`) is copied to `dist/` during the esbuild step. The sql.js module is lazy-loaded and cached in `_sqlJsModule`. - - **DB schema**: The `opencode.db` database has tables `session` (id, slug, title, directory, time_created, time_updated), `message` (id, session_id, time_created, data JSON), and `part` (id, message_id, session_id, time_created, data JSON). The `data` column in `message` contains JSON with `{role, model: {providerID, modelID}, tokens: {total, input, output, reasoning, cache: {read, write}}}`. - - **Virtual path scheme**: Since the existing architecture is file-path-based, DB-stored sessions use virtual paths of the form `/opencode.db#ses_`. Detection helpers: `isOpenCodeDbSession()` checks for the `opencode.db#ses_` pattern, `getOpenCodeSessionId()` parses both virtual paths and `ses_.json` filenames. - - **Async methods**: `getOpenCodeMessagesForSession(filePath)` and `getOpenCodePartsForMessage(messageId)` are the primary data access methods — they try DB first, fall back to JSON. The OpenCode token/interaction/model methods (`getTokensFromOpenCodeSession`, `countOpenCodeInteractions`, `getOpenCodeModelUsage`) are all async. - - **`statSessionFile()`**: A helper that resolves DB virtual paths to `fs.promises.stat()` on the `opencode.db` file itself. **All `fs.promises.stat(sessionFile)` calls in loops that process session files must use `this.statSessionFile()` instead**, to avoid failures on DB virtual paths. - - **Key invariant**: When adding new code that processes session file paths (stat calls, path splitting, folder grouping), always check `isOpenCodeDbSession()` first and handle the virtual path appropriately (use `statSessionFile()` for stats, use `getOpenCodeDataDir()` for folder grouping). +| Folder | Instructions file | +|---|---| +| `vscode-extension/` | `.github/instructions/vscode-extension.instructions.md` | +| `cli/` | `.github/instructions/cli.instructions.md` | +| `visualstudio-extension/` | `.github/instructions/visualstudio-extension.instructions.md` | +| `.github/workflows/` | `.github/instructions/workflows.instructions.md` | -- **UI Components**: - 1. **Status Bar**: A `vscode.StatusBarItem` (`statusBarItem`) shows a brief summary. Its tooltip provides more detail. - 2. **Details Panel**: The `copilot-token-tracker.showDetails` command opens a `vscode.WebviewPanel`. The content for this panel is generated dynamically as an HTML string by the `getDetailsHtml` method. +## Building Everything -## Developer Workflow +Use the root orchestrator from the repo root: -- **Setup**: Run `npm install` to install dependencies. -- **Build**: Run `npm run compile` to lint and build the extension using `esbuild`. The output is a single file: `dist/extension.js`. -- **Watch Mode**: For active development, use `npm run watch`. This will automatically recompile the extension on file changes. -- **Testing/Debugging**: Press `F5` in VS Code to open the Extension Development Host. This will launch a new VS Code window with the extension running. `console.log` statements from `src/extension.ts` will appear in the Developer Tools console of this new window (Help > Toggle Developer Tools). +```powershell +./build.ps1 # build all projects +./build.ps1 -Project vscode # build VS Code extension only +./build.ps1 -Project cli # build CLI only +./build.ps1 -Project vscode -Target test # run tests +``` -**Important build guidance:** After making changes to source code or related files (TypeScript, JavaScript, JSON, or other code files used by the extension), always run `npm run compile` to validate that the project still builds and lints cleanly before opening a pull request or releasing. You do not need to run the full compile step for documentation-only changes (Markdown files), but you should run it after any edits that touch source, configuration, or JSON data files. +Individual project builds: +```bash +cd vscode-extension && npm run compile # VS Code extension +cd cli && npm run build # CLI +``` ## Development Guidelines -- **Minimal Changes**: Only modify files that are directly needed for the actual changes being implemented. Avoid touching unrelated files, configuration files, or dependencies unless absolutely necessary for the feature or fix. -- **Focused Modifications**: Make surgical, precise changes that address the specific requirements without affecting other functionality. -- **Preserve Existing Structure**: Maintain the existing code organization and file structure. Don't refactor or reorganize code unless it's essential for the task. - -## Logging Best Practices - -**CRITICAL**: Do NOT add debug logging statements like `this.log('[DEBUG] message')` or `console.log('[DEBUG] ...')` for troubleshooting during development. This approach has been found to flood the output channel and cause messages to disappear. - -### Why DEBUG Logs Are Problematic - -**Extension Host Flooding**: When DEBUG log statements are added to frequently-called methods in `extension.ts` (e.g., cache lookups, file processing loops, webview message handlers), they can generate hundreds of log entries per operation. VS Code's OutputChannel has a buffer limit, and excessive logging causes older messages to be pushed out and lost. This was observed when: -- Cache hit/miss logging was added to session file processing -- JSONL content reference counting was logged for each file -- Webview message handlers logged every incoming message with full JSON payloads -- Session data was logged with repository counts on each webview update - -**Symptom**: After operations like clearing the cache, expected log messages would disappear from the Output panel because they were pushed out of the buffer by DEBUG logs. - -### Extension vs Webview Logging - -These are two completely separate logging systems: - -| Context | Method | Destination | Visibility | -|---------|--------|-------------|------------| -| Extension (`src/extension.ts`) | `this.log()`, `this.warn()`, `this.error()` | VS Code Output Channel | Output panel → "Copilot Token Tracker" | -| Webview (`src/webview/*/main.ts`) | `console.log()` | Browser DevTools | Help → Toggle Developer Tools in webview | - -- Clearing the output channel (`outputChannel.clear()`) does NOT affect webview console logs -- Webview console.log statements do NOT appear in the Output panel -- DEBUG prefixes in webviews were removed to maintain consistency with extension guidelines - -### Best Practices - -- **Use Existing Logs**: The extension already has comprehensive logging. Review existing log statements before adding new ones. -- **Minimal Logging**: Only add logging if absolutely necessary for a new feature. Keep messages concise. -- **Remove Debug Logs**: Any temporary debug logging added during development MUST be removed before committing. -- **Log Methods**: Use appropriate severity: - - `log(message)` - Standard informational messages - - `warn(message)` - Warnings or recoverable errors - - `error(message)` - Critical errors -- **No Debug Prefixes**: Avoid `[DEBUG]` markers. The log output is already timestamped. -- **Avoid High-Frequency Logging**: Never log inside loops that process many items (files, sessions, cache entries). - -### Debugging Without Logs - -Prefer VS Code's debugger with breakpoints rather than adding log statements: -1. Press `F5` to launch Extension Development Host -2. Set breakpoints in `src/extension.ts` -3. Use the Debug Console to inspect variables - -## Key Files & Conventions - -- **`src/extension.ts`**: The single source file containing all logic. - - `CopilotTokenTracker`: The main class. - - `calculateDetailedStats()`: The primary data aggregation method. - - `getDetailsHtml()`: The method responsible for rendering the webview's HTML content. All styling is inlined within this method's template string. -- **`src/README.md`**: **IMPORTANT**: Contains detailed instructions for updating the JSON data files. Always consult this file when updating tokenEstimators.json or modelPricing.json. It includes structure definitions, update procedures, and current pricing information. -- **`src/tokenEstimators.json`**: Character-to-token ratio estimators for different AI models. See `src/README.md` for update instructions. -- **`src/modelPricing.json`**: Model pricing data with input/output costs per million tokens. Includes metadata about pricing sources and last update date. See `src/README.md` for detailed update instructions and current pricing sources. -- **`docs/FLUENCY-LEVELS.md`**: Documents the scoring rules for the Copilot Fluency Score dashboard (4 stages, 6 categories, thresholds, and boosters). **Keep this file up to date** when changing the `calculateMaturityScores()` method in `src/extension.ts`. -- **`package.json`**: Defines activation events, commands, and build scripts. -- **`esbuild.js`**: The build script that bundles the TypeScript source and JSON data files. Also copies `sql-wasm.wasm` from `node_modules/sql.js/dist/` to `dist/` for OpenCode SQLite support. -- **`src/types/json.d.ts`**: Type declarations for JSON module imports and the `sql.js` module. +- **Minimal Changes**: Only modify files directly needed for the task. Avoid touching unrelated files. +- **Focused Modifications**: Make surgical, precise changes without affecting other functionality. +- **Preserve Existing Structure**: Don't refactor or reorganize unless essential for the task. ## Coding Agent Data Sources When running as the GitHub Copilot Coding Agent (bootstrapped via `.github/workflows/copilot-setup-steps.yml`), additional data files may be available in the workspace root. These are downloaded from Azure Storage during the agent's setup phase and are **not** present in local development. -- **`./session-logs/`**: Raw Copilot Chat session log files (last 7 days) from Azure Blob Storage. Contains full conversation history including prompts, responses, and model info. -- **`./usage-data/usage-agg-daily.json`**: Aggregated daily token usage data (last 30 days) from Azure Table Storage. Contains per-day, per-model, per-workspace token counts and interaction counts. +- **`./session-logs/`**: Raw Copilot Chat session log files (last 7 days) from Azure Blob Storage. +- **`./usage-data/usage-agg-daily.json`**: Aggregated daily token usage data (last 30 days) from Azure Table Storage. These files are only available when the repository's `copilot` GitHub environment has `COPILOT_STORAGE_ACCOUNT` configured. See the `session-log-data` skill in `.github/skills/session-log-data/SKILL.md` for data schemas, analysis examples, and cost estimation. @@ -143,84 +81,20 @@ Do not enter retry loops trying to capture terminal output. These patterns waste ### What to do instead -1. **Use `npm` scripts for standard operations.** The project defines scripts for common tasks: +1. **Use `npm` scripts for standard operations** (from inside `vscode-extension/`): - `npm run compile` — lint + build - `npm run compile-tests` — compile test files to `out/` - - `npm run test:node` — compile + run a single test file + - `npm run test:node` — compile + run unit tests - `npm run test:coverage` — compile + run tests with coverage thresholds -2. **Use `get_errors` to validate compilation.** After edits, call `get_errors` on the changed files instead of running `tsc` in the terminal. This is more reliable than parsing terminal output. +2. **Use `get_errors` to validate compilation.** After edits, call `get_errors` on the changed files instead of running `tsc` in the terminal. -3. **Run tests in small batches.** Instead of running all 25+ test files in one command, run one file at a time: +3. **Run tests in small batches.** Instead of running all test files in one command, run one file at a time: ```bash + cd vscode-extension node --require ./out/test/unit/vscode-shim-register.js --test out/test/unit/sessionParser.test.js ``` - Small commands are more likely to return output before the capture times out. - -4. **Accept a single run.** If a test command runs without returning output, do **not** re-run it. Instead, move on and note that the tests were executed but output was not captured. The user can verify locally. - -5. **Use `runTests` tool when available.** Prefer the dedicated test-runner tool over terminal commands for running tests, though note it may not support the Node.js built-in test runner (`node --test`). - -6. **Write output to the workspace (not `/tmp/`).** If you must capture output to a file, write it inside the workspace (e.g., `test-results.txt` in the repo root) where `read_file` can reliably access it. Add the file to `.gitignore` if it doesn't already match. Clean it up after reading. - -## Webview Navigation Buttons - -To maintain a consistent, VS Code-native look across all webview panels (Details, Chart, Usage Analysis, Diagnostics), use the VS Code Webview UI Toolkit for top-level navigation buttons. - -- **Use `vscode-button`**: Prefer the toolkit button component for header navigation controls instead of custom ` + + + + + + + + + + + + + + diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs new file mode 100644 index 00000000..7130e414 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using System.Text.Json.Serialization; + +namespace CopilotTokenTracker.Data +{ + // ── Top-level payload sent to the webview ─────────────────────────────────── + + internal sealed class DetailedStats + { + [JsonPropertyName("today")] + public PeriodStats Today { get; set; } = new PeriodStats(); + + [JsonPropertyName("month")] + public PeriodStats Month { get; set; } = new PeriodStats(); + + [JsonPropertyName("lastMonth")] + public PeriodStats LastMonth { get; set; } = new PeriodStats(); + + [JsonPropertyName("last30Days")] + public PeriodStats Last30Days { get; set; } = new PeriodStats(); + + [JsonPropertyName("lastUpdated")] + public string LastUpdated { get; set; } = string.Empty; + + [JsonPropertyName("backendConfigured")] + public bool BackendConfigured { get; set; } + } + + // ── Per-period aggregated statistics ──────────────────────────────────────── + + internal sealed class PeriodStats + { + [JsonPropertyName("tokens")] + public long Tokens { get; set; } + + [JsonPropertyName("thinkingTokens")] + public long ThinkingTokens { get; set; } + + [JsonPropertyName("estimatedTokens")] + public long EstimatedTokens { get; set; } + + [JsonPropertyName("actualTokens")] + public long ActualTokens { get; set; } + + [JsonPropertyName("sessions")] + public int Sessions { get; set; } + + [JsonPropertyName("avgInteractionsPerSession")] + public double AvgInteractionsPerSession { get; set; } + + [JsonPropertyName("avgTokensPerSession")] + public double AvgTokensPerSession { get; set; } + + [JsonPropertyName("modelUsage")] + public Dictionary ModelUsage { get; set; } = new Dictionary(); + + [JsonPropertyName("editorUsage")] + public Dictionary EditorUsage { get; set; } = new Dictionary(); + + [JsonPropertyName("co2")] + public double Co2 { get; set; } + + [JsonPropertyName("treesEquivalent")] + public double TreesEquivalent { get; set; } + + [JsonPropertyName("waterUsage")] + public double WaterUsage { get; set; } + + [JsonPropertyName("estimatedCost")] + public double EstimatedCost { get; set; } + } + + // ── Per-model token breakdown ──────────────────────────────────────────────── + + internal sealed class ModelStats + { + [JsonPropertyName("inputTokens")] + public long InputTokens { get; set; } + + [JsonPropertyName("outputTokens")] + public long OutputTokens { get; set; } + } + + // ── Per-editor token breakdown ─────────────────────────────────────────────── + + internal sealed class EditorStats + { + [JsonPropertyName("tokens")] + public long Tokens { get; set; } + + [JsonPropertyName("sessions")] + public int Sessions { get; set; } + } + + // ── Internal-only parsed session record ───────────────────────────────────── + + internal sealed class ParsedSession + { + public string FilePath { get; set; } = string.Empty; + public System.DateTime Date { get; set; } + public long Tokens { get; set; } + public int Interactions { get; set; } + public Dictionary ModelUsage { get; set; } + = new Dictionary(System.StringComparer.OrdinalIgnoreCase); + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs new file mode 100644 index 00000000..6fe5911b --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; + +namespace CopilotTokenTracker.Data +{ + /// + /// Discovers Visual Studio Copilot Chat session binary files on the local machine. + /// + /// Strategy (mirrors vscode-extension/src/visualstudio.ts): + /// 1. Parse recent VS Copilot log files in %LOCALAPPDATA%\Temp\VSGitHubCopilotLogs\ + /// for "Updating session file '...'" lines to find active paths quickly. + /// 2. Walk the filesystem under %USERPROFILE% and common code roots, looking for + /// .vs\{solution}\copilot-chat\{hash}\sessions\ directories. + /// + internal static class SessionDiscovery + { + private static readonly HashSet SkipDirNames = new HashSet(StringComparer.OrdinalIgnoreCase) + { + "node_modules", ".git", ".github", "bin", "obj", "out", "dist", "build", + "target", "packages", "vendor", "__pycache__", ".tox", ".venv", "venv", + "env", "Windows", "Program Files", "Program Files (x86)", "ProgramData", + "$Recycle.Bin", "System Volume Information", "Recovery", + }; + + private static readonly Regex LogLinePattern = + new Regex(@"Updating session file '([^']+)'", RegexOptions.Compiled); + + // ── Public API ───────────────────────────────────────────────────────── + + /// Returns deduplicated paths of all discoverable VS session files. + public static List DiscoverSessions() + { + var seen = new HashSet(StringComparer.OrdinalIgnoreCase); + var results = new List(); + + DiscoverFromLogs(seen, results); + DiscoverFromFilesystem(seen, results); + + return results; + } + + // ── Log-based discovery ──────────────────────────────────────────────── + + private static void DiscoverFromLogs(HashSet seen, List results) + { + var localAppData = Environment.GetEnvironmentVariable("LOCALAPPDATA") + ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + "AppData", "Local"); + + var logDir = Path.Combine(localAppData, "Temp", "VSGitHubCopilotLogs"); + if (!Directory.Exists(logDir)) { return; } + + foreach (var logFile in SafeEnumerateFiles(logDir, "*.chat.log")) + { + try + { + foreach (var line in File.ReadLines(logFile)) + { + var m = LogLinePattern.Match(line); + if (!m.Success) { continue; } + + var sessionPath = m.Groups[1].Value; + if (!seen.Add(sessionPath)) { continue; } + if (File.Exists(sessionPath)) + { + results.Add(sessionPath); + } + } + } + catch { /* skip unreadable log files */ } + } + } + + // ── Filesystem walk ──────────────────────────────────────────────────── + + private static void DiscoverFromFilesystem(HashSet seen, List results) + { + var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + var roots = new List { home }; + + // Well-known code root conventions on Windows + foreach (var drive in new[] { "C", "D" }) + { + foreach (var folder in new[] { "repos", "code", "src", "projects", "dev" }) + { + var p = $"{drive}:\\{folder}"; + if (Directory.Exists(p)) { roots.Add(p); } + } + } + + foreach (var root in roots) + { + var maxDepth = root == home ? 7 : 5; + ScanForVsDirs(root, 0, maxDepth, seen, results); + } + } + + private static void ScanForVsDirs( + string dir, int depth, int maxDepth, + HashSet seen, List results) + { + if (depth > maxDepth) { return; } + + foreach (var entry in SafeEnumerateDirectories(dir)) + { + var name = Path.GetFileName(entry); + + if (SkipDirNames.Contains(name)) { continue; } + if (name.StartsWith(".", StringComparison.Ordinal) && name != ".vs") { continue; } + + if (name == ".vs") + { + FindSessionsUnderVsDir(entry, seen, results); + } + else + { + ScanForVsDirs(entry, depth + 1, maxDepth, seen, results); + } + } + } + + private static void FindSessionsUnderVsDir( + string vsDir, HashSet seen, List results) + { + // .vs/{solution-name}/copilot-chat/{hash}/sessions/ + foreach (var solutionDir in SafeEnumerateDirectories(vsDir)) + { + var copilotChatDir = Path.Combine(solutionDir, "copilot-chat"); + if (!Directory.Exists(copilotChatDir)) { continue; } + + foreach (var hashDir in SafeEnumerateDirectories(copilotChatDir)) + { + var sessionsDir = Path.Combine(hashDir, "sessions"); + if (!Directory.Exists(sessionsDir)) { continue; } + + foreach (var sessionFile in SafeEnumerateFiles(sessionsDir)) + { + if (!seen.Add(sessionFile)) { continue; } + results.Add(sessionFile); + } + } + } + } + + // ── Helpers ──────────────────────────────────────────────────────────── + + private static IEnumerable SafeEnumerateDirectories(string path) + { + try { return Directory.EnumerateDirectories(path); } + catch { return Array.Empty(); } + } + + private static IEnumerable SafeEnumerateFiles(string path, string pattern = "*") + { + try { return Directory.EnumerateFiles(path, pattern); } + catch { return Array.Empty(); } + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs new file mode 100644 index 00000000..f40dbb10 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs @@ -0,0 +1,225 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using MessagePack; + +namespace CopilotTokenTracker.Data +{ + /// + /// Parses Visual Studio Copilot Chat session binary files (MessagePack stream format). + /// + /// File layout (mirrors vscode-extension/src/visualstudio.ts): + /// Byte 0 : version (0x01) — skip + /// Byte 1… : stream of MessagePack objects + /// + /// Object 0 : header → { TimeCreated: string, TimeUpdated: string, ConversationMode: string } + /// Object 1 : request → [ version, { Content: […], Model: { ModelId: string } } ] + /// Object 2 : response → [ version, { Content: […], Model: [version, { Id: string }] } ] + /// Object 3 : request → … (odd = request, even ≥2 = response) + /// + /// Content items are: [ typeTag, { Content: string } ] + /// + internal static class SessionParser + { + // ── Public API ───────────────────────────────────────────────────────── + + /// + /// Reads the MessagePack stream from and returns + /// all decoded objects. Returns an empty list on any read or decode error. + /// + public static List DecodeSessionFile(string filePath) + { + try + { + var bytes = File.ReadAllBytes(filePath); + if (bytes.Length < 2) { return new List(); } + + // Skip the single version-prefix byte + var mem = new ReadOnlyMemory(bytes, 1, bytes.Length - 1); + var reader = new MessagePackReader(mem); + var result = new List(); + + while (!reader.End) + { + result.Add(ReadValue(ref reader)); + } + + return result; + } + catch + { + return new List(); + } + } + + /// Returns the number of user interaction turns (odd-indexed objects). + public static int CountInteractions(List objects) + { + var count = 0; + for (var i = 1; i < objects.Count; i++) + { + if (i % 2 == 1) { count++; } + } + return count; + } + + /// + /// Extracts ISO-8601 TimeCreated / TimeUpdated strings from the session header. + /// + public static (string? Created, string? Updated) GetTimestamps(List objects) + { + if (objects.Count == 0) { return (null, null); } + + if (objects[0] is not Dictionary header) + { + return (null, null); + } + + return ( + header.TryGetValue("TimeCreated", out var c) ? c as string : null, + header.TryGetValue("TimeUpdated", out var u) ? u as string : null + ); + } + + /// + /// Returns the model identifier for the given message's inner data dictionary. + /// Requests store it at Model.ModelId; responses store it at Model[1].Id. + /// + public static string? GetModelId(Dictionary msgData, bool isRequest) + { + if (isRequest) + { + if (msgData.TryGetValue("Model", out var modelObj) + && modelObj is Dictionary model + && model.TryGetValue("ModelId", out var idObj)) + { + return idObj as string; + } + } + else + { + // Response: Model is [version, { Id, Name, … }] + if (msgData.TryGetValue("Model", out var modelObj) + && modelObj is object?[] modelArr + && modelArr.Length >= 2 + && modelArr[1] is Dictionary modelInfo + && modelInfo.TryGetValue("Id", out var idObj)) + { + return idObj as string; + } + } + + return null; + } + + /// + /// Concatenates all text segments from a VS Copilot Content array. + /// Content arrays have the shape: [ [typeTag, { Content: string }], … ] + /// + public static string ExtractText(object? contentObj) + { + if (contentObj is not object?[] arr) { return string.Empty; } + + var sb = new StringBuilder(); + + foreach (var c in arr) + { + Dictionary? inner = null; + + if (c is object?[] tuple && tuple.Length >= 2) + { + inner = tuple[1] as Dictionary; + } + + if (inner == null) { continue; } + + if (inner.TryGetValue("Content", out var textObj) && textObj is string text && text.Length > 0) + { + if (sb.Length > 0) { sb.Append('\n'); } + sb.Append(text); + } + } + + return sb.ToString(); + } + + /// + /// Gets the inner data dictionary [ version, dict ] → dict for a message object. + /// Returns null if the structure doesn't match. + /// + public static Dictionary? GetMessageData(object? msgObj) + { + if (msgObj is object?[] arr && arr.Length >= 2) + { + return arr[1] as Dictionary; + } + + return null; + } + + // ── Low-level MessagePack reader ─────────────────────────────────────── + + private static object? ReadValue(ref MessagePackReader reader) + { + switch (reader.NextMessagePackType) + { + case MessagePackType.Map: + { + var count = reader.ReadMapHeader(); + var dict = new Dictionary(count); + + for (var i = 0; i < count; i++) + { + var key = ReadValue(ref reader)?.ToString() ?? string.Empty; + var val = ReadValue(ref reader); + dict[key] = val; + } + + return dict; + } + + case MessagePackType.Array: + { + var count = reader.ReadArrayHeader(); + var arr = new object?[count]; + + for (var i = 0; i < count; i++) + { + arr[i] = ReadValue(ref reader); + } + + return arr; + } + + case MessagePackType.String: + return reader.ReadString(); + + case MessagePackType.Integer: + return reader.ReadInt64(); + + case MessagePackType.Float: + return reader.ReadDouble(); + + case MessagePackType.Boolean: + return reader.ReadBoolean(); + + case MessagePackType.Nil: + reader.ReadNil(); + return null; + + case MessagePackType.Binary: + reader.ReadBytes(); // consume and discard — not used in session analysis + return null; + + case MessagePackType.Extension: + reader.ReadExtensionFormat(); + return null; + + default: + reader.Skip(); + return null; + } + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs new file mode 100644 index 00000000..d69c1d26 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs @@ -0,0 +1,195 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace CopilotTokenTracker.Data +{ + /// + /// Discovers all local VS Copilot Chat sessions, parses them, and aggregates the + /// token usage into a object ready for the webview. + /// + internal static class StatsBuilder + { + // Environmental-impact constants (kept consistent with the VS Code extension) + private const double Co2GramsPerThousandTokens = 0.2; + private const double WaterMlPerThousandTokens = 0.3; + private const double Co2GramsAbsorbedPerTreePerYear = 21_000.0; + + // ── Public API ───────────────────────────────────────────────────────── + + public static Task BuildAsync() + => Task.Run(Build); + + // ── Core build logic ─────────────────────────────────────────────────── + + private static DetailedStats Build() + { + var sessionFiles = SessionDiscovery.DiscoverSessions(); + + // Parse in parallel for speed; null = unreadable / no data + var sessions = sessionFiles + .AsParallel() + .Select(ParseSession) + .Where(s => s != null) + .ToList(); + + var now = DateTime.UtcNow; + var todayStart = now.Date; + var monthStart = new DateTime(now.Year, now.Month, 1, 0, 0, 0, DateTimeKind.Utc); + var lastMonStart = monthStart.AddMonths(-1); + var minus30Days = now.AddDays(-30); + + return new DetailedStats + { + Today = Aggregate(sessions, todayStart, now), + Month = Aggregate(sessions, monthStart, now), + LastMonth = Aggregate(sessions, lastMonStart, monthStart), + Last30Days = Aggregate(sessions, minus30Days, now), + LastUpdated = now.ToString("o"), + BackendConfigured = false, + }; + } + + // ── Session parsing ──────────────────────────────────────────────────── + + private static ParsedSession? ParseSession(string filePath) + { + try + { + var objects = SessionParser.DecodeSessionFile(filePath); + if (objects.Count == 0) { return null; } + + var (created, _) = SessionParser.GetTimestamps(objects); + if (created == null) { return null; } + + if (!DateTime.TryParse(created, null, + System.Globalization.DateTimeStyles.RoundtripKind, out var sessionDate)) + { + return null; + } + + var modelUsage = new Dictionary(StringComparer.OrdinalIgnoreCase); + var totalTokens = 0L; + var interactions = 0; + + for (var i = 1; i < objects.Count; i++) + { + var msgData = SessionParser.GetMessageData(objects[i]); + if (msgData == null) { continue; } + + var isRequest = i % 2 == 1; + if (isRequest) { interactions++; } + + _ = msgData.TryGetValue("Content", out var contentObj); + var text = SessionParser.ExtractText(contentObj); + if (string.IsNullOrEmpty(text)) { continue; } + + var model = SessionParser.GetModelId(msgData, isRequest) ?? "unknown"; + var tokens = TokenEstimator.Estimate(text, model); + totalTokens += tokens; + + if (!modelUsage.TryGetValue(model, out var existing)) + { + existing = (0L, 0L); + } + + modelUsage[model] = isRequest + ? (existing.Input + tokens, existing.Output) + : (existing.Input, existing.Output + tokens); + } + + return new ParsedSession + { + FilePath = filePath, + Date = sessionDate, + Tokens = totalTokens, + Interactions = interactions, + ModelUsage = modelUsage, + }; + } + catch + { + return null; + } + } + + // ── Aggregation ──────────────────────────────────────────────────────── + + private static PeriodStats Aggregate( + List sessions, DateTime from, DateTime to) + { + var inPeriod = sessions + .Where(s => s != null && s!.Date >= from && s.Date < to) + .ToList(); + + var totalTokens = inPeriod.Sum(s => s!.Tokens); + var totalInteractions = inPeriod.Sum(s => s!.Interactions); + var totalSessions = inPeriod.Count; + + // Merge per-model usage across all sessions in the period + var merged = new Dictionary(StringComparer.OrdinalIgnoreCase); + + foreach (var s in inPeriod) + { + foreach (var kvp in s!.ModelUsage) + { + if (!merged.TryGetValue(kvp.Key, out var existing)) + { + existing = (0L, 0L); + } + merged[kvp.Key] = (existing.Input + kvp.Value.Input, + existing.Output + kvp.Value.Output); + } + } + + var co2 = totalTokens / 1_000.0 * Co2GramsPerThousandTokens; + var water = totalTokens / 1_000.0 * WaterMlPerThousandTokens; + + return new PeriodStats + { + Tokens = totalTokens, + ThinkingTokens = 0L, + EstimatedTokens = totalTokens, + ActualTokens = 0L, + Sessions = totalSessions, + AvgInteractionsPerSession = totalSessions > 0 + ? (double)totalInteractions / totalSessions + : 0.0, + AvgTokensPerSession = totalSessions > 0 + ? (double)totalTokens / totalSessions + : 0.0, + ModelUsage = BuildModelUsageDict(merged), + EditorUsage = new Dictionary + { + ["Visual Studio"] = new EditorStats + { + Tokens = totalTokens, + Sessions = totalSessions, + }, + }, + Co2 = co2, + TreesEquivalent = co2 / Co2GramsAbsorbedPerTreePerYear, + WaterUsage = water, + EstimatedCost = 0.0, + }; + } + + private static Dictionary BuildModelUsageDict( + Dictionary merged) + { + var dict = new Dictionary(merged.Count, StringComparer.OrdinalIgnoreCase); + + foreach (var kvp in merged) + { + dict[kvp.Key] = new ModelStats + { + InputTokens = kvp.Value.Input, + OutputTokens = kvp.Value.Output, + }; + } + + return dict; + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/TokenEstimator.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/TokenEstimator.cs new file mode 100644 index 00000000..ebdd99ea --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/TokenEstimator.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; + +namespace CopilotTokenTracker.Data +{ + /// + /// Estimates token counts from plain text using character-to-token ratios. + /// + /// Different model families tokenise text at different densities. + /// Unknown models fall back to the industry-standard 4 chars ≈ 1 token. + /// + /// Mirrors the logic in vscode-extension/src/tokenEstimation.ts. + /// + internal static class TokenEstimator + { + // Approximate characters-per-token by model family (ascending priority order). + // Substring-matched case-insensitively against the full model id. + private static readonly (string Key, double Ratio)[] Ratios = + { + ("gpt-3.5", 3.8), + ("gpt-4o", 4.0), + ("gpt-4", 3.8), + ("o1", 4.0), + ("o3", 4.0), + ("claude-3-7", 3.6), + ("claude-3-5", 3.6), + ("claude-3", 3.6), + ("claude", 3.5), + ("gemini", 4.2), + }; + + private const double DefaultRatio = 4.0; + + /// + /// Returns the estimated token count for + /// with the named (may be null or empty). + /// + public static long Estimate(string text, string? modelId = null) + { + if (string.IsNullOrEmpty(text)) { return 0L; } + + var ratio = GetRatio(modelId); + return (long)Math.Ceiling(text.Length / ratio); + } + + // ── Helpers ──────────────────────────────────────────────────────────── + + private static double GetRatio(string? modelId) + { + if (string.IsNullOrEmpty(modelId)) { return DefaultRatio; } + + foreach (var (key, ratio) in Ratios) + { + if (modelId!.IndexOf(key, StringComparison.OrdinalIgnoreCase) >= 0) + { + return ratio; + } + } + + return DefaultRatio; + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml new file mode 100644 index 00000000..60a9933f --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs new file mode 100644 index 00000000..61a9735e --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs @@ -0,0 +1,151 @@ +using System; +using System.IO; +using System.Reflection; +using System.Text.Json; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using CopilotTokenTracker.Data; +using CopilotTokenTracker.WebBridge; +using Microsoft.VisualStudio.Shell; +using Microsoft.Web.WebView2.Core; + +namespace CopilotTokenTracker.ToolWindow +{ + public partial class TokenTrackerControl : UserControl + { + private bool _webViewReady; + private string _currentView = "details"; + + public TokenTrackerControl() + { + InitializeComponent(); + Loaded += OnLoaded; + } + + // ── Initialisation ────────────────────────────────────────────────────── + + private void OnLoaded(object sender, RoutedEventArgs e) + { + Loaded -= OnLoaded; + // Use JoinableTaskFactory.RunAsync (VS threading best practice, avoids VSTHRD100/VSTHRD001) + _ = ThreadHelper.JoinableTaskFactory.RunAsync(async () => + { + try { await InitWebViewAsync(); } + catch (Exception ex) { FallbackText.Text = $"WebView2 initialisation failed:\n{ex.Message}"; } + }); + } + + private async Task InitWebViewAsync() + { + try + { + await WebView.EnsureCoreWebView2Async(null); + + // Disable unnecessary browser chrome + WebView.CoreWebView2.Settings.IsStatusBarEnabled = false; + WebView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false; + WebView.CoreWebView2.Settings.AreDevToolsEnabled = true; // useful while developing + + // Map virtual host → folder containing the bundled .js files + var webviewDir = Path.Combine( + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!, + "webview"); + + if (Directory.Exists(webviewDir)) + { + WebView.CoreWebView2.SetVirtualHostNameToFolderMapping( + "copilot-tracker.local", + webviewDir, + CoreWebView2HostResourceAccessKind.Allow); + } + + // Handle navigation commands posted by JS (e.g. tab switches) + WebView.CoreWebView2.WebMessageReceived += OnWebMessageReceived; + + _webViewReady = true; + WebView.Visibility = Visibility.Visible; + FallbackText.Visibility = Visibility.Collapsed; + + await RefreshAsync(); + } + catch (Exception ex) + { + FallbackText.Text = $"WebView2 initialisation failed:\n{ex.Message}\n\n" + + "Make sure the WebView2 Runtime is installed."; + } + } + + // ── Public API ───────────────────────────────────────────────────────── + + public async Task RefreshAsync() + { + if (!_webViewReady) { return; } + + FallbackText.Text = "Refreshing data…"; + FallbackText.Visibility = Visibility.Visible; + + try + { + var stats = await StatsBuilder.BuildAsync(); + var statsJson = JsonSerializer.Serialize(stats, new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }); + + var html = ThemedHtmlBuilder.Build(_currentView, statsJson); + WebView.CoreWebView2.NavigateToString(html); + + FallbackText.Visibility = Visibility.Collapsed; + } + catch (Exception ex) + { + FallbackText.Text = $"Error loading token data:\n{ex.Message}"; + } + } + + // ── Incoming messages from JS ────────────────────────────────────────── + + private void OnWebMessageReceived(object? sender, CoreWebView2WebMessageReceivedEventArgs e) + { + try + { + using var doc = JsonDocument.Parse(e.WebMessageAsJson); + var root = doc.RootElement; + + if (!root.TryGetProperty("command", out var cmdProp)) { return; } + + _ = ThreadHelper.JoinableTaskFactory.RunAsync(async () => + { + switch (cmdProp.GetString()) + { + case "refresh": + await RefreshAsync(); + break; + + case "showDetails": + _currentView = "details"; + await RefreshAsync(); + break; + + case "showChart": + _currentView = "chart"; + await RefreshAsync(); + break; + + case "showUsageAnalysis": + _currentView = "usage"; + await RefreshAsync(); + break; + + case "showDiagnostics": + _currentView = "diagnostics"; + await RefreshAsync(); + break; + } + }); + } + catch { /* ignore malformed messages */ } + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerToolWindow.cs b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerToolWindow.cs new file mode 100644 index 00000000..bb6ff4b3 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerToolWindow.cs @@ -0,0 +1,37 @@ +using System; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using Microsoft.VisualStudio.Shell; + +namespace CopilotTokenTracker.ToolWindow +{ + /// + /// The "Copilot Token Tracker" tool window that hosts the WebView2-based dashboard. + /// + [Guid(ToolWindowGuidString)] + public sealed class TokenTrackerToolWindow : ToolWindowPane + { + public const string ToolWindowGuidString = "A2B3C4D5-E6F7-A8B9-C0D1-E2F3A4B5C6D7"; + + private TokenTrackerControl? _control; + + public TokenTrackerToolWindow() : base(null) + { + Caption = "Copilot Token Tracker"; + } + + protected override void OnCreate() + { + base.OnCreate(); + _control = new TokenTrackerControl(); + Content = _control; + } + + /// Triggers a data refresh of the embedded webview. + public Task RefreshAsync() + { + if (_control == null) { return Task.CompletedTask; } + return _control.RefreshAsync(); + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/WebBridge/ThemedHtmlBuilder.cs b/visualstudio-extension/src/CopilotTokenTracker/WebBridge/ThemedHtmlBuilder.cs new file mode 100644 index 00000000..80cc5eed --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/WebBridge/ThemedHtmlBuilder.cs @@ -0,0 +1,163 @@ +using System; +using System.IO; +using System.Reflection; + +namespace CopilotTokenTracker.WebBridge +{ + /// + /// Builds the full HTML page that hosts a compiled webview bundle. + /// + /// Layout injected before the bundle script: + /// <style> — VS theme colours mapped to --vscode-* CSS variables + /// <script> — vscode-shim.js (acquireVsCodeApi + WebView2 relay) + /// <script> — window.__INITIAL_{VIEW}__ = <statsJson>; + /// + /// The bundle is loaded from the virtual-host mapping: + /// https://copilot-tracker.local/{view}.js + /// (mapped by TokenTrackerControl to the local webview/ install folder) + /// + internal static class ThemedHtmlBuilder + { + // ── Public API ───────────────────────────────────────────────────────── + + /// + /// Returns a complete HTML document for . + /// + /// must already be a serialised JSON string. + /// + public static string Build(string view, string statsJson) + { + var shim = LoadShim(); + var themeCss = BuildThemeCss(); + var globalKey = ViewToGlobalKey(view); + + // Prevent injection in the JSON payload (OWASP XSS defence) + var safeJson = statsJson.Replace("<", "\\u003c").Replace(">", "\\u003e"); + + return $@" + + + + + + + + + +
+ + +"; + } + + // ── Private helpers ──────────────────────────────────────────────────── + + private static string ViewToGlobalKey(string view) + => view switch + { + "details" => "__INITIAL_DETAILS__", + "chart" => "__INITIAL_CHART__", + "usage" => "__INITIAL_USAGE__", + "diagnostics" => "__INITIAL_DIAGNOSTICS__", + _ => "__INITIAL_DETAILS__", + }; + + private static string LoadShim() + { + var asm = Assembly.GetExecutingAssembly(); + // Resource name = default namespace + relative path with '.' separators + using var stream = asm.GetManifestResourceStream( + "CopilotTokenTracker.WebBridge.vscode-shim.js"); + + if (stream == null) { return "/* vscode-shim.js not found */"; } + + using var reader = new StreamReader(stream); + return reader.ReadToEnd(); + } + + // ── Theme CSS ────────────────────────────────────────────────────────── + + private static string BuildThemeCss() + { + // Attempt to read VS environment colours via the PlatformUI API. + // Fall back to sensible dark-theme defaults on any failure. + var bg = TryGetVsColor( + Microsoft.VisualStudio.PlatformUI.EnvironmentColors.ToolWindowBackgroundColorKey, + "#1e1e1e"); + var fg = TryGetVsColor( + Microsoft.VisualStudio.PlatformUI.EnvironmentColors.ToolWindowTextColorKey, + "#d4d4d4"); + var sidebarBg = TryGetVsColor( + Microsoft.VisualStudio.PlatformUI.EnvironmentColors.EnvironmentBackgroundColorKey, + "#252526"); + var border = TryGetVsColor( + Microsoft.VisualStudio.PlatformUI.EnvironmentColors.PanelBorderColorKey, + "#3f3f46"); + var btnBg = TryGetVsColor( + Microsoft.VisualStudio.PlatformUI.EnvironmentColors.CommandBarMouseOverBackgroundBeginColorKey, + "#0e639c"); + + return $@":root {{ + --vscode-editor-background: {bg}; + --vscode-editor-foreground: {fg}; + --vscode-sideBar-background: {sidebarBg}; + --vscode-editorWidget-background: {sidebarBg}; + --vscode-descriptionForeground: #808080; + --vscode-disabledForeground: #6b6b6b; + --vscode-panel-border: {border}; + --vscode-widget-border: {border}; + --vscode-button-background: {btnBg}; + --vscode-button-foreground: #ffffff; + --vscode-button-hoverBackground: #1177bb; + --vscode-button-secondaryBackground: #3a3d41; + --vscode-button-secondaryForeground: {fg}; + --vscode-button-secondaryHoverBackground:#45494e; + --vscode-badge-background: {btnBg}; + --vscode-badge-foreground: #ffffff; + --vscode-focusBorder: {btnBg}; + --vscode-list-hoverBackground: #2a2d2e; + --vscode-list-activeSelectionBackground: #094771; + --vscode-list-activeSelectionForeground: #ffffff; + --vscode-textLink-foreground: #4fc3f7; + --vscode-textLink-activeForeground: #4fc3f7; + --vscode-charts-foreground: {fg}; + --vscode-charts-lines: {border}; + --vscode-charts-red: #f48771; + --vscode-charts-blue: #75beff; + --vscode-charts-yellow: #cca700; + --vscode-charts-orange: #d18616; + --vscode-charts-green: #89d185; + --vscode-charts-purple: #b180d7; +}}"; + } + + /// + /// Queries the VS theme service for a colour, returns on failure. + /// Must be called on the UI thread (or will simply fall back). + /// + private static string TryGetVsColor(Microsoft.VisualStudio.Shell.ThemeResourceKey colorKey, string fallback) + { + try + { + var color = Microsoft.VisualStudio.PlatformUI.VSColorTheme.GetThemedColor(colorKey); + return $"#{color.R:X2}{color.G:X2}{color.B:X2}"; + } + catch + { + return fallback; + } + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/WebBridge/vscode-shim.js b/visualstudio-extension/src/CopilotTokenTracker/WebBridge/vscode-shim.js new file mode 100644 index 00000000..1ee7bef1 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/WebBridge/vscode-shim.js @@ -0,0 +1,82 @@ +/** + * VS Code API compatibility shim for WebView2 (Visual Studio extension). + * + * This script is injected as an EmbeddedResource and emitted into every HTML + * page before any webview bundle script runs. It provides: + * + * 1. acquireVsCodeApi() — returns a vscode-like object whose postMessage() + * forwards to window.chrome.webview.postMessage() so the host receives it. + * + * 2. Relay of host→webview messages arriving on window.chrome.webview as + * standard window 'message' events, which is what the existing bundle + * listeners (window.addEventListener('message', …)) already expect. + * + * The shim must be idempotent (safe to run more than once without side-effects). + */ +(function (global) { + 'use strict'; + + if (global._vsCodeApiAcquired) { return; } + global._vsCodeApiAcquired = true; + + var _state = {}; + var _vsApi = null; + + // ── acquireVsCodeApi ────────────────────────────────────────────────────── + + global.acquireVsCodeApi = function acquireVsCodeApi() { + if (_vsApi) { return _vsApi; } + + _vsApi = { + /** + * Posts a message to the .NET host. + * @param {any} msg Will be JSON-serialised if it is not already a string. + */ + postMessage: function (msg) { + var payload = (typeof msg === 'string') ? msg : JSON.stringify(msg); + if (global.chrome && global.chrome.webview) { + global.chrome.webview.postMessage(payload); + } + }, + + setState: function (newState) { + _state = newState || {}; + }, + + getState: function () { + return _state; + }, + }; + + return _vsApi; + }; + + // ── Host → webview message relay ───────────────────────────────────────── + + function setupWebViewRelay() { + if (!global.chrome || !global.chrome.webview) { return; } + + global.chrome.webview.addEventListener('message', function (event) { + var data = event.data; + + // WebView2 delivers messages as strings by default. Parse JSON + // so listeners receive an object, matching VS Code extension behaviour. + if (typeof data === 'string') { + try { data = JSON.parse(data); } catch (_) { /* leave as string */ } + } + + global.dispatchEvent(new MessageEvent('message', { data: data })); + }); + } + + // The WebView2 chrome object may not be present during unit testing + // (e.g. in a plain browser), so guard the relay setup. + if (global.chrome && global.chrome.webview) { + setupWebViewRelay(); + } else { + // Retry once the page finishes loading, in case chrome.webview is + // not yet available when this script first runs. + global.addEventListener('load', setupWebViewRelay, { once: true }); + } + +}(window)); diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.dll new file mode 100644 index 0000000000000000000000000000000000000000..7f3045c5f92802714c266b45a330c201df4e2efa GIT binary patch literal 46080 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

fwg{o2Ek<2EfNRJH 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 R{O#?Rk^lc?`M+8N{~uhvD=+{6 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.pdb b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.pdb new file mode 100644 index 0000000000000000000000000000000000000000..37ea67cdf8a300cf3875651cefc2ca7d960b1313 GIT binary patch literal 18936 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≈-81LB0(6 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 a|NPc+V4%gOi34x@t;O(r!T*nQ;C}#!^*Z$c literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Bcl.AsyncInterfaces.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Bcl.AsyncInterfaces.dll new file mode 100644 index 0000000000000000000000000000000000000000..6031ba1e94835abd1d276b9700394dbafeb2b46c GIT binary patch literal 26904 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

Z~tDC|6_& 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 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Core.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..50a9b506b01b5b01e6672b5c089d9423a3f3b028 GIT binary patch literal 567896 zcmc#+2YejG^=@wQEV1jvcVKn4495h@1}P`39Qi_1bkZK&_XYv6MFBV zw?JqK1W3Rk1rk6&LJyq~l0RVn-}h#BXYRDJ5bIt02RAcsX1-VE&70ZTqAhnl+j1<+ z%HjX-zO$?ckn-O&`CahOTvU%3`_KsMp87v5^FYlOe^_RRgAOis%EkD512T7c*F7m^fnt?))qC6_0O%^4h*@yVJ+Ly zShJF4&91YoyrLd>G4dVAUy0PR7L&ZK2{J_enb}OC$~2)}g$a(QjhufTK$&|M(cR zLY?Rexy^qambLf9o?_2_Ac|~|Q55Ypk!7r=P3$?~#~vC|R?18pSabWe+kn;Pzs+b@ z{M!uw+g2@%V_UobEN|5dRsZY`{paf9fVnZY+i6)1oolJocKjO1+-Z$o$+2ETFO-_* zOhAhUTN1Ym`L4x!K%dn!96!Zw5N6LS)L6DV5m|2%ej4rOnr6#|OEe6t>mHsry0-P~ zgc5KNt<-AqVro*0Q&0S@9 z&o9uVDOX&L-J5c=TWXtXRs9t$1=iQvsILv`Yi9>S0Ii{`kawpb9sg=Ql!qMnu@117 zImzm17L}2|-s)&U-iAXz_LMb>Em~Hxtxb_)sG6YN8bI*h%~`o-%l6-w)bT%%H0Qr3 z=_vmlNqbc@7gn3lY)Q#o3*BkwoHZSoaOEc3g~E9!SL?k~Z{_>eXviD-4(mA&`s9^5 z`Pq#HL)T$Fi#gV;f~qUb7M%j;Uu-dJDWwx!rOR51I>qyRH)Wo-=!tpX)Yf3TZa7lGfv{V#DzBJPT# z3|tc9aaBzanrhtE3f#|#OA>Jp+s?oxF&anrhs(3fzAa zmn7m&+ReZvF&t>{6=(E@`J`9ziZRxw>fNpwJPLy9r(4) zcM_=>*|e!i>)6z-b*$ofeHJ`7gPz7X{xV~`-kZLTj@1htu@A*Qc{Jzc?rOT&^Yha% zg^DjX;Ac(9VfQYHYVRaufB5wY_TXgVxa(lzmT*lp+Gn{_`FEYQJg!p^>rsLHX5rX7 z)}f({VgGe2`Uj$K9*ABRNpWeMKvKjVnd4)vmdT+^$Zw@&+DdU8*KLpQv>k6fNQ3xe z+H&biTW&~OZq$e$PizV7oOf~}31Lez32ccgl+ixRL$RgmFSd;OE7b1DmLlmXi6kA= zmXss3CA_ZMmSa(E_~jOafbCHjMUJ9*Qkhf3aoMU!iJS zilnC{l5|j8QjXA;>-V?iGN?9eIi0rrH*LA8*s=rF-sy=Xge}P=uqCcUNBb-f#g?kS z*fQ#`P_->Z(lZiCI;brvM`+6p`rC3jR2#P3g0_5>wp?3mxh$%^GZRS&Tarm&OI&@A z_E{c^EmeQ9Wz=7xYFmn=XC;z!P+L-t(3Ttax8*og8@AkaS3>Ek)9c6G=L#Eh$H6%T4;*auTWy zTkc6)o=01@i!CRj+Pf-|gs>%<1h%ZFEmp=w)- zq_-!MbWmGTj?k7dd-c^&ZP@ZhwB=^B7cfx9HA|z_n+fyqS~kNFIgUnEmeQ* zmnbVRjI*WF^6BddLcwTCNvvw?c!804!)8rlR#1#4Q zxf5LASy-j`+{p~&{M+TZ65Ic!q>g__@Vv=w>Uk4Y?b_;j6P8>YOvv*l{cZJ&3}nab zi)4R6WVHQxk~;n$B^~8IFKMr;b}^cKR)(cO_VD?eVG3(Y+Tls*WBb36)bW2SY0iI2 z(oy~slJ=@*F4iVuvgB?Z*#nzFV=TSP6PhEshcSG3cxG%_!&eN?vHRQqii8XYyDwDj zt5>GTFC3%c#(3W&V_^IDO6vIcNt*NTmvoeWx1_zQnOm#Ih$X{ktH$VtgenX=MpgW7 zOq<_U@IgF35Zp_1yqmzVcxf)-9YcMOvb9zFV(UuU7pwHVIbA&+Yjfy1QtO#(XtumN zgy|2x6&tP>met&>b!?ufb*%RPI}<87*nF$9>0Jrg4dSbg+-Ek{zMS_!GLE5sBS&g` zj+_wMGlt)TY4TI|^YN?-<_1>4y!SdD8sz=_s8HOvCX@U5d%$;_v>b1ka>J4>*f(P39qqF`lzpS> zFZ;%*ze44{QA96`q^~5BG>iiS-m9e?;l6PjF8-DGYS%%vVat1#YQ6gTnm{F6JyepAbC*{%_g8*#4Kn ze&!3cpHXBtul6%6MbCWOmR=)7?hle#Nw4$qdrtEibMoUe<{u_y8Ldn4&zPJ0T;b_` zl#pZS3-Q-vW?aP8lFVi7s2CT|K~ikxT;5scGUiXt`y`Pxn9F1m%w_Ny?Xx_Txvcuj zT#ouHRL*4)y)2S`nn=#HlQO&p**z!Eu(xol;5nE0}wf9*f31Lez z32ceo;b@=bq1aOO7h6XC6{@zSNcwpqNe8th<#rS z-ImwB-fs=cohnE>;GOoDkK_b6B%%DhnhWnM)66)NY2h+Y;+ zzeyzNp!0%qg!3Xe|1{S=T5e!^S(iY--tZA+FF zsN(K$!4_eRaYaw}7Vz{MlPSAkp5|P{tsa?+B<-XrJYw*i!WuTSomAD(9VuUKU9oNhIl@wxk@PEq9_VdB%ae zV|?j7x@Y&R;Edy8Nge+YNpt?MC9U-zm2{NMwpF`%IP< zD*Zx4FN>s)C6aVdzaZbxFM@rhI*Z3v7w2sq9J?nW0?*>3LeawloBF$TX58EsV)A@q zSv95)aZIn}n2wb(-3Ha(ZxdMxV@f8$m|~YU+GlwvW2*Ygm`42-D#uhrFN>s4C6aW| zF{K>gnC=|Tb)ILotGSL?(BMBSbJ+Hu3+D7QYECOM->Kw1be4>J=z2~sPrrB$YGgF0 zam*s)PrjJbk8=Dw80+_t@yCf)&U+@2RWbf#V$Nxnhcf=Ezn;@9D^!lZh+Y;+pG_p` zpyN-z;rPp(W~|2npoQHPWBp8y|0}`xzbdKYzb5G@|L>Cas%p1h`2kDru5=~&J_@mx zP*}SW>rLrn`~Q&C@&765DE|#fdsQ`W0@0^fa`zA{zQ>D;v*3Qhcnqo&d@baM-pLAW z6Mu~o+5uab$POQijJE%Yq>lfoq@(BhxbFwxQK0$%!^JnFP`SSc#CmyJ((9cQOkLMP9zTI1(^i%0#|pV zeU^tZFI0b-7g2wO%6TE8mqpUQB$6~7`vLC_QjTz5>`4ct|1qYGhCkT+=uzH#2_mEz z(@cLSKgWA{q39g%@1cH(=Fo2<_4`Mf`i1ig+gi@Ay%-z*BJ;@h|0=2Dza;4>|Id>4 zs%qZXV{Bl_-6x6-*cb=%YgMt;%Dk@sUtOZZqHrG>cb3qCbJ=O&xwP2pZ{XQ;&_UL$ zIr~B)e#fh!=gNwryFX~f1Mt(3?;4i3-Ir+M15wU*&aiFwk1YNZGtr%goF=^$k<|C5 zaG_(30Z(T+WaQtf`8huVOsAsEYu<1DU5~}KJ?9<->W^p6IhZ_QVkxekmvX1HaNI-K zvFiIp*aoQYJ0SMwN{jP53?%V841b17(RYzZ#5}_JKi|tXzl$U_`a2B7iRKTk0N`Ju z?VC_7)%nBuYVi9<#{AySnBO~T^TTG)8mq_eJ@9jH!#qngh`?OXJPYHJF^=!1spq~O zcY#%Vd+|_Ajdu6P_?^qygrx`j8FS9RH}pCGcIBLZoyCu6#lCRP3+dyCG?Y2N3#44| zoM(&pIgkCCn)BGBnGv@b6 z#{51_o1dQZV$aXPFS9w{A+bjIev!7GdaV$CpQXt!F2-G#ryAAt;h%TSM^hsB>2u$>Q^tYA~d$FbCZ32kC89(&eDE!Le&KAC$Y4_Q|w-sG5 z!N0h3HKA`}HDgu@! zzgo&%-m3z)i?}2a_qwADToU7PRZTVS-W9mr#3hNiZDj+O#CTj)Q;my#uwjRZ#3hNi zKRedIB{3dX)l}nRH*4VDL|l@H``_aYToU7PrDnV6n_L_x+x-y3ANVczvp6{j{KQ)a zZkzgZ1~b6ZiFnHM6zg)jB>BKx<0ri+9HPh;^GeZZCW{=-Ui9ki}s@f@#9)CPV2XI*7|Les($8~ z5w2I|%!s~&vs4?;vlma`nbAnBk9IGvX>;C&iKM}q5t*20sVooW%t-ZL7d!P*4gt(( zS)uaGNJKA-q#GrY6!8s*6}$o(;M-s18=e_$zzgfj=gEJBYTlO!Y*|ZNzCl~ABeuj* zK+fAVk%X`%nFO{RMO&~u6kDqPV#}z%Le;huNjFO*>7cfx9HA`_>u*b(X_&UGqb--> z8UJo#%Y#tuO;02tY)K}jU$Q(DTdMxrFIiTo+Lj{ej6{+SYD@ABZ5iX2xX?9i*;r-E zLs0E)o=8I2l1xlnvOE-9s{Y!REGtxPOObSoM3N3_OY&WSE#a!BEl1FnyVEbr;+Hs0 z$az~Pk`T5elfag^^E%pRc__A2{l%71e}$@TDUxoLNYX)VNjXAW9v;r|Ei2b@*{|fh zjT1_u&zJ^(@9`t7b>6l~8HRh7!JjJe||=%?}55#~PILn!3lkhaA>dnv9Pw{mZ|oU9v&jyZ4lMABg0 zAQN*9W_c*ePk%!{og{ub3)SBLCA#SfKP8jE zPusb_VR7AtU9A}&e9 zwazebNsPyp8hx*d@>Sid8ppBOFT1fJKgZiY<+0JRL-acU>{5>%`m9xSS=!Tnc0@-dlgJQ%~p*UO25O>)~|}+;c4^JF-gYn2=L1=Cdn8wCiNs7#s$Wt@SezuvhItX#kB2O z?Wd)L3J&I{RpWT%A{xh|5~?}qI9BQTleG1WdscwU0G11^7q!-oNVzuI?uHVNjzPqC zyxH^>KE_x~r)y4wE#N$U7tOFGK` zucW=I+8wT*fn~`(4&Br4)m>@P0&W|Gsx5XX;OwEzqs@0F?JaNBiD%(AtTqxzilcR z5D+~SK{6m9dMJWq4z!EM(`{LZ9`X>d`)qeBNN&4Z%kQ@GyFGr3<8fdx54&;o_krCL z=)arT?k=eFu7RHJiQ>^}@69;ZC2>LOuR?v>A(IfM=8sw)SBCk{pd%}aC#jB=F$*D1 z#Vo|PTxkQwERq$2)gkuzcUTFUPIN^6i#{90# zf?u~D>#MWir>-5up4Vo<4{ugrjT3&?Wx)^Ed?CN<)8?o5Mxx)%;FtPdUY||=6w{Jt zljM!F$paZ`w&A_kBjs!ot1JHY1w{JcS8F(%Bop%to#mmNO{)IuB2KAiRajQ2Jew5J z%OdH;i6liFTMB`5;Ad6HH$0n+c_sic-L&PwwB_=&OENKS$?{Na zsrqYMvaC?GEk)AH5=lC!Ey=gamgct+C9d3%P=sjj6}K1S-a+rZgx`%B^Sdcce!S-3 z*}zIz7jVt-Gejc4rPj(dV_P&zQpazTH0QTUI?8XBv{yCbcmMeQ9ZT*hvf&~o_Gs41 zz;sW8f44T+z&--G#zKe9XUK;Y+*8rE*oWKyvkUHN$mj80iCQ_UoviygjBZG{2^^y|c$2yZ+=_d+e?&FJ_P3XL7wg zcJ_R`4OMNZ{P{cxTf;X^8@!+6$87>1?>yvs*1FP~<()6AFcvk|3gEQ{c+JCQuexZE z9^M7)b|HQm`s&B`%tWt-K8~QemtEoIe{3CEK*SThFWB6iRB>`ImwBj44g3hpH+ zc)!4p;*f6)c{KJ}1!-E)Q8$G6;28b4`U$-`E}a>k$7|s_OOvsj<*CtT48I;;6#dVH3wp=*;*0j=ZlR z#|bOsd*^T-_#cPSI&Zs5<4@*na;%9gmjd5*bCtWtKeeCX+HQ4PT zrQ+ zQwWkBR`6~Ci{TSis`pxvDIEaid$zecu=KDxcMc%t;P9ux#q4b8s%xK1JNAvK_ijbG z`*(e<^+#fU)U@Q9a$SWc{8=ZEUscAQVwhlpdpjyxYI}|XcwJL%@s}uici^X~_VoP$ z;NFRR@h<$#Ry>sd+SWtX)c^1^Y}NNz5uepHGp0wbv@x%lN#Zs0x8M=I159E#7b@QY zRyEbQ2x$iH4C0bR+{14$a7m2ERW;SPXH?*BPF#|R`{peME{XBDs-_zE%nIBsh)WW2 zceumAB{3dX)l}o2Re`%DaY-WX)Aty-B*x>anrhs$D{yiCV*4Z!cdZ8vToU7PRZTT6 z;=VC%n3J|o5^-;P#K0vn9#_>=<09}IxZ4nyB;s~FVc?P&kE?2`anG&5#o3eXlSJHe zpE7VsjK@_q)wo!m40$&pE=k1AKWE^Q7>}!Js&TQ{8MvDgmn7nrUodbKE{gZ)9Vmz*@sm8^kYv4{NE=j~a;AI1s#CTk((PwImGgW75rz1Lg_hH}F zf6H~AJ@A%mF{fh774Em<&(zFk@UY;^bsG8N{NQFJ#Xs{pZHio{VRMl4?oYHe$8{Q+ znAd4659K;d_1D*FEGtxAr-|rgk@SH?l48sje11T_71wFppJ1J~reUoP_pTFVA8GrO zBz1gj_pyf^<#$WktE$~*wZCL3*t7C}&>p~AA6QB$r>o8hck6O%=w9x}zg>vWFE6*8 zzCW|vdX@KQHc&btzhG6{SfJIT>L z%R}*T)n9x(>aS4g<05)lBz-oKq=Wi6*TuXa$yjy_5KVgiufye$=oQ4Jd7>++`>(+@MZdM>J8QVs zht5}1XYVnp`RnAy4(ChU`$Js&roh(Fm22NUTqjnQ^}zO53)Y8K)cT;vZmU`!SaR>9 zo5-^qj4jhe_Nk!F*~hVRi#a%|8j%}OTig*-uEEZ`k3lUYPpITKDtSsJzf;MxOh(lD zI0eA&i`U=}y!j9|QB=D-G9%URLsC^=?x^t!NxKAXB z`^3M$YU~q9jNd1!n(F;0&Lj+6+*P)Hl8C#@n+7h4@wlp{8W)Ea2JQ~TB}wFc+rT9; z9#_>=Kk{n)@IF&4B*x=PjlOQ6UsYW<@VwajOWJW}Q~0H4j{7os zJ_9@rALVnduO?J8^3#Fd+0%MH&UyG+wtAAMyoc47ot{rp&)2inlRQPwH?q_7Y3ljU zZ1p5h(ethB^n8YTzMZX}?C#>KodiyR- z`CTq4lu2*Oqt(O6xQ|GweP&C(DX-d1excc!KWa5_Z*9r7wba&)n)7QkYAG}qI;{(RqtRv^o&Z7mHGmJC=mgsk30!=?tXYG`T*SiP#+ zxQ~KCpEJJCdNtfj{mxo9U*kaC8XI4tyY6XgL%2TfDHbg3p!oMJns9Z9UOmsi5Z>d+ zjq{$sZ$o}w4?4-6Y4=GGx<>cBgeH#n8@7HOS@*Zd6`#V-Z0~9O&e;eTa^t$&$Isai znfdvdJRbQSD#p!ajXMgLd;Ei76B-L=9^5|j3|#)z46AFK*A$M~)rGot?>ThnS^8UR z*4Vc8e4Vc3*YXcShadENJ?vMnhRXKd0Hr10S2Mc__xaZk_RJjD zUtvu7KmOz2E|7cvqmkc+v7mexJm2x&MCbA*7?6g(+VQQG&kEqWzE<_iS-6*CZ7com zlz#s}ziyyNsrXL{^%i~tg7-G^4f&k+4$`h%TVvm@D7=fpc*Qv9y~mo-VTodlD{l-r z+GqMqCbR@q?X|^S;5y#>Xwlx-*Nmr0K48~^N@v&2#*+t74s)IVe)?0ZIg}aqMfnaz zD5WPd=UN;4j;{$r@xX-MCqQbPusmLB{1mxi`1>KBA$62Rhv!lL9A)nd{GiRhk#zs5 zZv;YITQ_F3x-A|&_hI8N@vgj~Jf315Wf#9hTc6`*7yrX7C0Ea>cjD3Yj}cFN9PR2y z*Y80A*ONKxK-hB!$eAmi%G2GvcP5fX+i|}@pJ8^Hy$aq3C=9Rf9?Kg>pCe!V3QWAy z&@@+k2jx2VeYQ}|okG3$FBH3m*V$zgB z?uTF`T4Gel51%Fmlg6+>RfpAeZB_9856HtObTvEf*T}WtoR!U+(1B8ox0`ZeBqdRu zNQAcEpl$ba7&T{p+oWjJBxH+hn9H`clC|c+YV07Eb<8oALt8wrpuBGZ;f!td<|7@~ z>VAi$tF31pL`l=Snf7zPgkVk%Zw=JC0Gv=eXERJY3D}z=Ge5sO z19nXf12${;N6sd=OW?=*FV=I)S9z{=FBFz{+p$jON_+DhgCw3~TmwO(=OajrKgUot z)wuUn;O;|Ql89Sp*JxZ4<8f6@HSYZtxcd^9B;tB`1DC{jTvbzzi+zJ(hy9345^?|9 zVBnG%kE?2`aj`8iaQ7!JNyJ@eq=8FfJg(H}4HL(y>YRu^;eDCz{?NR?{4jOmw==*O z;ljb0bg_>2-nNzdDA-ixy#FNHJ>otJnV9!cSRTrK6xDxS%q(>ug=K}x`zRthw|_bB zt3;Aw%$DK|AMjg>SE%$A5xp#uewRqnL4AdC zgub#KJQp$3v?Z>OOk0kiEf=RPcM)4Yj%p8o3?#uxIBZEKfh}#?lI5Y;QuP;GM*S74 zwxvi~lStA*ZAm#oTTbh5OI%Hwwrrv;bF}5wVoO|k<~%!*gs>%<1h%ZDEm|=Q*?e2<9%71`Wx^QB_)N^n-&rcfQSXF(nKr$fUI8_lO6J8^>2}bAj!2f>G4K~qn z9IL=2vn#%wK<2jVLZB|p*FXw)8I&)- z?n6r%xFp8oN=-Nhj<(4bh3V7l# zbbbh~jeTo`FZS8fEWX&sC(xr8`*141Du%Tqcx!O_O zh9Ts0}7pXyHC39P6M@b$zl$(7;jEa#>@fX^p)X(a!s-{ z{9||8tl7em@cO9B7mBrLJgl!UzL;mPx=yqS&sAaj!VDBE=f$7FO3v~Af=uaX`Y%cJ z-wl^B{FlUd|CJi;zr>L_y*YSeXM(dwQLjs>mnbYo_Kbh_!u&1{c{(|7g80o3{UcD3 z-^6_vXN>J`#1TTeCDTf~{uO2ryS{`>=@{CTB--`mafV$~vGT&M z8&gMbB2-LfRXBy5MIqjd)bnHHgm8YSXG-@lcuoS(;(B18ka5U2J}%h2uN(M~(siYU z;6x$M_!wyVknqfTE2rl}^clV1R60&h#x5Gmfu5t=5;oOi>8-MmhBD$C7wa%bwh89S z%>HxbWw^G?mA@fVn$5XF66ea!oyJ@tF@CN{jh-vSkr=rdbaljUx8+>Pd8;NfZsGQucWp9ev*#z_m;F*HFrm=YhjjLAO_ztm;&s*4D5rYkL@24 zU>u|{6xl^k=k+v80Y>E-^$LWSdG}9bN_efs_DPa8YN9dkNQ|F%s-}8R{Ava6{lq1S zxa+TC;F1`Rt7@uoU#q}L9n`YpW7>}!Js&U__z{N8kwoejqKibH^B{3dX)l}oYS%HhMkJvs*#GN_a zz$GyrSJhPG{-Xl-5#o|W+$Xm*a7m2El^Px2>94XEVtiM7p}iOnTGRY{?VLM$Pb>UJ zfnU<_9>t#cJ*_%hFm!B7TgNJ!wx`Wc?|*1h$6Fi>(|(U&Z`l*b7%q{ueoLmPUwHPq zkFiD^9;^|bq>evJ(oz0llJ=@&b!2BN@^idpQnnS>>irB` z%@Lc}{;`re{#;3O{!b;X^^cQulfxJK&XZ?_kQ|LXMQ< zp2KIfgS|U>%Cq4sCUl2EW37(wqG#tK(sM$ZdWJFL0Ogx_e7eEkE%43VC3XBgBpv1N zDrv8(b~}`hvg8gIA0-y|qz5W2d~B$}FG(NUKQh25Dhx$-mr)ojxr+sUZr%fVn|lS^ z133(1j%S2UL{hwi_dv$UJ&?Ch?X8^1Jh%r!Cc!!@B_GcTkWECduFm>fMkanQ)KSCKz%r;(J5CA0kPH zHzLT{cF%$|=8cGxQO3b2zw?DvPyX5E573mtGIg8an0*DCPf9l6X?k^rY9qz{A8f_c zcbO+4{Sjkx`6KqlW5Z03ydK-zhJ05$KI8QtT%P&_3}BlBe>dL`{uip{8jPJwf8*Ym zB<_tTZfER`NsQkctD5RP_lFg@e!p1DC{jT&dYEy!iDgAHF>i+RogUo)4n; zGx%AeWhlJ%AL!hQdl48P=bpmvk};B+=Kl z+s*Jb661YMYUbGTDY*9HD6sU&Jo=tGfkVDJzFkQ>ot^M;u*g1f@r{2=X)^RZSmyan z_+tZh`DXm$0r6X;K+-NS)vZz0F2nMLx?-D5bvX}0V73lHe}1riK5WyByLxUrRV0#> z7H5f2Qd)u~!b@pMmI%+7#lMfVI`9sqJl@ez-5rhk;!^l&XltC%mdEEpj{#Z!(uKD) z$c6TqjRn-szmYF?fY>=39~#Ez8SL^2@_VBEo`hd_8CI(pN!VTa52tvmpsucc=CC@W*OZrVA97Vx_$LXl{LatM<|b}6kiFIM zlP{ATjX_cCJ0-H)6ts)RU=5P5<%C}Y>RwM?vLkc&m$R$g0U zu`RI>z8Y||m8P(ZFMy%)GvzBsYHU9mmvv0+UXY7pX`6L5Hro<=Jz|G`ca+9@Ir6({ zCf48Rcllait*^1zmRK8@SU=HNxk%>?O{`k#jER-^HquyZODtSP@()myKS!9wO_C|l zns=gS*u^eneUgJ$hSsv%y$3-H7K|6|@)xMYf`P?>Ioo{#wNBTPcKP3|XjZAW2{_oT zK54Wk_g+gNJ(_a6d`icg16lZyRapbnn`vs_g=YLFL_IcRHD@Y*-K`3?dzft(%Wy0K zRy5fIb8l8l?DCi3C~MPykSV>$wTUFIO^@tltW6}wuT4@D?n@n?IMLbTFgxG{Cx0p@4`r>xgV*#ei6So z7JQQ&2QF}Z?@?~;;AP;I_OF>$+!Ss)8y5~=i8nA_=B(vmhgHOvNOjtB-ezdkP-}d* zwosdQr*jT*Zu8z)8SQf$<0=eqbYb1V{|)$m!mzf62`%jn6GkrHFrl$$19F@p9LoZo z_clkVu@br9Zb9VLZPmuZr&1Lk#&Q0`i^elCHJru$tx)Btb{@V^+Td?PLYt4Te`3Qz z7T$Kqb}bPU@YSG(u3=6u>&MMleD57P%~nxGo35zr(T<8DJ`vO~8}l+W&WnynN|bKKYE-pBZ1&GcQY6%T2Xf+fk%ntx03yAHtAuDwBshle|N4yoD;@ zy#BM>4)Ixty$)P?Wpy3c(B9e5#<3w{n}@>t8-m= zT>v?3p;+zI+9Hd$B-*H~yDJ;c3F@IeW%Wku`rTL`@O3<#5;S!7^n(=-^>8}bfGh4+ zmtUUerMLSODXZH(Qx2?|g}a)B8gDx}m6JWlbg>j{<&>AkX35{s#t=B=G0fwk7v{0X z<$OG`zKX%& z*r+(Z6*8rF7{^Is9Dg2aMDH7t7$3)_M#pjDNF3iBy4Fja`v=#dTM=(kKHD_!BMHyj zvf#<<=Q^$D?ckXxl!w=q3tF!Xe!t9^-yIqAyEAQmRepLG_+{;|N%_Ne$dulsKaeDAooDz1iShm*HSh=Z;F3?A$RCcCarh7Y z;hMl7qJsPZm<;@ZemPgmajhu_3&qc}@k>1iF%gu_cR;4}25n9fZGJ?_usMnGHkTSb z2ZB)8>~#y-cp7wt$V*eIW8x9}o8~1NQ`1Q{kE)cb3dOwvIQV>*c|?MuqI- zjj+A~a-Hm$U^cV#j&N7t+i+FPmkCi-2KwSHHpte>8jJ7OBi+PE_^rPnwwN#eZx z{Agodk{CZPRZaChi=8TP`-n>taew9;xFp8oN{x=Ol&>nr*7CURJeZ1WZdAxJ#;z|h zR#=~J%E5yC@qi3sy^cea!|}vpFG%JLy|e z%Blb_?A35E%l$Y{(4kKLl*Sy}6McFOwc{f_8&4%lV9-;r^Y@BDi|Pp0f( z^N;%-oWtU}Msz(F+!*VlLJ zb&WVOFZKDulAM=wp=;{r4_Yt0d!h6?0GZM=)QcqQwft#@UL?lrrE0480ee*7K1*DZ zhZach3sk=ZH%Zalbj&z$GyrSJhPG;+bW`4!ZacfShUdBi1&xJ%z`;F1`Rt7@uo_piYHBXLP0?y0vMxFp8oN{wDGIS;Dl zMo-;GnbC*S==dKy+x!WSrbN7t(++z{xxo5_D?zM>Y+&gVO^>uXz_X+!gU!voQ z@Y-mg>s)eAlzq^F3Du0w4+h@{El)iU%2rSE6g>~l zSkFTik)DTUr{{Q%=V96ENuDyEhi9j!OFd_0t0#Gio=2puC*$miawgPCJ&WL%QJf_| z$15dN@cYNvF6wtww&O^iGLAn_qB$OtyNGr|3C5Z9VlF+kxR31>P^tm7d}m z1xY-k`06g>jDp1YGYYBEXNSaz&h$@`Ik6*cxhZr?bx!ELj_}(oZGJol{+ZTqI{5J% zSeUa={1cu6&fs1f^*&k4F(Ylg^&XF^I^O1BnC86`eVZ_E)AcM02E0#%@o}kqy!wJNk;jZ^JD36|{aEWz28m zjQMSnHb3o?hrorzCl5uY^dxLnM4;wy7V!TgEjgH&IiF{Ix*@5)QHPhCKK6#4x zi11r03x0-vYiG=Fos9Xdn>Iha9&r2|Z#^(fb3M@S0*k*)O~@|V6UMy@%;($m`Xl_N zfnUb!&yO)RWv(BFOzCdUb&@#OZ+*;|>m3x3L{gzkkB!1`VWY`+tc{&40@iBfPpd0VE+r3Aj+MAEp z=70F^0pEEd6Z1PyEDz;7PpZHE&J)WDmEU<1(aR#~cZnp04Hx{KC-Uw0ohQyg727C? z{87wQ&s4O391U^AKaN4BbOZf^B>Kk_uNeM8V!VGyjb4w4BXdyS!#RsO{TF7<@ENn& z5JU7TBU8GbdXYrEj(Ee+i^O=nq(=KaaiVp$TVl(()Qca6%4n>5A%f`SBU8GTI*~-3 z@^2eDkr=O&)abDyPNdUWqSJ-c>65f|qQBQ^exGK+Pt7mU@3XY|G47wO_4^$Bif?4F zmg_kudVT@EDbG3c`7!d8bMAkG?+*|5c8p|U|9ow|6S`f7h;HBKSic= z1@$6{dQJP-(2K-)y`)C#MI6y<2J}+zl3g2)*ZbLx*KrU-^g14y(&f~PBxZ=f>~y$=z7Z-ZZoYnvH6$WLO&I}1z4fnrCMj_;)AudV8-NCZ;_cTb1$CVoGf0R%B zkG48TV&L8Mzx&g+m7c@o=Xeh!bcVs^F!jSXf$+|U==WgO`aP7be!t3EzlXEc?~$za z`*pVZJ({(Ck7cXh<5}zXM7H`pnYDhu$yUGLX06{-DeI@Nr(}J28tgK>o{}{X{Jh^K zR5RN54YVh!(({=`r0264>-pRw()0Ie>&bnMI@1@w{R8-=xQ{pg?w$Co_k2PHzt6tS z(C>w;^_!QOe)n?U{bF|dk)PxJDFgk~d7S9?=dAVnOSby`HEaD|%0R!L%XO2C-^*F+ z_qPo6J6G%X_pJ4MB?JA=)B3%dwSKQQ`V37NSD*|?V~ zhx@YL&yp!S7|$wQPhOvw(z`l+)N z*~eaxwSE_7pr5giy(nw_F3vzd^|yy){4U8_zh7japW&aEX06|48R%#D=jB=JcSW}P zU759hS7oc;)miIzO}6@7o3(z|WuTuCU#`zuzZ0}a>sNKQaXZ*8x^tXgCQ~-Nb{XjGs7lv67OAdxrmJh!b<UH5g zS?hOi%KGVhD5v3;hdg(DIx?m6c@Kpo-b0yMZ`?y6G5#Kk)aZLC#EI^qTp(wC_|t;; zu2R}Iq))2*Uczs77W^*M`jyk>r^oCJm{`W_Y-CF3aLh>Jm_0b$7&8*%$4u2!KP!G_ z1@6y@OA>LnXf|+3jK@_q)wpL>;GRodl8F0en}JJWJg(Hh$AZ6eMZF^*Q)9jyeeB0+ zj{$v5`LysmENy=J**oEPIQXUfjG=8&N9EVT(@R@Nedb4gjyDSole{1nuG0gZ`Ei|A zf5S!eI|A%7`L>51%W?G8V)|ogzC%Nv@(xWYp?RaVbMWUySD>CpWveH7ik?47TTdO2 z&k5t(&ygve$@oSR!_bMuc%4*D^;&RV1@39YC5gCKE^pwH7>}!Js&UV+z&)L~BoTL&6%AYx z<8h@%j{)_L#z3txYj6y9OM49XeTs`^%!S_`;K%P%M1|t&*?ePA-!mm^2kQW|-#yu^ z3S;v?*HAh}in@D&TgvO586!ncK2yJEGA;FU27|{)(R1(g^;Cbe@e=J<`+{fWS1c6Y z!cFmvzI&q9U(tOZvc5WlX8`o|!CIWh`-5+)v6S=p7h>_N8!-z1kZgYLB%)71T8G4b}`mugJYF?4gzn;p~Ur>_mk z&+&FjXwY!~G0?Rk^}AGJ_LkIdX4?Ac*!+ty)?J27={UwZk{Ij!wT)OuVtlMqHPtcn z(hA(;iAxf37n^3_k{FLGH9Ce;K8c}vj_pcYZ3igotbF;L^N6#VDJa@|ITpO6^uCsL#RggDV!dzs9s{ixH1Y3ro@ zQuu8IekuE<8T-joV*keAn`-RWV|OJ?E!XN-Ayb;eu_K9NxB7Hr>`06sJE_rQN1SNv z)V1%y9J{G$kDXp$gx@-8^V7Z}{MJq1SIm8x@LVr_o~D12r}*bI@J-b}^*O8Pxjy)1 za-FB=1+FU9yto#b(jlA|BynE6w52gGNQ|Ess-}8Py`}>9P~wtA+>N#~a7m2El^V>q zsg~7XJ3i&Bnr}UvZ|$&IM*BJ8w|Lt8^fhsb`Yj25JcEb|SzQw|&eX}8B&ETKjp*R_4D{Yu^t>JXQr#Qqvlr3P`(;7}L!TY!>_x{T(eI8$ zG>&&BRCCZXJH0O!J?{d)jQ7R2VG2u3xE-0&T8s%KF(%w}kP#C|jE@OYqhkVbqIFW8 zM_#~~a3*w1)kk%l`z1sWo$f%UG>tluM4eVY%+QI%c%7t1uam@qPUg4l?*fV6vcCkn z;am1sAStfeh@T(Hx9smkwRe6Z_rbU9$t3ue{b*cx_$&|QTlT8Ie9J!SuTc3ddl9`X zl3tKVQrK|8-?FD1;kWGfsIeNvKlFIrjcOUMdyy%v!|@`CK=jxumbjK`H4?c0o{c*=(tA4Iw#xsL! zHD4Eed1fF&uu!}S;-r3Np#BD-`c{gtUXl7|@vRibc6AR@_)Y-dRQK@uI+OeyuM-Rt z9F0WdJNR{`=+_N)Deno)^8(Qk{JgG&YDRhv^o*gt&J;Z-f?vkhnGazqOKkWRGNtj1 z4J0u(be~|v1`^|AgVgAKBypmBq}q!=!Pw9S-BR^Yz26aj?OE_sb5Qs#o&`U{o=c?7 zkG?ruVyx)5B>1_wU`#fM-y^nj9Iw-SN2jf)-nWXLOM_pAv4%Y5Y;q~^O%hTEjWtzz zj$K50j!9cjy(f|J>;S(E_9W&R)FTLiJcA;CoI$;aq__sppbnNZsE1MQEtAL$ID;Y+ z^Y1CLJd`si)nETTMV1vR&!9x~vPimYB1y4kEcgtHe8V%S4REVn)(*XQ{WYp(eR>p` z((+uNNaFf*{mI7qL}L8Mjt+frtPTflv-^|sH$ho*j zo%d>!2@{?Rw72Vf>g}t9_tYJWYro0YlTWhclQ9Km$hWms^KD%zWxj!r^ z!;oM6-}y6r^>;8oeYH>d>PPg|-}7%buOhzsG^)MD5{Uy}C6mBc;S8gFmWSf2s=xSZ z)L)^}S4H%)NZOQ0(m{Qda)iE$M~~EAV=IiWdViOKILc2)K#)W$^WZ*1zSm296TaR^ zuyk=pGi|1D z=bxe{_<8e_X{lr2KBwYrrq#bKd6=nkCl%9+^@L zV?9ZX^&ebg#Cj6rW4+YqSWlcN*54%a^gG7-S1^XD$9i>LApBlUo1b1U{{WT6hR-8Y z8c7?HL>nG^qhUi5<83H4`r45=kqy;)nX82jUrbvkURxRb{**R9J?T!9TCo$~9xi&X;tQf3BpxitH|DSreKqDY;wo7|J5Xdce5Fz&JC& zI7?E;KRduWLt&|E7k`nMSS$rtmCyUWfMFLunuknj1pSC4`qBU0YWNX}@qQ#V+K-4+ z>UxX(9Pb4%Ot36Q*I5hN=PADx{pMw@-yc)fPsf@+Vo1eDUPPue zj6OmVedM$|4Id#f-bbWH$7|wL`A7?Wa*fMSK!tYmn7mo{g8o6Vmz+Y=s8IFqB(e$_~=rc zgAc=I8SR;b-y>P@Q`h6d@7HPbqYs{~?fEEu@Qnvae)7cqt@ECfsnfxhq4W&WG%rJP_e_qGUU6 z7n63Wv&%1|XIG<2J%?wFfcskrCz)Nrh|O$wCG_mV_9+JGB(UWp8jpTSMgp&;AV72XTjV^{9?q(=c^|!$xswl+wLrMF-18TWs34y*j_Rq zd>#@cqebauhZpT!S6$A<>m%F{x<^tD$NdSDc9$*e@)zh&shCDm{W}De45ebV?UvES zl&XX>rTQ{#FBuU26A~n&rTQ5=MD8<}5;*R0Oxj)6+2ya$lkzZ)t zT}*k7MVa#aFKjOv5dJSDNJh)^b9VTLveNamQf+ZB#4`6Z%Hp`V?4@LEWtYDO1|?$} zN%l<$EE!71YTG>rT};VNMVXR)8@87W2=haNWVB?Lu>&XmNjP+JFQ5dDdl8d%mvwge zJM^SHOe1-4wWctlB~d z$&eMRZTIh0tlGnNlF_W*3R%6bSg~xE7e{NdVj8hpB7~3(S+Ux7|5?Rq$*`SdVA0Vb zK{A^6C*;k!_a2!#?gvcTU6SqcQs_hxm_{Nj9U@7FBCy(aKSmeBuk40;;WE!#T2q7dxmaMkjuh7L{Szab=CmGGE276y&^^Ic1vRz&l zt;vdM#A>+^LNa8K?A0$!6}suI@w@` zU1pjqVm-`zXH>SB5VT;LD*9D;rD<8ZcE2 zE~{)Xi47np(_9hWm-nu!Y=Pq(X~8sC+?g$|t8B4y(1K~Mco19MRM}!OTR={xN{rho z8>|vEV5%D2S=nIKpaE0W;NHpxtFZwTVVW!UQiumDTdW>HFjWwbR5q9rG+?S4JYLyg z4K@G|rWg?N_-$p2HG>vRbHx>TBkGyT7Hb79nC6PBv&A1OTdWVp`CGX|8xE zTfAM_VtuxNpiGsZ?^ib1AZWl;HTbBq!G=KtrmDebl?^ru8ZcE2zN~DpF&kjem2JPF*7MlhwmFjWw1RyNovXuwo8Sf{c9qM<0lG*^6(Jl3ylF*9hvG_d!^l`VE* z3n;==F_~W3VAlYGX|DJ=nQU3vVz&T-se;(Hvcc{F1k+rx1}nF>V`Ymyf)-43#Zhdr zOJ$2agBDD4#SXUEqq4}l5ARfhGPXIr!Ci>rY$yMA^{t|_N#uV^XEU1fOB zVvaSdDW|HNa)*w+_jdd?*V-Y^k+dRhv;kC%}vV%=iF1kGy*t#0kpWiVW-PXvy1S=PM?yqMzc?ly~>Vexz@7 zY;B#pACLH~8kfcyWi7vE_?#&6J6aw5<`bT*w%+{2>S#xPbp`6U`%5?2J7=wo7PpJN z?}iSL>Ru$U_vM7Ni~qvF`wxH=+WS7_?K0jQ#4qXIHBca_)dlDyuoA0tI~-V@GSTXo zYq0t~_@&jy2UaJwgg;!MtS)V6b#{W)KLZS`F4*rQA6Q+=++jyn7bdNurQ%Ux^?tRX z)nU-U?w#vtyLaxU?f&kUk=-e}VfR{VN@VwkPzAd`j0ASa`^Ayn9|Ni2;@MUB`6I~N zpI?^pH7tuH`v)~95&{^Lx0e}!LKe}%yMq-yI+8(N>8wDkqsu)dTltS?Mj zeO4$Q71r-p8(KfK{Yo2a+pn~bw*5z6N4BTnhV66KB-s9!;`4anh_?R?64)NkZP4~_ zz&ZSq@S7{NiWAO0KF0-9?8Rx(n!|M7)o;np;>Sl*gN#f2hi91nL z3PAn=wi2LtMH=`&<+Gb|{_mLfK8fFET+YDlCiKn1qs%Cm@CRY+mK>svwBZP_6XM)E zfC-@ckQMhwps8gj5!_Z$Qo%OWy7&TQL*J6IweF89;>=oGYn!iisCpiqaps+WM>eOZ zj(boTXB-R9epz>j&7VOPZ2lY)*!)ao^XDO<|9g-M?y}-e>VkyRI16mDCdc(3!HUw4q(u33mN6VC=F${~p;2y9#crD5791?Aouk z%C2MZPJ#Mn-zaMgY#he#XJ3x&N>MB9%JuS2vFr1wf?ek!fn9_3@>)pf<5j@Om;Z>o zT_(l5bRk4;0lFScBy#f*F|aVDVeI%5)7}^G%h-WMUe-%eOXt$UTrZ^!EzC}c9XA68 zkz25@Mm~t#Qs%j26uE^-tLUeARK$*cwbilXd#slf+=v}&e{z@D`_HI?z5j|t+xudO z=f4b6!CguG_$B0VKMud%TMHpp3(zmXMC{G;`5c$B~Qs$9#WN%^8D*7oNus1%Q9PCf})z-QA0`k!IClnlaXms45 zf8Qv-YkjiElgTPKg9#~K0LB_ zzuG$28>+o2xZ}>!_FfzIzDMl+2C881e;|Q>->BmBVGz%M3#0;fVX*f{$&)VmvJ zB(f^9h4=hIu)hF#U@G?K{kOpWl#cd)n`!Tx_@({31N)O&!qTGbFKuXlc7pwjfPwu5 z`%vTq`%C#?lq35KlUC7J@qqn%BK!BNt#gYN_Fr|nj_0c$p!X)9eHX=Z3hub2(Ed4V zQ`rArvHv@$g8kn|0{df3piXgLi0A(cB)j|`e!HF42{;60R*XNq;NrtD7?uw}smBdg zR{W3SFil_k*wb)jG+eHXjB6h;uv|Hr*G9F$wNWjujRb6e2+)#m%6q&m8;k`dwVU$( zhfI6%;$p5jZ@UwNu^_c{2FD_gSTAij7VHF=g8+lE5bV8?55_{uywl6EC~#9EOj?!h z!lS9+9u;`wPL+0<;$3#nNjd6IhyZ(9&Nq z?fo}?X=$wVVrf!Kr-YW4HncQ5!P4sj29_4=)sYV@EoDCJ5?NZ9w2Eem2P~~UyH2!KY9AS$1HAHn6n7|kg|Bm+eL!seUsS=?|Az#&4)&2}LO}l;kP0ro6paA$HS%_u z6t9=>u_Qcq5umfdL@dtx^nt}G4K4mH)87B#mlj_+usErub3%(t8(N&5VDa++1B(mx z>Bt8bmojhtM-~?*t)ide0gKO$VoSf;I=5UATfWCWl7c&KFT4HKE*_8bA0Ov(xaOG3 zqaeq1aRRL#r0Qg@mXB0*F*hP74S73oJ}~4tG0A}NT}Y4&2o@lvg=9b=55802Si54% zJc#jiut);e^C8L(&gR`UozCX&WSDbTcW00q+8QUUkS_$3hbf%2FL=kI)}70rpW>&` zKC`iKh_m_OlV8l`h0?iXaTiqJ+dVi}s5@mZEVb4N`82Khi&2LZdkp0DugTIp|Jey z`e0z$%DWTbvew;&OyEQmftP!WGwp4`FE96237m-362w!Nd(wtZ#7?-}yB9EUBEh~5 zd6O3(N@xtPsf9_a(o1;Y+V6N+L>=Dst1Y-Ept7@OG1vuf#k}@bG&d=q5!e1Jsf_t`DYboUIGAZ6u3t?^w(9>WdbCVAq1ZJf)oSS2q z_AZHE&Q0tgBpQ-h!ky_R@y7XD8VHF~Gp>1^WTy1GkqlA1R95UYN9ss)`3}kLVe= zeZSf|7k}8A@gns5?_qmNj;HBDzgK4)%J$u;g6$_E(Q!s>zcNS#GJ~5V%)|Dic=yB^ ze2Dj61Srnnl!gYM%(QnRerfP2fx$`D2A4K8I6G;B3$|f!DOVU=n6&z=P&_IO-mf+^ zcxdnM5oaiPg}u4IeMEeH6;#3At095CgZ=H%@CP3|McDgVu{ZPH6AQu80yG=&;@V|o z0@tP-wDc6Fz1WqCrPl~7O=<}*kf?|*ZD?tBf~DsG2CgmGM5!;|OP?CL-WI$LmBuEB?wL*eqK)|M7b&(7R zQ$vDeKv*XvNCt#;LxN;LST7_<283xLK{6n$9}*-3!UiEhGSHcOw-QqB-E4O&Y~66$ zBB}RtXxE){+IHx~rj9j2*+KSh;|JZzPl`17AVcC1fT>~^2x zMVr@k0ENf2)?-rZuFqtIycDpZWNY26CC$5=OImQZM2Z0=Hs7J)zhu~B$13bL1wFC2 zGdRrMkj5ON#Oxg7c<0d_b_&JzH>M6be-pNvSlo?0Hf6rSG4@@*miajybj;7qk?44M zEu7ll5~PCrmCVmAkhjaEczOKItEAUN0(3o?$Sl19nP8Su8qU(KnD)-VFXQ2w!7L?J zpRG$9&Qf;5EDg@q1^a412D4PkSE3xvQeo06`Y9fmrTSiUzuF&gwobvLv-Qx=ABDXg z?|h6@SDoWsz;sw^N3CVgEnbMiY&>aj5z=vIc7yChWL~$dnlD^}dvF({ddw=z)s^sh zq?+L)9rqG~G}U`grjopKSAKl9+pPqlWo;9mGL@WaPA-p)4Ow`hzP zx95+VfjxNM-5cJ~>RyVDZS!k7mvy!&`nY@2*%vjfEnbF7X*W(atd!e(0)XxTgqctO zBEMU}?{V-e?u{oa8uBA*{YzkyILJ7}{D_wQ7qi{` z{61h=#P+qJQPt>@X(|*QCV2*3cT`fY75B$2?9{urYx&`C2g=vrQ*&w(Ft_^lY zE#mR+NOU|#_|5x!f>dx1#j${0-UE5NOp4dN5KaXJ2=P?K0G?{4^I zJYGA9$N$gTd4N|@ZEt_iK1n!)79sSMlLCZ*7^O(>AYG7vR0#qCQiAjnFc1h3BZ3q` zQ4m3?g3_yq2q+-EcSMMQf&z+&^1W;AHFHLDz5jck`|&)w&hK4o_dR=N_RKjUbuixe zF;`6-L+ddm!c=??+2E>)^TvW`ugA=dz|MNig@khZOc_{@KfaO3?KSp^QK#N zHIE*20!P>_}!Zk|xkD_7V(kaxG_35EX&1V46QzxxSAkUXIX z!a>BDokCFsay*tJ`7}Pr2vPm@V>w3mB%9I||IeR;k9K~Kg4Ds-=+t=95Ncv*geVcR zIfrZ{>tp!HCrs@5c&O985Zy?}Vo&_%!+-g4Fu~wW zE~8I`_2EDB9ss>zfo*O?gyKKa<()2S&R^aMpm#045c!>=35OqI8ce8n=cj+8VossQbMCV-b8@-=4=X!oGzHo7mG&F>AnOLzgI4xoWK(b#%PTv6pNF@4NF5wzuk0K{y-SI( zlD&y+u(EUB8Tc$$+RT%{&dSb(gmTMF8Ccm@U^O)>dp55(?qjn=JAM5h+z(ULJ#i~d zLOPdHU*j?eYx{7x(AOhj{C!;l6&yVZQjWMD_^3zG=j7P`4}HxUl|r7}*KznDeNFYC zzD^;VG6MgnvuJJUYf=YeVKiq^j-kG$MCj`>$Oe7QdB@YljOc3%f_U+>|*9t{`z`c)Y8^?W*1^dQ{(2aQgHWcPI{KI>6q z`Tyhi|Kv@M`5)I1&ZHg+c|>G>fj9Od0L@4hI*b7 zVGY3@GiC>8T?-%Wvm>w2oNp*M&1CzRH6)ui+ZvMa*LOReHRSAdXAPmsI%^2sQ~iK0 z{R(}JElCVOa1d_t`2@;mR$P+tW(sYn#OqNLkQfhm5SLs6yK0WI4oX1sdi=jo@&^2W z@T+KjGTxaCN-pV+b5hz_{bvc2V~|O%Lb=O?m~@4>bZ_ByxxG1_zF8L?vG z%$dBAYUmW7vv9jS;!55G&r^qR+0Axo4_r8J)#chVyle`J@KRAdb+N2IH zn^yH*2q#SYh`aEU{eNJBT|6vW`jIcRv)(~t%+cTN!L2F1R*_6rnKdm8k zWep*9@FaT;;TW39ln84`d1Qk%g!3+g&$5Ovmj*j)2p1B{Ei+|c4e`H~mCb9v3E@9C z{s-$dRsApTLWE(x-phUcI$Y@MH(=1$cukeokUvnt(bFL1hzr0+J!&dG;~}yhMPl;t z|M3N7&g2m?=A}a+H(5HUGPHEONtSZ*H^yE5^rImKv=y8AWz$@6>h}(`&*ayN$yp23_1m(`Jldoe}6>E=q zW*(qIizqMM1J!Naq^`vayi&PQ-p~r=63UfNDE}n3M3o9ueewTEd9{ieqtsp4I9&Y1 zv>rULcmJM)C?X7BGflu7{V{D?t7aGldL$q7Oq<5&Z`BD*Kk^h)w{P-`6pVjbS=RHP zt&7YV40vFbSA|dsd`!oGU9?iDu)_YD8kbY4@1UV6sy=l5u_hG`OQ$6CiK66G#WVPC zp@;Sv74NmkBh9BR@S0C6AG5VFsIbv; z;&fy_jrqp@G#Q84cCPcTOj|49)cGl-t%{r6AT`-ZF=d0TmBZu77U+gx6<5qsL)K7T zo^Wz`={38iJ&=p3^FZWm+WW)_TPuw?s#RW5MK;UR%ZvChe*C_WjjA#ePqWa^=2NjF_=^}^=SWNv^Qm%u`_m9-j4DsFb6$4T z9@V5&rLqcA4Lbj5e@e%6H#HrHoXzOp#7v~#$gkd!7X7N8MGE>Cq|S-=BbOE{aX|{_ z8p-d}Uc1N7;F3(rIBb{E$0_YIr+%+Hxg%uVl^bYDmpD-RyKQDB8H_Q3-E|Ye>{@kQZ@2d{QkZdT@8tXxjz3fT#!f5WMmvnQ4YS>(sOLVO?IOPG%}q1MFd?AkGg)X^VB8V!n2i z_E_CX*_&m@bW+z@X%%cqs(~uTqL|X-?U*5|94qTi+RAWMmz8gJ+sa7Qf|WUrGDbbm z%E%&i&gp6ZD|?)>=BX{#{E!fpZ>`Bksio?&)TKWh<-IEiUWiWLsIQ?sCjUoZw8Vy~>C4Ux?a#-Bu2$vYOg%Ir$t>m09V9 zpPx0Uj;p$?9Li-YCshkpTK{hHdD1$q+OzUGR%(;#jOxr~g`c&Rt7;<0e1ra{m?y34 zYC0=PnC&LjkLo?0irzTmwEbtb(4=ze{IgoeN~AM7chm+h>rJdYCZAswE-28hN0O?C z($)cO`9jor%v6f$tOBjG8eOK=-!#frC>L3og%yHgwyK<>+{GEhDEUNbn$K3EMEO-( zu~k(RWnvyXrm83#vHF>OYKW4BHNz-%L}`U1z$gtx>3}<6qcjs`_W@f;6y<1&t#lG) zgj2(wqP&D{5R*?IQCh9EmHwi%h_*|AMU*X04Tp*{dYqkVgeaxtDA=k-i!wFCju|V; z4^As4h%y{&x2aF2D64RdXq2g z(PkdL>*SnYlz~p^g+%GsNMO&U|q$% zj!89GPhuq#k*1}?^&70bJJwD$Qcq`Phm&)Pev6ejSvP8^F?v2Lr&rslQZ?PZgs44- zY-OBY%*y<&wlZEX=Nj&CdLv!0X63gdcFbgbnU&|)*ve}<9Q}av=^sXU(t2ITurlda zTbZUSuu{!g)u-#qtenL4qG{<{x-l#9&iUdU-GP;SkL-Nj)7@A(g0VKK=Ih?99Cdni zfgZ@pmEY`Ci*yPr{hag8M>>_2P&t}vs3m$lE6+IfS*BlOrH?aPR_Ix*^p)9LL#@fxB0iBzbfq&Zla|j#u6w|@!u_HPx zkY-D@b9SoZ8vAQdUOQzgr*#EZB2U}Od5!I5#8_u+<&tj1$}%VBJKdUo<+9O(=VvRDWn}5J7p@$=UMEXGJ+m zpl2B?Rh)csde*Tr$WiimK4+z^lk;PqeXJCBdLz_>$8#uakCSs@&v{l>J2AyP*I0Sh zX+?ww+doKk!-r60GEPO0VE4#mY~PQqfbIl_HnzoGW?Cu(HQdp7uP>N+U<9 z?0JHf6;9i$c%EeCNv991dhloP(5|^oZ&dSCWM$)3yR7P-r&+n^w5x`v3M*5cR@C%V zW2LT>Pc2UkR(`l@=TqBLi}kbHEvJS}Jgr%ocGYf0Q%@UK z7C8Of%=0`eot*w@?rG0THK)!kJRMod>9q7&PiIz!I;FStbYW$klTRy8S5^u-^?AgZ|mv9N`I#hpZD}*rGis>J5MqzU7c36 z_q@W&2&bPrcm}aD%c)^U&k$B_Ii+{<3}Yp?Q&wls2v!C;efWZB6s}!E)Z5sZi;1*w z{nN!WI*9IWhT@!Sl&+q!L39t2`Girnsuw-uSSeJ_R(goCu(7T566JbxTNxor?#FE< zMU)9;ZRJ%cbj=pr$SD0(n#4Trq?#zoZAW=sl%-BS(?!|zoSpMqqLi*r7%G)`|i}GA;TPY_> ze`jtyCCYxM$0~{P=y^L;6;b9_ww0QqBs)3R5v7aNaI2~>N;4t@)`wy)lif&zxkCd9D^@>@=-}KJ6IWrW0{UqQodxRG0xq#vWu1K zfBKc(tmML)V8`rdr3S9hY~>qPGQadIhgrGq%J~EsT&%qP*x!}1h5bq%j!C-Y zSMsy+C+>0VoC~m09%lzzDagtXTl`8PRu;Hg5yQ&xNB)>ntn_n@`xC6p#GQhja{?>V zaqhO28mvUP+Lg%4Gp=?$&&sJn{!~e<Yp+YB(#i zv4>{oGm@2oxHh(xajaB!DQT=ca*g|VRyJSsr<%Zu$2AYrS=qnaA2X4aI=}dpDXfIL z=IR@)JhRasGnJJeal*7~IE|HUx&1M3veN#lUzx#5&6|E@CM)5%-mvp|i~{o>|y2QVt-fO4D%~{Ii^K~U)j$}ZJ%E`z{;j5zjB0?MXp(QjFs!I zS$B?=YOWeyU}dlCsJz5VQCAJWWu=a*hTpOBN4UTAYpe`$jn@rU=DJp`o2=Z%Ga$PU ze_-Wn*IfOH6|ZZq{>)0diT<+guu|2vZro*M$7FxZJyr(f@GF0?65u*=b9reUo8>xk z^Rkjr)SoJZm5#0%m7kSuzxiVdu=2j^OccsWP1li9kd>*fIbVpCP1rfHd!sNbCtP(d z%1YE;e@r+ly?^v85v(+I^?Vd7TUQ^ z9<03MYFAHI+F`fQ&ZieE39er4&B_Dp3EMF*v-0jA{#1Qg8SE;3AS;2c(uc6J+%@Zl zvr-ZJnRd=2Sn2L6D}|NMj`(B7urk86wya}iA@)w~eActlFQ;EQ#L76=?7hs&QkU{A zDS2wc4+I&&sVme&sqV)35uL8>}31T}#|#<$-HO`jM5lu(xcN zb&Hi}Tx-icR+7j1V}4NR#p}Frz*ut-*CTDmX&pp ze&q>P=oKcrtn#e%bgdEN?pntxv2xUPTs+N62KJoooU5=h$+d3OVWsXj z{?hBR(#pM#vGRngKFwK)a2*#dSjpu&zMf?TFT6XYcV(ryYfQVdGTL=@(UX~^ianXIhDGctPwUuUJmLx0XQSjpj9 zSLd)2=2}JHVP*alf2z5x)O1~kf51wt>kP7pl_IVg^&u-&UF+&nR+_lVTE@x;cl>27 zXXUc%e6fy|;mRMgo)!F^ZKtK1SZN;USGKVd<+{e+!HTD#KV~N@=|%j?9#(=}^JhOR z7sLE9hgew};a85ZveV~Rj)-k6-zg6^|>`cdQI`tu0xscwKAD zkF4Z%9R+t-8SHAsFRUcEj)MEFjC36Z4_K+>Itp|!?XIkEZEDyLyCS(+xz@r~mO$|! z20w|&|N7z0KBM$PZ_vMfYIQ(fj+tM~RyGBMuu=&$rvr+y^0SlA#egtY9-^O3%+-JhRu(#?{}A9~Wsj5d zoq%XoJ~fF@!}|fT!5-}H-q~%W8tTu0l8902o7au9Rq4Ql;9Tg9y7i6HPvw9@{Zj!A_FV1GT8`7RWh&=E0Gv4`qxiA9$1-`rI_NtuzR1|F@WD0y}Wdruz{J<`(gkl{tN@8FSP8Ex}O8@$)4uO4G>F%^EDXtz^= z2F~1=6gY;JP$%ct15;Uf%88jCI4&5M`>IN&$)}$+J8*n9Wl}aJGn+Csn=&JtGCP|x zH=8m)o3b#QvN)TvJe#sAo3bXGvLTzYC7ZH6o3b;TvL~CeFPm~On{qUpax$B8Hk)!W zn{p+al9f%lnN7K!O}U#*xt~pWm`zc+{yu*KvMJtdO73h*NH!%jn^Gj35|&NzWm96a zDRJ2p{PnND9R&&5lnU9D%Gs3a*_7JZl=|6}M%k2R*_4*ql*DXGyKG9QT(l<4b=Hm9 zfl0Yas^@p%-PS;lS~3SKPyvtncBWDTVRO8#)G*lAbCpVgo%60zV_`Gi!}k$jJI+(; zHQ2KA@ihk6gRnDUx6i=$6kwx}&pg<1unS?oK>kZ$DOc_lw3{!!xpUGmRD{sj=f zO#B}Y!uLMF&r1IL`rsXJa7Bq|YZ?UMQ|llEpw`zE73+fm<<(tlU+jTP#j$->3( z-XL)|XCd%EroUble@*xgqudkAF`r@MahzOq>fvu+>ihW4kE453U)1-y z!%^xd+%`~q^NdjH7RuW>%GfVQD)lqsu6%%b@5EawUFxHxK3dwlqpPW(PdG1+N2}Cs z$CY{%+A1|kY%{ixsq-&TIgcstIx63zvR2?N`GOvmhIZtD4MG3rhHZ=E{V~{Q-cza& zY>|2RUJ~s0us+z==i@km&4+fz!=9U=)Dy5ZalBW6od;V5_9F7F32TqjLYXHUCzyIy zk#XAjicEKbjS6m3nofQf*+vas0MHej4@e0NWP%cY*!(9i_U% zmPWmM!xlrm`@`OV9R#}t^&Spu>Jg-x;XUdC_#;ePaeqMeH(aTceLck3=^JnySon4n zcErZu{xaVwvu^c0rqpQEGYR%J*a@(+VAJt##YL=d7tkMXqnxN&SWjUaVBRi-orZp0 z0(%1W`xw^lkK5bKy3kd|afb9y-(jYI{;zfN@9W^-*O9-kV}D=wrlw$BNBy^9J_cd` zcKBCV*TFA?Z(;szLj8B3zMIgV-LOSI#QN^4|4h`A;!>d>a&(+;Fh0j!Tn>E3VZ4ok zalHuMhW@$&`v~*pd)OG1_akgF`s)ttTJ+a_*bgy|f4~mIIO;+k)d=%12dv$XKg;pC z0qYYT&+X8z+;|4_uiIs*=rkN>xKlW~6!RPTjGm48?aFUKUvoT0Vu#HKy%LVc5-$I* z*D>#r|N9bmFdgR!_#5IlFYk(r*rHVBLakEs)ujGym6|)o*s@O>`$Z*V4?Jt^bEwDR8aceLxWb5HLCtFSQ%cx&dSA8^&%a-up$8ksYdz`n) zuE4VuvU6TCd<*lFxG~lnvPE&+lb!a4;UYL66F)>f$R6%*_@Lx_W~kvZlK*M3?S3$N z7mPoptI5{iU(~;Cpr1s)kUjQ-u|@Gs!8WdT9FE4hAO5;;Vm))|TcRx01^U}q_sCYl zSa)&xFQR|DLobH)gX|IEZ78R^D~{_?ux)A~%+EHkv#CC?k$9VgZ08uV{(8sX!1{^& zqQo}D&N=b-nD1nZBOTeDl0F+C1UNW)2 z{FOKl41%5@_9x^+Tt@i1*v?{4iTz`MiK{PMh^;^0MqRM}BcG#~2V{F;{D!;Ay?`}u zH1x9=x6v-0`h6Vq3tRC$-oNP+p+ARw$-abnOLiDrf4S73nb7H5ahZQhKMgv4kCbdJ z)N9(`{Ij6n?MKgU+ot}()}OBj$MZYT`=H)rOK%|d`}a>%YCiOD4;uRx>Os5%{YkbJ z(v!`aO4gr_+PjG2F#pIl$2cu=`QO}yZ;C;G2mM60CFT>^N1{jKd#%L#aU7DJj`>Ko z^=)HoVxAKxW8RZpg6lD|Ies?!XuK`I)KwnM-<9xhM7_yY!1_YA3i2ac3iF?AFpg`o zo6&Bv=ddo3jS@WpZ$J{y!+J>e46aYfJ}c=P-Xr$+!@*4a{Tuj)qCR8??j!d5*P~q< zq3=sI_BhtjjV}Lr^vgE*TcdokPvJUqo6Aq_`hxrzAF?lq?Sb(m?z-9N4MjhM>lD)G z4pC|sR;=d^QPZj^m z;?E`iS;9{;`}-#p>Gq@CR+vZoUG=?)_`}d!AfD{!!i|{y>1p1bfS=|e*@c)-CtUf^ z`hOOB5big~hKN0YaUrH}p`Ufd*IK32CFoVz`pe0W`F9n1Zkz|m-WfpF@27FP0li5d zWBXzqBhH2M7uoTcM`RD-xF;KnaV9$m$2Hkh%yY6YO8Rm*pAlb{bR$L2k9k7+-u@=t zO7shHH;JDlaUV)KCyJW*4~ChzH*h^b@wG6Y$+nzg>>VlRJo>L)$XSmzl44xyAN?>=b}H!7Qp%Ekt_Za9Df0Y5%-0$be#}T*k8Z=>G=Hw_=DK` zb(#-(q0@ZG>x!?7Z%G$`{w|JRviDJMvb}LUlD#1uh;blZhINaqdehkRqCdj?CB2oT z+k@kfI3LcZWbfTGdU3%Ke*$4?RHmoZ*NT>2ucW8u&h&KKc@gVZ*xhatFc z`5yC;>|FF)P+*WcjqxRWKx{g$Pl#JaD;14&b#R?Y_E;5T$Fc5FJ3qvAZejbn+M}wV z-tjKZxeWJtF8&kO?-g9!WC`y3z$f3reVdH5QHzwC?BYYH-xToEXvcKee7L`y?eZ^2e($reM1=vVaH zM~>g48l&HqyVyc~KXGwB+E z;%|}fDHm_U_?-ub%trlTYopy+F8^%g`-6+;EyaBY_!-3i3Ofw(4_*ER=x3{lN8N=# z2zCYhxnS*aI)`?LfZs+J zd%C;09mcD-!??zf`Laajix>6k@A$Frg84ZJoPqWZCyV1_H0<%YxGr_#EcNMUrhXl| zoBQBbgrDt(>r=#y#rRHj;_-V&;F&JognGU0;xd>Y^IUuv@e5sC5&gXc+zaFPv7_T$ zGm7qe|M~vA-UxGl{ZIGj|D?ZzbgOZ#^-un;@c%F6_CdXe|C@T3MgAN9P5CMRNBPxp ze%tYH(oaJ9d;g8U^GLIA_)qPhkMsxsP5QA&fArt@hoOEa|Be5j%KdNkD*s12{@eT} z4*&Q4lDuB2b7&XY%VMvIy(#u5vA>A@U97^j7NrXm8!R@T*if-W#YTvY5gRA=aj{Q{ zeOhdFv30~Y6x&p6OR;Ulb`aY|Y>9Bf#cmV(h1fk}_lrF&mabu`U(brYB=)M<8?a_y)l#3~zU_9=LhAckG|v9( zxL=##SAmLRf8Z&ye*IxJrGA56wFFte-ngk!e?osQ+SpME#$K&qY%}4dViS-*#XtSD zu_vB1c5ZuP(50n#R=((wllU}ePa(dGIm{Cvi|trp1>QCh+iaj9Q?%N zkdAC_w*L5_3V4nN{p9n;-fBVC?~iJ!R22NbiM{Zw;dRXZxDLptB;tBu+}Oq%8;p7o zS3|#%eIMgM_SOhZ2mZ7tJX8NnCSH-?qw-w zbZg^(tBkQ>HI02Fc4|e#O{JV9w4dq`DE0Whj^S>ljE&=V`P=;_+EE7aIgvlv)2LS& zSN{z`yAz;q!+c3_>AO(xiqPM}ydgVWY|j|Op{PeiSNyN&pQ?z9#yF8Zf_YihF3H-=sY#~<0jb&V~J{D_lroRIw){Y18& z_#a?C5syau$i67)KM;RgNuMeCzb*c}s2{~|75@>5AJ6RXUkl^Y0&(Lp4rJGfO~U*m z-hktnY)jEU@EC3zMAo0rnrNk3Bd$7*2eL(*llA)x#o$-opr6C>O13rTO*@yr4eHSu zdeU>oZmvz%pZ*-?|BLY7L_d+;j`U>fH8yq!j(_4%lux#5C1Ya~jQt+-m-JOwf5<9H zcLMW=_-RSsp8fuEe}mo={_~hWWCPJovZYZ!vcoV>$Tq+{C3{i)FC%~A!>9+@o|s=` zH%Z)G@xO-l_H?y#VkvhRvj;{RT34YvM%7=iWb z1H^|QKeAWQPh|fhn4DiKqwJ3CNdhQJnWacg0<;hu^w~z7Xp)*^hAE zAsc|>hwK8JC&(Vgd4X&vw2$l;IL=we_>+B7{PU4NaSQY>+47R_i{d{j`Hhfr>R^6Q zTycyS*;B0h$0Z5t;$G-+Sck|ygZ#-J!ugo&xhP}56Mt^>BkAo?KeE%X&XfI8Y%NJQ zSn|0g@s%;}DJ~T26xj`;cfmOCb@f*|`t>0Ew=oW6KZc*|4Y7}-z6Y_6tp1pvhpK+E z9~N7}?29E~|C08>ZXPrHVW)%(Y%{!Lnz3C^D0K|^1Y*DKgU}!~0MFOxeT_XqxL(Dc zTmArgA0SBmQ~XPl_&Qa^9w2MdUHT8wZS8E*{Ws~ay6QO$zo&)$O!fX|b019gz5Wm7 z`qP>E-TH^Pf9i+3{}BJ1t3K|2)9Ay0)o(fQ^DlNkPeJ`J;r^TIo$nvwLtXK=?_nPl zaTFi@5AmfCZ{qyrj9lvgnbRLV}Yxza&;0@+Ig45WCCjX2~6W0R!)xQ)Ahhe(346>#ynhQaaS_V38m-9nTNwJsTRwA^&l_DR(5||6RH<*~Kd>&7?fSH_V=Ef_O*OK3CXtT!gHU$88(6PlpM@p9Jpk)5?6=8A z{}{*i-oMuaO!MG8Y}h)}FEpN)k?vou7qo8GeGTuYV4ekwwbN(brspZ9|F8X<^d|m4 zjSEu$NxnCoc9?u0{6qPF{w*#yp7H%tJMDHI7(>s;gH)@X)IULLEzVPmWStCgrC+-j z`{-do>KoW%VF9Y$N$it@-Q#YrYo(En`k9_d{=4#5ll{jH98 zdK9MBLE(1DH4&|?kE<>64`t4wHVALT)d%K^DvPTyrP91@kYAUuU^QI0Kez{YyzrZ7 zW#6z|>Y(rn@Idfc;g%svjR?!F=q{e}>jQojTtWCUR^jxpJStWA4{#)lB*K27d^yE*u<=RUs@yO%g5vUJafhoEV9tJ?t@c zQ8*dA9eh(b1pT%b3{Nq`i>dp<$G{cA z0l2H7`ldzT?Yi*ds-^Hea9waG;dg!5bqEhri-k9Wp9QZGPOy|}8;(K2-4o^44BQEv zTey!0Z*hl5sCL2=!M(xVh0mhD282hdRl@hdL%~~wcWuDapKzb@mNEJN08RrxW|)ts zjPNMsV@~&0xre*Q@MyJIxbRp!P4`5rB4sIkx;O3xJOzS(l5lHWm3RW8)kERUsfGtU zZsIFXGU+c0Pr-^y@rmV(f6}Lz&&cn-@I2-i{&g|bRFzzfr%2(kYW@=@zR@bBmW7v4 z^%D$tWG<;rGN-9m!0WcvYD>-JAO* zJOvFeqs|IPGM7~Yu-ifL6~P(dkE`*_>E7EoTb&Fqr{Zw8LH*+$K>UQ-!kngNfWHk- zPzS}ok=ysA8jQ0d#UEpSN_lYtru^@M7lxNtVa(~?7|ySP+Adt1xuQzM*_GmxIR8qj z7jwFI-YQ(hhd-@yS0;bDcRh1uMZc{@@rS|p!mFq?;_opCPhrEWs&+VQQ~YS=YU(C) znwkyH5m6mmf5tzv500;h8fu~NN6a-Z$5A$e->Fg+C#pzB+&rR%+9Uqgzz4#gRekH4_=U_Z@k#@6n%WM|2ydlAnbTDr zoSlR5Hyy_dZ~BC|wYn>;JK}s5k*I3d=ls-0EU>|D#M>hQ@z|%j=-#3s*yVJtI1*yTToCeB&BXb$`ah??^R#RCv}+ z?3P7zR?Qk2|F_4;|AN{gycJhA!y{f$35|_^GB{WzsrkZva5W#Kx~h;S#!u(xF%ex= zsxY0O$3%2fw+(v_p2R3b^iac_a=iCVJb8N!teP3#jrlPZyioWW^Gm97bMmLD;GuZ? zF`}nx#+>fGgZ^0%(M#PH_I4ret;V-7@jmd1h?muD=5!T|x0KgJ^ijE=HRW}L-xJVR zr5aXc(0`jF`l_A6tzV=5=&LGV3ZUl7hyMNo{>8!%aXbdAWL2b<$uAM(yDwsZ+9KS8 z`4!djIr68e5#SRM166nCbnnxj;w_AbLCV|Oq;JMNSj}ZlQ{BPeM+{M`#D8-jo{mKf zRf&lvJ{OMf+Y!T57IT_<9Q=F4aP`pmRU00k5vp$+6WzB*8ZIo&%KTsCr&+9JG`d9rGmWa1BjpN`B>-I>$XRn)s? zfKHH`r!7F(^X66boDX%rHh`SW*GJcV*PmJnV|wu z4&}Fo`*Vg`EWDd}rmFsu$?qIEBYc)>$(*jXqJ2q`Z>hP$KJ;tf$k{4On6B4HM9xv| zdUF2iBgCghzO5DtFT{G28TpP1>t)I>oT1cPk?*PP!j+iksl?u<{C404k@HnA=5+7u zO?Yc1@_ltucr|z>xY5fdzv-yY%H9iNf zrz01torb*!w&Hr(vrwH74nAb~Ci7U8|214M!e75H=jZ+U4P1XmE>cs4e*_-^&oM05 zb04b3%<0~(c$@Q)=Oa}F>jw4z&o^j1K2r2;LE@Fi4c`}TJ=t(Cj63-ceu4T#exxoM zR@1OvQTmn`cf5yQWcDpw-@xCO*>2xQioRV#=}r4SQhS9>`;Z^A-M)`h5eM?m*tb_jcEmcQ_ z_om?fBXX&#kK+`6Y41|ChS_fKQnlasy$kZ9+z@>m3yvmEpTn{BE!lw45R$g zy$!%V>l3w5c<@hn>&^G63L9?xuY#L{rwVtwrPNK&Y8<4-KME@W zDEtPvYsebaa-@mxg>~dWIQ}k-@EGQGir#*r_3JHgM)-O)ml@Y*=;zM94XQTAk?Pxl zd84AgHA3-&!M%K&RF?R+VZ086Z&sP3P5fTwEy_2>#Ge6Ygl|<9nA5$t*uPDk6#j$x zGu8K16Q37vb!UWcSE6H%RSLYlK(5VK{ai`@P@a#M`L8U23jyzz?{81Bav;|Kah}|GQPH@b}*9X3D zQ~=f`;!Vs4)NI3QANXV6LA9JY-CGFtdgM8z!my50d8NR?>X6E0PV*keUzS?yJFHF$ zEBw;PX7Cl^&Ux_Go$rWBz`9H2O#<%$S1~Nd$5GXYIo+FvdOpHeY&Hl_2M4QTDlXHM zzZ~Z&Prz|CS9mwrXB}4|ud`oGLO&nyolr^4_Ih|itv7ye`#W?#IH~pt_WxXkGvLvNrM{FOD zbzis**k_$reW#oF@w>=>L0x3F*WU~3q4BF;XzwlG1(h^|;?ul6PvY%j-$k`t_;v6f z;I)ROKQ5`A%;~BH(g#FcR<&nxd1@&*Pt;YlMYu~RTpvbVQ{Gv|UmgCKs4SHt+>!Zv zbz68cj-NjGD^W>rnfUtXuhLOB)luQM;15!_RQ=iP_pajcxTTs27vlc7r4ohXxIb>G z&cgIYq9@?C>LL6P?6YpG{=(1WTL}qKKdGU@FN3RqUp36_4^}^`Im~G)*GgQ!`R=IQ z5`PcJ!D-JObyoP)$GCNkx}!qpP<^pKw;Q)w;3VO`;OD@-4NL#tRl}Lny$jaSe7UEx zgroKuZuhone;AGn^6wF*^Hx)E<#&v~8_&0UYO!z=%%ApA_f(O&#_u_Z>rL<^;bu4v zJpuRBL*X^Jjy@26PtAYV#P4VRMOAo@I8A*I&ItciHDXTp_UlUV_tj0|$;`j0)OjX; zF*qaqfttab?mf-^-&N)LF z8ZSHt>2C+*v9`GQt*E?K?hi~n<@a7xi1h?>y7~!w=?kOsTZzK)ST9#b6|(jThv4{F z1NJSX^y%s;@b;)8)?nso>I&xX{wO?-!oO5C&DZbFT5}tYj-!hMiwpxBjDW<7q;vdgEOZ|lT_!Io|#h-?!(6<9(th2)3 zZ=&nrSgX-uN}uL^0>|esQL)wx;nv`X;Q7M2@?yS5m#}UMCxCN;?+bSd#kU@!OIr1p znEb|q3xQh--z$~xx$YX!TJPVEL^o1_Sd50EP5NC>eB_B0LGu}V}3CV_mk13 zt!Ba#!8O3`gd-yG)?ReHwNSVoxCwZbaEK4TLK0oZdMI2G{5;sZ%;cXDrPK@2WvxWv zmEi8+B;l_R)+hRLYq{_(@GIaA!udUT%RaiC6|mgoR~bA893o7At!F~?6ILhT@!;3M zy@WgEQ|is=1Z$1(IPh%nR>QJhJ!$P@PWPtb_;}=b%BsGC%1ifloIvZrQ`SY{k<8_- z!B`h*{g?~R2(MsGVoq0dJj{!(XdM;4G6naK(Uq)DD>*+tKGsB6wH6DX#PRT1bT!Mj ziv8ZNYqdytXx;IbGGn)A@7Jb*v(5IK3*3`_nA&T*KZ3UeD`W zxp5rO@m~2P?w6wLTjPa~qy4`}H?Z~?Hs_m|239Q6A)dKtOcQI8VejKuZ_35AvZgYp zd6TieR0f|Fej8j9oF%+Ek5Ua{p0g^fr~J~q7r;%ywS@z4d^{J^+R7A80Jj6r7M@WU z=Zly`>x%Gpa1Zcp;mbv_zYx>Ls*ZJr^3RLoWgxhba4?RK5ixD88N!vouY%_b?+QmN zW1hEe3jYkw1m80(^R1l~fb#&2S4-SKJo2=+1`8*Hu|I2F5w4d;J?VV*qpE1L&mcl;pFEJym0E`3q1Hq4CQmo~|^pQXItt-OwkK(QS z*mSE1EvzV?_TM97CtAIj)4X#g<9raCVXYBf4^9AY7jBpX=Y!bStlVEydhAz#Yk-Rg zpANzKAU4zLF8mv~37CEjmg4&s!ucTfb!&_8YvAX>dxVp4e7z7m#R}bP;$H=K2ZtM$ z@p!{3%WU7TOtt0;)4t|`@Tpd9%rmslTbp^Bb(A?xwFYN|ziDNOzv3{8pKfLDH}UnD zXIQwU#J@C^2+jzfX;olOSLXS|ENh`~68uZ7x2(_uCcSxH`Ifao*gUVCZ8bY+@-xpX z=U7S1>0a}^@@*^NkV$WzSH5G-X11SK&b5|{-#kxz*J^p##GB`d?^#!v?dOT}to!0O z&oAa%b20C!Kg{!s_pJoX18SdnezCx+&ul-B`@qT)o-hQ*W5hx$<(P>#&*K(ZQ<>A1 zdA{_abynCsKl;d`Ux}jmWu6}`wze4d_83IZ6PH*?C)h8~6PH?dneFF^%Pj9nliuvl zF1Jz*d(D38O6xZBRf~?lKCvsU$Wtc2uqaCniv7eY#XQ#g1b7TMLHr)#gmEz1tqceg^!xPg8r+ytlwhz(s^-dhs?^ z>;|j5@GkH=@Bra<*Rh_(ZnU-tPXd1d{?f1tEIRE6^Y&AN=<*ELuSpQDM>YCVffXHUQ`>%4Ffy#=dwS>Fk-dxQ6*tZU4d zawcQ{<_7$CjX&oU@a5QDR>C>X-}~l|*pC9I2=4*^44zc88X!JO{RiFt$lDa(7F z(vMXU;NN2RSi_kwS&t+AL-n=8pZ-$Q>ym)K_|U7+%DKZNU}QYH3VCxu(!{`y+LH&(NY#{UTMeXIl47U3)~ z_Mfb>myEy6EvnC9Yaz2;e?Oc0AGVfDys7_TYYlUncPPq#9O>0%$}i2k09+oN)3DV4 zh(&*+km`Ge>vPnaBy8$?+|Mdv z52vk>!XvQGR?BhP8pk}=I};q8=d_h+{OU#r>_3+{V`aIxi#~6a{f_ca^NyK__q9r# zw}uP92W|l#FC2jLQJWGMtb@WOz#YM7g=dH0+bbn5T5(rRejCBPz!ik!3t>OD#3d_L zxG8uDI8!*HD1H^Q#AWNGa4qmS@D<_l#j)R7;#(`>n#q3=_ziG%;o9N2>n?G{qTigS z_H+f$1Ef zZ^HdZiR;!L;o9K6;L0~m{Gg8bb(Ru0tQo?|o$x%m#E;fV!}7fTM=J@(CFR$mCmqi} zT1SQZf_>JHRwEpz(^Z?h1r~Ma+JJlEi-=a5j^kDSMnEY zHS<{Sci>{+E#f!ln_sP+;y34;U#DzWLoMXW|u|Z}OFVXjNw3seW2X?RjVoHtFU0(?e?&bDFms&W4o{ z|4{fXa80lm*U2;=bLPhVRmnfBMB$p?rr^$oWq$r?4Q5XFn)kyVSyzO=`-bM@BP;Q) z>EFGd7~W~vTN?K_&y{>+Rli66tCl%`JhGZH?_~B_kF3GWY2M-+aeS9ldb@CSa98kG zhNV81zR8@f&P}8CYu)J=%72!sgI}5HRZ{D@!sBaVf1#vD-xTgw0KfQIGC(K%YT|Q& zCzcG;5GId$dxCchU^{`!)^dc5$P z;GHFN>3za~BK^UVxpmp!O#FKI&z8)iw+J7C|9Z*1+WWxx%Y*Ni%%>BDTO&TGREX{_ z{4V_YN5mQMS}h4oF7-n$80t5jhf@{saR^Bz8d`2_AH{42OAxQAgGzan}tbGo-I z=I?W*is~!EyAj{sS5zndLHVVt)0^?WB>ek?&GWFLn*OFC%H#Yx!rzJclJ&w1c)!9b zrZa`J*5mo86|S!ezk~8BSU!DMcqaDqs#sBa{3FWmlI4Aq(#Pnx-e33rl>_!s zf0WmsNczPn??7+`eOfpcsfJZZXVe$* zJDJnGzhE5S1Bc+b0hL!C{kjlb)UcG-NXId!d!NVifMul`>s7*)kpCy(%Gjr)^u59B z!Q+Kzg13TSH!S%z(Q}#8y`SO!plzw9Iuz}o`tAjH1Wyt+?Q5n(aGg$m)4papRX85) zwNx{GTiCR>xlY1$DaDsS`N68WKFFNrEsAwzXQ>uC4Cf)L@3Y{q!EwT02IGFH)U$f9 z@I&wk@MyzQ|CTzF+3t^4IuzqfB zC-8modq-pc2;2+r?NI$jpuZo2*9b2J>$vAMz1IW3)Tg!H$80}uOVrh|&Qp0yF+YP< zqFyfCB$ehv8y$x80{Pp3@jj`}6gK10RtMl$PRVb^qpcn;OyiL=?s=_n98mqH{et&_ z!OeuXgG0e>3`_mm>F&&UpNOAdw$~>m{sOKGipRCrvAB+*{1ndPQQ!pOUvd8%7uP|j z2p7$XZ=rxE3H$Qnef+qN`lxVSa5eBn;g*H5UdMIPW$|7h5u7DFE*$UU$92&a&@Re+zYKVelz`?4o4v04XD_p;Rdbn^- z?!SKerm(p`>93PwOuV^2>93CpoBNYw-6+=h&HYKT-XdI;>pwszlra8QT>k-jp>Qwu zzoLtjH2w+fe??~spT>D$YTQ8mQ1~u*7PxOI6aTOewSSPlC>-9G`frdxN(&SI`2H`sJ-MArol5j)t2jFRjWxfs7^O^C!2iCEral>>-yvaWS*H4c; z!*r@}=c%}#gx_1n_$Pd&)LQUx;i=%w;4H(k-VN7DWleqZeS`OH;)d(x!cT+ufY%z9 z`i#&!nbW=VkJI^fq^|I|Der6Hg~I0jmXSKNobf+_=OvFkBlURUFOfg-UFI}z6P&jX z#EsOopD^`#6?_cb*szp8O1ERS*Vh!iN0{ChJR6syD<`W>ZMcl9^s8(FZif% zcdWPhN{`jPiYC7q;DX@NhNV8^bY*6|e~R+MN~h_?!dnhte+XQp61UgejIUqP^d#Zw zJYH$~zVK$8$Kwz`;As;-2iLccJZbtObDB5cFy42Bzieewp9F9fa7DvXpYggrGoJUN z|7w?>p!W%v!1*l>T)&D*KNrV!L-17L{orQcIff;_biG*o1^Uze!$jSzs!1QsJV{?P ztSW#r!YAvy!Zmn&GIaN9Cfn$|@rs|!-*Ye^06vS7rW&8zrJ)5dm2}go`h>xvp z{2%PWS)ueaJwTYAb7g`@7?%3HsV5oc{gvsZr|X9jKWH_cCzhV68`UxSEdtL2w=yj0 zXXzxvss;Q$>n(j$;=AGg?!(fvwXd#8KLflRT-vatpQ9@qRzJX>5&pJbEb+Cr;(280 zcl2H1{@{(^KmL+_uFhSL^H*CiKZ4Y|Iz{*#;+I(O>YKvf;r`bLPO5L>v%pKN_w+%- z-a)v2+FtrS9oE3qcMfE1B(_vzB_>xaT+ z!56`O8&dvw-}V;0U%Eh_6>beq^excMo-zKH){*}My+wF1IMMfkF5AfXHy5;f$Z?e7i)e=ElDW?6a2W!NO;v>Hcl0&Jw;4_E}4H zrxqsu-5ZpCnLa4I1?;ny>H5zaf00SFel6E)gyX=$YPpVWY5bvlzFnbb2uFj1)e0TZ z%J^e`rt}}{!NO00gVo3Sitz5SG(T4A#OF->Nig2v(mRD$BYugsN>^xY{M*2mTBR2X z=h}_;@k@WALlcd^DEJ5Pc;T*CukV)rRNoa&20s9IZ)4&sqd%;JEk=x>0*m-i^-W->5eT{|1hW->Bm{7{7Twxk=9!p2z-8 z+S}3iSK)qUX82}3T=;WvT>NI8C44i)!u#@DbW$f1uOGAUzWf$_R5%9wjBl%M*4g;W zvwy4JE_`MeeSc}2uKa@W{{RjJFBkrV{h#UBF2=u${h#UC!h<5QKNz`Pha?&QBycEr zyl_4Cf36=2cVz$PdO%kb|7`}fZ->4pd=nfOzeBft(fGeEM(h6U+PrhX54>Y>f6GNk>7KrcIl)ZCjJHR^WUR=J&peZ&VP@dD%=VCTQkGI(yEv7_X5Yof29Wqr@v1A zuk}UYS>U+%uXW4bCO!@8k@lmGIX*{|@T7{>Fa> z+}w9i&lP?bYhxL8oR@}bBy4L^`|04I#5q(m4F!#?9 z-RKqaoCt7E_Pk>|M16rM2+ z`^)e@WKQ#T{sY%D;6{T?d2fPSffI$x=feA7@h9|r;ojgEz{`bq=EwVB@hA0t;RoP8 zU~4evC-pm}LzwORfzvuw*wpv5zAb#QAFcnVb@w5r{`CHGgZR_>sBj{9Ah`Ze_RIDD z8NJ1@*IXZ+(Fwy$dUJhrMlTem?@i$SdtGF>@jn9N{d=9soaQZv>-!P$=k!V8=HOSs zmkdjL&gC~3 z_McJ|yW0Js(*D19wX;JhL?MJCDi!^u$d;q1vnwIw+#!TIg*G9CP((=)%BkaDoSZro z8=)wo=laZb&8)TWQ#jw}`F>x|@A;|MeP8=MpSfmc&6+i9-D}O7IqI`m;Y3dFZQ_3s zcVw3O*cR(<*w)AP*b-shp6#*RNnGB~>3UK7+hcQt_a21%bK7IB|IGSLbbk^0Y~eeI zbG+@btV-5jy8zEyK95Zl{<;o+uYMleA$)K;exH6G8!(yU@1gclebg7Rb%ra`miumUuUDYvI1N>3BV=IyP4LR^oWu>evKk+1@W>(+y9R@dRJR)Kt#z;!NCs z_$oG9n9KWBY_o7j^Lz2DSg-3j|M|br`*dx;ip>^&kGLN31I&`&*RjQhr>5ceXQQ?| zVlAg}e%zjR#AXR|d)g7Ja|5T}Cq^qCw*4m7M|dXj5yS(TCH-$>qYc~r_g!qWaJK2c zzKiv`k@MsI`CV+KFz>JLVr4h6&im`T*g|G$uRCKjSnFH4d{g$&`y#|+g`XlmlXwEN1r5kK^U%*mB`VsD13yKgSCH!rS{-dVVyn?a#3#%qrta8jnugI?3s8_Gu>Sw)33{c7Fo4%WH-YQ2(K+K;b0-O1(kzo+r=ZGAmWxIOWG#J4d^dE&TuWg&~T-?mv~v* z+Il&2+I)|$4%;52>)g%xZ6SW0xS{YB)ZeaeTSpHTev0^A;!(_!f4UxTcxu`pvp+L* zweTa<|LxNmy5BvV{($;4yI9){y+HUz;;qC_FiU!wdbwe`KB4H@uhi_0J%`EIm#5BjMe`-xDML$on|{=b~>CzP1T|Z)WLU_p?5R80jq+ zUM~Knb69^;{O1dQvqs7@m-So3f12USv<`H>|Aw|_gYYQgABaCrtHnPf@YFAD z>*>LN<@7dEebvgXr>lkMo8Kd(&tv@(s_!bVp57olftcnL)7|E?&h7VLy+oMX@4-6v z0i#R%t*_@BruRYV{!(UceZ52YpTrG__b^L&8|btLIek9AAEL(zPoneTK7EMZCfwJQ z?-1SRA&&p>Tdc1Zo=^SvIjs)Sofoi<{hytCh+ZVTZYb*a5Z$th^^b{jyhHRX;RzQ* zKUCLwnDv{8bG$?KMB$fK&@Aw68|vM{gXsMJcH@S6_9GnsPlg-m!i8WO4@`VxR;o9PX`{E({8zb+ z^?Sni5w|1WD%>HB=D*5qq6;50!fJ>jWeV!TKT-F*@3!G-v} z(n2p0ZZR13*+Tbwg7tQWTk0K#E7d8)H#R;(`%fBO<LtQ_zADwZ z&$G_Qb2~jpn2+any8a7Bm*cs;o^H4@ZQ@V#d_K3meoy!r;@62kVV3Rfpm(r;+OyYD z|DRi?2Q20Mcz&`nz0PoDS|6&pyA zchchx(|k2_zSyUa(bd8S6VrGZ-ETSP|G`A)$Lh7hpApwq$LdZmbAI3bO#OB4aeA6? z5nccOOne)&J3-yXdS}IQ0Vcy?e^bTg( zpU3N=E4e(|cT@TDj@OHYbLjdni+H)!Ytj2Ed0lm#S2=z&`hC!txB;`2x0`NhnC3&H z?fp}m6ZA}Be%^2bhN#p2otnna8&1$;h532I3A$RC+v5p(z-t_z+v5p(gYc`v(I1|u zyRT+_8*z?zqFyS@<0DSeD-BPQ@ewEKH$~_1pxyOG(Rn;*cl|NzW_uFqWc{UK9&g$* z?_?c){~$N7ht6KZ`SWJZI^Dia(d&CA~ z>+ft$L;R_I*!nwL=Nq>5caG-w8K#=@B-FY31o8iv`io=p&ef-ie>HJ8;&Vjj^7hde ziq7Tjqc34y%G+0080PZ!$m?69yl3T|uOE=~xc<)9k4k!6f9LCG#GmW0pMI0$oAMr; zcY)q${b~Q6)9M2Kk@&AAKA-qg(Yd@A>aRrS@?NNaU|q`FUnkx`ecATezeaic<_*;C zj6PM~j~S?sF>LF1pgvLjxx5$Y3pl>C&p~>K_;dRlq(_NAx6eVkLUbI_`aAKzEtB3? z&l{$H692ixBZ&RA+}^mn!*w0QlhU}n!*v7JrMx3_OT%2=%kxImDDR*0M(NWeJudGk zeU7BZ2Z0l(AAP2m-h<2OZ>UKV|AT3O?{d2PRzSf*Jn=q z(X`(yb++M2X?5s&{`^)~YI^0y^zU5W3Y{l9m$yQB4$*XctH+vDvz-PEw{&nD{j9N(1pk-SOz zSn)4C)KhN}pD6yv5pN(qU34z*pY^$-b9w))2e2;Xt<;wp=JI}+S6QRHTk@vp`y@Rs z?-c!@q{sC;ML#b7T)$KGDvoc;`&Qod`YrLFV1BP(um3LoGl^@f>-9fG=kiX|pNY=p zou+rNF6F&J?=#Hh-JW+tjq-k-cav`OcC>zP(nW@C{obUHHf-y6x;}&BoAU0{H|xIQ z|JR0?kMd?cQ2d`G-j#Q=9xghU_ZEG*=v>}g^fjzYd2iJ>8s_r;ly_^5^6LEC^mCFP z*Y9omWl4|g_cr~y_;daKMSsHaO?hu>lGNM9|DW4vzKQ&#{zm+F6K4?rC_0ySrjD&c z{n-9&ras899p8PsKFlzew|@TZHOiZvf2Tf~+gPj80%7=Il7Hu zE)Tu&UZXt6VTB|R?BT-{sJt~*x!n%}a zzMd)R;r&}05niJ_UGpE%&q{h+o(J?xk{*}m0lixMxjYZ1l;KCjdE}_ZRHb4Gr`Dtt#;R zRuO$sLCiloqCa2Y`zJ^AmkZ*4zli=uLEw*w=J%BYLO8=Kfs~y=!3$ z|B;B^qwom-`G|gI;gSBE5xrkwYkyNj?^@W#|0<#nDs1cj9MOjt=K5Lhhuc54FyC)# zn799$!UDfIqE9I-^1DRzOY@8Uvm*NR!czaDh&~~|oj*3BCks3Hl@WbaewlxJM8CW6 zXn%f0pIcb&KO4~>DLlqs715t8Jl20dqAxA%>~D+c6Y{(GKSuNwgoKg(Yc(GM>=+kYpbH!nKJ|5rrME$ZX%jOeTK`}&Cw!~I)Q zbiUufFz?@^i~9MkBYL-@3;hley+=`h|CES+cF{n;Z$$4`bdf(YqTkqfuzwA+%x^Tr zzfqXyH@d{X%kZSMgvGpTm4Q7?sXim5%jF4sRXup_6dFA8z${7aCtx zTa9qc>nn_OjQM;<6peC>`FtvhE_2*{5v`w6G}@ zy2&xGPjR#3YYz9+J4LrRKE4^PC|5MYF|SXNbjNKdGcvEIc`MIrNg7x&uq<5<5W zRva?cFR3WH-|25t`$#XI<9Hi!MbTd^r}KI_^DM_Pe^YVx zj`2KBk+0@!W4%j%PNf=i$X6bNn~0 zo{s0S!;9Z?%*UT&Q~yU7)#O$A>uh|ZZ_j(D2Gbo%%jvwH!A8eC-~ZnoW4(cD{jOuI zHxOlB4iSrF{Q%jPWQH#akTn{&Q^h-}s2m;|2cZ;`4ZcPaR{tK$RCV#tV!t z4jJPGDvLjJ@iAWDv!>e|W4yqZO}9Jd0f5l)Ui_M!s0MK#(z9r{FC#?c#;>3e|C)VBo#&b9OL+#kgwvD zt+^h;c%CXR=9tIxI5zcFyU1}m_ZPm4&*P!uj(I#(!ZDAB3VHrYrPdS&PDlHDyEx4; z#y`;tJdU~lspS~spJ>FGV~mfg@@hNAc&LrVj^h{)^rJV>H4GfQCUuJO8wcF#dR&GV?5i&;)5MyJln@@>pRAHwq3;y9P{|Kka>LDAx`J^ z8#1@=L#;0DIb`h5J%tUeo{swbsrWF*7++ZBg^clqQReZ5q0ZwA4|o0;Us&a3JLd6) zA!B@DmDkwmJiahwj4!P6nmC=u7l!=J8t6@(&f^P1#(E-EUXIhTo`|PH#(E-NNi(No zJ&_>7yq-vNr}KIuj^jfI)ANgx7FLg6OI%TOgk!9)(WnHgPMYH-j`doam9%z@^+Q^h zv~heMaYa#E$5=0{l2r(->u{@KFR-z><4-oeIC$9f?rmxS!oc)8132~+$# z8zO$0i~kO_$7&t&cH-VSA!GfJDzBr9kM%=n1|`e!^9Im(zmlUJk0Y)q>SQ_naq6$m zD>=q7))yIInacAoQ~qO}j`c&TypXYe2+d&TbY73+ILEvmM`y>FKd;K`;`lXUPYF|g ze{X>8Ki=uQo=C{8rr`HvSEqCT+08MYx9`&@IL7n#+Ui8dyq?BMj(I(e?vAnEN3}lL zG1mL&of9(F+o1qO^){-!o=(Sl8}vrIt~$jnAgwf z=a|>e=# zG}`MGPJhmfUvzBJd%bY1)#Dg{Kfk2HF~;B1{Rqc=J#n>Tte^3C$u*9#env&n1jnNW z()z(A*E+s|xT0vH;}3{mEt%x_3!_(Bmfu^LwV$tFczuv5j(L5MsgAK8Ne_L!V_q*L zWUODZFQW7N64P9KynnZ@zOf^ZZREw>jQ=3yn`L zNm@?l^$uoPj-Nk;#;2Ct<@is;6-D70>gl|mfH0+hp=rnIQ*!`Sf}`YGvxQUi;wjgN=ie<`V19CPq_GZ#Ss5V z7a!|0EN>%B=`|uHp`NmOIgl}Rz%s|Y-oT5FdsX86^^)TsU&ZmY+%c~=@Umm9H&Erh z;uz}Cjg=9qSEvD&!k4!SS@x=~!=o-T<;3AC`vx_EpDIiTjnlW;q?}5mb3= z9G^|>sgSWAL6!Hq)3F`_-S2RW^$3QPzTp__5sZj1)+4yQbgk2|9>KVf&GEM?|4pkK z-kyh6%l#YPFRSv_JLdPx9LM>6vUi-0_sw2uy}`0c@58)}HF!e)yOz`Wdg6V{CjO=Q zA6S;(dz&oB3#mW8uJj|volXDz566q>e0F2$X2*R0ajRp@uRpW&Uyd=qenrt|j(Pt4 zZOqg@yEjGq6sF(Dxc`2CX~=y4{d4D!`|l5ze&Lw!zklf%_s^d${mL=lKi}aP^W!fs z{l+oo$FC^*&N1Jg-sza{KY#C-??3hRpZZ ze|GWt`urCcAM@dVQYuX8wKCVEUc$B?e&5ou*}vBmI!?#?lSj4GHonn^7y32$%)&$s z?pl~;S=vW!$NW6yAZ9AhRQfBS>Np+mgXXpknah{%bi5B*UFtZF`NY2sIsJh~=npb% z{P<$x+_oWO{`o2|)9JWA=~`Hmiwo=4(3=$=T!XU;8`NNWUR#5g=QXOqE%Oeq!6RBW zuEBTaHLbxD@|!v4`RQ9&PRIQ9Ro)Sn9upr*N5#>xGaT_wk+3oog8Pc#QEbG z$9Vsle$P4P>!pzSddaa|?;L02oA&)qL1)Y9<#avgw>#c3Uq6M+*H4a(|H}nkU3|=E zU*(c z%=L4!i_i5FGMDcZ)~S5InCmrRdS1%!_lL~y_xEt|`Ff|POCRt1XSH)|w&(tWn%tz| zG#8(rpY(E!`5J~~pWztuIrPsy(=qRlvmEpO>g|~8$Fb~x$LW~Qp`z8<9G|wA&oAdV zfBtN*WWR3U<(kh~3evrJ7W%~!PKWz_R&kl6yas7qN^(*Y^=OPy$^M_PxF&|S9Va&(mm5g#a=3@#XjQN;$6<_M~ zFNw?Bg^c-_b`@Xd^i@U=8S^piDjw~0%*RyTE@aHdw5xcG(=i`YdApE#KBmi^&hs&a z%=0l_;dGvlDP*3HX{^(EKBka)KBg<3&hs&a%=0l-IGyKX3Yq6)y2|N1A5+LYAJaIe z^L$Jp^L$KKJDula3Yq6)`jgXnKBka)KBjA&&hs&a%=0mgcRJ6<6f)1pG{NaSA5+LY zAJer?=lPgI=J}Yeb2`t*6f)*x@=7K;9rG~-5ypH>UdbeXXu=lctp=lh%Pbe``oWS;NuW~cLfe<5SOzbfw* zr(?c9Plb&6{;IrNosRkbJQXtL`=j|TosRkbXhvVhJm24Kj(NVnzc}Xk{*sP)zQ38w z)PEmp#yi~Zbe{h&WS;-;4yV613FW!d@q5Jd#M3d)|2NAq&;J)P=Knjr-Ca({{C{Uh z81w)2Yj?NPFC)Gv!kGVWSi5_ij`{yCi!kQ@t7tbn)QQJOnCJhy*Xca}-+h)%`<+$m z{u!20 zH?~{g_|l2Aifp@w9b>(%yV^bK80&LA*zQTocD#&Z8872l#>+UC@iLD2{J+>SpZ^`3 z`s!WqwAJH0|Le2N?s`I)t`{-CY?bFY-tBX&Hx@G1XJ6QEiAxXbvsV;7Z#f<7xmS5F zSdR02w;^M`+-KW`jQMgaik7+fsNWL`UaY|r@|RmqpRob+A;01n^Y^~eZiQohezDTB zxgJ^F&T%^CBYwNxD%NTH`F^@EZ9jfbY_vKt&rclcJU?;Bn4kEScCWeg_>S;pg7-E7Y%p>EP^Qt+nL)A@PW+m07rjQzRJF|QvL zGOr)C-s!x4)H{x`e$=*he{+oWqrS3C^~b+AHdsAAkmfJk)h^^4=zik9c7J#JhUaO$ z&GsKKlYcil?8D+S`U)BI!PDYvPJhejTO4CPcuxsadNXp6-&U)~ zUw@U>OKBhScl7(dQ~OU@r}%vT=rb3e*QW{@>sxhgA2Qarswmp-;^TPfk@tBG&Mc^| z!NHMV)!<9>cUYF|^KUJi_H|l&$MSpTJFA=V31_$8>6qtRcN`x^_p=gem(zJZ^pJTz z^zWU{^P&G>S$^;Ac8u-&A%BnMbe<3XC&xS=e8~L!FJvy?UKgL|ga6qv=DV-m?ia^A z-+joK@BYoE`<#yX?$2+p0&2Eq{0-*29~iQf-?O?oK0nQm)nHFyRXg^_`VLiI+%eX7 z@KnfH-=WG&I34RdPz^iA`VLiI;27&W&=sR&tnX0er8$0%n8xQg#`+FbUM{`24&n%f-j~4^>{sSpUIO!W5sMFV%JN`S=f+kN=SQ_^;>U^YJfC z>GAd2!A?KgY=6jDAHq|@6#oUYef3>@tQS$`g^cwgXvSXFDgICo_0hn^$NCXN+lP$x zBQCW}@#|B|O{ha$e5@x?<%Nv(Bs{BA{8DrO`A`=h>q}I5A!B_BPle3ucQthJdHpWO zajf69rr2@%^Ha_GUN*jrXK7?P9qYwZd5+ETvoXIWugX8%#y9$e{Kl50KWl2)^k-ML z4;lT*tXj>ip3e8XTR6^q8}}<)T8{I2c35?ij#sK5zW;Zm)zh)Q-JjY!HsyINzm?PZ z{#YBwCq0YjYezXgWg_xx>-cQq+A7yE=AT(poaY$p^9*d2?-=XzG&rKbG1hC^+p5qp z#xFnHs>m_cCtB93*s}CjC6?2%PRqphrOdRwd_5yf*F#vZXsXre`WW?jZ+@tAdE2}6 zxV#-4qr7=XlsV@0ojN+^^_@cI^_`A(IoAOQ1Kh|u_*UzfbrF#zHKAsD+`&| z8w;7&8w(lhjYZSLdSg*;K)*+#jP=GMY|4LWzNAO{_Z4%zpKQw;e}$f3CEJI*g}9=q z2kR8So%uc5)5Y(X3 z*;Y@VL+x>&KF9fg;KTo1r*FI->&FUH`POGZ?_>4&PnXho+V&wgG1pJ$Iek4nPhQjh zd}i{Wd>H)uIeqa(G=8Lg$gdGs6kTZb^f(>Q`*eTH@kdwE^?UmPF1_~DZzR-3PA{eB z<^O6Q@^eSi`Yi1SJN;4WFTZa;#QFcjY|kZ5=jVmORNe>8_3dz{A9^EY*dgTh#1%y& zU3z~p+c(O_PoG8C*9Ub7`6=SMmMQ(Xd47ATjURvQO1d8J5b|fl6-A?+UYq7aiM1Z% z7|&x{bhz9xKaU-2S+2*gbo>|U|G#fm!A$uNHRs2xoX+=ug-Jipv?r&>#~k9R{0^Z` zha1)Z)z&}0e1}r)JA}N`@OYQsE9UpWbzyw^J=Uc|$UGisqSe#SH_!JS$8(;b_Shlh zy^GMFSGx4CH07CW{o}pqdDs~pLLNd~Q8d-*9q4&^zYf6A77025c15Loc7^VJZ3AX(+s?P~_3$s2q=(9Dd&kcqOv;Nm$^}nL}UxW9AS)Uh_ zeHPW{1>J>NpC2sQ7S-nmtA$yAAn5jaRDU4oEzJ6Z!OAb9`h&p+Vb&iC3crl%4+Wit zSzi#$`6{X}2p%)c@AE#=p(@yF_|sZE{`1kGn)S4orr~&fG}t9Nj|Y7$_*t08gFY4{ zzDD|=*5dJ=j|UmTJl^y1;84Sp($1yd`-ROG1v#vHJbrXhFjbhxk3Jd9Fl^h;;$ZEL zX!#chn}m7$o(?*F8`YlT^0+G=TVhA@veTNd;c=J96Bf{TQCyxEJvaA6*A_F`~_@Qs(CKX@s)MtC8yr(Oys z3-frf<-v4e9xt{$xLugXgS{NwE6n4;UJf1<=J8~&1dj>xc(PZ5XAMtH%cJX!{1z*M zmxOx|FX^x%SS|5+Jlo1(oiLAQTN!L(_GCPqYd?q zMBH!xBv>rW_uIDyBY%ef9jf+prM7g~9-Q`zM zMfLB4I+~gFAA;U~RR19uEX?}uU~xRE?+#W9v%V+D38MO*pir3gAA{*>QT@kYwlM2I z1-olS^`BDq&)y)dHuOqWNTyEN-oQTy%lg@G{@= zD&pp4amP!E3(C?`{A)R#{SR`?{&gI)e`bn*meb*XPm_9%;orXOV8`r#NQ(cVPKW=g zO&U3df7i0Z9J7Dp6#phphyPJcava0IS6MU1?B6oQ{|Kk^_P27(+uzzT`?pQ;&viQc z=R0Qq0>|uMoZ?^Nboj4s+|Dul`<1nK%>Ery{Ev1z{QEZT~zi_v&7^0T;*~8mpEqs;VJ$joX-BE z9JBwWj@f@qivQ(KhyP1f6(L_$MC{cle3zs2eBKfG*)WB4~OyUj8C z&rI>Z-Rbb3-}p|)@LyRr%Q5@klj1+y>G0pu_&&$*Ute~=WA^`RivK*P!+&Vb1CHVU zaoK~8*}p2q|6!-Y|F2CKI)?ujWsf>$|3xYOPdFX^hnGF&82-)67CUDDXH)!_IGz2U zcg+4TIA;GBQ~Y0YI{UxunEhXI%>J*Y_^)z0`>%G){%ahw|JoG)H=PduqnfF|HIiK=D$8~DdNdXCxO7q-_=ai_!onZ|)*_}A;0=9v8t zO7XAbbS{5}V=jNDWA?9?;(xHy*}s8f_CLfi`!`DQKg{XupY53a8#`wIoD~0NPKW>Y zCM_JpziG#oj@iFeihpaT!~fAHM>&T7?y|Oy**`zUzrg8S{vyX*{$j`M-!8?!z0={p ztZkWN_~&-)=$QRGrT8D?bk6@c$DDs>$L!xV#lM@=+5bex?0=GD_CF=XzlYP|-=XQL zj^W?2<7tlB|BMv>Go23qXBzi*4F7r^&vwlIeNz1UI-SdZzGE(bKgaCfKgEB5)8YS9 z6Rf%%UjLlfagby7zc|JJ5~p+i!yI$|!yU8#s1*N8oeuwX%||HL4r(zBpwJ=pRqdglK} zIMu=bP(5&a^VBwaHjH{7eK^~L#_|5Kd=-uDM!TF#&-4)QU>aKh`x8AQg1vYeY)rM3 z@Xj}I_)KGCY9YOQfOyQFs@cx}oo#!t_P6Szke<~c{Zk~rp3fkEtxmrV)`o}2-S17; z#$l$H z{2!z-q^S3GZ?SIEw>C8&+rD;x&hbY|e`n*@o3a1!*ChP7b^Fi9`ls5}+y1lo)<3n} z|6SpgX8U96=CA+Hmh-pDYxUD;P6X^%%hsmu7aM*godfq5-|E)hof^-y7uz4iBtNYh ztVDXgI@27#)UPb%^ld-&w4`IL?O&{JnbXlO9b1l6`!Mo#9iqbu8T*CVmzjlSm)e z4@f^N%cgI`t&OSAWWVxki8lSP-<>y6(Lb%OI1koW*VW;6kfdko=vTPh^t3y|F={6r zsoYdz^(c*vfbC`ap|C#ZQT^gAle5Xj=>IL$KYLXEYai$M+)sPzT-o2L_5R<*S2f&! zJGc9px6@NUnDb&xb@?;Ot5us@U{mWS++JH=n~r5`ZTJ+LTN5>MuxZ~~oiGvXsrRW~ zuwQSDggcmamSd^K%wW0XL7HwIM#@Asxg+`4A7~Lp=I*Y~p2Q zCDiS7J&~0asMD{7{_o|r<@+uB>H+$P-}3u49qs7T!>GJDo;qti6)z{IR$hgz(yCC} z*BWAkXMczCYZVyln|PRl?LBFCfBHN0m@@Gx9@0U5yt5NFuAZcNh|yK}4fO1b?&hcg zlzvR5skf!S&3Yg4Jar}=cd&MUJxyabz@JDye0>uW*6IQ}o}t$a5941i*FRRb`K0o4 zI*w5yn=k8OKgrioTCJyN@yPGj>NTowlHN>Is30StCyJmEv(mZYp_2;PR)0TT({W$%ljw14!Z^In*8@4?yGZ6JB%xv zkB#>!^_S6nfB6cng4+T5(bRGbk^b85ul?K5&+0avx6FAdY-cvy#*13?PlM=PxM=yN z??8ED>UbI>gyXZeu?Ma3HZ8@CpGM-RtfMM}r+kDny`Zxj#hxUrnK@)vRWQ`7l^;v?RfcnN}RYm;A0*?c&@ zuMiLV`=)>Ql+E`FQ$JdrNMk0TA1HkJB-ZVIv*qCUS`Cul!`7d-Cv0~IieGNd$27a6 z^bgE2$GNiKt+n~TWX@}0`p4w(_FH|lSCd~h*CSzk8}C4N%HEpWYvaA0T{B%9o@&4T ze*gZd@qRBillxx3H~#;0ys1C#e|!6<{Jvf6@4xohv9eiUod zyLTCfx0C+ChFkm6|Kvj`}x;(TOU(?`1N>Y)Q0|( zdfgcReeqlUR5RZ?`)aZ+-@4eZr?)=kc>H8f&2)yRT%XjX;|J%h!E{}>zw5Mazq9;9 zQ~KFq)iv|ADc%unDoMa?5N+_j;mAJ)5G*GH0tx8L)qGL zUwms#w&B)Z_RFv9=ccqT>z8WnbtvDT2)E}z*P%B46uEzI(@Txd@qT}LJER^Cl%5T@ z`LFwp{8QuqR(Vt7Kag3oou_VJYJAJq{#N{~l=Iqe#lK3fuYYg)spsF{N`KbdHQUo~ z#b1_k-|M&H@0I%+zqkAw&2!5Gx1Zl?U;n$hEvId7y? {!iy;pPSio*!mqU*H8R= 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 gT`KqXj3!@k6EWDe?`S8&ID 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 Xzs^XS{D*c*#EY`22ZHGTt@8f?qdF?R literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Wpf.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Wpf.dll new file mode 100644 index 0000000000000000000000000000000000000000..7417ceca7c2fa6b5a14c12e342f16927f5666c4f GIT binary patch literal 50648 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 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Newtonsoft.Json.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..341d08fc8b7ea5cda1f12b3d2756b539e1f94ed0 GIT binary patch literal 711952 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

0O;K zn72PM@5>u`3q8r3F64b*JwI4Mb+_b=4Krchr@ZLAH%`d=pRsZaJ;|Fc|+ycY#M@+^u3AL}Y& zsFLrUjXjAd{%etIQ~Z;{`0E)TYgmj`tT<*5q~rZ6LRfbFo}e*Za}J~G+9*9y1$>x5Nv1e8}`G$w_pM z>DAC5c*%lQ;!N;CIsan^9}?&U9~PJk9u!#9V1Bfj=Qrq!o$1;atYa~_PV0V2V+Rj} zG~TZ?6wMDplLmeDvqkmF7zz1YM;I@_iDAI`DoPof(dcwvx48$Q_83M!cO7)nvxw8` z72B3zw$0kH$9|9Be9~KsOTa{|_>ix;KqyfbF9V%RWBg}4Jrmg~&NFA5i2wr&+!kIo!UP`QmB_2=@|U0cmV&Ez*p|WSbS4;k>Fq zC+HH0^Qr<9K~5mfCg;VG3pxeXG@Ut2g-o9cnQI~ii1eo*;5| zMc-<>bIsWlqF$RZkfAh8AacQlSHEE{W(&O0y&71!A_v8lp^`zriu|WBWAGUDnII;^ zhr&Mp8G%mlus}EXtiVL@If1$0(*kQ6ou62zE}&0ER}J;2R^M4+xf14bG92Z*HJ0xe zg`ORJNuU#aS)dzyRbV3ciojg(1%Wk<&X376U-~BZi}jkTd5z}jS}e23vbWbUuV@Gp zwyDbIl(5tA5|S&JN@ax7aZ6=gFXFwroVEVGKqtWX1-~2oKp@V_39M-}e&n7!(l?pM z^Fki4oWx@R3$|17I2Pmas%9Ry#dv&Nc(8+?3v_}f1iHa51m=QW0&5!09H~6gr#v<_ zORSD@WOdE!n)7>2EWaNMJ>0h<&h z@=9Imt=Q%?DPJ5RV4Id>=1!!59dn(sDeaqecSVfPUkV>~@N0oMKP}J=ej_j!JSDKE z(ah1xCw)`M<_mO!Jp{VJ0)e@pD6po{ z%u7|)^i3h_S4V8$#%v+FG+qwwMs$}%ac^f_itg&V=w1hxYlKKt!Y1)t8l`D75 zm9cXDPTGha{9d3F{81pTybzcRo)%csXyzC#7kyKd>#``nJ0o7Nsq=cR@G6W<$?KLV z?On~hUKQgNyRp#k>;PM}0CBH~KsWe{z+CW*z?w!gu%M``=$nGqu_(W{MZ8{D=k@i% zt1vPpueB)cy-a(6J=ZbE@22{KDC*8Ao9*>%u9s|tMwCrc%ipSLF($v0iL1!RHgfZ& zc^n9=hal60cDG03E&FmNL`%5=8DKgQHfweYyf)1gLV8VkZL8;X-_&_Qt4^8MYr?#4 zoRrs1nwQXPYL-`MUf7z(tf134hElg(9johqNL|{&KLz5x7lCf@FM+w>?*eNY%^a(B zP2UuC{n{wQ`SqUBAtzH-!j+nK!&K_$s)+7`q)YYlXDBmOKbR|KqC^ql zCMjGUC7!I-UKa&@IO6w>b$)LVekDyr_9S}_vgQjJbE|}^WlOobypza!9ptL*qq48l zXb?{Ltx{*_o>*Ii5$2kYFheX!eVoL63;@uLZ;rURhK{CIbFBtNGnI+8AaE1i=d`2imcHlL!HvC^{qjrGL4~f1S7rz@kFEA0bgk#5l z#9!0s2CEX(Tl7uQmT!m(@Hs6&)OWDMqi)l=Le~xwVZKR$Zs3LaIRa}MjjD_J(KkhY zZ;0~y0`p_v!H&7G@4N*r*9aq1*5ZwtHX4PSD&nSy?w3iIedo@4Exr}5C{aYXDe=uw z;>(!0DQHI&^hm_-U3GqO)(`wjnuzTC<9hRrOpDL?;P^ylKT<-4=>*22E?4W<|U#`*kpu{!FPI*LbUS`(e_E?#}E@iR(Vy z1`FGQr{PJJyc^DQmdSUD8iB2DCFLbub1y1X6M1?!LQ)bX@j0t8tV+6A!B=HAx)*eO zK$HgX@)DAp;;s@wBbW<*6MTd zSPZqzGZZP}Vvux8XJg7w2fpg=1a#Ov0oTSDflC2$>##T|r&Ay&{^7o1R2gqnxqVjb zMiow>?Baqz@+kyNW*6rv*-{RC)r5M zZ^-knv{txCOnInJMcgAIw#{1+8>5_%kV~ieEtCu{WWkQFj{20UIOe|<83Ntg8%Lj_ z=tu0CGh^uL{V1dV4yjd^5I4Km-9@8GAQQ^xObQ2oO>4QGK+MHcE-7EdK+}Z2)0%vH zg}&(*a<4;2ZDVo51sn5k$S0(?GUSN-oI_^t7e;sa?o8`dQj`x+50}-Y?xg)ldPPJ< zWliojQZdXC*Ii4~Ivdri*SWJDm=m!^6mZcB13u3qoD6;j(bw#$)@UO>!sS`K*}?19 z%v%3l_$|+hhvHkL8Yp4#j4aILmprETdteWdbp!Lzw)AeK&Uo?y4u^k8n{9;fhVzPT z$+fz3C{>xCZ!gdE(mr;PqX#oQy<^bLx8b|qg|+SJW{>F}g z>a-Dt_KUY;5-YsUP=kSP3({EY~CQ(%PaZ~#sz#3x;O zE-!g=mBC+N6qR`oKHd0ZriqdO&)H8rVIiJyceFX7i_w<(+Z41pi)*GGOL#g~VxppR zJqA9JeXPJDk%@k!(|SPF9>jEEO;3zB(SK4@Xq^Oy?4zH#);6@O1p5H?u}BTuM!xiL zBWfE1oZ%-93>NXc%516!_|WE63$P~ho^-5GXKA&^G{cOLf^GP51>SR?iK)d{bhL3# zzIFNr>GNz#d1S;afk*JE4ee)A^At&$LaGqagcM!inNaw`3Vy|FdX_Fi$N^ZvgH_5$k_mWe6 zd2W=ybi-+6XB&#Dl7{5o529s?uni7?`vFEDz)!D6nqHocg_UOOMrk|RDrdA*(>N8O zn&?B&j`gO}kgEvK+f5??J?gqOlj!y+%@2UL|CQz);bei|ZdC5Z@qRKB~5_$! zg{>$;dhNIGOm((613wXd9XW!g{fH-+uk&P#q&=L0(H;7;vSe%Ua1lGw|Lk;=sDgV zYXLpSe-OFCs(0ZjeMFJ|2Z;;aAA*}-0f9}#1pFvLMq`5urt)hYpamiv^EFD{Iod`dKz;AVUh#E!O3gY2ssWDFRTh&%; zi(b7o{C7BF$)hBjkOY&CFLKgR!LE@lqaOoZ9JE@52I7Al?zZ6vK_}&Z0`B&-Kb(d} zT%a(dM;cu&ztWJwC2CpM{}fzle;{0>Gh##vLu{)Jb`3Hg8z}|4|1ILOtQjaYQi^&BI%(lT>*{*=;)9XbjAz1|Ac~OlO=5&)jj&G zi>mwLM@EJ)7q*q{kDyJ+w%gIqqX^gwVYL{btf#I0`dixIh5Ih+3+r1l>b|1ok)v&K z(*_v<5{7*ipGT9AKU4jdo$7^APM&-Udi&o&)$@DNk;JKAU4H=8*lH*7#XxpNjj54F zlPH)eiB{7wU>5SZmHC8v11c8Z62kcD`Iq3Q1}x{5b>g1HLt z-5zpVqTNWolK5uvmOKb0PfJR zjX{}5FGr6t3*m~zX-}`A#DS%iVPWr6*ilVp_CrLpzox`TOitWp z_ok*#JhNwa;jx@z>a*J|;7 zUY#=N#7WBaP^+6r{tI%POcJXktf=W|CGBj|9NI(+(}n*VtrV`aFb6l$I_v*RD{W`f z=Ab58x&JGzjExgL2R70AD%xO^yk58>TWy@5**{JNLvT|q_9L(#8>(d-4TWB}8sZh$ zW@p>X0skwhI{A8?mPR3y%$8EiE2#fYYMFmYG)BFU-T}dd#@r*wJTv?YR0}lu*WhVQ`W!`j zhq{ygrEpY$;Gmu#x63VgoFFebTbJY2#=?O@|JJ?X824U_VCl>Yw=u+wpf|6;`iGVD zw;*U>UQD-`v!Q=h;sRkSIeL972D>rD(0Cdv?|%tGRgBN=nJd>Ia*V>PRlHFqjPQDp zXixSCl~m=Tq<hxc^G1_ zoL!b7EF|wA0Ua>>el$O4>%PrNuWBS^h>GG$#*8$;`npnq-FG-g&ErBx$Tl{0mk0J2 zt7i0DsE}?io%Q64rTOb&G}!)sP&m8lN2S8o8t(=_deA5#d`4>Ojm@naH4I&yS=ogn z5W70?#nSvm7z$N?l@8vU?GO8LAzYxXUjs@5f}41{{{~zOJRNZJkNYSo2H28nC#d-w zKnNMVlE?GEjU2ZQH%sYiO6fZYSh$TL<}}vS`QFwQ&Cy=RXy27+3^929Qr^0ivFsICjqmVA z2n>FiaXSn-qq4}Z&OruJTWSevRJj05j6yYj93NXXn<+*Jq3FgbzIGx-Mx96zuViSM zImLs_QRpS&Hn0hBUPS}uPQ-J5mXPEBZ;8t66edIp`x&fTZB-D(p3RKQ@^}L~K^_b2 z>R;;IYpjWkJN|+xDMr`{@&Lu7=0+0Mw38|B4T_Z`9iPzuA?muVY*PM@;An?7_zd7c zuU&m#olZJdH9Dmlcr-qrf(_i#$#(y^wRgA96WG>ydElLO+0EL$>>##MSV*o9S2oW^ z6Cy^gcQaps*2*tM$z~KAC2Is@OCa`x(q?x2L6&Tv$;k(hdi@KgHj|hjCdR~Kka;#n zrV$)xqEcs~5zaD@iDTzAiqHs+r|yq2v4VrPr+ZpPJ=xRJ?)XuRA468nKJycxM)<+N zOt;(R?t#?u$4~ZUu=-VLO@}vjwv}I!ZcaP;7~+^+jJUzT4o9Qd)6;dt$Kku65u0oE zrFCvu*NbJKkWmrjQ3cm18=8r%d3*#AZwkXTj}`a98=H{!9t0abL@boC z6ce7c{w2^fF?+MMe0EZ-P2|5;C+n4Cb&@=AxX#lnc(a9axI&{a5}Uj)>$j`>&JQah z7O64P;p$ElFRAA1t-CVG3Or)D*4z62*2ee9^h@+Q);6p?>utSv_ibGzifL44LaSe~ z9mNjYJ#{IiEUJ@TLR9AuB9=XFd~NC?4IzhpfJ!*(Q$mTKkgrqfUl6szX(_RRk`<hm# zuog4*WjjF?{3n@*EL;uD$7uy~IGDu^jn$_ceA3`jwWicOe>2EwAF?eB+*p-?9ifYH zoeEw5DQ1R~fsQV{ty1X!5@^x%nR1UOn!eRd>SCK)XxoK_Uzw;qwF^fmz_PUTd?{55 z_4-n4-f`O24{+oJB@R1E6ED^Mo$7zi@#mq{$npVJnBg4Q%dXzJXIP;cy8Q#_;I90} zMizc<0ez`OE^)qF^aIyCHs=r-Y$bJp31=R68;1uybs6b};&3IZG$^Zp+hp~Wr!E#256P^ph{Y|7}k6|^$ zEeut?H7R89YCJR$55m)rCxeH}2NA^X0oOkn&4GKgP9((jso3ypj%&ir!WB?`IBFUX zIZ0yA!gpR8Df_+Hh2YGCc}I|`eMzOC+e8r8oDKxM2XcS`j2BUv;2c_XTp@ko;&(<4^S1a$bQA#^}wkz{b@aPicGPb6c$G0=J4A>TyMu7jE^Homg%sRQiG+C*(DkmhLx~!altffTx_o#NAE>`lci<8Lk5Pg zVeYp17(C`t{NR-YTV!FV5B1J-0c|Py$S+QE${wpOk#*Q!aYmAndk6Pa$E-o7VvC%R zs#{VeU7zPLqp%Dpx~4~h%y$uh*U}@I{QehWg?hIw;9%y7bHmx!93>wmr;eCs4R*RX==Ispb_*Pf*t?n+ZMl!xjhw108W-P>dRYlHM7 zJ2+pU6I>t=-vSnx2rd+u3(gZ*)9B_b?QisHf19ds4k|#4-f#CgvL&!IRlJ|oS)3~L zGxg9ZO82RHAlfo^ik=TYCROoec(+hU_#25wlpdU>p_8(3EL;j^?PMFCAbLmER1=UC zSGv3LU`(E_o?<%Ua?pH`#=6VIB1XBD19@EnEb<#f6Z-^(vmoF0jR>l7(#1ppL>4dMx9>P3n zXGT${D5z{5Z<2triY0v{yI5FF=m{do>$cFZ`YRFYuY~Ha7!`LjY^IhwvAzN520ewBo(=1Kd+1f-4gQUIub!3j$Cl5z?u>;XKN3n zFWmL2`Mm`By)%~Im6FO1t`g`3R||B5*9pu8uN7F+XlA`qr7xr!?T3F?jON9X#tt?K zbb_itHy9O|3oa5^(`W`G6US!ycCRa*f*g0RCjT~V=x?SC{nxai_$=Tw`Tly^wEvto z^mo&S{%6|I-%lI*-)Tdio;LK~(}q4dZRlU84gJNmp?{e+^bga9j!zr9YueC1O&j{e zw4r~VHk8{nci&=vJ8jzMrVah&w4r~WHuSM+L;pB!==0NtK0a;eGt-9teA>`wrwwhH zR?fegHtj#^p;OonKdA>!Wp=prY`0D_z4Vv^HZdIw5@JiZ*3Y1KZ=A}O!25F8-MC z^xLQ(!|;!95hUb>09YR8TrwTnBjJS=xE3g(Cp~OXJ%tf$5EX|EZu%W1+Dui~vfhny zI=v%nuvJ6eI@3a;b+j4}dA=CW&3Nv{^Eo_^;sIyi&9WBY!8F@C9?zM0uE2969_(zg zK7$7f7S=O(x?r2l!?POCv3PJRg|!XOJ$N3#gOfAX6L@R~ACtke3=dXatPAj9xVK>3 zShwOCz8ycdyAvre4J`tn8SNh5E9NrT4Wg(qSVSFrBfc}k*_(Y8ULF1>!b7wI=#B);^|2c`T z)~865h|xc4{PcJZFO~YTkk9MF`2UvpH#g`LG5RNspBc}c&G<0lc7*Y1f7XppRxS~v zXhtk=>v--I#&1pda<~@qp&c7qrnc}y#3-tm@!Q68D;U2m;a?uopD*!4lacg^7;V@1 z?c=#sjNhK{FAL-EA@M`2lktfd?bP@kb z6OjN5Y%{zWEzq+mXx-tr{rmand2Lf<{JSO%^cJ;mw?d8F2mP}ZdwOu`5^T$iIP-V3 z3Y>FC+oMa+l_;=Cn$;)macnKRP2PYNG_ z=^QC6Ph+FrUs=c`R^92y;-i85+*taC^Oim2`FOFK5uNW@4^gM#Z|?P%K?n=;#mx0w zj9d8VrTq5w6X&WvO$eDHI#SP@FI`WbRvagODZ6Ie)g`87IZmGxI zCX#y##J`P;jNEI6maNCZ!~sM{gb)Yk0BG^DkJ%o>7aOpn!0peM6Xu5~V@8*pD)QAD z4u>+geih(*P*1vkgH53sAowzxgP<2aDL_69l)Y8rOv43!V=kS$$2)wovcZdzq)Kjf@=$f|ZmqjE$-{Au@KIl6|af-$n$;@hBz~(i6dc%15FaqnK_Y;gdt9rajurUdMCzVnC-uxJy6aK zb~WftiYsBD*UdN!z^FJ@+haXIEFAFqW!5es#FXx{&BG`XzI07t0kB~9%z%91O3J&C zDZty9_m;4tu&To2TT*K^7)9>FBMWO!z<1+g^@xQ)$`Y%EqkjSUfF4Du!2Q26Q)d+Q z?**)Z65C;d-(Z$Mjio6nhbi>geDh0(v3t5fPLPEW{|C&4gr*9FHIc#XrNZBM4%*t5 z)`sof4VG~v%G`}&R`BZZTP$vWbYv02DwtO2G@!!cia_;7sPL#FQ2&p$_W+OUD)axx z_ujeFB-ta$GqPO9aU$ntifl_xVmrN(I3c6~l0!&=05KsKW)c>nNGSA@1VTbdAP@qf z!?N_=J1lEhU|CA&b?LpD|L6OjduK*23%`B-(lhs*^Pcy-=RNP~?`f+X2&voIKnXei zut>33WP0A{bB-{Z13oU>u6C&|G9D_%-=W^V`AiBz|Y`dp5sqY|=(aEL9v@_V>%^)1f4Kt@winfm?FC zemzVqys81N>3dg&s8|`apug4?y{1-7VG|$scihHJn;W1CtG>2NKfSS<7Oct@(LcJJ-4&>zU$>`IEP@ zp6tGbU&h+(0bo&67S{F-hOgantz3eZ1e*ol&#Z+$d#}p=aE3MOONCcp>$$tZ(Fi8M^>kaTtz=!iR7fW z`h~Gc?p1T$DhOW^Lf)3yJX^5IRcA`MaO#a(ll5(%KOJ?MlXAW0)wf%gr(L4PW=pw& z#)e#8=bO})7p(oZM%kYZ^J6o`Mm}Gi9mrQUeKl-RZ2r_MHr@7-S=y2{G9H26x z$ZwcmV?CXjIInxF_c2|UhxBTP|1Ya&>T~t4{LW@R3Q3KVk_BHUl-szAw=jL=!B&0u z9|&m+Mp~XstgG~dy129_)MZ&at+y}{_Luu|<1~k4xun&|G|b`7GCoPiZ-FOQI?I~L z0e^ft8356_k);lS*wxKKuP0yTkRq}4^>-|D; zZatH{Z{OGZ4uzH;(h~NveZB9Nw^VQD{nUNEpC)hV&dvMD`+7e`-cs6|_Y3y*exbaj zKQ-?g_w~L>-qw$c^QZ6Y{S0|q-ze{A?(6+5d0S^H@8|C8eXG2!la%+1_Vv~UJ+YLi z^>g+=mt23?!A`H%-`>Mc?gY@iEHM7txa+&@r_Lm*zn z2)oE7=T;}z+4RG|M78ie;>p^|Gnqr}tDjS|HO21)ermU`;&&sz+xfkl-zWI}h@VD# z6$W#M@;jB^dHmY^p1_aNn0W)g&+%htQs%Gxw8yf}?`VEA{I~)+^HhF%`&@5leTd(8 z`2B+43Och5{LbKae}0$qi}`Is$Cm2nT$ypo26$PvuX--liVMRR)6OO1s)H)$Vl5g8 zc`uY)d2*EH-d8mj|2aYagOIJ@J7l@{Q_RJ`Pp}ygEOYh1VavUrS}v9rT8u~u=UNMg zeL$sLtQ8Ak|5DgiOB}Y``>EvOKPA|I61Fup4qNX16msz|6YM_=+gcunE%$!vxLE5S z;zY_f*AO{ux%X4X#lKFlHFQo#%?DM*#aa&%ZH>g!5w)=8-cJ!1YvoDUhX^|v_zGL@ z{nT)=*4Bi5sIZfPv#{mfPYDU~52~j;2Lh?)?;Su~x3c ziPUYb-Eg!IsD6w8o?tVITV~p~bc&-01U#_vEyXh3Tdd_0qBPZ8Z1a*O!~J9)azMS? zr%dnGJ$m0&yV0%$cAwzCX}lMqonqU47(WWL$}3)GX?V56FYJR|g=eF<2QA1l)5Mhm z9`k;wI-Q&OoL7IW*M3%d{Xo(JYR{n?!?+o^t(Usi}_vA=ihiFYbbUVkd{zVi@O|%37{B0@B)gPfhSFKGN_?});%10P0ptC z=^Q?txc9A{s4@S%GWdKqhD~?w*l38+-~*EJk?)2_LG%tG?^pt*hiR_#Bd(*hA?#_4 zGSivQ1|A#NxXR`yGo<&;$SvJN_W)au_vUBJ^yeRFW-xz|nc4YWX0qpC)+{UM?{DVy zE?o352E8oc%jFjEHU3u|Z|RHU91G&jpKGQ+e?K#W`3ua<&Yx!{ahz|KmGk#C^LiI9 zdbo>2u3jAXBaXNB#c>}C;?19Fraym%nZf){Gqdw&nYnWQbThAa=n zNBhAR#+$#yOn?3|GlTg{&0INuv6hQ<0F3(tZ@JOA}eEPKN{*~Z)X1EYwEMfrH0KWapQoRy~$=G&3U z0>>MR6RlMn7ygW8Z}=C!9Xfmh$)^~4oxfq$FHcrR^~6HFSCC}O2u!KNqLdNBZqMsV;7-l|RqO1_hz!mM4;C{psej*MZTwmGlUWN8FG+iI=L@>Zn-hDLD1h++ zbdcuCN1GJT@SE6z>`bw?z0_z0xtVZF5C*d)Ki~nMUeLibXu*Plx55j;ssB*=ves@- z!c%tVs*8)9WH~CE-5Jha=y>31qg6L)U@>nTl^UZCo+AM}XL2*Qyf~SN|A;rTl@!qo zt=-Kkot8Yi#Y^Gs@*h8#sKUT4FD9Pq?1kZ~O<1_aE4#Bbh@+4Y((^IK-*#lyqgC0m zDUpt&-Jecfa$%_soro%qqvO3f<)(_$t5wpVm$pyufXB2Ad^V+B`-q=oraym+nZf*X z&CJf;xZ_xj6}_k*$YtAC2WbGn3Ge! z+$^c6T=O`q5^8S{scd<=Pc!o_rEBG^Ek9}eP~Z#<>fu z;|0aW{TA5BiFu!e2bp=o!o_ADz3^Z&H!WOZ=HUyMnps=8%*^V-58{{z^8I<3*VI^B6(9zv*>}^_M4j7eyoF z0KL;=pi*C8!iZ`tLZ?-1jxu9)evdZ4*!jI)e&NE^=5ntb5zn#=Lbku^jV#44Tb#ka z;;hQql_tYQaoNwaj#1368U&ym)KV)c8PvXVwd>WCU#}Py2P$*NaUKlz_chC zrJ{BZLM=*&DagIkv?%E&AZGTOLoF&ZQqZCUSG%rnQuc%3{#b`L}!Q6jSCpww88R=)<)2SUS2M5rlkwKFgNvOo0CZ%AA&~baIlIV z9&v;%K7vme*ZKOBYaFaOnybVlta$B%D658f&z7P~{dx;g)aO&6E zEi;nm4waX9em=S{q|;q63GJ!xARLXKr{Rb4&mByx08RM0+Xixsj;piNdG^sL5%t70 zE{Zmu1Yzn+Nndy*;hE=`;q`2y(Y6~B5BE+e!PGCQ#*e0gM4K#0x#%%+h^1V8e1X=h zX!319=VPK{yAS;KXVTWjzt*RWu*E3P&~uB>*~2g;^I`kp;$s+hdvh{bUNqB>r!Cx^ zg1He*yn&=`)cwzf$ZD6&cxw+YX7*a-iNt*<9ofT3C><)i=O%cptcVc9nxpy`drp;J(B%G1OpDV}Z5EnbL#5_$(%` z=m|G!lQHp}Lp9tna6hpGH@7ii7tLLfoiNcc1oZrSAig?2R`&QfzSUU{@kGaCBMTDW z6L2wU_(GC`Qu|9P$m5JjuS-zbpJO~5H5;17Xw8cCm0h`%+D9Le21<})20F$1$GcQt z)I|s!bB<=vM|7h??3?rbqDH;PP1O4);6xJ8D>0?^U%D}+tXOsFvC>00C@aWKLt+1# zTM%FnpClO-EA^*(b0=fv?x^c!c4&y%Cv}P#a6XzSNW86y_Qmz&c&xWax#0HAX+5!T z`!MpkR-T+@Zf)p8D{*kCInoDsom5lwWYzlVPNEa7G|L%O&aseW`^{KC3Z(H8U(`8) zQH2;(WvoECxnAXl$=jo;=tOOOI6Y?OlfW04=mmJjr;>zb)~}q83N8x8%yPeaz89Sa z+*VXH5Y=dcTgOiaR?0c7!}rwo9R=hpkQ+Kc!-a-&wSLsXYZP7l1em>}e)^vKr$OE5 zg*`tumx=B}1a5w;^_5S-XXh1YTbRb2p{TvNGcgA8?XZz~bUIea-5u`)I?<|Z%(vI= z?=e^yjm`q0iIyjf*5;zKeCNI*P_?40Z1e@fsoM|g9-bDo3$C4tM-9f+Ot9sFp@ogRvB=F5f7 z1%kDYLQs|t&#j$FbKJQQuj{}?4xd8~pFs}(9x>g!j=nj-4pUO@CO7^bC9uzT(2JJg zdzG7!_NCUibHi(Z0~oegNJ#3XHF2Fnzv5UUIR8&1dTDPko?}B^=*n z2@7b&;=N;~_H}9Me47~OIPH8*I1$JcIjRxBFW+K(V;%&bIcL%jV@w)cAQ?Dh#tnF?8 zRcL0l`!y7u)m`bp#7>LHu`}0qU`w^wXvGHqgRp+)d!pZDMdj(UE z&c%JigFSTE{jm>#QRzI`r7GA%|J3iR@DV$S!yDxRa|hrC3<|cm3HCf>Y4A!p7|uu6 zOORo&bFHj<@f;Vn%N z@C&0$p`u2mxk~e_%WyT9XUpLz1L64cBnF2>3)37cbAQ7_gfx^b=Rk@d>TtY;E3izj z3ZmDlml(*7a&COiMM5H~=(BlKi1Rc-#2Y_hi!#W2upwn`^t>^bOx3~T$Q9{xf;}q9 zeYxm)b+5$}IYwQIdaI=D4rhK#tL#NDCt4Sy>*IpV!=Xj{RrZ>jx&_@$Bq6r&T6&@| z=sXOr72mc8`c~?-SGWCYe3DxKZu0Xwty5g7(CT*| zK-~1b<)kvj@L3Gk%$~L!c-ox&U(5#cF-_bR#}}c6PMulwg+a?(g-C9#wf5==zzXgL z0N|rOUKUhmS0JpJQcx>y9^x~7gb+8+j%``*4>T%XUXH;+Whz^!6}Av8U!57q=caxz zR`;2^T*R?oVW>l@OoipFL#h?CJ9m|{vno2-om(1iQqx#-VC;0tlbiY`nOzPq>;dkg zOk{ViCoPN99-i5qS6o;%8Pa~~yc5yxzW+a$z>$A0Nf#fONiOxyo=uu|yF{J+|C*@# z_Y(Dzur-=Jn!Tz$4JO8 zR~gAyMhe56;@L%$r_(vKgsZoGWEo{Fck9SNd7w5qS>}7%WW@K1$qn1?hM}CV!ol=0 zFSC%Jbgsc|PbFaDSx8VyxddrbmV3_G;48Y7kwM5cCYSSVO&?bs8Pr^~vDLnlY1Er3 zECaReDp56#i0s0#d3I)GsGKbiZ3@amBT!^(Vt(p#<-zSGqAq8z7|Cv9+>jA!FElJ| z7GzpH6JT;f8pY%>o4JPqzblS8)mctE<`^ui>g9ZG?XfQ*u~^nj?=F`{mJcs?d$%qe zE|tSWzWI~iKltHK_|2n^oa%E-Zz$*1-~RI2%H2nt{s zg@@*f;T85sXd?&l7XoWd65q(CG6!I|Azn<+?w%P58_UbNegM}^a}Xxq7#l9yo0%;# zk$W|NLoj?K)f781c`wb0RS8k-w5ENiqUg$OBbss+F2G;Ag_PWeEWe=2CvMLRP@Qj(y)!OK<59% zfLzt}j>3vcBHrR|#sa#YS7pV@)N;knxB0-Pkk(EuvB+QS66 zOn?Uh$P$`iOm=6UjwqZR-&Lz!a{0`KrX38XUZ)08I%vi#_SdxvYy*P9Th96P)1$a&Z@D zB!P5iQ|REG^e*q>tV|%9c)7SL3FM+KPBnpa=XA9+7q)kC(rh@SODD|-CP+!z(~Rg2 z^=oNP9NWc7v!Xk@tfhIeql;5Z_|Y)m@w`5PJgAFvNCN4O$7>rB$faGJLlcNb!;a2j z3FKe8INVfd<*hsFuWd{qnmD*nhbNHkJcD=6Tqt&+BsfPHWKr6c+Q?03&>>G$dPCYu z=V}IooM`NUstIVU2dW*Bz*hC9z~c#MyswHRpw)YNB|ZVI+0$3<64=^3y<(q$*6ryl z<_WA;*wa_8Q($pVUm;C_r9FM6G6fFwCiS(^6gb#Z1k_R))P{P>gW6b%xxA-usI5zZ zEB5piw-i|J39L(UxVKxbcDO@al;&x4Z+H!Y@B9mS+<6?IMa=@-e8JCr)iptxwWi9S z*t0u5=ehV^u-b3eOn@Cp#l`o@`N6L9{c?V`>->P6U++3UDCf_+&JW2MOs1qhEa#f8 zlc8JC-q3Y^RL*+W`7t?<>N-Cz=c!%iC**uU*ZD~~cXgeg!dd@48p3yD@z@G8{~ohM zPt_D^gSQ~Yf|=Td(TxI>y#=ur%tTL<(`Fsgi`|pRh?nxNe-jANGx6Sz$~1$@Sb*c6 zg5C2MB%_&H%Tc=qfTT3zUH@+i^eoZ5gb;FVet+th+=h5dnS9eKLq(jIY!+&ZY_`Wv0Tdl-G2=kN5ce@jYw`_skz zoZPjs%?o%gC`V>$J6t-h5=5B-KW|L~HQ`^5+OeD9f9Ha7sT%@?^3DZi6d~T$4Z#Ua zIS9esrY^Q=4w;Aw8^Fv@iZ=-UCZYS-}Ql$-ue&Cg1?%G4%q zINZ!+cuokl;;!6`p{lcmmZo(VLS7laDG1k2eK1_RX|;Q9!39}RL0=or-nPrab$LVa zDvILC&UyJ6`i2Z^tz{le6uD!6Xo53tZso+yuE}gzyKcJdRp;M@w@pO1eFPkTY$jpg zEV5Q*6v4a$!{$fl5li%k#ZV(28R zHd~y0lIYG$j-!4ov~a>Tw~^9t;_sYnQO2TZr;koVbi8cZgYbP!={au{N@cjHnnMOrLcKb z0n2Cr0{O}(uTNoy$#S3}mgD7gc$pM0-Gn1jmo5AALVRP2Z-n@kD?T)VMm?qZ;8d_F zqqhcDv3`F@X7O!*_}vp;nqT~kq&S$gm~2&chxHe~&<{p;nSlQjaD6J`&1#mX=J?h> z?49Prvxa{mKj}moVTA+h)q4AKS}*U$E9iLJSE(WE-UZfowy&$89Ux?d-;^j!c+o9X z_Z1lym!s!8+nVJWHhNx9q?Kr%Z==+HEmV`;QYJso-e37oj)o^HPjFNglBlcG`6MD~w{9j4(QRtMl+Rv)dA9Jic2_A=Y2WKVcG6z=^c3@~?1NafQo^#)cH$pF@oSYbKd z=c&YYgLt&`EdKzSf zsvdE7^mJS$#!JJ?h)I9HJRy39U^#S{S?yEFP&`#nRh}!yzZO7J#)&+P{u^j*)AUq= zP%BJ5!fXFrt=+fqX

D|0>6~5=A-sN(m`K7i$%JNQC>RPJqcXmv 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%0DXabbnX(CCbe`!iZ2g0u|Gex- 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

(T}H@mdam_OzOC!_o9?4{p$!2lpS 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 DhO?6O literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Buffers.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Buffers.dll new file mode 100644 index 0000000000000000000000000000000000000000..f2d83c51416e90dbc31154545b16df3b3f7a7909 GIT binary patch literal 20856 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 VSA1A~Xq)uh0^wu(F;p2s{|B2kf;9jD literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Collections.Immutable.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Collections.Immutable.dll new file mode 100644 index 0000000000000000000000000000000000000000..7a5b6552bced56764e6f36ef5d6dca2d6b8de648 GIT binary patch literal 198784 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 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Memory.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Memory.dll new file mode 100644 index 0000000000000000000000000000000000000000..46171997966f26bda11e58586c51b2817bde5cca GIT binary patch literal 142240 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 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Numerics.Vectors.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Numerics.Vectors.dll new file mode 100644 index 0000000000000000000000000000000000000000..08659724d4f8534ee97a543e93dd6d3c702fcd15 GIT binary patch literal 115856 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
A56h=o3u)Ar^3va&BemI`C*}HC8>xqw z>~>#qc+4y9K=(@SwvR2-TF9cdjF;8NX7{3$!@16#B=r!JYdv&hA?xXme9SBDNkoBV zdQx6H$h8*gQCrTd*T+_G^`w;B$J$6e#N;~nC5OknoZpkyqc+x6;EuzdFXF<{?+0mj zosS z&P2wm*m}tPhbnr0d8et!t6scG*Df7LUq{N-(OdL&q+A_cL|;eB)zL5Xb);O~3ZogWObed?_DOY!%(UEc*gVAR< zX1!bR0v6;vB{w8o-GxR+$}t+5sBU!&Ze+nYjQX$5y2?$VlBBD=C{&Vkm2?)gS&~kJ zB6HdKZpkeyxepEUUyXH@bOE%IWPGtTY02|}n=qMRM$+#J94K67}7HtY6?;$>1W|ej) zoNl`@vPy54RoZWie;QD^eLmP2d-Wk4!=A}oo(K&}W1_;y?T&}5zXoYHMqY#5Ug0%J)0if! zF`Q_nF;QXUZpg#c-;%V)jJzeey~10PrZJw?7*5dAn5Zyvr{v-4Z&2DjBX3Y{ukZ$? zX-vUt3@2x4OjH=TgYxic-mFY0)n*MNcgpSg64dS&6>#vu9w^C`dA)B+W=XyFG0EuH zEld8eN%+pCDT`S@EK8>PH?~Y!9Di7rO!aSXnXBj2Wyw_kR+lNu zyEUdPnd;y0GG%!S$CM>g{o7uqEbr@>vSg}%^UIXw%^p*hO!aSpnXR&iB zW#OiTWyw_k@|h_+!!Apv`WMkmSw^d-&19;7Db19{LLQbSQ~e8SrYzRouq>JCUsf|^ zu}p?#$yER1nkma@*&HvK>R)0rWf@JIvSg}%q0N+Kv~9|gss80QQ3S0m|uvB5911F$YCP-|Vw5@P%PnlBO&fQ@Qn6hN5e;v=1<$jYXOQ!l)^GsRpN13u@s(($- zl;wVvDNCmMSN2TV6?R!N)xW-H%5uNU)JvxNSNTj??uVJOWaMjo?f`Iu9nfM;Mo`&Cuxk6F~-RpXX1ACCP;L{NSd-_Oj$D3 zzkg`Ta&y;|B~$&oh^FjjyDS;`UZUF}2(l}jrY$I>kBFqPOvbc|jJ}&}pQf#0S(2tK z8B>-_@PS2pH<|Z^lj^12PwxGHaX&ez+uoQ&==5^$CrdN_zp|ff8WY_*mL0IDaEkYn zO=IjcG?QnDJMB^76z?aS#zeP{r7=8t z-%mDW&tN~>2DQo3dxHpKQub#eT9eeg^x=rtBH)C!4Zou%B$op22>y zDSHO{$)@ZX>?fPDXRx1a%5n?YTr6Z>g8k%k10Vhj_LEInZXuh7k*U6)Y|5U&ezGY$ z75mAix7XPRMW*_GvMGB8`^ly(w~$R|lBvF*Y|3&A*_0(S+5KeG)!afhmdRA#Pc~(_ zdu+;*ne2YDIo>naPc~(_g=|_y<|WuqHpaPoY>bmR&ct;vHbG+TC!4aAo3do8?)`-sR?-%mDWx7uaNoPIxf46!vFZvXk@?lt_gJ#~0u4lng|rh;dR zgXfKl=&4*0r#+Xm{z}PrQugCF2<5EJ^PVST_;WxF8SAk*efE-QRo~OSPa7R-4bCh{ zN5^dnU5=!q}Hj*fc@T1V2+anC^ONIE+131}TjN5?Q<>qt5}hVfcQ z($O(y*E*7pjxo8`k#uy7xwVd@qhn01btD}fV`i-*>F5{+YaK~ncao>|Ar1`tTq7_o zIoJ8D^%{=0!{E2?VDCYrV??WUBpn?iR;?rH=opb|9Z5&Wh*RrGIyy#_T1V2+F=Es@ zl8%lMq1KUfbd314j-;bwM5lEm9UUV!tt08^=7u_wj*h{WE=SVQ%?ouT9Ua3bU5=!q zV|b)>Bz>L##$NPX<6PM1TJgH(AL7zyo8gbPM6&Ox-lr_>!ca>xqGbr9%aV*}8L?|Y- z5Z@fsT808zOERLRv#+%zBU-xiT1zsbrNgeZBqQ1tp_XJsOQ&0xB^lAulh#_2f!2Q! zGdgx~J=(oL=u)lT~DYZ>FDT%>K2f6bo4T{j-;>iUoDOH9p)sfb=})qZ!ToKU_GTz zsqK)2olr-gQR_(hx|1|l(gT>=qIKZiPksD!7quOduoLRw3IsZmzRrJXHF_La@2xs| z{s3bD(-H1z=e(S*X=7-OWZ&UlOSvgjl5~~uOM-Tgbd_|`^Z}66O8;foXe;4eSgq{d zfmzZ2SE%=bXaBc^_DJ>(^;*iUp^~Il`tQ0*W%eC?zUTcjI0`r^`u(s|iAwK>ZLr@D zn`gZr7QP5JRD`3Gd)j{Y>)Tb|{W5m>?$$!N|?-C#%0ar4J^2d1`UV%Ts`3G}z zL4GZVBR8I(to|aC{vLrGi@eBGEP0X1uSKR1UW7xD8_HiV^MaD~-U2;r>#^n^!ohN1 zHAVB2e)FG}Tg9#xlZ(-kcC~1f(UNwxjGF?>q+KnJ#b`;pTEL3?P?iM z1zOV1OURsME1rKwQGV%zr}?r$poOVO&2U;xS<-I1Ffke}X;+I0&1gxxTFgU6OWM_9 z{xDk7t`?WQ(UNwxjH-eoBJFA!R|Q(qu9lHipe5~U8CwNf(yq4C(vo(y^DHfCSIY=1 zuuR(3!kaK!($4wEX|d1$zrycuOD`~`pOPC*u6CiNCGBb#Sz6MrmT{HeYX8sOyV|0q zCGBb%R|REByIRIoftIwZWn2|#Njv?))!MoqO8bM6lwaEaYxb^fMpA*6w5w$#6=+Gj zT1HZVmb9y7Bo$~$yIMw4ftIwZU1@1ayIMw4L0QsHf6%W8`=k5SZczqKf!84qwYzG@ zPDV|}RWp1tYBH{Rt*s{GG>o2z)v!C#+M|AUPzKRiO88JDA>7SgwBR3ku zr~5F5Z`l7!@@}IT6a`w+u6DDfCG9i{-h$nza^J>)Q*iokWBAIgV%Cj);;InGB!_>e z^@6%*#eJs=D{U+hlK7+GRvCBYG-W8(Wk|YZ+}YNYp;(t8>6US4BvXcBU52DvCUVsV z$3w9$L((l1xuAkF6zei1-7=B!9+aV2mm%qvi45eR48^((Nw-X7j0R;W)@4Y#WgLlR|Py77@bgYn^%sd0QbWojHBPMI3VN1c5Omn@!^!I zaeO3S!tvouaW&2#PMI3Vhf}7;@!^!IaeO4sV0<|B)HptzdTJaWPCYe_52s9x<0Ja* zrMMcay1sOkUtfBkuH}YTcThUA()1pzbovIXBgUmtg5 z9qO%Rhujp7EJ(dIZD0pAM^>iZns%mx!jUDax0Wqu(_@jfs`qeBTfxD(j;va}L#N%_ zoy7RtGpX^nXHw&D&!ooRo=J_rJ(C%KdnPmf_Dp8{?U~H@+cT;0w`WSmU*Dw0U*Dw0 zU*Dw0U*Dw0U*BZLU*BZLU*BZLU*BZLU*Dw0U*D9BzrB+he|sl2{`O94{Oz68_`7~G z<8SX|#^3dm8Gm~xGye8YYW(f3H2yx1dnj-fDttq`aYimxldIP_qdr}eSJybBAybnB z*El1et;ttwp1~(+Y8n}U;<1vN#(_8EWcoY74xuKuY9{u< z`R|1b`B*^(U+R-Mm;7h#`*2gp+AnJ^!kew_Y&I9+yQXS7pUp*hs;QdJXmb&REmhk& zE#i(wsgH7oZh<`Sb z9yA z9A+EPM{I+kgEqVpZNVA#ibFvgcsrVHn1+6k@5pD1N1z+tZ5r`BJAyE2L_0ge|KPme z2p?^?;```{VYUM2gRL<1V$%;8I$m)kXhWHEaTL0m&xL^P7Vuo$!WJO5WeW@)^aIC3 zC)+R@w4uzo7=y0nb0Oep8^+lN3{|$l&_Nq`E-=`=A{yh5$uj5SR_Jc7`CRyDyA?ba zs3`ZEg5L^5`{#mfz;x>sZ>!LT+o2n}uGaD3qoZxOgKfYS$eu7X+mKXOpbePAgKKkw zRh$lhLlSDKf=)BZC>RR1VF_9{pg)9x|n)y@e#ItUO&b@?h^-Nww(Rn2lnu_ zmHORB*!EBO_7e(sWEHN_O7?m5f&G;~NspPbD^62(I>wwH6C6>un!-QUg;9>r^098* z$M%Y^0VWw=T=kcB?6jx}~sHH|~g6 zI&ZwTgY(9^^*Qm|y_9ABb*0=nVcFnXU|BuR{j#`&?iDWuqWm%QY~8#&JZ8>fa?I>6 z++X*K|D$5rVXG`xqs8mv#n&QFB#W=p?CX8@4P+O^p?D*y`S=Swe?Vdlh&O>K{$U_~ zb09uR@gD`^KMshyNEDXG`8RlYUOjCp*P@DVVUfF$wBnu>>v$`{tm7VPOdW3v#P?Ec z>bQ?$jF&i{`{a42ZJH?lPb941?PTs3nBd@dl*PRxzy%HY6P95^9-ziFVDQ@V5c+ajp48AowH+jt)wSf-bIiy1u9;fNYyL~XW3d0W6{}fn>FrhBmdD%rVzF~rY4fx%&Aw?am|w?M zsa6O;o`+vOeplj$Zc!eDz^Z@1kNN{TzX&rDy^uOz`NvBkAg6T(6Os5O|aQ36Ql=^<+9;A1R&NL(Pe~gj-sidD0?RO--MI?7g+AH>lCH<m+@%Xx}gCUnhuZNwVHQkbb){ISxDLOO5}TSkstNX_R6w&*RC!S&69= zv1YX@exN>YxW#B&$gL7CuCjnPtFNNRH>sqWfzr)tB703P4{oMvhAxr2Cbtb-m&$_s zLq+alaIXP(F?4x#x!N!F_15o8k^8i&hwkezy$#;;XVtYQmdEc;d+Oua2huCl-SG$0 z3AIkW2BYa#Nq;Tr1u;tACF%c?^jDJR;*_^YI$P4X;5SP84oPPV@)}7$Dd}4EKGbqd z(qBosAx6ocO8Qkv|5MUzoN`anS(3&Cf1#xJOFB!C+a>*kr0wcqlZ71{NV-hj4|+(_7bIOBqhz7_TcrDu##BS@I9A_X`NK$8WrvX- zOE7J&A69GB<#F2o1IQDqE%h3;y^}-iK6Pa-jj`3Mxt;ZC%mn*1cQrWFs=0f!pG+s! zZJK*+{*xHVuhZOJ>9oqIKi1r6K8+FicFpxdms9T{r|!Y~cHdA$L?uG=pRl?nq zN!F7)U%0!~7Ag0w1%b`8p<8oK!2K#cOKmjV1Mm*N$OTBf7X8u{YgbPg?qOUnAHI;f z*FZNIo2x!A+#6IX`>S-PdctrI;H00pg2*>yE=_+N^U{*5!NeX@-SsN7Ky4wXo{x3c ze-C5+{Oia)rk;!c3u4z#_WRt)R3^4a{V(C(piZXdLHCSs&&N)t{sYnIo%@KqFLP1m zoY>i__ZFX<2X2X4eZuEHnm;GDR5jlfaO>jds7LP)xGUl-)NSwcx%Z~e!4iB8JRI8m ztMttHx$4G%i=Pu)quSy0P`5sNPHdg}j^-`_w_d#sju1vqrkI}@KVQ9DbM1{gV;j_8 z1UhgRs*jU{mG=BA;+xdp8SZfWBK1wf-5%epeqgva#W zXJxNyZu7b64QIt)q298<=MJI=Z%`*!fQ#L&7S;bq-Kaje%I9uP|48jqPn_#>2f!Ur zr`G!1rugjGO=@Vp&;3jN?ARf7>U^L3e13N9W;Jx7&wU%nA$4k#&&^AHGB&I}vDxRA z3U_=fIOWe1!|G$g-KSokuFDLobr(}dZg%Dt^%=vRlNnbVF9~#8GOtvR8g5VK4t43J zfo?c+Ts>j9*Je(r?c03aoAYnayjH#6a39FLUS%!|bf3w*Q5`belbJWEM+`TSd9&)g zJV5?y=8x0~!zHtKsR_+(Otfb2R_#~#$c>4v>|53Kn)^+BdG;RlcEfGRzD<2cb6-%G zW$#tfuJp^jM_re_Pi@!SZLtH{|EW%DZcpr%?Az7j|ZIG}m4Kc=kQ&SB85w`#zPv%D2*8|3dc9RI}mYx%aC%hMSiAfI3Ta^V5rRA5_aV z*V4Es_aU`Qb9bg6&;GS~h2fsfencHM+zZ){sd2-_bAPM;hvBB>KA}!(t`#+WN_|Xo zDb(;8^?l7fnR-0?IrY5Zp3Od@eqp#5vR_ocG2FD=qbhZ^e|%4-;%Q}rgzy*2-M_Wx0D)!g;@OLG6B z{zP*J^J{ZIQ}5N>CGp3zFQ^Y{?%yz${#E^r=Kc;=exW{RxIMXlS6?>V;oN_!Z)ooO zu<~p5UCsS@Vr}lf)ekiH5$JxS{#kPyvX5tfr~XZIOVE~B?7uWOJ@oxZc^?0s6 zc9G@=W8cm-#4gj^8)MJs^06J7+n)Gkt})i9xqKp7-xNDQ4l~%1M4`Spc0xFRu4`eF z)kFDmX$Qx5ks{&X~3 z5?AXGF~%f~>$cf=zqPjHbaZ8;uRXK$bT!r@zY5W6ToIX2es5H6r){%#q+O~O`Wx{$ zTJ^?!9Ig6GIgc-=Y zKIX-y_h9~yt5__99fS<_MY3vTE~d_wU5m5T&iV$>S4(OFeBvJ35OZs6+KPl-KB>jq{Pf7Y+N#{wrLegyPzQoUA zhtcpX*q@>1#U73S4(TlT5wl{SjW@*Jt+k(x7h z=61yxsawyVEF1kQ2tkfa}w^sglSn4}FT%Y6>C77<*# zVjTBAY4iIO`@bRcK(*(8 z3@zzXI%Us1BmMIXwEvAZQ1YBk+w-~j145sYvvW$$-6=@Er%oyM;WLsxA?b6HJ|HRZ zVvT!7wD~>tgf7eI{u#ye2}vK2^f^gS$vJvP(kCQ+PSOV?Jtg}D&q(@&qz_2?oTR64 z9%sf+DeeiJQrrtTrML%hN-_37rMRDSN=Dr&8I4TWLH^PF6-c>Hb4qc41}R3xDH$iH z6n9=uDUMGb(JMf==MPJIyQFWF^j=BdD``&B&k6p=v7XqQ;vbIBk}GQyM)k+z+vJ+M z2I*(w{YdXpgOc7N>FtufM$$J)dbgzaOZsj}{~YOu)Q6FNDgFhdM`K?>Izv4r>35Od zg*#12^^4S5>Mv5w`DJQJ>XQ0pYE^1G((_UyNH?c$Lwb4YwMchLx>wTusRtoBocc7< zvDEjFzADw+uuQ!+H6Q8z_!p7BIrX@t&q@00hJLkEHRs=}?n$-f6S0q`Rv`TpBwdm| z8XE(x;>6sTr2K@W4@#=)DCv~+5lJT`RVm6hO8Q8e^n|1;BNilmFta~CJ^!H4j|lyU z&=ZoXEVU{t_9fjYl8r*&DCr4FAC&YFNhc&#h{e$=NjFM*qogM!eNfUzB%P2{)f0bX z18cmoL0TyE385bp`az)|5&99KCnQyQsY}w0d0N;g^o>H_DD(-TPYC^>&<_gzh@=ye zsz$LR>BdH}BlL}uo)F0ip&yj=5s^G1^n|3UNqVe_b|wl;H@3YPc?wxfH z*L}F|({+DW_w~B(*8QOFr*%KC`&C^mmBr)KGgEU@i&9Hdt5fHtwxq5|@my!{Usn3^ z;p{9#yT6~9gY*NLE~Jm9nO>G+Iv!{G&U&U-<-I^Ur4O*-GK^Q}6+MCaRde!0%C)cMsqzeeXfb-r8Y*XewZ z&iCs46*|8`=lwe0uk!(&AJqAv&JXMSh|WiJev8h>bbbu^jj{9UV({?e`0<`>62Ch9 zQuw9u%ix#AFNa?}ehv8L@oU7d3BP9iJp5YlE8sT`zv=k3;x_}onfT4ZZ#I5y__gEL zf!`eb=Hl0h-#q;00+$Z)+`vgk+1WK<6O0Nh?gYZkK zZCh_S)<514+c&OI*ADC-9~lL4XoWgzFe}yOk>OhhM#p!J?B2!(s!d})QnNonh^&cAZxz_Fo$3t0D|i*eUT?c9MUmXD0>9~m7Q+^2T#?;q+P-E`o9 z+R;CJVC2Zofq?_+;K29|+r}>KA3gBO{?UO=`}YqF4UG1WYt5$7gE#ED{pi3|BjY=d z9X&cSO2t(Jue{{g-~o01j)Ad}W25^Ah`8YJ4L4lWzyC0X-Nl0gLkHBz(Hkxr9Dn8D z*ubXY18URJqXWn;85rL-JT~4xynjIXWp%5z4Bk3;V1W8d`^OG#9s#}W;*rrK{o^v| z!jrH?2Ds@f&F(lhJU)0t8geO)ZAdJ!Sr?Cv9MKYU9(T&6VN7V29dY&WfZ9IPk970M zk$r>6$8H!wN}YYM>e~LHV^W)_HXj=u9T*>IlM%7O9z z1GsiJjbp&>I|dC-FrEq<8{8j?P~Xu(^!z0Q!+!UNs@=S(25%bV#m9~bHHO+f)_>5F zUo~)Se6)WkXz|z;{lf>3IfyL-`;HwvNQ=e>5Bb``u|Y=`9K)``aT^+lFGiEE9T*)O z92pMn1j=p0H^~WvvVW)qwR2$qvC+Zt+qVyl9vK`fZ(+;8*#6PMqvMYGEdw|8qoc1x z-wuqH)~eN;h6ek`LhZ#v{Rb`9@9lmX-Z3!Lf16O2J~)K!qqw5>kB4>w#paQtw~r1U zJY=ahU$K*BQSY!N-QGXie`M3>X#efyj2t=IKWr)VD5e>-Xy4!v`o}Kj&!#&s!ZKh+ zuP`@ocH_l^0W3q4^roR9T!3Rc2gZHTtsJv5UU^ktb!=z|`LQDyxTJRs+@yBiJ~lpZ zWZ6{^jt=f0TgFQf*9wgVW66J>QSBPh1XP+j;GY-G9YW{GJfueU-K;Jd9l#Yay6aH? z@YSPSNru!F17l-0UkX9{qbQ0jpp76cmd8j%kHqh}v1JFKJIEOi$EiVTSO2iOXk=t) z0J%R!T2*LC&{}mJW~pIy=4##4Z!R_DD?i3VNKa{`_|j`56JbV^q3gH#I}DR6ko|}b@&x(HM5DB3Wpm&rgfGJXhheK8N-F>vX? z&`}7mK5=Cn*DRNe?HFGeTWa98K@N+9I|dGdfM7HrdPn?P{XV#4bmZ94odZWP>A*o# z%jl-5n=l@Pk<71FZQ3^$y+{In%V7V(;Stog-$3-lvf+mi?ipKlx@&ajj%7iQjVXVj;)uh_H|AeMLqnM6#?Z0-nv$7qO!bfAL2LgC z_Gg0Nh=S{6S-9AYp}WV_ru|4b%lUm?Q~Q*ek$0iOfpOg^T-fkzj@@+A;Qm3GQaL8C zzA3oa)oxxk!NFfXa620?yuW`Or_y(X{PC-Yo<5A=a#mOGyBXIoi})99|IkkOX^?Cg z8P|&xXKCNjzHV^*5GFxA`BRSbwrXXmnD8~LOXa5#6TV_iS$H|I@0yjueSfQroJ(1$ zxQukSDK7|Tp6qh|96Tts+YnEg0`!jmFDcEf(j z(TxgjDyBlU6U)=+z>X0iN5T7x;;w<)#?|(bSE?cWuIe8hMRsNXZ3>s{DEb!@n&KRA zn>n92$86S>@Kpwn4&AQLs9~)+UoVN9hHo!f?;x^(HiEQX??7=<J^ z4=w@5k#*hN&$w`t!qlN|!2L4j$J7xupoZ1Bx*9aooA5MpKO_es->PoIbH@YfC^Um= z1X8spD8Cg?Di4^_V~AC;I0ADFc3Ebd8dH~m9)PuRq@##Q4vFP0;Ksz_u;{eqa{|j( z!Nw5&i?%S3??CyRlsY@W?^3s;g>b-8J5C%*AH{zosFC#^P-;_vWE;nzzX|^hqLqWt z^Vn(m2%aHiE7=3lV^jHC(b6HH*m5DA4)pf>VUKX2g4Gl>0d2F`k^Z7)lic!>O))ee))dRsA!}@mchsS6RCFZc9qD*SD&CQecYv*r zcjV$74e^eAys0kR8H@Wh(|Q3LBRHxIHjZ0PydI_-8(U7iDTBtIxElmiI7%>ol<>30 zjFK`1>7gd+jRH1Sv`OEvpJM0PC+e8xu#M<|L|O-{v1YFw-5HCEBq?cH(v+lGNi&kx zOWGi59w#Q5M3UkrX(odtm&2xE0ee8w#SMP-vsJ<;N>dHY`x-e5bAr+tU#KBDpKJ6j z7xa-evomb75ZElXOXpx0O3MPMHYo>T8k=;gOFNt%9=crC(bfAL&YySUo$SU8yVN`J zmwtx#zcF&su{!*c_@(hn;g`iPgI_&b5r5Wtx&( zo0FNQ^w#EdrYW_xIhAS3Zf(wHnlf9PGnuCPt8R%(`trCzC4YL!Z*PN`CA+>tJ_;eLyQHV3T^+8wk!XnWB5p#8xS_{VTZ`uq-> z?5N9hBw?~6ndwNwWJfyFk%GyNRHh>flO5Si2fL#qlj*33$&UI=M-C=Ca+!_>nCxiC zbmU>OBcGu?+M*rWV0o5hIhG-w*wyK2FTM+Aq^D;xb(v%)ok?Y~nM|fWlgl(@^67K} z*KlKIQF=PgY!go=&LmDFD#i)K*~6*BdDDYFlh$)olYb#%M4)8=&97D-mvRmRXj-~~ zm7oTg4{SH38!$W7CDW;Frasq@@8l6yYD_~q7oxLxWV;D{mdOZ(Uegr%O;hMiO|f1d z$5#6k`ZSYCr_n5oZOLIva#)f)sdHEn9yTOz$YfIK1baxbyq{@d*5`75hNk#^H%Fy? zB2$;f<@nAM4`TaRB~K`YmwHtSd->#d?A)}1H#PW1S^BA8U-#&TzWc&^m%Z)-O&|JA z{-;0r&CRFodgFg3ZXJ5<75Be&&PUGs@jJfz_s@Lc`|o&qO<`XAE%l@4|LVlOzyIhD zUfF!tW9e63efCdQHoorOrQlX;Ik^s}G*{J`~BG~Dxrzqr5nihbQ580hZ!^*?MF zf5phsAN~B*zxP*7kKVUoQTrdZY#x}|dE}9MR$tlo^gYS%HEr8?;!l^wPP{JSh}gdP zvcNkD{d41FcXtN+m))Iu6KMlqyu^RqojMBKFzj!5b$4#Z?)Tt+xL&(P4i5}(*td3V z|GE3mU9+NR)#`!e>w2cgcEy`_9v(ajOW09^`;D+T7Ed)KQY{_$EsUp<@l-mVO2t#z zc&a|0%EeP$ryICrD`4<|5{ZQ%xOm3!tHUpeA70H;Dg3hd)#I1LuK~Y2XH6`wm`LO8 z(^Nt(gSuwUv1vaIgg%=UVKxx@Y`qBU17T9wl%EDdpUsFc69|1aC&FAHY!Ei@r??Bp zw#d>UYXsi<6NxagGT><|kq9HJL%o*B5+iF#N=t;1Yd)hT!pLHm(-K)lWrf63Tj9Ez zv6-x91eUWIJOL(U#BPITq-g;ol?A4yy?NYo=21$`enDZi*sp{Vzg2C`F@evKl{k_% z`_7IlwU1RQX|N?ufB3DF$~4CB97=M{ur7Tam~U#1$) z#8Q&-_`WA8PyBoGoAI(#n9{`Gf2G{h_avp6zb7fT^gT&wlJ7}MD+|C*Vt|KeI?%J= zofwJ^^eW()rlVUj^CV#76J$}*RfpSK@yNZ1r-Oah@FoBQoCOu9b)a*AvA^FkXJp|8 z=4L@iP!0w}&<~LaYIi>wu<9DYheUAwf_6Y4c##MWBX8G0{~&)45?0GU5V$)Qc{YR~ z62ZIt)Ae&$oUx7tRu?e4?jinxJ_v*y5`n*7f?Y1M@@yOy3nt@O$~-j)3ugO(JaKo! zQPyoU$>9`mL+h{%kUd02Irbs}kot;f3UaCVW=*0wS?u{JQ)(9?nB zmBFupz?I^)9*70>Wsp0bh$CRt%>!LwKf!ve7l{-Qv>uQ51cbmY7o4lVFW$|c1OS@Okc*p}62TpEcX4w86D{C4 zMS|DufOdi#VEO)+NO92C97qJ?H}(g1E}$&}0p(1|H3b)R4>a&|@elo$3&-}uA{S5F z0S@5DNpIi>*fDR|&qR+zpeaNx@QDK)z1Q;oDqQ*q`0V)h6qg8(1!n~T+ui{9;X zyuJXOBC&MJKbqQ8RwHs#co=Mma}d^l7YXa{fpr1wj$6=rq`@LT3TJ_yLZRQW-hS9c z<_#N6@n>VbgRq{9jtVRZcq+io9lL^q#{$yFISjc`gM@`U8wnc$?OBp05hMwIcE`Gh z1^`*^Zm@9pbeM_tbqAy=RycyNM;M1BSb$uRVEcxsHj%blxXPJ(VT$ywy( zhXyo%1rn#+XLIcZLUnxWJL8+OuOu|$Gs`){-wmx2%*O9{G7#u!I^l4D|FWlU>XXV> z&v0A%+rB))v2B+L%Gknn#WI8W{HP61U0Po1O8Q0Pw=5!qx5IAjN&7Il3KM>4YEK>g z#T4dkpb7|-+N>@74R?iD@OhDfM7#(_0((^3JX%IYd-Vv5UR`4&eYY9{UayJJS#Pgl z?+62^y{xi*ko_Vi*#oyL9{7y#fZ#GQ$AP_;sU_&$i}>~n@Wum7lT)z&#jm&kHy6aA zRQQ^U+iCb1yOjFvch-t>2!taT2DEqVFarGkq95Jeo#I1UJZC`+NP%DD@o(Ia6oK4e zF!-%d3iN{5s2}qe$2ik(g<}8)Iprb|qDxo=@@xU7|IG5!F zQ0f{6&T^*6gsW*pITJXKKxuz)cO>xO;j0FI;}=)nl?|m%OZTwIak^5jy@EXjGXL2+ zu7_Eq<+g$E0IvHt&J@U#1NWr>K18sW2XBIq2geXNhBq4!hXhAG!5k-i9?ZAySaFB{ zTwQR0>4bS%1cD6Sl!XMX2mHzuiEx_)fVPKQ+7qz6Bv7UVwAG()KO88H1&l8&AG<!QKtrAG|qH?#<*|Sy+SMds}LMI0ZA?|7?4IzefuY%Y{Uk0{Q;nn!6}^ z^T)bz4%8LaIvt?-SWpvK`{6o-P&5YEiwG-Z=I>Fp*6YfAst0PMRC&;)s~8fNj_#op)&o)3H`%*@06)|t|_c%VNx zpgnL&bMTuhMbBYo8!ih!Q4)BzaANU)_k(46vgjZmu z>A!%P3t;=JF|+(nU}oa~FcU;!|L0+54AA|*8#ARr4OZ4+afF6@xi9Erfe0Vaf0nlY zMtrsTAHM!a;p>tv{qOrHEpQmT%?o7L$^YcH|7HDu-vWnK!7YNf7(iszy)^XeV)bLc zFe7QHa>=UxAj^jei6k&W^fc5`EGQ~oY6P^IhCzx3iAItY!CORfRiTX#*NPlgh#rMR z5E)gHi=qPDGe#Cv z=Xx&vO~v3hpYKvy|2o9HTrngys6q&(Mkq@(4Tj3noPdE=(SQUUhQWF>GeJ)zW|jxR?nF zkTRr5P?T4aC)k3d(uyP$Rq>b9j0s|ZYsQE{X_#mc)HSh zdp0NTt7)q)+P{gIk%neO+c5&LKK^h~GZX>x>k`g1J&3^o%- zuN=A|v|ea|MB1aOT;zUB_(0ReFkRY1!v<9^S2fR;e%*qb6go-IS?IR=ircV9zx0#g z{8r8>q4x;$$6AKRVw$pYwTsu@Ilg@lo7d*8^|L$6UXHZ8vF)_q(4SOKANy2CySX*7 z`P87=!7LOq09uDNC>=~X-#?7n&Beo6OEoTX?GzX+Ne;*4A^A~*Ha zOgDgGOno+ZwoobdkU_3qu1>5L%#s6=+%<3q&UcCar*P!~KHhLH zK438lJP5!17-6lXC?(KI94G?W(9nTCNe$exNc3iC6QsYChNxmUe!DH@kWP!}XZLe9dcoORx}rw)6(rGQJS)v#HOdELD#qEGFK z$(B3wS$o*VbQc?XZ%dEq40v4kO?Va&yO;dwcqU5YS~9Q-qWV1R?}*LVgj(z9*rm=)a_H%n&17 zH%1KF$i&oa36D{~z~g@iOs6I1AF(wrSTf{fB2Z?@&&nI7OQ*KX+b3FF7r(bzDs7}E zimx?RDy(JK-Wt#7wXyY`cs|wJHfNIkQ)g}Gif^rHYY+Rn;;-xJ$UGFNI( z(KpcSewQ(?J`L6Q%&Ys8Dr-8G4DNIspv4pVF4Y+qbmUaKL|6svGVyGnZYwx<6>;?X z8q+-I4QvQxMQn%UNA*vvPYYPBOI_(tKP%Zjtfy6cmE(qrc;Ra+v$*!HnR$p9h2tH{ z57sf`U!eyYFllkoC0i7^HR1=R_n$cA&Z~lQYrFZ}G{9kkaeqm2h0g1ch3FIXwSg~Q zS<$6lmWpPNC(I4o1oGEUM~f^0lQU>3ho5y+)C#nkdbu}=&viHAOj{6Q)58g0r89S< zATzjguR;STD%68?2tPa@Ifw{9E^3Svk*KT$$x0ENT|AWCW@t9$e(KLEcfs$#QaD-kilC2wA}w6-1jr00VOY2FB|A zQwRu@8K^PfvK3>^C%IM0@v2VgsjQZ1$(*}N z?U$RWuSn0{5Nq&a?qiM6NN(YKxy&0CGnC5|pUzpiO4 z@;DIDBX7+R-*OIXFgfmZ*2plas6Nba=W#vS?yq8fCw9fPp9#|5_av(4WBr6e;T?OO zXXndQUPySQ^A;Bc23dXJN_qKJJ|!@>GuTleL??Q`5@$z{9rYDYv!tR6-uP}F#`&Wp z$$?(qlJm#?jN9CZn%m&GwJ)uHx4Nj3@L+lt02xkQ!2ck`5J_S+jmqNyo@ zf&IIjM+KW~U+)u)AFfSE?ay%9aGKzMYGYlO48*fsXf+j@Nq_;+&M=*cVrw@r?=GOHyn5S-iSqPafVwnL1;4@b%S0h&K&tuuLz6S!;b_JSEK{1OZ)B-4` z59vbMOKE^&N`DT;79&XD4g>cWAoch7MTJCcRaV`%R`>jfzj_6+YWoNa-tV-*ml4NZ zW1Ba~Jkcs+oNs+2Lnshw+ijW=Ddccg1;6=9{%Nc1!GPMDi&J4$27zBx-)ih@>1X2d zZY|2j%FHmD-mtnWGq~wNUBK{Z=6qC<)r*=0L+goD&Fl{!-@hA-6_ndpW0f^-F0y}J zA(`*kKngAY#DMWsVqVK@OwkeJ<~0wJ15?-S^gYfy#W!x=>DeZ{V9$RyKe1l?LYS+S zcK(*T({BoFta^`A>1g8}C%ex*A`|`Q3R5vJN4$qi@};jfOR=%IAIj|clt071mfl?{ z0$r zFvcpoCH1od?|c-`oqsC*E!C_qta`e7@kp#g37K`4YyxAc=wlcSj1yfGk?gnb1@PSkfaqp&M$*Fge zx{eE-W46y8&p#LI70t9=rZ(6I!Jk$(!5Q(HGg|a=T>JLZdIWsdv%#GzPY`=u^zPq_ zyHmqG!xEU(SfFyAN`3o+_wlp=w$p4E6;0_nn^Yh&4K2X$_e=QA=>@xKL5$Mhf!~lK zBnSSI1yNoWQik!HKuLl>ZUK^i-)#RMq4&wW9Tj~&`bXF8_QCP=*AEQd%-kYkT6V9O z+gOzK-TmVGo6ATLcGU>&V~bP{gOoLzN6%&0Lu?tAJ8WE#*C=A%k~E{!PT#TZd`Gz^I)D1qj$@urB%bM-m&bMtN$BFl z&&HZqnlZgZNzZOSd>HaO@Np}2VrFk=dgW`O^u1FLFdylv&3(-->Ks0)kJzN=u}WOh z<8=DVhcr=}@~2~pSLv;$C!dTNvkaX_X7QVXcR8~`x?|PPMRaR#$XJ{_FA%Ch2x&Xs zw;}pio-)dWe^7F4e%TR zMP&i%gz_5ak|9kexD zdP0*uN?W1#&Bd~io_k?ijF1&L(oQ>HCQRwQs}adHxJT^yiM}p1)>N&=Sd3|AZ@Bt^ zb?teZEWUnzWbE16(20W`qZ^R#2CgPEP&X&(4~(00^qQ0&eL0-8{c&XDtCR^E{C?D% zBkM$k17<(Zy$sF7F@K>Q2&m&WK5@v0AuzQjPdVFD=H?cbw=VW-oEZnPY6G;q#OXG| zreK1KR3KyX+W?h?{S27C>kQ6^#-G%1jTj%?cT-+!TS3D}-5y5Gh)3puLhqoK+E90U zJ0uswYL*Axt1~`ryzF69DT5!L-XGhx#p?BmfRr6)l{Y{79M*7#JKRO`eg1JtIhqh& zmpdu~zJla&#@o`h?OK&X)1!N;1`AJ<h_jkO>ckVeiDjzo2zH!v_C<4<8<{1s>-S5maBY_24 z`6~x(3@)9BCIDlwy45h5^i`Nv?pYYyfr~OTUV3YKAk7sbmy+HJ-PKX|ZOG7cCyMzV0=1Ph#4!kvYW6zAXNrRmPd) zWU*QKE0WPIrK8$fO%|zRgU#4#s+z27{gFJjs_F<$1GB5Px?)oT{5&;x*Y=*+Rr|I| zqwQw)ZlPM@$t?DPi)VOh${6?OH5Dh=ykiSaqnW32k-ByD@jC)`NNulYVx?qzQBTP} zw?_s~Q@qzFc`=FY9xmQO?;{a#@!YwYF(T6|3+r9wl0n=)m9gfkQZqf5G7!a^8k=Oy z1sc0ZPdyuFKkX39xMpb~FKrCjZN#b!Y!?br6ZK3x81w8wg0ppT_Gc>2M!HJ-Tj%@l zw?}Y!`*p_{uyt>c;K(Dd6@kc9qTinY4S`I>0kT$6bnejKHpc(l-LOLA93bxRwMG#b zmlL!|pl{0>MNMF(_yRyEH6SDaA7cAEeam?7v*uCxKJ7Jk9zHW^G>lP2)qAhh6~Lsz zy27xVTRQN)x<~c91Gk=JM7Am_tJBMHb&buUqZnlpQyPlScB9r}1#J`gxz`J1ee52& zpTYNapF7tm&8)lki8#4!n(U`4u5u((2PKZVl$RfiaZ*aM-Vb_$%BaqbrbcetSH=$FkKGGe9rUKm!vj2WEa8JQR z&@bIn6slsyxoB)Ai*WO7-AfnO51AT0DARzFFP)i=T3H)p9vf!QsqB80OJO_hMw0t*SSB!b^rk{_8~EKKlH2$FAf zFA*Zjt)P1;Nr?29)bE?S?f*>g#wFB9a4D)raSuAlm%`~!k0{w|=-%S0@!zmD)u z22zxPlqeL5^U_@dio_B!hqf%G0Y$RJCI9*YOa87uxC9AU4ogfF6$toU;e7_(8AS#r zGYzL;kM(uaW)YM8Eul}wroP^-e|+u3^ct%%^JZ^7>c=-)M+fFI?NS|ADM?(T*1^2U z3X7}rDD9~op|TXIRuKu+@I5#60b!exnZVaZpW2bdrwx@9ao)b7XZJ};?%>H}8^tDL zzVpH@Y=WmE>A@ebid(Qo88!Mv=MqOQR^m;q9B3*y5}Wy5 ztAm&ZJHywqu1nJ?CPu5KsahL^h{VrVu-#4=qT|?dQ_7ZLr@TGwbYYxNnuPy{8|U8E z>u|NX7)MoE@ai4PDDu7LCw^;6T(EfzTf$iJ;T~gF%E0y$-qCpqPkgcS`yVef)ub!X z&#SC%%vfD=Ew=4Fxv|tzRExVxe}8Cf$Mk~}YCKO@#}6l+^b(Ep+E8*k(s=DKozQ02 zui3{qjAW~cAiJIpHf;5@J&Q+ zN19w(6BShX&`wxwy$yF?+&j-32F3ViVh2^Wb&SesAK|Y%!W2waeSf1%CJ#+@NPqf$ zFI77#A0pF+0|wk>i9KOC{D6Y}s2`LCii-P7z!fmui{LN$9sGYyk$)cs2!Lr(B7(JB zi#&@0B}o7w41j0(yN4+<)$aolsNg^ZDiDYO`dsPwOduN{uB^-N44KVH?#jd^8=;e$ zYu5R^u{AwYL!-otHn_5{iAkVW(dQO>7vs3n^-P-bX647o)dbCl@yuav2ll2oiS9U` zW03vEYukgq-%>MFkMB*ERA%3AfE(9 zorEioMMtGWQ7KT=k!2nZhXP>$klNDasF0kpe{?x`@OJZe4Fb_B-oD_qbFKkFI4_bf zq`oYG3X&5bV)<9B)^Mb(UfBU+_+3Giyd#MDh2LfauMk;!7Z481{{x^>Mqkf~*rJRV z7Gb=&hg~F3;p2>HtNLA!W@@JGc@V~QxY6AaC#^cw6nNh^dj6`~YlfB$4SFR7AH92A z8-(SH(jDAm4(~arYiilWbaeLvUPHc*8#ND_b(DYg8C0dkNgjWtvZm-!6@N&I^1vIn zJK8Ft;UXU~drloDMJG+RuBFmlcRhivwy=bn>G+t}j2A97cb(cg9~%Q#L3(dL+l;iA z(UaGbKk7<7pWDz;FaO?8?A*|K@v)BHk1XdiCDJpDSX3A%=;AvCn~2;4<2PmQ+2vd` zP-eKraQ#->l>z#37YrL1Ae{nUbNu8SJ6mp$} zDp?I<-3pWRx6zS^g8n?>T?b9ek``sY0Rv@S$vo^Jit zkLgA9hWc!ok%Aov$(t3&i_~;N1mtf$$j?6+9xgnipDI{7t0xlqDQBv|r`j-mU}RS) z@90~_%rI`lh0aP5uU)Us&&(YhVT^q1z2W>EG=|=MsIPCAuj>(&`zNf7O&TJth4VsJ z5rx9vYcN!(&7N*6bZE?rJ8r$x%2;3Ln&zG3!FCLh`aWO7PBzy2`fk5t7KC9AH@!#`< zbF_uj_RO9`-N~b0ePl#rt&w%a=jR89&asBzj-C4Q7ZF<<8+XTbddNyJp5Gg6hs&SQ z99}rkwMYBxf~UGY>Q78r(HjdmOLX@h+^qt|yP&)wRjm$0`&XtTfJ>4UFsX^O_4 zxZ87ZdbQxE#OsCjo9g&@w51PzHt)0^nirKuq8HLlM!*SShg`*C6 zrlW`ML_b4!IAd?zx2C=Spv+Xf=7h3OhUmj*4_2w#X<*ARy%u?7%qED8(OsUCp-_OZ zz$kz`;_?%M2@4G1zc7MSNYw8M3o>#e4daqxumR43jFbXIkT@9SM1YQb6CJaa0fhvi zF27|v(AXof=`8Gq8w5|-jU+iucs+Ge$qU<_Gl*?v7IrqPBaKke*gp4&*jmbs0i%l& zw8T#-;S`8Uwh%420HA#*bE9esqpF~&3xA2R`rGhTaYzg{T^TU~ep=oEV6i<`+gyhd zzp71?RgjTY)YgzuR#f=2@vFIHmV1Db*$D#hwk}!Y^ik_5);QGq1r~ ztjCVdVbVX%?DJ0XAz83JE@D8C_s@>)_A-=qyxBD5d_A~Y)kDf|oWookO%T*r!<))~ zj~;Vqw==Z00@7yv;1m~Qp~dvXs78sdQnUBi+0G!ydM&v?hq>eJC%ve<4Wdp&8zRax!X49y8?)&6%4V9+7_kD-qSHGdGmWtC8;p-R(W^ z{?HbE?7H4QfpGYvR>W@IH8*9wZ1?+G{!z@ypSMLHf3|8(ew}ac;&opo<*?n8ds*B! z{?+KZWm^#@T|h9of(%iXVu$`4qU(Mk8`z+^6dM!{{E141qK-mQ$-gl}qac-KD-y{` z_@xz#xP})~NML+fv!&Ji1&t{d~Qu%?sRLe^%Vy=4+KPyb>$d zCwy3x`_qytpO?4qeQpUy_!~mnqQV>7$52IS$y+7sE`3G!2b?5s68~y>9zTC+=#Xr! zi(^)gwfdV6_cA>WCoXJv+1Gn>6XTJ!1InX3n|8XMh!FB^$}Y&?IJ0k0+V;btr+gpu zXHWCbDRrex-YQ~9i!H3r;XQ}ejIODQJT9z+tr8n@8~rlbu-A2~7;89A**Z9X=NXy= z)_Be<&c&-*v$|OHvLbJG+%4{SzbAUUf5T4tJ_k~UFr9OExv7AE{fB-;-!Or;@Ywn< z?s}oGr%vmaet90a*V)HEq$H}fnEtGC?dYx6F7m~|yZnuzSY z%nUyew1MtbhRoZf7qU2Z$xqkt7UDu*n$H?{OVm`9^rT%V*37@t&ZA-UB6fORR>3L{ z=wU61XxQf(@hLL_zvi~k`K?vwo@sAPH{JOp@4-#WLGS0*jrX5J*S@yBGMZ&>a4>mu zLV!mJU)OF!jeF0WYbxLUo?e{qaphil0lF*Q3Ox@Ulb@5~4A{Yd^Az|28dvxM&areF zr^WXmK2b)Wb3cwge=nr3T)VP3;4H6Qp$s_xjf4L`9H*Wi#WxkE27Xdy_Hb*OdG%VD zm6T}Im~;D*Ma_p~<2{12y3p0#tr0mrH#}{Q;%6)(X-*cXp5zkxTCyJYWIbGGpA#!s>-ep91`+^%8`N}qO%oV=p6ZAVXtTEpP)$FN0LE0$voa$ zHs3vX=tJB6G!;_Rsz+Vyby+c$!@InmW>fdd^4zh(Q%yU)x>c%x4nQWZX>`AQZBt3; zi<^#?>hl2tIQ@aMlDQwRZhjmZ(>&{A4^iVnl^1ZEQ)pKc$l;`jqv-VqWkO31DexX) zkfh!DX|`wMLF{Yv-3@CCzSibgs-;~zIl;5~VSs1|*+{B&X`EUET8e8$JmucxAvrni zgA-xuHMer_XKM)viBT7g5i7Y7%>=o9{3gUc^u|48NkqmUR1 zzYmtPsBAR~9iOz9qq|?F;e;}0noc}rG$bsLyD_dPT7Q#fnh}I(_4ArPQaZ_#PN?!8 zKg+vndPd{ItJ95M(2dQSe7x(kq$9Meh6nLw!L6{`OLl2{B51W z3r;$%ovU9J9m69O-!}GK*2^<$juY4!?RDqswHFLznNPdy_}kCUWjS0byI`Q4sm5I5 z(uHf*xYtYe(d`#ab9`F}MW6W`t>V3An_ompQ|WYpOUf%cC7bp`$0zE1g!f2m@!T}_ z@w_zm+0*7aZ~LB;wj)oE`0xb98%8>xvqn;(RIs@J%mA-%w_* zxeO2;MF!`fQ{K|CKuqKhb*8MW@a!up2#(DQ(#f3g%C_|W$ZlzWojD@%fWx#by=X#5 zK)l(AzQ<*E;>57oR>AHFF1|evTxpMC&$xM>d(y*Im6l-Xs`@08r{kSh&czm=DLpHhF?TH#2ux_P21~ zJ;8I3wyc6TC%`<0f7H9H<`d|9A1HnA*xx%5T;#TXV%MzXw#Y~##Jfy) zfUqp)-w+zmk7U)w$We93g?3f%gOsm=Xye+k;Shiu(y)T9aiW*oUfQpF_ z^#F=$hoaiR`dakrpLJglEeb_N7ViB|Y%CCJwy|};pUg{zmMeRAwq7Z%;w$Ii4qU1E zVAO#_e}X<{*s%%7@YLZHUd>9`4M?p^+RLu(lrI)m!^FsvRNl}Xnkeyja7fh7hHl_~ zfZiBNNnTPIXtM=ryS2s$0p0{Has(#+XTs?B6uv2cm)A28zRY>~ALCex={3Ds0 z^`4a^D^_X#G6v*+2HBDbV?4>~Y@xW1X>9j+l18SX(a`vX{<{ZIwF0HpTNT&7s@R)p zYLhxmL&!rh(Z*dC7`or?LY=KEKK0U5>{>LD$+YX3Z)xYa9o~>l@@av1^t2Z1*$9)k P)6yq*$X=&d&4~X8FD<25 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Runtime.CompilerServices.Unsafe.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000000000000000000000000000000000..c5ba4e4047a15b3adc61340c781307d9c6e89413 GIT binary patch literal 18024 zcmeHu2V7Ij()gYv^bRUTN+>EKgcA?}6{QMDm5zcKLVyS)m;@;*Lgb=Yu_1~|v7lb; zT~S2E-g_4-7Pz9qwd*(MB!S$k-gm$M_ulV)zwiAIp4pw*-PzgQ*`1v^F=%utq9TN7 z@P7M-&>l#M$DM?K4GN%G(`=t6+M#mRd=D0Q);uDWE2L)%_$dNb2A$2~@%SQoB8M)> z;?cQ0x_3x8J%gXbVQ6TmT1i=l`XCgDQPINyAxqX8N(ea) zA$3SfA#W@#`dbOTOLVfjGT?r44H+U%jtKB8y#PQNIaZKc{-Hzf41rL<1|lh&J7g5$ zHG)^}aR=!c0!}&~DiX31G81z^@`Xh9xFh5#%gfR&#Js{o$VNd5$h!|hLv;{RA*tOU zlrEXtZpx2y2@e^!2i)nG@^zo-qMNH%UdnN3(w{PA!Quw8Hi_^Dp~hubVA*Thp2Dx z1HLlapV|}TAMusaF;YEAzEF`0>q7$sMx#SfRkR_-DBB7Yvd{1Ft~Ji>o&!?%Nm(T` zb9rq*WeR3~NrF`YunNXkql`2HFHQ9rRi>0d(suAkVS^iR^|`y<-_ z9H&ww<+9@p^c9n=2eHE?574MTpee{`UF+VfnQTm~iA*nhk$Ne&´RVDkZYh5I? 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 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Text.Encodings.Web.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Text.Encodings.Web.dll new file mode 100644 index 0000000000000000000000000000000000000000..3d16c7e9d86d760e037853648c40c16a1ac9860d GIT binary patch literal 79024 zcmce<33yf26*j!jId@LT2sa^t+{2J?$wYDkAyEV}LX=4Ym>`;5$OQsPZpfg_38FZQ zRHe=$QtLd=wiU-(wN}Auty;0#R$E)GT8CE2_pY_~xj6x}{lEWtzO<~p-u14%_u9kR zXP@ahcj=|V5JEWcZ(u-(N08FrOqM?^`avfI9!n4pcz-?S5pB+|$1Gai+HH1rMOSr& z+szf>j*e)LxjbTa^>&!89cK0Xdb2&+5-A)u%r{;Yy`V;jIhrBHkG|mdR&9sGSTjy5 z0@Q@?N$Y{{kec)lHX)K&*Ja#faFL+DX7I4zR zT`OSZ*bpNZsw1`i%|w)iU6HmZ94S_cnfgHZj`FJ{+WvPx^(+1;HeEQy@OB~AUnqo^ ztwLP%wGiiFf(%Fd`<3m7k}N$q0Tt&SnVv4~dfLThXll0KxONMIbL1YU?8cE0@!MI1 z;K&^;q?`*$yLJoat=;Vi=ptwW^id%ioXv5Gnj@_th$-N6A6N(=)vT5S3v*Edm3h+tWtkJHOcMv2XnM7tN@hb= z%d7Pit3%{~LGzRSzPz+V;R>QY-z>wGzSI%K@VZ=S4L(<*2Pj&iJU3q4TGg(!f z>P~jM+y+`yw>solDfB7!MsscKsn>=;<|hd<6A?;n;|fnLGbOhSEi!BjZLQ#TF5 zVIFTY_iy2tM9rO@))2>o=gnB|X+E&fmEPcUCu+eW>c0m)>{#NUUUj$@Sve1D{=*vA zuk(1IfysJsB6G*=IV8#AYP zC<*u)Y-JhZ1eArPDLGh-YO_kllYfVAjMxhM*8Kyn*1(LW<#DdS%r%YiZcmec&0$Bb z&i%p>$)+rkwUx%{fr`e=!v-}kE!Sp6^_I1=?>+RmNe4`K2zBOWY(@Pzk}%3ey2wK6 zrg$xzcpb#=_tzf>?ey6dYJcb8kLY)CQuq2XZ|5 zK6b3IrDt~fkRYa!`|Hwu?2xzz-Lpp~*lKVlID(iezTEp9`4d#=#$f1Buhd=e**>;TN0%bN5V$?0zD03%ihX@@Ucc(-@{B#knoHs~ZfCh6;EW82&uX z)z8!9$hH4SJhZab7)Ah8LW-PUOx=b=;k|mQs z5~aafWD8=I&C|_y?s&$%G?3YHD2Ovh-Yf(dTmm+Slv6CF(Na#elx3_`>OoTS-BzZp zT~A^yhI~{h9Y!6Wu&(N z=592|)MPXSd^j;WbaMbfHX$F*&Nxxh`4>x*JYSeJ9UB9I6+Yy_h9ykp^+T}=b_^Db z(`Z9(jvnZfi(Lo><4i0;EwcYk2y@^qA%YEPU2aG>8XZRCAdTwHfp;xBmLX>0@{&|} z%c%*;qLE7tBg#((4m)Y#U8)b?f^&%jGXiUrM;TarlBJidipRs*SnSrF-1$~eJ{5_}>L-Pr4Z(S+D>xs*GFdK;-~zJB zBAg9!+)*dhy%{N1vSdermg|U~3_ssdVYny^*N`ycR2^=vBR)m9!m@?o2rfi%!&20o zGGu`DgQ2)oD0EEXY;NlV#6SZb=StDIBPI_|(Of)njCvjOO*R4N^fPE)QhrQyKBf({ zLpA`112reDBwx);SyGmaRF&qB;^NFVw9Iu@nOM{W7HTyvK6^2;?8f4FU25Dp1~(XU z*Q$a?#MWTx8yf(MdnxL`N#N+QcTlH0WT*2?maURA5F6UOgcRXcUE;=0)r}J>9mAmy z)j&IJ^*96$P=T|`vD)&3HDTkNhtBuNnzGXylC-*dPg+B~M-5HrkH@Ib5I7IWHI|o~ zA$^A}^kM|sSUgNuDz`FGb(?JGQIkcvT8*NM*GH4B2}wLuOK=V(^sBovx=z z+6YEzz)=<*4}C~+vQ_mQysiUC)<{1PkuZX=J7{y{_x53Gwqjgo<}USmizR>BSxdaF6HV{u1gI* zp%%FO!P_;g!p0Vp)<`Vy!41?fTItym(l=2`olhqy3FyR)zF=Um#A)Wlp;(@Im`rOh z`vwLEngXUgwH2D*4dA49G526FyeF`K8nyw#?ZMG%_CvF$v=y0piQ6=hnu%C; zWbwCC2D2Hb2eS`?jmPa~BdyzJB7`)e*>ox%Y*RlBu{Lq_lbYR#acKQCT#bl_b~9CR z7+ZT8lV==JK;T#f%tQfYuN)p2NTVy^Ass#xr_;RF1!l7tj{Y}#X_WF4jh|3T*L3Hi z3Aui3_STWb2yP{e%Yf~aa^5k>JA#f0ACJ7NAi;1Aj!#;yad-q}^;^d?c9Q}lg!?zN zLu>RIyc2B1G{Tj>A;gq`!$mtwX>KsdyTM+dW3WJ4ALyJwe^`!awM`4n(t}$NUH*tf z&CiRZJa(}4Ok0$etK8BL7b{p zH9=Tqc?T9+)sScU3><+%GUfoTzowK@g@f*4?B2JN^JASWcsqhJs=l{a$6 zA;e*ohY2!e@sZ`>fNu!IA61~aA19lpQ7u-fiCX&iR5x<4x{OfIQN{1aMn2`};>D+i zXhOZmF8}D-M}AN38CK7a)&1R@XqIIJe?-ZDxs2d(dI+84r@0mA!_AljSm$t2K)pWN z+)w>Bs-^ir97m|5gPRY;d$N|ho5_i~amV-Kx|hMa(cupbGuAlP$U|ohxPQht z9KlzhGqH{NG4(07?_<@eX$vbbjI#`^bQt=ixGwaLDqK%9^u~tn%P9B4t>fXFT@aVk zM@sM-GOpQ*8%QuF=k$@{=lFux5>=`D{hTxCq^s5iFc^;Dm7pxc>05I+b3#rZDgHp8 z%(-#v1h$XJ=_7^vk?)9EG!7ip37Qm>))%u6!lEZyG%033(ew2|8b`UzO^UeyjCr?> z&a-Gz%zKC)u+jMzO^QkPZp|o!Rd<0!lVWxfP0O4`7g{taCfyx12OunZl0}nZ3Mc4E z5EhL!K}JrBSw!?s8(nPCq?nfyJz%3l7EOvtcP7mN2&?cCizdaS8-?b42#dxAf~=bq za{4Axy{(WIC&!I(`py4<2k zF`J2w+UVmfniR8>=o@VG@fJ;rxrgWh8$HdUNipeq+3bU`x&`-}WV=Z*`-vW~(bFxO z6qBx0%{~Y#_Y8|B#q1|~z(&usXi`kNK9ideKE5_?t*~fP%zmN=AgsbGEt(XQcPo9g zTT!{IESeOvAB;I*qpK~N6qByQ%s$!`soXUdO^Vr1^ni`7wP;dI+LfAp5LWJ47EOxT zPxOF|o^8>jnAk*thOlziSu`moT`rh6Kv?vN7EOw|hv)$teUe3!V$ufR9DuNL&#`Dy zOxh=#eW`==T#F{f><44sV58?*G%4mDq6cjBe2XTaZ|c)dlFVwyzHu+fVwniO*;(M>jbu|<<&HWS@vqnB7T zDP}*>12*~;izdaS8`0+75LRdn7EOwI577fQy3wLZF=_j1&WEsa;{rq;f~1%Wi0-q| zICn~#6tkb`cWv}CizdZ9MD&1-KFy*@F+~RG0EAWd=@w0jX%c<6jc&4NQp|gZ9P`3lhkHoDcKNioG}(0veAQin)jA0UN!=qDe97k+C@dVHLjBqDe8u z1kg`FSahF7lVa{C`V$-7Z_%WfpAtP_qqkW!DW(V#4Ph02mPM0diix26AS`;jMU!Io z6Fp#~&$eh%Op!}8gq8aoizdYsc|=24^bU(A#T5CVn;D*({fI@AV(uq;z(zl6(WICH17qI(#$er# zSu`o;Jz&fM8~wONlVXZ*i2nCr?w?sSDW>=j==l&8@=D6Nij{LC)wyHEt(Xwi0Jt?`YDSh#auvi)J8vT(WIE2L=V{L zXDpf&Qw)Iq1j35^S&Jsc{FG?At0`&RPVW~&OiI)@{}S}(zd#rb4tfES?*He5OT&Fr z+-2U3+j04LBpY*sZ98m-8fN+EDUfR+-5Fm<&&i#%`=Lv>WW45whmSS%uxsyt29TY6I41@rFook zo1CH%^^Bx@!GjUSxexh*m!L86DTa%0Dg{r+9aDd*BX3-afv0~>K-njy=*fKrlQ8Hd2r57tx40^A^7dqfS6o+ci9tZ8C{%d%8+-e?B3m+uYZ5#z5h2D)S2INUDY@)GHrNd_y?mCk%T z9c5Gjl;EJJ*BSKm8haC8UA*Kx+?&>u?8VgXxAo00#!51R5AcA$5VHjDhXF4F8;2pTLh%^i9+XqkAI; z%@yr{cbwZFLd0%7CP=_r8}faP1sdLGW;Vv($nfeu9dZdGmF=%R84sADiN$fajsJQoO+nDbI=SWG`Zc@Rfas zXMeKql4E|{ee@2nKNNt3D{4CnIpP0n`1|9Xu0_Z9f!Udb!6Xq zsMr2TjYr>N0{Uhh*|+l@ZX8f}aOTQSgcc}kX;mG$-z_`POJ(3>Y3o3&4L)?>Lh9-v z9hi3^Rn$zab*FfO=OAi&b2&c_y;PFyN-rtQTd60zt-f(n-$cmU7rco2rpBG@qrUN> zttVhCRNut>qEQ5zif1zZP=@M84_s5=dW>%2>d8goaWS9!fW1O1;R>sbZo zIQJnRoak^o6z@Mc%00OPW@w^6CDM$mDYJrYl$&}lw7=LM(ZScoKAwgUeU)3tI_?hjHhm&0WH`H zk%IxF^V?}?JFb?t{-enAA z*JqDpWm0{11}n$aXJ@iWiyq(d8}xo|Lcogw-9)-g{NBOF`|_r2{TNwN9Wqa< zQ)a@8HR%!SHAz~%7Rw&%HMR`x zwa<>#YmL-vuOOlrd3CHy)4Hh>`(LHd3k|%5v<64#VW-sBN*#Sm`;r=@BWP_E{B}h~ zsC;W19P(2W9D(%Z&Op-gW=GcYW~14cmu$e|APXM;Hzzon@eZsHXE0YV4pMIGxXhDL z=9s}UGeb51pUaGM%TnDL^sP=_f)jgg_5O?@a9X3Au~y8ZLXEQg%%fsXaAhq|!1qsi zBaezb0gXs-HOI*|#Cv3Y9$BCJ)!?w9ZKC}f_K{R)9r`CDG+Wl0p5W*R6fJjl1Wfc) z2lbB8fzI+9WQGA|kTAoMddz`xgV+h8+Y(h3G!D%uAFHWVer9OV|Bv$Vve;k^=)xpa zl;EtVE~L87Kwa5`b&U$Gk#&tZc3To$2%mc~aO_4U&@_>K8EYMND7DX%b&%i4cgH5l z@6}W@vV!fHrTOEz@&b<|*olr!!u#7asfvRnJ&4IzD8yHvS>vh^~e>$ZnIVdw#8Ni=@DBIBx$V(vFx!G zfh|KK z&gj|PTeJ^87k=2E;+r-Hu2;^1y}%i~3Q3~wm+yWj>9~w)aPY#*TfwujCgn>fwFeAd z3R9}X=?>EFH$NrO82qS>Hokedw4sX{wE-@8JyG}aCO=6>NG%xN{2S!O53e;ejyht( z$oYAff%khB!YO(=;_|utlXQc=vm%o#cp*0h`CQ^*Jx#>D6T$5%jWME6rb#BYz#J2-Gbjo&A*nuKEP&MmtQ8*dqaNtZhZ7& zY8AC<>0n=^b6+^DPQhteItQBQ-emAqJ&J?GE-aqCqCW$K<;Z#N8s?XA} zrr<+M>U>nEuAz(++9_R%qT`)zZv$N;COaB%nTYtD;yc8L;$qi9Dx|nT5$01sZbLYy>W{;KkR1NqXKys{)S$SCKnVNq)spSC4W< zf6%2_`5d|e9OjH&mr>(Y3mX@CbJK_Ay`MHL?_ESgbA!ez-x@1AQ=%9;GOV#86CX)5 zR&jumNgtXNZHMMqHVUVt1cI^>QXD~F&yE|6nIB~Wit zNO5`H$cN8>X~7!i&G%tc%Dw3&Q}X(B9Fl`0GCsxO!0=rNxBS)UIC=PTA3N1Dl^3+K zI52#)Oy*A?>glo;G)*4dXVVq7YG(PVjkHTd@kux!PSjl2m%?h%aD)oDS__hZ}{cty>_ zBkl}P3^Nb|t^M$zcIfUHUxb$4C91ZNPUcB2;SoR`V2Xl#n|a$UxL+*IR| z*3gF-2>Q;s3V9}>uW+6m#d(bAc*N<;8|8{(ua284d=oYwH?gQTY=EgcSJVVo@b({Y z;~O9V@OG}ylBj-se_2K^@6mCu^LH;eaZ>rCRr!~rGjO@T8wq`}Gs5L*P^Eii>HNu# zJMn;t8W`sn|r z4OGbg-iDj)RsKD9df;&Pb1-G=TRx}ZN84$fT9M)uhy5tuV8K#lyTO7FRC#oA>9ug2 z?V`7!03OG{T4}^ha=V``5a;d&A~t)T_Wh4 zKSFey{{>;-cO3ZfO`4I>LXTpa=xIY5kGoS$M{Kl?;A5szXaUogmv6Y#%}P87iWTFc z-`U8XmFCJ=L4_QkA7G$a8R!fBMwRt5>OWc5R4OZpZcg|ENr%(3cvBhY_W9$>E`e8y z(-Wkd`Z$I3BPmERFj!US$9#{cV^|uV$jrm-2s{rM#UF>sd)E&CnqeulQ=f+pz*l|2 zKBRay(}-K+c!+>|T%MLK zZ(huE*hCOw#wwibb1y&#PD#Vll9<2Ik+o*&!G<}D>B-lc#eTZd>ZBp(vAqL1so$}V z(utBcD?Ud$Z}7`^fyDIzZ%_i+3ta~sX@0sEbh)rm@fGMJa~+xTQeaJ@Et(KVq?E-VIn?n#Py@kwJ;qcfNg*97itduU^(0=Tn_ii zvU)0qR9C%K&J$G5>HhA=koJF!Fw>+;w+ZDO{Uzc|k#iKwnk&Cn&ARe?KpZ2+KrcQ= z;^}^8E03CzROaTXyU+F^vZ2b*!A&jHW&sEvIbnLiYiO zHD%pYX_jsJ@^N>pHc@BA+H^#J1$yxdJ%eqcIW@FRWI1-5cnr8rN0%wvM0s&YbDOwi z9HlYe(NgWLS8XB(t4*Zy)V8fDZh;Lp|ET~2(@Ihtft)~FpeJyAa3xK#jtr~!1JfnB zYLGm6kjyC=PC3JY_CP1{uA;o5%vj#BC4QpU1$qNf&cB)*l1I^1AorCc_zW!cG%B^| zzr@x0LvbH#mWzeqy$-^<6 zh%XxH7z`Z0keWR%us%@4{h5Q+*EO;+*bkC7{&b<8))<$UY0y15{45bJhAF4#z(Slv zlQcI-JU#Ye!WF!&E(kLkWIs9i9^=t5@HA?s7wieAy_;jwSaXVgLR9)`RJI+@n3P2_tM2EJTJq7Q>6?V=u<*sxGj3pgpyUFL1adUEf3v;HH$s;a4^|K3`s{pSO|tnw^`# zn@RpY^(C4eqO$%(yzZd!v4kT{oH4nusIa7{q_~_+PSFNghKqx7*oo~!dME_FzNf3T zV^ueKoPCB6^lrhp#r5JfOspi>#?4w>SB>-o;LB5iE8C*W$r*pxM`@?LdsChlb4L7I zE1{1Osdh9?%)~$JKE$tKxC{SW(9wQ+Rv;e0Kk~y^a*DRoc||;rf4{*$vQzv9{*fQ$ zMP2kx1*ZrDe_mXo(Vt6{4j+;25*tU5T<0fwamvf%Q^f|{_;!h!)YsEo;+^E5j&_N_ z2$D-uroiXr5qD;~gnQ(d<6UC$2$BtcV((|4TZWTf$8sghtJ(fi3fZq5y?&xgTr`~I z_>^ZtF5yj~de8AwnK$NC-{;s4rG7a+Ma*(ioWD$@lK(nxFXDeZk>tl*<4%s`1&;7ulVV;qkvzM{le|5h z~vglHZniS=kDAyb@(_zK2u4 z%?YCnteVL8f8=kvcd(~V6ft_1xj4Gw0GH2P z9IgF8dl<#jDguTj|ka zLUqjD8j@&%@Sx0##zc#+!=0eh81*C(8YMQcXL;`4gmxU+mk14>?TLiO;_l!!pqsJ@ zjTcvOzNEmpzU#zu;slM#Jekq+0(T#P{x;@Z^z{p(meGAc`^C!w*O%Z90No*85sg|u z&?6!8JSbYUeyma6WQjVoZ9q4}^B!>PINuFG`+$0xdy~1}iati)0JV$XinBEh`PSzU zdR<(@HGDLd&>P}5lp@57h3EP<0Nu&?9_3Qr1EN?KPHgkGi}wWXrNi^zm|%qN)99xz z@59T28^i}dK6n<772-Pa7lkqyeF&5a&Wqu{PJ9Fu2bAI?^jGnKW&nk7OKp$%n|R2E zJ{FJJ&?jO)qrW?;_D{ugC{u_fK-Y@35Q&&NLo%RILHa@fyf ztknMk7U3n3>=^bWq+{5#khj9$<+{{+ziUbV1DQ`ke(WMy!ZOEv0X_|xzlKcAeHHRg z6YqDO+~1N!a%}PMAg8e0k$699tVw&pRo}k>rD@{OFp|3py1Q!=-IxOCIYpS^k{M-_7=QY<(n*DV)mEp`627IZ2t$#i4N+AIL`Y#%a_@60_*9l|CQy5Y+1y)a@f+% z@@tlvT+T}NIi4*8EH|;`dX|Y?`$b&BHfD!$t`OUc*?tP!XR&1&%k?Z1m|f2DVzxZP z`gQETmn{#oe4j0Ixa5Ou`Gn=a*gu6MDP(yv%X8RXz`5Gl@(s&MwoK=8&SJ{~w)}+k zdbazyWH*;^9<$|ad7XVuXUk5Ozhzm&x#qFY3YL8=U2H#}bB$(8g#CxJ{c^U9;972H z`!Cq?B>VrK^$%FjWuHSV$8z2;nf)8HXR`fUmPO2tWcyaO__*Y$Y@fpR&sg5b>_3@p zV9S2izvGgpv1Km%T*~_WEPumNu>Dk)x3Ii}?MqS1$^Dzt=(yfJ_7L><#*-ci{0Yat zng3VF9N#C9W%*w~{(kH?t`e~&>oD|Z#u#qWJ&>nE4qApO{p9}DTyk093zxMb)uyGm zm-JthL$axu>Zcmc8O65ceqH>`Zg^m&#j52z9PhSZq^i*$3ZTNKMt{Jff;P6hR;jM)ZT|Ck*trq zA0>R2QwRI+oupf3&T}s?Y5%k%edTyMK{X6P%|p=Y7&;l{^vBQ=pq(*9-1RY(i8Aku zA*$io7+MC;*J8*C?gK*FZn16ba&Tp1B-%N))9n z+9jr?zXsG6LvOlAiJi*xoBYvQmUtwF#%ZSba}4EbND#f#J?7QwVF-D=)<_ADUjCQ5BjsFm65hFQ6%EYoE zsAULh8-jXbC=)x)?GkzJ@GlYN;zAo&F0Qt5$BDf$E=e3G?p2&f`T+MAAB}Mu(33Hg z3G|Bc9GA8Pd)eQ`xFn!YW9Vb|34%Ug#hmx}b3b!W7w!p+a0Gk>loLbWxo3)L5^>a( zqFN!!S1IPiJd;GFI8|{)h_gzpQ0S8)LTeQ|T$BXVqtI<>4o|h%tkC{6FVHy(U6VA; zs1X+{^mx*IyqmXMq36df!G8RDh29*O3G`D&yFA~Gdfq)tJV*#L@{i6$&n&TDaw3wE z=$S3zaREZJ=d7aPo;oo?q2Es$?m1CpDU=QFBr!pur@_q;MG8G+4)@Fz-Qt#UUHZvlt3sV46Fv3fDnf`ecTARNk$6OL z=Yl&$e5tr~MH4)DUW5xJ@;ncyQ4CY)(4+~Tr6QovoV0w;sUlyYJb0cirYn>L)Fc)t z^eg0R7N;rnf;qtx7H1IRb+E*{lpfq!Z{@3e|+}#Jh;E zOC%PCoIqbFv^-&&XC>dwK@DPgLIqF=7ke}Z_hruVtP(RBJtw-;KM<=$uj2IFxt`Tx zi$vnWQHy~di=op!t>Rz|tpxf<3`IR_aHooE5VvP-@U)593e7D(+tVSQiJ=QU>%<&f zT?lQ5n3Ax|(=9HFp(N2G4iOUD#3RK?qE}So86>q~O2Tf>8RCu@y4JH^jKW2!2pP)LVNv$%A}`AcO8W1BMLq2df#(_D8og!z;)}b6F&D` zEKXzeXYJMrUwbYQYZbRU;ZCtr^f1~j)+ZnK>=gTA$mQK7zF@RN1YH|Emx~5mx>J8X z=SuYM7OzYO&@K~elQXDB~pNMCa=RZaj zdT$YLD|BlCq5mk<=q8jww?i>vXL$&fEA)1dP=i8Ad4$eX=)?(xb}N(}N9aL?Uh)xo zO`#9DzRwkE;8;>{n}q7SvzR=K6?&5MEl}t-Mp1Eu5Z3VzlbNUL!lPVcd_lYXeale_XJtr!UW1k zzhh6eU+yO~OQAzNKUXSLnoQg|3iWdv_9)A7XhOB)Vqp1q*=lYf? zbS2l&t59S#m2$a4t@(uRS182w9Z=|>+)Mvd=pIH%Gi7~0X3t3$;!@@*l$S?kwp$#> za*;wAImF$r(4!p73kp5JbLk_6_Vax4R0#a-_B_vJPEg3jrPL}kl4FS|bUAyTtcc==uL(G#qIlAp*HqRtCF=BaGa$IZRTEDtkBt9N{>Qk@~B*<(9O9N%Y6#X=6tUz z^c+X_sX_-CC05J&e$Gc@p+avmnyb*2jM@}>g5$hUp@Z2}-)#zwoJi);`U+Iaj16ndPG z>8x5=``6q{Cn!|QJ+Vxo<9N1iQs}2Vv#wU?5PLqV(8r8^r_eU;m#-9hhhy>2lJ#AZ zMs1&>P#d>>kwO!B4e3_sPLBFV3Z2PO->cBsobMHd+`J}#qEH$4e8Oy5Uln^6DAdSt z&QZwEvuCYB=W=T=Q0O!6>suANf@67Jq5FAM{-V&C+%K*=S>GSIzHEio=22^_6^gLu z3WZ805OUrOR;@5ACsLMZcHbG!FZ@wGxZi5Gi+ zE*8y`+#RmH-ls&{e2Jb+c-Z?(@tQ*KB<%M-FP5AP4zZjU|F!2=Vhy8hA|KCKUl3;# z5>)%Iyf5I1F`?%?h2!oNFNz6_p3)B|UF>~P9IwzPNqfDoi1`YoB<}bAR-7jD35xo4 z(WcOqu7|z96B`wxHoPe=Qs|+CSG@0ty^Q4Dia&@a8Od1wAYNibR}8=PzAKh48jS2c zaT+5T*?VH0LKNAb#W@O5WPcNv$$T8y$6~KS6xlz-Jql4|pNOXvqR2iMzhfjL`$CLZ zjM{Mx`%>{c-Y>+M82ZTjr6^LUFy~+1uf^Fhr2D=TAH-0S&(Io{$Wp$T81VVDM`9=+ zFV~Mh#o~_hjnHmZ=%dU!-ze=JM!Q7C$VI+@M*Sef({8WpRNvSby2G{7H(t{kh&vm7 zrimQQ%V@Xf+=6w!94$#A?DfwCN{^v_-vlk&mM^FkF_PmD)Y=%yIWbYApO66cIRC`Jx>iMbKYYI`%AFutDk?i?tnzxbaqc&XN zo2DfxQ&cH(i@doVE=|)lI%iZ5exR6R*4O z_SM8ZX(rdj5JiR$yJRWD=;)ZEeaiWs({d8yv^g66ya8QnU!K0-H&^=`qa7kA@de*} z?OR6VdBAtF)^aL&5_;RWSbI$&I*J>$o@K;6Wl(>fuJxa0d0y;Yp_!*kj*iCF+95{U z#NnjB_}aDAO_HOYk7}1PdQPLh?$kbJbeVW7_jBJmZE7<-aZNc4KgQalEg^)fx_h(Z z;?C6i6)H79bZ^uyVkCQTqjotXc_(qBc5Mv(%DYkfMGU3HZPH$6^qh9eINUGLK2Yez z+>E#_T6$RE?>TK=z8SYwTd&YniMero+Rqf)pPdrduYIJ@t(frJw67G>Q06ubH+i^} zmO=>m|ahYXItxp>W&<+Qp1ypIxY3skr9!wQ(0}-x9)k zrLpKV?@n!U3)Q||{64QY?ozE^q5pWd#O=~%N2KTRzVqTP)7BCav<_fjR zS7`YwiF;b7wcy9v2aM#AbCvcfBg&U4uF^VJNl(gmwf2ZYl8OuJcc@1$gmYcP&7|Akk(Hv`uyG(=~KaIOZ zJ5QnW9rwlEuKC)CqnYKz+eG6Ty{9d}9i_Xqph7E)mjK-+k@v(&cLLp~xYPpjd{l84 zPFe}{yyCtb_w%^BwYYYw;XSQ<{3dW11W}ttZyQ}VHYv#vZx$ydImDysKV+}YA^)UY z@|T{~IY~*nEtf14ZyV&2C;1QRI^J8^5KorUxc@G{E+!w6I(milf98{3?;NTd;xEUv zIK*FV_A5A&?PI6}D#uXe9BFZ=(vEF+sxs}YEcs`Cib~3qB+^UKx0+}}jhYyX-jJ-W zEaa&x`%Lzyv9NmY`}9BIjvd|#I7+5*UMcPDH|@*#jFJC zt7(u!W0SSWGP}nT8^)bK%V!YNNtXIb7rVV=@5DV|UGzc@)urdo1d8yo z0_w4;JbUeyiEKF~gYv$>{qR}3^e4-YlBwi9$&~jpF5li>so%?Omt)sBhVuT1{r4a* z{_|@*f2905#&KvHWrTroWKV|F#Dj^J#D8)Gy@y|Fg2ekL7!ldGq*E<2@Apgc`K*{C zZ{^6}8cT1Xoe`j8zZ)xnLu^Q*k}p8{x_FUC^GlQT>(CE|xMQS_Pmf>Z*6qan!GEh0 zV@-WXb{cV~*vS26XD2dCePXdqKB`4Z8SO=UEZcJ(UFO+bqn~R$x=f0BXylvN@_q4> zT@$iilDZhjE7Je_7=DDFp>d&jj@CDzuMBYuq=VO3r&z#8uJk-Mi#IxPELf%ekdIrO z`(Hi(mva6WpP_Zp3^de?y$&-?7iDZI=2=Ixf@T-B!mi8lIxl;0?Ec@6mpulWMaMci zEIS`ED5_q4C9&eefDD=HAzX< zk$5b2@HjnI-wx(I7CV@CFdlhSYC;~5_FQr$kv$_<5^14!>D(^tNq9cUby$x3N?sNJ z&gb9L`8*<5$d`Cl*x5llHc9x?#5;vYO8aQi+ZEQ?isq+7or(TbMDK`{=aW1mKt9j% z8vZAI4XKL-yqei(sa^jx?Z`Q7XTRc=hb;IWlxO?V7Q4S)m!5Q%8JgE_c_}$dxbPN2 z0{*>;e?I(s75{#V{~`wMx|1QDct4i(F_1od0l9K~65fSaIevtwV7-pz$&i`&T?IUq z!xy0BvySBkmfKjK&vF;bt61I&nS(Fdsr*M-z6zNyyc*XCnItAchD0&zCqv@Div_8% zJxR1epDoUZoG)(F=xOY&8ts{fuTeaJ;Hy$M##;?O0tqs@?_B=gTA3>+|!sH&+L0zQ<|YoX7(GgIXzDMNZS}n zg8XQdAClgPAvum^F63YHL##`-ob^hUb6B3Djnw{>7}mZ)ne)Xr+K1^Knx>zb(5rd% zQww%zBk|v<-KCAuuP(S+s}>#cw?OVIxDRj4Y$|vZl42(RXQ3}kc#G|ShP*xNJGLb0 z`Qomu49E$YtTN_v_!nBot1on z{wDWZxlW@~p}&!QyFQ2eVUFs?Tc78hzH@bOgsjkX7L2{PUr^SNq7cwz4#?8 zo5c%|XN%uBb@5x>g>UcP)T!ij<26XrcoTAw@dwCegX}E^mATq@46@C5AF|W<5VFVk zJLG!fGsw-xSCIY2x2X4WKIMJ3yw8^RVJS(`G%DFplFBzU$~%TF4D%cWcxsBzG zEN=q4H04RwpJx3%*58NTiT@HQ*P@d?hV^mKccfIXUd4Kt^%c;sP1z3lbjnR^e;V@5 zl=oR0#_jmD{3as<@!VuQEha#JQS_%ijgL?fAvW+|#gB80#Yj~+sKzi$hx2}7oy_93 z_WvZVV0{Jadz|EX6I*U#%OSQHF7h{Ahzl!yKmfMwli%MYqCKu_4SpUF9 z_0Dut-e#67SngrD&rR%p)(^3KUr8!Kcqo^lBw0+>$9uR;)|*-Ov)sed^gb@eC(dNq z%(9>59+vxA?n~~{zKZWpq4M{z+|Tk5OOZ;gK7065?Lp^0mgD`E@H`uz;XmlSHT`e+ z4CB4@gZM8~j~RJTJf1XW^g$6wu7KQ@{K0sNZQlfL*97u!4wCF=c_{ckeu-I3d|&)H zv1Jl_vUC)YUd^(<=p^)Ze-YJkHe2=;Q3;3Geu(X&nAn-c6lZlYkp`I{v_LW{(d&+(<>%qgTdvovw>i!mxC|2-`CPo*we@^(*wN_3QP=^(XXa^iTDF z>po+&F~OK)oND~YxXHN7c-DB)c*A(t_>1wWahzkWW3^+G<3h)kj=hd29WOfGb^OWk zcSjr|iN~%BUqj$)X(!e;e5HkNqWoCJ)3B>a$C{Uc7)Qe+3rqmW#M(ComTd6^ewk!H zUfX*Tzt;2=R>7xnPIy)n;T@^t#V^s4oq^|YAM2K}FGIGO2O;nAzY&v;q_?0?NFz%| z?z=I&)F(5m7n9F3X&*p7k@OMdJLAY-8%-tuX5=T3t3xDj$^0DBmHQ23Tn71c21w?Z z8ty=Jv*(O7^6VK!dG9JBU6#<8hvOLT7yI8)#>=RzH|1^swdp^qSQ!+2tGMa0gltDh@SRNip`aITq z+5bz{uj5*-Vu>q_1ZCYhy{D$EE#_d*CvTWJvfKEwXkvS;gPV%zgcma_l9xb_EFKE#%vGrKsC ze6HcVSvjQtobx`yZGVQ_`x5*3m>tb|uVl-99v8zyxgO9^ekWUsxwL++{XAwjakRJPQrCe+)KA}4}8FuPg$PB z^}fe>f0Rabb#h$=Jf`<@X`8sT^VlB8b9)*`IEyW(aXA^>>I=D+FFCfWIPb$8?Iy1G z&+H$~qgqJ}bfj7MnkWH#65qkq8i@y4nVKPN~(({>?1Yof5$-&qkbLl6;FU% zg|$`3{x=VD3u4i6W|#zd7GlxGcI-HDFBE4NU0jZc@YDwq_iS;!sfiy$>Nt-a4|z4B z!>$%_>Ee1sq>CF63+}rj3LS5E&Vt;FFFtkb5Kn^KC+0%_1mAG$;%0F&6Ml;=ik|i`(#D8_=Eplws(sakoTY+I?iOPAn(Ix|uykKpZNJS!1rLOzDCCUx;R_QbmQ8CtK4pX2Rd+zCe? z=s5FihukmDfqWA0?dmxHoDcc5xDfIgaWUkxcoSF0xo8*UFY!!C$G7EIK>iASqvMT+ zs~}&*E?*Zfp>K5YYxIhauT5`+{0(|S$G4_GfqWIM*Tn&}TNek>VqLt3w&Gd@t;F4C zv`-grpk=!F9onSh>i1#D-=iJ6cndAi#oLHo7w;fyUEu8n$afK`E)F3^UA%|rbn!>T zrHl6wk&drLe+~I3M4^j6qkbJ-c6c6Ea>K4LM8;KqhEoAQQE5kV#rLWU@8^GDVvRnX2VM4%Z4GM`)8E z{aP_(npOgtu1$d)sZE8<(8?h*wc{a2X(vFA)@DFvX%&zGtqRiAY9PmGvmnQ6b&%t< zlOV@yb0M>}`H(r<$&eGYddQ%*7;>U^3S_R<2$`py3Yo8+23eprK^AIZ$Vu7?$RaHQ zS*)#s3~8;9CE8lZ$yz()6fFu_s;z^Zs&zw_X}yr;+L@5YX&WGq*ET^;)3!h^(E1=x z)wV&d)3!sNp`8QSr=1JgubmHhzIGwxo!Z5aztVO>zNqceju)30Gq4g|YE(e}$f$z6 z+^B)vZOnqa(x`*H+BgZ{@GKQ;@E*}+I3hm59ilh%9%Ga7fa7=H;kl^z-C==w`ZeVH z!qHFfdCNcSW<`SYT)wNWOh`U=+z1QZ_oGcOW()qlb!6c=i?mTnf1f+#SN`N@{eA9u zpEkzWjSl`fo%l5}{E?rb%-=e4apzM0Q53bfYq=f@=`%9vS5e}yVvofdIZl+~Ud2@W zE5iy~j`jUG>{^epBZn7CxPEYf1RcMoy&NWifrmF!XJ`i znS^9gB9jW46oDicnS^9gqKwD^E+mr@nG_*E8D&x;lcLG86q$r%QX-S0DKdjhDr8br zDvdHJnkuu)BqWmxnG}^tP9`ClRLG>LTyioA$)rLiwK6F}JE?s#3CW~FCPkH!lSxP> z6*8%nNl}$_kx57<6*4KRmYhsNGAXK&Mwx_UGFc|IGAXK+E;0$pq*f(0#T@R`5G55d zDXw5tTf<37aS3rnQ#h$8lS#QuDme*Nb5dKwNeM=WMr<-C6{VaMPvxYjOd4epDxShc zhh#F9lj3qtYAYqGlBkB0(Bx9eP&}2BqB2e@%4Jf)NvKLD7-NdML?&gNR8(?OTO*Aa zYH}&&q_~8W&=iSEB{x+fnN*ZXW4ScSBqWmxnG|8Bpv(%H6je%3nG{t?B$JR#imIhi zCLx&=)vz(7lHzhI6F+vtMNj6WXbLCARWiY}gG)#zB`U!rgt53pa#JKK<)lI;MP-bN zFc;xjJ(ZKQ{u@!d(^J zvm@&_hnnnu#iiftSTe-%`wN^r#P0_RoC3$XnvUM~NLP4yTco)dXkBl(M}dm2uJDEh z(P$fpg^_T}{EoH_^_}4k_LI4KqFq4v)uL#}s>_AJ`a z8L4mG7&)ONBo^0o^dOmBSyer`q^vp<06~<&iw6&wBdwNS#Q}JXG8>Zq?fkCQ{(5TgRMcXlQ(j+|=MWx~Un;4o> zDk@7Vs>;f1YRYS?N~^0&t7?iX%StAfSB6TaOqp6;9;zuXEvc!kEHAFciZQjOWJ+mS zX*pJgs@jr@$|<3#qPDf8rM9)JyQgY(xGTJ(C(^Yj8Vj*Z3<(e43|q5`qqE_~9j(+3 zIoW6qifMDBExm1#>0;V~uGTZcJ(0Th&bCN~P1b-nJ9N?a`t3xf{YA?cuJW z#;P@I(SVh$k(RoaNOVlXm|I!Q6>w9`Zl1KM~v>zF86*p~2z{fCEAMI5m>Nj-vMA{4M=8O7;V)4AXs`=G5 zO>-*h7d4T#V1C`aMdFNbTW_SPiL;*+?&t`&gk@2Y&K0YrTHo5S8fzz;7p)G5JES_h zwJW^J0w-Y!TWf&@tHZ0hJ5}azZ&$c`bx&7VEQogYw&4K4w1{-C2zN$Ws*y`nbgyV_ zJ;K%$K86to9oCa0JUfRL)w60MFsI*uD?BB#T(ozuh<3HLF6UC}aqxv#usS!~(GqTzx*S+GTf@a*VJ{AU)~w^x z8iT56TU%rW9q`?SvmzalF6B3?Exan))`}xYmKN=_)LCd4dK3$1%v9Ce)rI2;k%U)8 zS{AMD!Wp8jMNFIC*3{IBMZY!N7Bg0~v{qeEs?(avalbY*NoVWV0%s!(nVGE^*&cD1f*?Vxo5s|8jyxsYI4WB00P`*MWbv8o#V z+ePgUx6KWAtsV4QzM&`5U4{O_xw1uIE_Mx~Q;;LF7=^d4>Hvuex~eVG6YZFbBHP1l zZ5wLj{Nk$Wk<}_;L01%`-wjyTE!XHJH2>8(3PxJ}ZOA%lStgoUmA$K5(di4qUE%f! z&J**HOkdm7R2g2e7J<~ZM%qBnXOPu~CsC{8 zj^=ARdb+U1!A{^PuC{f3q@_ll9A!7o!r7ssqoty=6K6z$^G2krGTIB3_7qB$M| zh^WVDG9qY=XvIQ??bX7_$_S1aX&eN-I4{@pLLlUNKzU|km7-0Gb;R=0pibxF6r6(P zZh&0taCTlleRk*?_4NGvX_F+HvAkwP3n zovm$=uKGyV8EAHQ;o^?&@XCn5iFSEw%R-#?BSM8QK^2yZo`}?Ex2{@UkJTi)DrVv- zZuhKd@9fzi4P9KCZQm;Ds$07|qutcWLPbQg7bnpcSkOm=Xg8-UOQKl$5iU0=HfibT z5S{h|iLzF7t->+i(ZlR29C5Z|NnmBRjw|wAKsymGbY2unQwPbp;q|;{q;BqB5a~jI z5rLJyD@+#N+;wAIc#RNz;83)3vEW|=J?4=qx)I7z$J5}EYqi>%KvmJM$lxxw%m!JN z%a07At1{fJ>c`|pixfIBjCI-qmAzO`V*qO(1M3_=I39&krO~GeA%~rItV*lv9y0o3 zwS6woffbt=0;^j))^L1JQPa|j3y(_LtkIa$)kXv-p5msaZdQ3k#;Lp;%R<|Rx!Baw znYf|{-MPG%@?*7Vp*?NPV$EMZ8=^EDwYcL9oFG@WQcZM74rYpJi@U?CZ1#DPUW{&A z?EF55cD+M9>bfg8UQ)ZAE(&+yxTvKQ(3#P$ zwSxrCml!DQGQw?x#<}4Q%OljRK@&{blD%^nNrl+{Dbd`eMO52bih!WSX2`D1l{EmoB!I1|wo%28xp$4Xpx@P$^m z?I^GM$ckRY8I?!io$!1Xw!u`J_?(q>oQ)fmzC&S+OpeI(qqV)X)C zo!Ok^0mpr@Fwz!Y&zg<5s>U9vrFTWoV67H`ohY`$t5(~nsyX#kETZhNS=D+iV;L-m zCW<_y|4)100oK&AExgkpp;tu&iHHh{5UPj*f}o-_DR#v`0)!S!5wJi&#V+=8Y~Zo? z-V5rn_l_NVSL_YVzh?H{NkBd4p7)*m?)~5AR(59Av^8tWDpNMpI!`A)<_Fkx@qOeN zWfE|8WCziPh0AH%h!&vgwTW5GtQB{4MFV;-ZKEMtTc8De%wSu@Bo{brFcy@B8QV#uzhISEb1bcW@|!qlhg_T zn$t5p$%m1!1EU*T&nO6HL_j^H3{jwXDdm9lluJa8RLVz6cJb0Eajqr_m-)fY_uIW`<`&KcXOL5L3=ftV7@$bQR_c(;_6;-Caojg4KX@bW+N)lo@HH zCtQwIe;hM9vqPFBgM^1bW>7;6*J`TR3(BNaA&C;E%IN&kL7-De2x(F}ju3+E5ZDA6 zCrwf0g67u|x>FLUW`slzlD04t?r#SVB3GmsxUB@3k(l!98g=5u$!Va>3o{9r&ZV+^ zN+iSyYZ+re(WW>qJqplN17avB>L9yh;uP`1ED7lf&dekd0VO)}_ZA2@5rhI)gLr6C zlPTiUBuETE(3vy@pdxxgy~N)QXPv7MSUF-J%g zAP9wl2m)Xj0Hm4@JkHmne9RtLyJa8R%u|DaBfqs2>-KyD@7al$OHjvybl zL!g>~QI<4A&>kQHsKC)FTBU*xf%%T;0xB-f7G!%#GVU_ii_GJp;t-iqlAcXa6D6Sp zjT9sen5r>XCPX@JN=2w`HpW?jxt6lJg4z|M%tj*=^#~kD%GH^5!MbKg-7s1f3dTk% zx_5%WL7A;^p3%q@C4`|$X;HCYv`KjU5@f50!>SS;fM$y<5H>+nNs{L2GzQTw6xehiEIa6^MnpTZr+*K|Qpk7UU{L76 zLR=RPGpUC!;2{LLi$}~>-;-xs9#)rEOgJ3L!2ga(_L!ya?Cz^`Leuz3gL-F$=9%2f{iDj9$D_{*x?plGcgrmW-0P zCF36uKw=a!7A>l)}P6aAr=L5MzZxD1>1VBQ;wJ z>>EI2FDB*U@a)hYQkh5-kJgWn+Aovl(572D8#)*<5M9%*CY)Zr`q!4S+~Q*0=uRt# zVTx>Bh!=yvC8s$8X0~!&qp_UUW2hiJ$ksAC@&f3#NGFz~E=xMVoTjM;)jzZg;J5-%zgld)PB7g&AX)@u z3g#$~$Ury+0}NP6y%Q5*xn9!?bb1R|@xi!3<_TwTz44_Bi&093yX2U7s$vU-lXQ$2F2xwlR;6I19Jxp0`v>qGXWntfwrYk z3CSvDg6WhJH>upyfr>DJfHo$~(hb4$p)Np!eO)x6eRSj1+FYO;K(2fy=j*}{C2}Pq z1q??~N01A#8?idFwjf$#VO0ykLl;DRNiwV<>l$LH6foXFp4Y|)th1!qpl3^xzYD6< z9khwUbA(}N{|2%q(uhC?bzm`RpdbPwb-?s0`cHy&6jq&t+8JI4NGh#50BWY9#e6rd z%@a>q(ZHs#?x5+VI&(E{?hqO5Q^^#AQ4zW~R86SSdpihogvnr43lZmo`8h@^2N@S$ zxZ5JROf!lxtHtnGVJ_)OM4XC@OPWpPl+>cZgJjK`S&8JR^o*4Ni)vVrM7fc?u`Yv^ z6DfE_42d*xs9n%x@m+Kjsslv0YlgTa8B{ac2&@ySHqXV?L?%+57|B|!P>wM3BHjZ6 zcQ%-3@HBy`0cvP6IWgm4-5_KvqIcMkZ6u}0r6UN!%K6V?bq6gLw`-gjDRL-rtQdH| zoKn+a4T+?FC?Jp|RKNsJ8_~%{1~N1bt*WC=j`M>}Tx6F(rW9(uR<7CJfytt)Yy42H zAsGqqQ?$`TYXi{eIX{Ef(sRg6bW$g4j0q%RmC&uprb81lvYOy_loOi%juvT@WOc~B zNI2n-CL+jyijja++E|JicNOOYCrJeJYaJNKRmnmH7>!A>5m67k(Mjph4!97oH+Pqa z6*PC(8E_h*2pY@{3W7))GhlQ|3i5*;gj|OX&K6N1utXvLNcp5>yi9QlBt}+yLYk9^ z^dAX~Ra`zL>mv+d)dE<+AkgR{fIOB7X9!74%oA` zbRZ#ew6H^&WUvZJVB82PUg#krrGvy#;ylgVf@B12WW)|Ik0QG;g5gmv$x2dUSG+h= znMyh%By!TxS)3#j=h7xspgn;$<)A$lv;_pOL=YGwm;-fuq*H=6zG$XFm@bJ7_@m?z zio3g!!aNNnr5D7>Van85-RTG{9&GU#S6b=-W3(J}1&x=|_BH-wN;*N)AC_rBQo&PU zHmrTXG6VQ1<(OOUf>{>x_kf~VXCihj+vJ_4qF30<2;MyWrf=>_`@o@ex5AN~^ zBfx45r~O3W2U`lb#Bkm(3Vxya;4EMce3e!Vzha1|AR^%eVIG`4RDwGPzdOM9QiPBa z_$$sK9OBguAtK}8yr3LXpnTlm)(%vH6jIBeWaM^(vx{Bg%Yt1E<~TnO_7ICD7! zPO|$GJ>mS&FgRqJ0_PVI1`0SiN!BC=ekB-V!WiKXMpFodYcLyT0=8sK5^o{kfH0F0 zgf)Vrx}ch8V~XTK?#WaQwJ}jCN-}q1WV;0K?$;LtEi@H~bdkK&HO6g{quko~I8{EmRY@dMLGOJ^BGJWXjZo82cDp zHXly5g5M7LcQd#=K7j))2@apIP+er}GkH9YwfR5>2NIiE5?t(IvGf5YYjY)o!{aj? zR7X(=WW%-9=c33g-8YWLg88BFSfSf4*DavBS`y&VSbI(oyu8BtZd0B?1@aMD1=#z(qe?G7id$1@*$eh-@q_6bfMotdDbKae4Z5 z6Pf69xb|?N1V+l91w`fXc&Oh1=1jIe!=43wfW>0N9ZD={5iXAlK=VAH7tcuFfTMYM zKqN%AMg+$IXsUt;97x%KYoX6E<%OB?5CXXK@W?*I!<9kR<^r~4FrY=^$uiY9;Bw7X zi&=(T^E~Jp7W#(R&jY_|F$VFV%B0&+U(b{kX2xpJfNR6$6J&qH9e4r{+7wzC{+sBt zEL3G?=Bn|ysy6z17OF|Q5X!BGFo5g7P^?BUP?%g?GY;+xJPr&9Go2p6)zfG300JFa zAF6D~GecBBgn&0|<($Bcp74i776X+8^@4ABeMgM%o9ItI|*7LgFw9boh?q9l)w z&C+cc>ds;LyK9cPQvUmo`P^`KTFS&KoL>Lvu9aSGXt3e zZdD*AU>b6TwzAfGTyJKehgw_TT=UE@DI%j0>a_lv7iC?Ei z+3yCPn6gONj@b5De97)q)$#jpk_AW09D;`@ENJ-B>4Z!DLsu;CE)Mqcx942hbFQV| zaXtwJH_NG%(o%|<6&*(f2KgI?$$EL$JF z(4kv4pAR)-sOGydR3rYxs^LbnXRW0}quRRi>0SP=d};|c0DUVS{<-oyfHDLEML;&W zr_hy8Zb1UUB_8aX*#SwdTMK=XeSAIIczKHjer>E7@l3P03`q{;1o}JZd|>*4x!j(^ z)Z@Splc~pL=~)b8>Y0EK{>(*e7-$oidOYyMCx3DKGxb;qs$%PztInX;1@x*!uj}YF z9)*^n*EIB+gkH1IYZ(gNgNu^^op3yBG4F!uv*2Q*m_1LMrZ0K^q2 z0C0a2e>~%W6C#^|?7#vh4FU+0!A0zZ0hux(5oX^oesOtpE+~5xhlk?unEF5;^E~rB z4iLdS52|aP2Smct52P?N&okp{{T%Fv)J!`-7~-SUC=%2YI1o5s9>iF2%(#%Fc^)nW z<~(4^z;J+ffykobA(pN(gFiz8W_;{|FoZJ)_!{I3voPe(LNAJj4a~S^d^V)R{DC9_ z)Q@Wl{EpAYzh+!3K8MDfB8?fBsRfd~2r}X_fhOdXOFKZ;L6X-dR3x+m63R9KQ(%z2 z2c!bZjU@ylf#(I^SY45TPPmC75?hS3E1z$iiZpkE{+F@W8G;7Sr$ z1>B$XgCL8<0GLWZQUmU^3khuSgX>X&>rp}1qXK0Jf+B?&Dgq@0vfy9n70?%e?Hd9< zTsx9z933~JF4qoMoTGKZup(t?u0EF>{V=1$aOc8scP5zdXTo-d!45AN-_Fo=CjgAg zamHiSnH;N-1V#^}gBqjvBK%&3-xUzuj*G5gL{B5c|KgeTdcZkGI31ud*Wi^|IRoM$ zjzkcV4EVNVR9L)bKea2(69##^`MP;RCMH&zK(xCaHcFwx305c-UlYQ|v8@?|A+@lF zHoLOpWlAy3bpVA`2iO9P7sDwiVAz0SVMsBra}o{i2_ZP*>{bczkrxiC3(h569uG@i zSvq;6ir^aCG6-wU8WJB)8NhBFazhYYzCpO{U(Wwws2d+FCwy!pl=HzD2nR~UBDmhR zs2O}#f=_K5kn(}qPFRDg&j*tzA57!I9ORMXjRa&2rCiLHWb?Iq0$ll> zA-N3Il8=_JlsSBQk3QeIb9`iki!06zHcCJVSqKfh*voS@7`~+B!<)fn;a(`okpVHAyXEVc}MbmC@__J8rD$&~<;F1=?$PZ)(PcJtgxTC@g zuHFD@BZ#1-kB^s+*vmr*C#=1^y@bAADL$gsqSkGElSO{5y~S|QRqP{7hU3tvZOt^z zvwsaA^)0wYk3ks2W*8|fTY%vMP;8v0P~^z{-Q80qiZo@CTe39ET_jb&YLdH*JQ+mb zeiIrNlF*4DQW-=NYjooezgRa$q$G`bsi`=>OxrFaKN_Fb3d(-j08XCc_w;tC2&ow#)gz<@GP;=ig)PX-Z-XGT8kKu_bN zjbP~b70j#DiAXsg_D1uwr7+fE0~+47iDqoHPl1ot2SJD7OH=syFbnfxj=}p;++g7G z;1dyeZ!j8&aC;nj1_J!lv6p+$xSR}saOM{uJcpGlJc-NE8Wwh;a~opWKiXrOd|wzj z57K4A@JG#0P8tLe6C8^E@6Veu9iVWF6+xu`FB)qRCZRf$6JG>}yl^{6=zAf6LH=x8 zBQymZ0Z&$B=EIyz7(l&V?%dlBjsj+gWr4;9e11D2bp(%}0$U=oK}ZR3qzHrxtu0|V z@>AeQDAIN5I5f@RG^rdmd!SaNL1>**lVA|qIT+xm0NKV7mkT8~Zq*>jr#aSO_MjcNp`tUspbcP?a1OcJ)B-GGuTnk zXY_WS*&l&j-v*nu>-eIH{fOTu%$jjwa_5>a2f}hI?RU2AZ==fClXA5px>C5I-G}(} zWxvba4&P~Nx1(fyEPwXI*Y&*m#I`7l^fk_!=^1^c^Kh>vGi{wJH;0G3I^kOoe{5Ql zMc0I1UT(|2ue>o#eNwTbi@)szG@b@7&%aMFB4f~y%YnZ~HSl*6g^&*#hL-Tx9R7O3 z&1yYwk#PD=G8x*3Y+0dkE#97#2F5)P**f6OQdVq_Qz#GjM0a$^Ck0wc?hdCv+<)53 z-QkRp7|z$agN)?u>-qDDZaJbPBCa#sE#ga1MK1h66^W|V-Q0I#+aXU=GUg|jE(O%- zXCHF&XZXv1nfh-&1X9~Mdiq=*mC(S@ z$k@d6=ehh<_|H@RuY>@DF)+4f+8dgfS=4L5YQ#0NvNJWe(YI_^U(c4qhHqvNgbpHw z$p1|T@DDp{sxPb6U;cKc2%|z0t%nqL28mXPDet6)P)clt=5Nk zAxk&nckY)9KB?7T558HDuUdB+V!s%L{8{HmwPE(JP!|#}_CoExK7X^fErU3%W_^2s z<3E41piLEuPdqyuaLMMd`oQ6UBBDYKCEof9@zrl`1q^6@TCGx({+Gx<;I!I=z<$8u z*4Jt^q*uRC7uEm;-3vz~sw>oXbX$#rAbg|Yr4MTLTD2PN+3Gj7+7^+`0n-k>Zoxlf z0;cHzpxVz~er^9>`T`0Aa2)(bo7Mad1I6ZlTr*{wfU90Tp5Zeo?vWK(t}MT)!yr zivqtW@QVV!DDaB{zbNpF0>3EmivqtW@QVV!DDbBga3DjG#pYjr!1DEzxIcq~jpr$B zi33v_dK@%1AWi(B3Jr{mqc&CHn3NCH_ygc9B)x!b5Hg-lX!nQQ#K^eo^3`rvS2B79zVhwPu3sroWzF6!=AfUlgcIfxk8T1l5WS z@+AS^nfzDjc!XLJ%c1EBMG~9eW!bS6~26aH$1^pmWFH z=QIt+5x^N{@}D=61TKQ;&1}qI;4{owniJP@fX6^yQeqI~hfZnBVH=JD&O+xf=)Wq_@VshJd}{T82l(6pXdT<2Ekt(q(-rGAQd`2 z-kB;LE{=oP=oC30pA4757i5(Xi%&%0vQxnaAGpCeIzy^>h!p|f%|&@23L@OlIcf=2 zeiry;5L@?jI3K7i#n{6IArOkNb%yieu{b9;`0lR({zGT75!FyzWCDJC>P$H*BVI!- ze;il$oVlB(4sJSU;Ym87lj%JGpCtJ047JRHoNJ$#N2UKya!Y`k{8M@TsFiACiTY*) zQ4jhhNhP>%6R4CAqeY1O848btRzR&R#ney1ZHi*Ub&U9}+td5Pm*yFoejSQiOxr`W zzu(-)31!=`(v8+oEX8|s&- zQ_H`Pj~n#SO!$W;C^yJE0`P%5!vTV5lLItF<06$vgAxh&3Nac7|0*5bAa*d$9rb!T z7u3JWF@S152+9*d$ppMn-J+?OsDC0X=(z>?&>aoL|EM?8b!-o_G=rLL;A=L}9~3&& z`%xcR1K7GjoG=(g1bqA2{k!yaTaa!)0o>x?gWJys@J6jDgm1fg;CA%}zmV{ScM8N1 z0UZ6c0Z1~q{J`xEX?$=D^owq0@BkQk{9wLEU-pJOk04GKj9qdz_&FY^KmB_CaSBuu z1bo7sxDfD<=lm|CbDYf;j<38j_)x71qn>_fmZ$wXCS+Vh3L9w1pP|WUK#)5O&OiSPz ztRdwFfyYxGGb#{GSwm2^6tWB>K&imPP{7k;C9w4@nF(fX{KkHhK7{ zn}?ae1OfFe^<%{%xRFuh(MVv2AO@B{KJMt@ENF(pS(Xl(6LoMLQY7Zb!KQq4RxzeS zFyB)EpO)Xk0V*iv42PTAG zlV_(}madAk7;m27`ubDwyC$q8wPW+QgU+h%`?`x8n%|V9KB;Vxk~6%zeeubV(Mml| zbFb~m5@+vC<4oR`GM$DVIv6xB_sC+uF#jg3VfjyOQ|?&5GN1Qt_oW+U$J6%JJXp7L zrNzBfD^6}}eE3-Ewn1~exrYxo^f>Hy-D>aqZB;UZvoV>e(_0K=MYUVAu)tNgTj@7TUx%Eo70ZsF+&0be<+F4# z+w)-Sn3@`5e^(;0eQMPPdtZGfjhi_h zv6>X};?&S{9d6Lvke)t-YgR){ET zmF=DOr*9OQezy2fu}u(FL$d2gWM&T#Qu{gq6ywbGGPy4Cj3Diu$cvJ8sTec1+2f zP8REciWP*Hbt(%h>3~j>!a>s9++4RT&CRpuJZVk_d|OuTo-E6B2b^Hwz_5W4g9c0@ zdbJX?ZYA(@gK&Y6t~Z0hP7uTiy3u|Cvn1><3xF$H<$qCxLSTgGWyxTu*-TL9YR@06 zVkUzq5bwx8XuYgmc&xSm?tRnr{KH-iJG}bb z^$rf^i6!U8tSv9)^M>e+Y25VQzAeWNjX6+%x~hVE_Ezh_yY|~y_B*F!eO-R-;>ztg zD;+=jeh@q@9kA49=J}r6dfwePdsNS%)enoOJbZO~WWx+$Y`4Tofy18IdhPWvr^?g?1AGU+I9T7eF+v)hT3P5-oZb12 znSX1>ku=7X8k5N}75y8Pr3r1TxOo@WH_>N#DlPVPXxvKg9XK$B$DeG2u&uPL(GO?>2?-F zU^Ydg|1Gn*r$B&)B+Jr8JAz}SaI&%kx`G(r2qWePE8$ca99zxT@Ezbjtp$Fb=o9U2 z5a02|UJn8C{>S-ZG1F0(dYC0KO@Spb4VY-mt*rhmGqZDBU75Y2*eud}$LlRU8!rfH z*dpU`@0b=ExTDHXv?^QVleeTS*|gR9_ESIJy{T_}v2Xt3aF>V1d&(?x z_e=|T`Q>iQ-ewMw-JKT>mQ`8!Zw>EX`TTi@$-}P<*)XJ};g!JkTI1F8;MTxzp655R0@iO>JH@Zy+&q=*yQuDy8~Zdp&?Z|{7`J1t>FNeeMjU^; zgHWNL3kh8x zwkbD#+$4OL&9=~?VfXeOkPWVqJ#@OYx8v-CFZbK^xHf#kv&eA4(v=f$J?pbzZOx5! zDR=hGEE@9s((|ql!(EnIIxkr|ELHVjY*Jq02KNz{d(7>-H`m$u)$^khGiH`+ldOS+7v}UkD_9Jw7;18Km15E-eCfleHGV&-vmFz$SW68+gl#Q|} z5twS`evW_zET9&fleO|^dQ9rD-HH=+`^nP79%q}3@fP$(DID0qi3HJQk!4*=!YM8U z-0FKahj|=)4+DMh4s#+Hw=im9uxglHqQEQB(-Skh{xov~W)~}n5k%2`V0IyY#_Zga zX-@Yi`6~oP3lQ>rcF{~h(KJEPWDSwrSc0PAf*`s$CZnF$pB0Cgw@8{Sch7;FLf~T3 z#Q`AS8q;~c{o=C_ll%nq3`>|DOlq`jYwmBja?N^lx3Hdmo&%fP7OsEW{Nqhmf4*eahF)XR zvZYJ6Dh{;g=q+Kia1JaEvW!eItk@X&?sjRRoz!|**wR7w+qV$^exP4$Qpo}PWZ#)3 zx30eV__|*CZ_RI?Ts-s4i+;($cl+qi9TljTt9Mp!z0$#Ik5IU|`ud@U>^--F51Tl@ zxG8pjHuHUX-x-y}rSguud%c;tnAf$l*=&`=8N%h@`Z_;OxBaQPF!}AKIqG`6N~!oD<3_l$H4AUox>_Zj?Nj> z$3WFN<7@tceY>-=(vQZ)VB)LCz<@=kCTgK1# zpJSYKL%-g^1k!(`fhRQT*3iH+Y9+N2jby zb#S=Lo&B75a{4F#C!O;KE^K?e)V9T$G;Y66RhL=@jj;U^+HUT|durb`C*-Z$d%r#F zFx}g^q<4)|Z_B&CW$lP4U^<>)^e;+}uK%>bzLyb)ZEm%_u({rVmrLesN_o`bUhzQJ z_^ZCZ5ACxx^zyq0->!e$w*P&#LEy4cf!k!3-4_`qj}_(wO1Ixlv|PT`ttN8m+nBkH zzD#W$v~*wanR>VF@>u6G;uWp`^UqdVKjul&kg6S@4$`uaylT-duX#-(Z_ zcew3W^=Rk5r~LY#8R;>q@61aj`mG0-56Ly_cjVd*pMv84-qq#B^<4zT^_yxMm&Iau z6xX)~n7O8hAahK8rl7dqH@Io-dvi=NqnDl`-3!gYB2&!h3~d_*eF(rW@K;@38u;PReO?vBlFFVX}t9Z`+CdGMRc}0e4cpDK?g#0#9@; z5tul9S_|5^d3t;I7O+)J#@n)@%0)#N1x4rnEn@NCRBW3GoRAc4XlW1MCWP>mcqp6??ipR3F(@NX%@Imxea4~jP4xhSutE|{O5A=fO zpcj~Gtx=4vjhox*FKkiL5p385W2^4KLJGpre+wa~nz1bHe~2+EL>U!X_^L`gmKB z>&2SWdhDaCuWZb1YIAB`(=yep!@IW>r%Ey}e+Y`$o|HY5g<&%xnozBEGvlJfc#NF5^r10B-2Fg~h zkGJiOW1W~%;g~Vw@m$qD|B_isiS@aJjt@2}KKJQ%`ug4J8Eyfy&oXxx@FL4Z_hiO%T?pY-tXPdt)O1=m~qYT@Mdp{pTm2& z+w*<&b94P26811JvrCuejl8a$pFO5W={2{P{!cC9#C8n#MLqi#4{tusB{ItC%86Z8 zrJD}F$!osD$j7R&b@xW`@B11HUccjKY*Z@)!-8@|{O|!|4?2AqJoR8JTG0rHSuspU zt=RawO`wst6Gv!#iE*vTktRp;Ha)AQ9V}RC-H+&>)NlCP`{%?<8^-xGcq|hnlG;H} zL3crXS!`KMNz~7HZXF{S`CX=_o&xPu10EQ<@CH>u;OyaoRfJ4h#0C{%fS^B^+$p;t zs0cBCSr)A&{A;DvHI3Cnm1~L&Wkv!6x?C0)ThHxH5ge2%eN~-F4-4_e^F$}+jO-iR z&-dtwp61sLjS9x}JNu~HJEEhW`2*s(@@xvzAz(&u#Q2*c zR@FHDp&{>_BKQrjbzHeSTUOX_ifo@c$lWQs`|u`vCMQ?ixp>0R12QBY!o0m)Y4cndg_T@+4nMi2U|aO+n)cv>$6#R z6Nt&T=Up9mv+(WOJyRW?U-EH}kFLCSkjMUfV|7XM&w@3gRdLNHSulAH2NDh{SDI!H zUuk49LC~w|{os)=2Xa(TXHGxq;=IvC=os5TwBduzpbi%{wPN}YVoe@mC=*m&8)CR+ zIPY`Vp)p%i9(S7?n>Hivuyn}M(#rN98lD}!{E~p>(sg(P=IH5F&v&0pnyrj@T|B?a zbmZ^OtCjc4#+)1X$3XQU=1?Psyt(hmv@`2goibfxk~S&jRR2!f-Y8aG9NJI*eCvS$ z=PR0h+P>JyUfQaf|J3-~@t)&PkC^=X^Em&SwoL@9q`xnUYq+kF-O!t>ca199vQso| zf7q6RgR7f2NSy+99sPm8Dtl>JC1HK=Va9ysobcJ$mS$b2*ZlX`(n!7uW-~8=ho7gX zrw{N=F9GTGLf-!{SN|&pcklL+h=-eGjSce`9>46AzuV+u@%gVW=IZO8Tb>!EJaWvZ z$9qO$W|yivySE3{AK<0#8+|zC!}Pd;z3&us>HTe+Z|ca7O^h~AusogXSz%`LXuz=a z*x{jDmrU%Kp>Or(;GlOUG1vEn9vRrTn@8(11HbGE&o7%+Hj5kDM#voe$BM5q$y)oB ztKR$W@o6TyI;-st+aX@7RecJ^o7v5a{kG*%Qq$|{rldv~le=_i>KI_?U02oQWPse4KaR-89PSK-JOGg3a-z*FSR-W@V+d{jKBf=Zn@1 zc4@up_|xHG4?AWb^SoG5BIq0KdM9ba$?bP0jJ`Kx6{E|}Jp-55?~^*<=Eo_M8`%eZ z<)4-h3;wO6^5h?h-Zw19T>840KdhkU%KWffTV(Fnh9#WP}LCiZ|HnPi0`PKVBTNqqUmKq)P6^-jtwq$tYeu)Cb zYgzdDm!E|Es0*>&YaC)(qLYH8A~-+iIG@-2eu6MPQ+^ z`G6&jgTp}H)mYbDK;!wV$M^C?ffG)zKid>A1{5huy0b@*??)2`dmKso6R4B z?j#qF7QkXw87yXLR+|2%jSnqm30et!Tfxn(Xfdld%`|~|qt)>)v>%vv;GZ$?AK3S5 z=dGwSePX6NFJV|si`BPX9a0${PJM3AmvyaKE`8G1YD-{LCsE#dy{R(;JiIoyxx9a% zZ_rgy=Fl_BHd#AOJ?`x<{gQdMe435pi^nOc{&A5vX6@M0D6i7jZSL~o?gVQcXU~{N zlBylN7ej8POZT`O&#nyWtYloVxtUdL^e(GO{Jp$5rBjdXHx|5^7;xxK+AZ<>Mcr3? zn7+k1q4^o7-R;ZvHrQfeVcsvGc~$!veycuwav5`ASN(PIBSSXU7|kEoV9dj6!}Oy4 zMGZn4#45-7?zcZ6l)JfR49O01<>gsDp1fgspIhO-D~xtMo2)t)@SsazO55n2C7(TQ zugrK``hGIw{i#EWukRydQnQsx!9nkJgDYdc8T7o-zTM&Yta-_b&aUgDIQjrxQ#CiZSHIm39tBIoO=4V;~J_;vj)`%B~ajPx+` zPRn0yU328onEui8&Yg)Ew7Ew-Z@q*OS}?R6zGeB%VCS>olmN-sxk-gr za+2dBC%h=mTFf!qH&8F#Y?FP0SI>>*IVrEpiZq^B zX=%b@+On*PBdNhQ2j=*-$+W4L5+3%xJk4SGp)xRW7pWE%{D=9q&H^*s{m$eNkDjgw z5;)qJf}jsJ6qqptuwlffw*~;qe;6Q82>i7+8#cqkRnS6UKxKf|L|`ui?AXy8PC3jw zlcCSP>_wrzI%%0`2aCq=h%7+NG6Mk@rDy4v^UG;BqohoCVgYx}=c^uG zZTd9pS-qOmx*Za1YV2Yr z;afgw^N}76KHqBDZA_;kMwGpw&%3c6hr6BnqleH`zo}|Wr{v&;Js8~4p35hF8rO8IxN$4Rt(0wF=9>>0w6k}!&x2a2wlpoARhAX{c-)$Hk>=fxST+%K z%f4Jx<^L>GJ-oocD9G~a{%`xcESPrWL8{fnVO_>>kA;+<8Zd8ry49|#SMz($*l)S( zO2akDJD*i&8+W%@@^Prmv3zUMq0Vc|O|3>KU2^S`ROX8ox4#lIA+me(j=2w4upS?c znqt~EL15e^`IGrapJ)1GE#KK~vi-W$YihkM^P_L&c?siR$?W^@JKWATd>`+qUf{B0 zlE(&iX9}*>TpGB4tn!LaN6CT9&T~fJZ8cc`a+zD=zSUK(>NWn`2QMghK6ut;VuQel z*mHeWB(P4Igt3Y(CyrQrsx-A#SaA6?Cl2d~BCp*6%cyJ2BcF(6xT0ys@@G7bSa!W*u3E=Zdv|_n~Jt+?ai)EjV-@lv6XFqzfbAy zlJy=J1GZcDQ_CuO&mvu{BOh~o%|m9=Vl~#7C+x< zeJc6wBR<=4`nQkRa@DTsp=+km5nUO6%Cg4VSyvJihv#Yej?c^N_ZKYW^34Qze$^GWM0hEeWU6DE?6k0hAwxA(^HorQgCD2(LC#Z zJR|?sp}VS6J6})-ppXkVOIaV919ws+n*{%a_VXWcv#pr*)mg{-{-Hor1dzc zcn#WrGXW3tZ?Ua50m;&Q&uu#0F5LB?Wpxbaowv<)pchN4OuW+%};bA7Q zuUpEka4fKsg#xqo(C-o2KCr_sc5R;+y8U*`n)JP$L)Tox*vq|%q0fEJvL<4eq`ErX z!h|{vNXH-Bj29hTeEDOWODKV5BJEj~c{rA z^M1L|WqIlhz@OrHeOq0HZuGpugzt4(>P$qB{tU=4&n?IU8e~m;v3q6S1pBt$g~8jQ z(E4(^JlKfMB%kd2(ZR0d^w}sU=Vsk>!q2DdTr8jS%0oS|tf@E`&&IvDBUQ)yCQ@0{ zpYyU_PfTO*gC6T({zl6hte=B|N>`Au-IiTkF~Q&Ql`(q}L*Fg!ZcXv*;!!$D(~~UB zcH2&mrFzg()3zzZqa#6&d@7&LXUgkA74*$!)c1Uq17MnD3STpcJeQX@!`Tm zN;)q&up@EFW1GFc2|wP|q0S}!KAjN2noFv>-j*Qe!H)dF4yoUk{)iDT)sMP-AV<bRX&XT8i%8Gda?*NS^i^*eSe3tCurIUllCip1&6OpnU>qL|VIhIur zH2&h+k%ZslA7SlB{QifZ@^%&1Zr_peitBbyrsIk2`P~QIk}Y%*jC51Z*R>s&vWx2{ z2M;=IUZE6;MfE}KNjD9-mODh|o<0wCmIn4;%YlUY23OeDVm#x-X8?FrY`fI!t6>D~ z`uPC%4>-#XNZ)mcd`(%M{gyKX7R(`U!Q{0SDCGIJr!GLAkr>MHN>1s1U1t9js=lW0 zF2Fz**!K??ocq-TF|i#r$>(P@;35I+Zvq_da~r^}+DhneY3L&adSDLpaDOb!5mOg3 z%SW8bGM%enOE&p&1PgVMLFHn3mfq72YX?|I5!puA&$mNcLk{;fA+ep{Kh)q$n(z+6 zhxMZ%67<}F9Umqx;GjD$ZK3I8Y(PQ}7=U zz9bU9Hxm9$BwUDx@Fz#Y7e>M#jD&v~2`^2Ac`uHH?~R0i5ees#A^drf@arPs2P5HM zM#6)BnD>-O_@+qsy^-*DBjMjh!tqpCPB9WbJ`z4B623YTepw{^%}6+&4$IsS3BN27 zerF{7C<;p6*5_^Tt~w@1SN83`{R2;nCq;WtFWzm0@f4u+D??l3bi$nNbk?;eN@XsUR;bI8CGZKDpBn;i7 zF;A_Jgl8k+Uq`|x9udM{8415X68>H!{D(-mxFpPbUL-sl3BNfKek2n9MI=1DG%ROl zBz$`${7@wP%SbqNWSIA;Nci4J_y>{jQ<3oU;V|z^B>dAzc*C*~=H5v7H<9rAqe7Sm zBH;xpjK3)o{y`*MJUWEAHWL0^B>Yq)d`2mR|7axq?~(A;4(K zjf5~Sj)d)M7(W#W|0)u`et8JcxF{!Y+`VdITw0VO$OkY{bczJG`4k z^$ym};nH@R+S&Py!y0s(i-_YBKM; z_nT<*)FzxT`2!|do}mTjAz8IK_s@Qi=^?nhqG|Hn+aS${00p~`&gI@e`(fq^=_ARm zjzwm^l0E_zmi-YE9XvnEchW}!fd5z!Apt~uJcy70B0dpBNFX3(SjB@(2VC&{Yyd9- zz+b@?)xiGGF+T6OSYR)9)Rl~^POs~*yqhKER=a)`;_@py9lO2@p^h)0rlniA-|nFB#<}737&OFKK%p$(~RU_T|!6h5q&IJ0He~QHv0q1`GIm zwy#b5ux7GPzCtIOYeW!jCerNvzOb23qmAr=@E~(qg*Kc9DfD8IPE&U#?9@Le7 zzZH-Hh8mvvqM1VW+g0XfR8U*TgtiHIUC?{$S&iVTWfMeM}14sNWxpJYvo2UqS*AhL&s$o8+4Y)N;>vGS&%sZY= znFMOVvt7Ptgy%CXvt509OmEQSgu$26a68!C9bKr71<9N{A4YGv@~alJZ*CHDvTNoc z^*y#J#gY;M8}@CA*!n~fTsa#jYV?yV|J z5r*Bjspli?+_@h1Tw4=L+O<_(EiGrfj8Wa(O}0A80lfUGSF`9Tb+$mB2uSBn{zi(~ zrW5DH!#3~6)a#g^yx>}AfEPL`7a4z|4fO6oBJ`GhsBY%c4$DoM@D7C2-c%0liQmaV zoseHK-m5#&lfD;EOs_$<(s6ciXcRj~H(`?_&;2snS}Nn0^VI86{z!J}YSQIS=xH5# zv%sd_aTggv;Qt6Uyc>AA>J7waY8K!rXT#AbCWgQ7by(H~ctX#xcHj?^-oiq{dI$cd zkp_LydMTb?!Sj3g`+NNT4u2NnP@t8?-$MMo2Y(OZ?`!xQ!QTpioQmg9@OLs$X!rM9 zq^$?s>G+EQCWpUa{QU{>|Bk=o5guEEAGM4fB$Q0|*y>7o%9u`UvUHHW1jFd7i|GU7Bu1XKqLTUx#%kl1RtBQ<>R}o zgx>bdBxTrDd@oslHBy(A3!aR?WH04+H_`n9+zZaIehO&EJRRbhM>{4^%F zs^y3=gZbfLFl*&Pl=NE_hHQHPJtI_=0)P&WstUrkdOI3i8dX)kOoJpwCM-aEd(d8} zJFi2e?}f97R}z}UtRX%HMo4!*g@-OZ6%WDV(CXjE(p%Mcq3c1Ef#pY5gpO|)3zHj? zh@#y2ruiGi^Bnx`#NUhY2RUXzcv)j##ZRX@SnZJ!9lI0jPQ5%RcXJoji^TY2Zv?QO zcl8`9QXw+?`sEu{8JRlWa9sH1%M}{i5_h&bW=`A*#3QFxwj`9h6tIu*onP)zwH6@X zD{Y*H0mYBZ)O*QuUkAz&+HB~=JH!>&XY3nm0DnvH$NnIZAb2bY4r>$sHsfzA{&wJR zH~z|dDDXYMd<9t+&ut2vjOY2>yv6fOb+J4*s^7?SjRNx`{y4Q=o>g^;JeR3|mgi#i zTY2WyHhFe(n;7sOCn@m3G%P?(Ez;u%l{B@9oy|72`y&qq@#TK?0+egt3H3-%)~srz zeO04Vw{gZ3{bFx*>NR+ohW*J$_@j;RsCt+MYE^ub`U|``GMG$MReb?bdI4HhUyOtw zYJ>;W$0;v1sz(r|(b5?eSzaH_;^Y2p?59GhU;#k?W$M zP-a6lds||*sgJi7B#=93W(o3kL)H%$>b-dE-K0Jv8FZy@)}=le!a{EP&~`9|W9_om z=kJ;L)!-)amxoIHheIX)ulLwAL_#HopQr0n_wsG)u@ zh*-Z5Kk4$7P%qz(5Y@|f;7M1p`VfFBXE+F5M(}qceq>F2r0A*p5v;$9Kkw!b*w0_) z6^FEH;2{H1)zSHsSAPKM#nDmwKtHN^4_-!IeW0_)K9~om57v)D#1rZl(u$uUpC`Sn zyMT4J?4b+p7_=4^_23(@uh#~>G;JF)wR``~xf z@7%A3kfeKaqe8=)GHz4vWsK7*H8!aaN_>P{HmOgvMopFiL`Lj$QemapKJ$}%b^5gkL z{R4;uHK%?J5KzO8#<({|z>2a$*%(ysOpGPk{^*;ViXQapV zxbFcj1>n-_PIn>Nw_!^AM>I;WJ!94vklu%MCtPg8y>I#>D7Ri!~H1oRo2@=;hCQzZg|99){DV@BxpN4l3iw!{vJs}@0=@B68dHl zh?#NqeB{=1D77-2oO%jGNO-c!)hk}{I+L|-#!c220Sq=+n>x5|r(@dbsb8CBqEB24 zYddg1`(#-9#1p(7!8;Y#co$e~L@7%-8XHGr(?6H;PF!Q4X}ubC43L)BFNMaLijVY7 z)ki5@KL)B85ep><3QAl{Vf9KfP;?gEq+Z0RsNCP9qaMW|9Tcy#$XMA%yE})~9C3F8 z!!BFKZBZyTYjcGw8jPX-WO#Xx7M4UL8XhJ2qUepy9?ML2>29 zrGIrygxAs${>pgL+nTeqVI!%{8yBKfQlG!*y6>AX6xX0ttjLB+&Xm0;#W3Fm2={ZlHC{R)ra9E?^LSVsri-&RkLW-z@mP zHVK&9B4a~Ww}~@dLno1$rmEgbK*8^ZHpRRlOx27A6LBbrp;no^pd-ii20RyXObMo{ z2ZOgVs9)S`PepTRvicdMz$^?hZn>vTjhLQInH$yX5!Mo0V^~#~k{hY_w4@3Su5|^T zkWN{RudA*@btB!bdI6rP9*uq(Hi8%9okpe%mQ^yZXbh!Er;Ia-dk2Jqi~_w0u^36= zTvM%9yy(Mu8;TPxAm z(3CLubJ`y1bn^8F5m2Ayo9&dG`sWaW>E`o{T?9IM(+?q7LO$wMFc?@v$dB_EvtFUr z&BF!224@XeLgfY=6@ZrY1%wZ}DKCG}j&HAw>mvyv*vL_lnBq`vT~JE!d_LFM{<)># zJ$RaUo=4!m2&-9p12$8*nNb9;d}8F%)8HG}WW?i}`tdFOz$C~>@R3{ko9V^KaWmnj zFJy?I(-$#B=;IXG7!8Rg_ptLWmz=k$Y`D-UKVSx z<8FdGwOdREnT`mPMsF&GFXv;j{}Ng?0!_}Xe;J_y%=>VKco;$LEAa?It-caFK%uWN zo1F(CY1Hr+ZqFZdpgYB6|KSLZ`8rl+=Lh9CZ;jg z{dY52TPg3}HTp!{Q&>}!?KmZ`< zyVKvs!_IlbS!|MHjQXkR@8CB*{V0Aj`CNPq&9S^}ypG}O=MqjfQOD5obIEM7juGYO z{H#CHo9L}$Ecr>mVF3AKFK4DY1`bkXANelS(~(Od6Go7qOP5d0rt26Yel8QwW_mj7 z80r4VfX**^Ho??aZdo*i=s{+lezZU1)HY!MC9t#k?Oqkj|znal9Ud z*C!I$l%SN2;}{T+1_?H6N5P>wco&JvMdIDNaimwRPSv_3<~Z*P+4k5Bjpqc5z!~J9r*&lH;7q zNlrb9VoKZWAq$kebcl|5Frs!_3fnI*9^1~O>rCpyGV{Nz0@!1Kd+eaivo@pp{Ef~< zInyEM08un>xrvpRHmRSZUa&FshWg(T2U(-92hK+V&YAuN;(WXQ_jshrgYo(=5lDNO zn*RX-JpK`n`mgX4*M0ZX1Ae>$T~>Nd?AV$noz_vuidog#Y}3}nVW<8HPhy%cA@VmS z@}C=#Yq*E{J9x9$>Ybb(wH^b>Y}vpKva$<9Fl}548!rjk0FeQG{%*CB1^9PG=d#v1Piv~P+S{h8WRK-YO(iHUrx72P=UP7p zAwcOYFz@QH>@F*>cSvwt3kTE+jh9T9)z^5*Va47bzQqza5tdEjC!K}ZJl4y`ipk?Z zQ7192;v$OAbq^VPZUu9{RwWtAt zgMo_!kg)*72+%W;vFO*5PGNQ&Nd*d3iR)f25*9l^X8`1s;+EP8T~;w;-d5GBcuNJP zt_n)6;QV5-Gl*UtL`N&@uGy@m*sY85i&>mx8#y-Z70cBl5vmr;HLtj;y21ko9PJdh z&XOB~EhMn3<4KIuWx=cg+|;@35t$AI^V}$r$OcH9&<=^5K_V9*(F-KXlN(%cNFV;H z=D7mTXN$)IQV?e=&&cSyE~6dx(65N@#oB} zWz_1XC=FEuJQFKXXeR9*>h8qm&sLqhyLiIxtrJ5x-}5F!L4~YlFb*7Vr!OY5{{`xM z)BhX4)BlQ}TUhIX^s=D-)B!MM9K%}di4)Z)D7KM^X zEF(Rj`#!%p3QZPSUPGA(X6?SY*(@xY|1E+Ipgd?tXMhkel%0tO{Nb2Vn1r+B3xW97#K46UiQ?rKP9}z4jrR*DdO8BU z)gO?3(}X=kj3)|{ndI&xtcQ1%poCdl;R`oIKnUF=TA@> zv1M%SMi?*7^#385*?>anzWqy)XLzK4Suu0h!-yJwbO|EVe*$FqW~NR57lMErZG~GI z!ZA(5>9Mg8XmVZzCv2i&&RbAT+L$iR0U4leZ03VH>R!NA0N2ZTpE3b66yQ_wAqxaq zF(8j84|d6O`o96dv)8#;xmSGp;^GVlY49?p#Imupop4+%%+Ew2J$62+FzX^qkEi~` zfa_J#lF_(silRh3X8ymxLmdPT()PB9a1I>@9wVTKp@#4EPsoh`sd&D)gdm2={PI^m z&hDX7H;LAjOIfV0Oe>ZzVs(vU{4Of1_#v!QAqrd~6PHF2g-rRRWPdFRIMNBsYJ`pv z;V5)prrevXWcxGaOr(r_hV|wW*@Qu5t%KDIMvFH?YABDzV8}$SH2}ZPuq!HRE|`h~ zUTCdh^7RBFFtW(c%QYFYt`zOaa=sRa6>BT#;pkXwOcW-hBeb2tmU|!^>nh|$eyk6^ z05bGFZYq%uP1(99RT6bM8nET<-0D&d?d`&DL3U1j-o&%r8I%njC<_nF zi+slhnYPdxHFE@tg-J3${b`_I`h+>1;><2WJfz=ZK4P;)K04jmA$i7TC70-tx1!up zmb;HRln;&;gRH`-e~-rk_OS?cA~ZN#rI4yio?(fV5qlq>y}a+DoQhXg$MbrIApfIe z?fV`#uJ85?tFPqkeSG$+US!H7D>$LCJzUc+0zS~wvJ}{7*8+j9cC&N1^uwhCUg=C* zy%tZ6o1;zza={p3za7K&G(nsK2)`dg<`@Lj>yQ`W70gCC@pj}n_UY%rp5^i0bOyB8 zi&92W%19RsXN8Gkdh3MlhkV*8rYADxF*i|5*hw9!(M>8r204#o&P=kHM!1IX)`<-5 zUx>hg1Vi`Z5kLBQU77S3Mf`E?aWzF&VywG_pGLVUw}O>G8Vi{c5U>CBHNi}IE#mTE{QE$p5;xG<5E3V0* z^Ce7LA}H3B3LM!_Z)w+0#q?x@q8g=Cz!yrJ>z_M-C;F)!51L9-@nWiG_m$>K$70VER^D?JX|OM8yWBZdlV58Q4<9fkg+1L_Rv4_6fcLi;2dGpMfT2&3G- z5ba&vXm1l|E;7u}$^zK_Yr_KMS0Y|XBwV$Lb>expFagH~=iw9D*F$Zz9U14TC(+~d zxOoK?*{^hGT}X10vlercn+qj3zd0{5ll7hWT-Min`1;m7m-Q`}Ti>~C-??G?);^c@ z!6Ckto~`w*doJsPM%Y>(Y(FkdK>@$4e=h6mJ9K?J!7nF0m-XRxqt^DF$M)?$4<}Rf ze8DVaN*Y-6{~LhQ z^Pfwch8{Sy9cUe3&~_<@YNpXA;FhkjNDnRwQe)phv{pj2;>`ltpiI&<2%RHqY$Ci1f7jxVc2XOET!Uh*V6DR+ z_{u8Z2$PYtGttDqywVlK%SUShm5*@icY`wJ zeodh=oCxpYds3=<6-cBPGv3;j^vyv3yVfXCWUh@f182NIip!m`WMLu$bAQ%bpw@!mJ#nn17N|`K#$fI|1J8VV>>C&**;rp~r&~}P z5S2?X8&_R!Hjz*#A<9);>E@DB7OJ8fTn>H_qI*iw0(vq*v&n>F0Q(xu<0rEI%of-O zC(>ivq^ADbs6kKH5u%rlqh^C%TBDcBXXNx^Ha1Y3ar-rb7!Cn~nYczU3r}R$idHA9 z2{)Tj&m%G#@6JQv-KjGgbi1-$f^8~^0Q}$FiOkr0(V^McU~NrUEpRSOv?T;0Zvb^F z*SorME`W(j`SKvQX?!-esCJwnc9@dNttAc2-yGCFh1z{Q={T|Ki9bE{l&jXDepqF+ z4e3aZftY$9jXGElRpZ!)c@9Hz|v)&NC-;bMx6#Gs2RH{de5=fT5_DVl=Yr(*C#;7fLJ)Qp@~Hsz-7Sa zT;ihy1r%07g?jrYC^^pUQbwyXeh!C1TrF&A|hPxKDwZSJLF0u1(wq#|^Xr?0=@ z29Y;k{^M*lg8Ffyg{5t6rXVKAdl}7nA37fI_lA5_Rb-gmiqXXO^cPN2rb_NE^lH+FQEx@9uhJMYz-z`Xlqz9=SF#w6IO#i8ayfc zhMG49t;#6@PsXh4fyV`h#3KV^D|agu@!;01^jkWaPtejqt~jtb8H|Xg+LM|upGeHt ztEgMgQG?dfHF8a{wVPdgO*lAoufLt$i~9;-hkUoNlg!`LEhd1w-P2Lf3BK$n4uZFj zc0?xuZ}aj3POCg}Ked-7zaB-{;j=v&tsEG;BndZYcZ_s_$^T2ZKwAfcnJRVGno5K0obcD%25nRUWF+pcrwhtpCbN? z_ycJhe`A*+!In8Qm&7m!#!s*26Qt%nfX^l;bMOt@g`muZqv)Rsnzfq|*dxm(AI$m> zih(LU1{SyAN0@|fVhwPaF=)9~jJgP&?J8;QWtSOC2wI$9(_?=GzVJlm1g{&f*amYl*_2TRf)s*|hHQ*>!@JoYJr$gD;H+gmxp0gFx_%3?HPB(H;ue|fWvSww znCo@2y|R8WrI{Y2a6YF{%F4J|k4+H%TaLdY!BKF`5~oAXBaFWX?`!e=0iLj2@~n>B z5&lYqw~BnUXD1-$yczz&UY)F#GW5M$)y|@YT3r61a$%KRpr%cs2&*lLtLS#)9~WK@ep{u z24x=TSq5`2_pXGXrz7x$9d}~|S@M-SFu~E2IJ4aH*?t@0!nnAGN}aTCTokF(T~u}5 z#qdwib*mF})dv^AmI(inMz!VT2BKiFb6T)-G@qnqzx)^xm z{oa&1inOxp$D;9-PatdAoX=7$MCnO`Yeos1uSB7mqZN+^A4Nj8>`=d*~A`Nbp`gw0Vu^EK7I;?vkflm%DLgQ66#EDAOin|Bt>uHwOgtmun+ zKJ=|$|Et!Os6UXuw+Sz+RcPGo6*8CGvscQ~nY~J$3ubr9bDvJ;IZw{Gn_Z4D{p7Id!C@JS$as&J$I1$l8*UOdys6L6?aPh?XOG;^5)BUswq${gfKzzaJ(VerYuoD(-x#)4dP_I;#gcZ9SlcoR6i#;P*1QIuwu6QQd2V8?C`!GDNEA7+?2kD{vDC>#S70>ECk=GnTxwy|G@l7A7m2h zBAq##_l?8n zn~mnX(&YQr;q&be@{umK$@kZYJTzTyVm6@*^I=>FUH;~<`EG8?2SdB$d-SmRZfVN5 z%jA3Pu=#Fn%D3C(`~G3`y`(AM)h6E$51a3$P5GdEO8Xu^Y`&K@&x81SaNA^uvH37nB={ndECCk9pfT26n{=VKxh`P3f1 zP^I5C4X_4&djQWplc=o3M_6Pa^HLf*f;XNF^KY4nOW@gwKMZ=ST;6{YNwfcC`F);{ zDKhQUrGIVp2pgtBKM^HfT^tSL8aGU6;e=JcgIU(-s1a{^1B%{Tx?}3~n3iqzAQI(v zOx#yPGU(fBuypmM?wfaaX5tZT}m@>e9Bk@wq(L8=!E)GDPm(20!dVu)@Ib%j!7D%>rl|8l z_*tew&mugAFH{pz{h-tXWeOEX#i&(HVO@U*GL59v5#ao3hmk1A<5Sa+o4r#)<5k?; z6-%&Q<#@rGJ6tMd;;;n!C`lGaj!K}MbYr>8t?Gt)Y?ix;(jCBoEAwU?)N!(vEG2;d z9iD~Mb8>hFrjuu2&Ia`~-YAE*8~yTHO`j3Cvy&DgPbH+^>!)y7b8L|BrrF2WuR#Ts zF6RM0`7OC5iIAU5X&ez^k+49@vwkXz%9rl5oz9qgK3+h0*dE}ftav#P+?17E2IMN< z0#v#O^xbq=sFS#>9x05YCYlYSNu8$K;98iI>MI?=Gz0MZ|Q2nH?P7@d^}*>b5(OA-am>Hs$hAOeODjjRL^0lS5c zkibS;E;$+=i9_tX4-}Kt4to*(DmNt94vwFl1Eg{MY%?CS=ilZeJ+D;^4V7$5sh(PGE~7cu%h z&Cyb2{bHopGuTwd3G=*TFdsU+&jdb@qvi&wX~=@pr$Qc$%soYppt{cfcAwUDq4Xj>U7JUS*z;zd}pW z<|T$U&BT|!sdVZ-!rc|SnWG6=x_t``HKlkcJ){x5TQxOrA!R|ZB>~poY{eS32Es(> zw%l61TjLK7y_yws#V-NV|Fo;aJO&*D#l8R#T=?~L=#pTirwpLV1$7EA^qL2){bi!R z40c%7jlv7_@{ZaA=vaO;bz0)4sZcpLpoUsPTg*aD4#%BF7y0#T@WYKVW=MckWNxQ^ zEq;AZc*@nBm5CKLN8lVa1rQtr9Nl56=?bc;Pa_2<&4fkb_3Q9P!%l-q+ZJd5FuFKu za3)J*cRh<5)+N)zQRZo_8xT3S5!^X8gLfn)rUXZQ08D7+;nP4@{%aoALNZ=}RW#GMy+xy_j5Cz-b;fLNl0J3Zl=lG}?`|4H}!07}MnD zI!w|SLH%AG>NLnHw01PbIbidizB}S)2XF`nw+9{ts3#&km$rsi>boOY_PJ;u7AFmP z(HNLf8DUCK#;0Ed1kwkV1}r{jU~=E|yp+v%V(!8wg$)m>>RGye%2ViiJS)rlE|jj$6L!PVW=g^4v5ldo zFT&8Gi*kANTMKah1x)i|BCKWft5D{?)^VmAR>8Q|Y$0+*vxRQ)UKD^2BA3@|G&I*k z!66#hBcX(Gv>3*y6b`S?Adb%T92Z*Ll;mmwLpQFxBjBc({Hji>Rziy&hPK&L+bHX)>ncoJ z<@`Z6_y)5>A8Km_%f}5A!$?HSz5HmUkiz8y+PK_pmAl!RE(;!4VkPGHr+qm{F`UjX z|3%!Jz7=I_yUzxc$A5NX!Rg^GgFn|i8Rj1snyr83RKC;)E1o?t`55%bs=a9Pu>pP0 z3+4{^laee#zYFk$j+K?$Pq?Y_M?}au?o1LID@F-D{BRIg@27C-gdydt=W&J6r#Dv6 zW7_f8Nf^gpjFL^@Pk5P=Ct1hM|L=8dWR*$O0l5V)+2Hm8Jx5?2Yu&;+9!G%f;Pde9 zfEVtS0DY=$@nJ!!!M9lYYk6Chfs{7IZ*nk~Jp2?Kz|HDoG1DuJ z^b*r=z9~#ECJ8Xo07wb|3t&Jz$k|7>_?9-+I}ok+d#*#u4u7$m=bV6h7mA7T7K0RdV1w)Mb{1dhaV~@PI6$t`qoGVaL~-ACu^9 z1bTTnoRZb0xs3p`tl$vbMUYOYgRGZF$Z~ERh(!F)%nDP^PCM2sfX7S!TzH6|$e)PG zllUPf*yK%4zXTFOk{ZN`;^cCiJ-2WZh?hA`#$={b)un8EGeY%X34BLn6a4O59TX2TjQL{sEe$U8MS4@B}N4sI;QZGe+K~I7C^&H$U zgULY4QF?{2bK#4^u@#f^wYLea%y5~XOq!$TA6poE99uY{R!}cP_2~p|?(99M{g?t$ zu*88Hko)019P$j3TAIU znQ5vpiKH)}MfKaI;zjuO<&aHqBE)DW-J zPq%#HMI28*A9|AD=n8`@r%5!&Ll9UyuquA635t)h#>V=ATSGaUcOfBXq!8 zZz1bWTSJwwzR}Tu4qB&srLNU^?gxVcUnW$<~oiu zwC4PIXGV$(k_*IA}{;OU5Kx^etERVePj0s9(ga zCmhSVTX4$jHJ(uCtp8-x|3&C1=yJ$69&cKe7vbJ zu>ZA9TE2M<{*G;vlAFg0?UNR79)mb+n<>3{?C+RFS`LWA29AF_#Tylh!e#LTu%=*Y zfVwyI)X(7Fc0BZ{@mC`QBA>v$4e%;{D~14=hZbRX(ZuLtDN6TA@uFH6UU4-445Xe? zyuKP!Zxe90Kd22ZXpPzyqPDCqIjn9Z4rdKkGQ_c^k(u0Tz$Pb#C^qnAA#}_pZeQ@D zhZl-=k#)x*E-myIuFBh@dBq^Q8b%VfIY4vu{WwIx_um6g-XRmXwa_zYd9o)d&CB^H z%AYVixc+FAfxBlWaXwFW`DFJ6)-!92+Ho63K?P!-(zR|L`_a<^dm06?Lkw+lF2sL|b>tAD?=Px4BY&)Ic)+vxjcR?=iS%Nn~5$ zn3x<3#wATMqU^^uyM--dm_GnXfpW|m1KHOCIrK0~TX^{;k8SSiC`e{0+Agl$jySh( z%h)4?7$TP(0~o2VzqOPn2~$kZEoR~6x*%Q%#j)O0c>k92m8Qgj))K);D6wa5iKwMr zkzqysb1NF)oq3eq3o!yLyXU8Il>;6bevr!_$B4mofp0*tZ|hpj zEm%k$g*>|?sxY}7ev(Yg#wLRpoqG(%U@N&;y^%#>cw=TMpOSNnOS10j;0{3;K=#^o;@N-2%FBE+||pbgA&I(WT<3ClFXP7xan%^x^ld3Vu%7}5*n0Hqx=o0g0sBYd2Q=2!#x8}{Trg<~mr{8GP zSP9BuQh=NoK?D8#Zr*y`-2>9T3-#g~9%-ISOsIF`ZS+@(#arWQn=}gfC}*(v<(*das2XKrQ`C2=?9SY<_o#s1|uc5rRa^=x6p}v=AIgOMvvC0x?2`Dl_3l~7C4S@jGW~#Umv7i;;saYud|as? zP^-9?4o=3AU~I_1ra1;_Ohg%1!o`W`h$8SEjs(#d?m4iQei;fF88 zTl$+X5K!(cdmS%w{8aj$DSMeh4&VzLD15*d>;$>9^s237yA1wA53hWMh9|V6ROx`vJ*7E9lg6@AGbL~ZtZVUxCJd&;L!D~RP zH%R}pl97b1UI*ARyiGojr|*p{F+&U{P_pGnj~sWy#v^v32IF$t&BI0G!ewyQyp!@m z-NO2WPgbG)dsx2Y9<1SVJh>#@@OHrD{k4Lvu0<|K* z0+LX@oOL%GqHg2cXUyTV1d?CD2+h{`6p5p5=R5qCc=}B2--5SmeHL_iQ-dyTYJxg? z2c(U<6B%(RrUYZMj_H5g*alZF5VNti0OFu1Oo+HmzA$8A2s9u2z=AsE#9@nTx`nGi z-!fy-(w027O<%#)NNBd91}40i*!izT8{RB!kVE8b?j3AycnLoRB+#bV+|3KK@+k<> z_aic0UIEMA2N2@^ZWo>~KX&MgzkyO7b6q7(jG1*JRYqRGe-LmZe@Rmyc+2HECf?%) z-Xe7a`E2SN?J@Ft;e{q=90c`>WBHs_8ZFVAJL#W;(h?~V{dhdFftJH&$OwyutZ zEL`=$oCbE47bLRriFAN!^2I!J1mJXBRA6|II+Yq6wo~`ANN;4joz$FdSUGD{oor0hpYmE= zAtv5<@nT#os$PS9<)eVpn^-^@?qF1J2607m5S0!PF53m@qjrO`k{>Vu>2azR zUri2?3wuVPsZ*n>Tn?8kWU5>g89Ws505A))LjK!O5ikJf7^gT>+iGxzJ;1XKS)+aa45W)_ngvlZ z$Nm~9I>ifXXPe@$WbtOSJhg>9q6Ra8d}0DuxsKG;=e}(ifK!cNx=!a^j8)Rtj&|i)Fby(j}0^`%&)YqkMF(Pvm zRlDNFOx4F}@G8GAQQO3G;r$pju`A+@gYOK% zb~lYB_{Yguf^sYTd*nQ0qDe`|$capZT8?#hIIV(AdbSN7D%At6ZOJDT-ohq>A916HcKnry(YPdBLlTdPuJi$+B){2 z-glzjykAI_*BFra$_f=a;kYh{ED2N>8cqs08+`p%pi_3^ez{Y8sj%u7KKiU7a^B?d z0u@2$&^{loe9QiR)J?;;RDt7ySKzZo#p`OxVt1+>Uz{pCMIRf^_;wNHHv|;-%U%kc zMX#DeEHHBWvFSBYqJd8vp<6MGa-_W|T6|$rqu8$Ru$Hpk6^<7@RD>ytS@i~xs6B(A zp+hT%&5U?B$W@ftDfmo9S;sKgJk$7~2q)=h*Lpv2e0K|f8CNkZgDwJ+bS|Cffj%!? zkxpRLuM2v-ZzAZya0ws^p_%v>HOaxg2~BOT4&&kIE6;BP)6Z%#pQ8Q zdYUXE^Wy~&Di08EnX`Q@C@=;u+;a8_5e-c3rVhfEWY9rE?w+POqYs*O2<$%=#54Taw?J*|!YWMNk784Cd~*cfsS0WXyRE1# z)9LR*I$Z$-0^6856cGZJCs>b$d^aKCbfF<*a!x;lOcblta-z7Qx-3!LSv|sF+Zg+c zu#z*KtuG(~d~Hiu_ya5)OH5sOe4N(1XyF^GN3q-`t>qSztp$f=z9(#Y7|B*-l2T2w za&&8PiyC#dpbHWh?@!UeU60#j(x33T6nW&hn;LR;q_)R(H(}e}-K1|Y7%dwf3kc(G z3dZ$u9G9=^@#=EBsOF*r+Bjlc-wAx+!`v6*;7O}0-OX5z9%v8? z*B;4$6s(#sMod6=>Tc53KNE@jTiT?tr9(AYNb7E&dya6x_t9ebK3Z)<3rYU`TtgnV zd2fvMKJ=4TXCU{f%wkPL-4>4CRHLzuqhT5AI7hvYgB6ls1Y(KzV;*UHdL@_CGgDlf zC=yzBVqM3afga-6M&}OKPnF{%%4c8g2q>L3@BlSVRsk+Gt1GBH?(^u=`YCMP4i`e#?2*Y(+7TZmqK>x>RiFtwJ8PGs4Ri4A^?O%<9sYXkP`p)Y~=xIv*# zMm3dQkb(^p3!PrameYunO%`&av1xF_e=f;I)oV6>{2iFC4Pa!6Khm$63_EoTTSk6U zzj$D(`^i*-Okt(LyT6*y1B9l6&h`b&qdB%=z_pqI$KjLS;NJOput`fD`vZ}i!-hhW zWr6yu*>L=?+k>{WcR6-GqMSGW24ow%TWBEMcRn59)_drB@W1RSUCvI#N>xlm*sOwk z3K*~nPuPoEsU(J>@#9(g3jBCrpVk7&gkw}ugb$kw^km^b{s+jiF}lPMp#X;`<^5v5 zOA(LaUH3QSh9_2{@h>56?7>Dt0qTh{Y_%dPJqEc*DG9kqDG9kK=#RYEPBdAyl3G?k z2okJ(k*>8Lm}q=QPA#9R;|9aHW6HvFgQ!>Li`-3dJTuY9_# zxKOX)Nh4t8dCpwc*zBBwrO}e8v9Pjm9=PSzk7!%D!+Z1OU-?W^$Ce@*y#;i++V0KdcW>K0w+10E!>KE*un5t0fGRls-X^pAIP4Qp7OnG%t7B z&vHW0RSQ_Snazv=t!XwJ`wudou_s}o3R&tWOwh)sRo_8)Oh%VL4%T466YgB~X{LOF zppmI7 |vMK*R9KsbL*67K(GZdTG3m=?)FVLz9Vx;xNE_)_l&*-J9QG~z)o ziLltrPFc^MY8~4Rd$I_NCd42tS_l-Kt=J3gW~=gPA|;wj3e1CKu*1w&O&RquEO0z+ zuC$4KkUSZYv%&h_thVzjpO4jhu)4$a%?oD=+NO#7uRx+wyjW_E{WxP`vnnoc<_4pV zV3j*3N&7lNcZ1(K^nS3}M^OmY9Sf>!+)dcp3^ae(FE4U8nFV8Eaye{TT%l+LVbWa7 zB~saFJ|im|D}&)+nT#@ha3W=1pD8A=2b34-?{L#Ofaw6EuxnUHH5>GKjfF622%ijN z3xn0Em>K#zysIi?Rw}-rW-lmt@d==B3?!0THK!aAYlsbwbJWMs;POM#FQ=jmt_ci& zeakzr=rvynMq#EqhHeH}ZHYHTvQ-n_5Y06;%-h2)bClQ$zl_8Wk+%6QLQR?pi_2vN zl};?Eg(mvK9IHyAvJg9(?k0Rx*3h|B^P%G7hTVxRWgVJ8=)Goy4**o#3TRi@q|J@% z(Y)cAk8mq>=A-zfIfm5b(wa}~%68fAruZbxGeZ4xkLe~BXI7bJeRv1j^5Mhr?b*$I zyP(0hx*OFe$))7oIVqoFid|gVV!<%%3j!aBGe}xPPc#fqi~K8R$2m5{hNnjt z>?h_Ga=*l9P=vmQ_s*};oki_Igap-v zU@7ymh=Rzm43~*CVq5-~f8^QH*rvnBBAa8Dk zXMGa0)JNHV3_R}fbJM>I&n6G2!vD`aoFeW_&Mf_w>^UAwXs-A+s3s>T#D1KOrwd^pDcKE{07QP4RU}9JXdWTq<_|Tx0%qF-+Iom-cQYB}VrmRFq#r{8{@4$|d0GM# z*4=?{bWfT({JeY8bYA0T^fi3O^n3>24z0w)JCmf%VG#T!tMNvzv9TRZ*kC&~t4+an z)>ww2*t1BSC6Qh^#IE%tEU|glT1Ro$T3XfEwf?ez{+rBcw9V+fs)ldLbG{v|ZECiN zB~%B>vdOz6Ou1)twb`nH^bq45guz2VQ>3fHp(&3m=qY3aM`{RcNfH7#cLp{)94?!8 zulod(YwljRt&0z5+P0hF!P(1?Qw~Wta;D@M(gRVujfyiO6)}z_ZcijCxWh$56l7q) zk4xWpJ(4sD<&PN$zeRA>5ka6!!8bllDSAXT3B6_yTg@ZdmD0?`gXDhT`e)p?|2)Y3 z=h(O38Qpk3rpbRvE4Y^W>wq;_)5zy_3AH3>|tY-0s3vX^UW;Rw5va#hY9c? z&)tW?`zhcv_~gN^L48*Ow$X4~h#vVc4{<8V805@m{c>=wNY711N5^);SAn2W(+#km zm3Co~^D4A27sF}*Tcp2Z7@vpmz0s0j}IMe+`7Up#r}1roDH-g*b8}ZljmutMBwJ z@5#W`6uPO8$EWbfCMOgOFg`xgAr9)2W`ayN?a@F+)@L)>PW2fiii#66AlUuO;))A# z%sngUN>qQ?zC3JW%8Ppfmt8}ALzSFAc8?w@Eff?dfj^Qtc!%Pj*lSPn=WC$AUh=BL zd*fxT-KAZRg3cv*Q{0>5r;KE`qOtv1OVA$R#Yg{M`++<||B=^){v+3;?s@%34mnM< z(?Xu1!-yHHZ^V;!0pnw3D^3kE`M?w8i$ORlScDpZ&xpvi!$JPP`iy)UI3C_-WP7vE z$SH>R;)n1Vky92=!*%3aphK`9{Ip$1Z1qiMGjxUrnuT^?9ee<>z8Qv*nOk=$J_w-Y z!HGs1mP|7eMh=R};jd5xJu;g81}MK3lOW2)Yfo+fp-T;SB=c*(39;ORFS==drb_{Q zQzm<`6r#9k9q|yNA`yc6@!s%qK^#XKapDsTfnWni6LSpTE~IUi@-2ak0q)uf1m7AE zBW?s2p7mZ*>&hm^e@t-)fD7>C0q|NnOJ5npY+y`coXVm2%w&zz3=W4cs4WWVQtZtp zTPTBqu3z_4^n}4FaG}ZPQbawME?)v<@F75q`crZle$x+B8;KUWAe(6|G=-dj2T)LA zHZ=g>fm|Y+Mq+FX-Yk{`(^EXc;^+R^4rnxC4puFklJeqJXsx2=? zQ-_vE5zoz`Mhg*y0$>nR^4gsgrJ4z!TNGpEx3p9pVVq`;Ivi7$x&KVoYaxebxiFFp zIQ9V?edoI7Hr#ieF>_Zk9?o3GDM|Z3{sx>2ug=CeHR_KDK~vuoR>&z`fN7P{Rys4Lo4 z`A&1H?1~nAY#Qe)2oUXd$mD+AEKF*8&%a5gr69)?Dkr+k5AP~RaqPQ|r=d*jrUL+~UVwT6>$ z)EY{{Q7a;37bSb*X7Q(wKmrmcH*jlVD;Z5w9%Y4K`IZV3g{=!MYZP0=<}Q zt?Ur>e76nB<^$JM5a+}wg|lvDX;?d4_RJ2Z<(`rw0j~>%h5+c8|sx2-?rk&x-THsc#Aa)nudehl$jO#?N~vS8N1aB z&3CBbbQ(^Z z0nVcfHNxW;!v`8jHrLonX3gi=_|m)(_*(wYV&HjPHFe8^S)QJol&Zm6YUN%k3CCIAS}-QQzZygw-2eO>hHR?HCy2Wq!tn3p2rzBvW@%JDGaH8ckc3uuH>| z0-w|Mn8W3qSLjqZkI$)?W?OwuzfZOSPJb)Uh~rLspHmzkf95_rHySbWOnpv`Z2fb% ztZK7I#u!N2dHg_`knM22R~Hg@j>l@0tkJ}Ds$P?Yh_}}aUDP2`g+kn(gvh2oH|3!}e1Ad~iu0SW*<`#^77clgaeH&pl zdxoY5ss|0_Pgu9vp<%C)SSx~@^UIs&YR#0p>e=RRH3diY~Aliu{@GekJGlojmow@$J{ zEGEbazQnPR=A6dUmTORKW?5KG!}da_JAXa{lJ0r4h&OxZ>BKlKd66CYzIAld>w&8k zdAoHdps5V81H^I756u9)4X1B6Zp7hzI(@q*le;HXP2z1t(*FyFPJNe^HlX>i_{wf! zIZp^W#K|Q^T?ptKJVfnX*w%@$j1QM-T~>RG;LAl?=QssC{zcN_kbEAU+hlVbRw^3g zM@}`|s=Y9qT$>F)7w3m?VDvKEEpY9Ncr{mXH%Ey+_VD>^DihIgt~n&Gfjcyv1qH?P z3<3kFE;YK*q58?4sFiNW@r}k zMwT^b8F*_UGRv_V?52BtF3Hg@mpNMA(iI1f-{%cgCYJb_=F43c$KhTsEx%# z@;iv@$1Awws=;BkzUB-e&iRy6EYU4qJmSe>d%+!WCJFXC(Ai1TK2t_g_dB)^{Axdb zOSMV?mULm4q~X8v<@0nXj!Mka)2VVWKOUaF#ACL*!;pIXfb2ww$qy98U~ZQ4En;Uu z8xY>A*5Joip}4);nxI>yxnA22re7X>=k+r1hrSz=&d&G_uH6fU9Y6V!@~5_D`JRZW44!}_B(HeR*QmZTj4fd@`iRfr24u z$C|E3#3e2oZ+w2oRg>%tud>v`sg?-hakwxw5I5H)Qpq4MuLa)W*jd;ZCa-*&!z4N` zhENv9BKVsl4fc&>4R$qtojw?Rx1m&h?;ejxqzDTVd;gccF9DOIs@krps;=&?o+Y!S zdzK^ov~y!a7+!SOA-t3|YZvrX-lt0OyOfaPqNaA)J1+ zKhAs-I0Yt1EyQ-%$4Mr#W>&ST;Od0iR>4zK+j#Kh3E>LYjXqDtox0>>8S@ zv!1_>^vd38r+?EL>Phb1t@fV(Q3N>qSa>ArM^?LMb-D)J6YeS|7+{3 zz&F9uIk0 zug?arEQD}yO@9(Bi^0BZ^3A0k`b4jnO}G0X9(~G^?dA73>TG=@KYS;v^qnvwX^o#xj!X z6BG!3Mf+o1U_3zF{B7WD*YUpyWTs9=M?|0VAK}OODRe}$lF9g=a13YLfSGapv(tEU zGi4{E?ypb#E0Kk&on1oqGO|NpE{Q#&KeY`$U?;88_NIWWx-)dHF>_ya*S(1wERQ`i zxc6S+^@D#UUgU(G#EW#E0eZ#SnOn#fD|uwfola~6G}|)(Jrq8Uw-len$%Gc}!A@Ms z-=v8p;}v$i9W``QcXI_BZD|_^0k;Q}X@)a$KL8v$t&BO~--aea`Kf#XS`W-pLX$IB^;1(7uxJ_s|v13{u(u$UnzX>fR zBg>tS`mmjn$QlYy$CLD=>k&x*!-%e`t3WfoADH0&7ERGiO&8GQ{T;~LZ*R+hz#k-m zaq~8KUuZnjSa6_Rd@nRUd0%4HmG?hHnw$Que5^L_-GF}RorPGjW-hn^ zpUOs5J}M=1{3RI*@JbrD8s)%tj@T-JFPVD&$D}DlNoGH7YnkPO>0b@FuI2b21?eO+ z&I@pg3(Wj%G3!wf+prV)Gstfi_O&tjYUbq}oo3-3##530Crn?N%M%b;gY;(pmNE0R zFSsrYEt=~kJZoOdCoiz5OThDbIDYym;PEg`CUX?9KC{vjBM&5-qrfQoz{a!;<7dd1 z+VEA-ei|#`>`GpJ6sr8PTX6*+VVSC?4`&St)G~MOgrHv{p z=f7r;V};F}@foE(0{A3T=~R6E3Z-qn16Wrj=%^TyrGwPRP>A{;h@muDK1QnzY`(E0 zHQ`8gowr!i>%zUuLo6Seh9+ z7jPhS6MAQ+G{eK}RLS(_;&wl2&{Pk{$~l-v zhs26n25&FE1&LgGXw~5daYm0ZtRbBVf!I)j5aPeb3S#QOsQi2fsExztDz6UN@X8{E9y^3Ar2!JIW#`A zKFIqs(%G9~WSadcOT=D0$)}O4H|5XBg57&l%M1PK??F!ziLk$Vg2eevkw_O7r3C#r z+*a5$LBsC@63YuNNOK-Yv-I0onz5}LJf8=_Of|T1ux*37=a5;nqYbe&$3e6e`0vIy z|JWXX!SfeEd)VvOAayQ%0IY0WC6V?oh3(R{1nb_6tp7=Llzy(J!mPG#g?A$Yb-5ie zle4JIPX@1-pWKuHNc$IU2nm zv9NACzrwLpNT2Dy4@N^yeQo#!;>Y9~1*uL(1af*K4z#c*PI3H)khCx{)AF!s0NvB^ zzmEV6wEv23q%k=j}nXqF|vHauk=HG&!u}bFx{dp@svA}3= z%b(BKSD;NM$3vdQc2$s}lvA-h{s!%K2YBDL{0!2Yj{j+VskJ3jM&RPt^K>9n<#zM_NpcLm*aLr1d|;q~xa((#g1} z24+$t;s#+q1$30Jjxwg*e7?hM@2N!_Mbx#q6;z?El!D4NJBF#M+D<~jk~CSe^?W^ayz-f|bN; z0puz=TzkG@NqH;Tp$2jtiz&F4!nlb$MrzYGBq_HEB!#`A<3T&FdlFC85P~!e`dzJ@ zP0R`bCFB!3>JpTXksa0?VsLN;l)>7$C!Lfs)-J+i=82GFSKbCCtQQsP6ho`yYYTDn zn|Bftc4A3MM&>$kE7f)YvNBVj0~?5#?%Gyx%Kez|xeO6d_SB*C$@zuu5*u*)kOK>NCn%nm zz&t`hvTOn8V{lz}ZVA*b!ejyRlKbRcU~}cJz}`nik_V1OHym7vBXgv*{#+jxN%#PA zJ{C6r8gcHD*MmX<3FLFNE} z-osFu7t1djox1zFW#$Wo=rlOrXcUK@)o$h4*4f`<_4ar_2HS4K`d-<~QOUz4N-po8 z(Kkcbd}<@Uia@6}^rH+#y*ReyABP%W0A(?35x?S7K|l6!hEunNbGo>CjGdfu1;mMc z(=bQ1nZ3K&9F^p6(!C`kVbhK!>>bRjNP7DDG4W;mop{RJBcv-QRN#sZrl@2>g-ZZN z!82XkGML1YNt8(DcEh(4`SEENC&E)xQ?0;h8QyIS?WN$+PJue%UOf0rtmzphhBLG5 zjc>xRMt%7wVK&qmT;o~;RmNJ=*wty{4D*%NbRXXQlJt3Oh5I~vhKm<8mfKZIZ+tU= zlsdAV>GdDy5D{L%at?>-*#ffEWoOdY-hl{zAxoGeB@i|npLntP=aA0+MKH{12VF_R z*&E*ixc*a^No?T5kPey*Hc=OHn|&RAFB}+{iS<-Yd*fDQaHLe*-$EmQpvr>qU=2!X z%aN+dy4sX63V7tJ8spSf>otHzYQX;@DoDG=-a*=)jsgF!FfCnp!jn+0M zMP&sC;CI`;sqJ*j7;7(&Z!yR9wHTwA(0;OImIUWt1=zQdHpKqAcHk+9^a7+;kpFbzf>zolA{>%sM&J1Y{^n=9B|jQrjPn55^l| z-yuhFR$lof;=CQEjhZ{?4}y*2?J!j$V};O#30tSN6jYHjaUKeD?SKb$cH}p?R@-<3 z+GcVR{uwB{v!R(QR-x44YPaz z!#VkM=|Y6ht_`Q>P+X$}o(-+JiDG+_u1)<-!8iGf=$jIG@{#D9l9WTx88Lq!CP+Cc zdo}Qkg?@ygYAl5ML25%ju0Io+7|!?}I8^*6quZ2IY3`~p%d^b&YY>M^1J<9$XWm>7 zDvfkyE4`&Tv-|DRtO9-tgZSyoZn&E~OGh<6tvvNaXGYxR1H}tRw@=}!EqBbUeu)pO zdJi9V^~-n&KDI%8;IQwVx))&(5Yk1aaC(3{wh=x$cdSxau<<^;YI)NY!hSr zZ}8Rhzf0en%IDvQzCHC#M*c)xaB3-By2|l(TJ+5eP#(^6@7?$=P>(LVsjJ~8AKS!F z7q|Jm3hmShM|PDjnM&DmrlGj(<<9gLJaX3YrmQ~l*MOvHesTGc??W$@M&K6=S0*hF z;$&%3PW7NEnb;Sy+Iy0(bIgnra z&uBuPq}0TH7-?Z8!xw#>5O2l;oNsU~$>&xX;uPb2AjBFN@X!oU z0fmB0wiR$k14S|MNE^!lI|bM~1^_)+;K<`9@T8-GEVqvz*xrH7{?f*$0+s_<+~fBf z6j7dSdN<%{b*KEd0$tZGW2ijfcw8u1>g=}RWwyLOAO&2y^HaG3#@R9pn87SyhnfW} zcfuR|86@#C;u2n`h)_w{1IxJ+mi4!6|7`#d9MZCHDNR~!@1K6Z@Rm%?IUYUXmIrg# zMMpzb?3^M8PBA1o#@y}wRb~KTsAI8M$jFc`Y7K;=R$)kXOddD|kIOJneg99w@MX(R zFE11YDWNMSHo$ujdh-Bi+}(3LO?@xDKXgJ_49H z52Sdr<=@X1+*7Yn7_q#&F&(BSbNG5@nbQZD#E^CbAi(RyW8)2|KG@9h{)$>-A<1Rt zTrz(ZbIrCnx~vL+4u-YoqK2k-ry>mTIS%6|p?9;?Bz9lW^Kew^O@LG758iL)JAd#F zZ-iat58g5LU|0ErceWYu!u)aCbfh7x3_{F@nTkJnhXG($`Ga?86}!qGyhHEURsP`p zV|?ci-apQF{@|T8RMoVmF=1#|`Gasw5!zM$;2kq{c9lPP$CQX&SRIfdx?g|}Vp>uUl~2iF$tO9+DwM%f zx2SGM7*Y_4S;QeYLFV=J9^@sX6))F$ zy<-8PlAC-vtW?!1sDPwEO0r>;^0y zQr=ypWC1!z!q-{QAxMN!y8{3D?*Xi6dcWm^_e^~X<#(fBDRpzHx1SUv@&HrLJ=ygy zhB)ucRJxaNc?=Hpp^zw5z0=U?%NLr1SH1=1gwVTNWvb%86HL`x(rL!s`sOeDXNGu;V7(% zJr^`DrG>F_Y5%i~3b@m~l-k`H@SXzkKUOgpIK|IRJ_(vbF}+@v=r2bn<+8-d4=-jE zP1Ma_f*IniMnrLiIenjS+}H3sxaw6aP&;6&RxJD$VQhTU`#W+?Lm}BkSf5|VGr!#` z{z>IU#~8kn`KpA3c!DadQjuHE$Mv8a7%>VNt>_ zQDWZDu}gdlxuGxb=R**)sy~X}{U3tmWQm4~)VLGbXt9QlnkJ0OK(uZ%U&?rUVc1aW zC{%w+n0EEscqsj68|T3e8bF(A){p~{yfhagF;$Y3!j7ix@E@(Xm- zuaI>5mH6==L5+eHA-_fd{Ph1sRpZS-+IXkG*QrkSwK+j4WeO;ijgHT9U#_)KjK(3eFH>jj^Uwm7mQoS{z4vum4lroM@o_@O!{Zq9Xl%lafaDhqAuNJYlbSMZBQT#yz7e8p z(vxSaKgW;yZpp+O$QrKmf-5k3pesn)5VIn&Mm!B1_9Disz(Vz5f)+wrYV@MU-01&C zKE!1MvC#atAwp)FuelhaolbgrW_b;0RW|bn;Gu&pSx)@u;A6q&V5uW76;Qf}Q*j00 zJb5_{;U7X>xQcI}Rh?{Me4sQtXp_PeFv4=c(g22V`Zb%)>(^c!Cf%Ew{xKB}oD79Yw&H@;dRf1kv(x%j?Hi`6z1|t!2}dhs$fx*(}oDF88VD@OW0ejNpv4(Np|a zqXD#MK-ATx9Mn$!gq;EUT>i zL9NL%4bJoM&niE~lBFx&GN|+N9_HjPKqMb(2PIkhIr+OV43}1qYov56`O)OsN@EuA zfRASyqb1B~RgN&HVaC{H+_TH4TiVwY1sN!SLqq|L!iZwKsnA|g0YQpCDs!qc?L9zB zbMYcZ=rBdukqhIvY>ylTamBs~oh*O`s;|TsoFha7(i5XXj zG5S`_^#foy1Si(Psvw`=gZN%&`E&6~F8&R&S^l%|Rq%n8%eWiym0yG{eeyO1b1)ePR_07=Mv5lvLp2D+_kY@#*b{JJBtmjcNWH55T@>8J`wtPU% z@XMUWl1h73Vb!aiiB3z~#lbgi7uY>B@LEBGa(-_BK{(8i{rgbh#y@kKaKyM_<|@Ac zAO=>YP!oQY%`;6e*k<}yh_ys!y7?M zl}V$er~`;5`k+m|*ESGow-gcsq#+e5vvg9pFzgByv(TncCCxP$Z(L-BDucCwxibqv zic)pdBz@jZS}VBQXUe-u1e-&k3nV8-L~Zj#M69uS2r{B4Z5|>)jZSD{%J3zd-zTGZ zr7{O`Y{eSf-X$DBV2XoOq?j)xiqPr1Aj~_(ZrLg%Vnk(`#vUg;3M=Lpkxq<4Z)C|Z zV1ynTBkqin@U$d?n$rMQ<cFT1LEQ@>#J20M z`UidZv&qlX*i#3=*0aEz`UQjloVpBvBk7lv6e2e2qdb91wy#Vva^J% zUrCIN^!w>pYVI1yfXIutVXv3tVT9xQzpKG_ZVcb|#_`2o0hBqj`W}U^iu0gqh%dha zd~MG0HQFykFmAsP?ZT?iXldJi!RCb0T-}3u@e~m!74`N8Jwh{P(RY;@LuQbe(2POb z#O#LgB^(!yk(7}vs29f;GJXS*6)WMJ5D_co21?zr&iIgSybNDS{Y*UA7x-iFxSs6qZoA`RXjZ1m9HP zBEbf#M4>Kr(wt_l0?vt!%jxMo2nucK7)PUC-$%Vn2@C2KoBWw)2NPlWg3p;B)KVsK z#BWd~B*-O}qCga%34dWMRF5c*tx2SY0ZYxmewV5Np9cM|SY*eB=yWnKiGCNj@N^h^ zf+wsw3-^NkJqL#kjNy7(5B7vRI(J3gr(-SNhTUa(OD$sU>lmHO{f)3<^tQRV*X{A^ z?4nNnq z{Ui?UWEq=bGt5Uj<*^1?-zYptkgkQZ&kPS%wKKT|(q{_$g4|1@r29-@Aiomr zE2AczW8sW2fx5WtK}W|-bfA@WF}XDEw_9FQ&_I1by9D)|@l<;B@QEcgpqtkLc$Ao< zGO-79lt#GV5X<%60Qz~e>nkn|>+G|On8Mvk;2{kX3&C8b+V3!ib^+m@gpN>|kC)5w zl1o3}ZafdYKOm`p1wt2Wv-1z+?k{w1OD)LDcCL1D$qQ962$Am=o~yUxnxsS!~z+s&K6F z*w(pV2*1t(ECksG*hLhEQx@p?-FunBgS+mR9ueSV8OI!FIQtJy?%i2fxklWfjGgx40Z+tdt&y^%td1K`5qeW!c-Vsm)(KozlriYQJo`>5p zyhnBlo@G1*7}K}VV~h@qP&*P=N4^kWL*dui_!PhBpcH;rxrg zBMn>~&=Kk!eD6(=8L8CK8PrV5wGGT<$~nhSZnj$9jh$<9(s#FQpO`uTdjK()V|%Xw zD4fGi(-fuSbPX%jjYX2QZWxH=LGF>*+;Kbt$`fhtX?)H|V_m6t9A4!<+0wF}j&Ae^ zwq|-ow~cp@SVfJgsK!!+R6$8LDo<^(c(aU?jzy~!Ni!bEPdR_0ZoN}im~&Pg?f~^W z@y|ijB>o@9|2OcDZpW)i#=FeXQxAM6K9+n7KMg?EuV@I`r>&sHjj0x|C^i6Fmk>6Y z5OzUA*r^F&XC;K4n-I2s1@8PoGmzGO=Ek*@R{y{|ucRbnz;Slzc9YB;y^%*9V*$ui z!(ZDKe|3|;;Ffof^0vkqjP@J(t0a64{`x1=lfNLEuuC`2UmXZh{AKb@^Vf=izXUq? zYq{pHqayw~v7Wzk-ylvG=EWs()Nfq9f6OYdV=}YTzUsAhFjvt zyVA{AOyI0Pp#k(hZ3QiEOttug8Wt1y>k`5y6T&V?2saa}&bWp8ydA7Q<#S z2zl_1EyqZJ71+&SXU{M_B8V%bp5^tx;9zxP!E+KrhZ93pe!F-*oc7m(zc$hM7(H(8 zKT+5ehL!Fn>f_Os!|H?V&ZP|N_~cRsd0A{uKMw(gGw9H}!YcQ`St0>zs(jGX!RP4q zGt@T#JeT3Ct@?!%60E@u)`J_Y1NRRNZa)PcE>m_p0N+U9#74Iv8@hdUC1NtuT`1EJy&q04Xs|Nl>^R8^7KufL58I zKIZ<+f=c4#v(go&0av{IMbM%h1wNc4ZYAeI&_+vh*0))JIRy`fTfGp;ia-j=IEZj)*{n7d9%agsU`Ij4uTYD1xYR zKBv)u=IvY{R8#O(nt`fRZ9q`gm`$oD#^3Qc1+;kc&X9X}>e)hd))n3dMf1FOCdrat z>phFl4KD=V+h@XT8o?OaEQedZFVJe+nlP1HbwX*N9uoA2cq zO#0{7QA!!IPFFh)UNRlE2^n4A5J3|$Jq;ZiketyiVG9G!y)HJbWbRNoFNFEaI@h}^LUd!fMHMlTs4tiG+l8VC?C{DyOZ+_tjO=zaWeqmVq zd5%vqa*n^(Nwrl4!|gdEAv!Xd3bbI)1=bZZbupWNMAb#`DnP})TNc3 zjbzJ!Y?*qpq4z4X&FRBRU6M_%xzU8fVI{P$K{OnMFr({3@FK#18fIuwcbbA>!hO|?-zLn!n(DA+q1Kdv)#+y(NE_fmXe z`M0V@aVzfU>>-*l21Ng{yy}CXpUUyMQGVE*Lx`*vSG!_q+)1t?=HaMSdn~IoDQP2c zb-kCfX30^nU=%5v3!3B#mbC-95N{HlaoTGuV<6F*w#m~`eAFhJi5{u`O1?C0lm4Jh z`r>V}IA{~v{$ZPJVlN$*rh$uREW;nzKLJ7$;XZRRM!4;9=d`p^$zJQj3s&HM4nF%P)lyF3-~fdX*B; zq~l?zLb7}=K+qKG1&w$%lEgAP|ATRM$Ly_Gk0NiWGG0qOEbn!ApizQP;wb%K3-I8d zGETfR;P}ojf^Meyf(`hig}C^{q(8$&((;~9NMw=B2RBbvf+S{|N()e!8K!0AJqv}4 z`2-`EG_lTMuJ6*IXS$xAosi`s zceRvlE_Zc;E)xsnL>*>Ds4Jak%bi-3Q5#=?Vh1NidODQY#!QS(ul*oh@I*9;a#s|u zw?k>TYtic0 zcsOx9+Jb#7a#Hus1@KL4RL8n`@?M$sq!qjQvxcDwzWEM$WnYw6z5EG0W^sSHkpdmH z{zS9c-n)=cci`Eov&(MYdJ%1VZy~WKE$=DJ0DTHW~0ARp_a@+rOd7|2+nUN2)&kH<_8lO*+e_$t%urb4YZ9^Mns@!foBmg>Dh zs%!ZoZA4EsuFoe)={dEP`G(L8S!HE)G!WxN5@twoZi zQA=9_wlj|R@z#)`XKbz)Nu&h{^Y5fY51jEz6pF|f@461qhM=~$n-entP_Gh3A3dd1 z-}XT(OyptwFWN26J~=1kpOxvAvsa4R`4niVn*;^7OfRQlt{CBmCvLljo^-Ykr zZRzUkD3+m)4`2r9>JKzzMC86Y@`DYLO?7VV*ynm=6kUBIU)tBzHw5`upT}5N6ZOZF zt|m#^)zu#g=y)?L8?$Pa)>!3WIN{U}C*Zpd z+-KV6Y)}r+&&{GJBGXDlHc!$tH-zJkb4mZVv2Ez7sIgXU8LjD>=LRE^?+*oS_EWT> z_yc7|R*I*rkvdHVTbep^0@ax$N+JU$DRv%)PeJY-2s2&1WGDfQq}WJ*C&fZVX~>$G zR-BmGTC*V;fTm|v(=!;ohCH_tqz!a>`y<)*h^q$C(CIrl@J+6XS!YltrwRy`6x*8E z(CKY8dJJ-CB0MdAOi^z~)qpc38@jGC7a^(!QZ zpO{}EA$Ax13W-p{;c7xGsiW&JBOsj8?`Y~cLY*!h8^|+sME3h&3x0wGXk@M0iKis}5YzPuFk*&PLhRgKAg$2$`JnBAN#lNYzuhwKcTDct zRaT8&0}!L`&Mx~(fVK? z0X*vCU-H?GKK==XZK#hWI~3*58nTD_I7sqPLz1@j@xv^W`uG=o(KJcap=sOb;~Aa5JJx6>5_*@{XeL1Wcg(%CreupruU%>uX_pV6T@vSQC^DXK z61D3j3Z`xP6AW5*sHU?zY`F&GHAtQet#;05KIeSqH<|Mx^km!iCwh^zIwuoXU2`|5 z-l}&BUKbazIhkwlV`1Klxe1jyxukcea$or8}{B(K(h^7Tc1Kj#tHnwkxd{_;ng+$@9L_Uy0@eJ<3DeFx{9sxt@l$pTvJ46TNG*~JAHtvb@KYW#Zsmu;4{ODz(T z>_W%FG)}Wznitd^<=7+CYvHIiIb}eta_R66gGAzCP;2l^>jePof}?7@B90;O3K#{L zqdB#N4m`y+;N3P@7lpG8G4GzhgL4|nts;SZwxGiVm|Xyt#88GsfkRdWDvF#>JNGrV8bWa4k-xI#|c75wDyyv8TgZCUq$6IT?gGKyFJB0fq z2IwmvXrkc>E7@1RG;|*v63W!$U^8$`ANQ#YC;C(*58TPmK;GbtMLEJ=9Sl4oZU}v{ zdGQ(~e0nOnbK-BzbKrPSMGiS-_3(B|rLB-MUIN&M!9O+N z+B3(`(;hur&in1m$U>V%Gv)NxjGQ3rI&y++u2hf%E5qfma^S4pYvY2uV3y%z_<8y) zkH^aPb>O7m@Ko6u9Uu%*tXJM!8V?!dv7JYf5O^NJC++K-fpg6`dlxnZJ|^R9EvGx1 zj%e;P2sJr>W8&CNaOpQhMY01P7$oALnEAI5vw+RsI$Xc1QbqZ zhd8y}B&V?y((piy)7k`_Fd?Se{EP;iTG%-Xr*lJ`CL18@*3k_gZ*$CW1!bOl47DH-bJuiSoG^qnqa=w29UX8FC@md$aViUB0)mXvGP3El<3pRy#GwuD81J+*-SHOaOR2Gqna4REA(ziE zQ!~e(qsLK-kNeZT>6-G?WgNI{fR}M}H7l>n%GTVPl2OH3`QA*dIEM8<7E7Zwx;RL+zE!GAf>al_N;Ms%dLdtE(>(&7iTOpe)LS{U`q3QL{O??U5DdT?%EZD3 zyY>|5gd{=(toe_Rfk6W@(5^22Z#8WlEDT6kP|)rKeG3pxqnfYtv zRJPe4SLps&w^t;RO}oBfq*dqqzp$pHMJF`v9j;f^{q%jHZ_=9XsJrf#$*KPee^jv2 zBzccoyDL#zLqW5Ne4R}07g$RjwA?NqcK;vTFLs}PYoLE1!&e4E{P9lz$H>TNzUE!D zLVI#6d5zU8V92($#%d!i-q;$emo#LIt+9G(LnM84>%0vLNYWasb)J-<(#2jcWfs+c z6W2U`>@ciW}oAmp{eBv_+^Svy{M|voE@tB=iPt@y1M9RlPAL3)+BO^)b zePqoBTblzqUcr}UsjduCy^=4|M*jtCtVXav;)yj@@f|twb7x7NC)QXg>gh?;5ce^ri0xwIQlHlm2|Qmb$j}e*5$KuNnufXm_~$>*Sk$F$w6)%PY%taz>I%`F zy5~5&n5@~B-ROLW1TT+iwRykiOxXHI!H*h@froyyO1lH`CJ-%BMQ}vk*#=P zJ^Q^$v)|RKK=R)YQQpyLJ2cT1z;I~wPOLQxJS$1#$%WxAuB6!F3f$Wi*G`t~7wyap zO?3BkWW5zYeFMq8rB=jTz7hp?E->g@HG{rI7?k|^d6cXDv~+au0(UleHzU?; zh$?csU7RtSu96B;C4gue74YD!CO$2$t=j2Jed~B|XU~>TaD0J2!F_BAu|lGzTbAMr z$y!5c6$?WBbqCrs3*q?=aEYvwd^=f9ZTHrPk%^vvA9#oNdXCQD^@Vf|dNJCb+7Jb^ zCeAzPtMSY3+PXGN@Ww2!+_@R(Q`|=ws?t#nb-YB0M&rRW(ZDGG2T^Zaly3;50MAzviSP_xgyVL!;-oS_r zZF!eZgV%sMIvh{!{GA@(LCcAKLA#fK>MZg$g#UFxha&~&5r9gMzDW)4eE3Z>eORQ9&rH1GIKaQ8O4w5_}IJR z!lpg}k3}gve`3C9ct6009aI5Mmp3)@qNRl+cs z9{;bAZ{Yn_yznhCZ-;Mx zp1`+b34FUCiEpn*AtGb$jL!K>lVDyf;_g3T=ll#MXsh!JGI_~kbhlOKD`ql#3 z3&|skrFL2A?s(>T7cA*^=Q-Oli9Z^&&qt#635GSh)uND?pBJy*e7{J(86Nk z!H;!9s5LA#XJ{K4jH7GpsrkEOoV0uGsaCF)c@6HIn6*W!)C;oKz|gN##>uK%8~XUj z`N071@X^^#kD*jYT~_AlG2rm%oTf>^Ln-4bl!3kY*i)O5U9zzq712s&EDG;;N&~VO zIVB6N$6Q(X+>bTY*e-}`BJF~=7uz1&XW_fz+U8u%DRTX(D5gK%mxkx|awO6N$H28! zKV7=kR7b|5JQ| zHndZokb^txQD|EZ-kvZzuqwI9=fkf)^)fKXC1?vUBDS-BmMt=wkexky=m8 z<<9qsoIKP_40C->H8R`yVYD^Q;SToI$E`kq*b5lAPQ~@G70vNp0H>&A>Y5#a_Wa+q)Ex%AavBqBn&%*?aGt&*g5Njb5P4!ZiHPS8*0Y z&7t&({0JvW0*_weBne1g=3aN*bw!!lxdOyj zlp5e5KtAW5bW+M#yQs_ZPDCZHybX4IN$o7wDTY?Zr2`~`cM=j(C}fmOFw?SqSdo5P z!72Cmb$FMdD3L9CegFOFcpNX7#!1E=7a9ei7>>V=SGZF5*EUE^3s?|H+hXAcHubP9Sqi6aK4_4(&U%JBECQdY{xxz7ZQrC_C>rT*=nJGWajR+1zKo( z9$itV?a_47Rt^4;--w!3 zn|P;Nm9*)7f()WXpmz^H)>*PM7hzv+$Ro73Fv`|vaANR^lB!7NXw>|n8b;aQSwX@R$IqG6ul(c4k zaQ7VKlrUkF`T-#KiF@q09iX}wRqf#13FPVsxVQ&Yrr z{TPKSh#JK=)cZQ`esW_w>U|p$ihBPZUh37m=+nnUzjN8tf2MvQy<}(9Q-nE?;$0> zOfh#Y@c}}Y;{K^u~ZUwQ2K#o;F5I%`<9pvmh|tD-Kp$@H;jSZ3cTMPfIIaA zLPa2sS$Df&3jY%BZyoh>M#YkiIX;}|?i9S{ZuK(Y+L`aSOLH?0c38t}?v7RL1p}p& z-wU|@ACZ~&C~%j$%D4C%8R{d;mWBLWs!t{O#cy89`Bd6e{1)Fg*UnCl%0TyYEjh9Ep3S#T9_-3J)FYc!RTK+ij zE*?C(eQF^qU{AU&?!`SX)TvT9a!~184Ic;AC$V zs^Cu`kLfu8GgdJd6fM)w;+^=>HxI{-v66Mbeud-11#&S49o7t5?$u1$*@q7C5a?L6 z{1;O03M=?eLNQ&XIpElR@kTDIWGtUHaVgttTeg2TN=58`h^>5kTX&zeJ^uyZ;KKrT z@3;Ib0SZW|vE&g(=>k$@U_Phu)@1sCWI)sZ=AP?iC-^Mt8 zWfx{AN@Wy(GT!>3U38Nj+KEp%#>$yq%|iI__Xmzhdpgoq?%p;)REIkZQ=vMw1hHsl z;Vd+^Yn#(d@ggRW9Jn`!?6ADJSW}PvxOlo%PJ@@o z$hyS^6XD?lQD5?Y$VXlAQj6#dGn};adf^!92)dj9)bW=ReAvehtof22cUA-U+5SOH zc285;VB_k`xKj1#+%dpWl`q>h-pb6 z5bfWm!^i{A)x=Z88Ql?+&t+G?f&QUbno}gr8gwp6vneUfsgi~QQqo)%rI}++znCaM zXH?}yt1 z1{GS6L0Bfg@Zq$N+d3c>Suc)H75xbt_+-tZ93R2ijSCH+DE0Q&XM%eNILybiOQj7C1nk4@4!e~sUqgLjMd10I%zEVyRuSZE?voG zrNN=e<`%`#MEwk}x5#S9;sM~`sCqO+XH0LVL<y8DE4tJL!j0?3ag@b zyKOl45{P#exWK;=pBLPKPppWvrk)CB5qZHW{5qTD)xAR+D*E#j_d5%6v8eaCUs8hXbW1{h3kv zyLEadnL0wJhi5s2V|Ewtemvnk2nR=Q|4^34A|LiFJJvu#; zOdX}uVs@V~0lGs)C5 zG(Icq(yxuu->1_v$<(n-zt|K-<6|69B6C1Vvao>no)hK$n$F7!AWgmBz*u*&!$Gv1#L>2qI2dc3 zWK^4XZ149qDHR;*G)ZfFzl%q+j5wUrV{m>OPpI($vm5Jxcc0;{0GicLU=vZFVOBpW zPpf)|Jnbs9Fv3&SPswv;_2cr~ppttqUrK$3e0e8IZAakeJPfdX(!|2FX6O`Fz4(PusM-uettPh~Uno^z=!@!dwpr$4Fu!;D2F_mS#c2K6Afe?y6BTw# zBaZ(`R21vGI=tKQg2$&=@fRYE<9q0YmG8x|*SL2Zd+n>rCI9RT*i(QV`VR^<{)6YR z$pZhubsP+U;cEN`#0ZWC@gH2yTBttQ54aZ)=joRr5aurI(aVt(z5!{^Zz3KW5%swD zWkk8MNDq2Le-U8^{vv6YU!oPYlZcpUhY{9vq}2Gy%9jRJyo8+$I`un!j(08+2Tmvg z9m{|X5jnLAKUHGb<@l?aI$hekFYTSe*G#rAqX?T3!q&K)NMs~D6$vZ%V8ox^p8pP7 ztB!|XW9;{NHBKh2XB0kT+C%TXn&9nS%|8N-+ z2`{`AFkT242|f))#Fjpdi^QkF(xtXtrG4QFkji4MfGs8Zhhijxcd}CG<>=M{k*h;0 zey4JEL>0IEEy~pq`Z^AMxvIZgV7r^fJAnU1#Gn2+h>|*g+!}<4KkkyaKaL2)AIAqq zkZicL{L&w%+s!UjfTL6;l?FSoL-=cu678Ro%HX;M@zSO8{poG9kyxs57ph>#+m7S^ z-n8y3%Z;V44BF2Uc`oB43$5e>8IEiQI3~1>^HHyhQ7^lEf@)q{nwRa!_N2TcN^}|E z;Vr{_YkAO``~^nK&gAd#>p^`ehgPZAn*8D-gnOHVpkyBx%N;|xmqa{;D`NaJQJ$Nw zxG}ef<6Q`Ji{o^{XukuTAHs#Ue-_e5Y1IMK#1&Ikp*$(F?OjG!g=jN2kcVo{AyIiy|7Rl?6iOOvJXmWP;VXFO6COtRy5ej332%*nXYb!kPDTRM zoCNSTkZ3{q&tdA|4U74wMD1suM4)yXBUg$&@;r4R~MJ{FY&J_P&>B(UDHGIuLe*Gzwm|}eN<8Vj# z1GA<$pByCk3lj8Zr+h&3pN}78K99b^kD+6vw&zDe-ypn#6qMR47`3~j`^ve-(Kkju zLB`kk1etfaYQLGNyNutx>#~qF!NkH8<|(x8WEl%|8tA1@pebnU;dK%zk~7f{5yAaH z4cw_@xECN;!(C6fiJ5BQey|4ag~@PV7{R@Wa1%4t!o9u*?#0P)FNxqz6K-OrTDUjV zz}=7x7nkA&bl6C^iJ5BQ-dF?o(qy=sBDnAnyIx|ZTDUjWz=az*i67v64Df|d)b$cG z)xy2G1}q)Us)hTZ8n~}ahPyd}dnMr} zW~znz;TpJGlHtB8g8OR1P0Uma_l_F4uStgc+6eCJ2sbfPE!CudY`TV{ze77w*3F8Npf{^`EQEK-^%h6Gu6WVOby&OC&PV91oy3ko0zE< z?q_S@zAYK<+atK|Al$@EgiAe3IjzSAvnP}gz7bl{^lqyu>YXf#dEn1AHmW?-R9e1L zSJBeF4a!Eq;GJL`1qQ>#8=-mAQvxQOlqS6A0N$n4o%OzD6l9hc)w`0L7h);kO^V!;ymQP=8)MtP!T3B8iTUjyVflY>IZ(1y8OJ7BbQ~khLVY)}zCtTpgS)D* zZ+Hqv%KIP&n3yK8Qry!;IWHm(g+>&3*v=Z_03QOA z$UGr^6VrhI;;?R=nHbtbu@9N+2pBZxi-`Fkav0ZubfFJ|dw`dM(XoD;o*yyy*oQEJ ziMbRoT+uf4VMb|P;FqwCJv$8JCBhFFCn=h7?m9y6fHwj2cz{CD5?2amlFQS*scCvs za=P=v?qvBKcOoA)F9Fyn(#2bipMv>>wP z+bfXBz<8i9qr5e}nYp0@snepKgG1+Y9h@%`4zo1CIleiZdm7<RjO-F0y8CLCsIfb)aqaOlvk zgL5C@FiQiR2W#QXiLof1{1Kc3Zt1|X7Q_22K`~bYsE^lxDt93x#V00;V|8S8@;>fwB!aG0e54jkCc;M`pc=Q)}* zof-dTNRh(C>P+4T`?{M6qX95#(+u!UwSXye?jVB9qTqO+f;vSo<^JX;Lo!A!9MiOv zk+(xeUY;N$=>%hL9L1$%+!y$(CCTeb|V_?OK-xQ;oYxb&WL1q zBh2+NS-&sY+tHx2q@Xt+o$FF`BraVy<~4BZ~O9n2)pR&1iS_p4r=0~ z%l{_>IL>wBn2x_SgNcm+3?5|wXZ!bIKg#iUp+&dBq6NXei zBXd8du@W$^h+t}nX$6tf{tBXr^)ENFjC^Nlemb+YE31kg$V$;1ngvO-#SC`jW^jDX z;%^LyUxj1)G}jWSJcFix6F~Vl<7e_Cn3o;)Z^0{MDK(>Y7t!tlw(2kIIwy#n7$FbG26mLRZlQRyOQ^5O9F{L=Z( zESDPf)Khr-V}r8&-I-@!p_PpQY5 zyfFAw6jpwSgMpH?VPgx;inkE*hb>gelsYHB0cgd^B~QUGSPuQhG_bZuwU>r<0Q?3G zt??uj$ksRp|7;1Y%QDz1OG-=}Z;d{-#&Kwk17FPe9O6ma^VlHISn_v-)ilVZY>?+H z`H_T24RYXR2w=W-OTNgcSev{7->LzlHd%T(1K%zwqn5d3$(0fkHO{)y#(3kLQ1auA zb82Z#ym1aJEsr;#A$)RmK)#gnKFn^|XZp8Fn6)5Zl%Qgvc$w~7c~koPy|ATY zrit!{FgK0O=!XODKyIMZ93AjsIlEoiE$0^|>}-B(XSUzY_oqtx_1e9ut#rP4_n^C% z`yr-2f|TWyJ+K@z*jTmEh1LEaMbMUth0`&5Q`jE^mrkz@p>n4=I$r?yr}O=p(q6sk z-pp3c4Ju&0b-=Q2FXT~wrZ>||k@OX-j5^#;q1cU-9}9{t6m9IoNH0ipGe%}PX8aYe zo`UC97qbc;!R=nh~h9Ajm0;2;yo=AJ(pGzz4DOb{|^D18$XK`PGgnA zf{mZS%Xa5Gm;jxEDddiAV$6VdCOuN?bo)U@vi�yJ?GPN7KE{^6q9c6u=B9yWE2n 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

^?n;Ijy6fy%)t+5w-er%o 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 U#}n8P0G>|+ES!#|3cJ(&3*b{xUH||9 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Threading.Tasks.Extensions.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..eeec92852705946904d0e2fa0443d454075781f5 GIT binary patch literal 25984 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 X8xk??{<$qV(@xwRy_&qqMCktjQv_f` literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.ValueTuple.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.ValueTuple.dll new file mode 100644 index 0000000000000000000000000000000000000000..4ce28fdeac6da139573ed0ff356c2df510692cee GIT binary patch literal 25232 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�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

D^p3&BfPGqz*qjxgei_sa3Rx;X&(NT<6 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 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x64/native/WebView2Loader.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x64/native/WebView2Loader.dll new file mode 100644 index 0000000000000000000000000000000000000000..b3e5e4e4c6bbc775770d94a157d46f8060b0328f GIT binary patch literal 165336 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

W_?-u{Wx*wG{#{*8`UEfk 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 Ee+IUKqW}N^ literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x86/native/WebView2Loader.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x86/native/WebView2Loader.dll new file mode 100644 index 0000000000000000000000000000000000000000..e79094a27b09e3547bc65f205c674371bebbc5bc GIT binary patch literal 116184 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 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json new file mode 100644 index 00000000..bf9f641b --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json @@ -0,0 +1,88 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj": {} + }, + "projects": { + "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj", + "projectName": "CopilotTokenTracker", + "projectPath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj", + "packagesPath": "C:\\Users\\RobBos\\.nuget\\packages\\", + "outputPath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\RobBos\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net472" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net472": { + "targetAlias": "net472", + "projectReferences": {} + } + }, + "warningProperties": { + "noWarn": [ + "NU1701" + ], + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net472": { + "targetAlias": "net472", + "dependencies": { + "MessagePack": { + "target": "Package", + "version": "[2.5.187, )" + }, + "Microsoft.VSSDK.BuildTools": { + "suppressParent": "All", + "target": "Package", + "version": "[17.6.2164, )" + }, + "Microsoft.VisualStudio.SDK": { + "include": "Compile, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "target": "Package", + "version": "[17.6.36389, )" + }, + "Microsoft.Web.WebView2": { + "target": "Package", + "version": "[1.0.2478.35, )" + }, + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.3, )" + }, + "System.Text.Json": { + "target": "Package", + "version": "[8.0.5, )" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.201\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.g.props b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.g.props new file mode 100644 index 00000000..a6048d03 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.g.props @@ -0,0 +1,31 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\RobBos\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 7.0.0 + + + + + + + + + + + + C:\Users\RobBos\.nuget\packages\microsoft.visualstudio.threading.analyzers\17.6.40 + C:\Users\RobBos\.nuget\packages\microsoft.web.webview2\1.0.2478.35 + C:\Users\RobBos\.nuget\packages\microsoft.vssdk.compatibilityanalyzer\17.6.2164 + C:\Users\RobBos\.nuget\packages\microsoft.codeanalysis.bannedapianalyzers\3.3.2 + C:\Users\RobBos\.nuget\packages\microsoft.visualstudio.sdk.analyzers\16.10.10 + C:\Users\RobBos\.nuget\packages\microsoft.vssdk.buildtools\17.6.2164 + C:\Users\RobBos\.nuget\packages\microsoft.visualstudio.composition.analyzers\17.6.17 + C:\Users\RobBos\.nuget\packages\microsoft.servicehub.analyzers\4.2.102 + + \ No newline at end of file diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.g.targets b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.g.targets new file mode 100644 index 00000000..5b23f794 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.g.targets @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 00000000..3871b184 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotT.5379EF51.Up2Date b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotT.5379EF51.Up2Date new file mode 100644 index 00000000..e69de29b diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfo.cs b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfo.cs new file mode 100644 index 00000000..d27e68f7 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("CopilotTokenTracker")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+15ad8705022d8ba46ddb87de724b5f7dcdb0a09b")] +[assembly: System.Reflection.AssemblyProductAttribute("CopilotTokenTracker")] +[assembly: System.Reflection.AssemblyTitleAttribute("CopilotTokenTracker")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfoInputs.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfoInputs.cache new file mode 100644 index 00000000..4b0b753a --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +e358e8b32cb3f06f41881dd044ee062c3963188a65f86d7b4e3423f43366f534 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.GeneratedMSBuildEditorConfig.editorconfig b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 00000000..cd0d1001 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,15 @@ +is_global = true +build_property.TargetFramework = net472 +build_property.TargetPlatformMinVersion = 7.0 +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.PublishSingleFile = +build_property.IncludeAllContentForSelfExtract = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = CopilotTokenTracker +build_property.ProjectDir = C:\Users\RobBos\code\repos\rajbos\github-copilot-token-usage\visualstudio-extension\src\CopilotTokenTracker\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.CsWinRTUseWindowsUIXamlProjections = false +build_property.EffectiveAnalysisLevelStyle = +build_property.EnableCodeStyleSeverity = diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.assets.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..23dbcff92e5f7612e1d0bdd3edc28eefbadc9369 GIT binary patch literal 50588 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 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.csproj.AssemblyReference.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..999271c44ade761b57b48e22c33e6eb2a5c12c6a GIT binary patch literal 115567 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

fwg{o2Ek<2EfNRJH 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 R{O#?Rk^lc?`M+8N{~uhvD=+{6 literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.g.resources b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.g.resources new file mode 100644 index 0000000000000000000000000000000000000000..d27ac728be5cef224d23a1ead6b2d9cdb2e824c1 GIT binary patch literal 1546 zcmb_c&2G~`5T3+t0<;AQDj`9t8Z|;7Qs>V})1n;Opj>FHDv3xBJ+QVX)Qatm)*F)C zP%j)2a6o+l9)okm0rkWKaN>rMAK1g<^IsuVJRNw*0HHuFEY4e^{?0j|xx$xM1vVJP5vz#pktvjSG2| z0~OPT9$4UlDd--gA&|BKg@gkG0>&xF#Gi(;;EoEq*mDFGj9cGifH^^ILmf6@L;SY{ z_jt4-;EMqX1R&d%!Kg=DTy3HrtVb61a%!{FI*&_ML?x%KmehRV&#}po64A9%M$^n( zF_Xoc?JdJ*D=u-+>ktFiCtJKvJP#e+9+W4axiNVQAaOkc*DADQ*_5BYRD%(tjcl;3HoQ@xE@#x1M9dP+DAacudgyY(MV?eB!}H+$b<*UsdMjTl z6p5KHYM3u1_9fUG*IQ*GMm@^f(@>5wkT5IH-1F4XCs7HOu2c6vto)q!iP{Y8gz7hm zH;t$)RAKFa^UiuY?HLE?5KnbRDQZwB-Lu?QKb^~Dis?Ra>~v@BWn_qg1TxG(q85Xl z(EmMgYzodUtVjB(e}Q&}CMM7<>`T3;xvAE{xpMWZFGYP&@A=Z<5LSX7vos5EIF#fa zkx3WTaE}W0zn1pQF+EvZ)0# zdEt#8&1!f2hIYVw72*~rtZ>XQHf literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.pdb b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.pdb new file mode 100644 index 0000000000000000000000000000000000000000..37ea67cdf8a300cf3875651cefc2ca7d960b1313 GIT binary patch literal 18936 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 b2u>B`m5W*H;aJ{nQbJI|ao3ZkY3jcLy@Q`= literal 0 HcmV?d00001 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/ToolWindow/TokenTrackerControl.g.cs b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/ToolWindow/TokenTrackerControl.g.cs new file mode 100644 index 00000000..80c66d82 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/ToolWindow/TokenTrackerControl.g.cs @@ -0,0 +1,100 @@ +#pragma checksum "..\..\..\..\ToolWindow\TokenTrackerControl.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "BBDCBD21ACC6EBC8A71D04E0A9E15A5EC8CBAFD9" +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using Microsoft.Web.WebView2.Wpf; +using System; +using System.Diagnostics; +using System.Windows; +using System.Windows.Automation; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Controls.Ribbon; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Markup; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Media.Effects; +using System.Windows.Media.Imaging; +using System.Windows.Media.Media3D; +using System.Windows.Media.TextFormatting; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Shell; + + +namespace CopilotTokenTracker.ToolWindow { + + + ///

+ /// TokenTrackerControl + /// + public partial class TokenTrackerControl : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector { + + + #line 7 "..\..\..\..\ToolWindow\TokenTrackerControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock FallbackText; + + #line default + #line hidden + + + #line 16 "..\..\..\..\ToolWindow\TokenTrackerControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal Microsoft.Web.WebView2.Wpf.WebView2 WebView; + + #line default + #line hidden + + private bool _contentLoaded; + + /// + /// InitializeComponent + /// + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.5.0")] + public void InitializeComponent() { + if (_contentLoaded) { + return; + } + _contentLoaded = true; + System.Uri resourceLocater = new System.Uri("/CopilotTokenTracker;component/toolwindow/tokentrackercontrol.xaml", System.UriKind.Relative); + + #line 1 "..\..\..\..\ToolWindow\TokenTrackerControl.xaml" + System.Windows.Application.LoadComponent(this, resourceLocater); + + #line default + #line hidden + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.5.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] + void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { + switch (connectionId) + { + case 1: + this.FallbackText = ((System.Windows.Controls.TextBlock)(target)); + return; + case 2: + this.WebView = ((Microsoft.Web.WebView2.Wpf.WebView2)(target)); + return; + } + this._contentLoaded = true; + } + } +} + diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json b/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json new file mode 100644 index 00000000..cb4093a0 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json @@ -0,0 +1,6147 @@ +{ + "version": 3, + "targets": { + ".NETFramework,Version=v4.7.2": { + "envdte/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90a/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90a.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "MessagePack/2.5.187": { + "type": "package", + "dependencies": { + "MessagePack.Annotations": "2.5.187", + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "System.Collections.Immutable": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + } + }, + "MessagePack.Annotations/2.5.187": { + "type": "package", + "compile": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/8.0.0": { + "type": "package", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "Microsoft.Build.Framework/17.6.3": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.2.2146", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.3.2": { + "type": "package", + "build": { + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.props": {}, + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets": {} + } + }, + "Microsoft.CSharp/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "Microsoft.IO.Redist/6.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.IO.Redist.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.NET.StringTools/17.6.3": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/Microsoft.NET.StringTools.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.3": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.ServiceHub.Analyzers/4.2.102": { + "type": "package" + }, + "Microsoft.ServiceHub.Framework/4.2.102": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.VisualStudio.Composition": "17.4.16", + "Microsoft.VisualStudio.Threading": "17.6.40", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.ServiceHub.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.ServiceHub.Resources/4.2.8": { + "type": "package", + "compile": { + "lib/net472/Microsoft.ServiceHub.Resources.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.CommandBars/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CommandBars.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ComponentModelHost/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ComponentModelHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition/17.6.17": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Validation": "17.0.71", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Composition.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition.Analyzers/17.6.17": { + "type": "package" + }, + "Microsoft.VisualStudio.CoreUtility/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Threading": "17.6.40", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CoreUtility.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Debugger.Interop.12.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.12.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.14.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.14.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.15.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.15.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.16.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.16.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Designer.Interfaces/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Designer.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Editor/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Shell.15.0": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.6.11" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Editor.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.GraphModel/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.GraphModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ImageCatalog/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ImageCatalog.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Imaging/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Interop/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "StreamJsonRpc": "2.15.26", + "System.ComponentModel.Composition": "7.0.0", + "System.Private.Uri": "4.3.2" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.Intellisense/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.Intellisense.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.StandardClassification/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Text.Logic": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.StandardClassification.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.LanguageServer.Client/17.6.42": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.ComponentModelHost": "17.6.252", + "Microsoft.VisualStudio.CoreUtility": "17.6.252", + "Microsoft.VisualStudio.ImageCatalog": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.28", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.LanguageServer.Client.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.OLE.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.OLE.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Package.LanguageService.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Package.LanguageService.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ProjectAggregator/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.ProjectAggregator.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RemoteControl/16.3.52": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.RemoteControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RpcContracts/17.6.13": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Framework": "4.2.100", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.RpcContracts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.SDK/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.CommandBars": "17.6.36389", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Debugger.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.14.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.15.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.16.0": "17.6.36389", + "Microsoft.VisualStudio.Designer.Interfaces": "17.6.36389", + "Microsoft.VisualStudio.Editor": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Language.Intellisense": "17.6.268", + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces": "17.6.268", + "Microsoft.VisualStudio.Language.StandardClassification": "17.6.268", + "Microsoft.VisualStudio.LanguageServer.Client": "17.6.42", + "Microsoft.VisualStudio.OLE.Interop": "17.6.36389", + "Microsoft.VisualStudio.Package.LanguageService.15.0": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Design": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0": "14.0.0", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.TextManager.Interop": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TextTemplating.VSHost": "17.6.36389", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.VCProjectEngine": "17.6.36389", + "Microsoft.VisualStudio.VSHelp": "17.6.36389", + "Microsoft.VisualStudio.VSHelp80": "17.6.36389", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.VisualStudio.WCFReference.Interop": "17.6.36389", + "Microsoft.VisualStudio.Web.BrowserLink.12.0": "12.0.0", + "Microsoft.Win32.Primitives": "4.3.0", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0", + "VSLangProj": "17.6.36389", + "VSLangProj100": "17.6.36389", + "VSLangProj110": "17.6.36389", + "VSLangProj140": "17.6.36389", + "VSLangProj150": "17.6.36389", + "VSLangProj157": "17.6.36389", + "VSLangProj158": "17.6.36389", + "VSLangProj165": "17.6.36389", + "VSLangProj2": "17.6.36389", + "VSLangProj80": "17.6.36389", + "VSLangProj90": "17.6.36389", + "envdte": "17.6.36389", + "envdte100": "17.6.36389", + "envdte80": "17.6.36389", + "envdte90": "17.6.36389", + "envdte90a": "17.6.36389", + "stdole": "17.6.36389" + } + }, + "Microsoft.VisualStudio.SDK.Analyzers/16.10.10": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.VisualStudio.Threading.Analyzers": "16.10.56" + }, + "build": { + "build/Microsoft.VisualStudio.SDK.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Setup.Configuration.Interop/3.6.2115": { + "type": "package", + "compile": { + "lib/net35/Microsoft.VisualStudio.Setup.Configuration.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net35/_._": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.VisualStudio.Setup.Configuration.Interop.targets": {} + } + }, + "Microsoft.VisualStudio.Shell.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Design/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Framework/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0/14.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.TaskRunnerExplorer.14.0.dll": {} + }, + "runtime": { + "lib/net40/_._": {} + } + }, + "Microsoft.VisualStudio.Telemetry/17.6.46": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.7.0", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Newtonsoft.Json": "13.0.1", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.Telemetry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Data/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Logic/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Logic.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI.Wpf/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextTemplating.VSHost/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextTemplating.VSHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading/17.6.40": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.0.71", + "Microsoft.Win32.Registry": "5.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Threading.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading.Analyzers/17.6.40": { + "type": "package", + "build": { + "build/Microsoft.VisualStudio.Threading.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Utilities/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Utilities.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Utilities.Internal/16.3.42": { + "type": "package", + "compile": { + "lib/net45/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Validation/17.6.11": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.Validation.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VCProjectEngine/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.VCProjectEngine.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.VSHelp/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VSHelp80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.WCFReference.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.WCFReference.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Web.BrowserLink.12.0/12.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.Web.BrowserLink.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net40/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VSSDK.BuildTools/17.6.2164": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VsSDK.CompatibilityAnalyzer": "17.6.2164" + }, + "build": { + "build/Microsoft.VSSDK.BuildTools.props": {}, + "build/Microsoft.VSSDK.BuildTools.targets": {} + } + }, + "Microsoft.VsSDK.CompatibilityAnalyzer/17.6.2164": { + "type": "package", + "frameworkAssemblies": [ + "System.IO.Compression", + "System.IO.Compression.FileSystem", + "WindowsBase" + ], + "build": { + "build/Microsoft.VsSDK.CompatibilityAnalyzer.props": {}, + "build/Microsoft.VsSDK.CompatibilityAnalyzer.targets": {} + } + }, + "Microsoft.Web.WebView2/1.0.2478.35": { + "type": "package", + "compile": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.Web.WebView2.targets": {} + }, + "runtimeTargets": { + "runtimes/win-arm64/native/WebView2Loader.dll": { + "assetType": "native", + "rid": "win-arm64" + }, + "runtimes/win-x64/native/WebView2Loader.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x86/native/WebView2Loader.dll": { + "assetType": "native", + "rid": "win-x86" + } + } + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "compile": { + "ref/net46/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "Microsoft.Win32.Registry/5.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "ref/net461/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net461/_._": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "Nerdbank.Streams/2.9.112": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.VisualStudio.Threading": "17.1.46", + "Microsoft.VisualStudio.Validation": "17.0.53", + "System.IO.Pipelines": "6.0.3", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/netstandard2.0/Nerdbank.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "compile": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "stdole/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/stdole.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "StreamJsonRpc/2.15.29": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.1", + "System.Collections.Immutable": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/StreamJsonRpc.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net45/System.Buffers.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Buffers.dll": { + "related": ".xml" + } + } + }, + "System.Collections.Immutable/7.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.ComponentModel.Composition/7.0.0": { + "type": "package", + "compile": { + "lib/net462/_._": {} + }, + "runtime": { + "lib/net462/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/net461/_._": {} + }, + "runtime": { + "lib/net461/_._": {} + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/7.0.1": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Memory/4.5.5": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Numerics.Vectors": "4.5.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "System", + "mscorlib" + ], + "compile": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + } + }, + "System.Numerics.Vectors/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "System.Numerics", + "mscorlib" + ], + "compile": { + "ref/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + } + }, + "System.Private.Uri/4.3.2": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "Microsoft.NETCore.Targets": "1.1.3" + }, + "compile": { + "ref/netstandard/_._": {} + } + }, + "System.Reflection.Emit/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Reflection.Metadata/7.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "7.0.0", + "System.Memory": "4.5.5" + }, + "compile": { + "lib/net462/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Reflection.TypeExtensions/4.7.0": { + "type": "package", + "compile": { + "ref/net472/System.Reflection.TypeExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + } + }, + "System.Security.AccessControl/6.0.0": { + "type": "package", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net461/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net461/_._": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Principal.Windows/5.0.0": { + "type": "package", + "compile": { + "ref/net461/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net461/_._": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Text.Json/8.0.5": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/System.Text.Json.targets": {} + } + }, + "System.Threading.AccessControl/7.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net462/System.Threading.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Dataflow/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Threading.Tasks.Dataflow.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.ValueTuple/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net47/System.ValueTuple.dll": {} + }, + "runtime": { + "lib/net47/System.ValueTuple.dll": { + "related": ".xml" + } + } + }, + "VSLangProj/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj110/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj110.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj140/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj140.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj150/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj150.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj157/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj157.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj158/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj158.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj165/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj165.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj2/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj2.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + } + } + }, + "libraries": { + "envdte/17.6.36389": { + "sha512": "Ipa3iCx1QO2DpTueYINPN5ADbaqyHhHIljlY7sWWBwEpAHzHbf4rISmj4fMkKH/vCx9ccjJyfwEE/5Y6oS3Jqg==", + "type": "package", + "path": "envdte/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "envdte.17.6.36389.nupkg.sha512", + "envdte.nuspec", + "lib/net20/envdte.dll", + "lib/net20/envdte.xml", + "lib/net45/envdte.dll", + "lib/net45/envdte.xml", + "lib/net472/envdte.dll", + "lib/net472/envdte.xml", + "lib/net6.0/envdte.dll", + "lib/net6.0/envdte.xml", + "lib/netstandard2.0/envdte.dll", + "lib/netstandard2.0/envdte.xml" + ] + }, + "envdte100/17.6.36389": { + "sha512": "VnObugWVaXP53TftFyVk+VHvhyuLJlM9LhJIwt9UCWm6Dw5Hc6ZWkrFSF+h7CtnYS2a/MpQkM7lVk5JRo0kyUg==", + "type": "package", + "path": "envdte100/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "envdte100.17.6.36389.nupkg.sha512", + "envdte100.nuspec", + "lib/net20/envdte100.dll", + "lib/net20/envdte100.xml", + "lib/net45/envdte100.dll", + "lib/net45/envdte100.xml", + "lib/net472/envdte100.dll", + "lib/net472/envdte100.xml", + "lib/net6.0/envdte100.dll", + "lib/net6.0/envdte100.xml", + "lib/netstandard2.0/envdte100.dll", + "lib/netstandard2.0/envdte100.xml" + ] + }, + "envdte80/17.6.36389": { + "sha512": "sNwY3rU7lQCPxhSqddwKsNgm+A5lgAt/TH71QOucXfM+lCGHacwPA5slcDzIWXtNJwsjNE5sOQ5LQeo1rf9lhQ==", + "type": "package", + "path": "envdte80/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "envdte80.17.6.36389.nupkg.sha512", + "envdte80.nuspec", + "lib/net20/envdte80.dll", + "lib/net20/envdte80.xml", + "lib/net45/envdte80.dll", + "lib/net45/envdte80.xml", + "lib/net472/envdte80.dll", + "lib/net472/envdte80.xml", + "lib/net6.0/envdte80.dll", + "lib/net6.0/envdte80.xml", + "lib/netstandard2.0/envdte80.dll", + "lib/netstandard2.0/envdte80.xml" + ] + }, + "envdte90/17.6.36389": { + "sha512": "R7RBJSZpQvHZlKxWDFoEnyxdGSPXgL9qYloEghjtR6j6fdAwqUT+sWbSSwwZiaUhtC1q0e7kTXZuoDM9IMmPdQ==", + "type": "package", + "path": "envdte90/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "envdte90.17.6.36389.nupkg.sha512", + "envdte90.nuspec", + "lib/net20/envdte90.dll", + "lib/net20/envdte90.xml", + "lib/net45/envdte90.dll", + "lib/net45/envdte90.xml", + "lib/net472/envdte90.dll", + "lib/net472/envdte90.xml", + "lib/net6.0/envdte90.dll", + "lib/net6.0/envdte90.xml", + "lib/netstandard2.0/envdte90.dll", + "lib/netstandard2.0/envdte90.xml" + ] + }, + "envdte90a/17.6.36389": { + "sha512": "+Q0sfa3NDKTERrAJu/rVu+P+xc0V1sb7rW0tlJUBnw2hIKa0Jj8CCoFtyyK+jm8nnzpSNtQw7qyNoANZsqTvww==", + "type": "package", + "path": "envdte90a/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "envdte90a.17.6.36389.nupkg.sha512", + "envdte90a.nuspec", + "lib/net20/envdte90a.dll", + "lib/net20/envdte90a.xml", + "lib/net45/envdte90a.dll", + "lib/net45/envdte90a.xml", + "lib/net472/envdte90a.dll", + "lib/net472/envdte90a.xml", + "lib/net6.0/envdte90a.dll", + "lib/net6.0/envdte90a.xml", + "lib/netstandard2.0/envdte90a.dll", + "lib/netstandard2.0/envdte90a.xml" + ] + }, + "MessagePack/2.5.187": { + "sha512": "uW4j8m4Nc+2Mk5n6arOChavJ9bLjkis0qWASOj2h2OwmfINuzYv+mjCHUymrYhmyyKTu3N+ObtTXAY4uQ7jIhg==", + "type": "package", + "path": "messagepack/2.5.187", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net472/MessagePack.dll", + "lib/net472/MessagePack.xml", + "lib/net6.0/MessagePack.dll", + "lib/net6.0/MessagePack.xml", + "lib/netstandard2.0/MessagePack.dll", + "lib/netstandard2.0/MessagePack.xml", + "messagepack.2.5.187.nupkg.sha512", + "messagepack.nuspec" + ] + }, + "MessagePack.Annotations/2.5.187": { + "sha512": "/IvvMMS8opvlHjEJ/fR2Cal4Co726Kj77Z8KiohFhuHfLHHmb9uUxW5+tSCL4ToKFfkQlrS3HD638mRq83ySqA==", + "type": "package", + "path": "messagepack.annotations/2.5.187", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/MessagePack.Annotations.dll", + "lib/netstandard2.0/MessagePack.Annotations.xml", + "messagepack.annotations.2.5.187.nupkg.sha512", + "messagepack.annotations.nuspec" + ] + }, + "Microsoft.Bcl.AsyncInterfaces/8.0.0": { + "sha512": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==", + "type": "package", + "path": "microsoft.bcl.asyncinterfaces/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Bcl.AsyncInterfaces.targets", + "buildTransitive/net462/_._", + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/net462/Microsoft.Bcl.AsyncInterfaces.xml", + "lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.xml", + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.xml", + "microsoft.bcl.asyncinterfaces.8.0.0.nupkg.sha512", + "microsoft.bcl.asyncinterfaces.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Build.Framework/17.6.3": { + "sha512": "rmLkJflFxc9jGkq6kd3CHdZp8T7txNM95pYo4p0fRG4/PDE1bWyvTF98qQA/pCjousO/oqEURKEDCQBj5A0dqA==", + "type": "package", + "path": "microsoft.build.framework/17.6.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "README.md", + "lib/net472/Microsoft.Build.Framework.dll", + "lib/net472/Microsoft.Build.Framework.pdb", + "lib/net472/Microsoft.Build.Framework.xml", + "lib/net7.0/Microsoft.Build.Framework.dll", + "lib/net7.0/Microsoft.Build.Framework.pdb", + "lib/net7.0/Microsoft.Build.Framework.xml", + "microsoft.build.framework.17.6.3.nupkg.sha512", + "microsoft.build.framework.nuspec", + "notices/THIRDPARTYNOTICES.txt", + "ref/net472/Microsoft.Build.Framework.dll", + "ref/net472/Microsoft.Build.Framework.xml", + "ref/net7.0/Microsoft.Build.Framework.dll", + "ref/net7.0/Microsoft.Build.Framework.xml", + "ref/netstandard2.0/Microsoft.Build.Framework.dll", + "ref/netstandard2.0/Microsoft.Build.Framework.xml" + ] + }, + "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.3.2": { + "sha512": "LlcsDRSYfkJFWOdDpysY/4Ph4llHc8DLOc3roFTz9+216vl+vwVGfbys2rcSmhZCTDv/0kxSs2oOdd9SX2NiVg==", + "type": "package", + "path": "microsoft.codeanalysis.bannedapianalyzers/3.3.2", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "EULA.rtf", + "ThirdPartyNotices.rtf", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.dll", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.BannedApiAnalyzers.dll", + "analyzers/dotnet/cs/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/de/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/es/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/fr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/it/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/ja/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/ko/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/pl/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/pt-BR/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/ru/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/tr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hans/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hant/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.BannedApiAnalyzers.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.VisualBasic.BannedApiAnalyzers.dll", + "analyzers/dotnet/vb/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/de/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/es/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/fr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/it/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/ja/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/ko/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/pl/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/pt-BR/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/ru/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/tr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hans/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hant/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll", + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.props", + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets", + "build/config/AnalysisLevel_2_9_8_AllDisabledByDefault.editorconfig", + "build/config/AnalysisLevel_2_9_8_AllEnabledByDefault.editorconfig", + "build/config/AnalysisLevel_2_9_8_Default.editorconfig", + "documentation/Analyzer Configuration.md", + "documentation/Microsoft.CodeAnalysis.BannedApiAnalyzers.md", + "documentation/Microsoft.CodeAnalysis.BannedApiAnalyzers.sarif", + "editorconfig/AllRulesDefault/.editorconfig", + "editorconfig/AllRulesDisabled/.editorconfig", + "editorconfig/AllRulesEnabled/.editorconfig", + "editorconfig/ApiDesignRulesDefault/.editorconfig", + "editorconfig/ApiDesignRulesEnabled/.editorconfig", + "editorconfig/DataflowRulesDefault/.editorconfig", + "editorconfig/DataflowRulesEnabled/.editorconfig", + "editorconfig/PortedFromFxCopRulesDefault/.editorconfig", + "editorconfig/PortedFromFxCopRulesEnabled/.editorconfig", + "microsoft.codeanalysis.bannedapianalyzers.3.3.2.nupkg.sha512", + "microsoft.codeanalysis.bannedapianalyzers.nuspec", + "rulesets/AllRulesDefault.ruleset", + "rulesets/AllRulesDisabled.ruleset", + "rulesets/AllRulesEnabled.ruleset", + "rulesets/ApiDesignRulesDefault.ruleset", + "rulesets/ApiDesignRulesEnabled.ruleset", + "rulesets/DataflowRulesDefault.ruleset", + "rulesets/DataflowRulesEnabled.ruleset", + "rulesets/PortedFromFxCopRulesDefault.ruleset", + "rulesets/PortedFromFxCopRulesEnabled.ruleset", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.CSharp/4.7.0": { + "sha512": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==", + "type": "package", + "path": "microsoft.csharp/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/Microsoft.CSharp.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.3/Microsoft.CSharp.dll", + "lib/netstandard2.0/Microsoft.CSharp.dll", + "lib/netstandard2.0/Microsoft.CSharp.xml", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/uap10.0.16299/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "microsoft.csharp.4.7.0.nupkg.sha512", + "microsoft.csharp.nuspec", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/Microsoft.CSharp.dll", + "ref/netcore50/Microsoft.CSharp.xml", + "ref/netcore50/de/Microsoft.CSharp.xml", + "ref/netcore50/es/Microsoft.CSharp.xml", + "ref/netcore50/fr/Microsoft.CSharp.xml", + "ref/netcore50/it/Microsoft.CSharp.xml", + "ref/netcore50/ja/Microsoft.CSharp.xml", + "ref/netcore50/ko/Microsoft.CSharp.xml", + "ref/netcore50/ru/Microsoft.CSharp.xml", + "ref/netcore50/zh-hans/Microsoft.CSharp.xml", + "ref/netcore50/zh-hant/Microsoft.CSharp.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.0/Microsoft.CSharp.dll", + "ref/netstandard1.0/Microsoft.CSharp.xml", + "ref/netstandard1.0/de/Microsoft.CSharp.xml", + "ref/netstandard1.0/es/Microsoft.CSharp.xml", + "ref/netstandard1.0/fr/Microsoft.CSharp.xml", + "ref/netstandard1.0/it/Microsoft.CSharp.xml", + "ref/netstandard1.0/ja/Microsoft.CSharp.xml", + "ref/netstandard1.0/ko/Microsoft.CSharp.xml", + "ref/netstandard1.0/ru/Microsoft.CSharp.xml", + "ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml", + "ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml", + "ref/netstandard2.0/Microsoft.CSharp.dll", + "ref/netstandard2.0/Microsoft.CSharp.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/uap10.0.16299/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.IO.Redist/6.0.0": { + "sha512": "uxXZ8pAcYtIJm8iqu/0e+CkM/VSwfgbHpnCDu7s8+gn/VUD5R6PxH3RGZFPaHgTisrlwD+BIyL5TqG6qwuZtOQ==", + "type": "package", + "path": "microsoft.io.redist/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net472/Microsoft.IO.Redist.dll", + "lib/net472/Microsoft.IO.Redist.xml", + "microsoft.io.redist.6.0.0.nupkg.sha512", + "microsoft.io.redist.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.NET.StringTools/17.6.3": { + "sha512": "N0ZIanl1QCgvUumEL1laasU0a7sOE5ZwLZVTn0pAePnfhq8P7SvTjF8Axq+CnavuQkmdQpGNXQ1efZtu5kDFbA==", + "type": "package", + "path": "microsoft.net.stringtools/17.6.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "README.md", + "lib/net472/Microsoft.NET.StringTools.dll", + "lib/net472/Microsoft.NET.StringTools.pdb", + "lib/net472/Microsoft.NET.StringTools.xml", + "lib/net7.0/Microsoft.NET.StringTools.dll", + "lib/net7.0/Microsoft.NET.StringTools.pdb", + "lib/net7.0/Microsoft.NET.StringTools.xml", + "lib/netstandard2.0/Microsoft.NET.StringTools.dll", + "lib/netstandard2.0/Microsoft.NET.StringTools.pdb", + "lib/netstandard2.0/Microsoft.NET.StringTools.xml", + "microsoft.net.stringtools.17.6.3.nupkg.sha512", + "microsoft.net.stringtools.nuspec", + "notices/THIRDPARTYNOTICES.txt", + "ref/net472/Microsoft.NET.StringTools.dll", + "ref/net472/Microsoft.NET.StringTools.xml", + "ref/net7.0/Microsoft.NET.StringTools.dll", + "ref/net7.0/Microsoft.NET.StringTools.xml", + "ref/netstandard2.0/Microsoft.NET.StringTools.dll", + "ref/netstandard2.0/Microsoft.NET.StringTools.xml" + ] + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "sha512": "TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==", + "type": "package", + "path": "microsoft.netcore.platforms/1.1.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.1.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.1.3": { + "sha512": "3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.3.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Microsoft.ServiceHub.Analyzers/4.2.102": { + "sha512": "dk/5quUffMW81tNP8BEkKYGUp5yXNvNglqclGnRVK24l6xIuxAijMOAEezz57yBhxz+oEOQLDOaUX4hcXdFRyQ==", + "type": "package", + "path": "microsoft.servicehub.analyzers/4.2.102", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "analyzers/Microsoft.ServiceHub.Analyzers.dll", + "analyzers/cs/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/de/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/es/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/fr/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/it/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/ja/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/ko/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/pl/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/pt-BR/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/ru/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/tr/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/zh-Hans/Microsoft.ServiceHub.Analyzers.resources.dll", + "analyzers/zh-Hant/Microsoft.ServiceHub.Analyzers.resources.dll", + "microsoft.servicehub.analyzers.4.2.102.nupkg.sha512", + "microsoft.servicehub.analyzers.nuspec", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.ServiceHub.Framework/4.2.102": { + "sha512": "J1DMsHdwQsvquBtXNssNx6/KATTKmV8MvJpWxuag538fljfzNkV9NtA9AIuucVwWHriLWNOnXXk/nqWhdI9GZw==", + "type": "package", + "path": "microsoft.servicehub.framework/4.2.102", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "lib/net472/Microsoft.ServiceHub.Framework.dll", + "lib/net472/Microsoft.ServiceHub.Framework.xml", + "lib/net472/cs/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/de/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/es/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/fr/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/it/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/ja/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/ko/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/pl/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/pt-BR/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/ru/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/tr/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/zh-Hans/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net472/zh-Hant/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/Microsoft.ServiceHub.Framework.dll", + "lib/net6.0/Microsoft.ServiceHub.Framework.xml", + "lib/net6.0/cs/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/de/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/es/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/fr/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/it/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/ja/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/ko/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/pl/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/pt-BR/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/ru/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/tr/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.ServiceHub.Framework.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/Microsoft.ServiceHub.Framework.dll", + "lib/netstandard2.0/Microsoft.ServiceHub.Framework.xml", + "lib/netstandard2.0/cs/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/de/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/es/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/fr/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/it/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/ja/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/ko/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/pl/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/ru/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/tr/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.ServiceHub.Framework.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.ServiceHub.Framework.resources.dll", + "microsoft.servicehub.framework.4.2.102.nupkg.sha512", + "microsoft.servicehub.framework.nuspec" + ] + }, + "Microsoft.ServiceHub.Resources/4.2.8": { + "sha512": "qgutaUttPzy0afqXyxUXDTh2CvtlJfgO3TFpMW81P1Mhc6zbntpI+hvD2pTp8gmnFmJsPabk2xkP1WsG023RGg==", + "type": "package", + "path": "microsoft.servicehub.resources/4.2.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "lib/net472/Microsoft.ServiceHub.Resources.dll", + "lib/net472/Microsoft.ServiceHub.Resources.xml", + "lib/net472/cs/Microsoft.ServiceHub.Resources.dll", + "lib/net472/de/Microsoft.ServiceHub.Resources.dll", + "lib/net472/es/Microsoft.ServiceHub.Resources.dll", + "lib/net472/fr/Microsoft.ServiceHub.Resources.dll", + "lib/net472/it/Microsoft.ServiceHub.Resources.dll", + "lib/net472/ja/Microsoft.ServiceHub.Resources.dll", + "lib/net472/ko/Microsoft.ServiceHub.Resources.dll", + "lib/net472/pl/Microsoft.ServiceHub.Resources.dll", + "lib/net472/pt-BR/Microsoft.ServiceHub.Resources.dll", + "lib/net472/ru/Microsoft.ServiceHub.Resources.dll", + "lib/net472/tr/Microsoft.ServiceHub.Resources.dll", + "lib/net472/zh-Hans/Microsoft.ServiceHub.Resources.dll", + "lib/net472/zh-Hant/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/Microsoft.ServiceHub.Resources.xml", + "lib/netstandard2.0/cs/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/de/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/es/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/fr/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/it/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/ja/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/ko/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/pl/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/ru/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/tr/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.ServiceHub.Resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.ServiceHub.Resources.dll", + "microsoft.servicehub.resources.4.2.8.nupkg.sha512", + "microsoft.servicehub.resources.nuspec" + ] + }, + "Microsoft.VisualStudio.CommandBars/17.6.36389": { + "sha512": "QIauZnxkCVbP0ZVleIPZLlrEcmE4/7ZteZ+1dwFwF802ObCUK+IBLWK39PaQ0iN1eKoFSaqoKk6Zi1xqM5m5LQ==", + "type": "package", + "path": "microsoft.visualstudio.commandbars/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.CommandBars.dll", + "lib/net20/Microsoft.VisualStudio.CommandBars.xml", + "lib/net45/Microsoft.VisualStudio.CommandBars.dll", + "lib/net45/Microsoft.VisualStudio.CommandBars.xml", + "lib/net472/Microsoft.VisualStudio.CommandBars.dll", + "lib/net472/Microsoft.VisualStudio.CommandBars.xml", + "lib/net6.0/Microsoft.VisualStudio.CommandBars.dll", + "lib/net6.0/Microsoft.VisualStudio.CommandBars.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.CommandBars.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.CommandBars.xml", + "microsoft.visualstudio.commandbars.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.commandbars.nuspec" + ] + }, + "Microsoft.VisualStudio.ComponentModelHost/17.6.268": { + "sha512": "6DCKKZzmJEsXcyBLC2ypPe1G1X0ZkwygRR8H2MV7Z8LYoJn4LaG64K1oZg3bEoTrZz/K8SAjBWjr2QxMhSPBYw==", + "type": "package", + "path": "microsoft.visualstudio.componentmodelhost/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.ComponentModelHost.dll", + "lib/net472/Microsoft.VisualStudio.ComponentModelHost.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.ComponentModelHost.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.ComponentModelHost.xml", + "microsoft.visualstudio.componentmodelhost.17.6.268.nupkg.sha512", + "microsoft.visualstudio.componentmodelhost.nuspec" + ] + }, + "Microsoft.VisualStudio.Composition/17.6.17": { + "sha512": "W78+hH7BG5d/UPUcT2YyrjOC/fGk0+k3CRhYwjeI+QyXZkNjNlrkKSu9Jbf61VI0nZTHfJhrWxz3LLUkk1zf9g==", + "type": "package", + "path": "microsoft.visualstudio.composition/17.6.17", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Composition.dll", + "lib/net472/Microsoft.VisualStudio.Composition.xml", + "lib/net472/cs/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/Microsoft.VisualStudio.Composition.dll", + "lib/net6.0/Microsoft.VisualStudio.Composition.xml", + "lib/net6.0/cs/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/de/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/es/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/fr/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/it/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/ja/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/ko/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/pl/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/pt-BR/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/ru/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/tr/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.VisualStudio.Composition.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Composition.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Composition.xml", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.Composition.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.Composition.resources.dll", + "microsoft.visualstudio.composition.17.6.17.nupkg.sha512", + "microsoft.visualstudio.composition.nuspec" + ] + }, + "Microsoft.VisualStudio.Composition.Analyzers/17.6.17": { + "sha512": "wNa0BYQW/azgfNq00DnMPql6z1O63vRjsIHD1ZQJWcXIIOVqaEuPe+HZgjuB37eCYEByed/4ITud2251/MFMWQ==", + "type": "package", + "path": "microsoft.visualstudio.composition.analyzers/17.6.17", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "PackageIcon.png", + "analyzers/dotnet/Microsoft.VisualStudio.Composition.Analyzers.dll", + "analyzers/dotnet/cs/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/de/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/es/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/fr/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/it/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/ja/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/ko/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/pl/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/pt-BR/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/ru/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/tr/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/zh-Hans/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "analyzers/dotnet/zh-Hant/Microsoft.VisualStudio.Composition.Analyzers.resources.dll", + "microsoft.visualstudio.composition.analyzers.17.6.17.nupkg.sha512", + "microsoft.visualstudio.composition.analyzers.nuspec", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.VisualStudio.CoreUtility/17.6.268": { + "sha512": "hCnY7cXe20cLf4+V/CHtmpfMag5nxRSLFXaf027tJ9SSuK9j3fY+UpkJpccHGVVGmk9MsrEqY99BIHpMLiDj4w==", + "type": "package", + "path": "microsoft.visualstudio.coreutility/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.CoreUtility.dll", + "lib/net472/Microsoft.VisualStudio.CoreUtility.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.CoreUtility.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.CoreUtility.xml", + "microsoft.visualstudio.coreutility.17.6.268.nupkg.sha512", + "microsoft.visualstudio.coreutility.nuspec" + ] + }, + "Microsoft.VisualStudio.Debugger.Interop.12.0/17.6.36389": { + "sha512": "3PzOPxka39XMvuwq9OrplbwNZH/apoRjQ4qDYlpbmPZiLVj8hGMm/XmuGHdqyYj8KINwU+5CRhFc9ITOcI6Z/g==", + "type": "package", + "path": "microsoft.visualstudio.debugger.interop.12.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.12.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Debugger.Interop.12.0.dll", + "microsoft.visualstudio.debugger.interop.12.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.debugger.interop.12.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Debugger.Interop.14.0/17.6.36389": { + "sha512": "rFlRsMTTJLQMUoUKg1LXWVdgs6EvHXSK0E/Ocvs8irV2R6uv865SGlvka1bBYXbi06pUHGjlNM0FHc1mOJR6/A==", + "type": "package", + "path": "microsoft.visualstudio.debugger.interop.14.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.14.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Debugger.Interop.14.0.dll", + "microsoft.visualstudio.debugger.interop.14.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.debugger.interop.14.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Debugger.Interop.15.0/17.6.36389": { + "sha512": "Q5wxhXS0lCBi5sgQXl3yCJ8kmEp8jApIicTJgr86wVnYiFfSwfbkBF+wdNNmKv/iuNdQ9pEBJfa/jSoBreDMxg==", + "type": "package", + "path": "microsoft.visualstudio.debugger.interop.15.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.15.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Debugger.Interop.15.0.dll", + "microsoft.visualstudio.debugger.interop.15.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.debugger.interop.15.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Debugger.Interop.16.0/17.6.36389": { + "sha512": "JqOGdD8lA/mv14qMuj4Sa3zmJRkJQzbl6SKV8OCrWz2mPRNkPjSzu7tEO4TJ2WkdquWE2amtfw7epz25JUKEvQ==", + "type": "package", + "path": "microsoft.visualstudio.debugger.interop.16.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.16.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Debugger.Interop.16.0.dll", + "microsoft.visualstudio.debugger.interop.16.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.debugger.interop.16.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Designer.Interfaces/17.6.36389": { + "sha512": "vOXuyFlfXCTLM++RlEJ4NvMlSKktlZh7hNxtE8bXn59ANbc0ZfL3I5i+Z5yj8LW6bVKTYjYYmx3smZfvlR1tzg==", + "type": "package", + "path": "microsoft.visualstudio.designer.interfaces/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Designer.Interfaces.dll", + "lib/net20/Microsoft.VisualStudio.Designer.Interfaces.xml", + "lib/net45/Microsoft.VisualStudio.Designer.Interfaces.dll", + "lib/net45/Microsoft.VisualStudio.Designer.Interfaces.xml", + "lib/net472/Microsoft.VisualStudio.Designer.Interfaces.dll", + "lib/net472/Microsoft.VisualStudio.Designer.Interfaces.xml", + "lib/net6.0/Microsoft.VisualStudio.Designer.Interfaces.dll", + "lib/net6.0/Microsoft.VisualStudio.Designer.Interfaces.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Designer.Interfaces.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Designer.Interfaces.xml", + "microsoft.visualstudio.designer.interfaces.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.designer.interfaces.nuspec" + ] + }, + "Microsoft.VisualStudio.Editor/17.6.268": { + "sha512": "NtvaMUG58E8Z0JVZsI7qXZIEdTEll4UCn2z/yY4nZlqmJFMgb1AUgQ6pEM6z9+8Y7Lc82W8IwY1sJYXL9wBsRg==", + "type": "package", + "path": "microsoft.visualstudio.editor/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Editor.dll", + "lib/net472/Microsoft.VisualStudio.Editor.xml", + "microsoft.visualstudio.editor.17.6.268.nupkg.sha512", + "microsoft.visualstudio.editor.nuspec" + ] + }, + "Microsoft.VisualStudio.GraphModel/17.6.36389": { + "sha512": "ERAPR0f0fHl7VqFo3copHGjNmF5mxbtZh1z9N5eZtYtpP8846n2C8wOE3QCsReppmkz0WGitfnMxNirQ/C9j7g==", + "type": "package", + "path": "microsoft.visualstudio.graphmodel/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.GraphModel.dll", + "lib/net472/Microsoft.VisualStudio.GraphModel.xml", + "lib/net472/cs/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.GraphModel.resources.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.GraphModel.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.GraphModel.xml", + "microsoft.visualstudio.graphmodel.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.graphmodel.nuspec" + ] + }, + "Microsoft.VisualStudio.ImageCatalog/17.6.36389": { + "sha512": "gQitNRdaMVez4K+9BTvkTxnuJ96coi+/sQvRTTb4F+83hOYHHH0UiKjmgEQpjUDPxG7KlbeNN/j9cMfdX6zZgw==", + "type": "package", + "path": "microsoft.visualstudio.imagecatalog/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.ImageCatalog.dll", + "lib/net472/en/Microsoft.VisualStudio.ImageCatalog.resources.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.ImageCatalog.dll", + "lib/net6.0-windows8.0/en/Microsoft.VisualStudio.ImageCatalog.resources.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.ImageCatalog.dll", + "microsoft.visualstudio.imagecatalog.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.imagecatalog.nuspec" + ] + }, + "Microsoft.VisualStudio.Imaging/17.6.36389": { + "sha512": "twCQTtCPDBe8xkq94CgIsIa68dn7WZJosZCs2rILHR/KnQiv2X6hCpUhov90q4nh9x9S6OoLj3BCl2lBqDm1xg==", + "type": "package", + "path": "microsoft.visualstudio.imaging/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Imaging.dll", + "lib/net472/Microsoft.VisualStudio.Imaging.xml", + "lib/net472/cs/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/en/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.Imaging.resources.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.Imaging.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.Imaging.xml", + "lib/net6.0-windows8.0/en/Microsoft.VisualStudio.Imaging.resources.dll", + "microsoft.visualstudio.imaging.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.imaging.nuspec" + ] + }, + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime/17.6.36387": { + "sha512": "l4deplq0ZCF9hjMRSxH0s/v/W1yHCu6liUgMG5UyOXQqeWJ2YQ/aghOoZ3Du1ZAdhiP/OzXg2YZUCVynGga3KA==", + "type": "package", + "path": "microsoft.visualstudio.imaging.interop.14.0.designtime/17.6.36387", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll", + "lib/net20/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.xml", + "lib/net45/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll", + "lib/net45/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.xml", + "lib/net472/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll", + "lib/net472/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.xml", + "microsoft.visualstudio.imaging.interop.14.0.designtime.17.6.36387.nupkg.sha512", + "microsoft.visualstudio.imaging.interop.14.0.designtime.nuspec" + ] + }, + "Microsoft.VisualStudio.Interop/17.6.36389": { + "sha512": "XIuDWL5EW6w6Ybd6+6QkjtIaoE+QlTbHyPb0bKP4lu3Mo6HfN2e2Nb92l2cCRQdVxGyqKcS0H6S2N8XRu3hEVw==", + "type": "package", + "path": "microsoft.visualstudio.interop/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Interop.dll", + "lib/net20/Microsoft.VisualStudio.Interop.xml", + "lib/net45/Microsoft.VisualStudio.Interop.dll", + "lib/net45/Microsoft.VisualStudio.Interop.xml", + "lib/net472/Microsoft.VisualStudio.Interop.dll", + "lib/net472/Microsoft.VisualStudio.Interop.xml", + "lib/net6.0/Microsoft.VisualStudio.Interop.dll", + "lib/net6.0/Microsoft.VisualStudio.Interop.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Interop.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Interop.xml", + "microsoft.visualstudio.interop.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.interop.nuspec" + ] + }, + "Microsoft.VisualStudio.Language/17.6.268": { + "sha512": "8+6cJ/cBl3mltTWqZbwD57KeJNP7wsLjEnAIJcjIGXXbRHScx+ob6uQOreqV54sGv3ovPchfeITHwbEPUOFG5Q==", + "type": "package", + "path": "microsoft.visualstudio.language/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Language.dll", + "lib/net472/Microsoft.VisualStudio.Language.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Language.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Language.xml", + "microsoft.visualstudio.language.17.6.268.nupkg.sha512", + "microsoft.visualstudio.language.nuspec" + ] + }, + "Microsoft.VisualStudio.Language.Intellisense/17.6.268": { + "sha512": "KAqw8ZdGibeJFs9/jwR+5xQHTlXDDKN8CSDjPl+sKcB+8EjmAFVdXaNFoLapZ4pYKABNzlBzzjo/6QjJxs/HZg==", + "type": "package", + "path": "microsoft.visualstudio.language.intellisense/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Language.Intellisense.dll", + "lib/net472/Microsoft.VisualStudio.Language.Intellisense.xml", + "microsoft.visualstudio.language.intellisense.17.6.268.nupkg.sha512", + "microsoft.visualstudio.language.intellisense.nuspec" + ] + }, + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces/17.6.268": { + "sha512": "ePCJCUFRxCajP1TTcDFygkluLmjx2SFCOhNWdkIJTf9JKDYtr7GdsXxnBbIelrx2TSEqd1BrnWOSYnKE0AUCpg==", + "type": "package", + "path": "microsoft.visualstudio.language.navigateto.interfaces/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll", + "lib/net472/Microsoft.VisualStudio.Language.NavigateTo.Interfaces.xml", + "microsoft.visualstudio.language.navigateto.interfaces.17.6.268.nupkg.sha512", + "microsoft.visualstudio.language.navigateto.interfaces.nuspec" + ] + }, + "Microsoft.VisualStudio.Language.StandardClassification/17.6.268": { + "sha512": "2pSOPqAxo40MmqeaOb+7EYcWRYqJOJOCdz2bw/TEhbLtbyPfFVHQw2pbWhNiIY7Lk4xIeB/KjLXuJ+9xsGYjrQ==", + "type": "package", + "path": "microsoft.visualstudio.language.standardclassification/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Language.StandardClassification.dll", + "lib/net472/Microsoft.VisualStudio.Language.StandardClassification.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Language.StandardClassification.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Language.StandardClassification.xml", + "microsoft.visualstudio.language.standardclassification.17.6.268.nupkg.sha512", + "microsoft.visualstudio.language.standardclassification.nuspec" + ] + }, + "Microsoft.VisualStudio.LanguageServer.Client/17.6.42": { + "sha512": "sHg2C+w5tn4bIjchQZ8h4K4CVetpyu1MW9B62t46dLlYkxkloJqXXOZf9pvOSs3hYOIfyDCSJ+kP8pFp0IN2kg==", + "type": "package", + "path": "microsoft.visualstudio.languageserver.client/17.6.42", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.LanguageServer.Client.dll", + "lib/net472/Microsoft.VisualStudio.LanguageServer.Client.xml", + "lib/net472/cs/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.LanguageServer.Client.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.LanguageServer.Client.xml", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.LanguageServer.Client.resources.dll", + "license.txt", + "microsoft.visualstudio.languageserver.client.17.6.42.nupkg.sha512", + "microsoft.visualstudio.languageserver.client.nuspec" + ] + }, + "Microsoft.VisualStudio.OLE.Interop/17.6.36389": { + "sha512": "rxPvy/dyvE60k4QhTC5j3K3vSPi5ih7e8d+nRn8oBf9ZI4wSQjh4Blh3uA2GS2FBsy4wbVXE2+R3Z4ztTDMNUA==", + "type": "package", + "path": "microsoft.visualstudio.ole.interop/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.OLE.Interop.dll", + "lib/net20/Microsoft.VisualStudio.OLE.Interop.xml", + "lib/net45/Microsoft.VisualStudio.OLE.Interop.dll", + "lib/net45/Microsoft.VisualStudio.OLE.Interop.xml", + "lib/net472/Microsoft.VisualStudio.OLE.Interop.dll", + "lib/net472/Microsoft.VisualStudio.OLE.Interop.xml", + "lib/net6.0/Microsoft.VisualStudio.OLE.Interop.dll", + "lib/net6.0/Microsoft.VisualStudio.OLE.Interop.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.OLE.Interop.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.OLE.Interop.xml", + "microsoft.visualstudio.ole.interop.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.ole.interop.nuspec" + ] + }, + "Microsoft.VisualStudio.Package.LanguageService.15.0/17.6.36389": { + "sha512": "o57faKgj7m0lhV75bnPwHoBnz6wh3Ga0Vmy5sUPz2WdhhAOaXomHW8OfAnFsa5oJltO0M0wmqmNGo7vWHFgkDg==", + "type": "package", + "path": "microsoft.visualstudio.package.languageservice.15.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Package.LanguageService.15.0.dll", + "lib/net472/Microsoft.VisualStudio.Package.LanguageService.15.0.xml", + "lib/net472/cs/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.Package.LanguageService.15.0.resources.dll", + "microsoft.visualstudio.package.languageservice.15.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.package.languageservice.15.0.nuspec" + ] + }, + "Microsoft.VisualStudio.ProjectAggregator/17.6.36387": { + "sha512": "7ApV0BeNhHn8z5u7jfJjmszrW2q+eRkRK0dah5oJ65QJLw2tyePdTjB3376aTUzNZdlB5I4SfQ77/NcZG1MiGg==", + "type": "package", + "path": "microsoft.visualstudio.projectaggregator/17.6.36387", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.ProjectAggregator.dll", + "lib/net472/Microsoft.VisualStudio.ProjectAggregator.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.ProjectAggregator.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.ProjectAggregator.xml", + "microsoft.visualstudio.projectaggregator.17.6.36387.nupkg.sha512", + "microsoft.visualstudio.projectaggregator.nuspec" + ] + }, + "Microsoft.VisualStudio.RemoteControl/16.3.52": { + "sha512": "+MgP1+Rtt1uJZyqhf7+H6KAQ57wc7v00ixuLhEgFggIbmW2/29YXfPK7gLvXw+vU7vimuM47cqAHrnB7RWYqtg==", + "type": "package", + "path": "microsoft.visualstudio.remotecontrol/16.3.52", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "PackageIcon.png", + "lib/net45/Microsoft.VisualStudio.RemoteControl.dll", + "lib/net45/Microsoft.VisualStudio.RemoteControl.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.RemoteControl.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.RemoteControl.xml", + "microsoft.visualstudio.remotecontrol.16.3.52.nupkg.sha512", + "microsoft.visualstudio.remotecontrol.nuspec" + ] + }, + "Microsoft.VisualStudio.RpcContracts/17.6.13": { + "sha512": "5nO6sHprMquSPZIzBQiUm0Qk1x0ParM7A4ka7L6EuttHJHIk3evRXLShmpmYsGHCFMR4zg9VH1bfM05996nDVA==", + "type": "package", + "path": "microsoft.visualstudio.rpccontracts/17.6.13", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE", + "NOTICE", + "PackageIcon.png", + "lib/net6.0/Microsoft.VisualStudio.RpcContracts.dll", + "lib/net6.0/Microsoft.VisualStudio.RpcContracts.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.RpcContracts.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.RpcContracts.xml", + "microsoft.visualstudio.rpccontracts.17.6.13.nupkg.sha512", + "microsoft.visualstudio.rpccontracts.nuspec" + ] + }, + "Microsoft.VisualStudio.SDK/17.6.36389": { + "sha512": "G8ksgSCPCB4OaGMuNXWJnO+0e2gSgBMxts7eGMRwnR0WCkb/w3QQrKaxKcf3U1V4jC67A+KmTo9KuUNtX+xZ0g==", + "type": "package", + "path": "microsoft.visualstudio.sdk/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "microsoft.visualstudio.sdk.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.sdk.nuspec" + ] + }, + "Microsoft.VisualStudio.SDK.Analyzers/16.10.10": { + "sha512": "LuhBHy7MJJ5SjpS7J2GuHqPyL1VeqXUwYc+mTagaUCzXbNwJmLcSUAioCyQyAzPIn6qtnzuM5Lz6ULOQS3ifUA==", + "type": "package", + "path": "microsoft.visualstudio.sdk.analyzers/16.10.10", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "PackageIcon.png", + "analyzers/cs/Microsoft.VisualStudio.SDK.Analyzers.CodeFixes.dll", + "analyzers/cs/Microsoft.VisualStudio.SDK.Analyzers.CodeFixes.pdb", + "analyzers/cs/Microsoft.VisualStudio.SDK.Analyzers.dll", + "analyzers/cs/Microsoft.VisualStudio.SDK.Analyzers.pdb", + "build/AdditionalFiles/BannedSymbols.txt", + "build/AdditionalFiles/vs-threading.LegacyThreadSwitchingMembers.txt", + "build/AdditionalFiles/vs-threading.MainThreadAssertingMethods.txt", + "build/AdditionalFiles/vs-threading.MainThreadSwitchingMethods.txt", + "build/AdditionalFiles/vs-threading.MembersRequiringMainThread.txt", + "build/Microsoft.VisualStudio.SDK.Analyzers.targets", + "microsoft.visualstudio.sdk.analyzers.16.10.10.nupkg.sha512", + "microsoft.visualstudio.sdk.analyzers.nuspec", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.VisualStudio.Setup.Configuration.Interop/3.6.2115": { + "sha512": "oI3F7o12Z46O8v3lbdR3ToiB+8NNjIqmFrFFRQMpTCPuvwfoKwy+TkyxcRVR0rnaZ57F60c/ofqg9qEMJdIb8w==", + "type": "package", + "path": "microsoft.visualstudio.setup.configuration.interop/3.6.2115", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/Microsoft.VisualStudio.Setup.Configuration.Interop.targets", + "lib/net35/Microsoft.VisualStudio.Setup.Configuration.Interop.dll", + "lib/net35/Microsoft.VisualStudio.Setup.Configuration.Interop.xml", + "lib/netstandard2.1/Microsoft.VisualStudio.Setup.Configuration.Interop.dll", + "lib/netstandard2.1/Microsoft.VisualStudio.Setup.Configuration.Interop.xml", + "microsoft.visualstudio.setup.configuration.interop.3.6.2115.nupkg.sha512", + "microsoft.visualstudio.setup.configuration.interop.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.15.0/17.6.36389": { + "sha512": "can/Bo1Zq/zFQXJgBuZg/GRbMFtZ93QkVLyGOqM1twyqOc6UzlaUgO/aK0pB6n5Mti6IG7oehroG13Rhg0RPpw==", + "type": "package", + "path": "microsoft.visualstudio.shell.15.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Shell.15.0.dll", + "lib/net472/Microsoft.VisualStudio.Shell.15.0.xml", + "lib/net472/cs/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.Shell.15.0.resources.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.Shell.15.0.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.Shell.15.0.xml", + "microsoft.visualstudio.shell.15.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.15.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.Design/17.6.36389": { + "sha512": "rh3rzAj+h82U6Fg6qx03XiaGntSJ5qJjwJMESzkbOk61p66nuVbeYMd5Oq+8Kx+YH+NgHKJXr16CqYUvHSx/Ww==", + "type": "package", + "path": "microsoft.visualstudio.shell.design/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Shell.Design.dll", + "lib/net472/Microsoft.VisualStudio.Shell.Design.xml", + "lib/net472/cs/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.Shell.Design.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.Shell.Design.resources.dll", + "microsoft.visualstudio.shell.design.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.design.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.Framework/17.6.36389": { + "sha512": "+nMuikijhR6WQeA6iIAMeTeInSzra4skPVskXOHxj6ECGhBJvi5B6T1TX5B016YUADgnqDwlKlgRYmUEQfIbOQ==", + "type": "package", + "path": "microsoft.visualstudio.shell.framework/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Shell.Framework.dll", + "lib/net472/Microsoft.VisualStudio.Shell.Framework.xml", + "lib/net472/cs/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.Shell.Framework.resources.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.Shell.Framework.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.Shell.Framework.xml", + "microsoft.visualstudio.shell.framework.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.framework.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.Interop/17.6.36389": { + "sha512": "kiMf6YDh1Yt+JPvUveiwOyvLGpXI0WWCjv/nubFV507I1jrRK0ux5DnYnWQ3J/AmvpAJ3Gj6QL2add84rXJi+g==", + "type": "package", + "path": "microsoft.visualstudio.shell.interop/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.dll", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.xml", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.dll", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.xml", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.dll", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.xml", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.dll", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.xml", + "microsoft.visualstudio.shell.interop.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.interop.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.Interop.10.0/17.6.36389": { + "sha512": "ciVnSl4i+pQwHYevCZ6+9cP5ZrWthvQV5B1PQjuTbx18z+ni6OjXJbolCwQOpL18rP9EvEpugHp6gE+JAs7jsw==", + "type": "package", + "path": "microsoft.visualstudio.shell.interop.10.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.10.0.dll", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.10.0.xml", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.10.0.dll", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.10.0.xml", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.10.0.dll", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.10.0.xml", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.10.0.dll", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.10.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.10.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.10.0.xml", + "microsoft.visualstudio.shell.interop.10.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.interop.10.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.Interop.11.0/17.6.36389": { + "sha512": "3hS0ulDFHjC6ETVZsSOZDLedLAhDL5zRwL1pAcen1qKe6QLfvSexI5hKYH18jN3vYoXh7+4gOgOaJ4pKFGtAdQ==", + "type": "package", + "path": "microsoft.visualstudio.shell.interop.11.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.11.0.dll", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.11.0.xml", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.11.0.dll", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.11.0.xml", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.11.0.dll", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.11.0.xml", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.11.0.dll", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.11.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.11.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.11.0.xml", + "microsoft.visualstudio.shell.interop.11.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.interop.11.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.Interop.12.0/17.6.36389": { + "sha512": "vr2LgVzVBWCnBcGu4PG2S/GabxjF+anpFARzAaR6H0WolMJ8v4CDYOCfS6SGZ+s5hj1+PZNTLd7LFwnidokuKw==", + "type": "package", + "path": "microsoft.visualstudio.shell.interop.12.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.12.0.dll", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.12.0.xml", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.12.0.dll", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.12.0.xml", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.12.0.dll", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.12.0.xml", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.12.0.dll", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.12.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.12.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.12.0.xml", + "microsoft.visualstudio.shell.interop.12.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.interop.12.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.Interop.8.0/17.6.36389": { + "sha512": "cKd52rPBki0RDtk2IXqGzY38VCUT27Uc1P8kaa5PUnnxfsrxLfPInCRk6/U1024lLB/iE23NKo0xT8uvrSVecw==", + "type": "package", + "path": "microsoft.visualstudio.shell.interop.8.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.8.0.dll", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.8.0.xml", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.8.0.dll", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.8.0.xml", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.8.0.dll", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.8.0.xml", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.8.0.dll", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.8.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.8.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.8.0.xml", + "microsoft.visualstudio.shell.interop.8.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.interop.8.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Shell.Interop.9.0/17.6.36389": { + "sha512": "cN4c0yPoL1zqyP8/LxW6VFJKBAW+IimBpneYyhAr66fa7Jh3T11/IkhTP8Cn8fvIZkNgr0nImQ36n3LtvYh0lA==", + "type": "package", + "path": "microsoft.visualstudio.shell.interop.9.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.9.0.dll", + "lib/net20/Microsoft.VisualStudio.Shell.Interop.9.0.xml", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.9.0.dll", + "lib/net45/Microsoft.VisualStudio.Shell.Interop.9.0.xml", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.9.0.dll", + "lib/net472/Microsoft.VisualStudio.Shell.Interop.9.0.xml", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.9.0.dll", + "lib/net6.0/Microsoft.VisualStudio.Shell.Interop.9.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.9.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Shell.Interop.9.0.xml", + "microsoft.visualstudio.shell.interop.9.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.shell.interop.9.0.nuspec" + ] + }, + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0/14.0.0": { + "sha512": "iZpAv8bEWjkyxFF1GIcSOfldqP/umopJKnJGKHa0vg8KR7ZY3u3dWtJmwO4w3abIx+176SIkQe78y5A+/Md7FA==", + "type": "package", + "path": "microsoft.visualstudio.taskrunnerexplorer.14.0/14.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net40/Microsoft.VisualStudio.TaskRunnerExplorer.14.0.dll", + "microsoft.visualstudio.taskrunnerexplorer.14.0.14.0.0.nupkg.sha512", + "microsoft.visualstudio.taskrunnerexplorer.14.0.nuspec" + ] + }, + "Microsoft.VisualStudio.Telemetry/17.6.46": { + "sha512": "1/hoYc2oPOnVx34kxsjHB/lwt/w4dHPltp8iztUmTVcLS0kcvIajDLlMCEkxN1BfPm7OmWSpJlY1CNzxNHMcmg==", + "type": "package", + "path": "microsoft.visualstudio.telemetry/17.6.46", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "PackageIcon.png", + "lib/net45/Microsoft.VisualStudio.Telemetry.dll", + "lib/net45/Microsoft.VisualStudio.Telemetry.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Telemetry.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Telemetry.xml", + "microsoft.visualstudio.telemetry.17.6.46.nupkg.sha512", + "microsoft.visualstudio.telemetry.nuspec" + ] + }, + "Microsoft.VisualStudio.Text.Data/17.6.268": { + "sha512": "aaYH491VMAOIHUQw6/CIjRhF/DHWyjMfZdfUtw+71FbWJb+xCrxPl3AcUysHqo79JdubacXsXWnkD6SZVGa0Gg==", + "type": "package", + "path": "microsoft.visualstudio.text.data/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Text.Data.dll", + "lib/net472/Microsoft.VisualStudio.Text.Data.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Text.Data.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Text.Data.xml", + "microsoft.visualstudio.text.data.17.6.268.nupkg.sha512", + "microsoft.visualstudio.text.data.nuspec" + ] + }, + "Microsoft.VisualStudio.Text.Logic/17.6.268": { + "sha512": "7dH7BbK0VaNd7qX74nD1SzjJMF4Sn5j9etcL0uxIVetXN7zhyWz307prkyN1JoRCLJQKwPAK2CP3NuL3td9D7A==", + "type": "package", + "path": "microsoft.visualstudio.text.logic/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Text.Logic.dll", + "lib/net472/Microsoft.VisualStudio.Text.Logic.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Text.Logic.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Text.Logic.xml", + "microsoft.visualstudio.text.logic.17.6.268.nupkg.sha512", + "microsoft.visualstudio.text.logic.nuspec" + ] + }, + "Microsoft.VisualStudio.Text.UI/17.6.268": { + "sha512": "nnV+n0XccVOsr0PC2mo5MTHAV+zHKJGk7NriLJ9UbexKRi203CPsQU+t9JxAN6ucgoCLe3DyowknPf3KAQkl5Q==", + "type": "package", + "path": "microsoft.visualstudio.text.ui/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Text.UI.dll", + "lib/net472/Microsoft.VisualStudio.Text.UI.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Text.UI.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Text.UI.xml", + "microsoft.visualstudio.text.ui.17.6.268.nupkg.sha512", + "microsoft.visualstudio.text.ui.nuspec" + ] + }, + "Microsoft.VisualStudio.Text.UI.Wpf/17.6.268": { + "sha512": "6i0rXz7RQbT4nLdErealR1ig+gKSL+9kr+68AGamzQuuqR8SZK8vbPYQyuk1U2BDcZq/A7wvTYaDJawbPwYgyA==", + "type": "package", + "path": "microsoft.visualstudio.text.ui.wpf/17.6.268", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Text.UI.Wpf.dll", + "lib/net472/Microsoft.VisualStudio.Text.UI.Wpf.xml", + "microsoft.visualstudio.text.ui.wpf.17.6.268.nupkg.sha512", + "microsoft.visualstudio.text.ui.wpf.nuspec" + ] + }, + "Microsoft.VisualStudio.TextManager.Interop/17.6.36389": { + "sha512": "GenqHFfwL+PbMcMFdXT4ZSjG5J9SD+kHRzVuNYzpGn2MMGCj3L8Nv09yz5sfUFOX5RkR5DxXJsOB6XOjnK8RZA==", + "type": "package", + "path": "microsoft.visualstudio.textmanager.interop/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.dll", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.xml", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.dll", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.xml", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.dll", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.xml", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.dll", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.xml", + "microsoft.visualstudio.textmanager.interop.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.textmanager.interop.nuspec" + ] + }, + "Microsoft.VisualStudio.TextManager.Interop.10.0/17.6.36389": { + "sha512": "EwFOc6VwZCV4YL2+zxjs1cHiqrBP0PdosHwLwJVvllyVqpXV/IHlVrLgA7+E9wGZ+xUUY+V8vqa7aZzamYoGPQ==", + "type": "package", + "path": "microsoft.visualstudio.textmanager.interop.10.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.10.0.dll", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.10.0.xml", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.10.0.dll", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.10.0.xml", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.10.0.dll", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.10.0.xml", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.10.0.dll", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.10.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.10.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.10.0.xml", + "microsoft.visualstudio.textmanager.interop.10.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.textmanager.interop.10.0.nuspec" + ] + }, + "Microsoft.VisualStudio.TextManager.Interop.11.0/17.6.36389": { + "sha512": "gcyClAwJpffHoeUYANhHL7ZZg9wjc9L4la9FlLCjllvCesC5w0JqJJGo+DqGxTwx2wvnuw/yZ/GHnyGsKKm/JQ==", + "type": "package", + "path": "microsoft.visualstudio.textmanager.interop.11.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.11.0.dll", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.11.0.xml", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.11.0.dll", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.11.0.xml", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.11.0.dll", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.11.0.xml", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.11.0.dll", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.11.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.11.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.11.0.xml", + "microsoft.visualstudio.textmanager.interop.11.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.textmanager.interop.11.0.nuspec" + ] + }, + "Microsoft.VisualStudio.TextManager.Interop.12.0/17.6.36389": { + "sha512": "YYLgywXiXOwqCdGd8uGTcMPA4sQcjaGom2RAkjzIgkxtUBH50eOzAwsaujZkxFEaR9PMJb89FjOsShaTE1R53Q==", + "type": "package", + "path": "microsoft.visualstudio.textmanager.interop.12.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.12.0.dll", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.12.0.xml", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.12.0.dll", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.12.0.xml", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.12.0.dll", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.12.0.xml", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.12.0.dll", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.12.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.12.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.12.0.xml", + "microsoft.visualstudio.textmanager.interop.12.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.textmanager.interop.12.0.nuspec" + ] + }, + "Microsoft.VisualStudio.TextManager.Interop.8.0/17.6.36389": { + "sha512": "6Rzm6+hCN1wr4gcw7SoOml6et9n0WWMBes56PQlSedNSxkRJIeoqMaT1oP66Cks0O5js8kK01j4cMQMdaLHCJw==", + "type": "package", + "path": "microsoft.visualstudio.textmanager.interop.8.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.8.0.dll", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.8.0.xml", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.8.0.dll", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.8.0.xml", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.8.0.dll", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.8.0.xml", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.8.0.dll", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.8.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.8.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.8.0.xml", + "microsoft.visualstudio.textmanager.interop.8.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.textmanager.interop.8.0.nuspec" + ] + }, + "Microsoft.VisualStudio.TextManager.Interop.9.0/17.6.36389": { + "sha512": "pcopP5Slx49GJURMUwWhh2WVN9UAzifw8XmvgiEdEFA3eeYUFxb6CoAQTaBXwIAMEnw2xo3Zw2N0C24IbHSIjw==", + "type": "package", + "path": "microsoft.visualstudio.textmanager.interop.9.0/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.9.0.dll", + "lib/net20/Microsoft.VisualStudio.TextManager.Interop.9.0.xml", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.9.0.dll", + "lib/net45/Microsoft.VisualStudio.TextManager.Interop.9.0.xml", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.9.0.dll", + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.9.0.xml", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.9.0.dll", + "lib/net6.0/Microsoft.VisualStudio.TextManager.Interop.9.0.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.9.0.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TextManager.Interop.9.0.xml", + "microsoft.visualstudio.textmanager.interop.9.0.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.textmanager.interop.9.0.nuspec" + ] + }, + "Microsoft.VisualStudio.TextTemplating.VSHost/17.6.36389": { + "sha512": "vt1arGIrjBal0pqdnBA4qp0pD94YPHdLhoEb35iuXgc3C8hnqhmq3yMn9ICdc7ID6ULxVV7yXThf9L4parzWWQ==", + "type": "package", + "path": "microsoft.visualstudio.texttemplating.vshost/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.TextTemplating.VSHost.dll", + "lib/net472/Microsoft.VisualStudio.TextTemplating.VSHost.xml", + "microsoft.visualstudio.texttemplating.vshost.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.texttemplating.vshost.nuspec" + ] + }, + "Microsoft.VisualStudio.Threading/17.6.40": { + "sha512": "hLa/0xargG7p3bF7aeq2/lRYn/bVnfZXurUWVHx+MNqxxAUjIDMKi4OIOWbYQ/DTkbn9gv8TLvgso+6EtHVQQg==", + "type": "package", + "path": "microsoft.visualstudio.threading/17.6.40", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Threading.dll", + "lib/net472/Microsoft.VisualStudio.Threading.xml", + "lib/net472/cs/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/Microsoft.VisualStudio.Threading.dll", + "lib/net6.0-windows7.0/Microsoft.VisualStudio.Threading.xml", + "lib/net6.0-windows7.0/cs/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/de/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/es/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/fr/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/it/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/ja/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/ko/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/pl/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/pt-BR/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/ru/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/tr/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/zh-Hans/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0-windows7.0/zh-Hant/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/Microsoft.VisualStudio.Threading.dll", + "lib/net6.0/Microsoft.VisualStudio.Threading.xml", + "lib/net6.0/cs/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/de/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/es/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/fr/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/it/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/ja/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/ko/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/pl/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/pt-BR/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/ru/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/tr/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.VisualStudio.Threading.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Threading.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Threading.xml", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.Threading.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.Threading.resources.dll", + "microsoft.visualstudio.threading.17.6.40.nupkg.sha512", + "microsoft.visualstudio.threading.nuspec" + ] + }, + "Microsoft.VisualStudio.Threading.Analyzers/17.6.40": { + "sha512": "uU8vYr/Nx3ldEWcsbiHiyAX1G7od3eFK1+Aga6ZvgCvU+nQkcXYVkIMcSEkIDWkFaldx1dkoVvX3KRNQD0R7dw==", + "type": "package", + "path": "microsoft.visualstudio.threading.analyzers/17.6.40", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "PackageIcon.png", + "analyzers/cs/Microsoft.VisualStudio.Threading.Analyzers.CSharp.dll", + "analyzers/cs/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.dll", + "analyzers/cs/Microsoft.VisualStudio.Threading.Analyzers.dll", + "analyzers/cs/cs/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/de/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/es/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/fr/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/it/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/ja/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/ko/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/pl/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/pt-BR/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/ru/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/tr/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/zh-Hans/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/cs/zh-Hant/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.dll", + "analyzers/vb/Microsoft.VisualStudio.Threading.Analyzers.VisualBasic.dll", + "analyzers/vb/Microsoft.VisualStudio.Threading.Analyzers.dll", + "analyzers/vb/cs/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/de/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/es/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/fr/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/it/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/ja/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/ko/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/pl/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/pt-BR/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/ru/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/tr/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/zh-Hans/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "analyzers/vb/zh-Hant/Microsoft.VisualStudio.Threading.Analyzers.CodeFixes.resources.dll", + "build/AdditionalFiles/vs-threading.LegacyThreadSwitchingMembers.txt", + "build/AdditionalFiles/vs-threading.MainThreadAssertingMethods.txt", + "build/AdditionalFiles/vs-threading.MainThreadSwitchingMethods.txt", + "build/AdditionalFiles/vs-threading.MembersRequiringMainThread.txt", + "build/Microsoft.VisualStudio.Threading.Analyzers.targets", + "microsoft.visualstudio.threading.analyzers.17.6.40.nupkg.sha512", + "microsoft.visualstudio.threading.analyzers.nuspec", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.VisualStudio.Utilities/17.6.36389": { + "sha512": "VVr9yCeFdzeeR/4I2fLpFrUHOaQYDm83Mu0WUCmrslLCroTacm4iOxsZPOR6hze5eKdXzI2D16RgienBjBJetw==", + "type": "package", + "path": "microsoft.visualstudio.utilities/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.Utilities.dll", + "lib/net472/Microsoft.VisualStudio.Utilities.xml", + "lib/net472/cs/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/de/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/en/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/es/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/fr/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/it/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/ja/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/ko/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/pl/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/pt-BR/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/ru/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/tr/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/zh-Hans/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net472/zh-Hant/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.Utilities.dll", + "lib/net6.0-windows8.0/Microsoft.VisualStudio.Utilities.xml", + "lib/net6.0-windows8.0/en/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/Microsoft.VisualStudio.Utilities.dll", + "lib/net6.0/Microsoft.VisualStudio.Utilities.xml", + "lib/net6.0/cs/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/de/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/en/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/es/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/fr/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/it/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/ja/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/ko/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/pl/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/pt-BR/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/ru/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/tr/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Utilities.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Utilities.xml", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/en/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.Utilities.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.Utilities.resources.dll", + "microsoft.visualstudio.utilities.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.utilities.nuspec" + ] + }, + "Microsoft.VisualStudio.Utilities.Internal/16.3.42": { + "sha512": "com/WkhcYqWZi6JFcqHOMGnmEEA1bErS4m2gyLMmTJ5qUDcGcP6bP6XYjMc4WrTmqkutqwLo+Wufyps5qAx6nw==", + "type": "package", + "path": "microsoft.visualstudio.utilities.internal/16.3.42", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "PackageIcon.png", + "lib/net45/Microsoft.VisualStudio.Utilities.Internal.dll", + "lib/net45/Microsoft.VisualStudio.Utilities.Internal.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.Utilities.Internal.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Utilities.Internal.xml", + "microsoft.visualstudio.utilities.internal.16.3.42.nupkg.sha512", + "microsoft.visualstudio.utilities.internal.nuspec" + ] + }, + "Microsoft.VisualStudio.Validation/17.6.11": { + "sha512": "J+9L/iac6c8cwcgVSCMuoIYOlD1Jw4mbZ8XMe1IZVj8p8+3dJ46LnnkIkTRMjK7xs9UtU9MoUp1JGhWoN6fAEw==", + "type": "package", + "path": "microsoft.visualstudio.validation/17.6.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "PackageIcon.png", + "README.md", + "lib/net6.0/Microsoft.VisualStudio.Validation.dll", + "lib/net6.0/Microsoft.VisualStudio.Validation.xml", + "lib/net6.0/cs/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/de/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/es/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/fr/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/it/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/ja/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/ko/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/pl/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/pt-BR/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/ru/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/tr/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.VisualStudio.Validation.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Validation.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.Validation.xml", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.Validation.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.Validation.resources.dll", + "microsoft.visualstudio.validation.17.6.11.nupkg.sha512", + "microsoft.visualstudio.validation.nuspec" + ] + }, + "Microsoft.VisualStudio.VCProjectEngine/17.6.36389": { + "sha512": "b3SKi534lw/rWw2sUytIeoWvVIbaw7W8/MOE1QTVTYVayUx+21yuhjr3+GBmAdMCCpwj8KHraBBF/s5S0DjRlw==", + "type": "package", + "path": "microsoft.visualstudio.vcprojectengine/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net472/Microsoft.VisualStudio.VCProjectEngine.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.VCProjectEngine.dll", + "microsoft.visualstudio.vcprojectengine.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.vcprojectengine.nuspec" + ] + }, + "Microsoft.VisualStudio.VSHelp/17.6.36389": { + "sha512": "grAduqM0IUFqggEm8i/lTUnQRUjJFFFWw3avIUY8Tsnw1Y5CFg5FAm3Zn6I2EDItQ7RnbqF6JhG+s4lxnpc6BA==", + "type": "package", + "path": "microsoft.visualstudio.vshelp/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.VSHelp.dll", + "lib/net20/Microsoft.VisualStudio.VSHelp.xml", + "lib/net45/Microsoft.VisualStudio.VSHelp.dll", + "lib/net45/Microsoft.VisualStudio.VSHelp.xml", + "lib/net472/Microsoft.VisualStudio.VSHelp.dll", + "lib/net472/Microsoft.VisualStudio.VSHelp.xml", + "lib/net6.0/Microsoft.VisualStudio.VSHelp.dll", + "lib/net6.0/Microsoft.VisualStudio.VSHelp.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.VSHelp.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.VSHelp.xml", + "microsoft.visualstudio.vshelp.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.vshelp.nuspec" + ] + }, + "Microsoft.VisualStudio.VSHelp80/17.6.36389": { + "sha512": "MYI2Vy7pZa9cqOdIT6YB+ffVM2KztMS/fJM7NfBIAbFlT5ReRSz8JCD6xf/9uBR6KTSXeT8zrSWF74pBjhY+BQ==", + "type": "package", + "path": "microsoft.visualstudio.vshelp80/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.VSHelp80.dll", + "lib/net20/Microsoft.VisualStudio.VSHelp80.xml", + "lib/net45/Microsoft.VisualStudio.VSHelp80.dll", + "lib/net45/Microsoft.VisualStudio.VSHelp80.xml", + "lib/net472/Microsoft.VisualStudio.VSHelp80.dll", + "lib/net472/Microsoft.VisualStudio.VSHelp80.xml", + "lib/net6.0/Microsoft.VisualStudio.VSHelp80.dll", + "lib/net6.0/Microsoft.VisualStudio.VSHelp80.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.VSHelp80.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.VSHelp80.xml", + "microsoft.visualstudio.vshelp80.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.vshelp80.nuspec" + ] + }, + "Microsoft.VisualStudio.WCFReference.Interop/17.6.36389": { + "sha512": "QFMi0THvj4gvJjXuFqg9c94Xu0vsSIhRH9ZsLZdqTPS+skIdTskxLNO5P/e70wLlMRlO6IkQbe7yKv6D0kKEyw==", + "type": "package", + "path": "microsoft.visualstudio.wcfreference.interop/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/Microsoft.VisualStudio.WCFReference.Interop.dll", + "lib/net20/Microsoft.VisualStudio.WCFReference.Interop.xml", + "lib/net45/Microsoft.VisualStudio.WCFReference.Interop.dll", + "lib/net45/Microsoft.VisualStudio.WCFReference.Interop.xml", + "lib/net472/Microsoft.VisualStudio.WCFReference.Interop.dll", + "lib/net472/Microsoft.VisualStudio.WCFReference.Interop.xml", + "lib/net6.0/Microsoft.VisualStudio.WCFReference.Interop.dll", + "lib/net6.0/Microsoft.VisualStudio.WCFReference.Interop.xml", + "lib/netstandard2.0/Microsoft.VisualStudio.WCFReference.Interop.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.WCFReference.Interop.xml", + "microsoft.visualstudio.wcfreference.interop.17.6.36389.nupkg.sha512", + "microsoft.visualstudio.wcfreference.interop.nuspec" + ] + }, + "Microsoft.VisualStudio.Web.BrowserLink.12.0/12.0.0": { + "sha512": "HeuaZh8+wNVdwx7VF8guFGH2Z2zH+FYxWBsRNp+FjjlmrhCfM7GUQV5azaTv/bN5TPaK8ALJoP9UX5o1FB5k1A==", + "type": "package", + "path": "microsoft.visualstudio.web.browserlink.12.0/12.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net40/Microsoft.VisualStudio.Web.BrowserLink.12.0.dll", + "lib/net40/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/cs/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/de/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/es/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/fr/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/it/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/ja/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/ko/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/pl/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/pt-br/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/ru/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/tr/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/za-Hant/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "lib/net40/zh-Hans/Microsoft.VisualStudio.Web.BrowserLink.12.0.xml", + "microsoft.visualstudio.web.browserlink.12.0.12.0.0.nupkg.sha512", + "microsoft.visualstudio.web.browserlink.12.0.nuspec" + ] + }, + "Microsoft.VSSDK.BuildTools/17.6.2164": { + "sha512": "SIyMfFGhGfJ4NLgbwW157ylbR0OCZJrxy7ge+jX14Fmhedj+SLQG9duqc0FRnIvMq4e1EmLNEAHE2wvXu1h+/w==", + "type": "package", + "path": "microsoft.vssdk.buildtools/17.6.2164", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "NOTICE.txt", + "PackageIcon.png", + "build/Microsoft.VSSDK.BuildTools.props", + "build/Microsoft.VSSDK.BuildTools.targets", + "microsoft.vssdk.buildtools.17.6.2164.nupkg.sha512", + "microsoft.vssdk.buildtools.nuspec", + "tools/vssdk/Empty.resx", + "tools/vssdk/MessagePack.Annotations.dll", + "tools/vssdk/MessagePack.dll", + "tools/vssdk/Microsoft.Bcl.AsyncInterfaces.dll", + "tools/vssdk/Microsoft.IO.Redist.dll", + "tools/vssdk/Microsoft.Internal.VisualStudio.Shell.Framework.dll", + "tools/vssdk/Microsoft.VisualStudio.ExtensionEngine.dll", + "tools/vssdk/Microsoft.VisualStudio.ExtensionEngineContract.dll", + "tools/vssdk/Microsoft.VisualStudio.Sdk.BuildTasks.17.0.dll", + "tools/vssdk/Microsoft.VisualStudio.Sdk.BuildTasks.dll", + "tools/vssdk/Microsoft.VisualStudio.Sdk.Common.targets", + "tools/vssdk/Microsoft.VisualStudio.Setup.Common.dll", + "tools/vssdk/Microsoft.VisualStudio.Shell.15.0.dll", + "tools/vssdk/Microsoft.VisualStudio.Shell.Framework.dll", + "tools/vssdk/Microsoft.VisualStudio.Threading.dll", + "tools/vssdk/Microsoft.VisualStudio.Validation.dll", + "tools/vssdk/Microsoft.VsSDK.Cpp.Overrides.targets", + "tools/vssdk/Microsoft.VsSDK.Cpp.targets", + "tools/vssdk/Microsoft.VsSDK.targets", + "tools/vssdk/Nerdbank.Streams.dll", + "tools/vssdk/Newtonsoft.Json.dll", + "tools/vssdk/PkgDefMgmt.dll", + "tools/vssdk/ProjectItemsSchema.xml", + "tools/vssdk/System.IO.Pipelines.dll", + "tools/vssdk/System.Reflection.Metadata.dll", + "tools/vssdk/System.Threading.Tasks.Extensions.dll", + "tools/vssdk/bin/ConvertCTCToVSCT.pl", + "tools/vssdk/bin/CreatePkgDef.exe", + "tools/vssdk/bin/CreatePkgDef.exe.config", + "tools/vssdk/bin/DebugSamples.dll", + "tools/vssdk/bin/RegRiched20.exe", + "tools/vssdk/bin/VSCT.exe", + "tools/vssdk/bin/VSCTCompress.dll", + "tools/vssdk/bin/VSCTLibrary.dll", + "tools/vssdk/bin/VsixCommandLine.dll", + "tools/vssdk/bin/VsixPublisher.exe", + "tools/vssdk/bin/VsixPublisher.exe.config", + "tools/vssdk/bin/VsixUtil.exe", + "tools/vssdk/bin/VsixUtil.exe.config", + "tools/vssdk/bin/arm64/CreatePkgDef.exe", + "tools/vssdk/bin/arm64/CreatePkgDef.exe.config", + "tools/vssdk/bin/arm64/lib/Microsoft.VisualStudio.Shell.Framework.dll", + "tools/vssdk/bin/lib/Dia2Lib.dll", + "tools/vssdk/bin/lib/MessagePack.Annotations.dll", + "tools/vssdk/bin/lib/MessagePack.dll", + "tools/vssdk/bin/lib/Microsoft.Bcl.AsyncInterfaces.dll", + "tools/vssdk/bin/lib/Microsoft.Build.Framework.dll", + "tools/vssdk/bin/lib/Microsoft.Diagnostics.FastSerialization.dll", + "tools/vssdk/bin/lib/Microsoft.Diagnostics.Tracing.TraceEvent.dll", + "tools/vssdk/bin/lib/Microsoft.IO.Redist.dll", + "tools/vssdk/bin/lib/Microsoft.Internal.Performance.CodeMarkers.DesignTime.dll", + "tools/vssdk/bin/lib/Microsoft.Internal.VisualStudio.Interop.dll", + "tools/vssdk/bin/lib/Microsoft.Internal.VisualStudio.Shell.Framework.dll", + "tools/vssdk/bin/lib/Microsoft.ServiceHub.Framework.dll", + "tools/vssdk/bin/lib/Microsoft.ServiceHub.Resources.dll", + "tools/vssdk/bin/lib/Microsoft.TeamFoundation.Common.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.ComponentModelHost.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Composition.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.CoreUtility.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.ExtensionEngine.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.ExtensionEngineContract.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.GraphModel.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.ImageCatalog.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Imaging.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Interop.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.ProjectAggregator.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.RemoteControl.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.RpcContracts.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Services.Common.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Services.WebApi.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Setup.Common.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Setup.Configuration.Interop.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Setup.Download.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Setup.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Shell.15.0.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Shell.Framework.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Telemetry.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Text.Data.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Threading.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Utilities.Internal.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Utilities.dll", + "tools/vssdk/bin/lib/Microsoft.VisualStudio.Validation.dll", + "tools/vssdk/bin/lib/Microsoft.Win32.Registry.dll", + "tools/vssdk/bin/lib/Nerdbank.Streams.dll", + "tools/vssdk/bin/lib/Newtonsoft.Json.dll", + "tools/vssdk/bin/lib/Nuget.Packaging.Extraction.dll", + "tools/vssdk/bin/lib/OSExtensions.dll", + "tools/vssdk/bin/lib/StreamJsonRpc.dll", + "tools/vssdk/bin/lib/System.Buffers.dll", + "tools/vssdk/bin/lib/System.Collections.Immutable.dll", + "tools/vssdk/bin/lib/System.Composition.AttributedModel.dll", + "tools/vssdk/bin/lib/System.Composition.Convention.dll", + "tools/vssdk/bin/lib/System.Composition.Hosting.dll", + "tools/vssdk/bin/lib/System.Composition.Runtime.dll", + "tools/vssdk/bin/lib/System.Composition.TypedParts.dll", + "tools/vssdk/bin/lib/System.Diagnostics.DiagnosticSource.dll", + "tools/vssdk/bin/lib/System.IO.Pipelines.dll", + "tools/vssdk/bin/lib/System.Memory.dll", + "tools/vssdk/bin/lib/System.Net.Http.Formatting.dll", + "tools/vssdk/bin/lib/System.Numerics.Vectors.dll", + "tools/vssdk/bin/lib/System.Reflection.Metadata.dll", + "tools/vssdk/bin/lib/System.Reflection.TypeExtensions.dll", + "tools/vssdk/bin/lib/System.Runtime.CompilerServices.Unsafe.dll", + "tools/vssdk/bin/lib/System.Security.AccessControl.dll", + "tools/vssdk/bin/lib/System.Security.Principal.Windows.dll", + "tools/vssdk/bin/lib/System.Threading.AccessControl.dll", + "tools/vssdk/bin/lib/System.Threading.Tasks.Dataflow.dll", + "tools/vssdk/bin/lib/System.Threading.Tasks.Extensions.dll", + "tools/vssdk/bin/lib/System.ValueTuple.dll", + "tools/vssdk/bin/lib/TraceReloggerLib.dll", + "tools/vssdk/bin/lib/VsixCommandLine.dll", + "tools/vssdk/bin/lib/VsixPublisher.exe", + "tools/vssdk/bin/lib/vsixpublisher/System.Runtime.CompilerServices.Unsafe.dll", + "tools/vssdk/bin/x86/CreatePkgDef.exe", + "tools/vssdk/bin/x86/CreatePkgDef.exe.config", + "tools/vssdk/bin/x86/VSCTCompress.dll", + "tools/vssdk/bin/x86/lib/Microsoft.VisualStudio.Shell.Framework.dll", + "tools/vssdk/inc/AppIDCmdUsed.vsct", + "tools/vssdk/inc/EmulatorCmdUsed.vsct", + "tools/vssdk/inc/KnownImageIds.vsct", + "tools/vssdk/inc/Menus.vsct", + "tools/vssdk/inc/MnuHelpIds.h", + "tools/vssdk/inc/RazorCmdId.h", + "tools/vssdk/inc/RazorCmdUsed.vsct", + "tools/vssdk/inc/RazorGuids.h", + "tools/vssdk/inc/SharedCmdDef.vsct", + "tools/vssdk/inc/SharedCmdPlace.vsct", + "tools/vssdk/inc/ShellCmdDef.vsct", + "tools/vssdk/inc/ShellCmdPlace.vsct", + "tools/vssdk/inc/VsDbgCmd.h", + "tools/vssdk/inc/VsDbgCmdPlace.vsct", + "tools/vssdk/inc/VsDbgCmdUsed.vsct", + "tools/vssdk/inc/editids.h", + "tools/vssdk/inc/sccmnid.h", + "tools/vssdk/inc/sharedids.h", + "tools/vssdk/inc/stdidcmd.h", + "tools/vssdk/inc/venusids.h", + "tools/vssdk/inc/venusmenu.vsct", + "tools/vssdk/inc/virtkeys.h", + "tools/vssdk/inc/vsdebugguids.h", + "tools/vssdk/inc/vsshlids.h", + "tools/vssdk/inc/wbids.h", + "tools/vssdk/offreg.dll", + "tools/vssdk/schemas/PackageLanguagePackManifestSchema.xsd", + "tools/vssdk/schemas/PackageManifestSchema.Assets.xsd", + "tools/vssdk/schemas/PackageManifestSchema.Dependencies.xsd", + "tools/vssdk/schemas/PackageManifestSchema.DesignNamespace.xsd", + "tools/vssdk/schemas/PackageManifestSchema.Installation.xsd", + "tools/vssdk/schemas/PackageManifestSchema.Installer.xsd", + "tools/vssdk/schemas/PackageManifestSchema.Metadata.xsd", + "tools/vssdk/schemas/PackageManifestSchema.Prerequisites.xsd", + "tools/vssdk/schemas/PackageManifestSchema.xsd", + "tools/vssdk/schemas/VSIXLanguagePackSchema.xsd", + "tools/vssdk/schemas/VSIXManifestSchema.xsd" + ] + }, + "Microsoft.VsSDK.CompatibilityAnalyzer/17.6.2164": { + "sha512": "9BqGG+sMd6SAHz5DutKyMj8s/pmZwA8L6+dluoYZarRlNb5+1uv7vwREnJ3Wtisj6wNpLxrJn4ueE7LAsOPLLw==", + "type": "package", + "path": "microsoft.vssdk.compatibilityanalyzer/17.6.2164", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "PackageIcon.png", + "build/Microsoft.VsSDK.CompatibilityAnalyzer.props", + "build/Microsoft.VsSDK.CompatibilityAnalyzer.targets", + "license.txt", + "microsoft.vssdk.compatibilityanalyzer.17.6.2164.nupkg.sha512", + "microsoft.vssdk.compatibilityanalyzer.nuspec", + "tools/net472/Microsoft.VisualStudio.Sdk.CompatibilityAnalyzerTasks.dll", + "tools/net472/VsixCompatibilityAnalyzer.dll", + "tools/net6.0/Microsoft.VisualStudio.Sdk.CompatibilityAnalyzerTasks.dll", + "tools/net6.0/System.IO.Packaging.dll", + "tools/net6.0/VsixCompatibilityAnalyzer.dll" + ] + }, + "Microsoft.Web.WebView2/1.0.2478.35": { + "sha512": "iDlxm6Gv4CU64ch4nc4DZXLbb5VRYNJb3IjGC+zJdEVIHjqt8Fed3JeThXIhpIwf49ke4e/CULYJXfNiG0sNhg==", + "type": "package", + "path": "microsoft.web.webview2/1.0.2478.35", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "NOTICE.txt", + "WebView2.idl", + "WebView2.tlb", + "build/Common.targets", + "build/Microsoft.Web.WebView2.targets", + "build/WebView2Rules.Project.xml", + "build/native/Microsoft.Web.WebView2.targets", + "build/native/arm64/WebView2Loader.dll", + "build/native/arm64/WebView2Loader.dll.lib", + "build/native/arm64/WebView2LoaderStatic.lib", + "build/native/include-winrt/WebView2Interop.h", + "build/native/include-winrt/WebView2Interop.idl", + "build/native/include-winrt/WebView2Interop.tlb", + "build/native/include/WebView2.h", + "build/native/include/WebView2EnvironmentOptions.h", + "build/native/x64/WebView2Loader.dll", + "build/native/x64/WebView2Loader.dll.lib", + "build/native/x64/WebView2LoaderStatic.lib", + "build/native/x86/WebView2Loader.dll", + "build/native/x86/WebView2Loader.dll.lib", + "build/native/x86/WebView2LoaderStatic.lib", + "build/wv2winrt.targets", + "lib/Microsoft.Web.WebView2.Core.winmd", + "lib/net45/Microsoft.Web.WebView2.Core.dll", + "lib/net45/Microsoft.Web.WebView2.Core.xml", + "lib/net45/Microsoft.Web.WebView2.WinForms.dll", + "lib/net45/Microsoft.Web.WebView2.WinForms.xml", + "lib/net45/Microsoft.Web.WebView2.Wpf.dll", + "lib/net45/Microsoft.Web.WebView2.Wpf.xml", + "lib/netcoreapp3.0/Microsoft.Web.WebView2.Core.dll", + "lib/netcoreapp3.0/Microsoft.Web.WebView2.Core.xml", + "lib/netcoreapp3.0/Microsoft.Web.WebView2.WinForms.dll", + "lib/netcoreapp3.0/Microsoft.Web.WebView2.WinForms.xml", + "lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.dll", + "lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.xml", + "microsoft.web.webview2.1.0.2478.35.nupkg.sha512", + "microsoft.web.webview2.nuspec", + "runtimes/win-arm64/native/WebView2Loader.dll", + "runtimes/win-arm64/native_uap/Microsoft.Web.WebView2.Core.dll", + "runtimes/win-x64/native/WebView2Loader.dll", + "runtimes/win-x64/native_uap/Microsoft.Web.WebView2.Core.dll", + "runtimes/win-x86/native/WebView2Loader.dll", + "runtimes/win-x86/native_uap/Microsoft.Web.WebView2.Core.dll", + "tools/VisualStudioToolsManifest.xml", + "tools/wv2winrt/Antlr3.Runtime.dll", + "tools/wv2winrt/Antlr4.StringTemplate.dll", + "tools/wv2winrt/System.Buffers.dll", + "tools/wv2winrt/System.CommandLine.DragonFruit.dll", + "tools/wv2winrt/System.CommandLine.Rendering.dll", + "tools/wv2winrt/System.CommandLine.dll", + "tools/wv2winrt/System.Memory.dll", + "tools/wv2winrt/System.Numerics.Vectors.dll", + "tools/wv2winrt/System.Runtime.CompilerServices.Unsafe.dll", + "tools/wv2winrt/codegen_util.dll", + "tools/wv2winrt/concrt140_app.dll", + "tools/wv2winrt/cs/System.CommandLine.resources.dll", + "tools/wv2winrt/de/System.CommandLine.resources.dll", + "tools/wv2winrt/es/System.CommandLine.resources.dll", + "tools/wv2winrt/fr/System.CommandLine.resources.dll", + "tools/wv2winrt/it/System.CommandLine.resources.dll", + "tools/wv2winrt/ja/System.CommandLine.resources.dll", + "tools/wv2winrt/ko/System.CommandLine.resources.dll", + "tools/wv2winrt/msvcp140_1_app.dll", + "tools/wv2winrt/msvcp140_2_app.dll", + "tools/wv2winrt/msvcp140_app.dll", + "tools/wv2winrt/pl/System.CommandLine.resources.dll", + "tools/wv2winrt/pt-BR/System.CommandLine.resources.dll", + "tools/wv2winrt/ru/System.CommandLine.resources.dll", + "tools/wv2winrt/tr/System.CommandLine.resources.dll", + "tools/wv2winrt/type_hierarchy.dll", + "tools/wv2winrt/vcamp140_app.dll", + "tools/wv2winrt/vccorlib140_app.dll", + "tools/wv2winrt/vcomp140_app.dll", + "tools/wv2winrt/vcruntime140_app.dll", + "tools/wv2winrt/winrt_winmd.dll", + "tools/wv2winrt/winrt_winmd.winmd", + "tools/wv2winrt/wv2winrt.exe", + "tools/wv2winrt/wv2winrt.exe.config", + "tools/wv2winrt/wv2winrt.xml", + "tools/wv2winrt/zh-Hans/System.CommandLine.resources.dll", + "tools/wv2winrt/zh-Hant/System.CommandLine.resources.dll" + ] + }, + "Microsoft.Win32.Primitives/4.3.0": { + "sha512": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "type": "package", + "path": "microsoft.win32.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/Microsoft.Win32.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "microsoft.win32.primitives.4.3.0.nupkg.sha512", + "microsoft.win32.primitives.nuspec", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/Microsoft.Win32.Primitives.dll", + "ref/netstandard1.3/Microsoft.Win32.Primitives.dll", + "ref/netstandard1.3/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/de/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/es/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/fr/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/it/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ja/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ko/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ru/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/zh-hans/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/zh-hant/Microsoft.Win32.Primitives.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "Microsoft.Win32.Registry/5.0.0": { + "sha512": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "type": "package", + "path": "microsoft.win32.registry/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/Microsoft.Win32.Registry.dll", + "lib/net461/Microsoft.Win32.Registry.dll", + "lib/net461/Microsoft.Win32.Registry.xml", + "lib/netstandard1.3/Microsoft.Win32.Registry.dll", + "lib/netstandard2.0/Microsoft.Win32.Registry.dll", + "lib/netstandard2.0/Microsoft.Win32.Registry.xml", + "microsoft.win32.registry.5.0.0.nupkg.sha512", + "microsoft.win32.registry.nuspec", + "ref/net46/Microsoft.Win32.Registry.dll", + "ref/net461/Microsoft.Win32.Registry.dll", + "ref/net461/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/Microsoft.Win32.Registry.dll", + "ref/netstandard1.3/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/de/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/es/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/it/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml", + "ref/netstandard2.0/Microsoft.Win32.Registry.dll", + "ref/netstandard2.0/Microsoft.Win32.Registry.xml", + "runtimes/win/lib/net46/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/net461/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/net461/Microsoft.Win32.Registry.xml", + "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.xml", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Nerdbank.Streams/2.9.112": { + "sha512": "SEEoiRbeDZ/FoPmAEgVWIngdM1PCqeZd61P5P/7jVn16k/ObjTxhiMozajlYoQftL/yYTYkH/MqaE1XGMssazw==", + "type": "package", + "path": "nerdbank.streams/2.9.112", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "lib/netstandard2.0/Nerdbank.Streams.dll", + "lib/netstandard2.0/Nerdbank.Streams.xml", + "lib/netstandard2.1/Nerdbank.Streams.dll", + "lib/netstandard2.1/Nerdbank.Streams.xml", + "nerdbank.streams.2.9.112.nupkg.sha512", + "nerdbank.streams.nuspec" + ] + }, + "Newtonsoft.Json/13.0.3": { + "sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==", + "type": "package", + "path": "newtonsoft.json/13.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/net6.0/Newtonsoft.Json.dll", + "lib/net6.0/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/netstandard1.3/Newtonsoft.Json.dll", + "lib/netstandard1.3/Newtonsoft.Json.xml", + "lib/netstandard2.0/Newtonsoft.Json.dll", + "lib/netstandard2.0/Newtonsoft.Json.xml", + "newtonsoft.json.13.0.3.nupkg.sha512", + "newtonsoft.json.nuspec", + "packageIcon.png" + ] + }, + "stdole/17.6.36389": { + "sha512": "pODDhxBEF9l/nmB6tgdSrLydJ68+DwlBoL+8IXxMpjOJrN0VzsaQ91hMcnnhZV0Y+v9Y4F3ApCtTVNwIawpeJw==", + "type": "package", + "path": "stdole/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/stdole.dll", + "lib/net20/stdole.xml", + "lib/net45/stdole.dll", + "lib/net45/stdole.xml", + "lib/net472/stdole.dll", + "lib/net472/stdole.xml", + "lib/net6.0/stdole.dll", + "lib/net6.0/stdole.xml", + "lib/netstandard2.0/stdole.dll", + "lib/netstandard2.0/stdole.xml", + "stdole.17.6.36389.nupkg.sha512", + "stdole.nuspec" + ] + }, + "StreamJsonRpc/2.15.29": { + "sha512": "qe4YV1fG30uxeRswBhOkrlx0EJwoSvf+MED9znBSvHWPGs6zb/0pCAKkgeN2ei0gCH3pY3hltMZpWBzjQxS2wg==", + "type": "package", + "path": "streamjsonrpc/2.15.29", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "PackageIcon.png", + "lib/netstandard2.0/StreamJsonRpc.dll", + "lib/netstandard2.0/StreamJsonRpc.xml", + "lib/netstandard2.0/cs/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/de/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/es/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/fr/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/it/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/ja/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/ko/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/pl/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/pt-BR/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/ru/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/tr/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/zh-Hans/StreamJsonRpc.resources.dll", + "lib/netstandard2.0/zh-Hant/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/StreamJsonRpc.dll", + "lib/netstandard2.1/StreamJsonRpc.xml", + "lib/netstandard2.1/cs/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/de/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/es/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/fr/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/it/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/ja/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/ko/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/pl/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/pt-BR/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/ru/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/tr/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/zh-Hans/StreamJsonRpc.resources.dll", + "lib/netstandard2.1/zh-Hant/StreamJsonRpc.resources.dll", + "streamjsonrpc.2.15.29.nupkg.sha512", + "streamjsonrpc.nuspec" + ] + }, + "System.Buffers/4.5.1": { + "sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "type": "package", + "path": "system.buffers/4.5.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Buffers.dll", + "lib/net461/System.Buffers.xml", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.1/System.Buffers.dll", + "lib/netstandard1.1/System.Buffers.xml", + "lib/netstandard2.0/System.Buffers.dll", + "lib/netstandard2.0/System.Buffers.xml", + "lib/uap10.0.16299/_._", + "ref/net45/System.Buffers.dll", + "ref/net45/System.Buffers.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.1/System.Buffers.dll", + "ref/netstandard1.1/System.Buffers.xml", + "ref/netstandard2.0/System.Buffers.dll", + "ref/netstandard2.0/System.Buffers.xml", + "ref/uap10.0.16299/_._", + "system.buffers.4.5.1.nupkg.sha512", + "system.buffers.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Collections.Immutable/7.0.0": { + "sha512": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==", + "type": "package", + "path": "system.collections.immutable/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "README.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Collections.Immutable.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets", + "lib/net462/System.Collections.Immutable.dll", + "lib/net462/System.Collections.Immutable.xml", + "lib/net6.0/System.Collections.Immutable.dll", + "lib/net6.0/System.Collections.Immutable.xml", + "lib/net7.0/System.Collections.Immutable.dll", + "lib/net7.0/System.Collections.Immutable.xml", + "lib/netstandard2.0/System.Collections.Immutable.dll", + "lib/netstandard2.0/System.Collections.Immutable.xml", + "system.collections.immutable.7.0.0.nupkg.sha512", + "system.collections.immutable.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.ComponentModel.Composition/7.0.0": { + "sha512": "orv0h38ZVPCPo/FW0LGv8/TigXwX8cIwXeQcaNYhikkqELDm8sUFLMcof/Sjcq5EvYCm5NA7MV3hG4u75H44UQ==", + "type": "package", + "path": "system.componentmodel.composition/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.ComponentModel.Composition.targets", + "lib/net462/_._", + "lib/net6.0/System.ComponentModel.Composition.dll", + "lib/net6.0/System.ComponentModel.Composition.xml", + "lib/net7.0/System.ComponentModel.Composition.dll", + "lib/net7.0/System.ComponentModel.Composition.xml", + "lib/netstandard2.0/System.ComponentModel.Composition.dll", + "lib/netstandard2.0/System.ComponentModel.Composition.xml", + "system.componentmodel.composition.7.0.0.nupkg.sha512", + "system.componentmodel.composition.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition/7.0.0": { + "sha512": "tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "type": "package", + "path": "system.composition/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.targets", + "lib/net461/_._", + "lib/netcoreapp2.0/_._", + "lib/netstandard2.0/_._", + "system.composition.7.0.0.nupkg.sha512", + "system.composition.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.AttributedModel/7.0.0": { + "sha512": "2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==", + "type": "package", + "path": "system.composition.attributedmodel/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.AttributedModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.AttributedModel.targets", + "lib/net462/System.Composition.AttributedModel.dll", + "lib/net462/System.Composition.AttributedModel.xml", + "lib/net6.0/System.Composition.AttributedModel.dll", + "lib/net6.0/System.Composition.AttributedModel.xml", + "lib/net7.0/System.Composition.AttributedModel.dll", + "lib/net7.0/System.Composition.AttributedModel.xml", + "lib/netstandard2.0/System.Composition.AttributedModel.dll", + "lib/netstandard2.0/System.Composition.AttributedModel.xml", + "system.composition.attributedmodel.7.0.0.nupkg.sha512", + "system.composition.attributedmodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Convention/7.0.0": { + "sha512": "IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "type": "package", + "path": "system.composition.convention/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Convention.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Convention.targets", + "lib/net462/System.Composition.Convention.dll", + "lib/net462/System.Composition.Convention.xml", + "lib/net6.0/System.Composition.Convention.dll", + "lib/net6.0/System.Composition.Convention.xml", + "lib/net7.0/System.Composition.Convention.dll", + "lib/net7.0/System.Composition.Convention.xml", + "lib/netstandard2.0/System.Composition.Convention.dll", + "lib/netstandard2.0/System.Composition.Convention.xml", + "system.composition.convention.7.0.0.nupkg.sha512", + "system.composition.convention.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Hosting/7.0.0": { + "sha512": "eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "type": "package", + "path": "system.composition.hosting/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Hosting.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Hosting.targets", + "lib/net462/System.Composition.Hosting.dll", + "lib/net462/System.Composition.Hosting.xml", + "lib/net6.0/System.Composition.Hosting.dll", + "lib/net6.0/System.Composition.Hosting.xml", + "lib/net7.0/System.Composition.Hosting.dll", + "lib/net7.0/System.Composition.Hosting.xml", + "lib/netstandard2.0/System.Composition.Hosting.dll", + "lib/netstandard2.0/System.Composition.Hosting.xml", + "system.composition.hosting.7.0.0.nupkg.sha512", + "system.composition.hosting.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Runtime/7.0.0": { + "sha512": "aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==", + "type": "package", + "path": "system.composition.runtime/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Runtime.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Runtime.targets", + "lib/net462/System.Composition.Runtime.dll", + "lib/net462/System.Composition.Runtime.xml", + "lib/net6.0/System.Composition.Runtime.dll", + "lib/net6.0/System.Composition.Runtime.xml", + "lib/net7.0/System.Composition.Runtime.dll", + "lib/net7.0/System.Composition.Runtime.xml", + "lib/netstandard2.0/System.Composition.Runtime.dll", + "lib/netstandard2.0/System.Composition.Runtime.xml", + "system.composition.runtime.7.0.0.nupkg.sha512", + "system.composition.runtime.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.TypedParts/7.0.0": { + "sha512": "ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "type": "package", + "path": "system.composition.typedparts/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.TypedParts.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.TypedParts.targets", + "lib/net462/System.Composition.TypedParts.dll", + "lib/net462/System.Composition.TypedParts.xml", + "lib/net6.0/System.Composition.TypedParts.dll", + "lib/net6.0/System.Composition.TypedParts.xml", + "lib/net7.0/System.Composition.TypedParts.dll", + "lib/net7.0/System.Composition.TypedParts.xml", + "lib/netstandard2.0/System.Composition.TypedParts.dll", + "lib/netstandard2.0/System.Composition.TypedParts.xml", + "system.composition.typedparts.7.0.0.nupkg.sha512", + "system.composition.typedparts.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Diagnostics.DiagnosticSource/7.0.1": { + "sha512": "T9SLFxzDp0SreCffRDXSAS5G+lq6E8qP4knHS2IBjwCdx2KEvGnGZsq7gFpselYOda7l6gXsJMD93TQsFj/URA==", + "type": "package", + "path": "system.diagnostics.diagnosticsource/7.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.DiagnosticSource.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets", + "lib/net462/System.Diagnostics.DiagnosticSource.dll", + "lib/net462/System.Diagnostics.DiagnosticSource.xml", + "lib/net6.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net6.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net7.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net7.0/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml", + "system.diagnostics.diagnosticsource.7.0.1.nupkg.sha512", + "system.diagnostics.diagnosticsource.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.IO.Pipelines/7.0.0": { + "sha512": "jRn6JYnNPW6xgQazROBLSfpdoczRw694vO5kKvMcNnpXuolEixUyw6IBuBs2Y2mlSX/LdLvyyWmfXhaI3ND1Yg==", + "type": "package", + "path": "system.io.pipelines/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.IO.Pipelines.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets", + "lib/net462/System.IO.Pipelines.dll", + "lib/net462/System.IO.Pipelines.xml", + "lib/net6.0/System.IO.Pipelines.dll", + "lib/net6.0/System.IO.Pipelines.xml", + "lib/net7.0/System.IO.Pipelines.dll", + "lib/net7.0/System.IO.Pipelines.xml", + "lib/netstandard2.0/System.IO.Pipelines.dll", + "lib/netstandard2.0/System.IO.Pipelines.xml", + "system.io.pipelines.7.0.0.nupkg.sha512", + "system.io.pipelines.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Memory/4.5.5": { + "sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", + "type": "package", + "path": "system.memory/4.5.5", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Memory.dll", + "lib/net461/System.Memory.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.1/System.Memory.dll", + "lib/netstandard1.1/System.Memory.xml", + "lib/netstandard2.0/System.Memory.dll", + "lib/netstandard2.0/System.Memory.xml", + "ref/netcoreapp2.1/_._", + "system.memory.4.5.5.nupkg.sha512", + "system.memory.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Numerics.Vectors/4.5.0": { + "sha512": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==", + "type": "package", + "path": "system.numerics.vectors/4.5.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Numerics.Vectors.dll", + "lib/net46/System.Numerics.Vectors.xml", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.0/System.Numerics.Vectors.dll", + "lib/netstandard1.0/System.Numerics.Vectors.xml", + "lib/netstandard2.0/System.Numerics.Vectors.dll", + "lib/netstandard2.0/System.Numerics.Vectors.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml", + "lib/uap10.0.16299/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/System.Numerics.Vectors.dll", + "ref/net45/System.Numerics.Vectors.xml", + "ref/net46/System.Numerics.Vectors.dll", + "ref/net46/System.Numerics.Vectors.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.0/System.Numerics.Vectors.dll", + "ref/netstandard1.0/System.Numerics.Vectors.xml", + "ref/netstandard2.0/System.Numerics.Vectors.dll", + "ref/netstandard2.0/System.Numerics.Vectors.xml", + "ref/uap10.0.16299/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.numerics.vectors.4.5.0.nupkg.sha512", + "system.numerics.vectors.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Private.Uri/4.3.2": { + "sha512": "o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", + "type": "package", + "path": "system.private.uri/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "ref/netstandard/_._", + "system.private.uri.4.3.2.nupkg.sha512", + "system.private.uri.nuspec" + ] + }, + "System.Reflection.Emit/4.7.0": { + "sha512": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==", + "type": "package", + "path": "system.reflection.emit/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.1/System.Reflection.Emit.dll", + "lib/netstandard1.1/System.Reflection.Emit.xml", + "lib/netstandard1.3/System.Reflection.Emit.dll", + "lib/netstandard2.0/System.Reflection.Emit.dll", + "lib/netstandard2.0/System.Reflection.Emit.xml", + "lib/netstandard2.1/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.1/System.Reflection.Emit.dll", + "ref/netstandard1.1/System.Reflection.Emit.xml", + "ref/netstandard1.1/de/System.Reflection.Emit.xml", + "ref/netstandard1.1/es/System.Reflection.Emit.xml", + "ref/netstandard1.1/fr/System.Reflection.Emit.xml", + "ref/netstandard1.1/it/System.Reflection.Emit.xml", + "ref/netstandard1.1/ja/System.Reflection.Emit.xml", + "ref/netstandard1.1/ko/System.Reflection.Emit.xml", + "ref/netstandard1.1/ru/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml", + "ref/netstandard2.0/System.Reflection.Emit.dll", + "ref/netstandard2.0/System.Reflection.Emit.xml", + "ref/netstandard2.1/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.dll", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.xml", + "system.reflection.emit.4.7.0.nupkg.sha512", + "system.reflection.emit.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Reflection.Metadata/7.0.0": { + "sha512": "MclTG61lsD9sYdpNz9xsKBzjsmsfCtcMZYXz/IUr2zlhaTaABonlr1ESeompTgM+Xk+IwtGYU7/voh3YWB/fWw==", + "type": "package", + "path": "system.reflection.metadata/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "README.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Reflection.Metadata.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Reflection.Metadata.targets", + "lib/net462/System.Reflection.Metadata.dll", + "lib/net462/System.Reflection.Metadata.xml", + "lib/net6.0/System.Reflection.Metadata.dll", + "lib/net6.0/System.Reflection.Metadata.xml", + "lib/net7.0/System.Reflection.Metadata.dll", + "lib/net7.0/System.Reflection.Metadata.xml", + "lib/netstandard2.0/System.Reflection.Metadata.dll", + "lib/netstandard2.0/System.Reflection.Metadata.xml", + "system.reflection.metadata.7.0.0.nupkg.sha512", + "system.reflection.metadata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection.TypeExtensions/4.7.0": { + "sha512": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA==", + "type": "package", + "path": "system.reflection.typeextensions/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Reflection.TypeExtensions.dll", + "lib/net461/System.Reflection.TypeExtensions.dll", + "lib/net461/System.Reflection.TypeExtensions.xml", + "lib/netcore50/System.Reflection.TypeExtensions.dll", + "lib/netcoreapp1.0/System.Reflection.TypeExtensions.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.3/System.Reflection.TypeExtensions.dll", + "lib/netstandard1.3/System.Reflection.TypeExtensions.xml", + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll", + "lib/netstandard1.5/System.Reflection.TypeExtensions.xml", + "lib/netstandard2.0/System.Reflection.TypeExtensions.dll", + "lib/netstandard2.0/System.Reflection.TypeExtensions.xml", + "lib/uap10.0.16299/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Reflection.TypeExtensions.dll", + "ref/net461/System.Reflection.TypeExtensions.dll", + "ref/net461/System.Reflection.TypeExtensions.xml", + "ref/net472/System.Reflection.TypeExtensions.dll", + "ref/net472/System.Reflection.TypeExtensions.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.3/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.3/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.5/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/netstandard2.0/System.Reflection.TypeExtensions.dll", + "ref/netstandard2.0/System.Reflection.TypeExtensions.xml", + "ref/uap10.0.16299/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll", + "runtimes/aot/lib/uap10.0.16299/_._", + "system.reflection.typeextensions.4.7.0.nupkg.sha512", + "system.reflection.typeextensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", + "type": "package", + "path": "system.runtime.compilerservices.unsafe/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net461/System.Runtime.CompilerServices.Unsafe.xml", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "system.runtime.compilerservices.unsafe.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Security.AccessControl/6.0.0": { + "sha512": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==", + "type": "package", + "path": "system.security.accesscontrol/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Security.AccessControl.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Security.AccessControl.dll", + "lib/net461/System.Security.AccessControl.xml", + "lib/net6.0/System.Security.AccessControl.dll", + "lib/net6.0/System.Security.AccessControl.xml", + "lib/netstandard2.0/System.Security.AccessControl.dll", + "lib/netstandard2.0/System.Security.AccessControl.xml", + "runtimes/win/lib/net461/System.Security.AccessControl.dll", + "runtimes/win/lib/net461/System.Security.AccessControl.xml", + "runtimes/win/lib/net6.0/System.Security.AccessControl.dll", + "runtimes/win/lib/net6.0/System.Security.AccessControl.xml", + "runtimes/win/lib/netstandard2.0/System.Security.AccessControl.dll", + "runtimes/win/lib/netstandard2.0/System.Security.AccessControl.xml", + "system.security.accesscontrol.6.0.0.nupkg.sha512", + "system.security.accesscontrol.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Security.Principal.Windows/5.0.0": { + "sha512": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==", + "type": "package", + "path": "system.security.principal.windows/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/System.Security.Principal.Windows.dll", + "lib/net461/System.Security.Principal.Windows.dll", + "lib/net461/System.Security.Principal.Windows.xml", + "lib/netstandard1.3/System.Security.Principal.Windows.dll", + "lib/netstandard2.0/System.Security.Principal.Windows.dll", + "lib/netstandard2.0/System.Security.Principal.Windows.xml", + "lib/uap10.0.16299/_._", + "ref/net46/System.Security.Principal.Windows.dll", + "ref/net461/System.Security.Principal.Windows.dll", + "ref/net461/System.Security.Principal.Windows.xml", + "ref/netcoreapp3.0/System.Security.Principal.Windows.dll", + "ref/netcoreapp3.0/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/System.Security.Principal.Windows.dll", + "ref/netstandard1.3/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/de/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/es/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/fr/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/it/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ja/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ko/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ru/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml", + "ref/netstandard2.0/System.Security.Principal.Windows.dll", + "ref/netstandard2.0/System.Security.Principal.Windows.xml", + "ref/uap10.0.16299/_._", + "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", + "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", + "runtimes/win/lib/net46/System.Security.Principal.Windows.dll", + "runtimes/win/lib/net461/System.Security.Principal.Windows.dll", + "runtimes/win/lib/net461/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", + "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll", + "runtimes/win/lib/uap10.0.16299/_._", + "system.security.principal.windows.5.0.0.nupkg.sha512", + "system.security.principal.windows.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Text.Encodings.Web/8.0.0": { + "sha512": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", + "type": "package", + "path": "system.text.encodings.web/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Text.Encodings.Web.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets", + "lib/net462/System.Text.Encodings.Web.dll", + "lib/net462/System.Text.Encodings.Web.xml", + "lib/net6.0/System.Text.Encodings.Web.dll", + "lib/net6.0/System.Text.Encodings.Web.xml", + "lib/net7.0/System.Text.Encodings.Web.dll", + "lib/net7.0/System.Text.Encodings.Web.xml", + "lib/net8.0/System.Text.Encodings.Web.dll", + "lib/net8.0/System.Text.Encodings.Web.xml", + "lib/netstandard2.0/System.Text.Encodings.Web.dll", + "lib/netstandard2.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.xml", + "system.text.encodings.web.8.0.0.nupkg.sha512", + "system.text.encodings.web.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Json/8.0.5": { + "sha512": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==", + "type": "package", + "path": "system.text.json/8.0.5", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "buildTransitive/net461/System.Text.Json.targets", + "buildTransitive/net462/System.Text.Json.targets", + "buildTransitive/net6.0/System.Text.Json.targets", + "buildTransitive/netcoreapp2.0/System.Text.Json.targets", + "buildTransitive/netstandard2.0/System.Text.Json.targets", + "lib/net462/System.Text.Json.dll", + "lib/net462/System.Text.Json.xml", + "lib/net6.0/System.Text.Json.dll", + "lib/net6.0/System.Text.Json.xml", + "lib/net7.0/System.Text.Json.dll", + "lib/net7.0/System.Text.Json.xml", + "lib/net8.0/System.Text.Json.dll", + "lib/net8.0/System.Text.Json.xml", + "lib/netstandard2.0/System.Text.Json.dll", + "lib/netstandard2.0/System.Text.Json.xml", + "system.text.json.8.0.5.nupkg.sha512", + "system.text.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.AccessControl/7.0.0": { + "sha512": "J3pA1tD7H8ZKzKczlAYgMG0ZO227YsmoyyOh/YttwtomokMhNbPRwlf5h37a+xQE420nGVuvwsFoV5YBUY+TpA==", + "type": "package", + "path": "system.threading.accesscontrol/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Threading.AccessControl.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Threading.AccessControl.targets", + "lib/net462/System.Threading.AccessControl.dll", + "lib/net462/System.Threading.AccessControl.xml", + "lib/net6.0/System.Threading.AccessControl.dll", + "lib/net6.0/System.Threading.AccessControl.xml", + "lib/net7.0/System.Threading.AccessControl.dll", + "lib/net7.0/System.Threading.AccessControl.xml", + "lib/netstandard2.0/System.Threading.AccessControl.dll", + "lib/netstandard2.0/System.Threading.AccessControl.xml", + "runtimes/win/lib/net6.0/System.Threading.AccessControl.dll", + "runtimes/win/lib/net6.0/System.Threading.AccessControl.xml", + "runtimes/win/lib/net7.0/System.Threading.AccessControl.dll", + "runtimes/win/lib/net7.0/System.Threading.AccessControl.xml", + "system.threading.accesscontrol.7.0.0.nupkg.sha512", + "system.threading.accesscontrol.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Tasks.Dataflow/7.0.0": { + "sha512": "BmSJ4b0e2nlplV/RdWVxvH7WECTHACofv06dx/JwOYc0n56eK1jIWdQKNYYsReSO4w8n1QA5stOzSQcfaVBkJg==", + "type": "package", + "path": "system.threading.tasks.dataflow/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Threading.Tasks.Dataflow.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Threading.Tasks.Dataflow.targets", + "lib/net462/System.Threading.Tasks.Dataflow.dll", + "lib/net462/System.Threading.Tasks.Dataflow.xml", + "lib/net6.0/System.Threading.Tasks.Dataflow.dll", + "lib/net6.0/System.Threading.Tasks.Dataflow.xml", + "lib/net7.0/System.Threading.Tasks.Dataflow.dll", + "lib/net7.0/System.Threading.Tasks.Dataflow.xml", + "lib/netstandard2.0/System.Threading.Tasks.Dataflow.dll", + "lib/netstandard2.0/System.Threading.Tasks.Dataflow.xml", + "lib/netstandard2.1/System.Threading.Tasks.Dataflow.dll", + "lib/netstandard2.1/System.Threading.Tasks.Dataflow.xml", + "system.threading.tasks.dataflow.7.0.0.nupkg.sha512", + "system.threading.tasks.dataflow.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "sha512": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "type": "package", + "path": "system.threading.tasks.extensions/4.5.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Threading.Tasks.Extensions.dll", + "lib/net461/System.Threading.Tasks.Extensions.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netcoreapp2.1/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "system.threading.tasks.extensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.ValueTuple/4.5.0": { + "sha512": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==", + "type": "package", + "path": "system.valuetuple/4.5.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.ValueTuple.dll", + "lib/net461/System.ValueTuple.xml", + "lib/net47/System.ValueTuple.dll", + "lib/net47/System.ValueTuple.xml", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.0/System.ValueTuple.dll", + "lib/netstandard1.0/System.ValueTuple.xml", + "lib/netstandard2.0/_._", + "lib/portable-net40+sl4+win8+wp8/System.ValueTuple.dll", + "lib/portable-net40+sl4+win8+wp8/System.ValueTuple.xml", + "lib/uap10.0.16299/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net461/System.ValueTuple.dll", + "ref/net47/System.ValueTuple.dll", + "ref/netcoreapp2.0/_._", + "ref/netstandard2.0/_._", + "ref/portable-net40+sl4+win8+wp8/System.ValueTuple.dll", + "ref/uap10.0.16299/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.valuetuple.4.5.0.nupkg.sha512", + "system.valuetuple.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "VSLangProj/17.6.36389": { + "sha512": "1ic2oRZqrAwrWoQAtm56TDIS2bV5jZIoJltWjncpOblYO5bKUEOZS5jDdvbLl2dxIrEHb9uB5hFOaiglLm8RnQ==", + "type": "package", + "path": "vslangproj/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj.dll", + "lib/net20/VSLangProj.xml", + "lib/net45/VSLangProj.dll", + "lib/net45/VSLangProj.xml", + "lib/net472/VSLangProj.dll", + "lib/net472/VSLangProj.xml", + "lib/net6.0/VSLangProj.dll", + "lib/net6.0/VSLangProj.xml", + "lib/netstandard2.0/VSLangProj.dll", + "lib/netstandard2.0/VSLangProj.xml", + "vslangproj.17.6.36389.nupkg.sha512", + "vslangproj.nuspec" + ] + }, + "VSLangProj100/17.6.36389": { + "sha512": "Qzq5DTcoYS0sV+E9h/FzPA840NzpOKSaRkw165AwTVuVibM+PkhOlQ0aAkqwMFdaC+CrhSq5/DjF605IU2qftg==", + "type": "package", + "path": "vslangproj100/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj100.dll", + "lib/net20/VSLangProj100.xml", + "lib/net45/VSLangProj100.dll", + "lib/net45/VSLangProj100.xml", + "lib/net472/VSLangProj100.dll", + "lib/net472/VSLangProj100.xml", + "lib/net6.0/VSLangProj100.dll", + "lib/net6.0/VSLangProj100.xml", + "lib/netstandard2.0/VSLangProj100.dll", + "lib/netstandard2.0/VSLangProj100.xml", + "vslangproj100.17.6.36389.nupkg.sha512", + "vslangproj100.nuspec" + ] + }, + "VSLangProj110/17.6.36389": { + "sha512": "BlSUPPKnChbxtrGRXYKiq+v0IYCI3JJ8BQfkTYDCJi84oGweTW7dPqmxvx3oOvLfoW2PZaIM2fMgNLF1F0K9Jg==", + "type": "package", + "path": "vslangproj110/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj110.dll", + "lib/net20/VSLangProj110.xml", + "lib/net45/VSLangProj110.dll", + "lib/net45/VSLangProj110.xml", + "lib/net472/VSLangProj110.dll", + "lib/net472/VSLangProj110.xml", + "lib/net6.0/VSLangProj110.dll", + "lib/net6.0/VSLangProj110.xml", + "lib/netstandard2.0/VSLangProj110.dll", + "lib/netstandard2.0/VSLangProj110.xml", + "vslangproj110.17.6.36389.nupkg.sha512", + "vslangproj110.nuspec" + ] + }, + "VSLangProj140/17.6.36389": { + "sha512": "GmdzT3zOxqX5P0t64M6QFrSe3nv5pU2ayOjY8j+ZC6YRJY+MyiP5pz6YbUNkRySSR7eM1uHkjPiHAjHJnSq1Pg==", + "type": "package", + "path": "vslangproj140/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj140.dll", + "lib/net20/VSLangProj140.xml", + "lib/net45/VSLangProj140.dll", + "lib/net45/VSLangProj140.xml", + "lib/net472/VSLangProj140.dll", + "lib/net472/VSLangProj140.xml", + "lib/net6.0/VSLangProj140.dll", + "lib/net6.0/VSLangProj140.xml", + "lib/netstandard2.0/VSLangProj140.dll", + "lib/netstandard2.0/VSLangProj140.xml", + "vslangproj140.17.6.36389.nupkg.sha512", + "vslangproj140.nuspec" + ] + }, + "VSLangProj150/17.6.36389": { + "sha512": "kYkfgI2FtbxcWAjEee2kGwLHmHXRo2YoORC1eV2Jr3I4l58QUAHmlzB1rWUZnUs/nXA5ulJcio+XVWaFDubOqQ==", + "type": "package", + "path": "vslangproj150/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj150.dll", + "lib/net20/VSLangProj150.xml", + "lib/net45/VSLangProj150.dll", + "lib/net45/VSLangProj150.xml", + "lib/net472/VSLangProj150.dll", + "lib/net472/VSLangProj150.xml", + "lib/net6.0/VSLangProj150.dll", + "lib/net6.0/VSLangProj150.xml", + "lib/netstandard2.0/VSLangProj150.dll", + "lib/netstandard2.0/VSLangProj150.xml", + "vslangproj150.17.6.36389.nupkg.sha512", + "vslangproj150.nuspec" + ] + }, + "VSLangProj157/17.6.36389": { + "sha512": "XkUoqiBkuyFesAyj70rM7EFq27uYkU4+FaTAkrMZvw81GpvgKmXGZUg6ViOWCmH6fBj2DQ1a1QtyiExi+6zsIA==", + "type": "package", + "path": "vslangproj157/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj157.dll", + "lib/net20/VSLangProj157.xml", + "lib/net45/VSLangProj157.dll", + "lib/net45/VSLangProj157.xml", + "lib/net472/VSLangProj157.dll", + "lib/net472/VSLangProj157.xml", + "lib/net6.0/VSLangProj157.dll", + "lib/net6.0/VSLangProj157.xml", + "lib/netstandard2.0/VSLangProj157.dll", + "lib/netstandard2.0/VSLangProj157.xml", + "vslangproj157.17.6.36389.nupkg.sha512", + "vslangproj157.nuspec" + ] + }, + "VSLangProj158/17.6.36389": { + "sha512": "Wn83ZlwUR90In4/9dphMSP+66C5btMnVgbepZDEahp/vge/Pe63bJGRXQRS3P45Ml5fcpyTIy8JXXMvrSP4EiA==", + "type": "package", + "path": "vslangproj158/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj158.dll", + "lib/net20/VSLangProj158.xml", + "lib/net45/VSLangProj158.dll", + "lib/net45/VSLangProj158.xml", + "lib/net472/VSLangProj158.dll", + "lib/net472/VSLangProj158.xml", + "lib/net6.0/VSLangProj158.dll", + "lib/net6.0/VSLangProj158.xml", + "lib/netstandard2.0/VSLangProj158.dll", + "lib/netstandard2.0/VSLangProj158.xml", + "vslangproj158.17.6.36389.nupkg.sha512", + "vslangproj158.nuspec" + ] + }, + "VSLangProj165/17.6.36389": { + "sha512": "I1KxmiBTPJnsdicOgJiinXPz08o/+UC8a6+nheSZF1Q2RdwB5bs1tWSZlc+pPuE2DokfAdyntkpCp1w03DkJcw==", + "type": "package", + "path": "vslangproj165/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj165.dll", + "lib/net20/VSLangProj165.xml", + "lib/net45/VSLangProj165.dll", + "lib/net45/VSLangProj165.xml", + "lib/net472/VSLangProj165.dll", + "lib/net472/VSLangProj165.xml", + "lib/net6.0/VSLangProj165.dll", + "lib/net6.0/VSLangProj165.xml", + "lib/netstandard2.0/VSLangProj165.dll", + "lib/netstandard2.0/VSLangProj165.xml", + "vslangproj165.17.6.36389.nupkg.sha512", + "vslangproj165.nuspec" + ] + }, + "VSLangProj2/17.6.36389": { + "sha512": "qRCwZw8OLJM4x5QQNquBWivYsZv75WJAE2tOad3ViBsnlAUi+kZtDqZVYjOyTi6ztnkCnINpu+opbFJi/ENCDw==", + "type": "package", + "path": "vslangproj2/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj2.dll", + "lib/net20/VSLangProj2.xml", + "lib/net45/VSLangProj2.dll", + "lib/net45/VSLangProj2.xml", + "lib/net472/VSLangProj2.dll", + "lib/net472/VSLangProj2.xml", + "lib/net6.0/VSLangProj2.dll", + "lib/net6.0/VSLangProj2.xml", + "lib/netstandard2.0/VSLangProj2.dll", + "lib/netstandard2.0/VSLangProj2.xml", + "vslangproj2.17.6.36389.nupkg.sha512", + "vslangproj2.nuspec" + ] + }, + "VSLangProj80/17.6.36389": { + "sha512": "t/2hJME6MSyhv6KnO5+Pk5D36PuQ98l9pHY3/6Dst1xMa8dAJaqftZaD3Lprr1VwKdFLiSF++f11kp1ZLy8qJQ==", + "type": "package", + "path": "vslangproj80/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj80.dll", + "lib/net20/VSLangProj80.xml", + "lib/net45/VSLangProj80.dll", + "lib/net45/VSLangProj80.xml", + "lib/net472/VSLangProj80.dll", + "lib/net472/VSLangProj80.xml", + "lib/net6.0/VSLangProj80.dll", + "lib/net6.0/VSLangProj80.xml", + "lib/netstandard2.0/VSLangProj80.dll", + "lib/netstandard2.0/VSLangProj80.xml", + "vslangproj80.17.6.36389.nupkg.sha512", + "vslangproj80.nuspec" + ] + }, + "VSLangProj90/17.6.36389": { + "sha512": "a6bBAQF5UzzDXL+3+tJtrurg3zLnlzToDqjfbPHmIFI690j7vazRH9vBHBMlxSfyCyHZSUS5cFZZ/zbzUJTwAA==", + "type": "package", + "path": "vslangproj90/17.6.36389", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "PackageIcon.png", + "lib/net20/VSLangProj90.dll", + "lib/net20/VSLangProj90.xml", + "lib/net45/VSLangProj90.dll", + "lib/net45/VSLangProj90.xml", + "lib/net472/VSLangProj90.dll", + "lib/net472/VSLangProj90.xml", + "lib/net6.0/VSLangProj90.dll", + "lib/net6.0/VSLangProj90.xml", + "lib/netstandard2.0/VSLangProj90.dll", + "lib/netstandard2.0/VSLangProj90.xml", + "vslangproj90.17.6.36389.nupkg.sha512", + "vslangproj90.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + ".NETFramework,Version=v4.7.2": [ + "MessagePack >= 2.5.187", + "Microsoft.VSSDK.BuildTools >= 17.6.2164", + "Microsoft.VisualStudio.SDK >= 17.6.36389", + "Microsoft.Web.WebView2 >= 1.0.2478.35", + "Newtonsoft.Json >= 13.0.3", + "System.Text.Json >= 8.0.5" + ] + }, + "packageFolders": { + "C:\\Users\\RobBos\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj", + "projectName": "CopilotTokenTracker", + "projectPath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj", + "packagesPath": "C:\\Users\\RobBos\\.nuget\\packages\\", + "outputPath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\RobBos\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net472" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net472": { + "targetAlias": "net472", + "projectReferences": {} + } + }, + "warningProperties": { + "noWarn": [ + "NU1701" + ], + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net472": { + "targetAlias": "net472", + "dependencies": { + "MessagePack": { + "target": "Package", + "version": "[2.5.187, )" + }, + "Microsoft.VSSDK.BuildTools": { + "suppressParent": "All", + "target": "Package", + "version": "[17.6.2164, )" + }, + "Microsoft.VisualStudio.SDK": { + "include": "Compile, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "target": "Package", + "version": "[17.6.36389, )" + }, + "Microsoft.Web.WebView2": { + "target": "Package", + "version": "[1.0.2478.35, )" + }, + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.3, )" + }, + "System.Text.Json": { + "target": "Package", + "version": "[8.0.5, )" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.201\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache new file mode 100644 index 00000000..99f7fd16 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache @@ -0,0 +1,134 @@ +{ + "version": 2, + "dgSpecHash": "0V9z21iSHP4=", + "success": true, + "projectFilePath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj", + "expectedPackageFiles": [ + "C:\\Users\\RobBos\\.nuget\\packages\\envdte\\17.6.36389\\envdte.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\envdte100\\17.6.36389\\envdte100.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\envdte80\\17.6.36389\\envdte80.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\envdte90\\17.6.36389\\envdte90.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\envdte90a\\17.6.36389\\envdte90a.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\messagepack\\2.5.187\\messagepack.2.5.187.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\messagepack.annotations\\2.5.187\\messagepack.annotations.2.5.187.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\8.0.0\\microsoft.bcl.asyncinterfaces.8.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.build.framework\\17.6.3\\microsoft.build.framework.17.6.3.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.codeanalysis.bannedapianalyzers\\3.3.2\\microsoft.codeanalysis.bannedapianalyzers.3.3.2.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.csharp\\4.7.0\\microsoft.csharp.4.7.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.io.redist\\6.0.0\\microsoft.io.redist.6.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.net.stringtools\\17.6.3\\microsoft.net.stringtools.17.6.3.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.1\\microsoft.netcore.platforms.1.1.1.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.netcore.targets\\1.1.3\\microsoft.netcore.targets.1.1.3.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.servicehub.analyzers\\4.2.102\\microsoft.servicehub.analyzers.4.2.102.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.servicehub.framework\\4.2.102\\microsoft.servicehub.framework.4.2.102.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.servicehub.resources\\4.2.8\\microsoft.servicehub.resources.4.2.8.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.commandbars\\17.6.36389\\microsoft.visualstudio.commandbars.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.componentmodelhost\\17.6.268\\microsoft.visualstudio.componentmodelhost.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.composition\\17.6.17\\microsoft.visualstudio.composition.17.6.17.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.composition.analyzers\\17.6.17\\microsoft.visualstudio.composition.analyzers.17.6.17.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.coreutility\\17.6.268\\microsoft.visualstudio.coreutility.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.debugger.interop.12.0\\17.6.36389\\microsoft.visualstudio.debugger.interop.12.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.debugger.interop.14.0\\17.6.36389\\microsoft.visualstudio.debugger.interop.14.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.debugger.interop.15.0\\17.6.36389\\microsoft.visualstudio.debugger.interop.15.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.debugger.interop.16.0\\17.6.36389\\microsoft.visualstudio.debugger.interop.16.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.designer.interfaces\\17.6.36389\\microsoft.visualstudio.designer.interfaces.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.editor\\17.6.268\\microsoft.visualstudio.editor.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.graphmodel\\17.6.36389\\microsoft.visualstudio.graphmodel.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.imagecatalog\\17.6.36389\\microsoft.visualstudio.imagecatalog.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.imaging\\17.6.36389\\microsoft.visualstudio.imaging.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.imaging.interop.14.0.designtime\\17.6.36387\\microsoft.visualstudio.imaging.interop.14.0.designtime.17.6.36387.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.interop\\17.6.36389\\microsoft.visualstudio.interop.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.language\\17.6.268\\microsoft.visualstudio.language.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.language.intellisense\\17.6.268\\microsoft.visualstudio.language.intellisense.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.language.navigateto.interfaces\\17.6.268\\microsoft.visualstudio.language.navigateto.interfaces.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.language.standardclassification\\17.6.268\\microsoft.visualstudio.language.standardclassification.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.languageserver.client\\17.6.42\\microsoft.visualstudio.languageserver.client.17.6.42.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.ole.interop\\17.6.36389\\microsoft.visualstudio.ole.interop.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.package.languageservice.15.0\\17.6.36389\\microsoft.visualstudio.package.languageservice.15.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.projectaggregator\\17.6.36387\\microsoft.visualstudio.projectaggregator.17.6.36387.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.remotecontrol\\16.3.52\\microsoft.visualstudio.remotecontrol.16.3.52.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.rpccontracts\\17.6.13\\microsoft.visualstudio.rpccontracts.17.6.13.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.sdk\\17.6.36389\\microsoft.visualstudio.sdk.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.sdk.analyzers\\16.10.10\\microsoft.visualstudio.sdk.analyzers.16.10.10.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.setup.configuration.interop\\3.6.2115\\microsoft.visualstudio.setup.configuration.interop.3.6.2115.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.15.0\\17.6.36389\\microsoft.visualstudio.shell.15.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.design\\17.6.36389\\microsoft.visualstudio.shell.design.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.framework\\17.6.36389\\microsoft.visualstudio.shell.framework.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop\\17.6.36389\\microsoft.visualstudio.shell.interop.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.10.0\\17.6.36389\\microsoft.visualstudio.shell.interop.10.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.11.0\\17.6.36389\\microsoft.visualstudio.shell.interop.11.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.12.0\\17.6.36389\\microsoft.visualstudio.shell.interop.12.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.8.0\\17.6.36389\\microsoft.visualstudio.shell.interop.8.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.9.0\\17.6.36389\\microsoft.visualstudio.shell.interop.9.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.taskrunnerexplorer.14.0\\14.0.0\\microsoft.visualstudio.taskrunnerexplorer.14.0.14.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.telemetry\\17.6.46\\microsoft.visualstudio.telemetry.17.6.46.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.text.data\\17.6.268\\microsoft.visualstudio.text.data.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.text.logic\\17.6.268\\microsoft.visualstudio.text.logic.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.text.ui\\17.6.268\\microsoft.visualstudio.text.ui.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.text.ui.wpf\\17.6.268\\microsoft.visualstudio.text.ui.wpf.17.6.268.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop\\17.6.36389\\microsoft.visualstudio.textmanager.interop.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.10.0\\17.6.36389\\microsoft.visualstudio.textmanager.interop.10.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.11.0\\17.6.36389\\microsoft.visualstudio.textmanager.interop.11.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.12.0\\17.6.36389\\microsoft.visualstudio.textmanager.interop.12.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.8.0\\17.6.36389\\microsoft.visualstudio.textmanager.interop.8.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.9.0\\17.6.36389\\microsoft.visualstudio.textmanager.interop.9.0.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.texttemplating.vshost\\17.6.36389\\microsoft.visualstudio.texttemplating.vshost.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.threading\\17.6.40\\microsoft.visualstudio.threading.17.6.40.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.threading.analyzers\\17.6.40\\microsoft.visualstudio.threading.analyzers.17.6.40.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.utilities\\17.6.36389\\microsoft.visualstudio.utilities.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.utilities.internal\\16.3.42\\microsoft.visualstudio.utilities.internal.16.3.42.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.validation\\17.6.11\\microsoft.visualstudio.validation.17.6.11.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.vcprojectengine\\17.6.36389\\microsoft.visualstudio.vcprojectengine.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.vshelp\\17.6.36389\\microsoft.visualstudio.vshelp.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.vshelp80\\17.6.36389\\microsoft.visualstudio.vshelp80.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.wcfreference.interop\\17.6.36389\\microsoft.visualstudio.wcfreference.interop.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.web.browserlink.12.0\\12.0.0\\microsoft.visualstudio.web.browserlink.12.0.12.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.vssdk.buildtools\\17.6.2164\\microsoft.vssdk.buildtools.17.6.2164.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.vssdk.compatibilityanalyzer\\17.6.2164\\microsoft.vssdk.compatibilityanalyzer.17.6.2164.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.web.webview2\\1.0.2478.35\\microsoft.web.webview2.1.0.2478.35.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.win32.primitives\\4.3.0\\microsoft.win32.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.win32.registry\\5.0.0\\microsoft.win32.registry.5.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\nerdbank.streams\\2.9.112\\nerdbank.streams.2.9.112.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\newtonsoft.json\\13.0.3\\newtonsoft.json.13.0.3.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\stdole\\17.6.36389\\stdole.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\streamjsonrpc\\2.15.29\\streamjsonrpc.2.15.29.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.collections.immutable\\7.0.0\\system.collections.immutable.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.componentmodel.composition\\7.0.0\\system.componentmodel.composition.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.composition\\7.0.0\\system.composition.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.composition.attributedmodel\\7.0.0\\system.composition.attributedmodel.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.composition.convention\\7.0.0\\system.composition.convention.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.composition.hosting\\7.0.0\\system.composition.hosting.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.composition.runtime\\7.0.0\\system.composition.runtime.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.composition.typedparts\\7.0.0\\system.composition.typedparts.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.diagnostics.diagnosticsource\\7.0.1\\system.diagnostics.diagnosticsource.7.0.1.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.io.pipelines\\7.0.0\\system.io.pipelines.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.memory\\4.5.5\\system.memory.4.5.5.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.numerics.vectors\\4.5.0\\system.numerics.vectors.4.5.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.private.uri\\4.3.2\\system.private.uri.4.3.2.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.emit\\4.7.0\\system.reflection.emit.4.7.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.metadata\\7.0.0\\system.reflection.metadata.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.typeextensions\\4.7.0\\system.reflection.typeextensions.4.7.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.security.accesscontrol\\6.0.0\\system.security.accesscontrol.6.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.security.principal.windows\\5.0.0\\system.security.principal.windows.5.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.text.encodings.web\\8.0.0\\system.text.encodings.web.8.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.text.json\\8.0.5\\system.text.json.8.0.5.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.threading.accesscontrol\\7.0.0\\system.threading.accesscontrol.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.threading.tasks.dataflow\\7.0.0\\system.threading.tasks.dataflow.7.0.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.valuetuple\\4.5.0\\system.valuetuple.4.5.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj\\17.6.36389\\vslangproj.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj100\\17.6.36389\\vslangproj100.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj110\\17.6.36389\\vslangproj110.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj140\\17.6.36389\\vslangproj140.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj150\\17.6.36389\\vslangproj150.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj157\\17.6.36389\\vslangproj157.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj158\\17.6.36389\\vslangproj158.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj165\\17.6.36389\\vslangproj165.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj2\\17.6.36389\\vslangproj2.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj80\\17.6.36389\\vslangproj80.17.6.36389.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\vslangproj90\\17.6.36389\\vslangproj90.17.6.36389.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest b/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest new file mode 100644 index 00000000..d3caa08c --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest @@ -0,0 +1,44 @@ + + + + + Copilot Token Tracker + + Shows GitHub Copilot token usage statistics inside Visual Studio. + Displays today's and last-30-days token usage, per-model breakdown, + and detailed session analysis — powered by the same webview panels + as the VS Code extension. + + GitHub Copilot, token usage, AI, productivity + + + + + + + + + + + + + + + + + + + From b7060e1f14ec151a5cf9f84919b78dba2ec7a535 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Tue, 24 Mar 2026 18:28:16 +0100 Subject: [PATCH 04/15] Update .gitignore and add CopilotTokenTrackerRunner project to solution --- .gitignore | 8 ++++++++ visualstudio-extension/CopilotTokenTracker.sln | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/.gitignore b/.gitignore index beefbc41..b092163e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,11 @@ node_modules .github/scripts/scraped-models.json example.json log-example.txt + +# Visual Studio extension generated files +visualstudio-extension/**/obj/ +visualstudio-extension/**/bin/ +visualstudio-extension/.vs/ + +# Accidental nested Visual Studio extension workspace/build output +visualstudio-extension/visualstudio-extension/ diff --git a/visualstudio-extension/CopilotTokenTracker.sln b/visualstudio-extension/CopilotTokenTracker.sln index 463f2928..ffc3b81a 100644 --- a/visualstudio-extension/CopilotTokenTracker.sln +++ b/visualstudio-extension/CopilotTokenTracker.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CopilotTokenTracker", "src\CopilotTokenTracker\CopilotTokenTracker.csproj", "{A1B2C3D4-E5F6-A7B8-C9D0-E1F2A3B4C5D6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CopilotTokenTrackerRunner", "src\CopilotTokenTrackerRunner\CopilotTokenTrackerRunner.csproj", "{B9B8A4A8-9A8B-4D59-8F81-54E7182BB2A7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {A1B2C3D4-E5F6-A7B8-C9D0-E1F2A3B4C5D6}.Debug|Any CPU.Build.0 = Debug|Any CPU {A1B2C3D4-E5F6-A7B8-C9D0-E1F2A3B4C5D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {A1B2C3D4-E5F6-A7B8-C9D0-E1F2A3B4C5D6}.Release|Any CPU.Build.0 = Release|Any CPU + {B9B8A4A8-9A8B-4D59-8F81-54E7182BB2A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9B8A4A8-9A8B-4D59-8F81-54E7182BB2A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9B8A4A8-9A8B-4D59-8F81-54E7182BB2A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9B8A4A8-9A8B-4D59-8F81-54E7182BB2A7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 1131b00cb95c228ca5d565d7f546cc7c268b2b56 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Tue, 24 Mar 2026 21:43:58 +0100 Subject: [PATCH 05/15] Add CopilotTokenTrackerRunner project with initial Program.cs - Created a new project file for CopilotTokenTrackerRunner targeting .NET Framework 4.7.2. - Added Program.cs to provide a simple entry point and instructions for running the CopilotTokenTracker extension in a Visual Studio experimental instance. --- .gitignore | 4 + visualstudio-extension/msbuild-preprocess.txt | 21232 ++++++++++ .../CopilotTokenTracker.csproj | 146 +- .../CopilotTokenTrackerPackage.cs | 6 + .../Properties/AssemblyInfo.cs | 16 + .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 6 + .../Release/net472/CopilotTokenTracker.dll | Bin 46080 -> 0 bytes .../Release/net472/CopilotTokenTracker.pdb | Bin 18936 -> 0 bytes .../net472/MessagePack.Annotations.dll | Bin 11776 -> 0 bytes .../bin/Release/net472/MessagePack.dll | Bin 338432 -> 0 bytes .../net472/Microsoft.Bcl.AsyncInterfaces.dll | Bin 26904 -> 0 bytes .../net472/Microsoft.NET.StringTools.dll | Bin 30336 -> 0 bytes .../net472/Microsoft.Web.WebView2.Core.dll | Bin 567896 -> 0 bytes .../Microsoft.Web.WebView2.WinForms.dll | Bin 38360 -> 0 bytes .../net472/Microsoft.Web.WebView2.Wpf.dll | Bin 50648 -> 0 bytes .../bin/Release/net472/Newtonsoft.Json.dll | Bin 711952 -> 0 bytes .../bin/Release/net472/System.Buffers.dll | Bin 20856 -> 0 bytes .../net472/System.Collections.Immutable.dll | Bin 198784 -> 0 bytes .../bin/Release/net472/System.Memory.dll | Bin 142240 -> 0 bytes .../net472/System.Numerics.Vectors.dll | Bin 115856 -> 0 bytes ...System.Runtime.CompilerServices.Unsafe.dll | Bin 18024 -> 0 bytes .../net472/System.Text.Encodings.Web.dll | Bin 79024 -> 0 bytes .../bin/Release/net472/System.Text.Json.dll | Bin 644888 -> 0 bytes .../System.Threading.Tasks.Extensions.dll | Bin 25984 -> 0 bytes .../bin/Release/net472/System.ValueTuple.dll | Bin 25232 -> 0 bytes .../win-arm64/native/WebView2Loader.dll | Bin 140368 -> 0 bytes .../win-x64/native/WebView2Loader.dll | Bin 165336 -> 0 bytes .../win-x86/native/WebView2Loader.dll | Bin 116184 -> 0 bytes ...pilotTokenTracker.csproj.nuget.dgspec.json | 46 +- ...ework,Version=v4.7.2.AssemblyAttributes.cs | 4 - .../Release/net472/CopilotT.5379EF51.Up2Date | 0 .../CopilotTokenTracker.AssemblyInfo.cs | 22 - ...pilotTokenTracker.AssemblyInfoInputs.cache | 1 - ....GeneratedMSBuildEditorConfig.editorconfig | 15 - .../net472/CopilotTokenTracker.assets.cache | Bin 50588 -> 0 bytes ...okenTracker.csproj.AssemblyReference.cache | Bin 115567 -> 0 bytes ...okenTracker.csproj.CoreCompileInputs.cache | 1 - ...otTokenTracker.csproj.FileListAbsolute.txt | 35 - .../Release/net472/CopilotTokenTracker.dll | Bin 46080 -> 0 bytes .../net472/CopilotTokenTracker.g.resources | Bin 1546 -> 0 bytes .../Release/net472/CopilotTokenTracker.pdb | Bin 18936 -> 0 bytes .../CopilotTokenTracker.sourcelink.json | 1 - .../CopilotTokenTracker_MarkupCompile.cache | 20 - .../ToolWindow/TokenTrackerControl.baml | Bin 1278 -> 0 bytes .../ToolWindow/TokenTrackerControl.g.cs | 100 - .../obj/project.assets.json | 12047 +++++- .../obj/project.nuget.cache | 3 +- .../source.extension.vsixmanifest | 23 +- .../src/CopilotTokenTracker/webview/chart.js | 35108 ++++++++++++++++ .../CopilotTokenTracker/webview/details.js | 20839 +++++++++ .../webview/diagnostics.js | 21620 ++++++++++ .../src/CopilotTokenTracker/webview/usage.js | 21962 ++++++++++ .../CopilotTokenTrackerRunner.csproj | 16 + .../src/CopilotTokenTrackerRunner/Program.cs | 17 + 55 files changed, 133032 insertions(+), 284 deletions(-) create mode 100644 visualstudio-extension/msbuild-preprocess.txt create mode 100644 visualstudio-extension/src/CopilotTokenTracker/Properties/AssemblyInfo.cs create mode 100644 visualstudio-extension/src/CopilotTokenTracker/Properties/Settings.Designer.cs create mode 100644 visualstudio-extension/src/CopilotTokenTracker/Properties/Settings.settings delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.pdb delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/MessagePack.Annotations.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/MessagePack.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Bcl.AsyncInterfaces.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.NET.StringTools.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Core.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.WinForms.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Wpf.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Newtonsoft.Json.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Buffers.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Collections.Immutable.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Memory.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Numerics.Vectors.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Runtime.CompilerServices.Unsafe.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Text.Encodings.Web.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Text.Json.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Threading.Tasks.Extensions.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.ValueTuple.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-arm64/native/WebView2Loader.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x64/native/WebView2Loader.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x86/native/WebView2Loader.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotT.5379EF51.Up2Date delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfo.cs delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfoInputs.cache delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.GeneratedMSBuildEditorConfig.editorconfig delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.assets.cache delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.csproj.AssemblyReference.cache delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.csproj.CoreCompileInputs.cache delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.csproj.FileListAbsolute.txt delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.dll delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.g.resources delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.pdb delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.sourcelink.json delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker_MarkupCompile.cache delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/ToolWindow/TokenTrackerControl.baml delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/ToolWindow/TokenTrackerControl.g.cs create mode 100644 visualstudio-extension/src/CopilotTokenTracker/webview/chart.js create mode 100644 visualstudio-extension/src/CopilotTokenTracker/webview/details.js create mode 100644 visualstudio-extension/src/CopilotTokenTracker/webview/diagnostics.js create mode 100644 visualstudio-extension/src/CopilotTokenTracker/webview/usage.js create mode 100644 visualstudio-extension/src/CopilotTokenTrackerRunner/CopilotTokenTrackerRunner.csproj create mode 100644 visualstudio-extension/src/CopilotTokenTrackerRunner/Program.cs diff --git a/.gitignore b/.gitignore index b092163e..f80d7a32 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,10 @@ log-example.txt visualstudio-extension/**/obj/ visualstudio-extension/**/bin/ visualstudio-extension/.vs/ +visualstudio-extension/**/obj/** +visualstudio-extension/**/bin/** # Accidental nested Visual Studio extension workspace/build output visualstudio-extension/visualstudio-extension/ +visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/MessagePack.Annotations.dll +visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Buffers.dll diff --git a/visualstudio-extension/msbuild-preprocess.txt b/visualstudio-extension/msbuild-preprocess.txt new file mode 100644 index 00000000..581be5fd --- /dev/null +++ b/visualstudio-extension/msbuild-preprocess.txt @@ -0,0 +1,21232 @@ + + + + + + + <_AfterSdkPublishDependsOn Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true'">AfterPublish + <_AfterSdkPublishDependsOn Condition="'$(UsingMicrosoftNETSdkWeb)' != 'true'">Publish + + + + + true + + true + $(CustomAfterDirectoryBuildProps);$(MSBuildThisFileDirectory)UseArtifactsOutputPath.props + + + $(ProjectExtensionsPathForSpecifiedProject) + + + + + + true + true + true + true + true + + + + <_DirectoryBuildPropsFile Condition="'$(_DirectoryBuildPropsFile)' == ''">Directory.Build.props + <_DirectoryBuildPropsBasePath Condition="'$(_DirectoryBuildPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildPropsFile)')) + $([System.IO.Path]::Combine('$(_DirectoryBuildPropsBasePath)', '$(_DirectoryBuildPropsFile)')) + + + + + + + + + true + $(MSBuildProjectName) + + + $(ArtifactsPath)\obj\$(ArtifactsProjectName)\ + $(ArtifactsPath)\obj\ + + + + <_ArtifactsPathSetEarly>true + + + + + + obj\ + $(BaseIntermediateOutputPath)\ + <_InitialBaseIntermediateOutputPath>$(BaseIntermediateOutputPath) + $(BaseIntermediateOutputPath) + + $([System.IO.Path]::Combine('$(MSBuildProjectDirectory)', '$(MSBuildProjectExtensionsPath)')) + $(MSBuildProjectExtensionsPath)\ + + false + true + <_InitialMSBuildProjectExtensionsPath Condition=" '$(ImportProjectExtensionProps)' == 'true' ">$(MSBuildProjectExtensionsPath) + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\RobBos\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 7.0.0 + + + + + + + + + + $(VsixCompatibilityAnalyzerDependsOn);CreateVsixContainer + $(VsixCompatibilityAnalyzerRunsDependsOnTargets);TargetSkuProjectOutputGroup + + Warning + + + + + + RS0030;RS0031;RS0035 + $(WarningsNotAsErrors);$(CodeAnalysisRuleIds) + + + + + $(MSBuildThisFileDirectory)..\ + $(ThisPackageDirectory)\tools + $(VSToolsPath)\VSSDK + $(VsSDKInstall)\inc + $(VsSDKInstall)\bin + $(VsSDKInstall)\bin\x86 + $(VsSDKInstall)\bin\arm64 + + + + + C:\Users\RobBos\.nuget\packages\microsoft.visualstudio.threading.analyzers\17.6.40 + C:\Users\RobBos\.nuget\packages\microsoft.web.webview2\1.0.2478.35 + C:\Users\RobBos\.nuget\packages\microsoft.vssdk.compatibilityanalyzer\17.6.2164 + C:\Users\RobBos\.nuget\packages\microsoft.codeanalysis.bannedapianalyzers\3.3.2 + C:\Users\RobBos\.nuget\packages\microsoft.visualstudio.sdk.analyzers\16.10.10 + C:\Users\RobBos\.nuget\packages\microsoft.vssdk.buildtools\17.6.2164 + C:\Users\RobBos\.nuget\packages\microsoft.visualstudio.composition.analyzers\17.6.17 + C:\Users\RobBos\.nuget\packages\microsoft.servicehub.analyzers\4.2.102 + + + + + + + + + false + + false + + false + + false + + + + false + + false + + false + + false + true + + + + $(DefaultItemExcludes);$(LiveUnitTestingExcludes) + + + + $(MSBuildExtensionsPath)\Microsoft\LiveUnitTesting\Microsoft.CodeAnalysis.LiveUnitTesting.Runtime.dll + $(MSBuildExtensionsPath)\Microsoft\LiveUnitTesting\Portable\Microsoft.CodeAnalysis.LiveUnitTesting.Runtime.dll + + + + + + $(MSBuildExtensionsPath)\Microsoft\NuGet\$(VisualStudioVersion)\Microsoft.NuGet.props + + + + + + + + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.Before.$(MSBuildThisFile) + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.After.$(MSBuildThisFile) + + + + + true + + + $(DefaultProjectConfiguration) + $(DefaultProjectPlatform) + + + WJProject + JavaScript + + + + + + + + $([MSBuild]::IsRunningFromVisualStudio()) + $([MSBuild]::GetToolsDirectory32())\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.props + $(MSBuildToolsPath)\NuGet.props + + + + + + true + + + + <_DirectoryPackagesPropsFile Condition="'$(_DirectoryPackagesPropsFile)' == ''">Directory.Packages.props + <_DirectoryPackagesPropsBasePath Condition="'$(_DirectoryPackagesPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildProjectDirectory)', '$(_DirectoryPackagesPropsFile)')) + $([MSBuild]::NormalizePath('$(_DirectoryPackagesPropsBasePath)', '$(_DirectoryPackagesPropsFile)')) + + + + true + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + + + + + + + true + + + + Debug;Release + AnyCPU + Debug + AnyCPU + + + + + true + + + + Library + 512 + prompt + $(MSBuildProjectName) + $(MSBuildProjectName.Replace(" ", "_")) + true + + + + true + false + + + true + + + + + <_PlatformWithoutConfigurationInference>$(Platform) + + + x64 + + + x86 + + + ARM + + + arm64 + + + + + {CandidateAssemblyFiles} + $(AssemblySearchPaths);{HintPathFromItem} + $(AssemblySearchPaths);{TargetFrameworkDirectory} + $(AssemblySearchPaths);{RawFileName} + + + None + portable + + false + + true + true + + PackageReference + $(AssemblySearchPaths) + false + false + false + false + false + false + + false + false + false + false + true + 1.0.3 + false + true + true + + + + <_ImplicitFileBasedProgramUserSecretsId Condition="'$(FileBasedProgram)' == 'true'">$(MSBuildProjectName)-$([MSBuild]::StableStringHash($(MSBuildProjectFullPath.ToLowerInvariant()), 'Sha256')) + $(_ImplicitFileBasedProgramUserSecretsId) + + + + $(MSBuildThisFileDirectory)GenerateDeps\GenerateDeps.proj + + + + + + $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledVersions.props + + + + + $([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)..\..\')) + $([MSBuild]::EnsureTrailingSlash('$(NetCoreRoot)'))packs + $([MSBuild]::EnsureTrailingSlash('$(MSBuildThisFileDirectory)'))PrunePackageData + <_NetFrameworkHostedCompilersVersion>5.3.0-2.26153.122 + 10.0 + 10.0 + 10.0.5 + 2.1 + 2.1.0 + 10.0.5-servicing.26153.111 + $(MSBuildThisFileDirectory)RuntimeIdentifierGraph.json + 10.0.201 + 10.0.200 + win-x64 + win-x64 + <_NETCoreSdkIsPreview>false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_KnownRuntimeIdentiferPlatforms Include="any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix" /> + <_ExcludedKnownRuntimeIdentiferPlatforms Include="rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0" /> + + + + $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledMSBuildInformation.props + + + + + 18.0.0 + 18.3.0 + <_MSBuildVersionMajorMinor>$([System.Version]::Parse('$(MSBuildVersion)').ToString(2)) + <_IsDisjointMSBuildVersion>$([MSBuild]::VersionLessThan('$(_MSBuildVersionMajorMinor)', '18.3')) + + + + + false + + + <__WindowsAppSdkDefaultImageIncludes>**/*.png;**/*.bmp;**/*.jpg;**/*.dds;**/*.tif;**/*.tga;**/*.gif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <__DisableWorkloadResolverSentinelPath Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildBinPath)\DisableWorkloadResolver.sentinel + <__DisableWorkloadResolverSentinelPath Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildToolsPath32)\SdkResolvers\Microsoft.DotNet.MSBuildSdkResolver\DisableWorkloadResolver.sentinel + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([MSBuild]::Add($(NETCoreAppMaximumVersion), 1)).0 + 17.16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_NormalizedWindowsSdkSupportedTargetPlatformVersion Include="@(WindowsSdkSupportedTargetPlatformVersion)"> + $([System.Text.RegularExpressions.Regex]::Replace(%(Identity), '^((\d+\.){3})1$', '${1}0')) + + + + + + + + + true + <_SourceLinkPropsImported>true + + + + + + $(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.Build.Tasks.Git.dll + $(MSBuildThisFileDirectory)..\tools\net\Microsoft.Build.Tasks.Git.dll + + + + + + <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.Common.dll + <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.Common.dll + + + + true + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1701;1702 + + $(WarningsAsErrors);NU1605 + + + $(DefineConstants); + $(DefineConstants)TRACE + + + + + + + + + + + + + + + + + + + + + + + + $(TargetsForTfmSpecificContentInPackage);_PackProjectToolValidation + + + + + + MSBuild:Compile + $(DefaultXamlRuntime) + Designer + + + MSBuild:Compile + $(DefaultXamlRuntime) + Designer + + + + + + + + + + + + + + + + + + <_WpfCommonNetFxReference Include="WindowsBase" /> + <_WpfCommonNetFxReference Include="PresentationCore" /> + <_WpfCommonNetFxReference Include="PresentationFramework" /> + <_WpfCommonNetFxReference Include="System.Xaml" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'"> + 4.0 + + <_WpfCommonNetFxReference Include="UIAutomationClient" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationClientSideProviders" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationProvider" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationTypes" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="System.Windows.Controls.Ribbon" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.5'" /> + + + <_SDKImplicitReference Include="@(_WpfCommonNetFxReference)" Condition="'$(UseWPF)' == 'true'" /> + <_SDKImplicitReference Include="System.Windows.Forms" Condition="('$(UseWindowsForms)' == 'true') " /> + <_SDKImplicitReference Include="WindowsFormsIntegration" Condition=" ('$(UseWindowsForms)' == 'true') And ('$(UseWPF)' == 'true') " /> + + + + + + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v1.0" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v1.1" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.0" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.1" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.2" /> + + <_UnsupportedNETStandardTargetFramework Include="@(SupportedNETStandardTargetFramework)" /> + + <_UnsupportedNETFrameworkTargetFramework Include=".NETFramework,Version=v2.0" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + <_TargetFrameworkVersionValue>0.0 + <_WindowsDesktopSdkTargetFrameworkVersionFloor>3.0 + + + + + + + + Library + net472 + true + enable + latest + CopilotTokenTracker + CopilotTokenTracker + Program + $(DevEnvDir)devenv.exe + /rootsuffix Exp /log + $(DevEnvDir) + + true + + true + true + true + true + false + false + true + true + + $(NoWarn);NU1701 + + + + + + + + + + + + + + + + + + + + + + Menus.ctmenu + + + + + + Designer + + + + + + + + + + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\details.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\chart.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\usage.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\diagnostics.js" /> + + + + + + + + + true + webview\ + PreserveNewest + + + + + + + + true + + + + + + + + + + + + + <_IsExecutable Condition="'$(OutputType)' == 'Exe' or '$(OutputType)'=='WinExe'">true + + + $(_IsExecutable) + <_UsingDefaultForHasRuntimeOutput>true + + + + + 1.0.0 + $(VersionPrefix)-$(VersionSuffix) + $(VersionPrefix) + + + $(AssemblyName) + $(Authors) + $(AssemblyName) + $(AssemblyName) + + + + + Debug + AnyCPU + $(Platform) + + + + + + + true + <_PublishProfileDesignerFolder Condition="'$(AppDesignerFolder)' != ''">$(AppDesignerFolder) + <_PublishProfileDesignerFolder Condition="'$(_PublishProfileDesignerFolder)' == ''">Properties + <_PublishProfileRootFolder Condition="'$(_PublishProfileRootFolder)' == ''">$(MSBuildProjectDirectory)\$(_PublishProfileDesignerFolder)\PublishProfiles\ + $([System.IO.Path]::GetFileNameWithoutExtension($(PublishProfile))) + $(_PublishProfileRootFolder)$(PublishProfileName).pubxml + $(PublishProfileFullPath) + + false + + + + + + + + + + + + + $([MSBuild]::GetTargetFrameworkIdentifier('$(TargetFramework)')) + v$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)', 2)) + + + <_TargetFrameworkVersionWithoutV>$(TargetFrameworkVersion.TrimStart('vV')) + + + + $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) + $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 4)) + + <_TargetPlatformVersionUsesCsWinRT3>false + <_TargetPlatformVersionUsesCsWinRT3 Condition="'$(TargetPlatformIdentifier)' == 'Windows' and '$(TargetPlatformVersion)' != '' and $([System.Version]::Parse('$(TargetPlatformVersion)').Revision) == 1">true + $([System.Version]::Parse('$(TargetPlatformVersion)').Major).$([System.Version]::Parse('$(TargetPlatformVersion)').Minor).$([System.Version]::Parse('$(TargetPlatformVersion)').Build).0 + $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 2)) + + $(TargetPlatformVersion) + + Windows + + + + <_UnsupportedTargetFrameworkError>true + + + + + + + + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + v0.0 + + + _ + + + + + true + + + + + + + + + true + + + + + + + + + + <_EnableDefaultWindowsPlatform>false + false + + + 2.1 + + + + + + + + + + + + + + <_ApplicableTargetPlatformVersion Include="@(SdkSupportedTargetPlatformVersion)" Condition="'@(SdkSupportedTargetPlatformVersion)' != '' and '%(SdkSupportedTargetPlatformVersion.DefineConstantsOnly)' != 'true'" RemoveMetadata="DefineConstantsOnly" /> + <_ValidTargetPlatformVersion Include="@(_ApplicableTargetPlatformVersion)" Condition="'@(_ApplicableTargetPlatformVersion)' != '' and $([MSBuild]::VersionEquals(%(Identity), $(TargetPlatformVersion)))" /> + + + @(_ValidTargetPlatformVersion->Distinct()) + + + + + true + <_ValidTargetPlatformVersions Condition="'@(_ApplicableTargetPlatformVersion)' != ''">@(_ApplicableTargetPlatformVersion, '%0a') + <_ValidTargetPlatformVersions Condition="'@(_ApplicableTargetPlatformVersion)' == ''">None + + + + + + + true + true + + + + + + + + + true + false + true + <_PlatformToAppendToOutputPath Condition="'$(AppendPlatformToOutputPath)' == 'true'">$(PlatformName)\ + + + + + + + + <_DefaultArtifactsPathPropsImported>true + + + + true + true + <_ArtifactsPathLocationType>ExplicitlySpecified + + + + + $(_DirectoryBuildPropsBasePath)\artifacts + true + <_ArtifactsPathLocationType>DirectoryBuildPropsFolder + + + + $(MSBuildProjectDirectory)\artifacts + <_ArtifactsPathLocationType>ProjectFolder + + + + $(MSBuildProjectName) + bin + publish + package + + true + + + $(Configuration.ToLowerInvariant()) + + $(ArtifactsPivots)_$(TargetFramework.ToLowerInvariant()) + + $(ArtifactsPivots)_$(RuntimeIdentifier.ToLowerInvariant()) + + + + $(ArtifactsPath)\$(ArtifactsBinOutputName)\$(ArtifactsProjectName)\ + $(ArtifactsPath)\obj\$(ArtifactsProjectName)\ + $(ArtifactsPath)\$(ArtifactsPublishOutputName)\$(ArtifactsProjectName)\$(ArtifactsPivots)\ + + + + $(ArtifactsPath)\$(ArtifactsBinOutputName)\ + $(ArtifactsPath)\obj\ + $(ArtifactsPath)\$(ArtifactsPublishOutputName)\$(ArtifactsPivots)\ + + + $(BaseOutputPath)$(ArtifactsPivots)\ + $(BaseIntermediateOutputPath)$(ArtifactsPivots)\ + + $(ArtifactsPath)\$(ArtifactsPackageOutputName)\$(Configuration.ToLowerInvariant())\ + + + bin\ + $(BaseOutputPath)\ + $(BaseOutputPath)$(_PlatformToAppendToOutputPath)$(Configuration)\ + $(OutputPath)\ + + + + obj\ + $(BaseIntermediateOutputPath)\ + $(BaseIntermediateOutputPath)$(_PlatformToAppendToOutputPath)$(Configuration)\ + $(IntermediateOutputPath)\ + + + + $(OutputPath) + + + + $(DefaultItemExcludes);$(OutputPath)/** + $(DefaultItemExcludes);$(IntermediateOutputPath)/** + + + $(DefaultItemExcludes);$(ArtifactsPath)/** + + $(DefaultItemExcludes);bin/**;obj/** + + + + $(OutputPath)$(TargetFramework.ToLowerInvariant())\ + + + $(IntermediateOutputPath)$(TargetFramework.ToLowerInvariant())\ + + + + + + + + + + + true + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RuntimePackInWorkloadVersionCurrent>10.0.5 + <_RuntimePackInWorkloadVersion9>9.0.14 + <_RuntimePackInWorkloadVersion8>8.0.25 + <_RuntimePackInWorkloadVersion7>7.0.20 + <_RuntimePackInWorkloadVersion6>6.0.36 + true + + + + + true + true + true + true + + + + <_BrowserWorkloadNotSupportedForTFM Condition="$([MSBuild]::VersionLessThan($(TargetFrameworkVersion), '6.0'))">true + <_BrowserWorkloadDisabled>$(_BrowserWorkloadNotSupportedForTFM) + <_UsingBlazorOrWasmSdk Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true' or '$(UsingMicrosoftNETSdkWebAssembly)' == 'true'">true + + + true + $(WasmNativeWorkload10) + $(WasmNativeWorkload9) + $(WasmNativeWorkload8) + $(WasmNativeWorkload7) + $(WasmNativeWorkload) + false + $(WasmNativeWorkloadAvailable) + + + + + + <_WasmNativeWorkloadNeeded Condition=" '$(WasmEnableSIMD)' == 'false' or '$(WasmEnableExceptionHandling)' == 'false' or '$(InvariantTimezone)' == 'true' or '$(WasmNativeStrip)' == 'false' or '$(WasmNativeDebugSymbols)' == 'true' or '$(WasmSingleFileBundle)' == 'false' or '$(EnableDiagnostics)' == 'true' or '$(WasmProfilers)' != '' or '$(RunAOTCompilation)' == 'true' or '$(WasmBuildNative)' == 'true' or '$(WasmGenerateAppBundle)' == 'true' or '$(_UsingBlazorOrWasmSdk)' != 'true' or '$(EmccInitialHeapSize)' != '' or '$(EmccMaximumHeapSize)' != '' ">true + false + true + $(WasmNativeWorkloadAvailable) + + + + <_IsAndroidLibraryMode Condition="'$(RuntimeIdentifier)' == 'android-arm64' or '$(RuntimeIdentifier)' == 'android-arm' or '$(RuntimeIdentifier)' == 'android-x64' or '$(RuntimeIdentifier)' == 'android-x86'">true + <_IsAppleMobileLibraryMode Condition="'$(RuntimeIdentifier)' == 'ios-arm64' or '$(RuntimeIdentifier)' == 'iossimulator-arm64' or '$(RuntimeIdentifier)' == 'iossimulator-x64' or '$(RuntimeIdentifier)' == 'maccatalyst-arm64' or '$(RuntimeIdentifier)' == 'maccatalyst-x64' or '$(RuntimeIdentifier)' == 'tvos-arm64'">true + <_IsiOSLibraryMode Condition="'$(RuntimeIdentifier)' == 'ios-arm64' or '$(RuntimeIdentifier)' == 'iossimulator-arm64' or '$(RuntimeIdentifier)' == 'iossimulator-x64'">true + <_IsMacCatalystLibraryMode Condition="'$(RuntimeIdentifier)' == 'maccatalyst-arm64' or '$(RuntimeIdentifier)' == 'maccatalyst-x64'">true + <_IstvOSLibraryMode Condition="'$(RuntimeIdentifier)' == 'tvos-arm64'">true + + + true + + + <_MonoWorkloadTargetsMobile>true + + + false + true + + + + $(_RuntimePackInWorkloadVersionCurrent) + + + + + true + 1.0 + + + + + + + true + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersionCurrent) + + + + + %(RuntimePackRuntimeIdentifiers);wasi-wasm + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + $(_MonoWorkloadRuntimePackPackageVersion) + + + + + + true + + + <_NativeBuildNeeded Condition="'$(RunAOTCompilation)' == 'true'">true + WebAssembly workloads (required for AOT) are only supported for projects targeting net6.0+ + + + true + $(WasmNativeWorkload) + + + 9.0 + 10.0 + + + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadTargetsMobile>true + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion6) + + + + $(_MonoWorkloadRuntimePackPackageVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadTargetsMobile>true + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion7) + + + + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadTargetsMobile>true + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion8) + + + + + %(RuntimePackRuntimeIdentifiers);wasi-wasm + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion9) + + + + + %(RuntimePackRuntimeIdentifiers);wasi-wasm + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + $(_MonoWorkloadRuntimePackPackageVersion) + + + + + + + + + + + + + + + + + + + + <_ResolvedSuggestedWorkload Include="@(SuggestedWorkload)" /> + <_ResolvedSuggestedWorkload Include="@(SuggestedWorkloadFromReference)" /> + + + + + + + + + <_UsingDefaultRuntimeIdentifier>true + win7-x64 + win7-x86 + win-x64 + win-x86 + + + + true + + + + <_IsPublishing>true + + + + $(PublishSelfContained) + + + + true + + + $(NETCoreSdkPortableRuntimeIdentifier) + + + + true + + + $(NETCoreSdkPortableRuntimeIdentifier) + + + + $(RuntimeIdentifiers);$(PublishRuntimeIdentifier) + + + $(PublishRuntimeIdentifier) + + + <_UsingDefaultPlatformTarget>true + + + + + + + x86 + + + + + x64 + + + + + arm + + + + + arm64 + + + + + AnyCPU + + + + + + + <_SelfContainedWasSpecified Condition="'$(SelfContained)' != ''">true + + + + true + false + <_RuntimeIdentifierUsesAppHost Condition="$(RuntimeIdentifier.StartsWith('ios')) or $(RuntimeIdentifier.StartsWith('tvos')) or $(RuntimeIdentifier.StartsWith('maccatalyst')) or $(RuntimeIdentifier.StartsWith('android')) or $(RuntimeIdentifier.StartsWith('browser')) or $(RuntimeIdentifier.StartsWith('wasi')) or $(RuntimeIdentifier) == 'any'">false + <_RuntimeIdentifierUsesAppHost Condition="'$(_IsPublishing)' == 'true' and '$(PublishAot)' == 'true'">false + <_RuntimeIdentifierUsesAppHost Condition="'$(_RuntimeIdentifierUsesAppHost)' == ''">true + true + false + + + + $(NETCoreSdkRuntimeIdentifier) + win-x64 + win-x86 + win-arm + win-arm64 + + $(DefaultAppHostRuntimeIdentifier.Replace("arm64", "x64")) + + $(DefaultAppHostRuntimeIdentifier.Replace("arm64", "x64")) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + false + + + + + + + + + + + + + true + + + + + + + + true + + + + $(IntermediateOutputPath)$(RuntimeIdentifier)\ + $(OutputPath)$(RuntimeIdentifier)\ + + + + + + + + + + + + + + + + + true + true + + + + <_EolNetCoreTargetFrameworkVersions Include="1.0;1.1;2.0;2.1;2.2;3.0;3.1;5.0;6.0;7.0" /> + + + <_MinimumNonEolSupportedNetCoreTargetFramework>net8.0 + + + + + + + + + + + + + + + + + + + <_IsNETCoreOrNETStandard Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">true + <_IsNETCoreOrNETStandard Condition="'$(TargetFrameworkIdentifier)' == '.NETStandard'">true + + + + true + true + true + + + true + + + + true + + true + + .dll + + false + + + + $(PreserveCompilationContext) + + + + publish + + $(OutputPath)$(RuntimeIdentifier)\$(PublishDirName)\ + $(OutputPath)$(PublishDirName)\ + + + + + + <_NugetFallbackFolder>$(MSBuildThisFileDirectory)..\..\..\..\NuGetFallbackFolder + <_IsNETCore1x Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and '$(_TargetFrameworkVersionWithoutV)' < '2.0' ">true + <_WorkloadLibraryPacksFolder Condition="'$(_WorkloadLibraryPacksFolder)' == ''">$([MSBuild]::EnsureTrailingSlash('$(NetCoreRoot)'))library-packs + + + $(RestoreAdditionalProjectSources);$(_NugetFallbackFolder) + $(RestoreAdditionalProjectFallbackFoldersExcludes);$(_NugetFallbackFolder) + $(RestoreAdditionalProjectFallbackFolders);$(_NugetFallbackFolder) + + + $(RestoreAdditionalProjectSources);$(_WorkloadLibraryPacksFolder) + + + + <_SDKImplicitReference Include="System" /> + <_SDKImplicitReference Include="System.Data" /> + <_SDKImplicitReference Include="System.Drawing" /> + <_SDKImplicitReference Include="System.Xml" /> + + + <_SDKImplicitReference Include="System.Core" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '3.5' " /> + <_SDKImplicitReference Include="System.Runtime.Serialization" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '3.5' " /> + <_SDKImplicitReference Include="System.Xml.Linq" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '3.5' " /> + + <_SDKImplicitReference Include="System.Numerics" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '4.0' " /> + + <_SDKImplicitReference Include="System.IO.Compression.FileSystem" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '4.5' " /> + <_SDKImplicitReference Update="@(_SDKImplicitReference)" Pack="false" IsImplicitlyDefined="true" /> + + <_SDKImplicitReference Remove="@(Reference)" /> + + + + + + false + + + $(AssetTargetFallback);net461;net462;net47;net471;net472;net48;net481 + + + + + <_FrameworkIdentifierForImplicitDefine>$(TargetFrameworkIdentifier.Replace('.', '').ToUpperInvariant()) + <_FrameworkIdentifierForImplicitDefine Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), 5.0)) ">NET + $(_FrameworkIdentifierForImplicitDefine) + <_FrameworkIdentifierForImplicitDefine Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework'">NET + <_FrameworkVersionForImplicitDefine>$(TargetFrameworkVersion.TrimStart('vV')) + <_FrameworkVersionForImplicitDefine>$(_FrameworkVersionForImplicitDefine.Replace('.', '_')) + <_FrameworkVersionForImplicitDefine Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework'">$(_FrameworkVersionForImplicitDefine.Replace('_', '')) + $(_FrameworkIdentifierForImplicitDefine)$(_FrameworkVersionForImplicitDefine) + $(TargetFrameworkIdentifier.Replace('.', '').ToUpperInvariant()) + + + <_ImplicitDefineConstant Include="$(VersionlessImplicitFrameworkDefine)" /> + <_ImplicitDefineConstant Include="$(ImplicitFrameworkDefine)" /> + <_ImplicitDefineConstant Include="$(BackwardsCompatFrameworkDefine)" /> + + + + + + <_PlatformIdentifierForImplicitDefine>$(TargetPlatformIdentifier.ToUpperInvariant()) + <_PlatformVersionForImplicitDefine>$(EffectiveTargetPlatformVersion.Replace('.', '_')) + + + <_ImplicitDefineConstant Include="$(_PlatformIdentifierForImplicitDefine)" /> + <_ImplicitDefineConstant Include="$(_PlatformIdentifierForImplicitDefine)$(_PlatformVersionForImplicitDefine)" /> + + + + <_ImplicitDefineConstant Include="CSWINRT3_0" /> + + + + + + <_SupportedFrameworkVersions Include="@(SupportedNETCoreAppTargetFramework->'%(Identity)'->TrimStart('.NETCoreApp,Version=v'))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' " /> + <_SupportedFrameworkVersions Include="@(SupportedNETFrameworkTargetFramework->'%(Identity)'->TrimStart('.NETFramework,Version=v'))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' " /> + <_SupportedFrameworkVersions Include="@(SupportedNETStandardTargetFramework->'%(Identity)'->TrimStart('.NETStandard,Version=v'))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETStandard' " /> + <_CompatibleFrameworkVersions Include="@(_SupportedFrameworkVersions)" Condition=" $([MSBuild]::VersionLessThanOrEquals(%(Identity), $(TargetFrameworkVersion))) " /> + <_FormattedCompatibleFrameworkVersions Include="@(_CompatibleFrameworkVersions)" Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' or '$(TargetFrameworkIdentifier)' == '.NETStandard' " /> + <_FormattedCompatibleFrameworkVersions Include="@(_CompatibleFrameworkVersions->'%(Identity)'->Replace('.', ''))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' " /> + <_ImplicitDefineConstant Include="@(_FormattedCompatibleFrameworkVersions->'$(_FrameworkIdentifierForImplicitDefine)%(Identity)_OR_GREATER'->Replace('.', '_'))" Condition=" '$(TargetFrameworkIdentifier)' != '.NETCoreApp' or $([MSBuild]::VersionGreaterThanOrEquals(%(_FormattedCompatibleFrameworkVersions.Identity), 5.0)) " /> + <_ImplicitDefineConstant Include="@(_FormattedCompatibleFrameworkVersions->'NETCOREAPP%(Identity)_OR_GREATER'->Replace('.', '_'))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionLessThan(%(_FormattedCompatibleFrameworkVersions.Identity), 5.0)) " /> + + + + + + + <_SupportedPlatformCompatibleVersions Include="@(SdkSupportedTargetPlatformVersion)" Condition=" %(Identity) != '' and '%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)' == '' and $([MSBuild]::VersionLessThanOrEquals(%(Identity), $(TargetPlatformVersion))) " /> + <_SupportedPlatformCompatibleVersions Include="@(SdkSupportedTargetPlatformVersion->'%(NormalizedSupportedTargetPlatformVersion)')" Condition=" '%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)' != '' and $([MSBuild]::VersionLessThanOrEquals('%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)', $(TargetPlatformVersion))) " /> + <_ImplicitDefineConstant Include="@(_SupportedPlatformCompatibleVersions->Distinct()->'$(TargetPlatformIdentifier.ToUpper())%(Identity)_OR_GREATER'->Replace('.', '_'))" /> + + + + + + <_DefineConstantsWithoutTrace Include="$(DefineConstants)" /> + <_DefineConstantsWithoutTrace Remove="TRACE" /> + + + @(_DefineConstantsWithoutTrace) + + + + + + $(DefineConstants);@(_ImplicitDefineConstant) + $(FinalDefineConstants),@(_ImplicitDefineConstant->'%(Identity)=-1', ',') + + + + + false + true + + + $(AssemblyName).xml + $(IntermediateOutputPath)$(AssemblyName).xml + + + + + + true + true + true + + + + + + + true + + + + + + + + + FrameworkPackage + + + + + + Core + + + + + + FrameworkPackage + + + + + + Framework + + + + + + + + + + + $(RoslynTargetsPath) + $(MSBuildThisFileDirectory)..\..\..\Roslyn\bincore + + + $(MSBuildThisFileDirectory)..\..\..\Roslyn + $(MSBuildThisFileDirectory)..\..\..\Roslyn\Microsoft.Build.Tasks.CodeAnalysis.dll + $(RoslynCoreAssembliesPath) + $(MSBuildThisFileDirectory)..\..\..\Roslyn\binfx + $(MSBuildThisFileDirectory)..\..\..\Roslyn\binfx\Microsoft.Build.Tasks.CodeAnalysis.Sdk.dll + $(MSBuildThisFileDirectory)..\..\..\Roslyn\Microsoft.CSharp.Core.targets + $(MSBuildThisFileDirectory)..\..\..\Roslyn\Microsoft.VisualBasic.Core.targets + + + + $(MSBuildToolsPath)\Microsoft.CSharp.targets + $(MSBuildToolsPath)\Microsoft.VisualBasic.targets + $(MSBuildThisFileDirectory)..\targets\Microsoft.NET.Sdk.FSharpTargetsShim.targets + + $(MSBuildToolsPath)\Microsoft.Common.targets + + + + + + + + $(MSBuildToolsPath)\Microsoft.CSharp.CrossTargeting.targets + + + + + $(MSBuildToolsPath)\Microsoft.CSharp.CurrentVersion.targets + + + + + + + + true + + + + + + true + true + true + true + + + + + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.Before.Microsoft.CSharp.targets + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.After.Microsoft.CSharp.targets + + + + .cs + C# + Managed + true + true + true + true + true + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Properties + + + + + File + + + BrowseObject + + + + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + + + + + true + + + + + + <_DebugSymbolsIntermediatePathTemporary Include="$(PdbFile)" /> + + <_DebugSymbolsIntermediatePath Include="@(_DebugSymbolsIntermediatePathTemporary->'%(RootDir)%(Directory)%(Filename).pdb')" /> + + + $(CoreCompileDependsOn);_ComputeNonExistentFileProperty;ResolveCodeAnalysisRuleSet + true + + + + + + $(NoWarn);1701;1702 + + + + $(NoWarn);2008 + + + + + + + + + $(AppConfig) + + $(IntermediateOutputPath)$(TargetName).compile.pdb + + + + false + + + + + + + true + + + + + + + + + + $(RoslynTargetsPath)\Microsoft.CSharp.Core.targets + + + + + + + <_BuildTasksDirectory>$(MSBuildThisFileDirectory) + <_BuildTasksDirectory Condition="Exists('$(RoslynTargetsPath)')">$(RoslynTargetsPath)\ + <_BuildTasksAssemblyName>Microsoft.Build.Tasks.CodeAnalysis + <_BuildTasksAssemblyName Condition="!Exists('$(_BuildTasksDirectory)$(_BuildTasksAssemblyName)') and Exists('$(_BuildTasksDirectory)Microsoft.Build.Tasks.CodeAnalysis.Sdk.dll')">Microsoft.Build.Tasks.CodeAnalysis.Sdk + + + + + + roslyn5.3 + + + + + + + + + + + + + + + + + false + + + + + + + + true + + + + + + + + <_SkipAnalyzers /> + <_ImplicitlySkipAnalyzers /> + + + + <_SkipAnalyzers>true + + + + <_ImplicitlySkipAnalyzers>true + <_SkipAnalyzers>true + run-nullable-analysis=never;$(Features) + + + + + + <_LastBuildWithSkipAnalyzers>$(IntermediateOutputPath)$(MSBuildProjectFile).BuildWithSkipAnalyzers + + + + + + + + + + + + + + <_AllDirectoriesAbove Include="@(Compile->GetPathsOfAllDirectoriesAbove())" Condition="'$(DiscoverEditorConfigFiles)' != 'false' or '$(DiscoverGlobalAnalyzerConfigFiles)' != 'false'" /> + + + + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).GeneratedMSBuildEditorConfig.editorconfig + true + <_GeneratedEditorConfigHasItems Condition="'@(CompilerVisibleItemMetadata->Count())' != '0'">true + <_GeneratedEditorConfigShouldRun Condition="'$(GenerateMSBuildEditorConfigFile)' == 'true' and ('$(_GeneratedEditorConfigHasItems)' == 'true' or '@(CompilerVisibleProperty->Count())' != '0')">true + + + + + + <_GeneratedEditorConfigProperty Include="@(CompilerVisibleProperty)"> + $(%(CompilerVisibleProperty.Identity)) + + + <_GeneratedEditorConfigMetadata Include="@(%(CompilerVisibleItemMetadata.Identity))" Condition="'$(_GeneratedEditorConfigHasItems)' == 'true'"> + %(Identity) + %(CompilerVisibleItemMetadata.MetadataName) + + + + + + + + + + + true + + + + + <_MappedSourceRoot Remove="@(_MappedSourceRoot)" /> + + + + + + + + + + + + true + + + + + + + <_TopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"> + $([MSBuild]::ValueOrDefault('%(Identity)', '').Replace(',', ',,').Replace('=', '==')) + $([MSBuild]::ValueOrDefault('%(MappedPath)', '').Replace(',', ',,').Replace('=', '==')) + + + + + @(_TopLevelSourceRoot->'%(EscapedKey)=%(EscapedValue)', ','),$(PathMap) + + + + + + + + + + + false + + $(IntermediateOutputPath)/generated + + + + + + + + + + + + + <_MaxSupportedLangVersion Condition="('$(TargetFrameworkIdentifier)' != '.NETCoreApp' OR '$(_TargetFrameworkVersionWithoutV)' < '3.0') AND ('$(TargetFrameworkIdentifier)' != '.NETStandard' OR '$(_TargetFrameworkVersionWithoutV)' < '2.1')">7.3 + + <_MaxSupportedLangVersion Condition="(('$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND '$(_TargetFrameworkVersionWithoutV)' < '5.0') OR ('$(TargetFrameworkIdentifier)' == '.NETStandard' AND '$(_TargetFrameworkVersionWithoutV)' == '2.1')) AND '$(_MaxSupportedLangVersion)' == ''">8.0 + + <_MaxSupportedLangVersion Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND '$(_MaxSupportedLangVersion)' == ''">$([MSBuild]::Add(9, $([MSBuild]::Subtract($(_TargetFrameworkVersionWithoutV.Split('.')[0]), 5)))).0 + + <_MaxAvailableLangVersion>14.0 + <_MaxSupportedLangVersion Condition="'$(_MaxSupportedLangVersion)' != '' AND '$(_MaxSupportedLangVersion)' > '$(_MaxAvailableLangVersion)'">$(_MaxAvailableLangVersion) + $(_MaxSupportedLangVersion) + $(_MaxSupportedLangVersion) + + + + + $(NoWarn);1701;1702 + + + + $(NoWarn);2008 + + + + $(NoWarn);8002 + + + + $(AppConfig) + + $(IntermediateOutputPath)$(TargetName).compile.pdb + + + + + + + <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" /> + + + + + + -langversion:$(LangVersion) + $(CommandLineArgsForDesignTimeEvaluation) -checksumalgorithm:$(ChecksumAlgorithm) + $(CommandLineArgsForDesignTimeEvaluation) -define:$(DefineConstants) + $(CommandLineArgsForDesignTimeEvaluation) -features:$(Features) + $(CommandLineArgsForDesignTimeEvaluation) -doc:"$(DocumentationFile)" + + + + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed\Microsoft.CSharp.DesignTime.targets + + + + + + + + + + false + false + false + true + true + true + + Exe;WinExe;Library + true + + Pack + + + + + + + + + + + 0 + + TAB_ASSEMBLY_FRAMEWORK + + + + $(MSBuildThisFileDirectory) + + + + + $(MSBuildThisFileDirectory)$(LangName) + + $(MSBuildThisFileDirectory)zh-Hans + $(MSBuildThisFileDirectory)zh-Hant + + $(MSBuildThisFileDirectory)$(LangName.Split('-')[0]) + + $(ManagedXamlNeutralResourcesDirectory) + + + $(ManagedXamlResourcesDirectory)\ + ProjectDebugger + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Project + + + + File + + + BrowseObject + + + BrowseObject + + + File + + + BrowseObject + + + File + + + BrowseObject + + + File;BrowseObject + + + File + + + File + + + File + + + BrowseObject + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + BrowseObject + + + ConfiguredBrowseObject + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + + + + Project;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + Project;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + Project;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + Project;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + Project;ProjectSubscriptionService;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + ProjectSubscriptionService;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + Project;ProjectSubscriptionService;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + + + + + + + <_GlobalJsonStartingDir Include="$(SolutionDir)" /> + <_PotentialContainingGlobalJsonDir Include="@(_GlobalJsonStartingDir->GetPathsOfAllDirectoriesAbove())" /> + + + + + + false + + + + + + + + + + + + + <_ProjectReferencesFromRAR2 Include="@(ReferencePath->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"> + %(ReferencePath.ProjectReferenceOriginalItemSpec) + + <_ProjectReferencesWithoutOutputAssembly Include="@(ProjectReference->WithMetadataValue('ReferenceOutputAssembly', 'false'))"> + %(ProjectReference.Identity) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CompileDesignTime + + $(CollectUpToDateCheckInputDesignTimeDependsOn);ResolveCodeAnalysisRuleSet + + + + + + + + + + + + CompileDesignTime + + + + + CompileDesignTime + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_CollectedCopyToOutputDirectoryItem Include="@(_ThisProjectItemsToCopyToOutputDirectory)"> + false + + + <_CollectedCopyToOutputDirectoryItem Include="$(TargetPath)"> + PreserveNewest + $([System.IO.Path]::GetFileName('$(TargetPath)')) + true + + + <_CollectedCopyToOutputDirectoryItem Include="@(_DebugSymbolsOutputPath->'%(FullPath)')" Condition="'$(_DebugSymbolsProduced)' == 'true' and '$(SkipCopyingSymbolsToOutputDirectory)' != 'true' and '$(CopyOutputSymbolsToOutputDirectory)' != 'false'"> + PreserveNewest + $([System.IO.Path]::GetFileName('%(Identity)')) + true + + + <_CollectedCopyToOutputDirectoryItem Include="@(ReferenceCopyLocalPaths->'%(Identity)')" Condition="'%(ReferenceCopyLocalPaths.ReferenceSourceTarget)' != 'ProjectReference' AND '%(ReferenceCopyLocalPaths.DestinationSubPath)' != ''"> + PreserveNewest + %(ReferenceCopyLocalPaths.DestinationSubPath) + true + + <_CollectedCopyToOutputDirectoryItem Include="@(ReferenceCopyLocalPaths->'%(Identity)')" Condition="'%(ReferenceCopyLocalPaths.ReferenceSourceTarget)' != 'ProjectReference' AND '%(ReferenceCopyLocalPaths.DestinationSubPath)' == ''"> + PreserveNewest + $([System.IO.Path]::GetFileName('%(Identity)')) + true + + + <_CollectedCopyToOutputDirectoryItem Include="@(FinalDocFile->'%(FullPath)')" Condition="'$(_DocumentationFileProduced)' == 'true'"> + PreserveNewest + $([System.IO.Path]::GetFileName('%(Identity)')) + true + + + <_CollectedCopyToOutputDirectoryItem Include="@(IntermediateSatelliteAssembliesWithTargetPath->'$(TargetDir)%(Culture)\$(TargetName).resources.dll')" Condition="'@(IntermediateSatelliteAssembliesWithTargetPath)' != ''"> + PreserveNewest + %(IntermediateSatelliteAssembliesWithTargetPath.Culture)\$(TargetName).resources.dll + true + + + + + + + Properties + false + C# + {694DD9B6-B865-4C5B-AD85-86356E9C88DC} + CSharp + {FAE04EC0-301F-11d3-BF4B-00C04F79EFBC} + {FAE04EC1-301F-11d3-BF4B-00C04F79EFBC} + {FAE04EC1-301F-11d3-BF4B-00C04F79EFBC} + Private + Camel + Declarations + + false + + + + + + + + Project + + + Project + + + Project + + + File + + + BrowseObject + + + + + + + + + + + + + + <_CompilerCommandLineArgs Include="@(CscCommandLineArgs)" /> + + + + + + + $(MSBuildToolsPath)\Microsoft.Common.CurrentVersion.targets + + + + + + true + true + true + true + + + + + + + 10.0 + + + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.Before.Microsoft.Common.targets + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.After.Microsoft.Common.targets + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\ReportingServices\Microsoft.ReportingServices.targets + + + + + Managed + + + + .NETFramework + v4.0 + + + + Any CPU,x86,x64,Itanium + Any CPU,x86,x64 + + + + + + $(MSBuildToolsPath)\Microsoft.NETFramework.CurrentVersion.props + + + + + true + true + true + true + + + + + + true + $(TargetFrameworkSubset) + + + + + <_FullFrameworkReferenceAssemblyPaths>$(FrameworkPathOverride) + <_TargetFrameworkDirectories>$(FrameworkPathOverride) + + + + + <_FullFrameworkReferenceAssemblyPaths Condition="Exists('$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\RedistList\FrameworkList.xml')">$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0 + <_TargetFrameworkDirectories Condition="'$(TargetFrameworkProfile)' == ''">$(_FullFrameworkReferenceAssemblyPaths) + $(_TargetFrameworkDirectories) + + <_TargetFrameworkDirectories Condition="'$(TargetFrameworkProfile)' == 'Client' and Exists('$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\$(TargetFrameworkProfile)\RedistList\FrameworkList.xml')">$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\$(TargetFrameworkProfile) + $(_TargetFrameworkDirectories) + .NET Framework 4 + .NET Framework 4 Client Profile + + + $(Registry:HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework@InstallRoot) + <_DeploymentSignClickOnceManifests Condition="'$(TargetFrameworkVersion)' == 'v2.0' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(SignManifests)' == 'true'">true + + true + System.Core;$(AdditionalExplicitAssemblyReferences) + + + + true + $(MSBuildFrameworkToolsRoot)\v3.5 + $(SDK35ToolsPath) + + v2.0.50727 + v$(MSBuildRuntimeVersion) + + + true + + + false + + + + 6.02 + + 6.00 + + + $(ExecuteAsTool) + true + + + $(ExecuteAsTool) + true + + + + true + + + $(AvailablePlatforms),ARM64 + + + + + + + $(SDK40ToolsPath) + + + + true + + + false + + + + + + + + + + true + + true + + + $(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion),Profile=$(TargetFrameworkProfile) + $(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion) + + $(TargetFrameworkRootPath)$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion) + + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToStandardLibraries($(TargetFrameworkIdentifier), $(TargetFrameworkVersion), $(TargetFrameworkProfile), $(PlatformTarget), $(TargetFrameworkRootPath), $(TargetFrameworkFallbackSearchPaths))) + $(MSBuildFrameworkToolsPath) + + + Windows + 7.0 + $(TargetPlatformSdkRootOverride)\ + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SDKs\Windows\v$(TargetPlatformVersion)', InstallationFolder, null, RegistryView.Registry32, RegistryView.Default)) + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSDKLocation($(TargetPlatformIdentifier), $(TargetPlatformVersion))) + $(TargetPlatformSdkPath)Windows Metadata + $(TargetPlatformSdkPath)References\CommonConfiguration\Neutral + $(TargetPlatformSdkMetadataLocation) + true + $(WinDir)\System32\WinMetadata + $(TargetPlatformIdentifier),Version=$(TargetPlatformVersion) + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSDKDisplayName($(TargetPlatformIdentifier), $(TargetPlatformVersion))) + + + + + <_OriginalPlatform>$(Platform) + + <_OriginalConfiguration>$(Configuration) + + <_OutputPathWasMissing Condition="'$(_OriginalPlatform)' != '' and '$(_OriginalConfiguration)' != '' and '$(OutputPath)' == ''">true + + true + + + AnyCPU + $(Platform) + Debug + $(Configuration) + bin\ + $(BaseOutputPath)\ + $(BaseOutputPath)$(Configuration)\ + $(BaseOutputPath)$(PlatformName)\$(Configuration)\ + $(OutputPath)\ + obj\ + $(BaseIntermediateOutputPath)\ + $(BaseIntermediateOutputPath)$(Configuration)\ + $(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\ + $(IntermediateOutputPath)\ + + + + $(TargetType) + library + exe + true + + <_DebugSymbolsProduced>false + <_DebugSymbolsProduced Condition="'$(DebugSymbols)'=='true'">true + <_DebugSymbolsProduced Condition="'$(DebugType)'=='none'">false + <_DebugSymbolsProduced Condition="'$(DebugType)'=='pdbonly'">true + <_DebugSymbolsProduced Condition="'$(DebugType)'=='full'">true + <_DebugSymbolsProduced Condition="'$(DebugType)'=='portable'">true + <_DebugSymbolsProduced Condition="'$(DebugType)'=='embedded'">false + <_DebugSymbolsProduced Condition="'$(ProduceOnlyReferenceAssembly)'=='true'">false + + <_DocumentationFileProduced>true + <_DocumentationFileProduced Condition="'$(DocumentationFile)'==''">false + + false + + + + + <_InvalidConfigurationMessageSeverity Condition=" '$(SkipInvalidConfigurations)' == 'true' ">Warning + <_InvalidConfigurationMessageSeverity Condition=" '$(SkipInvalidConfigurations)' != 'true' ">Error + + + + .exe + .exe + .exe + .dll + .netmodule + .winmdobj + + + + true + $(OutputPath) + + + $(OutDir)\ + $(MSBuildProjectName) + + + $(OutDir)$(ProjectName)\ + $(MSBuildProjectName) + $(RootNamespace) + $(AssemblyName) + + $(MSBuildProjectFile) + + $(MSBuildProjectExtension) + + $(TargetName).winmd + $(WinMDExpOutputWindowsMetadataFilename) + $(TargetName)$(TargetExt) + + + + + <_DeploymentPublishableProjectDefault Condition="'$(OutputType)'=='winexe' or '$(OutputType)'=='exe' or '$(OutputType)'=='appcontainerexe'">true + $(_DeploymentPublishableProjectDefault) + <_DeploymentTargetApplicationManifestFileName Condition="'$(OutputType)'=='library'">Native.$(AssemblyName).manifest + + <_DeploymentTargetApplicationManifestFileName Condition="'$(OutputType)'=='winexe'">$(TargetFileName).manifest + + <_DeploymentTargetApplicationManifestFileName Condition="'$(OutputType)'=='exe'">$(TargetFileName).manifest + + <_DeploymentTargetApplicationManifestFileName Condition="'$(OutputType)'=='appcontainerexe'">$(TargetFileName).manifest + + $(AssemblyName).application + + $(AssemblyName).xbap + + $(GenerateManifests) + <_DeploymentApplicationManifestIdentity Condition="'$(OutputType)'=='library'">Native.$(AssemblyName) + <_DeploymentApplicationManifestIdentity Condition="'$(OutputType)'=='winexe'">$(AssemblyName).exe + <_DeploymentApplicationManifestIdentity Condition="'$(OutputType)'=='exe'">$(AssemblyName).exe + <_DeploymentApplicationManifestIdentity Condition="'$(OutputType)'=='appcontainerexe'">$(AssemblyName).exe + <_DeploymentDeployManifestIdentity Condition="'$(HostInBrowser)' != 'true'">$(AssemblyName).application + <_DeploymentDeployManifestIdentity Condition="'$(HostInBrowser)' == 'true'">$(AssemblyName).xbap + <_DeploymentFileMappingExtension Condition="'$(MapFileExtensions)'=='true'">.deploy + <_DeploymentFileMappingExtension Condition="'$(MapFileExtensions)'!='true'" /> + <_DeploymentBuiltUpdateInterval Condition="'$(UpdatePeriodically)'=='true'">$(UpdateInterval) + <_DeploymentBuiltUpdateIntervalUnits Condition="'$(UpdatePeriodically)'=='true'">$(UpdateIntervalUnits) + <_DeploymentBuiltUpdateInterval Condition="'$(UpdatePeriodically)'!='true'">0 + <_DeploymentBuiltUpdateIntervalUnits Condition="'$(UpdatePeriodically)'!='true'">Days + <_DeploymentBuiltMinimumRequiredVersion Condition="'$(UpdateRequired)'=='true' and '$(Install)'=='true'">$(MinimumRequiredVersion) + <_DeploymentLauncherBased Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">true + 100 + + + + * + $(UICulture) + + + + <_OutputPathItem Include="$(OutDir)" /> + <_UnmanagedRegistrationCache Include="$(BaseIntermediateOutputPath)$(MSBuildProjectFile).UnmanagedRegistration.cache" /> + <_ResolveComReferenceCache Include="$(IntermediateOutputPath)$(MSBuildProjectFile).ResolveComReference.cache" /> + + + + + $([MSBuild]::Escape($([System.IO.Path]::GetFullPath(`$([System.IO.Path]::Combine(`$(MSBuildProjectDirectory)`, `$(OutDir)`))`)))) + + $(TargetDir)$(TargetFileName) + $([MSBuild]::NormalizePath($(TargetDir), 'ref', $(TargetFileName))) + $([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(IntermediateOutputPath), 'ref', $(TargetFileName))) + + $([MSBuild]::EnsureTrailingSlash($(MSBuildProjectDirectory))) + + $(ProjectDir)$(ProjectFileName) + + + + + + + + *Undefined* + *Undefined* + + *Undefined* + + *Undefined* + + *Undefined* + + *Undefined* + + + + true + + true + + + true + false + + + $(MSBuildProjectFile).FileListAbsolute.txt + + false + + true + true + <_ResolveReferenceDependencies Condition="'$(_ResolveReferenceDependencies)' == ''">false + <_GetChildProjectCopyToOutputDirectoryItems Condition="'$(_GetChildProjectCopyToOutputDirectoryItems)' == ''">true + false + false + + + <_GenerateBindingRedirectsIntermediateAppConfig>$(IntermediateOutputPath)$(TargetFileName).config + + + $(MSBuildProjectFile) + + $([MSBuild]::SubstringByAsciiChars($(MSBuildProjectFile), 0, 8)).$([MSBuild]::StableStringHash($(MSBuildProjectFile)).ToString("X8")) + $(MSBuildCopyMarkerName).Up2Date + + + + + + + + + + + + + + <_DebugSymbolsIntermediatePath Include="$(IntermediateOutputPath)$(TargetName).compile.pdb" Condition="'$(OutputType)' == 'winmdobj' and '@(_DebugSymbolsIntermediatePath)' == ''" /> + <_DebugSymbolsIntermediatePath Include="$(IntermediateOutputPath)$(TargetName).pdb" Condition="'$(OutputType)' != 'winmdobj' and '@(_DebugSymbolsIntermediatePath)' == ''" /> + <_DebugSymbolsOutputPath Include="@(_DebugSymbolsIntermediatePath->'$(OutDir)%(Filename)%(Extension)')" /> + + + $(IntermediateOutputPath)$(TargetName).pdb + <_WinMDDebugSymbolsOutputPath>$([System.IO.Path]::Combine('$(OutDir)', $([System.IO.Path]::GetFileName('$(WinMDExpOutputPdb)')))) + + + $(IntermediateOutputPath)$(TargetName).xml + <_WinMDDocFileOutputPath>$([System.IO.Path]::Combine('$(OutDir)', $([System.IO.Path]::GetFileName('$(WinMDOutputDocumentationFile)')))) + + + <_IntermediateWindowsMetadataPath>$(IntermediateOutputPath)$(WinMDExpOutputWindowsMetadataFilename) + <_WindowsMetadataOutputPath>$(OutDir)$(WinMDExpOutputWindowsMetadataFilename) + + + + <_SupportedArchitectures>amd64 arm64 + + + + <_DeploymentManifestEntryPoint Include="@(IntermediateAssembly)"> + $(TargetFileName) + + + + <_DeploymentManifestIconFile Include="$(ApplicationIcon)" Condition="Exists('$(ApplicationIcon)')"> + $(ApplicationIcon) + + + + $(_DeploymentTargetApplicationManifestFileName) + + + <_ApplicationManifestFinal Include="$(OutDir)$(_DeploymentTargetApplicationManifestFileName)"> + $(_DeploymentTargetApplicationManifestFileName) + + + + $(TargetDeployManifestFileName) + + + <_DeploymentIntermediateTrustInfoFile Include="$(IntermediateOutputPath)$(TargetName).TrustInfo.xml" Condition="'$(TargetZone)'!=''" /> + + + + <_DeploymentUrl Condition="'$(_DeploymentUrl)'==''">$(UpdateUrl) + <_DeploymentUrl Condition="'$(_DeploymentUrl)'==''">$(InstallUrl) + <_DeploymentUrl Condition="'$(_DeploymentUrl)'==''">$(PublishUrl) + <_DeploymentUrl Condition="!('$(UpdateUrl)'=='') and '$(Install)'=='false'" /> + <_DeploymentUrl Condition="'$(_DeploymentUrl)'!=''">$(_DeploymentUrl)$(TargetDeployManifestFileName) + + <_DeploymentUrl Condition="'$(UpdateUrl)'=='' and !('$(Install)'=='true' and '$(UpdateEnabled)'=='true')" /> + <_DeploymentUrl Condition="'$(ExcludeDeploymentUrl)'=='true'" /> + + + + <_DeploymentApplicationUrl Condition="'$(IsWebBootstrapper)'=='true'">$(InstallUrl) + <_DeploymentApplicationUrl Condition="'$(IsWebBootstrapper)'=='true' and '$(InstallUrl)'==''">$(PublishUrl) + <_DeploymentComponentsUrl Condition="'$(BootstrapperComponentsLocation)'=='Absolute'">$(BootstrapperComponentsUrl) + + + + $(PublishDir)\ + $([MSBuild]::EnsureTrailingSlash('$(OutputPath)'))app.publish\ + + + + $(PublishDir) + $(ClickOncePublishDir)\ + + + + + $(PlatformTarget) + + msil + amd64 + ia64 + x86 + arm + + + true + + + + $(Platform) + msil + amd64 + ia64 + x86 + arm + + None + $(PROCESSOR_ARCHITECTURE) + + + + CLR2 + CLR4 + CurrentRuntime + true + false + $(PlatformTarget) + x86 + x64 + CurrentArchitecture + + + + Client + + + + false + + + + + true + true + false + + + + AssemblyFoldersEx + Software\Microsoft\$(TargetFrameworkIdentifier) + Software\Microsoft\Microsoft SDKs\$(TargetPlatformIdentifier) + $([MSBuild]::GetToolsDirectory32())\AssemblyFolders.config + {AssemblyFoldersFromConfig:$(AssemblyFoldersConfigFile),$(TargetFrameworkVersion)}; + + + .winmd; + .dll; + .exe + + + + .pdb; + .xml; + .pri; + .dll.config; + .exe.config + + + Full + + + + {CandidateAssemblyFiles} + $(AssemblySearchPaths);$(ReferencePath) + $(AssemblySearchPaths);{HintPathFromItem} + $(AssemblySearchPaths);{TargetFrameworkDirectory} + $(AssemblySearchPaths);$(AssemblyFoldersConfigFileSearchPath) + $(AssemblySearchPaths);{Registry:$(FrameworkRegistryBase),$(TargetFrameworkVersion),$(AssemblyFoldersSuffix)$(AssemblyFoldersExConditions)} + $(AssemblySearchPaths);{AssemblyFolders} + $(AssemblySearchPaths);{GAC} + $(AssemblySearchPaths);{RawFileName} + $(AssemblySearchPaths);$(OutDir) + + + + false + + + + $(MSBuildWarningsAsMessages);$(NoWarn) + $(WarningsAsErrors) + $(WarningsNotAsErrors) + + + + $(MSBuildThisFileDirectory)$(LangName)\ + + + + $(MSBuildThisFileDirectory)en-US\ + + + + + Project + + + BrowseObject + + + File + + + Invisible + + + File;BrowseObject + + + File;ProjectSubscriptionService + + + + $(DefineCommonItemSchemas) + + + + + ;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + ;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + ;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + + + + + + Never + + + Never + + + Never + + + Never + + + + + + true + + + + + <_GlobalPropertiesToRemoveFromProjectReferences Condition="'$(PassOutputPathToReferencedProjects)'=='false'">$(_GlobalPropertiesToRemoveFromProjectReferences);OutputPath + + + + + + <_InvalidConfigurationMessageResourceName Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">CommonSdk.InvalidConfigurationTextWhenBuildingInsideVisualStudio + <_InvalidConfigurationMessageResourceName Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">CommonSdk.InvalidConfigurationTextWhenBuildingOutsideVisualStudio + + + + + + + + + + + x86 + + + + + + + + + + + + + BeforeBuild; + CoreBuild; + AfterBuild + + + + + + + + + + + BuildOnlySettings; + PrepareForBuild; + PreBuildEvent; + ResolveReferences; + PrepareResources; + ResolveKeySource; + Compile; + ExportWindowsMDFile; + UnmanagedUnregistration; + GenerateSerializationAssemblies; + CreateSatelliteAssemblies; + GenerateManifests; + GetTargetPath; + PrepareForRun; + UnmanagedRegistration; + IncrementalClean; + PostBuildEvent + + + + + + + + + <_ProjectDefaultTargets Condition="'$(MSBuildProjectDefaultTargets)' != ''">$(MSBuildProjectDefaultTargets) + <_ProjectDefaultTargets Condition="'$(MSBuildProjectDefaultTargets)' == ''">Build + + BeforeRebuild; + Clean; + $(_ProjectDefaultTargets); + AfterRebuild; + + + BeforeRebuild; + Clean; + Build; + AfterRebuild; + + + + + + + + + + Build + + + + + + + + + + + Build + + + + + + + + + + + Build + + + + + + + + + + + + + + + + + + + + + + + false + + + + true + + + + + + $(PrepareForBuildDependsOn);GetFrameworkPaths;GetReferenceAssemblyPaths;AssignLinkMetadata + + + + + $(TargetFileName).config + + + + + + + + + + + + + @(_TargetFramework40DirectoryItem) + @(_TargetFramework35DirectoryItem) + @(_TargetFramework30DirectoryItem) + @(_TargetFramework20DirectoryItem) + + @(_TargetFramework20DirectoryItem) + @(_TargetFramework40DirectoryItem) + @(_TargetedFrameworkDirectoryItem) + @(_TargetFrameworkSDKDirectoryItem) + + + + + + + + + + + + + + + + + + $(_TargetFrameworkDirectories);$(TargetFrameworkDirectory);$(WinFXAssemblyDirectory) + $(TargetFrameworkDirectory);$(TargetPlatformWinMDLocation) + + + + true + + + $(AssemblySearchPaths.Replace('{AssemblyFolders}', '').Split(';')) + + + + + + + $(TargetFrameworkDirectory);@(DesignTimeFacadeDirectories) + + + + + + + + + + + + + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + + + + + + + + + + $(PlatformTargetAsMSBuildArchitecture) + + + + $(TargetFrameworkAsMSBuildRuntime) + + CurrentRuntime + + + + + + + + + + BeforeResolveReferences; + AssignProjectConfiguration; + ResolveProjectReferences; + FindInvalidProjectReferences; + ResolveNativeReferences; + ResolveAssemblyReferences; + GenerateBindingRedirects; + GenerateBindingRedirectsUpdateAppConfig; + ResolveComReferences; + AfterResolveReferences + + + + + + + + + + + + false + + + + + + + true + true + false + + false + + true + + + + + + + + + + + <_ProjectReferenceWithConfiguration> + true + true + + + true + true + + + + + + + + + + + + + <_MSBuildProjectReference Include="@(ProjectReferenceWithConfiguration)" Condition="'$(BuildingInsideVisualStudio)'!='true' and '@(ProjectReferenceWithConfiguration)'!=''" /> + + + + <_MSBuildProjectReferenceExistent Include="@(_MSBuildProjectReference)" Condition="Exists('%(Identity)')" /> + <_MSBuildProjectReferenceNonexistent Include="@(_MSBuildProjectReference)" Condition="!Exists('%(Identity)')" /> + + + + + true + + + + + + <_MSBuildProjectReferenceExistent Condition="'%(_MSBuildProjectReferenceExistent.SetPlatform)' != ''"> + true + + + + <_ProjectReferencePlatformPossibilities Include="@(_MSBuildProjectReferenceExistent)" Condition="'%(_MSBuildProjectReferenceExistent.SkipGetPlatformProperties)' != 'true'" /> + + + + + <_ProjectReferencePlatformPossibilities Condition="'$(MSBuildProjectExtension)' != '.vcxproj' and '$(MSBuildProjectExtension)' != '.nativeproj' and '%(_ProjectReferencePlatformPossibilities.IsVcxOrNativeProj)' == 'true'"> + + x86=Win32 + + + <_ProjectReferencePlatformPossibilities Condition="('$(MSBuildProjectExtension)' == '.vcxproj' or '$(MSBuildProjectExtension)' == '.nativeproj') and '%(_ProjectReferencePlatformPossibilities.IsVcxOrNativeProj)' != 'true'"> + Win32=x86 + + + + + + + + + + Platform=%(ProjectsWithNearestPlatform.NearestPlatform) + + + + %(ProjectsWithNearestPlatform.UndefineProperties);Platform + + <_MSBuildProjectReferenceExistent Remove="@(_MSBuildProjectReferenceExistent)" Condition="'%(_MSBuildProjectReferenceExistent.SkipGetPlatformProperties)' != 'true'" /> + <_MSBuildProjectReferenceExistent Include="@(ProjectsWithNearestPlatform)" /> + + + + + + + $(NuGetTargetMoniker) + $(TargetFrameworkMoniker) + + + + <_MSBuildProjectReferenceExistent Condition="'%(_MSBuildProjectReferenceExistent.SkipGetTargetFrameworkProperties)' == '' and ('%(Extension)' == '.vcxproj' or '%(Extension)' == '.nativeproj')"> + + true + %(_MSBuildProjectReferenceExistent.UndefineProperties);TargetFramework + + + + + <_MSBuildProjectReferenceExistent Condition="'%(_MSBuildProjectReferenceExistent.SetTargetFramework)' != ''"> + + true + + + + + + + + + + + + + <_ProjectReferenceTargetFrameworkPossibilitiesOriginalItemSpec Include="@(_ProjectReferenceTargetFrameworkPossibilities->'%(OriginalItemSpec)')" /> + <_ProjectReferenceTargetFrameworkPossibilities Remove="@(_ProjectReferenceTargetFrameworkPossibilities)" /> + <_ProjectReferenceTargetFrameworkPossibilities Include="@(_ProjectReferenceTargetFrameworkPossibilitiesOriginalItemSpec)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + TargetFramework=%(AnnotatedProjects.NearestTargetFramework) + + + + %(AnnotatedProjects.UndefineProperties);TargetFramework + + + + %(AnnotatedProjects.UndefineProperties);RuntimeIdentifier;SelfContained + + + <_MSBuildProjectReferenceExistent Remove="@(_MSBuildProjectReferenceExistent)" Condition="'%(_MSBuildProjectReferenceExistent.SkipGetTargetFrameworkProperties)' != 'true'" /> + <_MSBuildProjectReferenceExistent Include="@(AnnotatedProjects)" /> + + + + + + + + + <_ThisProjectBuildMetadata Include="$(MSBuildProjectFullPath)"> + @(_TargetFrameworkInfo) + @(_TargetFrameworkInfo->'%(TargetFrameworkMonikers)') + @(_TargetFrameworkInfo->'%(TargetPlatformMonikers)') + $(_AdditionalPropertiesFromProject) + true + @(_TargetFrameworkInfo->'%(IsRidAgnostic)') + + true + $(Platform) + $(Platforms) + + @(ProjectConfiguration->'%(Platform)'->Distinct()) + + + + + + <_AdditionalTargetFrameworkInfoPropertyWithValue Include="@(AdditionalTargetFrameworkInfoProperty)"> + $(%(AdditionalTargetFrameworkInfoProperty.Identity)) + + + + <_UseAttributeForTargetFrameworkInfoPropertyNames Condition="'$(_UseAttributeForTargetFrameworkInfoPropertyNames)' == ''">false + + + + + + <_TargetFrameworkInfo Include="$(TargetFramework)"> + $(TargetFramework) + $(TargetFrameworkMoniker) + $(TargetPlatformMoniker) + None + $(_AdditionalTargetFrameworkInfoProperties) + + $(IsRidAgnostic) + true + false + + + + + + + + + AssignProjectConfiguration; + _SplitProjectReferencesByFileExistence; + _GetProjectReferenceTargetFrameworkProperties; + _GetProjectReferencePlatformProperties + + + + + + + + + $(ProjectReferenceBuildTargets) + + + ProjectReference + + + + + + + + + + + + + + + + + + + <_ResolvedProjectReferencePaths Remove="@(_ResolvedProjectReferencePaths)" Condition="'%(_ResolvedProjectReferencePaths.ResolveableAssembly)' == 'false'" /> + + <_ResolvedProjectReferencePaths> + %(_ResolvedProjectReferencePaths.OriginalItemSpec) + + + + + <_NonExistentProjectReferenceSeverity Condition="'@(ProjectReferenceWithConfiguration)' != '' and '@(_MSBuildProjectReferenceNonexistent)' != '' and '$(ErrorOnMissingProjectReference)' != 'True'">Warning + <_NonExistentProjectReferenceSeverity Condition="'@(ProjectReferenceWithConfiguration)' != '' and '@(_MSBuildProjectReferenceNonexistent)' != '' and '$(ErrorOnMissingProjectReference)' == 'True'">Error + + + + + + + <_ProjectReferencesFromRAR Include="@(ReferencePath->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"> + %(ReferencePath.ProjectReferenceOriginalItemSpec) + + + + + + + + + $(GetTargetPathDependsOn) + + + + + + $(TargetPlatformMoniker) + $(TargetPlatformIdentifier) + $(TargetFrameworkIdentifier) + $(TargetFrameworkVersion.TrimStart('vV')) + $(TargetRefPath) + @(CopyUpToDateMarker) + + + + + + + + %(_ApplicationManifestFinal.FullPath) + + + + + + + + + + + + + + + + + + ResolveProjectReferences; + FindInvalidProjectReferences; + GetFrameworkPaths; + GetReferenceAssemblyPaths; + PrepareForBuild; + ResolveSDKReferences; + ExpandSDKReferences; + + + + + <_ReferenceInstalledAssemblyDirectory Include="$(TargetFrameworkDirectory)" /> + <_ReferenceInstalledAssemblySubsets Include="$(TargetFrameworkSubset)" /> + + + + $(IntermediateOutputPath)$(MSBuildProjectFile).AssemblyReference.cache + + + false + + + + <_ResolveAssemblyReferencesApplicationConfigFileForExes Include="@(AppConfigWithTargetPath)" Condition="'$(AutoGenerateBindingRedirects)'=='true' or '$(AutoUnifyAssemblyReferences)'=='false'" /> + + + + <_FindDependencies Condition="'$(BuildingProject)' != 'true' and '$(_ResolveReferenceDependencies)' != 'true'">false + true + false + Warning + $(BuildingProject) + $(BuildingProject) + $(BuildingProject) + false + + + + + + true + + + + + + + + false + + + + false + true + + + + + + + + + + + + + + + + + + + + + + + %(FullPath) + + + %(ReferencePath.Identity) + + + + + + + + + + + + + + + <_NewGenerateBindingRedirectsIntermediateAppConfig Condition="Exists('$(_GenerateBindingRedirectsIntermediateAppConfig)')">true + $(_GenerateBindingRedirectsIntermediateAppConfig) + + + + + $(TargetFileName).config + + + + + + Software\Microsoft\Microsoft SDKs + $(LocalAppData)\Microsoft SDKs;$(MSBuildProgramFiles32)\Microsoft SDKs + + $(MSBuildProgramFiles32)\Microsoft SDKs\Windows Kits\10;$(WindowsKitsRoot) + + true + Windows + 8.1 + + false + WindowsPhoneApp + 8.1 + + + + + + + + + + + + + + + + + GetInstalledSDKLocations + + + + Debug + Retail + Retail + $(ProcessorArchitecture) + Neutral + + + true + + + + + + + + + + + + + + + + GetReferenceTargetPlatformMonikers + + + + + + + + <_ResolvedProjectReferencePaths Remove="@(InvalidProjectReferences)" /> + + + + + + + + + + + + + + ResolveSDKReferences + + + .winmd; + .dll + + + + + + + + + + + + + + + + false + false + false + $(TargetFrameworkSDKToolsDirectory) + true + + + + + + + + + + + + + + + <_ReferencesFromRAR Include="@(ReferencePath->WithMetadataValue('ReferenceSourceTarget', 'ResolveAssemblyReference'))" /> + + + + + {CandidateAssemblyFiles}; + $(ReferencePath); + {HintPathFromItem}; + {TargetFrameworkDirectory}; + {Registry:$(FrameworkRegistryBase),$(TargetFrameworkVersion),$(AssemblyFoldersSuffix)$(AssemblyFoldersExConditions)}; + {RawFileName}; + $(TargetDir) + + + + + + GetFrameworkPaths; + GetReferenceAssemblyPaths; + ResolveReferences + + + + + <_DesignTimeReferenceInstalledAssemblyDirectory Include="$(TargetFrameworkDirectory)" /> + + + $(IntermediateOutputPath)$(MSBuildProjectFile)DesignTimeResolveAssemblyReferences.cache + + + + {CandidateAssemblyFiles}; + $(ReferencePath); + {HintPathFromItem}; + {TargetFrameworkDirectory}; + {Registry:$(FrameworkRegistryBase),$(TargetFrameworkVersion),$(AssemblyFoldersSuffix)$(AssemblyFoldersExConditions)}; + {RawFileName}; + $(OutDir) + + + + false + false + false + false + false + true + false + + + <_DesignTimeReferenceAssemblies Include="$(DesignTimeReference)" /> + + + <_RARResolvedReferencePath Include="@(ReferencePath)" /> + + + + + + + + + + false + + + + $(IntermediateOutputPath) + + + + + $(PlatformTargetAsMSBuildArchitecture) + $(TargetFrameworkSDKToolsDirectory) + false + + + + + + + + + + + + + + + + + + + + + + + + + + + $(PrepareResourcesDependsOn); + PrepareResourceNames; + ResGen; + CompileLicxFiles + + + + + + + AssignTargetPaths; + SplitResourcesByCulture; + CreateManifestResourceNames; + CreateCustomManifestResourceNames + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + + + + + + + + + + + false + false + + + + + + + <_LicxFile Include="@(EmbeddedResource)" Condition="'%(Extension)'=='.licx'" /> + + + Resx + + + Non-Resx + + + + + + + + + + + + + + + + Resx + + + Non-Resx + + + + + + + + + + + + <_MixedResourceWithNoCulture Remove="@(_MixedResourceWithNoCulture)" /> + <_MixedResourceWithCulture Remove="@(_MixedResourceWithCulture)" /> + + + + + + + + + + ResolveAssemblyReferences;SplitResourcesByCulture;BeforeResGen;CoreResGen;AfterResGen + FindReferenceAssembliesForReferences + true + false + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + $(PlatformTargetAsMSBuildArchitecture) + $(TargetFrameworkSDKToolsDirectory) + + + + $(TargetFrameworkAsMSBuildRuntime) + + CurrentRuntime + + + + + + + + + + + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + true + + + true + + + + true + + + true + + + + + + + + + + $(PlatformTargetAsMSBuildArchitecture) + + + + + + + + + + + + + + + + + + + + ResolveReferences; + ResolveKeySource; + SetWin32ManifestProperties; + _SetPreferNativeArm64Win32ManifestProperties; + FindReferenceAssembliesForReferences; + _GenerateCompileInputs; + BeforeCompile; + _TimeStampBeforeCompile; + _GenerateCompileDependencyCache; + CoreCompile; + _TimeStampAfterCompile; + AfterCompile; + + + + + + + + + + <_CoreCompileResourceInputs Include="@(EmbeddedResource->'%(OutputResource)')" Condition="'%(EmbeddedResource.WithCulture)' == 'false' and '%(EmbeddedResource.Type)' == 'Resx'" /> + <_CoreCompileResourceInputs Include="@(EmbeddedResource)" Condition="'%(EmbeddedResource.WithCulture)' == 'false' and '%(EmbeddedResource.Type)' == 'Non-Resx' " /> + + <_CoreCompileResourceInputs Include="@(ManifestResourceWithNoCulture)" Condition="'%(ManifestResourceWithNoCulture.EmittedForCompatibilityOnly)'==''"> + Resx + false + + <_CoreCompileResourceInputs Include="@(ManifestNonResxWithNoCultureOnDisk)" Condition="'%(ManifestNonResxWithNoCultureOnDisk.EmittedForCompatibilityOnly)'==''"> + Non-Resx + false + + + + + + + true + $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) + + + true + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + <_AssemblyTimestampBeforeCompile>%(IntermediateAssembly.ModifiedTime) + + + + + + $(IntermediateOutputPath)$(MSBuildProjectFile).SuggestedBindingRedirects.cache + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_AssemblyTimestampAfterCompile>%(IntermediateAssembly.ModifiedTime) + + + + + + __NonExistentSubDir__\__NonExistentFile__ + + + + + <_SGenDllName>$(TargetName).XmlSerializers.dll + <_SGenDllCreated>false + <_SGenGenerateSerializationAssembliesConfig>$(GenerateSerializationAssemblies) + <_SGenGenerateSerializationAssembliesConfig Condition="'$(GenerateSerializationAssemblies)' == ''">Auto + <_SGenGenerateSerializationAssembliesConfig Condition="'$(ConfigurationName)'=='Debug' and '$(_SGenGenerateSerializationAssembliesConfig)' == 'Auto'">Off + true + false + true + + + + + $(PlatformTargetAsMSBuildArchitecture) + + + + + + + + + + $(CreateSatelliteAssembliesDependsOn); + _GenerateSatelliteAssemblyInputs; + ComputeIntermediateSatelliteAssemblies; + GenerateSatelliteAssemblies + + + + + + + + + + <_SatelliteAssemblyResourceInputs Include="@(EmbeddedResource->'%(OutputResource)')" Condition="'%(EmbeddedResource.WithCulture)' == 'true' and '%(EmbeddedResource.Type)' == 'Resx'" /> + <_SatelliteAssemblyResourceInputs Include="@(EmbeddedResource)" Condition="'%(EmbeddedResource.WithCulture)' == 'true' and '%(EmbeddedResource.Type)' == 'Non-Resx'" /> + + <_SatelliteAssemblyResourceInputs Include="@(ManifestResourceWithCulture)" Condition="'%(ManifestResourceWithCulture.EmittedForCompatibilityOnly)'==''"> + Resx + true + + <_SatelliteAssemblyResourceInputs Include="@(ManifestNonResxWithCultureOnDisk)" Condition="'%(ManifestNonResxWithCultureOnDisk.EmittedForCompatibilityOnly)'==''"> + Non-Resx + true + + + + + + + <_ALExeToolPath Condition="'$(_ALExeToolPath)' == ''">$(TargetFrameworkSDKToolsDirectory) + + + + + + + + + + CreateManifestResourceNames + + + + + + %(EmbeddedResource.Culture) + %(EmbeddedResource.Culture)\$(TargetName).resources.dll + + + + + + $(Win32Manifest) + + + + + + + <_DeploymentBaseManifest>$(ApplicationManifest) + <_DeploymentBaseManifest Condition="'$(_DeploymentBaseManifest)'==''">@(_DeploymentBaseManifestWithTargetPath) + + true + + + + + $(ApplicationManifest) + $(ApplicationManifest) + + + + + + + $(_FrameworkVersion40Path)\default.win32manifest + + + + + + + + + $(_Win32Manifest) + + + + + + + SetWin32ManifestProperties; + GenerateApplicationManifest; + GenerateDeploymentManifest + + + + + + <_DeploymentPublishFileOfTypeManifestEntryPoint Include="@(PublishFile)" Condition="'%(FileType)'=='ManifestEntryPoint'" /> + + + + + + + + + + + + + + + + + <_DeploymentCopyApplicationManifest>true + + + + + + <_DeploymentManifestTargetFrameworkMoniker>$(TargetFrameworkMoniker) + <_DeploymentManifestTargetFrameworkVersion>$(TargetFrameworkVersion) + + + + + + + + + + + + + + + + + + + <_DeploymentManifestTargetFrameworkVersion Condition="'$(DeploymentManifestTargetFrameworkVersionOverride)' == ''">v4.5 + <_DeploymentManifestTargetFrameworkVersion Condition="'$(DeploymentManifestTargetFrameworkVersionOverride)' != ''">$(DeploymentManifestTargetFrameworkVersionOverride) + <_DeploymentManifestTargetFrameworkMoniker>.NETFramework,Version=$(_DeploymentManifestTargetFrameworkVersion) + + + + + + + + + + + <_DeploymentManifestEntryPoint Remove="@(_DeploymentManifestEntryPoint)" /> + <_DeploymentManifestEntryPoint Include="@(_DeploymentManifestLauncherEntryPoint)" /> + + + + + + + + + + <_DeploymentManifestType>Native + + + + + + + <_DeploymentManifestVersion>@(_IntermediateAssemblyIdentity->'%(Version)') + + + + + + + <_SGenDllsRelatedToCurrentDll Include="@(_ReferenceSerializationAssemblyPaths->'%(FullPath)')" Condition="'%(Extension)' == '.dll'" /> + <_SGenDllsRelatedToCurrentDll Include="@(SerializationAssembly->'%(FullPath)')" Condition="'%(Extension)' == '.dll'" /> + + + <_CopyLocalFalseRefPaths Include="@(ReferencePath)" Condition="'%(CopyLocal)' == 'false'" /> + <_CopyLocalFalseRefPathsWithExclusion Include="@(_CopyLocalFalseRefPaths)" Exclude="@(ReferenceCopyLocalPaths);@(_NETStandardLibraryNETFrameworkLib)" /> + + + <_ClickOnceSatelliteAssemblies Include="@(IntermediateSatelliteAssembliesWithTargetPath);@(ReferenceSatellitePaths)" /> + + + + <_DeploymentReferencePaths Include="@(ReferenceCopyLocalPaths)" Condition="('%(Extension)' == '.dll' Or '%(Extension)' == '.exe' Or '%(Extension)' == '.md') and ('%(ReferenceCopyLocalPaths.CopyToPublishDirectory)' != 'false')"> + true + + <_DeploymentReferencePaths Include="@(_CopyLocalFalseRefPathsWithExclusion)" /> + + + + <_ManifestManagedReferences Include="@(_DeploymentReferencePaths);@(ReferenceDependencyPaths);@(_SGenDllsRelatedToCurrentDll);@(SerializationAssembly);@(ReferenceCOMWrappersToCopyLocal)" Exclude="@(_ClickOnceSatelliteAssemblies);@(_ReferenceScatterPaths);@(_ExcludedAssembliesFromManifestGeneration)" /> + + + + + <_ClickOnceRuntimeCopyLocalItems Include="@(RuntimeTargetsCopyLocalItems)" Condition="'%(RuntimeTargetsCopyLocalItems.CopyLocal)' == 'true'" /> + <_ClickOnceRuntimeCopyLocalItems Include="@(NativeCopyLocalItems)" Condition="'%(NativeCopyLocalItems.CopyLocal)' == 'true'" /> + <_ClickOnceRuntimeCopyLocalItems Remove="@(_DeploymentReferencePaths)" /> + + <_ClickOnceTransitiveContentItemsTemp Include="@(_TransitiveItemsToCopyToOutputDirectory->WithoutMetadataValue('CopyToPublishDirectory', 'Never')->'%(TargetPath)')" Condition="'$(PublishProtocol)' == 'ClickOnce'"> + %(Identity) + + <_ClickOnceTransitiveContentItems Include="@(_ClickOnceTransitiveContentItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" /> + + <_ClickOnceContentItems Include="@(ContentWithTargetPath->WithoutMetadataValue('CopyToPublishDirectory', 'Never'))" /> + <_ClickOnceContentItems Include="@(_ClickOnceTransitiveContentItems)" /> + + + <_ClickOnceNoneItemsTemp Include="@(_NoneWithTargetPath->WithoutMetadataValue('CopyToPublishDirectory', 'Never')->'%(TargetPath)')" Condition="'$(PublishProtocol)'=='Clickonce' And ('%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='IfDifferent')"> + %(Identity) + + <_ClickOnceNoneItems Include="@(_ClickOnceNoneItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" /> + <_ClickOnceFiles Include="@(_ClickOnceContentItems);@(_DeploymentManifestIconFile);@(AppConfigWithTargetPath);@(NetCoreRuntimeJsonFilesForClickOnce);@(_ClickOnceRuntimeCopyLocalItems);@(_ClickOnceNoneItems)" /> + + <_ClickOnceNoneItemsTemp Remove="@(_ClickOnceNoneItemsTemp)" /> + <_ClickOnceNoneItems Remove="@(_ClickOnceNoneItems)" /> + <_ClickOnceTransitiveContentItemsTemp Remove="@(_ClickOnceTransitiveContentItemsTemp)" /> + <_ClickOnceTransitiveContentItems Remove="@(_ClickOnceTransitiveContentItems)" /> + <_ClickOnceContentItems Remove="@(_ClickOnceContentItems)" /> + <_ClickOnceRuntimeCopyLocalItems Remove="@(_ClickOnceRuntimeCopyLocalItems)" /> + + + + <_ClickOnceFiles Include="$(PublishedSingleFilePath);@(_DeploymentManifestIconFile)" /> + <_ClickOnceFiles Include="@(_FilesExcludedFromBundle)" /> + + <_FileAssociationIcons Include="%(FileAssociation.DefaultIcon)" /> + <_ClickOnceFiles Include="@(ContentWithTargetPath)" Condition="'%(Identity)'=='@(_FileAssociationIcons)'" /> + + + + + + <_ManifestManagedReferences Remove="@(_ReadyToRunCompileList)" /> + <_ClickOnceFiles Remove="@(_ReadyToRunCompileList)" /> + <_ClickOnceFiles Include="@(_ReadyToRunFilesToPublish)" /> + <_ClickOnceTargetFile Include="@(_ReadyToRunFilesToPublish)" Condition="'%(Filename)%(Extension)' == '$(TargetFileName)'" /> + + + + + + + + + + + + + + + + + + + <_DeploymentManifestDependencies Include="@(_DeploymentManifestDependenciesUnfiltered)" Condition="!('%(_DeploymentManifestDependenciesUnfiltered.CopyLocal)' == 'false' And '%(_DeploymentManifestDependenciesUnfiltered.DependencyType)' != 'Install')" /> + + + <_DeploymentManifestType>ClickOnce + + + + <_DeploymentPlatformTarget Condition="'$(_DeploymentLauncherBased)' != 'true'">$(PlatformTarget) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + false + + + + + CopyFilesToOutputDirectory + + + + + + + false + false + + + + + false + false + false + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + + + + + + + + + + + + + + + + + <_TargetsThatPrepareProjectReferences>_SplitProjectReferencesByFileExistence + + true + <_TargetsThatPrepareProjectReferences Condition=" '$(MSBuildCopyContentTransitively)' == 'true' "> + AssignProjectConfiguration; + _SplitProjectReferencesByFileExistence + + + AssignTargetPaths; + $(_TargetsThatPrepareProjectReferences); + _GetProjectReferenceTargetFrameworkProperties; + _PopulateCommonStateForGetCopyToOutputDirectoryItems + + + <_RecursiveTargetForContentCopying>GetCopyToOutputDirectoryItems + + <_RecursiveTargetForContentCopying Condition=" '$(MSBuildCopyContentTransitively)' == 'false' ">_GetCopyToOutputDirectoryItemsFromThisProject + + + + + <_GCTODIKeepDuplicates>false + <_GCTODIKeepMetadata>CopyToOutputDirectory;TargetPath + + + + + + + + + + <_CopyToOutputDirectoryTransitiveItems KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_AllChildProjectItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always'" /> + <_CopyToOutputDirectoryTransitiveItems KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_AllChildProjectItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_CopyToOutputDirectoryTransitiveItems KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_AllChildProjectItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='IfDifferent'" /> + + + + <_AllChildProjectItemsWithTargetPath Remove="@(_AllChildProjectItemsWithTargetPath)" /> + + + + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + + + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='Always' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='PreserveNewest' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='IfDifferent' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'!=''" /> + + + <_CompileItemsToCopy Include="@(Compile->'%(FullPath)')" Condition="('%(Compile.CopyToOutputDirectory)'=='Always' or '%(Compile.CopyToOutputDirectory)'=='PreserveNewest' or '%(Compile.CopyToOutputDirectory)'=='IfDifferent') AND '%(Compile.MSBuildSourceProjectFile)'!=''" /> + + + + + + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='Always'" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='IfDifferent'" /> + + + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + + + + + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'==''" /> + + + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='Always' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='PreserveNewest' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='IfDifferent' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'==''" /> + + + <_CompileItemsToCopy Include="@(Compile->'%(FullPath)')" Condition="('%(Compile.CopyToOutputDirectory)'=='Always' or '%(Compile.CopyToOutputDirectory)'=='PreserveNewest' or '%(Compile.CopyToOutputDirectory)'=='IfDifferent') AND '%(Compile.MSBuildSourceProjectFile)'==''" /> + + + + + + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='Always'" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='IfDifferent'" /> + + + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'==''" /> + + + + + + + + + + + + + <_TransitiveItemsToCopyToOutputDirectory Remove="@(_ThisProjectItemsToCopyToOutputDirectory)" MatchOnMetadata="TargetPath" MatchOnMetadataOptions="PathLike" /> + + + <_TransitiveItemsToCopyToOutputDirectoryAlways KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_TransitiveItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='Always'" /> + <_TransitiveItemsToCopyToOutputDirectoryPreserveNewest KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_TransitiveItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_TransitiveItemsToCopyToOutputDirectoryIfDifferent KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_TransitiveItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='IfDifferent'" /> + <_ThisProjectItemsToCopyToOutputDirectoryAlways KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_ThisProjectItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_ThisProjectItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='Always'" /> + <_ThisProjectItemsToCopyToOutputDirectoryPreserveNewest KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_ThisProjectItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_ThisProjectItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_ThisProjectItemsToCopyToOutputDirectoryIfDifferent KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_ThisProjectItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_ThisProjectItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='IfDifferent'" /> + + <_SourceItemsToCopyToOutputDirectoryAlways Include="@(_TransitiveItemsToCopyToOutputDirectoryAlways);@(_ThisProjectItemsToCopyToOutputDirectoryAlways)" /> + <_SourceItemsToCopyToOutputDirectory Include="@(_TransitiveItemsToCopyToOutputDirectoryPreserveNewest);@(_ThisProjectItemsToCopyToOutputDirectoryPreserveNewest)" /> + <_SourceItemsToCopyToOutputDirectoryIfDifferent Include="@(_TransitiveItemsToCopyToOutputDirectoryIfDifferent);@(_ThisProjectItemsToCopyToOutputDirectoryIfDifferent)" /> + + + <_TransitiveItemsToCopyToOutputDirectoryAlways Remove="@(_TransitiveItemsToCopyToOutputDirectoryAlways)" /> + <_TransitiveItemsToCopyToOutputDirectoryPreserveNewest Remove="@(_TransitiveItemsToCopyToOutputDirectoryPreserveNewest)" /> + <_TransitiveItemsToCopyToOutputDirectoryIfDifferent Remove="@(_TransitiveItemsToCopyToOutputDirectoryIfDifferent)" /> + <_ThisProjectItemsToCopyToOutputDirectoryAlways Remove="@(_ThisProjectItemsToCopyToOutputDirectoryAlways)" /> + <_ThisProjectItemsToCopyToOutputDirectoryPreserveNewest Remove="@(_ThisProjectItemsToCopyToOutputDirectoryPreserveNewest)" /> + <_ThisProjectItemsToCopyToOutputDirectory Remove="@(_ThisProjectItemsToCopyToOutputDirectory)" /> + <_ThisProjectItemsToCopyToOutputDirectoryIfDifferent Remove="@(_ThisProjectItemsToCopyToOutputDirectoryIfDifferent)" /> + + + + + + + %(CopyToOutputDirectory) + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_DocumentationFileProduced Condition="!Exists('@(DocFileItem)')">false + + + + + + + <_DebugSymbolsProduced Condition="!Exists('@(_DebugSymbolsIntermediatePath)')">false + + + + + + + + + + <_SGenDllCreated Condition="Exists('$(IntermediateOutputPath)$(_SGenDllName)')">true + + + + + + + + + + + + + $(PlatformTargetAsMSBuildArchitecture) + + + + $(TargetFrameworkAsMSBuildRuntime) + + CurrentRuntime + + + + + + + + + + + + <_CleanOrphanFileWrites Include="@(_CleanPriorFileWrites)" Exclude="@(_CleanCurrentFileWrites)" /> + + + + + + + + + + + + + + + + <_CleanRemainingFileWritesAfterIncrementalClean Include="@(_CleanPriorFileWrites);@(_CleanCurrentFileWrites)" Exclude="@(_CleanOrphanFilesDeleted)" /> + + + + + + + + + + + + + + + + + + + + + <_CleanPriorFileWrites Include="@(_CleanUnfilteredPriorFileWrites)" Exclude="@(_ResolveAssemblyReferenceResolvedFilesAbsolute)" /> + + + + false + + + + + + + + + + + + + + + + + + + + + + <_CleanCurrentFileWritesWithNoReferences Include="@(_CleanCurrentFileWritesInOutput);@(_CleanCurrentFileWritesInIntermediate)" Exclude="@(_ResolveAssemblyReferenceResolvedFilesAbsolute)" /> + + + + + + + + + + + BeforeClean; + UnmanagedUnregistration; + CoreClean; + CleanReferencedProjects; + CleanPublishFolder; + AfterClean + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_CleanRemainingFileWritesAfterClean Include="@(_CleanPriorFileWrites)" Exclude="@(_CleanPriorFileWritesDeleted)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CleanPublishFolder; + $(_RecursiveTargetForContentCopying); + _DeploymentGenerateTrustInfo; + $(DeploymentComputeClickOnceManifestInfoDependsOn) + + + + + + SetGenerateManifests; + Build; + PublishOnly + + + _DeploymentUnpublishable + + + + + + + + + + + + + true + + + + + + SetGenerateManifests; + PublishBuild; + BeforePublish; + GenerateManifests; + CopyFilesToOutputDirectory; + _CopyFilesToPublishFolder; + _DeploymentGenerateBootstrapper; + ResolveKeySource; + _DeploymentSignClickOnceDeployment; + AfterPublish + + + + + + + + + + + BuildOnlySettings; + PrepareForBuild; + ResolveReferences; + PrepareResources; + ResolveKeySource; + GenerateSerializationAssemblies; + CreateSatelliteAssemblies; + + + + + + + + + + + <_DeploymentApplicationFolderName>Application Files\$(AssemblyName)_$(_DeploymentApplicationVersionFragment) + <_DeploymentApplicationDir>$(ClickOncePublishDir)$(_DeploymentApplicationFolderName)\ + + + + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(TargetPath) + $(TargetFileName) + true + + + + + + true + $(TargetPath) + $(TargetFileName) + + + + + PrepareForBuild + true + + + + <_BuiltProjectOutputGroupOutputIntermediate Include="@(BuiltProjectOutputGroupKeyOutput)" /> + + + + <_BuiltProjectOutputGroupOutputIntermediate Include="$(AppConfig)" Condition="'$(AddAppConfigToBuildOutputs)'=='true'"> + $(TargetDir)$(TargetFileName).config + $(TargetFileName).config + + $(AppConfig) + + + + <_IsolatedComReference Include="@(COMReference)" Condition=" '%(COMReference.Isolated)' == 'true' " /> + <_IsolatedComReference Include="@(COMFileReference)" Condition=" '%(COMFileReference.Isolated)' == 'true' " /> + + + + <_BuiltProjectOutputGroupOutputIntermediate Include="$(OutDir)$(_DeploymentTargetApplicationManifestFileName)" Condition="('@(NativeReference)'!='' or '@(_IsolatedComReference)'!='') And Exists('$(OutDir)$(_DeploymentTargetApplicationManifestFileName)')"> + $(_DeploymentTargetApplicationManifestFileName) + + $(OutDir)$(_DeploymentTargetApplicationManifestFileName) + + + + + + + %(_BuiltProjectOutputGroupOutputIntermediate.FullPath) + + + + + + + + + + @(_DebugSymbolsOutputPath->'%(FullPath)') + @(_DebugSymbolsIntermediatePath->'%(Filename)%(Extension)') + + + + + + + @(WinMDExpFinalOutputPdbItem->'%(FullPath)') + @(WinMDExpOutputPdbItem->'%(Filename)%(Extension)') + + + + + + + + + + @(FinalDocFile->'%(FullPath)') + true + @(DocFileItem->'%(Filename)%(Extension)') + + + + + + + @(WinMDExpFinalOutputDocItem->'%(FullPath)') + @(WinMDOutputDocumentationFileItem->'%(Filename)%(Extension)') + + + + + + $(SatelliteDllsProjectOutputGroupDependsOn);PrepareForBuild;PrepareResourceNames + + + + + %(EmbeddedResource.Culture)\$(TargetName).resources.dll + %(EmbeddedResource.Culture) + + + + + + $(TargetDir)%(SatelliteDllsProjectOutputGroupOutputIntermediate.TargetPath) + + %(SatelliteDllsProjectOutputGroupOutputIntermediate.Identity) + + + + + + PrepareForBuild;AssignTargetPaths + + + + + + + + + + + + $(MSBuildProjectFullPath) + $(ProjectFileName) + + + + + + + + PrepareForBuild;AssignTargetPaths + + + + + + + + + + + + + + @(_OutputPathItem->'%(FullPath)$(_SGenDllName)') + $(_SGenDllName) + + + + + + + + + + + + + + + + + + + ResolveSDKReferences;ExpandSDKReferences + + + + + + + + + + + + + $(CommonOutputGroupsDependsOn); + BuildOnlySettings; + PrepareForBuild; + AssignTargetPaths; + ResolveReferences + + + + + + + + $(BuiltProjectOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + $(DebugSymbolsProjectOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + + $(SatelliteDllsProjectOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + + $(DocumentationProjectOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + + $(SGenFilesOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + + $(ReferenceCopyLocalPathsOutputGroupDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + %(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension) + + + + + + + $(DesignerRuntimeImplementationProjectOutputGroupDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeAnalysis\Microsoft.CodeAnalysis.targets + + + + + + + + + + + + + + + $(VsInstallRoot)\Team Tools\Static Analysis Tools\ + + $(CodeAnalysisRuleSetDirectories);$(CodeAnalysisStaticAnalysisDirectory)\Rule Sets + + Express + + + + true + false + + + true + true + false + $(RunAnalyzers) + $(IsCSharpOrVbProject) + $(RunAnalyzers) + $(IsCSharpOrVbProject) + + + + CODE_ANALYSIS;$(DefineConstants) + CODE_ANALYSIS=-1,$(FinalDefineConstants) + + + + false + true + $(RunCppAnalysis) + false + + + + + + $(FxCopDir) + $(VsInstallRoot)\Team Tools\Static Analysis Tools\FxCop\ + + false + false + true + true + true + true + false + $(OutDir)$(TargetFileName) + $(CodeAnalysisInputAssembly).CodeAnalysisLog.xml + GlobalSuppressions$(DefaultLanguageSourceExtension) + false + false + false + + $(CodeAnalysisRuleDirectories);$(CodeAnalysisPath)\Rules + + Active,Excluded + + Active + true + $(CodeAnalysisInputAssembly).lastcodeanalysissucceeded + false + 120 + + <_CodeAnalysisTreatWarningsAsErrors>$(CodeAnalysisTreatWarningsAsErrors) + <_CodeAnalysisTreatWarningsAsErrors Condition="'$(_CodeAnalysisTreatWarningsAsErrors)'==''">false + false + true + false + + + + + + + + MixedMinimumRules.ruleset + + + + + MixedRecommendedRules.ruleset + + + + + NativeMinimumRules.ruleset + + + + + NativeRecommendedRules.ruleset + + + + + ManagedMinimumRules.ruleset + + + + + + + + + $(PrepareForRunDependsOn);RunCodeAnalysis + $(RunCodeAnalysisDependsOn);Compile + + + + + false + + false + + false + true + + $(CodeAnalysisRuleSet) + $(CodeAnalysisStaticAnalysisDirectory)Rule Sets\$(CodeAnalysisRuleSet) + + + $(VC_ExecutablePath_x86_x86)\localespc.dll + + $(VC_ExecutablePath_x64_x64)\localespc.dll + + $(VC_ExecutablePath_ARM64_ARM64)\localespc.dll + ClCompile + $(RunCodeAnalysisDependsOn);$(RunMergeNativeCodeAnalysisDependsOn) + $(RunCodeAnalysisDependsOn);ClCompile;RunMergeNativeCodeAnalysis + $(ExtensionsToDeleteOnClean);$(CodeAnalysisLogFile);$(CodeAnalysisSucceededFile) + $(IntDir)CodeAnalysis.read.1.tlog + $(IntDir)NativeCodeAnalysis.read.1.tlog + + + + + + PrepareForBuild; + ResolveReferences; + InitializeBuildStatus; + BuildGenerateSources; + BeforeClCompile; + RunNativeCodeAnalysis + + + + + + $(AfterBuildLinkTargets);RunMergeNativeCodeAnalysis;RunNativeCodeAnalysis + $(AfterBuildLinkTargets);RunCodeAnalysis + + + + + $(Console_SdkIncludeRoot);$(CAExcludePath) + $(WindowsSDK_IncludePath);$(CAExcludePath) + $(UniversalCRT_IncludePath);$(CAExcludePath) + $(VCToolsInstallDir)include;$(CAExcludePath) + $(VCToolsInstallDir)atlmfc\include;$(CAExcludePath) + + $(PrepareForBuildDependsOn);SetCABuildNativeEnvironmentVariables + + + + + + + + + + + true + CODE_ANALYSIS;%(PreprocessorDefinitions) + $(IntDir)%(FileName)%(Extension).nativecodeanalysis.xml + %(ObjectFileName)%(FileName).nativecodeanalysis.xml + + $(LocalEspcPath);%(ClCompile.PREfastAdditionalPlugins) + + quiet;%(ClCompile.PREfastAdditionalOptions) + + %(ClCompile.AdditionalOptions) /c + only;%(ClCompile.PREfastAdditionalOptions) + + %(ClCompile.PREfastAdditionalOptions);ruleset$(VCAnalyzeRulesetPath) + + $(VCAnalyzeRulesetPath) + $(MSBuildProjectDirectory) + $(CodeAnalysisRuleSetDirectories);%(ClCompile.PREfastRulesetDirectories) + + + + + + + + + + + $(CodeAnalysisInputAssembly) + $(RunCodeAnalysisInputs);$(CodeAnalysisRuleSet) + $(RunCodeAnalysisInputs);$(ProjectDir)$(CodeAnalysisRuleSet) + + + + + + + + + + + + + + + + @(IntermediateAssembly) + $(IntermediateOutputPath)\TempCA\$(TargetName)$(TargetExt) + + + + + + + + + + + + $(OutputFile) + $(RunNativeCodeAnalysisInputs);$(CodeAnalysisRuleSet) + $(RunNativeCodeAnalysisInputs);$(ProjectDir)$(CodeAnalysisRuleSet) + $(IntDir)vc.nativecodeanalysis.all.xml + + + + + + + @(ClCompile->'%(PREfastLog)') + + + + + @(ClCompile->'%(PREfastLogFile)') + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildToolsPath)\Microsoft.NETFramework.CurrentVersion.targets + + + + + true + true + true + true + + + + + + + <_TargetFramework40DirectoryItem Include="$(MSBuildFrameworkToolsRoot)v4.0.30319" /> + <_TargetFramework35DirectoryItem Include="$(MSBuildFrameworkToolsRoot)v3.5" /> + <_TargetFramework30DirectoryItem Include="$(MSBuildFrameworkToolsRoot)v3.0" /> + <_TargetFramework20DirectoryItem Include="$(MSBuildFrameworkToolsRoot)v2.0.50727" /> + <_TargetedFrameworkDirectoryItem Condition="'$(TargetFrameworkVersion)' == 'v2.0'" Include="@(_TargetFramework20DirectoryItem)" /> + <_TargetedFrameworkDirectoryItem Condition="'$(TargetFrameworkVersion)' == 'v3.0' OR '$(TargetFrameworkVersion)' == 'v3.5'" Include="$(MSBuildFrameworkToolsRoot)\$(TargetFrameworkVersion)" /> + <_TargetedFrameworkDirectoryItem Condition="'@(_TargetedFrameworkDirectoryItem)' == ''" Include="@(_TargetFramework40DirectoryItem)" /> + + + <_CombinedTargetFrameworkDirectoriesItem Condition=" '$(TargetFrameworkVersion)' == 'v4.0' " Include="@(_TargetFramework40DirectoryItem)" /> + <_CombinedTargetFrameworkDirectoriesItem Condition=" '$(TargetFrameworkVersion)' == 'v3.5'" Include="@(_TargetFramework35DirectoryItem)" /> + <_CombinedTargetFrameworkDirectoriesItem Condition=" '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'" Include="@(_TargetFramework30DirectoryItem)" /> + <_CombinedTargetFrameworkDirectoriesItem Condition=" '$(TargetFrameworkVersion)' == 'v2.0' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'" Include="@(_TargetFramework20DirectoryItem)" /> + <_CombinedTargetFrameworkDirectoriesItem Condition=" '@(_CombinedTargetFrameworkDirectoriesItem)' == ''" Include="@(_TargetedFrameworkDirectoryItem)" /> + + + @(_CombinedTargetFrameworkDirectoriesItem) + $(FrameworkSDKRoot) + + + <_TargetFrameworkSDKDirectoryItem Include="$(TargetFrameworkSDKDirectory)" /> + + + + + $(ResolveReferencesDependsOn); + ImplicitlyExpandDesignTimeFacades + + + $(ImplicitlyExpandDesignTimeFacadesDependsOn); + GetReferenceAssemblyPaths + + + + + + + <_HasReferenceToSystemRuntime Condition="'$(DependsOnSystemRuntime)' == 'true'">true + <_HasReferenceToSystemRuntime Condition="'%(_ResolvedProjectReferencePaths.TargetPlatformIdentifier)' == 'Portable'">true + <_HasReferenceToSystemRuntime Condition="'%(_ResolvedProjectReferencePaths.TargetFrameworkIdentifier)' == '.NETStandard' and '%(_ResolvedProjectReferencePaths.TargetFrameworkVersion)' < '2.0'">true + <_HasReferenceToNETStandard Condition="'$(_DependsOnNETStandard)' == 'true'">true + <_HasReferenceToNETStandard Condition="'%(_ResolvedProjectReferencePaths.TargetFrameworkIdentifier)' == '.NETStandard' and '%(_ResolvedProjectReferencePaths.TargetFrameworkVersion)' >= '2.0'">true + + + <_DesignTimeFacadeAssemblies Include="%(DesignTimeFacadeDirectories.Identity)*.dll" /> + + + <_DesignTimeFacadeAssemblies Include="%(DesignTimeFacadeDirectories.Identity)netstandard.dll" Condition="Exists('%(DesignTimeFacadeDirectories.Identity)netstandard.dll')" /> + + + <_DesignTimeFacadeAssemblies_Names Include="@(_DesignTimeFacadeAssemblies->'%(FileName)')"> + %(_DesignTimeFacadeAssemblies.Identity) + + <_ReferencePath_Names Include="@(ReferencePath->'%(FileName)')"> + %(ReferencePath.Identity) + + <_DesignTimeFacadeAssemblies_Names Remove="@(_ReferencePath_Names)" /> + + false + false + ImplicitlyExpandDesignTimeFacades + + <_ResolveAssemblyReferenceResolvedFiles Include="@(ReferencePath)" Condition="'%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandDesignTimeFacades'" /> + + + + + + + + + + + + + + + + + $(IntermediateOutputPath)edmxResourcesToEmbed\ + + + + + + + + + + EntityDeploy; + $(BuildDependsOn) + + + + + $(CleanDependsOn); + EntityClean; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + $(MSBuildToolsPath64) + + + + + + $(LoadTimeSensitiveTargets); + XamlMarkupCompilePass1; + + + $(LoadTimeSensitiveProperties); + + 4.0.0.0 + 31bf3856ad364e35 + XamlBuildTask, Version=$(TaskVersion), Culture=neutral, PublicKeyToken=$(TaskKeyToken) + false + $(AssemblyName) + CompileTemporaryAssembly + + + XamlMarkupCompilePass1; + XamlMarkupCompilePass2; + $(PrepareResourcesDependsOn) + + + + $(MSBuildBinPath) + $(XamlBuildTaskPath) + + + $(MSBuildAllProjects);$(MSBuildToolsPath)\Microsoft.Xaml.targets + + + $(MSBuildProjectFile).XamlGeneratedCodeFileListAbsolute.txt + $(MSBuildProjectFile).XamlGeneratedXamlFileListAbsolute.txt + $(MSBuildProjectFile).XamlPass2Flag.txt + + + + + + + + + + + + + + DesignTimeXamlMarkupCompilation; + $(CoreCompileDependsOn) + + + + $(IntermediateOutputPath)InProcessTempFiles\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + Non-Resx + false + + + + + + + + + + + + + + + + + <_XamlTemporaryAssemblyPath_>$(IntermediateOutputPath)$(XamlTemporaryAssemblyName).dll + __NonExistentSubDir__\__NonExistentFile__ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_XamlAppDefItemsToCopy Include="@(XamlAppDef->'%(FullPath)')" Condition="'%(XamlAppDef.CopyToOutputDirectory)'=='Always' or '%(XamlAppDef.CopyToOutputDirectory)'=='PreserveNewest'" /> + + + + + + + + <_SourceItemsToCopyToOutputDirectoryAlways Include="@(_XamlAppDefItemsToCopyWithTargetPath)" Condition="'%(_XamlAppDefItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='Always'" /> + <_SourceItemsToCopyToOutputDirectory Include="@(_XamlAppDefItemsToCopyWithTargetPath)" Condition="'%(_XamlAppDefItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" /> + + + + + + + + + + + + + + ValidationExtension; + ExpressionBuildExtension; + $(PrepareResourcesDependsOn) + + + + + GenerateCompiledExpressionsTempFile; + $(CoreCompileDependsOn) + + + + 4.0.0.0 + 31bf3856ad364e35 + Microsoft.Activities.Build, Version=$(WorkflowBuildExtensionVersion), Culture=neutral, PublicKeyToken=$(WorkflowBuildExtensionKeyToken) + $(IntermediateOutputPath)\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs + $(IntermediateOutputPath)\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs + $(IntermediateOutputPath)\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs + $(IntermediateOutputPath)\AC2C1ABA-CCF6-44D4-8127-588FD4D0A860-DeferredValidationErrors.xml + + + + + + + $(WorkflowBuildExtensionAssemblyName) + false + + + $(WorkflowBuildExtensionAssemblyName) + false + + + + + + + $(WorkflowBuildExtensionAssemblyName) + false + + + + + + + + + $(WorkflowBuildExtensionAssemblyName) + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TeamTest\Microsoft.TeamTest.targets + + + + + + $(ResolveReferencesDependsOn); + ResolveTestReferences + + + + + + + + + + + + false + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\AppxPackage\Microsoft.AppXPackage.Targets + + true + + + + + + + + $([MSBuild]::IsRunningFromVisualStudio()) + $([MSBuild]::GetToolsDirectory32())\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets + $(MSBuildToolsPath)\NuGet.targets + + + + + + true + + NuGet.Build.Tasks.dll + + false + + true + true + + false + + WarnAndContinue + + $(BuildInParallel) + true + + <_RestoreSolutionFileUsed Condition=" '$(_RestoreSolutionFileUsed)' == '' AND '$(SolutionDir)' != '' AND $(MSBuildProjectFullPath.EndsWith('.metaproj')) == 'true' ">true + + $(MSBuildInteractive) + + true + + true + + <_CentralPackageVersionsEnabled Condition="'$(ManagePackageVersionsCentrally)' == 'true' AND '$(CentralPackageVersionsFileImported)' == 'true'">true + + + + + true + + low + + all + direct + + + + + true + false + true + false + + + + <_GenerateRestoreGraphProjectEntryInputProperties>ExcludeRestorePackageImports=true + + <_GenerateRestoreGraphProjectEntryInputProperties Condition=" '$(RestoreUseCustomAfterTargets)' == 'true' "> + $(_GenerateRestoreGraphProjectEntryInputProperties); + NuGetRestoreTargets=$(MSBuildThisFileFullPath); + RestoreUseCustomAfterTargets=$(RestoreUseCustomAfterTargets); + CustomAfterMicrosoftCommonCrossTargetingTargets=$(MSBuildThisFileFullPath); + CustomAfterMicrosoftCommonTargets=$(MSBuildThisFileFullPath); + + + <_GenerateRestoreGraphProjectEntryInputProperties Condition=" '$(_RestoreSolutionFileUsed)' == 'true' "> + $(_GenerateRestoreGraphProjectEntryInputProperties); + _RestoreSolutionFileUsed=true; + SolutionDir=$(SolutionDir); + SolutionName=$(SolutionName); + SolutionFileName=$(SolutionFileName); + SolutionPath=$(SolutionPath); + SolutionExt=$(SolutionExt); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + <_FrameworkReferenceForRestore Include="@(FrameworkReference)" Condition="'%(FrameworkReference.IsTransitiveFrameworkReference)' != 'true'" /> + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + exclusionlist + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" Condition=" '%(RestoreGraphProjectInputItems.Extension)' == '.csproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.vbproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.fsproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.nuproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.proj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.msbuildproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.vcxproj' " /> + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" Condition=" '%(RestoreGraphProjectInputItems.Extension)' != '.metaproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '.shproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '.vcxitems' AND '%(RestoreGraphProjectInputItems.Extension)' != '.vdproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '' " /> + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" /> + + + + + + + + + + + + + + + + + + + + + + + + <_GenerateRestoreGraphProjectEntryInput Include="@(FilteredRestoreGraphProjectInputItems)" Condition=" '$(RestoreRecursive)' != 'true' " /> + <_GenerateRestoreGraphProjectEntryInput Include="@(_RestoreProjectPathItems)" Condition=" '$(RestoreRecursive)' == 'true' " /> + + + + + + + + + + + + + + + + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())" Condition=" '$(RestoreProjectStyle)' != 'Unknown' "> + RestoreSpec + $(MSBuildProjectFullPath) + + + + + + + netcoreapp1.0 + + + + + + + + + + + <_HasPackageReferenceItems Condition="'@(PackageReference)' != ''">true + + + <_HasPackageReferenceItems Condition="@(PackageReference->Count()) > 0">true + + + + + + + <_HasPackageReferenceItems /> + + + + + + true + + + + + + <_RestoreProjectFramework /> + <_TargetFrameworkToBeUsed Condition=" '$(_TargetFrameworkOverride)' == '' ">$(TargetFrameworks) + + + + + + <_RestoreTargetFrameworksOutputFiltered Include="$(_RestoreProjectFramework.Split(';'))" /> + + + + + + <_RestoreTargetFrameworkItems Include="$(TargetFrameworks.Split(';'))" /> + + + <_RestoreTargetFrameworkItems Include="$(_TargetFrameworkOverride)" /> + + + + + + $(SolutionDir) + + + + + + + + + + + + + + + + + + + + + + + <_RestoreSettingsPerFramework Include="$([System.Guid]::NewGuid())"> + $(RestoreAdditionalProjectSources) + $(RestoreAdditionalProjectFallbackFolders) + $(RestoreAdditionalProjectFallbackFoldersExcludes) + + + + + + + + $(MSBuildProjectExtensionsPath) + + + + + + + <_RestoreProjectName>$(MSBuildProjectName) + <_RestoreProjectName Condition=" '$(PackageReferenceCompatibleProjectStyle)' == 'true' AND '$(AssemblyName)' != '' ">$(AssemblyName) + <_RestoreProjectName Condition=" '$(PackageReferenceCompatibleProjectStyle)' == 'true' AND '$(PackageId)' != '' ">$(PackageId) + + + + <_RestoreProjectVersion>1.0.0 + <_RestoreProjectVersion Condition=" '$(Version)' != '' ">$(Version) + <_RestoreProjectVersion Condition=" '$(PackageVersion)' != '' ">$(PackageVersion) + + + + <_RestoreCrossTargeting>true + + + + <_RestoreSkipContentFileWrite Condition=" '$(TargetFrameworks)' == '' AND '$(TargetFramework)' == '' ">true + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(_RestoreProjectVersion) + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(_OutputSources) + $(_OutputFallbackFolders) + $(_OutputPackagesPath) + $(RestoreProjectStyle) + $(RestoreOutputAbsolutePath) + $(RuntimeIdentifiers);$(RuntimeIdentifier) + $(RuntimeSupports) + $(_RestoreCrossTargeting) + $(RestoreLegacyPackagesDirectory) + $(ValidateRuntimeIdentifierCompatibility) + $(_RestoreSkipContentFileWrite) + $(_OutputConfigFilePaths) + $(TreatWarningsAsErrors) + $(WarningsAsErrors) + $(WarningsNotAsErrors) + $(NoWarn) + $(RestorePackagesWithLockFile) + $(NuGetLockFilePath) + $(RestoreLockedMode) + <_CentralPackageVersionsEnabled>$(_CentralPackageVersionsEnabled) + $(CentralPackageFloatingVersionsEnabled) + $(CentralPackageVersionOverrideEnabled) + $(CentralPackageTransitivePinningEnabled) + $(NuGetAudit) + $(NuGetAuditLevel) + $(NuGetAuditMode) + $(SdkAnalysisLevel) + $(UsingMicrosoftNETSdk) + $(RestoreUseLegacyDependencyResolver) + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(RestoreProjectStyle) + $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config + $(MSBuildProjectDirectory)\packages.config + $(RestorePackagesWithLockFile) + $(NuGetLockFilePath) + $(RestoreLockedMode) + $(_OutputSources) + $(SolutionDir) + $(_OutputRepositoryPath) + $(_OutputConfigFilePaths) + $(_OutputPackagesPath) + @(_RestoreTargetFrameworksOutputFiltered) + $(NuGetAudit) + $(NuGetAuditLevel) + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(RestoreProjectStyle) + @(_RestoreTargetFrameworksOutputFiltered) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + TargetFrameworkInformation + $(MSBuildProjectFullPath) + $(PackageTargetFallback) + $(AssetTargetFallback) + $(TargetFramework) + $(TargetFrameworkIdentifier) + $(TargetFrameworkVersion) + $(TargetFrameworkMoniker) + $(TargetFrameworkProfile) + $(TargetPlatformMoniker) + $(TargetPlatformIdentifier) + $(TargetPlatformVersion) + $(TargetPlatformMinVersion) + $(CLRSupport) + $(RuntimeIdentifierGraphPath) + $(WindowsTargetPlatformMinVersion) + $(RestoreEnablePackagePruning) + $(RestorePackagePruningDefault) + $(NuGetAuditMode) + + + + + + + + + + + + + <_RestoreProjectPathItems Include="$(_RestoreGraphAbsoluteProjectPaths)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_GenerateRestoreProjectPathWalkOutputs Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RestorePackagesPathOverride>$(RestorePackagesPath) + + + + + + <_RestorePackagesPathOverride>$(RestoreRepositoryPath) + + + + + + <_RestoreSourcesOverride>$(RestoreSources) + + + + + + <_RestoreFallbackFoldersOverride>$(RestoreFallbackFolders) + + + + + + + + + + + + + <_TargetFrameworkOverride Condition=" '$(TargetFrameworks)' == '' ">$(TargetFramework) + + + + + + <_ValidProjectsForRestore Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + + + + + + + + + + + <_EnableXamlUpgradeAnalyzerInVs Condition="'$(UseMaui)' == 'true' and '$(DesignTimeBuild)' == 'true' and '$(BuildingInsideVisualStudio)' == 'true'">true + + + <_VSPrivateAssemblies>$(MSBuildThisFileDirectory)..\..\..\..\Common7\IDE\PrivateAssemblies + <_VSXlsPackageRoot>$(MSBuildThisFileDirectory)..\..\..\..\Common7\IDE\CommonExtensions\Microsoft\XamlLanguageService + + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\tools\Microsoft.Docker.BuildTasks.dll + obj\Docker + $(DockerIntermediateOutputPath)\publish + + + + + + + + + + + + + + + + + <_ContainerStaticWebAssetsManifestPath>$(_GeneratedStaticWebAssetsDevelopmentManifest) + <_ContainerStaticWebAssetsManifestPath Condition=" '$(_ContainerStaticWebAssetsManifestPath)' == '' ">$(IntermediateOutputPath)$(TargetName).StaticWebAssets.xml + + + + + + + + + + + + + + + + + + <_DockerDevelopmentMode Condition=" '$(DockerDevelopmentMode)' != '' ">$(DockerDevelopmentMode) + <_DockerDevelopmentMode Condition=" '$(_DockerDevelopmentMode)' == '' ">Regular + <_DockerBuildingForLaunch Condition=" Exists('$(DockerIntermediateOutputPath)\launch.sem')">True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TestCoverage + + + $(LiveUnitTestingPortableRuntimePath) + $(LiveUnitTestingRuntimePath) + + + + + + true + + + + + + + + + + + + + $(MSBuildExtensionsPath)\Microsoft\Microsoft.NET.Build.Extensions\Microsoft.NET.Build.Extensions.targets + + + + + <_TargetFrameworkVersionWithoutV>$(TargetFrameworkVersion.TrimStart('vV')) + $(MSBuildThisFileDirectory)\tools\net10.0\Microsoft.NET.Build.Extensions.Tasks.dll + $(MSBuildThisFileDirectory)\tools\net472\Microsoft.NET.Build.Extensions.Tasks.dll + + true + + + + + + true + + + + + + + + <_CandidateNETStandardReferences Include="@(Reference);@(_ResolvedProjectReferencePaths)" /> + <_InboxNETStandardFolders Include="$(TargetFrameworkDirectory)" /> + + + + true + + + + + true + + + + + <_RunGetDependsOnNETStandard Condition="'$(DependsOnNETStandard)' == '' AND '$(NETStandardInbox)' != 'true'">true + + <_RunGetDependsOnNETStandard Condition="'$(DependsOnNETStandard)' == '' AND '$(_TargetFrameworkVersionWithoutV)' == '4.7.1'">true + + + + + + + <_UsingOldSDK Condition="'$(UsingMicrosoftNETSdk)' != 'true' AND ('$(TargetFramework)' != '' OR '$(TargetFrameworks)' != '')">true + + + + + <_NETStandardLibraryNETFrameworkLib Include="$(MSBuildThisFileDirectory)\net471\lib\*.dll" Condition="'$(DependsOnNETStandard)' == 'true'" /> + + + + <_NETStandardLibraryNETFrameworkLib Condition="'$(_TargetFrameworkVersionWithoutV)' >= '4.7'" Include="$(MSBuildThisFileDirectory)net47\lib\*.dll" /> + <_NETStandardLibraryNETFrameworkLib Condition="'$(_TargetFrameworkVersionWithoutV)' >= '4.6.2'" Include="$(MSBuildThisFileDirectory)net462\lib\*.dll" Exclude="@(_NETStandardLibraryNETFrameworkLib->'$(MSBuildThisFileDirectory)net462\lib\%(FileName).dll')" /> + <_NETStandardLibraryNETFrameworkLib Condition="'$(_TargetFrameworkVersionWithoutV)' >= '4.6.1'" Include="$(MSBuildThisFileDirectory)net461\lib\*.dll" Exclude="@(_NETStandardLibraryNETFrameworkLib->'$(MSBuildThisFileDirectory)net461\lib\%(FileName).dll')" /> + + + + + <_UpdatedReference Remove="@(_UpdatedReference)" /> + + + + + + + + + <_UpdatedReference Remove="@(_UpdatedReference)" /> + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath)\Microsoft\NuGet\$(VisualStudioVersion)\Microsoft.NuGet.targets + + + + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Fakes + $(FakesBinPath)\Microsoft.QualityTools.Testing.Fakes.targets + + + + + true + + + + $(MSBuildProjectDirectory) + $([System.IO.Path]::Combine('$(ProjectDir)','$(IntermediateOutputPath)Fakes')) + false + $(FakesBinPath) + $(MSBuildToolsPath)\msbuild.exe + + Critical + $(FakesBinPath)\Microsoft.QualityTools.Testing.Fakes.Tasks.dll + + $(ProjectDir)Fakes + + $([MSBuild]::MakeRelative('$(ProjectDir)', '$(IntermediateOutputPath)')) + $(FakesRelativeOutputDir)FakesAssemblies + + true + + $(ProjectDir)$(FakesRelativeOutputDir) + + + + + + + + + + + + + + + + + $(GenerateFakesDependsOn); + BeforeGenerateFakesAssemblies; + GenerateFakesAssemblies; + CopyFakesAssembliesToOutputDir; + + + + + + + + + + + + $([System.IO.Path]::GetFullPath('$(FakesOutputPath)')) + + + + + + + + + + + + + + $(FakesCompilationProperties);PlatformTarget=$(PlatformTarget) + $(FakesCommandLineArguments) /Properties:"$(FakesCompilationProperties)" + $(FakesCommandLineArguments) /msbuildpath:"$(FakesMSBuildPath)" + + + + + + + + + + + + + + + + + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectFile)FakesResolveAssemblyReference.cache + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(IntermediateOutputPath)\CombinedComponentSchema.json + $([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(JsonSchemaCombinedFilePath))) + $(IntermediateOutputPath)\AppSettingsSchema.json + $([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(AppSettingsJsonSchemaCombinedFilePath))) + @(JsonSchemaSegment);$(ProjectAssetsFile) + + + + + + + + + + + + + + + + + + + + false + true + + + + + + + <_System_Text_JsonAnalyzer Include="@(Analyzer)" Condition="'%(Analyzer.NuGetPackageId)' == 'System.Text.Json'" /> + + + + + + + + + + + + + + + + + + + false + + + + + + + managed + + + + $(MSBuildThisFileDirectory)..\ + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + true + true + + + + Project + + + + + $(Platform) + x86 + x86 + x86 + x86 + x64 + x64 + x86 + anycpu + anycpu + + anycpu + + + + + true + + None + Dynamic + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + $(IntDir)Generated Files\ + normal + $(MSBuildThisFileDirectory)..\tools\wv2winrt\ + $(WV2WinRTPath)wv2winrt.exe + $(IntDir)wv2winrt_inputs.rsp + $(IntDir)wv2winrt_params.rsp + false + false + false + + WinRTAdapter + + $(RootNamespace) + $(GeneratedFilesDir) + true + true + match + + + $(BeforeMidlCompileTargets);WV2WinRTAddDispatchAdapterIdl; + + + $(BeforeClCompileTargets);WV2WinRTAddGeneratedFiles; + + + + + <_WV2WinRTPlatformWinMDReferences Remove="@(_WV2WinRTPlatformWinMDReferences)" /> + + <_WV2WinRTPlatformWinMDReferences Include="@(ReferencePath)" Condition="('$(WV2WinRTPlatformReferencesLevel)' == 'explicit' or '$(WV2WinRTPlatformReferencesLevel)' == 'foundation') and '%(ReferencePath.IsSystemReference)' == 'true' and '%(ReferencePath.WinMDFile)' == 'true' and '%(ReferencePath.ReferenceSourceTarget)' == 'ResolveAssemblyReference'" /> + + <_WV2WinRTPlatformWinMDReferences Include="$(WindowsSDK_MetadataPathVersioned)\**\Windows.Foundation.FoundationContract.winmd" Condition="'$(WV2WinRTPlatformReferencesLevel)' == 'foundation'" /> + <_WV2WinRTPlatformWinMDReferences Include="$(WindowsSDK_MetadataPathVersioned)\**\Windows.Foundation.UniversalApiContract.winmd" Condition="'$(WV2WinRTPlatformReferencesLevel)' == 'foundation'" /> + <_WV2WinRTPlatformWinMDReferences Include="$(WindowsSDK_MetadataPathVersioned)\**\Windows.Networking.Connectivity.WwanContract.winmd" Condition="'$(WV2WinRTPlatformReferencesLevel)' == 'foundation'" /> + + <_WV2WinRTPlatformWinMDReferences Include="@(CppWinRTPlatformWinMDReferences)" Condition="'$(WV2WinRTPlatformReferencesLevel)' == 'match'" /> + + + + + + + + <_WV2WinRTDirectWinMDReferences Remove="@(_WV2WinRTDirectWinMDReferences)" /> + <_WV2WinRTDirectWinMDReferences Include="@(CppWinRTDirectWinMDReferences)" Condition="'%(Filename)' != 'Microsoft.Web.WebView2.Core'" /> + <_WV2WinRTDirectWinMDReferences Include="@(CppWinRTDirectWinMDReferences)" Condition="'%(Filename)' == 'Microsoft.Web.WebView2.Core' And '$(WV2WinRTWrapWebViewTypes)' == 'true'" /> + + + + + + + + <_WV2WinRTStaticProjectWinMDReferences Remove="@(_WV2WinRTStaticProjectWinMDReferences)" /> + <_WV2WinRTStaticProjectWinMDReferences Include="@(CppWinRTStaticProjectWinMDReferences)" /> + + + + + <_WV2WinRTDynamicProjectWinMDReferences Remove="@(_WV2WinRTDynamicProjectWinMDReferences)" /> + <_WV2WinRTDynamicProjectWinMDReferences Include="@(CppWinRTDynamicProjectWinMDReferences)" /> + + + + + + + + + + + + + + + + + + <_WV2WinRTAdditionalWinMDReferences Remove="@(_WV2WinRTAdditionalWinMDReferences)" /> + <_WV2WinRTAdditionalWinMDReferences Include="@(WebView2WinRTAdditionalWinMDReferences)" /> + + + + + + + + <_WV2WinRTInputs Remove="@(_WV2WinRTInputs)" /> + <_WV2WinRTInputs Include="@(WV2WinRTDirectWinMDReferences)" /> + <_WV2WinRTInputs Include="@(WV2WinRTPlatformWinMDReferences)" Condition="'$(WebView2WinRTWrapSystemTypes)' == 'true'" /> + <_WV2WinRTInputs Include="@(WV2WinRTProjectWinMDReferences)" /> + <_WV2WinRTInputs Include="@(WV2WinRTAdditionalWinMDReferences)" /> + <_WV2WinRTInputs Include="@(_CppwinrtCompInputs)" /> + + + %(FullPath) + + + + + + + + + + --idl + $(WV2WinRTIdlParameters) --output-path "$(WebView2DispatchAdapterOutputDir.TrimEnd('\'))" + $(WV2WinRTIdlParameters) --output-namespace $(WebView2DispatchAdapterNamespace) + + + + + $(WV2WinRTCommandPrefix) + $(WV2WinRTIdlCommand)"$(WV2WinRTExe)" $(WV2WinRTIdlParameters) + + + + + + + + + + + + + + + + + + + + <_PCH Include="@(ClCompile->Metadata('PrecompiledHeaderFile')->Distinct())" /> + + + + <_PCH>@(_PCH->Distinct()) + + + --output-path "$(WebView2DispatchAdapterOutputDir.TrimEnd('\'))" + $(WV2WinRTParameters) --output-namespace $(WebView2DispatchAdapterNamespace) + $(WV2WinRTParameters) --use-full-namespace + $(WV2WinRTParameters) --use-javascript-case + $(WV2WinRTParameters) --explicit-includes-only + $(WV2WinRTParameters) --require-allow-for-web-attribute + $(WV2WinRTParameters) --ignore-web-host-hidden-attribute + $(WV2WinRTParameters) --include @(WV2WinRTIncludeFilters, ' ') + $(WV2WinRTParameters) --exclude @(WV2WinRTExcludeFilters, ' ') + $(WV2WinRTParameters) --winmd-paths @(WV2WinRTInputs->'"%(WinMDPath)"', ' ') + $(WV2WinRTParameters) --verbose + $(WV2WinRTParameters) --pch "$(_PCH)" + $(WV2WinRTParameters) $(WV2WinRTAdditionalParameters) + + + + + + + $(WV2WinRTCommandPrefix) + $(WV2WinRTCommand)"$(WV2WinRTExe)" $(WV2WinRTParameters) + + + + + + + + + <_WV2WinRTFilesToBuild Remove="@(_WV2WinRTFilesToBuild)" /> + <_WV2WinRTFilesToBuild Include="$(WebView2DispatchAdapterOutputDir)wv2winrt\*.cpp" /> + <_WV2WinRTFilesToClean Include="$(WebView2DispatchAdapterOutputDir)wv2winrt\*.*" /> + + + + $(IntDir)wv2winrt\ + + + + + + + + %(AdditionalIncludeDirectories);$(WebView2DispatchAdapterOutputDir) + + + + + + + + $(MSBuildThisFileDirectory)native\include\;%(AdditionalIncludeDirectories) + + + + + + WebView2LoaderStatic.lib;version.lib + %(WebView2LoaderLib);WebView2Loader.dll.lib;%(AdditionalDependencies) + $(MSBuildThisFileDirectory)native\$(EffectivePlatform);%(AdditionalLibraryDirectories) + + + + + + %(Filename)%(Extension) + Included + False + Always + false + + + + + + runtimes\win-x86\native\WebView2Loader.dll + Included + False + PreserveNewest + true + false + + + runtimes\win-x64\native\WebView2Loader.dll + Included + False + PreserveNewest + true + false + + + runtimes\win-arm64\native\WebView2Loader.dll + Included + False + PreserveNewest + true + false + + + + + + + $(MSBuildThisFileDirectory)native\include-winrt\;%(AdditionalIncludeDirectories) + + + + + + + + Microsoft.Web.WebView2.Core.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + * + $(MSBuildThisFileDirectory)..\tools\ + net6.0 + net472 + $(VsSDKCompatibilityAnalyzerBuildTasksDirectoryRoot)$(VsSDKCompatibilityAnalyzerBuildTasksTFM)\ + $(VsSDKCompatibilityAnalyzerBuildTasksDirectory)Microsoft.VisualStudio.Sdk.CompatibilityAnalyzerTasks.dll + + + + + + + + + + + + + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisBannedApiAnalyzers>$(AnalysisMode) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisBannedApiAnalyzers Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisBannedApiAnalyzers)' == ''">Default + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisBannedApiAnalyzers Condition="'$(MicrosoftCodeAnalysisBannedApiAnalyzersRulesVersion)' != ''">AnalysisLevel_$(MicrosoftCodeAnalysisBannedApiAnalyzersRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisBannedApiAnalyzers).editorconfig + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisBannedApiAnalyzers Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisBannedApiAnalyzers)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisBannedApiAnalyzers Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisBannedApiAnalyzers)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisBannedApiAnalyzers)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisBannedApiAnalyzers) + + + + + + + + + + + + + + + + + <_SupportedPlatformList>@(SupportedPlatform, ',') + + + + + + + + + $(WarningsNotAsErrors);$(CodeAnalysisRuleIds) + + + + + + + false + + + + + + + + + + + System.Environment.SetEnvironmentVariable("VsSDKToolsPath", System.IO.Path.GetFullPath(ProjectDirectory + @"\..\tools\VSSDK\bin"),EnvironmentVariableTarget.Process); + System.Environment.SetEnvironmentVariable("VsSDKSchemaDir", System.IO.Path.GetFullPath(ProjectDirectory + @"\..\tools\VSSDK\schemas"),EnvironmentVariableTarget.Process); + System.Environment.SetEnvironmentVariable("VsSDKX86ToolsPath", System.IO.Path.GetFullPath(ProjectDirectory + @"\..\tools\VSSDK\bin\x86"),EnvironmentVariableTarget.Process); + System.Environment.SetEnvironmentVariable("VsSDKARM64ToolsPath", System.IO.Path.GetFullPath(ProjectDirectory + @"\..\tools\VSSDK\bin\arm64"),EnvironmentVariableTarget.Process); + + + + + + + + + + + + true + false + + + + + + + + true + + + + <_DirectoryBuildTargetsFile Condition="'$(_DirectoryBuildTargetsFile)' == ''">Directory.Build.targets + <_DirectoryBuildTargetsBasePath Condition="'$(_DirectoryBuildTargetsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildTargetsFile)')) + $([System.IO.Path]::Combine('$(_DirectoryBuildTargetsBasePath)', '$(_DirectoryBuildTargetsFile)')) + + + + + + + + + + + + + + + + + False + True + + + + + + + + + + XmlSerializer + True + All + *, $(RootNamespace).ContractTypes + *, ContractTypes + System.Array;System.Collections.Generic.Dictionary`2 + True + True + False + False + False + + False + False + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// <autogenerated /> +using System%3b +using System.Reflection%3b +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute("$(TargetFrameworkMoniker)", FrameworkDisplayName = "$(TargetFrameworkMonikerDisplayName)")] + + + + + true + + true + true + + $([System.Globalization.CultureInfo]::CurrentUICulture.Name) + + + + + <_ExplicitReference Include="$(FrameworkPathOverride)\mscorlib.dll" /> + + + + + + <_CollectedCopyToOutputDirectoryItem Include="@(_ThisProjectItemsToCopyToOutputDirectory)"> + false + + + <_CollectedCopyToOutputDirectoryItem Include="$(TargetPath)"> + PreserveNewest + $([System.IO.Path]::GetFileName('$(TargetPath)')) + true + + + <_CollectedCopyToOutputDirectoryItem Include="@(_DebugSymbolsOutputPath->'%(FullPath)')" Condition="'$(_DebugSymbolsProduced)' == 'true' and '$(SkipCopyingSymbolsToOutputDirectory)' != 'true' and '$(CopyOutputSymbolsToOutputDirectory)' != 'false'"> + PreserveNewest + $([System.IO.Path]::GetFileName('%(Identity)')) + true + + + <_CollectedCopyToOutputDirectoryItem Include="@(ReferenceCopyLocalPaths->'%(Identity)')" Condition="'%(ReferenceCopyLocalPaths.ReferenceSourceTarget)' != 'ProjectReference' AND '%(ReferenceCopyLocalPaths.DestinationSubPath)' != ''"> + PreserveNewest + %(ReferenceCopyLocalPaths.DestinationSubPath) + true + + <_CollectedCopyToOutputDirectoryItem Include="@(ReferenceCopyLocalPaths->'%(Identity)')" Condition="'%(ReferenceCopyLocalPaths.ReferenceSourceTarget)' != 'ProjectReference' AND '%(ReferenceCopyLocalPaths.DestinationSubPath)' == ''"> + PreserveNewest + $([System.IO.Path]::GetFileName('%(Identity)')) + true + + + <_CollectedCopyToOutputDirectoryItem Include="@(FinalDocFile->'%(FullPath)')" Condition="'$(_DocumentationFileProduced)' == 'true'"> + PreserveNewest + $([System.IO.Path]::GetFileName('%(Identity)')) + true + + + <_CollectedCopyToOutputDirectoryItem Include="@(IntermediateSatelliteAssembliesWithTargetPath->'$(TargetDir)%(Culture)\$(TargetName).resources.dll')" Condition="'@(IntermediateSatelliteAssembliesWithTargetPath)' != ''"> + PreserveNewest + %(IntermediateSatelliteAssembliesWithTargetPath.Culture)\$(TargetName).resources.dll + true + + + + + + + <_CompilerCommandLineArgs Include="@(CscCommandLineArgs)" /> + + + + + + + + + + + + + + + + TargetFramework + TargetFrameworks + + + true + + + + + + + + + <_MainReferenceTargetForBuild Condition="'$(BuildProjectReferences)' == '' or '$(BuildProjectReferences)' == 'true'">.projectReferenceTargetsOrDefaultTargets + <_MainReferenceTargetForBuild Condition="'$(_MainReferenceTargetForBuild)' == ''">GetTargetPath + $(_MainReferenceTargetForBuild);GetNativeManifest;$(_RecursiveTargetForContentCopying);$(ProjectReferenceTargetsForBuild) + + <_MainReferenceTargetForPublish Condition="'$(NoBuild)' == 'true'">GetTargetPath + <_MainReferenceTargetForPublish Condition="'$(NoBuild)' != 'true'">$(_MainReferenceTargetForBuild) + GetTargetFrameworks;$(_MainReferenceTargetForPublish);GetNativeManifest;GetCopyToPublishDirectoryItems;$(ProjectReferenceTargetsForPublish) + + $(ProjectReferenceTargetsForBuild);$(ProjectReferenceTargetsForPublish) + $(ProjectReferenceTargetsForRebuild);$(ProjectReferenceTargetsForPublish) + GetCopyToPublishDirectoryItems;$(ProjectReferenceTargetsForGetCopyToPublishDirectoryItems) + + + .default;$(ProjectReferenceTargetsForBuild) + + + Clean;$(ProjectReferenceTargetsForClean) + $(ProjectReferenceTargetsForClean);$(ProjectReferenceTargetsForBuild);$(ProjectReferenceTargetsForRebuild) + + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\tools\ + net10.0 + net472 + $(MicrosoftNETBuildTasksDirectoryRoot)$(MicrosoftNETBuildTasksTFM)\ + $(MicrosoftNETBuildTasksDirectory)Microsoft.NET.Build.Tasks.dll + + Microsoft.NETCore.App;NETStandard.Library + + + + <_IsExecutable Condition="'$(OutputType)' == 'Exe' or '$(OutputType)'=='WinExe'">true + $(_IsExecutable) + + + + netcoreapp2.2 + + + Preview + + + + + + + $(NuGetPackageRoot)\microsoft.net.sdk.compilers.toolset\$(NETCoreSdkVersion) + $(RoslynTargetsPath)\Microsoft.Build.Tasks.CodeAnalysis.dll + <_NeedToDownloadMicrosoftNetSdkCompilersToolsetPackage>true + <_MicrosoftNetSdkCompilersToolsetPackageRootEmpty Condition="'$(NuGetPackageRoot)' == ''">true + + + + true + + + + + + + + $(MSBuildProjectExtensionsPath)/project.assets.json + $([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(ProjectAssetsFile))) + + $(IntermediateOutputPath)$(MSBuildProjectName).assets.cache + $([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(ProjectAssetsCacheFile))) + + false + + false + + true + $(IntermediateOutputPath)NuGet\ + true + $(TargetPlatformIdentifier),Version=v$([System.Version]::Parse('$(TargetPlatformMinVersion)').ToString(3)) + $(TargetFrameworkMoniker) + true + + false + + true + + + + <_NugetTargetMonikerAndRID Condition="'$(RuntimeIdentifier)' == ''">$(NuGetTargetMoniker) + <_NugetTargetMonikerAndRID Condition="'$(RuntimeIdentifier)' != ''">$(NuGetTargetMoniker)/$(RuntimeIdentifier) + + + + + + + + + $(ResolveAssemblyReferencesDependsOn); + ResolvePackageDependenciesForBuild; + _HandlePackageFileConflicts; + + + ResolvePackageDependenciesForBuild; + _HandlePackageFileConflicts; + $(PrepareResourcesDependsOn) + + + + + + $(RootNamespace) + + + $(AssemblyName) + + + $(MSBuildProjectDirectory) + + + $(TargetFileName) + + + $(MSBuildProjectFile) + + + + + + true + + + + + + ResolveLockFileReferences; + ResolveLockFileAnalyzers; + ResolveLockFileCopyLocalFiles; + ResolveRuntimePackAssets; + RunProduceContentAssets; + IncludeTransitiveProjectReferences + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RoslynApiVersion>$([System.Version]::Parse(%(_CodeAnalysisIdentity.Version)).Major).$([System.Version]::Parse(%(_CodeAnalysisIdentity.Version)).Minor) + roslyn$(_RoslynApiVersion) + + + + + + false + + + true + + + true + + + + true + + + <_PackAsToolShimRuntimeIdentifiers Condition="@(_PackAsToolShimRuntimeIdentifiers) ==''" Include="$(PackAsToolShimRuntimeIdentifiers)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_NativeRestoredAppHostNETCore Include="@(NativeCopyLocalItems)" Condition="'%(NativeCopyLocalItems.FileName)%(NativeCopyLocalItems.Extension)' == '$(_DotNetAppHostExecutableName)'" /> + + + <_ApphostsForShimRuntimeIdentifiers Include="@(_ApphostsForShimRuntimeIdentifiersResolvePackageAssets)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ResolvedCopyLocalBuildAssets Include="@(RuntimeCopyLocalItems)" Condition="'%(RuntimeCopyLocalItems.CopyLocal)' == 'true'" /> + <_ResolvedCopyLocalBuildAssets Include="@(ResourceCopyLocalItems)" Condition="'%(ResourceCopyLocalItems.CopyLocal)' == 'true'" /> + + <_ResolvedCopyLocalBuildAssets Include="@(NativeCopyLocalItems)" Exclude="@(_NativeRestoredAppHostNETCore)" Condition="'%(NativeCopyLocalItems.CopyLocal)' == 'true'" /> + <_ResolvedCopyLocalBuildAssets Include="@(RuntimeTargetsCopyLocalItems)" Condition="'%(RuntimeTargetsCopyLocalItems.CopyLocal)' == 'true'" /> + + + + + + + + + + + + + + + false + true + true + true + true + + + + + $(DefaultItemExcludes);$(BaseOutputPath)/** + + $(DefaultItemExcludes);$(BaseIntermediateOutputPath)/** + + $(DefaultItemExcludes);$(PublishDir)/** + + $(DefaultItemExcludes);**/*.user + $(DefaultItemExcludes);**/*.*proj + $(DefaultItemExcludes);**/*.sln + $(DefaultItemExcludes);**/*.slnx + $(DefaultItemExcludes);**/*.vssscc + $(DefaultItemExcludes);**/.DS_Store + + $(DefaultExcludesInProjectFolder);$(DefaultItemExcludesInProjectFolder);**/.*/** + + + + + 1.6.1 + + 2.0.3 + + + + + + true + false + <_TargetLatestRuntimePatchIsDefault>true + + + true + + + + + all + true + + + all + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(_TargetFrameworkVersionWithoutV) + + + + + + + + https://aka.ms/sdkimplicitrefs + + + + + + + + + + + <_PackageReferenceToAdd Remove="@(_PackageReferenceToAdd)" /> + + + + false + + + + + + https://aka.ms/sdkimplicititems + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_WindowsDesktopTransitiveFrameworkReference Include="@(TransitiveFrameworkReference)" Condition="'%(Identity)' == 'Microsoft.WindowsDesktop.App' Or '%(Identity)' == 'Microsoft.WindowsDesktop.App.WPF' Or '%(Identity)' == 'Microsoft.WindowsDesktop.App.WindowsForms'" /> + + + + + + + + + + + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + $(ResolveAssemblyReferencesDependsOn); + ResolveTargetingPackAssets; + + + + + + + + + + + + + + + + + + + + + + + $(NetCoreRoot)\sdk\$(NETCoreSdkVersion)\PrunePackageData\ + $(NetCoreTargetingPackRoot) + false + + + + + + + + + + + + + + + + + true + true + false + + + <_NuGetRestoreSupported Condition="('$(Language)' == 'C++' and '$(_EnablePackageReferencesInVCProjects)' != 'true')">false + + + <_PackAsToolShimRuntimeIdentifiers Condition="@(_PackAsToolShimRuntimeIdentifiers) ==''" Include="$(PackAsToolShimRuntimeIdentifiers)" /> + + + + + + + + + + + + + + + $(RuntimeIdentifier) + $(DefaultAppHostRuntimeIdentifier) + + + + + + + + + + + true + true + false + + + + [%(_PackageToDownload.Version)] + + + + + + + + <_ImplicitPackageReference Remove="@(PackageReference)" /> + + + + + + + + + + + + + + + + + + %(ResolvedTargetingPack.PackageDirectory) + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ApphostsForShimRuntimeIdentifiers Include="%(_ApphostsForShimRuntimeIdentifiersGetPackageDirectory.PackageDirectory)\%(_ApphostsForShimRuntimeIdentifiersGetPackageDirectory.PathInPackage)"> + %(_ApphostsForShimRuntimeIdentifiersGetPackageDirectory.RuntimeIdentifier) + + + + + %(ResolvedAppHostPack.PackageDirectory)\%(ResolvedAppHostPack.PathInPackage) + + + + @(ResolvedAppHostPack->'%(Path)') + + + + %(ResolvedSingleFileHostPack.PackageDirectory)\%(ResolvedSingleFileHostPack.PathInPackage) + + + + @(ResolvedSingleFileHostPack->'%(Path)') + + + + %(ResolvedComHostPack.PackageDirectory)\%(ResolvedComHostPack.PathInPackage) + + + + @(ResolvedComHostPack->'%(Path)') + + + + %(ResolvedIjwHostPack.PackageDirectory)\%(ResolvedIjwHostPack.PathInPackage) + + + + @(ResolvedIjwHostPack->'%(Path)') + + + + + + + + + + + + + + + true + false + + + + + + + + + + + + $([MSBuild]::Unescape($(PackageConflictPreferredPackages))) + + + + + + + + + + + + + true + true + + + + $(InterceptorsPreviewNamespaces);Microsoft.AspNetCore.Http.Generated + + $(InterceptorsPreviewNamespaces);Microsoft.Extensions.Configuration.Binder.SourceGeneration + + $(InterceptorsPreviewNamespaces);Microsoft.Extensions.Validation.Generated + + + + + + + + + + + + + + + + + + <_ExistingReferenceAssembliesPackageReference Include="@(PackageReference)" Condition="'%(PackageReference.Identity)' == 'Microsoft.NETFramework.ReferenceAssemblies'" /> + + + + + + + + + + + + + + + + + + <_Parameter1>$(UserSecretsId.Trim()) + + + + + + + + + + $(_IsNETCoreOrNETStandard) + + + true + false + true + $(MSBuildProjectDirectory)/runtimeconfig.template.json + true + true + <_GenerateRuntimeConfigurationPropertyInputsCache Condition="'$(_GenerateRuntimeConfigurationPropertyInputsCache)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).genruntimeconfig.cache + <_GenerateRuntimeConfigurationPropertyInputsCache>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(_GenerateRuntimeConfigurationPropertyInputsCache))) + <_GeneratePublishDependencyFilePropertyInputsCache Condition="'$(_GeneratePublishDependencyFilePropertyInputsCache)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).genpublishdeps.cache + <_GeneratePublishDependencyFilePropertyInputsCache>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(_GeneratePublishDependencyFilePropertyInputsCache))) + <_GenerateSingleFileBundlePropertyInputsCache Condition="'$(_GenerateSingleFileBundlePropertyInputsCache)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).genbundle.cache + <_GenerateSingleFileBundlePropertyInputsCache>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(_GenerateSingleFileBundlePropertyInputsCache))) + + + + <_UseRidGraphWasSpecified Condition="'$(UseRidGraph)' != ''">true + + + false + true + + + $(BundledRuntimeIdentifierGraphFile) + + $([System.IO.Path]::GetDirectoryName($(BundledRuntimeIdentifierGraphFile)))/PortableRuntimeIdentifierGraph.json + + + + + + + + + + + true + + + false + + + $(AssemblyName).deps.json + $(TargetDir)$(ProjectDepsFileName) + $(AssemblyName).runtimeconfig.json + $(TargetDir)$(ProjectRuntimeConfigFileName) + $(TargetDir)$(AssemblyName).runtimeconfig.dev.json + true + true + + + + + + true + true + + + + CurrentArchitecture + CurrentRuntime + + + <_NativeLibraryPrefix Condition="'$(_NativeLibraryPrefix)' == '' and !$(RuntimeIdentifier.StartsWith('win'))">lib + <_NativeLibraryExtension Condition="'$(_NativeLibraryExtension)' == '' and $(RuntimeIdentifier.StartsWith('win'))">.dll + <_NativeLibraryExtension Condition="'$(_NativeLibraryExtension)' == '' and $(RuntimeIdentifier.StartsWith('osx'))">.dylib + <_NativeLibraryExtension Condition="'$(_NativeLibraryExtension)' == ''">.so + <_NativeExecutableExtension Condition="'$(_NativeExecutableExtension)' == '' and ($(RuntimeIdentifier.StartsWith('win')) or $(DefaultAppHostRuntimeIdentifier.StartsWith('win')))">.exe + <_ComHostLibraryExtension Condition="'$(_ComHostLibraryExtension)' == '' and ($(RuntimeIdentifier.StartsWith('win')) or $(DefaultAppHostRuntimeIdentifier.StartsWith('win')))">.dll + <_IjwHostLibraryExtension Condition="'$(_IjwHostLibraryExtension)' == '' and ($(RuntimeIdentifier.StartsWith('win')) or $(DefaultAppHostRuntimeIdentifier.StartsWith('win')))">.dll + <_DotNetHostExecutableName>dotnet$(_NativeExecutableExtension) + <_DotNetAppHostExecutableNameWithoutExtension>apphost + <_DotNetAppHostExecutableName>$(_DotNetAppHostExecutableNameWithoutExtension)$(_NativeExecutableExtension) + <_DotNetSingleFileHostExecutableNameWithoutExtension>singlefilehost + <_DotNetComHostLibraryNameWithoutExtension>comhost + <_DotNetComHostLibraryName>$(_DotNetComHostLibraryNameWithoutExtension)$(_ComHostLibraryExtension) + <_DotNetIjwHostLibraryNameWithoutExtension>Ijwhost + <_DotNetIjwHostLibraryName>$(_DotNetIjwHostLibraryNameWithoutExtension)$(_IjwHostLibraryExtension) + <_DotNetHostPolicyLibraryName>$(_NativeLibraryPrefix)hostpolicy$(_NativeLibraryExtension) + <_DotNetHostFxrLibraryName>$(_NativeLibraryPrefix)hostfxr$(_NativeLibraryExtension) + + + + + + <_ExcludeFromPublishPackageReference Include="@(PackageReference)" Condition="('%(PackageReference.Publish)' == 'false')" /> + + + + + + Microsoft.NETCore.App + + + + + <_DefaultUserProfileRuntimeStorePath>$(HOME) + <_DefaultUserProfileRuntimeStorePath Condition="$([MSBuild]::IsOSPlatform(`Windows`))">$(USERPROFILE) + <_DefaultUserProfileRuntimeStorePath>$([System.IO.Path]::Combine($(_DefaultUserProfileRuntimeStorePath), '.dotnet', 'store')) + $(_DefaultUserProfileRuntimeStorePath) + + + true + + + true + + + true + + + + + + + false + true + + + + true + + + true + + + $(AvailablePlatforms),ARM32 + + + $(AvailablePlatforms),ARM64 + + + $(AvailablePlatforms),ARM64 + + + + false + + + + true + + + + + <_ProjectTypeRequiresBinaryFormatter Condition="'$(UseWindowsForms)' == 'true' AND $([MSBuild]::VersionLessThanOrEquals($(TargetFrameworkVersion), '8.0'))">true + <_ProjectTypeRequiresBinaryFormatter Condition="'$(UseWPF)' == 'true' AND $([MSBuild]::VersionLessThanOrEquals($(TargetFrameworkVersion), '8.0'))">true + + <_BinaryFormatterObsoleteAsError>true + + false + + + + _CheckForBuildWithNoBuild; + $(CoreBuildDependsOn); + GenerateBuildDependencyFile; + GenerateBuildRuntimeConfigurationFiles + + + + + _SdkBeforeClean; + $(CoreCleanDependsOn) + + + + + _SdkBeforeRebuild; + $(RebuildDependsOn) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.0.0 + + + + + + + + + + + + + <_ValidRuntimeIdentifierPlatformsForAssets Include="@(_KnownRuntimeIdentiferPlatforms)" /> + + <_ValidRuntimeIdentifierPlatformsForAssets Include="@(_KnownRuntimeIdentifierPlatformsForTargetFramework)" Exclude="@(_ExcludedKnownRuntimeIdentiferPlatforms)" /> + + + + + + + + + + + + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="@(AdditionalProbingPath->'%(Identity)')" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(EnableDynamicLoading)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(RollForward)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="@(RuntimeHostConfigurationOption->'%(Identity)%(Value)')" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(RuntimeIdentifier)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(SelfContained)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(TargetFramework)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(UserRuntimeConfig)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(_WriteIncludedFrameworks)" /> + + + + + + + + + + + + + <_IsRollForwardSupported Condition="'$(_TargetFrameworkVersionWithoutV)' >= '3.0'">true + LatestMinor + + + + + <_WriteIncludedFrameworks Condition="'$(SelfContained)' == 'true' and '$(_TargetFrameworkVersionWithoutV)' >= '3.1'">true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_CleaningWithoutRebuilding>true + false + + + + + <_CleaningWithoutRebuilding>false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(CompileDependsOn); + _CreateAppHost; + _CreateComHost; + _GetIjwHostPaths; + + + + + + <_UseWindowsGraphicalUserInterface Condition="($(RuntimeIdentifier.StartsWith('win')) or $(DefaultAppHostRuntimeIdentifier.StartsWith('win'))) and '$(OutputType)'=='WinExe'">true + <_EnableMacOSCodeSign Condition="'$(_EnableMacOSCodeSign)' == '' and ($(RuntimeIdentifier.StartsWith('osx')) or $(AppHostRuntimeIdentifier.StartsWith('osx')))">true + <_UseSingleFileHostForPublish Condition="'$(PublishSingleFile)' == 'true' and '$(SelfContained)' == 'true' and '$(SingleFileHostSourcePath)' != '' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), 5.0))">true + <_DisableCetCompat Condition="'$(CetCompat)' == 'false'">true + + AppRelative + <_UpdateAppHostForPublish Condition="'$(_UseSingleFileHostForPublish)' != 'true' and ('$(AppHostRelativeDotNet)' != '' or '$(AppHostDotNetSearch)' != '')">true + + + + + + + + + + + + + @(_NativeRestoredAppHostNETCore) + + + $([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)apphost$(_NativeExecutableExtension)')) + $([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)apphost_publish$(_NativeExecutableExtension)')) + $([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)singlefilehost$(_NativeExecutableExtension)')) + + + + + + + + + + + + + + + + + + + + + + + + + $(AssemblyName).comhost$(_ComHostLibraryExtension) + $([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)$(ComHostFileName)')) + + + + + + + + + + + + <_CopyAndRenameDotnetHost Condition="'$(_CopyAndRenameDotnetHost)' == ''">true + + + + $(AssemblyName)$(_NativeExecutableExtension) + PreserveNewest + PreserveNewest + + + + + + PreserveNewest + Never + + + + + $(AssemblyName)$(_NativeExecutableExtension) + PreserveNewest + + Always + + + + + $(AssemblyName).$(_DotNetComHostLibraryName) + PreserveNewest + PreserveNewest + + + %(FileName)%(Extension) + PreserveNewest + PreserveNewest + + + + + $(_DotNetIjwHostLibraryName) + PreserveNewest + PreserveNewest + + + + + + + <_FrameworkReferenceAssemblies Include="@(ReferencePath)" Condition="(%(ReferencePath.FrameworkFile) == 'true' or %(ReferencePath.ResolvedFrom) == 'ImplicitlyExpandDesignTimeFacades') and ('%(ReferencePath.NuGetSourceType)' == '' or '%(ReferencePath.NuGetIsFrameworkReference)' == 'true')" /> + + <_ReferenceOnlyAssemblies Include="@(ReferencePath)" Exclude="@(_FrameworkReferenceAssemblies)" Condition="%(ReferencePath.CopyLocal) != 'true' and %(ReferencePath.NuGetSourceType) == ''" /> + <_ReferenceAssemblies Include="@(_FrameworkReferenceAssemblies)" /> + <_ReferenceAssemblies Include="@(_ReferenceOnlyAssemblies)" /> + + + + + + + + true + + + true + + + + + + + + + $(CreateSatelliteAssembliesDependsOn); + CoreGenerateSatelliteAssemblies + + + + + + + <_AssemblyInfoFile>$(IntermediateOutputPath)%(_SatelliteAssemblyResourceInputs.Culture)\$(TargetName).resources.cs + <_OutputAssembly>$(IntermediateOutputPath)%(_SatelliteAssemblyResourceInputs.Culture)\$(TargetName).resources.dll + + + + <_Parameter1>%(_SatelliteAssemblyResourceInputs.Culture) + + + + + + + true + + + <_SatelliteAssemblyReferences Remove="@(_SatelliteAssemblyReferences)" /> + <_SatelliteAssemblyReferences Include="@(ReferencePath)" Condition="'%(Filename)' == 'mscorlib' or '%(Filename)' == 'netstandard' or '%(Filename)' == 'System.Runtime' " /> + + + + + + + + + + + + + + + + + + + + + + + + + $(TargetFrameworkIdentifier) + $(_TargetFrameworkVersionWithoutV) + + + + + + + + + + + + + + + + + + + + false + + + + <_UseAttributeForTargetFrameworkInfoPropertyNames Condition="$([MSBuild]::VersionGreaterThanOrEquals($(MSBuildVersion), '17.0'))">true + + + + + + <_IsVSTestTestProject Condition="'$(IsTestProject)' == 'true' and '$(IsTestingPlatformApplication)' != 'true'">true + <_IsVSTestTestProject Condition="'$(_IsVSTestTestProject)' == ''">false + + false + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_SourceLinkSdkSubDir>build + <_SourceLinkSdkSubDir Condition="'$(IsCrossTargetingBuild)' == 'true'">buildMultiTargeting + + true + + + + + + + + local + + + + + + + + + + + + git + + + + + + + + + + + + + + + + + + + + + + + + + + $(RepositoryUrl) + $(ScmRepositoryUrl) + + + + %(SourceRoot.ScmRepositoryUrl) + + + + + + + + <_SourceLinkFilePath>$(IntermediateOutputPath)$(MSBuildProjectName).sourcelink.json + + + + + + + + + <_GenerateSourceLinkFileBeforeTargets>Link + <_GenerateSourceLinkFileDependsOnTargets>ComputeLinkSwitches + + + <_GenerateSourceLinkFileBeforeTargets>CoreCompile + <_GenerateSourceLinkFileDependsOnTargets /> + + + + + + + + + + + + + + + + %(Link.AdditionalOptions) /sourcelink:"$(SourceLink)" + + + + + + + + + <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.GitHub.dll + <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.GitHub.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeGitHubSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateGitHubUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkGitLabAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.GitLab.dll + <_SourceLinkGitLabAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.GitLab.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeGitLabSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateGitLabUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkAzureReposGitAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.AzureRepos.Git.dll + <_SourceLinkAzureReposGitAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.AzureRepos.Git.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeAzureReposGitSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateAzureReposGitUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkBitbucketAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.Bitbucket.Git.dll + <_SourceLinkBitbucketAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.Bitbucket.Git.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeBitbucketGitSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateBitbucketGitUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + + + + $(CommonOutputGroupsDependsOn); + + + + + $(DesignerRuntimeImplementationProjectOutputGroupDependsOn); + _GenerateDesignerDepsFile; + _GenerateDesignerRuntimeConfigFile; + GetCopyToOutputDirectoryItems; + _GatherDesignerShadowCopyFiles; + + <_DesignerDepsFileName>$(AssemblyName).designer.deps.json + <_DesignerRuntimeConfigFileName>$(AssemblyName).designer.runtimeconfig.json + <_DesignerDepsFilePath>$(IntermediateOutputPath)$(_DesignerDepsFileName) + <_DesignerRuntimeConfigFilePath>$(IntermediateOutputPath)$(_DesignerRuntimeConfigFileName) + + + + + + + + + + + + + + <_DesignerHostConfigurationOption Include="Microsoft.NETCore.DotNetHostPolicy.SetAppPaths" Value="true" /> + + + + + + + + + + + <_DesignerShadowCopy Include="@(ReferenceCopyLocalPaths)" /> + + <_DesignerShadowCopy Remove="@(_ResolvedCopyLocalBuildAssets)" Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'" /> + + <_DesignerShadowCopy Remove="@(RuntimePackAsset)" Condition="'%(RuntimePackAsset.RuntimePackAlwaysCopyLocal)' != 'true'" /> + + + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).AssemblyInfo$(DefaultLanguageSourceExtension) + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + + + + + <_InformationalVersionContainsPlus>false + <_InformationalVersionContainsPlus Condition="$(InformationalVersion.Contains('+'))">true + $(InformationalVersion)+$(SourceRevisionId) + $(InformationalVersion).$(SourceRevisionId) + + + + + + <_Parameter1>$(Company) + + + <_Parameter1>$(Configuration) + + + <_Parameter1>$(Copyright) + + + <_Parameter1>$(Description) + + + <_Parameter1>$(FileVersion) + + + <_Parameter1>$(InformationalVersion) + + + <_Parameter1>$(Product) + + + <_Parameter1>$(Trademark) + + + <_Parameter1>$(AssemblyTitle) + + + <_Parameter1>$(AssemblyVersion) + + + <_Parameter1>RepositoryUrl + <_Parameter2 Condition="'$(RepositoryUrl)' != ''">$(RepositoryUrl) + <_Parameter2 Condition="'$(RepositoryUrl)' == ''">$(PrivateRepositoryUrl) + + + <_Parameter1>$(NeutralLanguage) + + + %(InternalsVisibleTo.PublicKey) + + + <_Parameter1 Condition="'%(InternalsVisibleTo.Key)' != ''">%(InternalsVisibleTo.Identity), PublicKey=%(InternalsVisibleTo.Key) + <_Parameter1 Condition="'%(InternalsVisibleTo.Key)' == '' and '$(PublicKey)' != ''">%(InternalsVisibleTo.Identity), PublicKey=$(PublicKey) + <_Parameter1 Condition="'%(InternalsVisibleTo.Key)' == '' and '$(PublicKey)' == ''">%(InternalsVisibleTo.Identity) + + + <_Parameter1>%(AssemblyMetadata.Identity) + <_Parameter2>%(AssemblyMetadata.Value) + + + + + + <_Parameter1>$(TargetPlatformIdentifier)$(TargetPlatformVersion) + + + + + <_Parameter1>$(TargetPlatformIdentifier)$(SupportedOSPlatformVersion) + + + <_Parameter1>$(TargetPlatformIdentifier) + + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).AssemblyInfoInputs.cache + + + + + + + + + + + + + + + + + + + + + + + + + + + $(AssemblyVersion) + $(Version) + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).GlobalUsings.g$(DefaultLanguageSourceExtension) + + + + + + + + + + + + + + + + + + + <_GenerateSupportedRuntimeIntermediateAppConfig>$(IntermediateOutputPath)$(TargetFileName).withSupportedRuntime.config + + + + + + + + + + + + + + + + + + + + + + + + + + <_AllProjects Include="$(AdditionalProjects.Split('%3B'))" /> + <_AllProjects Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + + %(PackageReference.Identity) + %(PackageReference.Version) + + StorePackageName=%(PackageReference.Identity); + StorePackageVersion=%(PackageReference.Version); + ComposeWorkingDir=$(ComposeWorkingDir); + PublishDir=$(PublishDir); + StoreStagingDir=$(StoreStagingDir); + TargetFramework=$(TargetFramework); + RuntimeIdentifier=$(RuntimeIdentifier); + JitPath=$(JitPath); + Crossgen=$(Crossgen); + SkipUnchangedFiles=$(SkipUnchangedFiles); + PreserveStoreLayout=$(PreserveStoreLayout); + CreateProfilingSymbols=$(CreateProfilingSymbols); + StoreSymbolsStagingDir=$(StoreSymbolsStagingDir); + DisableImplicitFrameworkReferences=false; + + + + + + + + + + + + + + + + + + + + + + + <_StoreArtifactContent> +@(ListOfPackageReference) + +]]> + + + + + + + + + + <_OptimizedResolvedFileToPublish Include="$(StoreStagingDir)\**\*.*" /> + <_OptimizedSymbolFileToPublish Include="$(StoreSymbolsStagingDir)\**\*.*" /> + + + + + + + + + + + + true + true + <_TFM Condition="'$(_TFM)' == ''">$(TargetFramework) + true + + + + + + $(UserProfileRuntimeStorePath) + <_ProfilingSymbolsDirectoryName>symbols + $([System.IO.Path]::Combine($(DefaultComposeDir), $(_ProfilingSymbolsDirectoryName))) + $([System.IO.Path]::Combine($(ComposeDir), $(_ProfilingSymbolsDirectoryName))) + $([System.IO.Path]::Combine($(ProfilingSymbolsDir), $(PlatformTarget))) + $(DefaultProfilingSymbolsDir) + $([System.IO.Path]::Combine($(ProfilingSymbolsDir), $(_TFM))) + $(ProfilingSymbolsDir)\ + $(DefaultComposeDir) + $([System.IO.Path]::Combine($(ComposeDir), $(PlatformTarget))) + $([System.IO.Path]::Combine($(ComposeDir), $(_TFM))) + $([System.IO.Path]::Combine($(ComposeDir),"artifact.xml")) + $([System.IO.Path]::GetFullPath($(ComposeDir))) + <_RandomFileName>$([System.IO.Path]::GetRandomFileName()) + $([System.IO.Path]::GetTempPath()) + $([System.IO.Path]::Combine($(TEMP), $(_RandomFileName))) + $([System.IO.Path]::GetFullPath($(ComposeWorkingDir))) + $([System.IO.Path]::Combine($(ComposeWorkingDir),"StagingDir")) + + $([System.IO.Path]::Combine($(ComposeWorkingDir),"SymbolsStagingDir")) + + $(PublishDir)\ + + + + false + true + + + + + + + + $(StorePackageVersion.Replace('*','-')) + $([System.IO.Path]::Combine($(ComposeWorkingDir),"$(StorePackageName)_$(StorePackageVersionForFolderName)")) + <_PackageProjFile>$([System.IO.Path]::Combine($(StoreWorkerWorkingDir), "Restore.csproj")) + $(StoreWorkerWorkingDir)\ + $(BaseIntermediateOutputPath)\project.assets.json + + + $(MicrosoftNETPlatformLibrary) + true + + + + + + + + + + + + + + + + + + + + + + + <_ManagedResolvedFileToPublishCandidates Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.AssetType)'=='runtime'" /> + <_UnOptimizedResolvedFileToPublish Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.AssetType)'!='runtime'" /> + + + true + + + + + + <_UnOptimizedResolvedFileToPublish Include="@(ResolvedFileToPublish)" /> + + + + + + + true + true + + + + + + + + + + + + + + + + + + + + + + true + true + false + true + false + true + 1 + + + + + + <_CoreclrResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)" Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='coreclr'" /> + <_CoreclrResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)" Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='libcoreclr'" /> + <_JitResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)" Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='clrjit'" /> + <_JitResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)" Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='libclrjit'" /> + + + + + + + + <_CoreclrPath>@(_CoreclrResolvedPath) + @(_JitResolvedPath) + <_CoreclrDir>$([System.IO.Path]::GetDirectoryName($(_CoreclrPath))) + <_CoreclrPkgDir>$([System.IO.Path]::Combine($(_CoreclrDir),"..\..\..\")) + $([System.IO.Path]::Combine($(_CoreclrPkgDir),"tools")) + + $([System.IO.Path]::Combine($(CrossgenDir),"crossgen")) + $([System.IO.Path]::Combine($(CrossgenDir),"crossgen.exe")) + + + + + + + + $([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine($(_NetCoreRefDir), $([System.IO.Path]::GetFileName($(Crossgen))))))) + + + + + + + + CrossgenExe=$(Crossgen); + CrossgenJit=$(JitPath); + CrossgenInputAssembly=%(_ManagedResolvedFilesToOptimize.Fullpath); + CrossgenOutputAssembly=$(_RuntimeOptimizedDir)$(DirectorySeparatorChar)%(_ManagedResolvedFilesToOptimize.FileName)%(_ManagedResolvedFilesToOptimize.Extension); + CrossgenSubOutputPath=%(_ManagedResolvedFilesToOptimize.DestinationSubPath); + _RuntimeOptimizedDir=$(_RuntimeOptimizedDir); + PublishDir=$(StoreStagingDir); + CrossgenPlatformAssembliesPath=$(_RuntimeRefDir)$(PathSeparator)$(_NetCoreRefDir); + CreateProfilingSymbols=$(CreateProfilingSymbols); + StoreSymbolsStagingDir=$(StoreSymbolsStagingDir); + _RuntimeSymbolsDir=$(_RuntimeSymbolsDir) + + + + + + + + + + $([System.IO.Path]::GetDirectoryName($(_RuntimeSymbolsDir)\$(CrossgenSubOutputPath))) + $([System.IO.Path]::GetDirectoryName($(StoreSymbolsStagingDir)\$(CrossgenSubOutputPath))) + $(CrossgenExe) -nologo -readytorun -in "$(CrossgenInputAssembly)" -out "$(CrossgenOutputAssembly)" -jitpath "$(CrossgenJit)" -platform_assemblies_paths "$(CrossgenPlatformAssembliesPath)" + CreatePDB + CreatePerfMap + + + + + + + + + + + + <_ProfilingSymbols Include="$(CrossgenProfilingSymbolsOutputDirectory)\*" Condition="'$(CreateProfilingSymbols)' == 'true'" /> + + + + + + + + $([System.IO.Path]::PathSeparator) + $([System.IO.Path]::DirectorySeparatorChar) + + + + + + <_CrossProjFileDir>$([System.IO.Path]::Combine($(ComposeWorkingDir),"Optimize")) + <_NetCoreRefDir>$([System.IO.Path]::Combine($(_CrossProjFileDir), "netcoreapp")) + + + + + <_CrossProjAssetsFile>$([System.IO.Path]::Combine($(_CrossProjFileDir), project.assets.json)) + + + + + + <_RuntimeRefDir>$([System.IO.Path]::Combine($(StoreWorkerWorkingDir), "runtimeref")) + + <_RuntimeOptimizedDir>$([System.IO.Path]::Combine($(StoreWorkerWorkingDir), "runtimopt")) + + <_RuntimeSymbolsDir>$([System.IO.Path]::Combine($(StoreWorkerWorkingDir), "runtimesymbols")) + + + <_ManagedResolvedFilesToOptimize Include="@(_ManagedResolvedFileToPublishCandidates)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ReadyToRunOutputPath>$(IntermediateOutputPath)R2R + + + + <_ReadyToRunImplementationAssemblies Include="@(ResolvedFileToPublish->WithMetadataValue('PostprocessAssembly', 'true'))" /> + + + + <_ReadyToRunImplementationAssemblies Include="@(_ManagedRuntimePackAssembly)" ReferenceOnly="true" /> + + + + + + <_ReadyToRunImplementationAssemblies Remove="@(_ReadyToRunImplementationAssemblies)" /> + <_ReadyToRunImplementationAssemblies Include="@(_ReadyToRunImplementationAssembliesWithoutConflicts)" /> + + + <_ReadyToRunPgoFiles Include="@(PublishReadyToRunPgoFiles)" /> + <_ReadyToRunPgoFiles Include="@(RuntimePackAsset)" Condition="'%(RuntimePackAsset.AssetType)' == 'pgodata' and '%(RuntimePackAsset.Extension)' == '.mibc' and '$(PublishReadyToRunUseRuntimePackOptimizationData)' == 'true'" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ReadyToRunCompilerHasWarnings Condition="'$(_ReadyToRunWarningsDetected)' == 'true'">true + + + <_ReadyToRunCompilationFailures Condition="'$(_ReadyToRunCompilerExitCode)' != '' And $(_ReadyToRunCompilerExitCode) != 0" Include="@(_ReadyToRunCompileList)" /> + + + + + + + + + + + <_ReadyToRunCompilerHasWarnings Condition="'$(_ReadyToRunWarningsDetected)' == 'true'">true + + + <_ReadyToRunCompilationFailures Condition="'$(_ReadyToRunCompilerExitCode)' != '' And $(_ReadyToRunCompilerExitCode) != 0" Include="@(_ReadyToRunSymbolsCompileList)" /> + + + + + + + $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledCliTools.props + + + + + + + <_ReferenceToObsoleteDotNetCliTool Include="@(DotNetCliToolReference)" /> + + <_ReferenceToObsoleteDotNetCliTool Remove="@(DotNetCliToolReference)" /> + + + + + + + + + true + <_GetChildProjectCopyToPublishDirectoryItems Condition="'$(_GetChildProjectCopyToPublishDirectoryItems)' == ''">true + true + + + + + true + true + <_FirstTargetFrameworkToSupportTrimming>net6.0 + <_FirstTargetFrameworkToSupportAot>net7.0 + <_FirstTargetFrameworkToSupportSingleFile>net6.0 + <_FirstTargetFrameworkVersionToSupportTrimAnalyzer>$([MSBuild]::GetTargetFrameworkVersion('$(_FirstTargetFrameworkToSupportTrimming)')) + <_FirstTargetFrameworkVersionToSupportAotAnalyzer>$([MSBuild]::GetTargetFrameworkVersion('$(_FirstTargetFrameworkToSupportAot)')) + <_FirstTargetFrameworkVersionToSupportSingleFileAnalyzer>$([MSBuild]::GetTargetFrameworkVersion('$(_FirstTargetFrameworkToSupportSingleFile)')) + + + + + + + + + + + + Always + + + + + + <_RequiresILLinkPack Condition="'$(_RequiresILLinkPack)' == '' And ( '$(PublishAot)' == 'true' Or '$(IsAotCompatible)' == 'true' Or '$(EnableAotAnalyzer)' == 'true' Or '$(PublishTrimmed)' == 'true' Or '$(IsTrimmable)' == 'true' Or '$(EnableTrimAnalyzer)' == 'true' Or '$(EnableSingleFileAnalyzer)' == 'true')">true + <_RequiresILLinkPack Condition="'$(_RequiresILLinkPack)' == ''">false + + + + + <_MinNonEolTargetFrameworkForTrimming>$(_MinimumNonEolSupportedNetCoreTargetFramework) + <_MinNonEolTargetFrameworkForSingleFile>$(_MinimumNonEolSupportedNetCoreTargetFramework) + + <_MinNonEolTargetFrameworkForAot>$(_MinimumNonEolSupportedNetCoreTargetFramework) + <_MinNonEolTargetFrameworkForAot Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(_FirstTargetFrameworkToSupportAot)', '$(_MinimumNonEolSupportedNetCoreTargetFramework)'))">$(_FirstTargetFrameworkToSupportAot) + + + <_TargetFramework Include="$(TargetFrameworks)" /> + <_DecomposedTargetFramework Include="@(_TargetFramework)"> + $([MSBuild]::IsTargetFrameworkCompatible('%(Identity)', '$(_FirstTargetFrameworkToSupportTrimming)')) + $([MSBuild]::IsTargetFrameworkCompatible('$(_MinNonEolTargetFrameworkForTrimming)', '%(Identity)')) + $([MSBuild]::IsTargetFrameworkCompatible('%(Identity)', '$(_FirstTargetFrameworkToSupportAot)')) + $([MSBuild]::IsTargetFrameworkCompatible('$(_MinNonEolTargetFrameworkForAot)', '%(Identity)')) + $([MSBuild]::IsTargetFrameworkCompatible('%(Identity)', '$(_FirstTargetFrameworkToSupportSingleFile)')) + $([MSBuild]::IsTargetFrameworkCompatible('$(_MinNonEolTargetFrameworkForSingleFile)', '%(Identity)')) + + <_TargetFrameworkToSilenceIsTrimmableUnsupportedWarning Include="@(_DecomposedTargetFramework)" Condition="'%(SupportsTrimming)' == 'true' And '%(SupportedByMinNonEolTargetFrameworkForTrimming)' == 'true'" /> + <_TargetFrameworkToSilenceIsAotCompatibleUnsupportedWarning Include="@(_DecomposedTargetFramework->'%(Identity)')" Condition="'%(SupportsAot)' == 'true' And '%(SupportedByMinNonEolTargetFrameworkForAot)' == 'true'" /> + <_TargetFrameworkToSilenceEnableSingleFileAnalyzerUnsupportedWarning Include="@(_DecomposedTargetFramework)" Condition="'%(SupportsSingleFile)' == 'true' And '%(SupportedByMinNonEolTargetFrameworkForSingleFile)' == 'true'" /> + + + + <_SilenceIsTrimmableUnsupportedWarning Condition="'$(_SilenceIsTrimmableUnsupportedWarning)' == '' And @(_TargetFrameworkToSilenceIsTrimmableUnsupportedWarning->Count()) > 0">true + <_SilenceIsAotCompatibleUnsupportedWarning Condition="'$(_SilenceIsAotCompatibleUnsupportedWarning)' == '' And @(_TargetFrameworkToSilenceIsAotCompatibleUnsupportedWarning->Count()) > 0">true + <_SilenceEnableSingleFileAnalyzerUnsupportedWarning Condition="'$(_SilenceEnableSingleFileAnalyzerUnsupportedWarning)' == '' And @(_TargetFrameworkToSilenceEnableSingleFileAnalyzerUnsupportedWarning->Count()) > 0">true + + + + + + + + <_BeforePublishNoBuildTargets> + BuildOnlySettings; + _PreventProjectReferencesFromBuilding; + ResolveReferences; + PrepareResourceNames; + ComputeIntermediateSatelliteAssemblies; + ComputeEmbeddedApphostPaths; + + <_CorePublishTargets> + PrepareForPublish; + ComputeAndCopyFilesToPublishDirectory; + $(PublishProtocolProviderTargets); + PublishItemsOutputGroup; + + <_PublishNoBuildAlternativeDependsOn>$(_BeforePublishNoBuildTargets);$(_CorePublishTargets) + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + $(PublishDir)\ + + + + + + + + + + + + <_OrphanPublishFileWrites Include="@(_PriorPublishFileWrites)" Exclude="@(_CurrentPublishFileWrites)" /> + + + + + + + + + + + + <_NormalizedPublishDir>$([MSBuild]::NormalizeDirectory($(PublishDir))) + + + + + + <_PublishCleanFile Condition="'$(PublishCleanFile)'==''">PublishOutputs.$(_NormalizedPublishDirHash.Substring(0, 10)).txt + + + + + + + + + + + + + + + + + + <_CurrentPublishFileWritesUnfiltered Include="@(ResolvedFileToPublish->'$(_NormalizedPublishDir)%(RelativePath)')" /> + <_CurrentPublishFileWritesUnfiltered Include="$(_NormalizedPublishDir)$(AssemblyName)$(_NativeExecutableExtension)" Condition="'$(UseAppHost)' == 'true'" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ResolvedFileToPublishPreserveNewest Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.CopyToPublishDirectory)'=='PreserveNewest'" /> + <_ResolvedFileToPublishAlways Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.CopyToPublishDirectory)'=='Always'" /> + <_ResolvedFileToPublishIfDifferent Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.CopyToPublishDirectory)'=='IfDifferent'" /> + + + <_ResolvedUnbundledFileToPublishPreserveNewest Include="@(_ResolvedFileToPublishPreserveNewest)" Condition="'$(PublishSingleFile)' != 'true' or '%(_ResolvedFileToPublishPreserveNewest.ExcludeFromSingleFile)'=='true'" /> + <_ResolvedUnbundledFileToPublishAlways Include="@(_ResolvedFileToPublishAlways)" Condition="'$(PublishSingleFile)' != 'true' or '%(_ResolvedFileToPublishAlways.ExcludeFromSingleFile)'=='true'" /> + <_ResolvedUnbundledFileToPublishIfDifferent Include="@(_ResolvedFileToPublishIfDifferent)" Condition="'$(PublishSingleFile)' != 'true' or '%(_ResolvedFileToPublishIfDifferent.ExcludeFromSingleFile)'=='true'" /> + + + + + + + + true + true + false + + + + + + + + @(IntermediateAssembly->'%(Filename)%(Extension)') + PreserveNewest + + + + $(ProjectDepsFileName) + PreserveNewest + + + + $(ProjectRuntimeConfigFileName) + PreserveNewest + + + + @(AppConfigWithTargetPath->'%(TargetPath)') + PreserveNewest + + + + @(_DebugSymbolsIntermediatePath->'%(Filename)%(Extension)') + PreserveNewest + true + + + + %(IntermediateSatelliteAssembliesWithTargetPath.Culture)\%(Filename)%(Extension) + PreserveNewest + + + + %(Filename)%(Extension) + PreserveNewest + + + + + + + + + <_ResolvedCopyLocalPublishAssets Remove="@(_ResolvedCopyLocalPublishAssetsRemoved)" /> + + + + %(_ResolvedCopyLocalPublishAssets.DestinationSubDirectory)%(Filename)%(Extension) + PreserveNewest + + + + @(FinalDocFile->'%(Filename)%(Extension)') + PreserveNewest + + + + shims/%(_EmbeddedApphostPaths.ShimRuntimeIdentifier)/%(_EmbeddedApphostPaths.Filename)%(_EmbeddedApphostPaths.Extension) + PreserveNewest + + + <_FilesToDrop Include="@(ResolvedFileToPublish)" Condition="'$(PublishSingleFile)' == 'true' and '%(ResolvedFileToPublish.DropFromSingleFile)' == 'true'" /> + + + + + + + + + + + + <_ResolvedCopyLocalPublishAssets Include="@(RuntimePackAsset)" Condition="('$(SelfContained)' == 'true' Or '%(RuntimePackAsset.RuntimePackAlwaysCopyLocal)' == 'true') and '%(RuntimePackAsset.AssetType)' != 'pgodata'" /> + + + + <_ResolvedCopyLocalPublishAssets Remove="@(_NativeRestoredAppHostNETCore)" /> + + + <_ResolvedCopyLocalPublishAssets Include="@(_ResolvedCopyLocalBuildAssets)" Condition="'%(_ResolvedCopyLocalBuildAssets.CopyToPublishDirectory)' != 'false' " /> + + + + + + + + + + + + + <_PublishSatelliteResources Include="@(_ResolvedCopyLocalPublishAssets)" Condition="'%(_ResolvedCopyLocalPublishAssets.AssetType)' == 'resources'" /> + + + + + + <_ResolvedCopyLocalPublishAssets Remove="@(_PublishSatelliteResources)" /> + <_ResolvedCopyLocalPublishAssets Include="@(_FilteredPublishSatelliteResources)" /> + + + + + + <_ResolvedCopyLocalPublishAssets Include="@(ReferenceCopyLocalPaths)" Exclude="@(_ResolvedCopyLocalBuildAssets);@(RuntimePackAsset)" Condition="('$(PublishReferencesDocumentationFiles)' == 'true' or '%(ReferenceCopyLocalPaths.Extension)' != '.xml') and '%(ReferenceCopyLocalPaths.Private)' != 'false'"> + %(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension) + + + + + + + + + + + + + + + + %(_SourceItemsToCopyToPublishDirectoryAlways.TargetPath) + Always + True + + + %(_SourceItemsToCopyToPublishDirectory.TargetPath) + PreserveNewest + True + + + %(_SourceItemsToCopyToPublishDirectoryIfDifferent.TargetPath) + IfDifferent + True + + + + + + + <_ContentWithPublishMetadata Include="@(Content)" Condition="'%(Content.CopyToPublishDirectory)' != '' and '%(Content.CopyToPublishDirectory)' != 'Never' and '%(Content.CopyToOutputDirectory)' == ''"> + + %(Content.TargetPath) + %(Content.Link) + + $([MSBuild]::MakeRelative($(MSBuildProjectDirectory), %(Content.FullPath))) + + + + + + + + + <_GCTPDIKeepDuplicates>false + <_GCTPDIKeepMetadata>CopyToPublishDirectory;ExcludeFromSingleFile;TargetPath + + + + + + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepDuplicates=" '$(_GCTPDIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_AllChildProjectPublishItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectPublishItemsWithTargetPath.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepDuplicates=" '$(_GCTPDIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_AllChildProjectPublishItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectPublishItemsWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepDuplicates=" '$(_GCTPDIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_AllChildProjectPublishItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectPublishItemsWithTargetPath.CopyToPublishDirectory)'=='IfDifferent'" /> + + + + <_AllChildProjectPublishItemsWithTargetPath Remove="@(_AllChildProjectPublishItemsWithTargetPath)" /> + + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)'=='IfDifferent'" /> + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToPublishDirectory)'=='PreserveNewest'" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToPublishDirectory)'=='IfDifferent'" /> + + + <_CompileItemsToPublish Include="@(Compile->'%(FullPath)')" Condition="'%(Compile.CopyToPublishDirectory)'=='Always' or '%(Compile.CopyToPublishDirectory)'=='PreserveNewest' or '%(Compile.CopyToPublishDirectory)'=='IfDifferent'" /> + + + + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_CompileItemsToPublishWithTargetPath)" Condition="'%(_CompileItemsToPublishWithTargetPath.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_CompileItemsToPublishWithTargetPath)" Condition="'%(_CompileItemsToPublishWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_CompileItemsToPublishWithTargetPath)" Condition="'%(_CompileItemsToPublishWithTargetPath.CopyToPublishDirectory)'=='IfDifferent'" /> + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToPublishDirectory)'=='IfDifferent'" /> + + + + <_SourceItemsToCopyToPublishDirectoryAlways Remove="$(AppHostIntermediatePath)" /> + <_SourceItemsToCopyToPublishDirectory Remove="$(AppHostIntermediatePath)" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent Remove="$(AppHostIntermediatePath)" /> + + <_SourceItemsToCopyToPublishDirectoryAlways Include="$(SingleFileHostIntermediatePath)" CopyToOutputDirectory="Always" TargetPath="$(AssemblyName)$(_NativeExecutableExtension)" /> + + + + <_SourceItemsToCopyToPublishDirectoryAlways Remove="$(AppHostIntermediatePath)" /> + <_SourceItemsToCopyToPublishDirectory Remove="$(AppHostIntermediatePath)" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent Remove="$(AppHostIntermediatePath)" /> + + <_SourceItemsToCopyToPublishDirectoryAlways Include="$(AppHostForPublishIntermediatePath)" CopyToOutputDirectory="Always" TargetPath="$(AssemblyName)$(_NativeExecutableExtension)" /> + + + + + + + + + + Always + + + PreserveNewest + + + IfDifferent + + + Always + + + PreserveNewest + + + IfDifferent + + + Always + + + PreserveNewest + + + IfDifferent + + <_NoneWithTargetPath Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' and '%(_NoneWithTargetPath.CopyToPublishDirectory)' == ''"> + Always + + <_NoneWithTargetPath Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' and '%(_NoneWithTargetPath.CopyToPublishDirectory)' == ''"> + PreserveNewest + + <_NoneWithTargetPath Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' and '%(_NoneWithTargetPath.CopyToPublishDirectory)' == ''"> + IfDifferent + + + + + <_ComputeManagedRuntimePackAssembliesIfSelfContained>_ComputeManagedRuntimePackAssemblies + + + + + + + <_ManagedRuntimeAssembly Include="@(RuntimeCopyLocalItems)" /> + + <_ManagedRuntimeAssembly Include="@(UserRuntimeAssembly)" /> + + <_ManagedRuntimeAssembly Include="@(IntermediateAssembly)" /> + + + + <_ManagedRuntimeAssembly Include="@(_ManagedRuntimePackAssembly)" /> + + + + + + + + + + + + + + + <_ManagedRuntimePackAssembly Include="@(RuntimePackAsset)" Condition="'%(RuntimePackAsset.AssetType)' == 'runtime' or '%(RuntimePackAsset.Filename)' == 'System.Private.Corelib'" /> + + + + + + <_TrimRuntimeAssets Condition="'$(PublishSingleFile)' == 'true' and '$(SelfContained)' == 'true'">true + <_UseBuildDependencyFile Condition="'@(_ExcludeFromPublishPackageReference)' == '' and '@(RuntimeStorePackages)' == '' and '$(PreserveStoreLayout)' != 'true' and '$(PublishTrimmed)' != 'true' and '$(_TrimRuntimeAssets)' != 'true'">true + + + + + + <_FilesToBundle Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.ExcludeFromSingleFile)' != 'true'" /> + + + + $(AssemblyName)$(_NativeExecutableExtension) + $(PublishDir)$(PublishedSingleFileName) + + + + + + + + $(PublishedSingleFileName) + + + + + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(PublishedSingleFilePath)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(TraceSingleFileBundler)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(IncludeSymbolsInSingleFile)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(IncludeAllContentForSelfExtract)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(IncludeNativeLibrariesForSelfExtract)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(EnableCompressionInSingleFile)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(PublishedSingleFileName)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(RuntimeIdentifier)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(PublishDir)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(_TargetFrameworkVersionWithoutV)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="@(FilesToBundle)" /> + + + + + + + + + + false + false + false + $(IncludeAllContentForSelfExtract) + false + + + + + + + + + + + + + + $(PublishDepsFilePath) + $(IntermediateOutputPath)$(ProjectDepsFileName) + + + + + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(PublishDepsFilePath)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(PublishSingleFile)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(MSBuildProjectFullPath)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(ProjectAssetsFile)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(IntermediateDepsFilePath)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(TargetFramework)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(AssemblyName)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(TargetExt)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(Version)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(IncludeMainProjectInDepsFile)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(RuntimeIdentifier)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(MicrosoftNETPlatformLibrary)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(SelfContained)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(IncludeFileVersionsInDependencyFile)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(RuntimeIdentifierGraphPath)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(IncludeProjectsNotInAssetsFileInDepsFile)" /> + + + + + + + + + + + + + + $(PublishDir)$(ProjectDepsFileName) + <_IsSingleFilePublish Condition="'$(PublishSingleFile)' == ''">false + <_IsSingleFilePublish Condition="'$(PublishSingleFile)' != ''">$(PublishSingleFile) + + + + + + <_ResolvedNuGetFilesForPublish Include="@(NativeCopyLocalItems)" Condition="'%(NativeCopyLocalItems.CopyToPublishDirectory)' != 'false'" /> + <_ResolvedNuGetFilesForPublish Include="@(ResourceCopyLocalItems)" Condition="'%(ResourceCopyLocalItems.CopyToPublishDirectory)' != 'false'" /> + <_ResolvedNuGetFilesForPublish Include="@(RuntimeCopyLocalItems)" Condition="'%(RuntimeCopyLocalItems.CopyToPublishDirectory)' != 'false'" /> + <_ResolvedNuGetFilesForPublish Remove="@(_PublishConflictPackageFiles)" Condition="'%(_PublishConflictPackageFiles.ConflictItemType)' != 'Reference'" /> + + + + + $(ProjectDepsFileName) + + + + + + + + <_PackAsToolShimRuntimeIdentifiers Condition="@(_PackAsToolShimRuntimeIdentifiers) ==''" Include="$(PackAsToolShimRuntimeIdentifiers)" /> + + + + + + + + + + + + + + + + + + $(PublishItemsOutputGroupDependsOn); + ResolveReferences; + ComputeResolvedFilesToPublishList; + _ComputeFilesToBundle; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + refs + $(PreserveCompilationContext) + + + + + $(DefineConstants) + $(LangVersion) + $(PlatformTarget) + $(AllowUnsafeBlocks) + $(TreatWarningsAsErrors) + $(Optimize) + $(AssemblyOriginatorKeyFile) + $(DelaySign) + $(PublicSign) + $(DebugType) + $(OutputType) + $(GenerateDocumentationFile) + + + + + + + + + + + <_RefAssembliesToExclude Include="@(_ResolvedCopyLocalPublishAssets->'%(FullPath)')" /> + + <_RefAssembliesToExclude Include="@(_RuntimeItemsInRuntimeStore)" /> + + $(RefAssembliesFolderName)\%(Filename)%(Extension) + + + + + + + + + + + + + + + + + + Microsoft.CSharp|4.4.0; + Microsoft.Win32.Primitives|4.3.0; + Microsoft.Win32.Registry|4.4.0; + runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple|4.3.0; + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + System.AppContext|4.3.0; + System.Buffers|4.4.0; + System.Collections|4.3.0; + System.Collections.Concurrent|4.3.0; + System.Collections.Immutable|1.4.0; + System.Collections.NonGeneric|4.3.0; + System.Collections.Specialized|4.3.0; + System.ComponentModel|4.3.0; + System.ComponentModel.EventBasedAsync|4.3.0; + System.ComponentModel.Primitives|4.3.0; + System.ComponentModel.TypeConverter|4.3.0; + System.Console|4.3.0; + System.Data.Common|4.3.0; + System.Diagnostics.Contracts|4.3.0; + System.Diagnostics.Debug|4.3.0; + System.Diagnostics.DiagnosticSource|4.4.0; + System.Diagnostics.FileVersionInfo|4.3.0; + System.Diagnostics.Process|4.3.0; + System.Diagnostics.StackTrace|4.3.0; + System.Diagnostics.TextWriterTraceListener|4.3.0; + System.Diagnostics.Tools|4.3.0; + System.Diagnostics.TraceSource|4.3.0; + System.Diagnostics.Tracing|4.3.0; + System.Dynamic.Runtime|4.3.0; + System.Globalization|4.3.0; + System.Globalization.Calendars|4.3.0; + System.Globalization.Extensions|4.3.0; + System.IO|4.3.0; + System.IO.Compression|4.3.0; + System.IO.Compression.ZipFile|4.3.0; + System.IO.FileSystem|4.3.0; + System.IO.FileSystem.AccessControl|4.4.0; + System.IO.FileSystem.DriveInfo|4.3.0; + System.IO.FileSystem.Primitives|4.3.0; + System.IO.FileSystem.Watcher|4.3.0; + System.IO.IsolatedStorage|4.3.0; + System.IO.MemoryMappedFiles|4.3.0; + System.IO.Pipes|4.3.0; + System.IO.UnmanagedMemoryStream|4.3.0; + System.Linq|4.3.0; + System.Linq.Expressions|4.3.0; + System.Linq.Queryable|4.3.0; + System.Net.Http|4.3.0; + System.Net.NameResolution|4.3.0; + System.Net.Primitives|4.3.0; + System.Net.Requests|4.3.0; + System.Net.Security|4.3.0; + System.Net.Sockets|4.3.0; + System.Net.WebHeaderCollection|4.3.0; + System.ObjectModel|4.3.0; + System.Private.DataContractSerialization|4.3.0; + System.Reflection|4.3.0; + System.Reflection.Emit|4.3.0; + System.Reflection.Emit.ILGeneration|4.3.0; + System.Reflection.Emit.Lightweight|4.3.0; + System.Reflection.Extensions|4.3.0; + System.Reflection.Metadata|1.5.0; + System.Reflection.Primitives|4.3.0; + System.Reflection.TypeExtensions|4.3.0; + System.Resources.ResourceManager|4.3.0; + System.Runtime|4.3.0; + System.Runtime.Extensions|4.3.0; + System.Runtime.Handles|4.3.0; + System.Runtime.InteropServices|4.3.0; + System.Runtime.InteropServices.RuntimeInformation|4.3.0; + System.Runtime.Loader|4.3.0; + System.Runtime.Numerics|4.3.0; + System.Runtime.Serialization.Formatters|4.3.0; + System.Runtime.Serialization.Json|4.3.0; + System.Runtime.Serialization.Primitives|4.3.0; + System.Security.AccessControl|4.4.0; + System.Security.Claims|4.3.0; + System.Security.Cryptography.Algorithms|4.3.0; + System.Security.Cryptography.Cng|4.4.0; + System.Security.Cryptography.Csp|4.3.0; + System.Security.Cryptography.Encoding|4.3.0; + System.Security.Cryptography.OpenSsl|4.4.0; + System.Security.Cryptography.Primitives|4.3.0; + System.Security.Cryptography.X509Certificates|4.3.0; + System.Security.Cryptography.Xml|4.4.0; + System.Security.Principal|4.3.0; + System.Security.Principal.Windows|4.4.0; + System.Text.Encoding|4.3.0; + System.Text.Encoding.Extensions|4.3.0; + System.Text.RegularExpressions|4.3.0; + System.Threading|4.3.0; + System.Threading.Overlapped|4.3.0; + System.Threading.Tasks|4.3.0; + System.Threading.Tasks.Extensions|4.3.0; + System.Threading.Tasks.Parallel|4.3.0; + System.Threading.Thread|4.3.0; + System.Threading.ThreadPool|4.3.0; + System.Threading.Timer|4.3.0; + System.ValueTuple|4.3.0; + System.Xml.ReaderWriter|4.3.0; + System.Xml.XDocument|4.3.0; + System.Xml.XmlDocument|4.3.0; + System.Xml.XmlSerializer|4.3.0; + System.Xml.XPath|4.3.0; + System.Xml.XPath.XDocument|4.3.0; + + + + + Microsoft.Win32.Primitives|4.3.0; + System.AppContext|4.3.0; + System.Collections|4.3.0; + System.Collections.Concurrent|4.3.0; + System.Collections.Immutable|1.4.0; + System.Collections.NonGeneric|4.3.0; + System.Collections.Specialized|4.3.0; + System.ComponentModel|4.3.0; + System.ComponentModel.EventBasedAsync|4.3.0; + System.ComponentModel.Primitives|4.3.0; + System.ComponentModel.TypeConverter|4.3.0; + System.Console|4.3.0; + System.Data.Common|4.3.0; + System.Diagnostics.Contracts|4.3.0; + System.Diagnostics.Debug|4.3.0; + System.Diagnostics.FileVersionInfo|4.3.0; + System.Diagnostics.Process|4.3.0; + System.Diagnostics.StackTrace|4.3.0; + System.Diagnostics.TextWriterTraceListener|4.3.0; + System.Diagnostics.Tools|4.3.0; + System.Diagnostics.TraceSource|4.3.0; + System.Diagnostics.Tracing|4.3.0; + System.Dynamic.Runtime|4.3.0; + System.Globalization|4.3.0; + System.Globalization.Calendars|4.3.0; + System.Globalization.Extensions|4.3.0; + System.IO|4.3.0; + System.IO.Compression|4.3.0; + System.IO.Compression.ZipFile|4.3.0; + System.IO.FileSystem|4.3.0; + System.IO.FileSystem.DriveInfo|4.3.0; + System.IO.FileSystem.Primitives|4.3.0; + System.IO.FileSystem.Watcher|4.3.0; + System.IO.IsolatedStorage|4.3.0; + System.IO.MemoryMappedFiles|4.3.0; + System.IO.Pipes|4.3.0; + System.IO.UnmanagedMemoryStream|4.3.0; + System.Linq|4.3.0; + System.Linq.Expressions|4.3.0; + System.Linq.Queryable|4.3.0; + System.Net.Http|4.3.0; + System.Net.NameResolution|4.3.0; + System.Net.Primitives|4.3.0; + System.Net.Requests|4.3.0; + System.Net.Security|4.3.0; + System.Net.Sockets|4.3.0; + System.Net.WebHeaderCollection|4.3.0; + System.ObjectModel|4.3.0; + System.Private.DataContractSerialization|4.3.0; + System.Reflection|4.3.0; + System.Reflection.Emit|4.3.0; + System.Reflection.Emit.ILGeneration|4.3.0; + System.Reflection.Emit.Lightweight|4.3.0; + System.Reflection.Extensions|4.3.0; + System.Reflection.Primitives|4.3.0; + System.Reflection.TypeExtensions|4.3.0; + System.Resources.ResourceManager|4.3.0; + System.Runtime|4.3.0; + System.Runtime.Extensions|4.3.0; + System.Runtime.Handles|4.3.0; + System.Runtime.InteropServices|4.3.0; + System.Runtime.InteropServices.RuntimeInformation|4.3.0; + System.Runtime.Loader|4.3.0; + System.Runtime.Numerics|4.3.0; + System.Runtime.Serialization.Formatters|4.3.0; + System.Runtime.Serialization.Json|4.3.0; + System.Runtime.Serialization.Primitives|4.3.0; + System.Security.AccessControl|4.4.0; + System.Security.Claims|4.3.0; + System.Security.Cryptography.Algorithms|4.3.0; + System.Security.Cryptography.Csp|4.3.0; + System.Security.Cryptography.Encoding|4.3.0; + System.Security.Cryptography.Primitives|4.3.0; + System.Security.Cryptography.X509Certificates|4.3.0; + System.Security.Cryptography.Xml|4.4.0; + System.Security.Principal|4.3.0; + System.Security.Principal.Windows|4.4.0; + System.Text.Encoding|4.3.0; + System.Text.Encoding.Extensions|4.3.0; + System.Text.RegularExpressions|4.3.0; + System.Threading|4.3.0; + System.Threading.Overlapped|4.3.0; + System.Threading.Tasks|4.3.0; + System.Threading.Tasks.Extensions|4.3.0; + System.Threading.Tasks.Parallel|4.3.0; + System.Threading.Thread|4.3.0; + System.Threading.ThreadPool|4.3.0; + System.Threading.Timer|4.3.0; + System.ValueTuple|4.3.0; + System.Xml.ReaderWriter|4.3.0; + System.Xml.XDocument|4.3.0; + System.Xml.XmlDocument|4.3.0; + System.Xml.XmlSerializer|4.3.0; + System.Xml.XPath|4.3.0; + System.Xml.XPath.XDocument|4.3.0; + + + + + + + + + + + <_RuntimeAssetsForConflictResolution Include="@(RuntimeCopyLocalItems); @(NativeCopyLocalItems); @(ResourceCopyLocalItems); @(RuntimeTargetsCopyLocalItems)" Exclude="@(ReferenceCopyLocalPaths)" /> + + + + + + + + + + + + + + + + + + + + + + + + + <_ResolvedCopyLocalPublishAssets Remove="@(_ResolvedCopyLocalPublishAssets)" /> + <_ResolvedCopyLocalPublishAssets Include="@(_ResolvedCopyLocalPublishAssetsWithoutConflicts)" /> + + + + + + + + + + + + + + + Properties + + + $(Configuration.ToUpperInvariant()) + + $(ImplicitConfigurationDefine.Replace('-', '_')) + $(ImplicitConfigurationDefine.Replace('.', '_')) + $(ImplicitConfigurationDefine.Replace(' ', '_')) + $(DefineConstants);$(ImplicitConfigurationDefine) + + + + + + + + $(WarningsAsErrors);SYSLIB0011 + + + + + + + + + + + + <_NoneAnalysisLevel>4.0 + + <_LatestAnalysisLevel>10.0 + <_PreviewAnalysisLevel>11.0 + latest + $(_TargetFrameworkVersionWithoutV) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevel), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevel), '$(AnalysisLevelPrefix)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefix) + $(AnalysisLevel) + + + + 9999 + + 4 + + $(_TargetFrameworkVersionWithoutV.Split('.')[0]) + + + + + true + + true + + true + + true + + false + + + + false + false + false + false + false + + + + + + + + <_NETAnalyzersSDKAssemblyVersion>10.0.201 + + + + CA1000;CA1001;CA1002;CA1003;CA1005;CA1008;CA1010;CA1012;CA1014;CA1016;CA1017;CA1018;CA1019;CA1021;CA1024;CA1027;CA1028;CA1030;CA1031;CA1032;CA1033;CA1034;CA1036;CA1040;CA1041;CA1043;CA1044;CA1045;CA1046;CA1047;CA1050;CA1051;CA1052;CA1054;CA1055;CA1056;CA1058;CA1060;CA1061;CA1062;CA1063;CA1064;CA1065;CA1066;CA1067;CA1068;CA1069;CA1070;CA1200;CA1303;CA1304;CA1305;CA1307;CA1308;CA1309;CA1310;CA1311;CA1401;CA1416;CA1417;CA1418;CA1419;CA1420;CA1421;CA1422;CA1501;CA1502;CA1505;CA1506;CA1507;CA1508;CA1509;CA1510;CA1511;CA1512;CA1513;CA1514;CA1515;CA1516;CA1700;CA1707;CA1708;CA1710;CA1711;CA1712;CA1713;CA1715;CA1716;CA1720;CA1721;CA1724;CA1725;CA1727;CA1802;CA1805;CA1806;CA1810;CA1812;CA1813;CA1814;CA1815;CA1816;CA1819;CA1820;CA1821;CA1822;CA1823;CA1824;CA1825;CA1826;CA1827;CA1828;CA1829;CA1830;CA1831;CA1832;CA1833;CA1834;CA1835;CA1836;CA1837;CA1838;CA1839;CA1840;CA1841;CA1842;CA1843;CA1844;CA1845;CA1846;CA1847;CA1848;CA1849;CA1850;CA1851;CA1852;CA1853;CA1854;CA1855;CA1856;CA1857;CA1858;CA1859;CA1860;CA1861;CA1862;CA1863;CA1864;CA1865;CA1866;CA1867;CA1868;CA1869;CA1870;CA1871;CA1872;CA1873;CA1874;CA1875;CA2000;CA2002;CA2007;CA2008;CA2009;CA2011;CA2012;CA2013;CA2014;CA2015;CA2016;CA2017;CA2018;CA2019;CA2020;CA2021;CA2022;CA2023;CA2024;CA2025;CA2100;CA2101;CA2119;CA2153;CA2200;CA2201;CA2207;CA2208;CA2211;CA2213;CA2214;CA2215;CA2216;CA2217;CA2218;CA2219;CA2224;CA2225;CA2226;CA2227;CA2231;CA2234;CA2235;CA2237;CA2241;CA2242;CA2243;CA2244;CA2245;CA2246;CA2247;CA2248;CA2249;CA2250;CA2251;CA2252;CA2253;CA2254;CA2255;CA2256;CA2257;CA2258;CA2259;CA2260;CA2261;CA2262;CA2263;CA2264;CA2265;CA2300;CA2301;CA2302;CA2305;CA2310;CA2311;CA2312;CA2315;CA2321;CA2322;CA2326;CA2327;CA2328;CA2329;CA2330;CA2350;CA2351;CA2352;CA2353;CA2354;CA2355;CA2356;CA2361;CA2362;CA3001;CA3002;CA3003;CA3004;CA3005;CA3006;CA3007;CA3008;CA3009;CA3010;CA3011;CA3012;CA3061;CA3075;CA3076;CA3077;CA3147;CA5350;CA5351;CA5358;CA5359;CA5360;CA5361;CA5362;CA5363;CA5364;CA5365;CA5366;CA5367;CA5368;CA5369;CA5370;CA5371;CA5372;CA5373;CA5374;CA5375;CA5376;CA5377;CA5378;CA5379;CA5380;CA5381;CA5382;CA5383;CA5384;CA5385;CA5386;CA5387;CA5388;CA5389;CA5390;CA5391;CA5392;CA5393;CA5394;CA5395;CA5396;CA5397;CA5398;CA5399;CA5400;CA5401;CA5402;CA5403;CA5404;CA5405 + $(CodeAnalysisTreatWarningsAsErrors) + $(WarningsNotAsErrors);$(CodeAnalysisRuleIds) + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelStyle), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelStyle), '$(AnalysisLevelPrefixStyle)-', '')) + + $(AnalysisLevelSuffix) + + $(AnalysisMode) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixStyle) + $(AnalysisLevelStyle) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle>$(AnalysisModeStyle) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle)' == ''">$(AnalysisLevelSuffixStyle) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle)' == ''">Default + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle>AnalysisLevelStyle_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisCSharpCodeStyle)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisCSharpCodeStyle)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(StartWorkingDirectory) + + + + + $(StartProgram) + $(StartArguments) + + + + + + dotnet + <_NetCoreRunArguments>exec "$(TargetPath)" + $(_NetCoreRunArguments) $(StartArguments) + $(_NetCoreRunArguments) + + + $(TargetDir)$(AssemblyName)$(_NativeExecutableExtension) + $(StartArguments) + + + + + $(TargetPath) + $(StartArguments) + + + mono + "$(TargetPath)" $(StartArguments) + + + + + + $([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine('$(MSBuildProjectDirectory)', '$(RunWorkingDirectory)')))) + + + + + + + + + + + + + + true + true + + + $(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)../../Microsoft.NET.Sdk.WindowsDesktop/targets/Microsoft.NET.Sdk.WindowsDesktop.targets + + + + + + + + + + true + + + + true + + + + + <_TargetPlatformVersionUsesCsWinRT3 Condition="$([System.Version]::Parse('$(TargetPlatformVersion)').Revision) == 1">true + $([System.Version]::Parse('$(TargetPlatformVersion)').Major).$([System.Version]::Parse('$(TargetPlatformVersion)').Minor).$([System.Version]::Parse('$(TargetPlatformVersion)').Build).0 + $(TargetPlatformVersion) + + + + 7.0 + $(TargetPlatformVersion) + + + + $(TargetPlatformMinVersion) + $(SupportedOSPlatformVersion) + + $(EffectiveTargetPlatformVersion) + $(EffectiveTargetPlatformVersion) + + + + true + true + true + 1 + + + + + + + + + + + + + + + + + + + + + + true + false + + + + + + + + + + + + <_WindowsSDKUnresolvedRef Include="@(ResolveAssemblyReferenceUnresolvedAssemblyConflicts)" Condition="'%(Identity)' == 'Microsoft.Windows.SDK.NET' " /> + + + + + + + + + + + <_ResolvedProjectReferencePaths Remove="@(_ResolvedProjectReferencePaths)" Condition="('%(_ResolvedProjectReferencePaths.Extension)' == '.winmd') And ('%(_ResolvedProjectReferencePaths.Implementation)' == 'WinRT.Host.dll')" /> + + + + + + + + + + + <_WindowsSDKXamlTransitiveFrameworkReference Include="@(TransitiveFrameworkReference)" Condition="'%(Identity)' == 'Microsoft.Windows.SDK.NET.Ref.Xaml'" /> + + + + + + + + + + + + + + + true + false + + $(IntermediateOutputPath) + true + true + true + false + -1 + High + High + true + + <_CsWinRTGeneratorInteropAssemblyName>WinRT.Interop + <_CsWinRTGeneratorInteropAssemblyFileName>$(_CsWinRTGeneratorInteropAssemblyName).dll + <_CsWinRTGeneratorInteropAssemblyPath>$([MSBuild]::NormalizePath('$(CsWinRTGeneratorInteropAssemblyDirectory)', '$(_CsWinRTGeneratorInteropAssemblyFileName)')) + + <_RunCsWinRTGeneratorPropertyInputsCachePath Condition="'$(_RunCsWinRTGeneratorPropertyInputsCachePath)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).cswinrtgen.cache + <_RunCsWinRTGeneratorPropertyInputsCachePath>$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', '$(_RunCsWinRTGeneratorPropertyInputsCachePath)')) + + + + + + <_WinRTRuntimeDllReferencePath Include="@(ReferencePath)" Condition="'%(Filename)%(Extension)' == 'WinRT.Runtime.dll'" /> + + + + <_WinRTRuntimeDllDirectory>$([System.IO.Path]::GetDirectoryName('%(_WinRTRuntimeDllReferencePath.FullPath)')) + <_CsWinRTOrTargetingPackLibDirectory>$([System.IO.Path]::GetDirectoryName('$(_WinRTRuntimeDllDirectory)')) + <_CsWinRTOrTargetingPackRootDirectory>$([System.IO.Path]::GetDirectoryName('$(_CsWinRTOrTargetingPackLibDirectory)')) + <_CsWinRTOrTargetingPackToolsDirectory>$([System.IO.Path]::Combine('$(_CsWinRTOrTargetingPackRootDirectory)', 'tools')) + $(CsWinRTToolsDirectory) + $(_CsWinRTOrTargetingPackToolsDirectory) + + + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTEffectiveToolsDirectory)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTToolsArchitecture)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorInteropAssemblyDirectory)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorDebugReproDirectory)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTUseWindowsUIXamlProjections)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorValidateWinRTRuntimeAssemblyVersion)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorValidateWinRTRuntimeDllVersion2References)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorEnableIncrementalGeneration)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorTreatWarningsAsErrors)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorMaxDegreesOfParallelism)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="@(CsWinRTGeneratorAdditionalArgument)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorStandardOutputImportance)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorStandardErrorImportance)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorLogStandardErrorAsError)" /> + + + + + + + + + + + + + + + $(_CsWinRTGeneratorInteropAssemblyName) + .NETCoreApp + true + true + true + _RunCsWinRTGenerator + AnyCPU + + + + + + + + <_SourceItemsToCopyToOutputDirectory Include="@(CsWinRTGeneratorInteropAssemblyPath)" TargetPath="$(_CsWinRTGeneratorInteropAssemblyFileName)" /> + + <_SourceItemsToCopyToPublishDirectory Include="@(CsWinRTGeneratorInteropAssemblyPath)" TargetPath="$(_CsWinRTGeneratorInteropAssemblyFileName)" /> + + + + + + + + + + + 0.0 + $(TargetPlatformIdentifier),Version=$(TargetPlatformVersion) + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSDKDisplayName($(TargetPlatformIdentifier), $(TargetPlatformVersion))) + + + + $(TargetPlatformVersion) + + + + $(EffectiveTargetPlatformVersion) + + + + <_MicrosoftNETSdkWindowsDesktop>true + true + true + Wpf + + + + <_WindowsDesktopSdkTargetFrameworkVersionFloor>3.0 + + <_UndefinedTargetFrameworkVersion>0.0 + + + + <_TargetFrameworkVersionValue>$([MSBuild]::ValueOrDefault('$(_TargetFrameworkVersionWithoutV)', '$(_UndefinedTargetFrameworkVersion)')) + + + + <_EnableWindowsDesktopGlobbing Condition=" ('$(EnableDefaultItems)' == 'true') And ('$(UseWPF)' == 'true') And ('$(_TargetFrameworkVersionValue)' != '$(_UndefinedTargetFrameworkVersion)') And ('$(_TargetFrameworkVersionValue)' >= '$(_WindowsDesktopSdkTargetFrameworkVersionFloor)')">true + <_EnableWindowsDesktopNetCoreFrameworkReferences Condition="('$(DisableImplicitFrameworkReferences)' != 'true') And ('$(TargetFrameworkIdentifier)' == '.NETCoreApp') And ('$(_TargetFrameworkVersionValue)' != '$(_UndefinedTargetFrameworkVersion)') And ('$(_TargetFrameworkVersionValue)' >= '$(_WindowsDesktopSdkTargetFrameworkVersionFloor)')">true + <_EnableWindowsDesktopNETFrameworkImplicitReference Condition="('$(DisableImplicitFrameworkReferences)' != 'true') And ('$(TargetFrameworkIdentifier)' == '.NETFramework') And ('$(_TargetFrameworkVersionValue)' != '$(_UndefinedTargetFrameworkVersion)') And ('$(_TargetFrameworkVersionValue)' >= '$(_WindowsDesktopSdkTargetFrameworkVersionFloor)')">true + <_RemoveUnsupportedTargetFrameworksForWindowsDesktop Condition="('$(UseWPF)' == 'true' Or '$(UseWindowsForms)' == 'true') And '$(_TargetFrameworkVersionValue)' != '$(_UndefinedTargetFrameworkVersion)' And '$(_TargetFrameworkVersionValue)' >= '$(_WindowsDesktopSdkTargetFrameworkVersionFloor)'">true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_PresentationBuildTasksTfm Condition="'$(MSBuildRuntimeType)' == 'Core'">net10.0 + <_PresentationBuildTasksTfm Condition="'$(MSBuildRuntimeType)' != 'Core'">net472 + <_PresentationBuildTasksAssembly Condition="'$(_PresentationBuildTasksAssembly)'==''">$([MSBuild]::Unescape($([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\tools\$(_PresentationBuildTasksTfm)\PresentationBuildTasks.dll')))) + + + + + + + + + + true + true + None + + + + + true + false + 1.0.0.0 + Installed + true + .g$(DefaultLanguageSourceExtension) + 5.1.2600.0 + + <_RequireMCPass2ForSatelliteAssemblyOnly>false + <_RequireMCPass2ForMainAssembly>false + + + true + true + true + true + + + + + AssignWinFXEmbeddedResource; + $(PrepareResourceNamesDependsOn) + + + + + + MarkupCompilePass1; + AfterMarkupCompilePass1; + MarkupCompilePass2ForMainAssembly; + FileClassification; + MainResourcesGeneration; + $(PrepareResourcesDependsOn) + + + + + + DesignTimeMarkupCompilation; + $(CoreCompileDependsOn) + + + + + + + + + + + + + + + + + + + + SatelliteOnlyMarkupCompilePass2; + SatelliteResourceGeneration; + GenerateResourceWithCultureItem; + + + + + + + $(CompileDependsOn); + _AfterCompileWinFXInternal + + + <_AfterCompileWinFXInternalDependsOn> + PrepareResourcesForSatelliteAssemblies; + MergeLocalizationDirectives; + AfterCompileWinFX + + + + + + + + + + + + + + + + + + <_IntellisenseOnlyCompile>false + <_IntellisenseOnlyCompile Condition="'$(BuildingProject)' != 'true' Or '$(DesignTimeBuild)' == 'true'">true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GenerateTemporaryTargetAssembly; + MarkupCompilePass2; + AfterMarkupCompilePass2; + CleanupTemporaryTargetAssembly + + <_CompileTargetNameForLocalType Condition="'$(_CompileTargetNameForLocalType)' == ''">_CompileTemporaryAssembly + + true + <_ResolveProjectReferencesTargetName Condition="'$(IncludePackageReferencesDuringMarkupCompilation)' != 'false'">ResolveProjectReferences + <_CompileTemporaryAssemblyDependsOn>BuildOnlySettings;ResolveKeySource;$(_ResolveProjectReferencesTargetName);CoreCompile + + + + + + + + + <_ParentProjectName>$([System.IO.Path]::GetFileNameWithoutExtension('$(MSBuildProjectFullPath)')) + <_ParentProjectExtension>$([System.IO.Path]::GetExtension($(MSBuildProjectFullPath))) + <_TemporaryTargetAssemblyProjectNameNoExtension>$([System.String]::Join("_", "$(_ParentProjectName)", "$([System.IO.Path]::GetFileNameWithoutExtension($([System.IO.Path]::GetRandomFileName())))", "wpftmp")) + <_TemporaryTargetAssemblyProjectName>$(_TemporaryTargetAssemblyProjectNameNoExtension)$(_ParentProjectExtension) + + + + + <_SourceGeneratedNuGetPropsAndTargets Include="$(MSBuildProjectExtensionsPath)$(_ParentProjectName)$(_ParentProjectExtension).nuget.g.props" /> + <_SourceGeneratedNuGetPropsAndTargets Include="$(MSBuildProjectExtensionsPath)$(_ParentProjectName)$(_ParentProjectExtension).nuget.g.targets" /> + <_SourceGeneratedNuGetPropsAndTargets Include="$(MSBuildProjectExtensionsPath)$(_ParentProjectName)$(_ParentProjectExtension).nuget.dgspec.json" /> + <_DestGeneratedNuGetPropsAndTargets Include="$(BaseIntermediateOutputPath)$(_TemporaryTargetAssemblyProjectName).nuget.g.props" /> + <_DestGeneratedNuGetPropsAndTargets Include="$(BaseIntermediateOutputPath)$(_TemporaryTargetAssemblyProjectName).nuget.g.targets" /> + <_DestGeneratedNuGetPropsAndTargets Include="$(BaseIntermediateOutputPath)$(_TemporaryTargetAssemblyProjectName).nuget.dgspec.json" /> + + + + <_SourceGeneratedNuGetPropsAndTargets Include="$(MSBuildProjectExtensionsPath)project.assets.json" /> + <_SourceGeneratedNuGetPropsAndTargets Include="$(MSBuildProjectExtensionsPath)project.nuget.cache" /> + <_DestGeneratedNuGetPropsAndTargets Include="$(BaseIntermediateOutputPath)project.assets.json" /> + <_DestGeneratedNuGetPropsAndTargets Include="$(BaseIntermediateOutputPath)project.nuget.cache" /> + + + + + + <_IntermediateOutputPathNoTargetFrameworkOrRID>$(IntermediateOutputPath) + + + <_IntermediateOutputPathNoTargetFrameworkOrRID>$([System.Text.RegularExpressions.Regex]::Replace($(_IntermediateOutputPathNoTargetFrameworkOrRID), "$(RuntimeIdentifier)\\$",, System.Text.RegularExpressions.RegexOptions.IgnoreCase)) + + + <_IntermediateOutputPathNoTargetFrameworkOrRID>$([System.Text.RegularExpressions.Regex]::Replace($(_IntermediateOutputPathNoTargetFrameworkOrRID), "$(TargetFramework)\\$",, System.Text.RegularExpressions.RegexOptions.IgnoreCase)) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HostInBrowserValidation; + GenerateApplicationManifest; + ResignApplicationManifest; + GenerateDeploymentManifest; + SignDeploymentManifest + + true + $(GenerateManifests) + + false + + Internet + + $(TargetUrl)/$(TargetDeployManifestFileName) + $(MSBuildProjectDirectory)\bin\$(Configuration)\$(TargetDeployManifestFileName) + -debug "$(StartURL)" + $(StartArguments) -DebugSecurityZoneURL "$(DebugSecurityZoneURL)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ResourceNameInMainAssembly Condition="'$(UICulture)' == ''">$(AssemblyName).g.resources + <_ResourceNameInMainAssembly Condition="'$(UICulture)' != ''">$(AssemblyName).unlocalizable.g.resources + + + + + + + + + + + false + Resx + false + $(IntermediateOutputPath)$(_ResourceNameInMainAssembly) + + + + + + + + + + + + + + + + + + + + $(UICulture) + false + Resx + true + @(_SatelliteResourceFile) + + + + + + + + BuildOnlySettings; + PrepareForBuild; + ResolveReferences; + PrepareResources; + ResolveKeySource; + PrepareResourcesForSatelliteAssemblies; + GenerateSerializationAssemblies; + CreateSatelliteAssemblies; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + $(MSBuildThisFileDirectory)..\tools\net472\Microsoft.DotNet.ApiCompat.Task.dll + $(MSBuildThisFileDirectory)..\tools\net10.0\Microsoft.DotNet.ApiCompat.Task.dll + + + + + + + + + + + + + + <_UseRoslynToolsetPackage Condition="'$(ApiCompatUseRoslynToolsetPackagePath)' == 'true' and '@(PackageReference->AnyHaveMetadataValue('Identity', 'Microsoft.Net.Compilers.Toolset'))' == 'true'">true + + $([System.IO.Path]::GetDirectoryName('$(CSharpCoreTargetsPath)')) + + $(RoslynTargetsPath) + + $([System.IO.Path]::Combine('$(RoslynAssembliesPath)', 'bincore')) + + + + $(GenerateCompatibilitySuppressionFile) + + + + + + + <_apiCompatDefaultProjectSuppressionFile>$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', 'CompatibilitySuppressions.xml')) + + $(_apiCompatDefaultProjectSuppressionFile) + + + + + + + + + + + <_ApiCompatValidatePackageSemaphoreFile>$(IntermediateOutputPath)$(MSBuildThisFileName).semaphore + + CollectApiCompatInputs;_GetReferencePathFromInnerProjects;$(RunPackageValidationDependsOn) + + + + $(PackageId) + $([MSBuild]::NormalizePath('$(NuGetPackageRoot)', '$(PackageValidationBaselineName.ToLower())', '$(PackageValidationBaselineVersion)', '$(PackageValidationBaselineName.ToLower()).$(PackageValidationBaselineVersion).nupkg')) + <_packageValidationBaselinePath Condition="'$(DisablePackageBaselineValidation)' != 'true'">$(PackageValidationBaselinePath) + + + <_PackageTargetPath Include="@(NuGetPackOutput->WithMetadataValue('Extension', '.nupkg'))" Condition="!$([System.String]::new('%(Identity)').EndsWith('.symbols.nupkg'))" /> + + + + + + + + + + $(TargetPlatformMoniker) + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\..\..\NuGet.Build.Tasks.Pack.targets + true + + + + + + Sdks\Microsoft.NET.Sdk\tools\net472\NuGet.Build.Tasks.Pack.dll + NuGet.Build.Tasks.Pack.dll + + + + + + + + + $(AssemblyName) + $(Version) + true + _LoadPackInputItems; _GetTargetFrameworksOutput; _WalkEachTargetPerFramework; _GetPackageFiles; $(GenerateNuspecDependsOn) + $(Description) + Package Description + false + true + true + tools + lib + content;contentFiles + $(BeforePack); _GetRestoreProjectStyle; _IntermediatePack; GenerateNuspec; $(PackDependsOn) + true + symbols.nupkg + DeterminePortableBuildCapabilities + false + false + .dll; .exe; .winmd; .json; .pri; .xml + $(DefaultAllowedOutputExtensionsInPackageBuildOutputFolder) ;$(AllowedOutputExtensionsInPackageBuildOutputFolder) + .pdb; .mdb; $(AllowedOutputExtensionsInPackageBuildOutputFolder); $(AllowedOutputExtensionsInSymbolsPackageBuildOutputFolder) + .pdb + false + + + $(GenerateNuspecDependsOn) + + + Build;$(GenerateNuspecDependsOn) + + + + + + + $(TargetFramework) + + + + $(MSBuildProjectExtensionsPath) + $(BaseOutputPath)$(Configuration)\ + $(BaseIntermediateOutputPath)$(Configuration)\ + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFrameworks /> + + + + + + <_TargetFrameworks Include="$(_ProjectFrameworks.Split(';'))" /> + + + + + + + <_PackageFilesToDelete Include="@(_OutputPackItems)" /> + + + + + + false + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + $(PrivateRepositoryUrl) + $(SourceRevisionId) + $(SourceBranchName) + + + + + + + $(MSBuildProjectFullPath) + + + + + + + + + + + + + + + + + <_ProjectPathWithVersion Include="$(MSBuildProjectFullPath)"> + $(PackageVersion) + 1.0.0 + + + + + + <_ProjectsWithTFM Include="$(MSBuildProjectFullPath)" AdditionalProperties="TargetFramework=%(_TargetFrameworks.Identity)" /> + <_ProjectsWithTFMNoBuild Include="$(MSBuildProjectFullPath)" AdditionalProperties="TargetFramework=%(_TargetFrameworks.Identity);BuildProjectReferences=false" /> + + + + + + + + + + + + + + + + + + + + + + + <_TfmWithDependenciesSuppressed Include="$(TargetFramework)" Condition="'$(SuppressDependenciesWhenPacking)' == 'true'" /> + + + + + + $(TargetFramework) + + + + + + + + + + + + + %(TfmSpecificPackageFile.RecursiveDir) + %(TfmSpecificPackageFile.BuildAction) + + + + + + <_TargetPathsToSymbolsWithTfm Include="@(DebugSymbolsProjectOutputGroupOutput)"> + $(TargetFramework) + + + + <_TargetPathsToSymbolsWithTfm Include="@(TfmSpecificDebugSymbolsFile)" /> + + + + + + <_PathToPriFile Include="$(ProjectPriFullPath)"> + $(ProjectPriFullPath) + $(ProjectPriFileName) + + + + + + + <_PackageFilesToExclude Include="@(Content)" Condition="'%(Content.Pack)' == 'false'" /> + + + + <_PackageFiles Include="@(Content)" Condition=" %(Content.Pack) != 'false' "> + Content + + <_PackageFiles Include="@(Compile)" Condition=" %(Compile.Pack) == 'true' "> + Compile + + <_PackageFiles Include="@(None)" Condition=" %(None.Pack) == 'true' "> + None + + <_PackageFiles Include="@(EmbeddedResource)" Condition=" %(EmbeddedResource.Pack) == 'true' "> + EmbeddedResource + + <_PackageFiles Include="@(ApplicationDefinition)" Condition=" %(ApplicationDefinition.Pack) == 'true' "> + ApplicationDefinition + + <_PackageFiles Include="@(Page)" Condition=" %(Page.Pack) == 'true' "> + Page + + <_PackageFiles Include="@(Resource)" Condition=" %(Resource.Pack) == 'true' "> + Resource + + <_PackageFiles Include="@(SplashScreen)" Condition=" %(SplashScreen.Pack) == 'true' "> + SplashScreen + + <_PackageFiles Include="@(DesignData)" Condition=" %(DesignData.Pack) == 'true' "> + DesignData + + <_PackageFiles Include="@(DesignDataWithDesignTimeCreatableTypes)" Condition=" %(DesignDataWithDesignTimeCreatableTypes.Pack) == 'true' "> + DesignDataWithDesignTimeCreatableTypes + + <_PackageFiles Include="@(CodeAnalysisDictionary)" Condition=" %(CodeAnalysisDictionary.Pack) == 'true' "> + CodeAnalysisDictionary + + <_PackageFiles Include="@(AndroidAsset)" Condition=" %(AndroidAsset.Pack) == 'true' "> + AndroidAsset + + <_PackageFiles Include="@(AndroidResource)" Condition=" %(AndroidResource.Pack) == 'true' "> + AndroidResource + + <_PackageFiles Include="@(BundleResource)" Condition=" %(BundleResource.Pack) == 'true' "> + BundleResource + + + + + + + <_IsNotSetContainersTargetsDir>false + <_IsNotSetContainersTargetsDir Condition=" '$(_ContainersTargetsDir)'=='' ">true + <_ContainersTargetsDir Condition="$(_IsNotSetContainersTargetsDir)">$(MSBuildThisFileDirectory)..\..\..\Containers\build\ + + + + + true + tasks + net10.0 + net472 + containerize + + $(MSBuildThisFileDirectory)..\$(ContainerTaskFolderName)\$(ContainerTaskFramework)\ + $(MSBuildThisFileDirectory)..\$(ContainerizeFolderName)\ + + $(ContainerCustomTasksFolder)$(MSBuildThisFileName).dll + + + + + + + + + + <_IsSDKContainerAllowedVersion>false + + <_IsSDKContainerAllowedVersion Condition="$([MSBuild]::VersionGreaterThan($(NetCoreSdkVersion), 7.0.100)) OR ( $([MSBuild]::VersionEquals($(NetCoreSdkVersion), 7.0.100)) AND ( $(NETCoreSdkVersion.Contains('-preview.7')) OR $(NETCoreSdkVersion.Contains('-rc')) OR $(NETCoreSdkVersion.Contains('-')) == false ) )">true + <_ContainerIsTargetingNet8TFM>false + <_ContainerIsTargetingNet8TFM Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' And $([MSBuild]::VersionGreaterThanOrEquals($(_TargetFrameworkVersionWithoutV), '8.0'))">true + <_ContainerIsSelfContained>false + <_ContainerIsSelfContained Condition="'$(SelfContained)' == 'true' or '$(PublishSelfContained)' == 'true'">true + true + + + + + + + + + + + + $(RuntimeIdentifier) + $(RuntimeIdentifiers) + linux-$(NETCoreSdkPortableRuntimeIdentifier.Split('-')[1]) + + <_InitialContainerBaseImage>$(ContainerBaseImage) + + + <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifier)" Condition="'$(ContainerRuntimeIdentifier)' != ''" /> + <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifiers)" Condition="@(_TargetRuntimeIdentifiers->Count()) == 0" /> + + + + + + <_TargetRuntimeIdentifiers Remove="$(_TargetRuntimeIdentifiers)" /> + + + + + + + $(RegistryUrl) + + $(PublishImageTag) + + $([System.DateTime]::UtcNow.ToString('yyyyMMddhhmmss')) + + + + + + + + + + + $(ContainerImageName) + + $(AssemblyName) + + latest + $([System.DateTime]::UtcNow.ToString('yyyyMMddhhmmss')) + + + + + + + + + + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + $(Description) + $(Authors) + $(PackageProjectUrl) + $(PackageProjectUrl) + $(PackageVersion) + $(PackageLicenseExpression) + $(Title) + + + + + + + + + + + + + + + + + + + + + + <_TrimmedRepositoryUrl Condition="'$(RepositoryType)' == 'git' and '$(PrivateRepositoryUrl)' != '' and $(PrivateRepositoryUrl.EndsWith('.git'))">$(PrivateRepositoryUrl.Substring(0, $(PrivateRepositoryUrl.LastIndexOf('.git')))) + <_TrimmedRepositoryUrl Condition="'$(_TrimmedRepositoryUrl)' == '' and '$(PrivateRepositoryUrl)' != ''">$(PrivateRepositoryUrl) + + + + + + + + + _ContainerVerifySDKVersion; + ComputeContainerConfig; + _CheckContainersPackage; + + + + + + + <_ContainerIsTargetingWindows>false + <_ContainerIsTargetingWindows Condition="$(ContainerRuntimeIdentifier.StartsWith('win'))">true + + /app/ + C:\app\ + <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(_InitialContainerBaseImage)' == ''">true + <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(_InitialContainerBaseImage)' != ''">false + + + + ContainerUser + + + + + + + + + + + + <_ContainersPackageIdentity>Microsoft.NET.Build.Containers + <_WebDefaultSdkVersion>7.0.300 + <_WorkerDefaultSdkVersion>8.0.100 + <_ConsoleDefaultSdkVersion>8.0.200 + + <_SdkCanPublishWeb>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_WebDefaultSdkVersion)')) + <_SdkCanPublishWorker>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_WorkerDefaultSdkVersion)')) + <_SdkCanPublishConsole>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_ConsoleDefaultSdkVersion)')) + + <_ContainerPackageIsPresent>false + <_ContainerPackageIsPresent Condition="@(PackageReference->AnyHaveMetadataValue('Identity', '$(_ContainersPackageIdentity)'))">true + <_IsWebProject>false + <_IsWebProject Condition="@(ProjectCapability->AnyHaveMetadataValue('Identity', 'DotNetCoreWeb'))">true + <_IsWorkerProject>false + <_IsWorkerProject Condition="@(ProjectCapability->AnyHaveMetadataValue('Identity', 'DotNetCoreWorker'))">true + + + + + + + $(NetCoreRoot) + dotnet + dotnet.exe + + + + + + + + + + + + + + $(GeneratedContainerManifest) + $(GeneratedContainerConfiguration) + $(GeneratedContainerDigest) + $(GeneratedContainerMediaType) + + + + + + + + + <_SkipContainerPublishing>false + <_SkipContainerPublishing Condition="$(ContainerArchiveOutputPath) != '' or ( $(ContainerRegistry) == '' and ( $(LocalRegistry) == '' or $(LocalRegistry) == 'Docker' ) )">true + + <_SkipCreateImageIndex>false + <_SkipCreateImageIndex Condition="$(ContainerArchiveOutputPath) == '' and $(ContainerRegistry) == '' and $(LocalRegistry) == 'Podman'">true + + + <_SingleImageContainerFormat Condition="'$(ContainerImageFormat)' != ''">$(ContainerImageFormat) + + <_SingleImageContainerFormat Condition="$(_SkipContainerPublishing) == 'true' ">OCI + + + <_rids Include="$(ContainerRuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' != ''" /> + <_rids Include="$(RuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(RuntimeIdentifiers)' != ''" /> + <_InnerBuild Include="$(MSBuildProjectFullPath)" AdditionalProperties=" ContainerRuntimeIdentifier=%(_rids.Identity); RuntimeIdentifier=%(_rids.Identity); ContainerBaseRegistry=$(ContainerBaseRegistry); ContainerBaseName=$(ContainerBaseName); ContainerBaseTag=$(ContainerBaseTag); ContainerBaseDigest=$(ContainerBaseDigest); ContainerRegistry=$(ContainerRegistry); _ContainerImageTags=@(ContainerImageTags, ';'); ContainerRepository=$(ContainerRepository); _ContainerLabel=@(ContainerLabel->'%(Identity):%(Value)'); _ContainerPort=@(ContainerPort->'%(Identity):%(Type)'); _ContainerEnvironmentVariables=@(ContainerEnvironmentVariable->'%(Identity):%(Value)'); ContainerGenerateLabels=$(ContainerGenerateLabels); ContainerGenerateLabelsImageBaseDigest=$(ContainerGenerateLabelsImageBaseDigest); _SkipContainerPublishing=$(_SkipContainerPublishing); ContainerImageFormat=$(_SingleImageContainerFormat); _IsMultiRIDBuild=false; _IsSingleRIDBuild=true; _InitialContainerBaseImage=$(_InitialContainerBaseImage) " /> + <_rids Remove="$(_rids)" /> + + + + + + + + + + + + + + <_ParsedContainerLabel Condition="'$(_ContainerLabel)' != ':'" Include="$(_ContainerLabel)" /> + + <_ParsedContainerPort Condition="'$(_ContainerPort)' != ':'" Include="$(_ContainerPort)" /> + + <_ParsedContainerEnvironmentVariables Condition="'$(_ContainerEnvironmentVariables)' != ':'" Include="$(_ContainerEnvironmentVariables)" /> + + + + + + <_IsMultiTFMBuild Condition="'$(TargetFrameworks)' != '' and '$(TargetFramework)' == ''">true + + <_HasCRIDsAndNoCRID Condition="'$(ContainerRuntimeIdentifiers)' != '' and '$(ContainerRuntimeIdentifier)' == ''">true + <_HasRIDs Condition="'$(RuntimeIdentifiers)' != ''">true + <_NoCRIDsOrCRIDorRID Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(ContainerRuntimeIdentifier)' == '' and '$(RuntimeIdentifier)' == ''">true + + <_IsMultiRIDBuild Condition="'$(BuildingInsideVisualStudio)' != 'true' and ('$(_HasCRIDsAndNoCRID)' == true or ('$(_HasRIDs)' == 'true' and '$(_NoCRIDsOrCRIDorRID)' == 'true'))">true + <_IsSingleRIDBuild Condition="'$(_IsMultiRIDBuild)' == ''">true + + + + + + + + + + + + + + + diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj index 48e74a95..77a4d797 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj @@ -1,36 +1,92 @@ - - + + + + 17.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + win;win-x86;win-x64;win-arm;win-arm64 + + + Debug + AnyCPU + 2.0 + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {A1B2C3D4-E5F6-A7B8-C9D0-E1F2A3B4C5D6} Library - net472 - true - enable - latest + Properties CopilotTokenTracker CopilotTokenTracker - + v4.7.2 + latest + enable + true true - - $(NoWarn);NU1701 + true + false + false + true + true + Program + $(DevEnvDir)devenv.exe + /rootsuffix Exp + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + - - - - - - - - - - - + + + + + + + + + True + True + Settings.settings + + + + - + - + + MSBuild:Compile + Designer + + + TokenTrackerControl.xaml + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + Designer + @@ -40,18 +96,35 @@ - + - - Designer - + - + - + + + + + + + + + + + + + + + + + + + + - <_WebviewBundle Include="..\..\vscode-extension\dist\webview\details.js" /> - <_WebviewBundle Include="..\..\vscode-extension\dist\webview\chart.js" /> - <_WebviewBundle Include="..\..\vscode-extension\dist\webview\usage.js" /> - <_WebviewBundle Include="..\..\vscode-extension\dist\webview\diagnostics.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\details.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\chart.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\usage.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\diagnostics.js" /> - - + + diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs index e8459990..38f7228d 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs @@ -34,6 +34,12 @@ protected override async Task InitializeAsync( { await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); await Commands.ShowTokenTrackerCommand.InitializeAsync(this); + + await this.ShowToolWindowAsync( + typeof(ToolWindow.TokenTrackerToolWindow), + id: 0, + create: true, + cancellationToken: cancellationToken); } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Properties/AssemblyInfo.cs b/visualstudio-extension/src/CopilotTokenTracker/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8f59948b --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Properties/AssemblyInfo.cs @@ -0,0 +1,16 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("CopilotTokenTracker")] +[assembly: AssemblyDescription("Shows GitHub Copilot token usage statistics inside Visual Studio.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("RobBos")] +[assembly: AssemblyProduct("CopilotTokenTracker")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/visualstudio-extension/src/CopilotTokenTracker/Properties/Settings.Designer.cs b/visualstudio-extension/src/CopilotTokenTracker/Properties/Settings.Designer.cs new file mode 100644 index 00000000..eea8421b --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CopilotTokenTracker.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.4.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/Properties/Settings.settings b/visualstudio-extension/src/CopilotTokenTracker/Properties/Settings.settings new file mode 100644 index 00000000..049245f4 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Properties/Settings.settings @@ -0,0 +1,6 @@ + + + + + + diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.dll deleted file mode 100644 index 7f3045c5f92802714c266b45a330c201df4e2efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46080 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

fwg{o2Ek<2EfNRJH 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 R{O#?Rk^lc?`M+8N{~uhvD=+{6 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.pdb b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/CopilotTokenTracker.pdb deleted file mode 100644 index 37ea67cdf8a300cf3875651cefc2ca7d960b1313..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18936 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≈-81LB0(6 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 a|NPc+V4%gOi34x@t;O(r!T*nQ;C}#!^*Z$c diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Bcl.AsyncInterfaces.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Bcl.AsyncInterfaces.dll deleted file mode 100644 index 6031ba1e94835abd1d276b9700394dbafeb2b46c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26904 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

Z~tDC|6_& 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 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Core.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Core.dll deleted file mode 100644 index 50a9b506b01b5b01e6672b5c089d9423a3f3b028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567896 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 {!iy;pPSio*!mqU*H8R= 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 gT`KqXj3!@k6EWDe?`S8&ID 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 Xzs^XS{D*c*#EY`22ZHGTt@8f?qdF?R diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Wpf.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Microsoft.Web.WebView2.Wpf.dll deleted file mode 100644 index 7417ceca7c2fa6b5a14c12e342f16927f5666c4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50648 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 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Newtonsoft.Json.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/Newtonsoft.Json.dll deleted file mode 100644 index 341d08fc8b7ea5cda1f12b3d2756b539e1f94ed0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711952 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

0O;K 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

D|0>6~5=A-sN(m`K7i$%JNQC>RPJqcXmv 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%0DXabbnX(CCbe`!iZ2g0u|Gex- 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

(T}H@mdam_OzOC!_o9?4{p$!2lpS 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 DhO?6O diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Buffers.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Buffers.dll deleted file mode 100644 index f2d83c51416e90dbc31154545b16df3b3f7a7909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20856 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 VSA1A~Xq)uh0^wu(F;p2s{|B2kf;9jD diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Collections.Immutable.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Collections.Immutable.dll deleted file mode 100644 index 7a5b6552bced56764e6f36ef5d6dca2d6b8de648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198784 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 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Memory.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Memory.dll deleted file mode 100644 index 46171997966f26bda11e58586c51b2817bde5cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142240 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 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Numerics.Vectors.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Numerics.Vectors.dll deleted file mode 100644 index 08659724d4f8534ee97a543e93dd6d3c702fcd15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115856 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
A56h=o3u)Ar^3va&BemI`C*}HC8>xqw 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 P)6yq*$X=&d&4~X8FD<25 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Runtime.CompilerServices.Unsafe.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Runtime.CompilerServices.Unsafe.dll deleted file mode 100644 index c5ba4e4047a15b3adc61340c781307d9c6e89413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18024 zcmeHu2V7Ij()gYv^bRUTN+>EKgcA?}6{QMDm5zcKLVyS)m;@;*Lgb=Yu_1~|v7lb; zT~S2E-g_4-7Pz9qwd*(MB!S$k-gm$M_ulV)zwiAIp4pw*-PzgQ*`1v^F=%utq9TN7 z@P7M-&>l#M$DM?K4GN%G(`=t6+M#mRd=D0Q);uDWE2L)%_$dNb2A$2~@%SQoB8M)> z;?cQ0x_3x8J%gXbVQ6TmT1i=l`XCgDQPINyAxqX8N(ea) zA$3SfA#W@#`dbOTOLVfjGT?r44H+U%jtKB8y#PQNIaZKc{-Hzf41rL<1|lh&J7g5$ zHG)^}aR=!c0!}&~DiX31G81z^@`Xh9xFh5#%gfR&#Js{o$VNd5$h!|hLv;{RA*tOU zlrEXtZpx2y2@e^!2i)nG@^zo-qMNH%UdnN3(w{PA!Quw8Hi_^Dp~hubVA*Thp2Dx z1HLlapV|}TAMusaF;YEAzEF`0>q7$sMx#SfRkR_-DBB7Yvd{1Ft~Ji>o&!?%Nm(T` zb9rq*WeR3~NrF`YunNXkql`2HFHQ9rRi>0d(suAkVS^iR^|`y<-_ z9H&ww<+9@p^c9n=2eHE?574MTpee{`UF+VfnQTm~iA*nhk$Ne&´RVDkZYh5I? zu@o|;=+DuG_3hJ3fB6(xFPhC@DV-`oO(iJNIXt8-z=A>v9Vmmh4$j^>5GX9%JKSyW z9L;9q310gmR*#waw6+IuL*9eqSaAv2d_h_qGfo)C5{S6TEVf7($4?v|7oIB=aWWWT zSv(OpgTwIRXJm5IIf8JGU?P{z5i%lqLRK;-j>i!V9K^H>*g^PX~Ag?3iUfLN2gT7J;%`hKmGTUW$;YaR#Q3FmslX z;phtF!D1mx-$;LNNFM_p0~2rQna(HrA|99*EV?H}S)~UcANx2Wupz`e5Gb*3MBX0W zV0g9Q^@5k6$-kCT9A+CM=tN5!I3*QPCpW1r=?;S=mhIBw2CqnT0E9wTLGh>&t2Gb(CZ%N zl9~;ad9cf^rPy`A6p?!uRt~EaBgLLls$rf)UD&U1%9Kj6mz14I6IDsEPRc=8g)LI- zE9Drh?@=kHKs^oEjV|m8(nGCM%n-_YA)19mGDGSWWQdHVm@V}#+(z&&>QQWUc<+D6ymr-;Z}f z7oCD~|C{;6a`ol&|8qXafinf2Bl+JY^AGe9k>MTuNrRfl9>LyL$geB$nkfvVJ)JK~7N>hJn8X!%Bq-lsW9VJb}rD-Ij zI><>fIYWc^Nm=QfVdx)R(valV#u9P)Jh-8;a>$&}Lj-rI#4Hg9G1wx$07>t7L}jRu z$W7;pa=Yuu`rss|bJzqYE)Y|l%9?8vSpOs=cRSv zDvkVwVH{Rc2rpf3c7kEyCUX3FB2EfN&@G=&Mj|IENnYY0E?dAC@{>j2AtZ4;c&zkX zAyl7gR5aBNTCYq<)}@#B@sN-PMT21XT;=b3qCL z3Qyx^`t!IV6wb}#ge1c(X6C}(o}Gpgb4464K8&lI*3E@zBB>@6frI0blqBE?g{X_% zUDHE|_|RV%CmBVI5b!flLA{A7lix>#w zkWzxP($fjKWod+f#S;?SZ$vr^TqTbL{BLTMteQ8MmBQo003)aKq52R3Z_U!LeZAyAl1U45Gp~IXhx(oZ44!i3q^@WYUF13zNwB5k5HTihWO%%_! zd-6Je>}IW_Wo~_qXX<)!4Con$77h#=eQ6=N?4y)rff2|MUOYmkgm4j*UeN+pCLCiv zIcyGT0wPic{A?kngCX@n5Fv12GMpS7m=NGo#gGC)f$RVb_5ITk_mhwXgf=nMlM(C# zyBszg5&n?b0+696hSa1n4npN=5dt`wNUFauLcq<)kfRR7kp1EH^sXb2?!^~m^5IAa zv&Ep(L51n$Mi$cH%z?NGCy9ZO5p@2;76_SP$f&F6@FqGTBfU#Vh=>r15BDuhTN$mB z#-9nwK_X8la^F9)I5k2EAf0!5dJqfF9MWiTIHUm~+I;JS=BH;m8$ z+N-aUd$b~YbGj$AkwhMcOBoR?iLEdHcmsj~R~8ZgA1)lW9N@`A$zb@1$BH;0z-kMi z1`i3LoP|VCj}MsS*+MgbDj3KFHVR63DCGy7I!ONyhjB~(2BJh_4xpcY(AEq1WxyW? zT8p3;1l)2V6#*p!ytXiuMV4^MI)wK{)X$X43l{;XCqNScXG2a1Eh3@55M)gToOl8u z{v+!rlN?Jf%p8m4N0bMVZ3V!WF!{;QGo9>30KM?Z(RYt}A}O@Wr^|5>0#!h+ zghUhIG6_8+luwR3L|T*3PGa1$IV3Pb>;Ad=CO>|6I0Z0>0~4B+1X|375qHn}kMwR6 zjD!Jod|=lhBnI#E&+Y%b^0IZuVXOm@3%Twbh-I+hWx<~_{BdBv5haQ6CIfUN%UuBy z+L8=$UXt6CH^=_Vo+Sb7Gp5yLii*0Va}I zRR<_yG)(MF!Dv;%cp$DXN72Gns2HlE)ldo$&iqqb8oerW>D$iTuRisAit&|q4t5S# z%S!2SVO&$*q8GMHEM~l`5^J>MVnrSh{Z??KI)2aSa0kx>to@z8pmey@^J5LF*S-&6#N^&u zu5w_++%qGcL$(%-8sD#zT`MTk@6De}-|IE9Z0Y#c14;LyqkF`?q1@l}I`FXlB89_! zn{Q>+c#d0LwYYkQ=KP~x%{rB>+Y>2k%hgOXQeS-DIefas^Ho;CZgtmM?7kKzES^of zFhuprizc%j_Ej^>l+~7u%DL&XzNy+^*=_#vS>u`8-&|dwy4(@%eq8-3)cEii!5O`G zVG85s290eld2p~WV1gp``MHv13um!*?NDQC_gb<=bI05Z2b*s72rON#;uY;S(SNg> z^}<=S54H;0?T=J-lJ@$p7}<6-g3GKJ@aekQZReXqc@}A@)BJQ2#Q>NS6f&Cy}V|wVYLXx*iG8#iiZ-#Iy8UWceM}h#q5vw zBXmJcPtK1E$s_`E;Kd2)p;;V(h))mWviZzjcn_kgf}X~}K?5Be90w4ItD{6BOG2W8 z9)7%}C!q?L#T)dUoh^1|tUHxOS&T;zU7FE?@BrMu%D2j=*eg{e${cKOpPik}$moio zvH2PHnQ2^prqG@(NVkW*1Dgi64D1$Svm_9}4tKW0T^LY~vt(n&Fj^!Yj*pVzIHlO< zA9eu468?iOM7TO3xE_Xmqfy{0|Hrd~DyCp4X4;3Nq5-v=nZAqa^w8?P?C4D+)Cay@ zG|Y0t!P)!6!*eS>*k4jvY&y*rQ%zmkn6~?7%3Ip!sL|U}TrNMUnXCPDm)SYjb0^lk z$@bYedQT0Swt2|1dG|(JwqDBIbE{y5!1#bysc!4WVNCxaz8|OLSed4Rka+;un-QdA>||bK6+AvFF;!ubw=ZwXy&3 z6@KfU#w(4(Cfl&UC6T{u+hv+v8%CA292Uq2Il{m_)6a z5lQhryiH|`W1mvyJW)AwY*1xdBp#c$R^`~zszGT1HN7Wy7%kMw+OgC3BMlcT<>6w5 zM2W>wWoedPBCiBgd1X-pLsK~8UviRzoglU(Rj+@yr3vH1uP41gzq!d=HpETo9$BJP z2)2rHyKD|v9%tOe0e5o6T?v~rh(wtcOXS^L8SKX^)#J*;iq&i-bQ_k8dwwB#x_l55t z-BZ%I8kf7qzkiFy!79D%gNxi=eR?!tw6pjmhDZvU}2+S$c4cT=FliD6s7ej+$@o)aQsR zFKKG{zU5jQ4K0gKckH7U&v}>7ej%)3_M++ahs;HN5)7<&o#|)o(x=>YADw=URZ zY+1WLxs_!${(-gsii8;t`@~;14;U79bZ7K%D{A}2yfOAyEgxmZYmFL_z5P9UP+vz8 zC)_^NbNhkbS0V#iT&uO7Tl&` zI`@9-n99wc?`}zc*tn!{Qroq*fENG$wR+ZTYp0|XJe`@Cld#Rc=z8?>xQ1+N>(^}= zN37@B&U1GTX?*aDcgazez@{r}yzE7b-|^n(&|_@%;>RssHY~)k=+>4Q`uA1_ca&|Z zA5oQFeyRD|jM-{3bJzyv@Hwuns3N^o_QYs#??ZC-?}x_7u&Y523QgTq6#^<*;O2QD z5As%IqD3Rv6ysW5XTJhY1rzWGGbgYcOktLK?d_ou{NP3HappzKl7aYWiJ1dSgojiG zRRt9LORW%CtMAPmY2)BG&&1a^(h|YGgH6j?85L+JXnT< zvGe>ZV`tBnS-QXAFTx8e3E}Cq!XZ*Ca8hc;PgBxU4%0*30p)x+9Et5}z%! z&xBwxOOVUX6f#mp8Mu2F0}4LS)PZgy7bi&|<4);hR4NzZd_*jah`bU0wm2);Hx%@tX4Hh+HGaMi#+yTQU~&60RdQR$RfBSIr@s4tj&$tb}1?NHBIVHdW1NqaO*iP68} zsax+gS9Y3YFLHhOJn5vjTTY(kTfHf3OGVS>be!%>8DVpHruP2T>lM^1+EPEJG8R|a z47W*(@n@TGwOzRTR&(=G>m}tunr>=u zluNFe9dR&t*xqD!Zp_LZ{;sOWR1Y89xarBZo40$;808b=;xM6~(bTOS{odcR9Zctz zZ;LHSjfpN9oin$`C#5uV}8#mKD85{xZ7}69f=Q1EIwkw z9<-$R{;jv~-}I_p*6+dDHA^o17SHy0G)8Ip^kItGiWe2PW|{Rk$YSkmzjLfN?cjZn zeGxR;(HBlWppB>{3llWnP}e zN592pzkc$yEa+VMz9DUQz>5~Uc2VaX^?st5z;q}`7lijO2 zf-5gy4YgZj=6&p71P}L=Yp%{5h&xpEDA4^r{8(*NVDPg&Ex+x+64S(3feH2WFLj69 z3=9vqt#zqT9#b*(#-q~bO=s;?Ua!U@HO=daj>h&qqqJml(#lzlelGL3S@wHsqPoXK zdv50L8{(+wlJ-v?WidCec3fNXCN#CQIreeOgagGDrJdtKJ%fw$Lq4`ezVZLC^=UG1 zOrqM+t*3(L)xBxH5vb2v`+CQ(nHk)I90QlhadTgnl@1>DspgIL!pSeA_l=~eR8F5- zkrO*6Z=F`fvau;q6^*HL4^2CH+_SD#UrGN-NmjUi#KM*L3nF?AJa!^3yESpky%nq0 ztvS1JaVOp8ddH`psh=nP!fY^4Ri9U~-`$~o%(>avj94#r$x27l=T9^0CtRWpTf(S& zrW$#6L&MEQy&uxeE;r<8d}V}qF|6_<&pL#a>hY?!g`d^72>aZrYfPV>_^XAV*Q)!!H%` zdAemjO*Jih%$V%;aWSocBK;!>#?Q>=RtXlJ`L zgb2mx9t6@p3P$}t6eGq)DXPh|P#dB#V$2=Zb|{!s7uZcw)0@Ox?Y= z>TUnrqj~*W=i?^7R23_6kI{z? zBcw-!htqw+g9m%~IC$ClI68RRF+E0jF{SLN^6VnuSK)TyB34EwUHZMWN~{U>Q)!v-Io)qvd-(wx*_=tLGGY8R>pdzj8bMSsi0b1gn0@=H2Jd_qtjdsG|PW zr#H7_)12{xovSQ7Pt3_0ynbE$UiI+&BjQv&aXTmSTjjs`^4j~iu>l6 ziEXY}ovUnle5{t*$h8s9(MhOe>*$IWDxzV(_kc|`9f$JEikWJKaolG|_y4q=}v2>W!! zWd7c57_=337bq$b_QA=p50ktJkCxpe;U-MPkVndJxCsyYnHeMEO5Hc%pYZ;3yho21 zK_8krt}5$-s{E(z3xQG$CF_^O0EWWG*O^rRuU@$(*w+g(3oPBV8C(uU4;To|=* zl*ne*=dY17=+-x{TbMd$?T^{%Rb=?GSI2u3->mtgw71vjD|Ku$xp`f0rC+qtw2`Ov zUbN;+e(%})neMO$om)Of-1}ylIjwQLM;{2gPk@6jRu%+NDU|$&9Lk?2>wixWggp3| zI7B_*Wre~1* zsEb<56^Erv?MyyIE%VNQbs^vj@5!=LTi3nGvr%QX-wIZoziWoF)3Y4oEzg&p9ok~= zy|1?8PSSzZSR-9!Vb0ml^@mP+$B*r`98(Cf2$G#tPvN9`_?IDoA0AErln}tx-=j{? zdsY*dn0nD|QR$fL=av~9{huCsT`s!x&>Lju;P}rv^nSt{T>mQKoP*!aeWQUBRk#2z zoc9OszYuqmoqyo{GkZm!>%_W1a@-%sTsegN)mWij-88+A?Dyx9Kr zyS~sKWL7$i?Dr*dv;EgyPv$!APfS>LJKFvE>vKz!OJ{!@pE&hy(@3@XeIL5E8jhU6 zUNOl$2D(SV4RjYG)*$qwKWd%(a&emRdHDy}+gCP@C z?#GMDEtFZewuGAU54?VW?zb?NRxcdhl?b}0nR23W7@-2PgTl*27VMCNsDBo+GTrw|ne$u*}C zU*5ZdCWQA&sZzz2iDp!#YI?OSj}=$RUrj({YGENNnxES@X>fGe)ZoCzXqBPQADKV= z_;!l$(UIVC*G#>0wgz`+?yFBJEPbeOV7ZIom6!ReKFypZv`w2-;$If}s(hLKnGC(V zt{SJt#BO+Dsc-Q`d#rP6J?=Es$583pipl{oYFfgEwl|A&_uWi$NS-t#X58oTrjM>? zxIA!Y?{NP;R)Z;~YJl&kLTdEFfA5Ntv8*4tuJW-gF*Xu6>WVl(FiYbPF@^8qRq?Uk zc2`^zx7r?0&@Yd~K5M%-{a(^2i1O7^+a}CVt;GvJ$}ynWGYenfg)MmDW4!PHjlRCr z=*8^Z>W02%Pp{kwZvVh8J{a8)-WZt|5>?Q6JM{)$SpL6YEBtukAXxWouGK~KYsE3@ zrS^c+Vbi87VTJp*Ur3F}O#kG6b#iQ|yh1`;0D>`S>9x?<>I>AKm)LK74&oi+5$o@r z^XHB%S9lau+%Wyh8$;^OCoX7n%cIFPr6C@X%GvZo5twaSLAxmX@Q~CiQ;y&3c%)-x ze?|GN|Gq$txKRzC&8J-*>7(db?-j_kvd{_$AKRR?r}SW6<9;UloA|-xz8`j_M6Tei zd(f=VhE-OtxIOL)r;>5AsO`qlmW4wt#4|=EK0R70cqLMP-T(Epr$csFpRD~B6U?it z*IjiYkIvF_SFL~f?$xZ}Lzk(zUCVdy@>s8*r!)H0D-{KHkBj$O_rG_X sgb{9K#j|kmwXs@qxw(vy^6;@AzjJ5N!ov=`F7)MpD$l8B5&@I{0va}jJpcdz diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Text.Encodings.Web.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Text.Encodings.Web.dll deleted file mode 100644 index 3d16c7e9d86d760e037853648c40c16a1ac9860d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79024 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�yJ?GPN7KE{^6q9c6u=B9yWE2n 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

^?n;Ijy6fy%)t+5w-er%o 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 U#}n8P0G>|+ES!#|3cJ(&3*b{xUH||9 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Threading.Tasks.Extensions.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Threading.Tasks.Extensions.dll deleted file mode 100644 index eeec92852705946904d0e2fa0443d454075781f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25984 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 X8xk??{<$qV(@xwRy_&qqMCktjQv_f` diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.ValueTuple.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.ValueTuple.dll deleted file mode 100644 index 4ce28fdeac6da139573ed0ff356c2df510692cee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25232 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�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

D^p3&BfPGqz*qjxgei_sa3Rx;X&(NT<6 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 diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x64/native/WebView2Loader.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x64/native/WebView2Loader.dll deleted file mode 100644 index b3e5e4e4c6bbc775770d94a157d46f8060b0328f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165336 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

W_?-u{Wx*wG{#{*8`UEfk z&aakiHIi)xFM?jl2QOs7B{h<726Tgb1G+&j&<*BAwQSZM&88yLYP6Yf7~I_=R&@-+4wm}RP5%cT5B~uZ&v-alFFh3lt%GGEPAwi zrp5bo-mPviILg6);7D!W)qak5@L03wm-#%Mb5B4Oj3S7~o@H7{gkzt+PVr=v#_=HJ zjxhWY44_(BtHD#~oaypc&PGd8lJF&)oG997XvwvY8;%NRR? z9k=nh!%^71_!#~Mo-_uOgoN+*|FHKSa8Vua-uPJr#e%GzSmN5TplfVcIENL`MImAb zH30+^6k$VAOpJnPM2QhoP5C9H8B--4Q?X+zreaJ%O?1_i1r@Qs-)H7IyUWHTzx)30 z|K9ug+;?F1Ip29^o~dWfoSEm$MAH|XGkOO^4XldxAOB@aRB_in7#w14^vmpy3oHdk z6-V^OM{%;}HOsyxDa{n`K6y7%h%W&k;PeT&TJ}Yl4VL{8 z^6ts7a@O!=#eX1oRFITAd>?j<79FX618DyC9$b3o3O%PL4bXPNjQ2K*kmC~*{8 zy6J4_(#Miwll=|!#Ew@P>3wZ#XwHAPN({D0L?LIo-= z_|N+uh}{nI?;u@X*KP+9T`DZ+tHYaAgs%hB@8NQyP0Y_>Z6&nPF`s-tt?=0M zzcA!AA9OnVBC2R_e^>`>19pP*-~$g8lQM^(`=AjJ)I5J+?de+Sg~ zAdvB+ud{Q1kZ`=t&i&4Eu}N(kapVcsY7gZ0v96DCkfwbPs~xKt`^KY|#tZd(C<;CN zu+;D;JsT(iv$ji!{oE5&3?COe?0-N{k)9%lKSv?rhX2<7rl_3dKJb4UJvesWMJL$8 zzUV>fMw0O98GL_=DO@}O2jCb3M;ss)-o{LhCb*d4f+NPl+n{Z=YLoj4oRFrPRsMlHWz60=o!#PV z1D%_b@ao+L0&^Yk>7UcYAA#G5{Rm{4xcvWbFOSgaQf=LJ5bhYLy$OBEaGJD#qjxE4 z3sdS(H>1rw>5S;P!896!-qx*NJqonnbK`4Pe1m`8ZnXBn|j18+P`t z8HX=dEoEM(ZzSXxS3{@?PRIjl80YX``v($dDf7l+XT=U$MHyIG{PmYdEgPx_er@S> z@O1x(4dcBn*!5<^oTfNt@9H=&|8?)dTj-b{{8ztDVaHVa7ruZC|F=#@j{O50%|-i% zeSZ2znLNZ&F)rVK?Rt2?*RV&loi$C154NnLJ=6#8iG{Yex!$;13A}bK_1a%=*Ya1VApXVhy+NQtFGaLo+>fpoVyh zYY!20=ROPT=tC(y!mj2HrVibVeUh4h2IBjIf$PL~N#Qi`pk*a&0*EDf43vF_A{0FV z_2Ua@xZ(Lck}Jc73Dr;nYrySTTqjNuJt@B9^7{kdBw&A*T`0Y345JoZ>u?UD3mcl| z#$%=QAh_6x?8-81W_9jEx=x1HCz7<~E_g~tX;{QjPUy?sQ}+dXHDUPjIYwzn={iWl z=2h0>udzRih>f1ZvGR+r7*ZHWpwgkVIw+9yd|`+ zpwh*F(RRq|?X03Fj1j&mCL;X^MgCpY2;nwkmW zV|{|IV9S%)csSsW??EXzf`ij5q#m&NCU93hG&K!5!%4S0L40jVb(2S0%x1b0r=#SF z@ePe-vEc>wd$x~645tTC+;}2W^urEN0w{bS9?p~s+8&vd2F`DmPd?tKP}IqFz8RbW zwJ1FM=$k>j&&acD_`5;BRIFH$PWzON-p~f~-ihyf=&hl-y$d}gt53If%e?$Pa4@7b z{ywlUGC=6LB8?W`_4tN$y`?K`;5titdfjjuw5M216=847!jNJwRJZ?H+TnG9e_%Ci z4HRO&9KOKnzp`S1|D|qNbtjH}f&Yx4FAM22!9m0gH(|%(?@pAmk10sr#>MZ_ot)Q0}frk2mv}+ zMSyueF@nZcA&E%Ft%%;(CrTv67?cbOcL$PG3xNl4eGu1VkHVgUTOXrLc2J<8PTm*n z4}OdtURq5ljr|45M*@u_u)0igQTd0v$?)@bgI@zTD0u~b!t#-^xX)mJ1dlSc6Bc|| zrcgthh3I)5)(dJp1(6+oD}Z=3C*&#nYba)23~Gr?qSc%`SqtsT1tqyRA{BlM;4Qq^ z=Lzua8!&u5ZFMUjzf{RxOWbtg4seZ!tYdvfgN=>3$NHG);xlVYpNY7jrc|+@#4U~f z-NVtGhE?o6l3g`?&yfo&adoNNK=|Ez@%Wj&7Y+ygk&o*OLxN6#`meEg0Ui9~H@Ki} zA2Sf|aEC7B|I)lZPZPZ`WW+$^)_=`ClI!OuTn~5aK=erV8N=QqUmc*hD)$~b+$SD> z5vETk3bXoEZryuNp6-xB{%cSB-2#e6yzgGXGxI*$vojm58x9Xp$TM*}_g*q~d!GDW zG6vlSy60%^^WBR0BB(nqP@FZwb-wTx2XJsl<({KQc6es@zA5qJ;io}&j|bhY8} z8@LVcJstZsSUY@5gx}a*doMWaxddT5Y!UABd`gL)j;-2z>DG_n-ltT=XbdWsG1u-r z6MF!09^7;E|TaYsSF5Z7PEo!Wai_Lsef=N(5Oce_hSn712l zHSp(md=bvRG-VD=Zo_nti5 zVGe-{fxGq|yco2Sa&QriF%&(mXdk(QkrTgfR*LrMk7U>{HX;Ac67YCmAm5eJ_b(7; z|D>^R=xh5t40cXGT;$UQwa@2pA-X!W`PV7bg9vrnoAeIdV#2e(2L>6H*SPy1px|sH zYhh13pt1K@@gC9wia~X+=?xJ|@gZE^-Ma{v?^Ila-mn!fgLn5X0miqvp*8ri+VK;M za}7eP?7cC*qi3DTes77G>uZL`GkshMDdBjh#yK-$Oy)7hAl<9F!eiZwFVye!&1oOH zrhd7<7&O?EAh7V*`O~w-mPes$E7$f_3TixX}9j2JE*D=N8%i@&k`S zf_L?_2|O?C>I7cP>~;XgoEAdO*4{$+xFVd|6Telq-wqS9Wp|)2C_MIu(1*rnxKLxq zP!S(SBJpBV9F);aY=wvYhBl@iz$X|r2;|@2hH~-o`H{K;`mFVj;yO$>i6YyP-yIKP z`rxeE?hV<+(eX4Uuu>U>a=BoF%ZgG&5!sKR&A>Hx8OB7Rg?Fy<%575|@nK=jG4OM@ z7gjdG$FkwY5%J=)G7^O0D?;OQ!%W)50fiqUr_Zcj$js?`=q#?B;n;%#uQ7-fdiFBT z;?F^E$t<3^ki45k?1A{j1I2z0o#^SV7>IpkK!z}tWfeKGNBB5v5+4ha+T`nt(82@X z=v{?EfKob@1$~a@d7^;W$IpmS4-H~{7GU5Qfy0JrLiMTj-o48eqY^;Fv|g1c6K@QM zT8*vD9W?BKzX7_QM@?3|YtYxIVzv>DyD!4`ZaS`Mgn#%>i0cFh(jEi@KunP0tY>_z zS@>%zs>SXfSZgUhh-Z<7RL}=t{Ab8bgMw1E|7<+M+Qd}hP;b!C%Kf1gJ&^qUp<)BZ z(?NI>2}Snl>?=_?!4@&t#WmUky{7ae-*{i}26ekBa(d@Qp``QdU!oNK1NZp{%0qTj z-9}7E9L9t`5g2Y*c66cer~{Kd0&hyl0PXHb#_f4j_^Yq~D_wgRd(-)6zPqWg{9nN# z61)9h!DxL4#>>}wINcWb5B9luKZdaF>8b%&OIy@g{evp;GhinPNBn{Gb$=)N@xlCk zZh$@YUeY3^Or36NpDO^B2jUa^qw;$R{M6O8(r;T+ZTRl_X4g*C>Z7DTTzn(wS>!VKR= zj21gXy1gJ5L3hWfJ{VH7}?5LzsuVReCv1l z5{NJsT3dP7?=m`pSN$%N6Bvq{>`)RQsn^aN)f%Fh(Bt<74F$z2z|LIU+YsT~gf?8k zh3TrqUZ*=rjLCQ68&2bsQsQ4GQgEDhwA^{zr@+)*p%29)jLn50Y_$?xXf+uM?+jJ& z6(QW;IYJFA29+3LE|ztMt$;|BH39pSMi_gJx8O64#p4s$+jt>|&aYe_6Jvh^Eeo$iIJ8@A?16KeU&AIFB);C_ zYs~RM$33hWE`8-?b6k4M%NDrwl9w%UiB?X2TNN7$YntSU(+0Xzf6$t`gFtIRODbL{ zKEsb6eg?M294D?@)3qN;t)SPnC-6o_1=6h860^Q3m82zx&N0H{0aMWKGsd^@9^>|i z%k-vIcucd;q$@mTc@KH&`*DY$ucfI2lng1A+dGmc2YQ0w;*ZZCEI6<#|Jt=)mAx*t z{2ceYIX~phBPfoXKJ`08b4>ON*n{D8k9|I+GH^o{q&6 zjP8B=i(p|t1#xquKM?&hl5xm>FENg3EqCKpic))WGaRThf^qdn*J`9o<6k#^pYOK) zNj=pqybR~^KbyWk!V|Lc%nOmlJLxp?otS6E+jsWXtJiQAK;*jyHc|fDzgrOLpRrpi zwiY7u^!;FyN>XWc)Eii(HEMlaZTR}Q3s@M9yAoa$cMYdN#MJ>@B$uoFy5!WC0P_so zFA1NJ2YeRzGKD(VNXB_xSiKYk4-LEVK9G*j{h(9Y3VH|z(o6`4B57gBSg0>I@n8Le z0pstnJ|lsacErU9TrBge_X#|zC|>?+ui}xv=h&SA71%W4FBM0ZrXb+uuaVt#^m%dP z_dRHS8elC@eq3dN^5ZH?0)7he;gM)5(+Z|FpsWnqSPL}!t?Oujn$J_IvIgj?HM-s> zu1vVYNkwywuCs`%1a=D-DxIssg>E88m_>ZN3hFkjYJfWwbu4MY@DpaJJu4MY}JR#Cgq;$`dMBLNQN|mnkqiW*5 zLgk`PXCQH?(*bz+%i6rYzRqM(fqMQicY+VPR#}YnW1=53{e;p_4E-d~kFJR0p@FmO zIvO~6&OD38C{%Ay2_+JhNJ@t3` zHl-qo|4;w?AN9{Q3@{5r90x^Laufp!Qob=!S3(!iN~f-bwnap<%SKmnJuTDS3VNWw z?p*xudI}y`od3EI^jD4A=XLe1|7Yl@*Em}`>5TtB{dB5CRG6>~txb^1F^7`-A zHx;eT)xS_Cd}V*?eONT?M=%Vzo}L*7{oJsx-_PDA=3fx91?+#9K4hS?%+b|CcQK!O z-2Vc7NayqQf7^Pt*rIKw99o~kF+yx;M2r1`LUqoD=uqKwvg*`TI#84YY=}15KY&Y# zr+?}BA!r#$&v;upWi2*fPk0Q_18Ir^ld86wt9bH9*otSS;zcFFe)nl9$t+_QA%-0& z2*zBB+^Uk?r_bcCOHWzXN8`03+G-E%ON(F|^O1JEF4?Tb?{A^Y;&@-XAFH z?^<}HiVL=1=p)=HPAg7J42A*#EhLH+L~HTdQXvMD3|KCVDqc$yc-G7^?FHMOCheG#6>bWjgmNvlW32|Me#rJ_bl=W5kap%n|7|6#K4^?meuc z-~y!@vy$s0Oj0^EY^QOPhmAMg+M1BecR(nq0q*LBS)b563>#?XDb)S$KnY==QzX6k z0jetdA0ue7k#C{tln+t3#nHj`vWwWB?@p6KTeSX*Jo8CcqYLjqi4H5cLzZS+T!@lv zjtfzW0i;P}54m!cG&oznhPi}~?b|QohOzfY!qB!VAdCvweuKccVb@y&k%-2HXfJeGsTH&#bKUwRgtlHLKa(3-vzsSsaji7i_0a zuD|wh20VgG8PMqkHF`?ui3n*Y!{&Olz*M~j_HV@5fgX$c12kG=BS!w6HtfSKj_b15 z%)c%!=^R_FYy5l1WsNO@}-G2CyUTc6T}QK6tO zMga3ICnq|cML}Sk!MPgaltliK=ujD8)*ZSW3V;q@-cUKM3WB?#6VGv-KPpm$Y0!;6 z129}aIfF!FA9=dA%IltVJx*TVNY`e0-I=a?%j=GG9U!mU(se6&-I}g(sZ5<_iLp$@ z4QRz{Av7E@nCMNfj(7m!7t_w}r(lUi5!A+XX2#-- z%w-v-l)R)ATTWVLhVZQ@j=%6fKQY;qn4X@QlqfyhE?i%(@Rya9xZISHvdom8lCdx+ zl|(nN|C;eK9UPr9S&2}lDL3OcN*SiyqzqQVaTTSr6-&}>xoKG`)2Gdj%1l}uk(ZR7 zo1L~aMVXe8o|2gTXLmiIc>e3)Kaqx-y+k>BiVX0Q?k1*{io|pS2}5eO{{u`Qr_anZ zm}w|eD^qm2jf`i~uU)-%1@8yNg|C-m%-0J;V-ruA|CRWEYWmE{ zvfQc`HZDI~YGYjUfyBlSC5>Tz0@IS+(!GXh%pQqtO!cxZWB>W=Uct2NW9i?))cl#m z2~6{u>T-0NkS6`KU{Mq3zP2a1Zh7yA?#?6^u&A0_)y9aJy ztf$j=rHoGx-<~n8^pY`o@Xa1L)C0#b*3%oySWizXW4(^^Ji@PLEMr%cHH`H(P{LT3 zzlE{hh8|cQdyu^cF%D64_ z%NciNT+JB$qA(2}{D6E}KRQ2{u^v8_aW4*^&$u(=QpP66m5ia;B#fPLU&h7)8J`~B z%vc}4gfiC4Kb$c=L&(H<_)lQ0r*92oy+0~pte1Z&&y?q(i$n@#uV`i)m7Chy9_HUm3ljr^I*&lfJPoC{R zhU4$R`HhdCkJp!Ez4(;)_@v~Nq;ybQVs=s@4RwTxkI&9Y2G$+o<8xBe$OAjX$1h0C z&T+>}Q<8Ervve28P1iwud`jZ{G^gBUX$x}Vhq~es_$CiL%!zF|StExdeOW2lIaz5* zIl7$OjKuV`g&8Ty!a?U!#^@E0gDa+Fys+h@C?RlARYe&$PEmT`Is^_qVCUWUBl8n8l(#xJJeD~mKIkLMi z%q2GJp-offFTxYVgy}ZwhdH>CkeHE~v3yBpZng>amy&J6Ev@rJde_S5Z35FROsklh z?vng`rd3Rh>!f=O(-NjtOpQe>muUr4<9c>yn#Z(+={BYnOno;<|Dtg5lc?A*H4&uH zJVTJO4A&W;`iw&m<{J`~93=%d4SrICSK5CLzX0LV-NN03u*3h2c&`_Zp2`1| z-gL~BB*9lY;=Ns@Jq<3DCz)=FUw_t98T{YN%T(s0%rZspsD#{O&}UNqS-uT3JCx!S z$jU}3r;3@LM3g(#hpVjh@yI`=mtL^4P?GvR zk&N6dyH1*}FOR||K?c=C4oV~l(x_ahoh(7gDl7~>9_h;i2 zCPNOj_)KLX+GHj|T)*u8U3sz&WR5A#RGN+NB3GSIOI^x$5v^P3X0a%}4E&~x^^EJe z&qp{aDKeBJeQs0tOZ58XORhGQWG2E;3_&PqD%0!rQZh|?ed=j!EZ4J~6@14cjU_8( zLRxx?#g>+Bxp{gdo!29Hki>YI0b44Yq8m4GSkzNmQPI4CwFJ0WGzX{5bI6RDLJW`;sv9D`*Gi5 z*`Eh64P?3qB^RVjQesFj%cJoL0EN~##r)aD6<(m$vslOH&b7xt(Y2_ zwr3i^v@6rzOwCM#nOd37V4A=*ovDp!4%0lQE12dp#g~=&G&fbm^lqjlOz&s9g=s0% zZA{-_`W{nV{vO7kF#U>Y4O0ix2ByB7WIEb24Pa_wYG!I>s?VpzGEQKc%GAa*k7+*B zBBmuwOPQ82tzcTs)WK9K;da8*#59npnQ1W7P^MOgfCm>vwU;rY#2uB>q$<1OkDKSHtkTPG1PRzo6 zoCUgEnS}T!<)$l^+=a^Y6q_;y69zYDE>*%)l7wJ{!MpKt3YR4=;EM1`si2UNM$;RR zAv#IOL2BWiyD&GK2h5O}ld@!fN)|C-AU~53;&6AS_?*}hjd?j(GSSgPl9Pul7jg+F z!wfP-!@B^c-=yK@7{!@^IDT(?jd=(v#TbM&TzxKBapCB+mzp z2BtE!;JHGSFr{!3=aVSag#~mW=yZg$flk45p7M1w%3&#JINYgbrTknWmE_2H=qW|< z$h^auc;A8B#63z1G5vr0FaUK)+) zE;2ru{>JVWq>@YwQ@W1E-w>2(GJco4<%eA8Z;)aVe#oE6=|VoGZ>wTe#vt}3_@$Ar zZc&uQb$8c7&z%2(tA2BOGkfu(q!gC&1&!&16F zgC+jAu*8o;0n(ge01Ac5=l>a50w&Z-)kT{^r~2L*E_#{)ZobsyTA>*w4QlKVd(4>h!O_{r-oe zw(iW?bM@yNE?m5H8OpPY!K;b4Pt#_;&0Dl=<=5KZ*rsi}_8mHQ3b>(jm#*Dz>~8AO zvsdpveftIWA24uG(BL8Fp*Ia1K4Rpk;L&5oV$MtpO`MMflm!b@(-tjGUy_k&yDcj_ zCwJ+xyydsgop;Nv@dHpgrNWR(0X|J@$wRAP&TE8M+|CH0ld{6)XUT$5!jEd`8 zUKtGZ5QuqHzJKZS()zq|<9U-m&ll6YtsGG{p4A%a_GF=P$b|H43#rk%Ig9ZL+$UtE z$nh@w!%WDm#B{vB>4x2>ySr1O$=z&~`leM(MP}e0`hv_4`5|LvOyfy1F^n-R5+;^0 zjW5ZhGS>AJY>a74NhXgmjV;OKGp4Z{nIgtCwj)!*n8spcwlLPmVx^2}3`b@g^_ekD`En8to&DjCz5mP{4nb`mPpjN3D=VXUvy+Zodsl#GKhjlsz@Fup-T zMR`${x2{Lw%UIV_FfyjGFPQ+w-6T{@jBjKd$XM4?F*7zXKbUb3#-WURGPW}A#W;p> zZ^p5V`!G&mOl$09QW^J?P_Z$lF*un##x$lTlh1gdgh~U&T0-aW!KL;~K_cjO~oW89NwHVBElXB4gzx zS^trYeHl+;Y-Bu{aRB3+8JieSVI0Vq-m}P<8PAeX31&?1TVz5R&yi5EGS+*M7{;rZ zAIsRl9Y6wOFUB^;O&I4h_GYZlyZSILVSZD_rHq>~E@SM=xPozWozL@EEg4razZK&e z#(s<)j9W8SUY6zW&)CSA&K@RXV%&zYKA+r{u|A*Nj$*#?_36Gqy7x z!MK6(NXEX~W&TGo4q!}YSCa{3JeqMZ<1vh_jK?yLWvntzWlUQhkjY~l%D9NJh4B`~ zVT`vi4rg4!ID&B%;|Yvw7*AyEU>wOSH!}`pJcV%#V>-N> zOakL+jBSi(G0tZ^n{f%_IgCpgr!X#KyqIwX<8;PVj0+goFgEZ2#KG8`vA#~!Odp`U zD$AoeV#9Kg64<3PsE83!|N!Pv^U72{aOof)Sx9?LkN@nXg$ zjPW8MOete;#$}9~F|J_ToN*Q77L02cw_@yI+?lcRy3Frb#zw{l9^jc6dowmOZpJv2 zadXBoj9V~HVBCtajd5qj`HaUh-on_x1IBHPn=>wF+=6i><5rBT8FyxEXFQg%@`lW> zfd`aE#?2X<7`I?-X55)^DC4n=V;LJvvc6IoH)ov3xCP@PJv`$rdidTl{5Cy2<8nPb z<4Qd|<7z#8pbT%+|7Pjms{3agtNUl1s{0=< z{paca85imP8E?`32TT9kbUx#9oj*?UD|J5OYMmb{`F5SpxIxF^lJEPL%zq23!~r^v zk~mPuF%kze_Ff^em2qdrv5e)akb-yGg~B807Ln1{)2+Nxk;H2lw8}(=^b*LBc7mj| z+C*5cbzL4`r zj`E`Lkqx+}!Nad&JKU=vC*y5C*jnXE*ULMp=gOFOj%@I4v zo8gp4?UvG~%cJ&7`QvT^siF90y44qz*Lbl$MH{B0}=ioOAVRN|s(f#4xZsy7R^%7>orB_f~E&U}*I7PS+-o~8b1 zw6h%PJ|+Dky`9tjN?5-y=)NVa$4~b!)r)62(EaS*e&&mOyV6DXxqCY4es{-o-#5nc z{?PM9{eU}viKu^kWX5wzOKm|{y)F^;bhERZWq%Z@OqJ1#=MeQb`u!r;*IntO=Mlvg%l>75 zGTvD)^!#xTFZ%}UIc5gTC;q-EgK;Fs7a*1%ZKl%K&I`1dh?^>McmgQt|_FJ-?T>ZE#r!eRJmo3_f z%%^)gWcpqC)YBEiB`nhw<-BiXx~4nRDbp3@mJVufu6Sj-COXrtr%SJI+24+LOXm`d zC0uu|j6dAjeq{X7&ih)A-_;*d{I2#U;}3K8cQSrgdPzr`TCWAa?)_Ufp1hO}y=G-P zqMhlKrlZ)OmWV+&KB>*^lVutoOGRo@%0Tc)b^)aRYJ3 zJL^?1KfS+|@lA5(Q~ICbY)8_+#aXY?f0SE#Nd6qBzNqxC-);K+Hrb6&{$t$wA4wNB9^I{#0lCkm=ETO*!tS)}}wVCEx1S4k*5x-Jbh|W1RVS zjrZk~p4tT&eco8_@AY~5K{8uP=^puBB1hYq7@HYC&p4Fv4#qKz_b^Ui{5@kEV||?%>V=J#i85ld5uaEzfeX@M+WWJH{+l*s4yuMBt z$b9|2NoBq_`wwQmKCZDcUdMbJ`}biS%Y40m&SSp5u9(XFr`UfUxZ-j4PS1uhSH9`h1yR&HSes+Zlh#xPkFYjD7dZ@;<;g zfbqSI0~x==IGFKX##Y8}Fpg#X4dYbCRgCi(>*M4i#ud!p!uU(ZC7i$JjJGlWAmehz zKQOLj{4L{Z#vd`ZGk%kC1LK{HeJf>oe8o6`@iUAA8NbXpnDI}Ht&Hzu9LuBwjwTSse%vYE{it!fa>+6u)IKQo!zm56&`-Q%)JB0b=%+F!$%jFTk zxRUwX8CNsb-^v{>T83!<*r{SD> z3jWLwWc~w;gBed{T={~OZ)9v`zW%w=sV?V;l4PFfM2QLdL1g@6EW9`EvG5 zQK}i=!~9bAKajDV`AZl#FfL?l=KSE(e_?z-mifJlv5EO(83!3o*ok#PX?V;L(i zO8=c02QpvICSVuVhIgPFgUv6b<2jAI!uWt__RF~&xY?*_(s%%7`=XMRt{Ma)lT zyoK=xjJGk~&A6O#8RJUE<&3Ktf6UmEWcfhO^n}X z9L#tt;~2&d>;5^uE{s!|{|Mte#m z&)CTP(TvNPU%)t!5p0R`ZBN#U@e+6SJ^G%F>Ka=U7 z&p4R*H!==jegb1V^M^AIWd7rfLmA(}IG_FZV;sx;G{&inGa2VGZo;^T@lnQG7?&{K z#`sCb<&0lrT*>$a#?_1`Ft#(cF_!bP^rgBq@;x^Z@9*w-K4y2_aWb!V=Y2IA-a@MoN86NU& z&UPvJ`s$k=AAOhRo<3JQm;P^ewnI4|L#RaN4Xjkt3Q=RQb@|WP-dUt+?v;HJsUv<>w+uX{N@*}@3Bni5Iz1>Pov*PaZ zbDiy4@|U{Fqj`DS6IAz4>mKAw8o3UY<}6RSZm6$1)4DUQ)9I_Mavhq=TbC#2S6%H# z$9g{`G5zZC(fn(=vpq`w67el0`H<@%uJp-u8rOX(*DYP&J<9bbcRtCd`&Jq`udT0Y z(>gKbUtc{ZO!sS|v;E3-Kz%h^uCG(SpqH0i=WyMx66>q)a{WCBGuC>)E!WQ$I?GG0 zcP)0_A97vEm41EQM|U9{gx*6hKe;}(*x8TEbwzzOoz~T9-BDj_C(^YPh)?mm z`zQIX{y?tdxzZ!onRTrO`c9JC`+R44Nld@e=<6zakD+7zj@Pk%N6K|-T}wjhNyuF! zq&&IK=Sq)U$8p_161(yvG5zY{Y5h~zw$Rs=X=fCjFV_!r2{fNi&m>)fzCPm4r}Ywd zK9#7RB7Hr5-UrIFUx;Y-j%ttWk2h!|faB}2@+)UlSv8%%ayTmE2f9c!dj*ky(?g8@L@Q4R)3mouYQ)OamVDXL_-VPKS#7;%lCp-U3_|*z%ML%o@mwc<`;+} z9fB&4yz?UAl8q~0B5M5F@-orV+q_>PYD?ZHXxS_4wiB)h>@Dis(RYoYC0`s9)I2Ec zRpN&Ze@f7V)5>dvjnm=XF)3}f39u!mw`A|^f6uY2~@ojdJ|I&alg63Dv7qnziv7p8iuM29P@V&%E z-n+t$JgIppGY22%4YqjG$$vPXsM_>x`hN$K4dpbkBH6tI`C`uP+fa!B8$} zjpIi_&3k?Jhek#@v0Ype3Zd z{CGh_KUpAXX-Ki4=7+WmYCQC%pfODv1T}T+T1nwbaO6ADigQVV*6dm*sIvS;LDBvM zEiJ7R)Yi76=zq(Wj21NiwRwUnM^*_MbKxmLZI|{6T6V%NsN?;XA5lE{D+ddj(0{6+ zr5|JqYEvH+)UmBxP}9}#1U0KyBu(r7F@+CZWf9btpCqUweXXEn;m=9j?0}#ZZ=Dj< zJhjy)6fWl5AW0*q2pamFO;B^~W{LZ~E@*z_SArU2&k3qb@AxT&PZ%>w($=wpDxc>G zYFqKJprsw(5wz-G-wEnyb4gHhc9+j6JnkbwW3J2OVjX8184gnXq0@|##&s9e96MN0WlD&kRUuJ=miC@2sIAE&L1Vtl6EyVsb%G|? z9u%~6$g_f?e-O0d!CiuusRsph{P>fgwq?Hyn&5jy(9+EIP-WnJiC5VK4gGYbpb70Z3Tm46sGz0mpBJ=d$J>$~-79FB_g8|(bU!L+ z#Z3-DP1;pKZQ-rNc&luDXF+R52MTH&FjCM)<1wULm`$eFdcN1G(G z7c1?44}2Dqwq*X;@H1bA%vMJ}duqg8pVUJhw(9_7%MwpMr7 zH=X$H{39Xl-;3`4iJ__b;V<=5YtEbsIen({jV*6)uI~4$u&sZ(B4p}*tlSJXs;x6V z{au;cLEZjl6I=hgehOLg^vKtD%r>f1PBooWIk}zs@_SD{{#{r{b-=0fZ#=i4oBGG) z^T9Q*)rS;0Z2M-MJQMQzM`M~d&+=BEyQSZWO}1|8i5<5sd;F*FYC_W%&wbd>SC#4L zsLs80k+FVMQ+4wE6}9aawN=N=&;RT-wYmD^{T)soG`ClWmToc{7k5)Fb?>x%Y+Xln z;CowdHTYf&Nng0{(~!6NtAk$L^WGq@fogcl4|i5|x)AdCs3x-$LOZAlU2ea>_+Tq_ zFkw|2UgpDEV*;~12rMCd;-*Q_eK1=t*oi~{NZz58s-?) z4qwmgd+}%|^~0ZE`S8~`KlN!X^}8X(-PBQ|#$5TKytnGz_LanytJ|qh_@9itNDU-z?ws=FEFKtB?Ha*2j7ToeWuYWtHFYBu#CfH1$yHM+d8| zM$EsVq*s5n;MTn0qRgAr?OR`rS~Pd8+I8tY-!JOv2>Gq^n4#ZJ8mD&Jn7zWD+(8Xk zu%Y(XO~cd$OP8H{{N50?ymX^utaY^7H}-|!TmLXteP@(c+z)$3tNTAXU32nGXZ0n& zeygW{HbQ-8$AIZMQ%0*Z?kakq-|%LtWAd?<%A8hQkNwn!yMKG5kJ3ji{i5!(;)BRv zZi`lf1AC|+Jr_6ZjLlE&6S}S4%2fl^8`t;PonaoP#^e^$<5NxU_U+vx%2YMy{(?Xh>&eDcf?_3;)JUp%#Dta@K3cWznbnZFbEJAUvChBe$Gz33riXlOIx<3?RkuEI)wD6H|6^ZWyF4pc z{qEbq)q`7^)taBe@2_fC8?rU-RO=*TAGOW5H~Hrc?yG*@VC;NI{Viner;}GsO6jHc zcsV~ZZ?2D;obl>cK|^||tgD{~=CA1#s3t}p**|~ksSw%zhN?wNpBxxH zZj@ROaYl_e90tKGls_;`^vN?kW#xu0?NFty&0_{#EwW7VVe zyJs1nZlzxGeQdrh5F7d|{31X2oiXaxJNth;Y~&!->(n0)2e0X&9``l<>%b>t)tE2e z5BE`m)gy}%`tI61Q2lA(TYZ1JeSmr(V|C?}r2(oV)&G}}Dc#j$4=m69DB*m_#HsmT zu3T_AB=e_5H`EUsr7kX1&lukxqP8<8zmrikTJ3!I_NvtBmqKpqzp+c&-6N2WB|TH_ zzZ&w8qBUI^J4_9DqOI47fRTJ3jZ`Nk_^#R7OjCQzxc}!5hmTWRnk}szuLi40UA|c} zK1@?b=8V3zdD0m5#~XIcx@-J!b?c$m4EKICQtf)*fHA9s`>E!8JGCxqGfuraZOO*( zLx!rIPWD{?_3vn>KP+BzZ(M)1xZmLT=)->Mo)Jw4)IM7qGJM>iBFFd%>a7#&pL_K8 z0qV~QlL}W&?yC-79(HuRUw_pwrJb*-Uz9rc^KUv1&YPrK7ksyTUQD>!cQXqm+$^0Os$y`x+kilzxuE0+}kH-hpKHm*6i^P@1ovs z{cKmt-ca?^5r-`8_YYHV9=mwvz0YKYgne&m()^-HJ$vX_bK9oDYQzTb;`%O=)mhJ9 z{At?ns``G)&r0*f5!^pSs|iO(-St$4Rdqbos&;$I1U2VZ>-H;chN$}wK66)>52DnR zrQ5E~E$gFpo7B0*uFov$6OV?ri2u~0+G6@v&Ken^CiDy(QN41M`o)e=^Lw3ot95@Y zzvGX4Le-PAzaO2sKU$rAw$*d@c}J?n|>f%?a=Gk zeK!mWQOB>2Z`WggPxa26@1oU5`l$n-v!p%Ia5-eCZ>`sJkv-JIxdkgGzkIXW;zZI_ zbK1@7klzn|(DaB!y|-)a>Vc_2>WXI$7u7Z!qt<8b3>tnRRQ;>@7*kDm{9V%=%`O{O zRb12BUNpSW^~r0RsiB~IL%}ue&BLWH8I!JQw~e3lcuF{Mi(cXNeXeP~-B&nvHoK;I z-4oHU|KwGz;#b4#%|5xRoi@C4d;Tj|wS{jxUL3mls`hitL(g{3xvJ&-VmL5n_Ejyr z^Y_a)kGZPdC=6(g0smLE4R@>{jO*^6&ah}Y;{H3_hIIzZagnq@8bi|N4PHT+;4Pi&C!axujLSv$Oq$mo90& zt_2Ld@qtTP@v!eg((k;a`TYLDv7;%Mv?*QeZxq~oN&Bp6^(5=4OWL9Q^w5!}OWHF% z4-K8%{E`;9{mJ+4s=KJ&T5|s?`{9dP7u(*>w!Ig%E2q~D>9+l%_CeC3gg>@i)Z&hq zrygH@QCrfvYO7(%MQzfC)Ml317q!mMSnz*QEA6^>-GD(CHLuCHU-+^k+)EAkzo;D= zW_;kDUoU7usf#;3@$Ci8>&c&QKDg_G_MLI&sot+#(BypB1?^hJJ$^&hUeL12TQ&S_ zyP&{!cp=UvchPJVN_%z8mPKIqX^`-Wf8`X8-|ykxqdeO+Q`JH_vUb}`_wO*=0% zXxgaS+ov6G(7p^XZ!~<_ppChPfz*c$+6!kE`|o(EL3?byp}ykb25nN=i;iFJYS4Dv zTk&4MoCYo6u0;GdXziQk?NX*RXg_@L+U*aGYtTxcS#6j!0DNH@w59~&I=7ApSZ1FyU=s$qF)p1wWlYI zT{~r3y_VdgWnAU>dhN%G4dt_j)oY>i4a+X}s@Lv+WoYW_?d!Fs9b*#;eCoB!LH&m( z*Pqi)bf_wyd*Yn-?9pF$FRVVN%{JaQu;{=!ZS%#6``&x!oK`W%u-NCNbJ`1^^r}t# z*E#LC*aGtx_ngxbd}0l=^3Q2w7RQYH?Y48;(P=B*c_`_eCg(rTX;)Xjd%VxYbJ}VD zv)1OL&uNo=w#~XW;GEW>;pnMm-Og!y_p~|E(;qm-fd6yaqftN1-*o1zHri*%b2Y!5 z)uIM{|3O&wSuJCGpLOLQoz;$P+WLd~{#kAAhto>G*?v}=WLWz0s;ACs3#(o`Hu{0H zTE5lL)2HaHc1QbHCLX!{thOK_ZunytETsosQ+y3nMO~0Sf zyq^F0y+KFMX!~+s*nH^gGunw4?|9~c1820E{d*lsc>j#ne(bC5#=d$+>sfhwaPMc& zXi2LA26cV-jCPOjf-ie+1V6Z-U2wq}?e~ZS2j}LV(X7pWJhL(FjMgyViTKZMIiu~& z8+fVfv@_a-b~P_8pKwNd?Y-G^e;#v2yVz~fZ}Wzn(LOW|oOG<$8SSmpCu5fdoY6`S znhiJjozW7!_6(>roY7K;Jo)~b`Z{g$!K+W+e7a71D1UNApPD+YG$zQ<;%m@B1<{ud z)M;%-&AI2o2X$KLK*P)4Z`5f%JI~zP_4zvO@wPwrw>(~_J?mXQH|xGStzB7B+p?lM zE&8)3gD>7$r;X@WP#%+Ar}Z;@v*PvCI<5BJd|S_3>$KOFZC?4W>2=z@y(95or_D|1 z^w8UCo%YjvkL1l7UZ)LcTiVkwpiaxX)T7|-?seMnnb!Q}9qP106$@KUY+0wZH5u?< zr`fviywm%9trk_jYTVghYqgwmZR{UMYqj?$4PJPzx>oB}@YKsqKd;r|YPw$Txwls9 z|J#JnN$=Kb$KI)1xZ>4X?ZG=bC+>KzR(rfn%?*afYqiIox;uaR{k7WRfhC1y8)~(- z0R?RW3Tm}A-*mZQ!?Id!dG`4AO*3jW!%dfCHYV3tctYGXfb z(K_B*tM#5Zd}C{^R%=r^0{^wzOBKJZFCJ8@4Kv?zBDPnp*4O&n4d%|^3sbA*8x0>^ zY6k4MYIIz6XixQd{o-%u99qd^#}}Xb)uFXXSUt1p&kpUu37fW=4m-3lkB^uY{)Iyu z``vp}Zad)6ZnG5M^<0HRtNd4=Uyr}-(BAxYaMqCR4(&N(YKwxc4lSW@`_{w%a%eM} z8%ApnIJBcFxv#%?w?kWF9Pis>4e+V*{!iTD(Dt35*rIQ?L%Y;=`D1S`a%h*Iul*u= zzC*h!H>>pbIEUsv{M+*nO?7B{lRJJA8R^iB-WL4B-^A5#?+bQlop0^_=4P`)JK2BP z<>Wwz=IiZM5NdL0qi&x%vUdRd3**r8vC*QpuY=|>V04Og?#zWl&C*f)%Jm8@jOp&u zf%06{GNx5b&4Z-7DM(UX#9#S$ERg0$mWMRgiLQ6xTdrZ)BXFoP3g;-?1X=WTR|Kx; z+qvPOqp|yNkP-}e;o#7j7G|v94Fi8P>?rsh4m?7+6KT8y{=?ue7##993jQM?I~aaR zni(`4R~F$f7*`}?0yq&O9bqCB7Pv`iX80a~P~%0K!r-5zj|88jO%S0;29<#1j>6SY z;0TdI`jTxZ!b@o*A&XKzLbwixjFG@YMT#gC<)6|P1{qWiqu@3iX%E96rJG_I4Oc0R zzD6AZ904B_gbcIDr%c;WgdH!W4Ffgf$_(EW7lokMM!`3g3`v`gnp%Lh<7HSWrZacv z;S0Vrte8^`(rGWmqZ&@eN^A;NO>MX$tuOK!hBb9+BXkZ$Ht-#Yhw@K3r<74CQwk_` zRBBWvR0reXD_rE5a!C22dZ+pv4ZkD7p_EDUpOwDpNTZ%^l1!RENDS5;-QV z4Y|ub&hr@kRO{mp9-Fl3ku}*b{xRw%)8CasVg`=)!V!4sR5Z>kX60t&q%BD?;jk~9 zB^3ld&ete zL?YT5ody+;J75_oX+6zHKadPOAAjUVd&_&?asMoRJVH|Y{m+*i4#`XZe~=sIc7Ofn zr<&Th`~CX&F_3n8aVNIA$ zhyNK_%foOcTuw?%V$xz9&=;O!OUX!1$w-3wkNa6c`k6qkwq{9A{&N^~3SqffS?DU5 zNBsir${&uDT5uOfqE+4Gc3yhKQuv*gvM?vF+oJtbrr?^sCZ7fzf&CchTWZqEv49%|6p#LE3a)5xm}!tQlgAU` zh=pSMr#R?L1t~ooGD)td#AzaLDUd}Yl`!Zo(Gx)Cn6#MwobG9mNNKYO+3^Tt#r4hj zBlqbD(^$%M$fYL==|xS(U7mq5xt`p{a^i(_`WBts;}Mef=Lkp0ze_Roe`*V^b`+D9N!@Wo9yO=595gFea|%a} zJjWR^qK#0`M`H*YKm55Lbd5abp*Gw{r8mJpnE|kWt|wXd)ULwCo-gsv)~8@>LdLa^ zyxgE%k#{TK<`Ee<#xyg7&MuvumXkWgMkifmM`qw&%1Fduz%wml6cfrRQ@r&A>=mj+acRsYJNa(;*q5mx=Ptz!g2emy5QtP@qiw(%6K`-Xz>}AjyQh{l`b$ zgAtB&h(qw~C(Uj=XqE8v^svN?nHlMsiODx-F8eRfTNH9br>aFEZ=~-kM_^Q=74|J)#TYN8w85a{!TyyYPPrSu((RhUkPO|>yD(jc z!jfEf`zjxseRrxW`L!-Hkg6 zK$tDy+dTZZ`zNVoZv0AIU$6X0mM+^pevEfcMgOC^v={K1z$#O})Imyl^Ce%-!UZ9mFTj1Y=+WE*q49UuE8Po*&%j zdE?s;@KQZ^?ZE>}*@M=z$6-*WO%I>mfAHY}GxmMZF)AwD6cavvFi8s^GcR#o{Iblf z#q(0;WoISL%goK0Hw|aDuPxg~51H9c)XUkAuJ_#^CS<p)4BT0sZ+f752 ziX?-w6au9io>_?VMkHKdgjZ|^<(-wlIFv3YvA6goXGgt3i6wv19nw*b=obP(*=+{- zqdqDSg{+4sHwW4nqS4)Mr#43J$|Zx)S7*QEE(Q~e;Z9>DH+RamQU-S_V>kEFXa*GuHQsEW=o(vlqM*i{}`x9Y{ z8o5P@u;|0x;*Apiwls2!5&lZyCdxykFD91aC~NF5mOPd>b`$a{8oA97@+up<34eF{ zc*(lKQG=*QQGVrcE2FxRZo?_wRNqE!;xpU;-1AY?Mx?)y`?5fl{^bp%9IR1{E9gpr^a7ct@LDrQ{MkaIAjYru?Q6)|DPjIO$vG5?>M?jDhK z_k8Exd%pAC`#;U^<$2$#>Z-S@-U?k^J(WOp#<*gGJP3H%2F8jD_GzUFH{LQCA^AjQ zMK;;{=vcEEL0PvLMc*s=Dl0yys6>CLMbjF~ok@szWPBJPjEGdC(W7zF@>Be$&eUCD zAH0hU_n|WF$0v*%Z-a-?6d_4OF#DLWI9X&=m<@;YRw8HnVEeepSQ`*^62Xo3D+)It z<^`;c(=fx?a-o%0jdB?6>*?X|VWap@@5N4Y#qaLf$DpIJVH9mA7;bi|G<}7eqTX>U zSq&ZK&0))}pdzRoA2>5@;D$~EYvBaz-~?;nMA898OvwY`Ks7z#?@5SzAB05eI9JU%Js(5R8=wy$8}##oL6`{< zAyFYB=!j*tn6REP(NnP`#Vv)$a1BbaB?&a__ht(Y3 z;joUw&m0=+u<5qvuq%h297;JH%V8Xc3pm`sVJU~lIK0l`8xF;~Y&xwtbmGvH!{Hpt zIGo2}3Ww<&Zs+hAhnG04<*=SZLp?S%&Na4Uy< zIXuZ>HHWV_RD*res|kmW9C~pW$e|(-{{6>Z+4B02y|U%-KiyvOt|Vk~d_+u`pYKqg z=#YuM6G9^6V$5o3&Swpkwp51h0v8? z(p%6wDg-Y|q|p&k^!K~5xXrc6tlpl5dUPj1} zMm_;!Vj}41K9r21KD0bM;^JZ=#>U5mA>(8M@9IBI7Di@K$!AP#9J?w+mQxuSiH{7U zcMcpg2@#Q1UtL*SQPkP$#;yptle!J+J%HxiOvMH$qn_=Js_(pW`8?yJznD$cHZCwLI@;9D2m z`>>%4WJA$__{g}3p3^Yhjvg8j8rCa(ObqEFVy#!9H=8bE>-uL`#2^zXrrOf57{$Ck zDg<*&loEP}g(BZE5wU3FAz_LaN%+-55x2zlr{3tb$Ttq}V`Q`>(4-WLYM-c^PjvLe zcv+wLC`Av1?gmYke4#$l5dUae+qCqNnu;pihD1$8SJOLzh^Q100n-}8IpR&KDmn~$ z2iJWe7zw3r4cfquRQ8KgT3{xXheU-ddPzjgWd*U&9PU*0iwp~sLE%ssPIMIC{*XO# zMAbhmW)gO5;9WS^=*cBjf8}|omnp9>$!f~MtQF5Q&SJbH1x+ECJ;m1(Jw{=Iz%_V)SC za}hr|`VN|l@NTLn)(6JoY*Wmo5_aHU8K?pz(x9_2VL4c#K_Xr9Y$C+7g1Hvfd>qxJ z^q%YRi+F&4wIG>LgC-$R6B0E?AtTTd5iKV*8dfHt=_CYEWt3kAU)nxQu5yFl@xapwR+`UrpOF?>} zY+P%>r#JAYaz+Dxg?>E=(X>z_7Eb!aBBn`=vCJr##!qAD+?$Z5eF$lR_$VrL@fAu1 z`f5ZUdC^B+^c}Tj3OP=NXoU)isuR{(bwxzi$&l#2KpBYDh!|nT2rG8fkqMgVkY;hF zq*-Va(#*+(G^;YJL#maAuAoDf2egN(ui3KZaAPmLInOhqbW8i)OWa7{ze zL()10YU<)$By5zAD*|o_pd*NjqCj1RsQ08XfmhfuY`K9QBTGamP$9x5L`@*062gHD zxc0!u+jRow44~oT*wQ!0vz3~!kZ~Q0_iAyh+a37R_e*nk$Xbo^=q21Wv+4V|c7uF#8KPTUV33e2>KSt!U~lbAVa5Hm;P zI>Q>V?0b65iXmhnh}Xja^&sNn4Mx0z2D%H(wO}vWuoocWHb>m%zOWbCMsN?;E*Um` zJ*2OT^mT|?44b~dP>mSE-VB{^?st{8lZDG}@dK7;L8(oIq&f1_P!?Fy zGO#9=0%KxQXH;WQsb8)u(+SpwP4oR|w~uU{$IK&S9*C9-Ma>3%Az%KwSi^M(m81MA z(o0~ih5FVb){Yi+W;IPJjmr&X2EphL6zx_Mb*Mq~eYIug)*8gx_nR<^x>rFQ*(*^W ztMFTI;Q|FtgghGZEXefw1-!h0Y>vYu#Z`(ruT(2XTM1_ENQkf|YcQ_>eT0q_sk{}` zd^{VMc{|iaxIX$93DK+5snM#`C|8rI28$S!A#zXSkgY?Rg5*e_Vsa`We*kxK`rJhr zb834669O%iG0<`n!LR3fLVgD2AWe!?*4#kIB~FJ$;Fp1Te_rPOSsT`c4a1Hb+c0f6 zF<;wFPrUGm1=a9vg7ufOb_aVy|7wo@)g1k+xuZ#qrotX|;Er-Y+^|K3Wl-H|-Z!Qb zQkB8lflekNFThizrAP4}-MOazeu%fPKJeemg{}GrVbybB zA0Qg$Gb$ zE7i+YWujmeMku9yy%>?2w?*F}aQLo29fSlHTEqhJS!``mXIx`gDK6KO=?3da1Di(W#Zh^U}{76uDs0@~)$-?HP19>x`n zH^`^)3XC=E9ETBT3W??ljPn#@gwpTzUmH&nQUp@=Uk&;zzAkRS|K&djV~h7PLqLBQ z&wTi=Y#64|*m4MdS1569OVMXxj$w&9vqYU)qKqvChKjM;+?I~j1{kZwq)E)zv6|MI zE6PgIH==ErEBYSvJLn(j9Eb1Y-c{ju!_UKxBiPav*lH5nP(NbpIm&GX&N$heq7Qb`Z3yyxg3q@{$=!;SI}0tJeb>S606W7#LDR~ zu@dYjdNr6)aBd^wxsB%$5HEkv7Lwq<9>munJKpGHywM|uTQS~X z-B~9_^}BZT9vxxWJwp0$=^4OmW}!`87tO@*jouBawMcunkmL;q-CjJay)*Sh1| zOtTNz(FmH&=Tk9;s(*c+KphG+1Vn=(jcY7W5k{A2#bCb8&;5e&EQ0!EpBvcc5k8Hd zasOseDxZczm#_0@_IX7M^E}LVVOu7?26grm9^A5V5o5i6|3^h{JhfycJ zty*;&HENZja(><$2t8QaG(ee%iGCHv@(#K~zPZouFYcpxMIOIrchd~9cM!BinGclb zoyNT}?ro}pep`<;^);6VHH{bNTAX44|~w z2{L%zuD0|Nko}+!Twb99q4PcTk#(9i+}Mhz5ZZ?_R6lAL(D!?GQPfXBUV@Z%p@nDD za6H;0ya3Pg8Y@JMc`MA(!!h>Z`3&*P)PhwR5$c%6UrytvV~io%kT%K)&ui+3;6~@$ zLLjxLIMg}jMNKh2G<7tVYBrp!V!YtFJ2ps%ju+t? zL`Psm_&Wtnbx2c`fsw$9=rGz+EtzI8X0nwc#GrVVz#LaBXihX4Mc-PkaHn;Rd-QQn z!xY)@S_p6YZFs8N*oGmYn}H@V5cm)+MpODVX1LR`=*i`o@`oCfi!WC$&2>rhaLl_B zv=N8dpW_h2t`0TM4dSMH^lYSuIi1JI@6%6wbh8W<5w3&Jvwsw zQhj=UCmt>I$y?PJRViPqFgjeXJXn<4z|b09)FmA5DUJNZaHsp0=tZBCDVl-k7}5CR z_wqIj*NscFVOU;|>PBhNFc=a^J>0*i3m*sFD@(72>4bhqA3hy-TQ)p@KSk;i2=~VM zrG9izD!m%Ue;Ut2|HH0CUcdhpy&ThTby(N#f8|d0p5I1Fs>WUT@`a8iY-uT$DygSJ zr2iV~*N~@y{&g4oCHD9JvuR5H^7_~5^xqltn6V+DVdKV!M@*O)IVmbyHW{xT6hCX?@QkST|OWzcdTUf3KeZ zO{x7~ZYK0s78;gRCI*h+q-jabImhfiC^& z&S%!qox>gf#qb_n_?-xUHvL|@1-YMIn?B-CDJbKgou;^BFrK>yUmbN-LPlSmaMkh8 z;m=p!ta*p8+GewNGOO5qm9+n*7mtm3h3DV=3wLSweb1i*{=5AfYb1C5zP_bv*z#af zS#)2_V&nV&q3q1YU(T@D>u+ulNdCt2f5S_NcpKK||3*~b+)CqR$LepK|0zKSp=rZ& zT=#AH#$yfoGX{A+GS@C_`N;?TpTQrws~Z<@CKvBNi}p~E(*Nz3;2&K0#ORw#g}eBC z)4HM;FE_TgnIFEbUq0MlA%B0W?A!b7dw2wl9TPfwOe8jnxW~qYy1Of)_+Gd$ez(Ct z2&afICT7gE(NSSjM@NQ5jgJfGZ~0!lG<@T@zZWhJTW&^2U}FxaW5c}mn84<%KZip( z4B;@E!x zxUo4Kza03wCEk_5o#O0P*bN1q?g!u5nvf^p>31HHcC2m`Tercxsg^?01K1YNC1&6$ zt^_gQ>31OZ?OA>3_aK(|7Ni^8`R_t#m>9U-2gwbweFAtM->iAToni|Nss7+8`Z?ho z74Q^4fR=!#xXA_gf~Tn81^R=hcnov_{8gY~S5^m#&Kyti6sQ(qP6I!Ks6G_qeqhVF z5O@vtcO4fa(!G4ru9y^1*X4Mf&ZXC3yP1or*i2&#_g+ z61WQV1U$u098Ww@P9W+|F^c2qH#AkCS8%7#@}3|XhCWBjIi6xUh(I@rH5^Y-yB8Z? z2iU?BV*YADc)Nk9*ToOG#-CoGRIRa<9LdvIiBJxj;E+O zn7!8$80w3?5r~tb97OAd;&qOvnCuTim{QhLfww?Z2T>Syfr4mxVoMi!2dYH)kHF^R*f2K0 zfgGOzlvASl1@7kfy};8PPqBvMDbnxGXn2ZR<2fE^6wdPeH)u2r{RXWFM0Ml8L!&(X z9&H4OhDiVxaeOJToZ~58;CPDnIG$pQ32YwQ14BR`k;fF^7m%e1;-858f@u6UzyJ_U zHxOtQiT9HTBLV&n3I_iKXfuhBMDP^zqfpM^3xS%^?7cd`b28XE+&=<)Ooo2o-GRX| zC>QV)*Ml^$|05Il5Y!%gEpS9Et8)-=3P_Q6;0lgk1-uCAhVa!u^Ej5b1h$JuzY6#E zz)2t)Mh4skqIG>5IAAJk|59KGC>UWvfxm&m!B+yeC$M@_d=H{Jd<1rwj(3hUPN4P- zw!P>8_kxn)-f$la-QQw16ZgWMVr$TL@C+~;MEkm2V9$Bj`vmu3;7_0$@D&RQnU>7P zNftq85HW?#1J{GSebTma=`02v`NOgZ>wQ^OoUx z8@y;a_8Nm|oR%w5CaW+PfqO2{Z8cj*^t;QpYYEu^_x8X}zd%p$^jpl74TMOrFO9Cj zYHVcVp}3gimjL&IsBRSVHlYtf_(Gu5W;XtAz=fbxxF-XT%F(XCR{)LDSsO408fGG0 zxEljavQe+*s8e7yC=fiwbveiz_zl4Gd4!aLzW@v`B%}g7MdvN3U+}KLE;~`D78oyp zy1S4U@M7Ss-Dr2<6M=*Gue&jsG%c={cy$^py|5T1U|Iv7O5`vX%!G|n=hT{&wT6pas}E)bsLWDqUeIN)gz zy_aJ0VYcnl?_;Y$)V&61dW7Za_p*^78h;{iH^-L)?{NG*;I5-=x@ExO$Jl#=fHucj zcZy*k8h<#jRR!x#zrU4&N}(skT_CDw8F2my=mz&>;H;CVYw(G{1E31<LZ3@jcDP&j77{!*~sM3DE8gYfJPS;2|KI-%ud^7FdyY zU=7Dp+;|RkfqUgZt19#rG#+3XNTEMab{;kjcZ#G2PfPq3 z2k-)jmIKA`t8DpDEC$gyOMz!Vv=6KVnqFgdGXut6NB@aJtz_Gdx4KZOTa$?hTTTKz=s1%K^MSV-XY`}s2+SBaOPdMJyN^^(y$Ve>%fG2 zD1Y!2huuf{gQwq7Z+^g*E&ZPQ1BluH^AI)Cch)UNXrbk{0TdztO7QBhIR*c2{7{ygdzfFrmcY9L2fs!g zfe!~>1J#4S4xIdk&9CS!Y#yXxjd?8aMLiq;E8zWiXm4<@1)9HS^|S;I;CLx;KF22m z_i=nB@H2>(Kly-u8)S)iWWehnPw*7Geq`gM`-~QXs6C_rFLLhHK2|U)Z+Kf7>oaTJ#%t3xYiX;3dF598bS_U(4}y52KX;-@T)cl>qmG z0ui3#SrDy9`h9%55Z}7PJrii4g5Ny>Zw#CdiUXev+zX<0O24HafcNK#aGwcmriyRp z>0AZqug1nn@g(*s(fP0?-tYT?XnXMo9s8@zWKKVPrv;?4x;f_ z0EZb0h$q~GfDb`F;A?^U*gHYPh=EP8pF{?CGhk=zD@g|L3M^_WAlt#00=HTUNGCTK5siZ?(s{uV^J>g2094>2E3Q>caB$HxZ%veg_JXGvfZv=rLc;?SL3A9Uze6DhRl>anC?3M#VAKK7wUQQ!Uiu9WnPozbWe$PUAiY+*vBK;Pm67Ce~ z_Y6TaT_F7qA^~YpRD8z(o+ADB;0Sn%bgv?flOp|IfbtY~aXj6hPWMAocZzf`cp3Ub zigX`1b*D)8U(+}#(!JNzog&?bPTeWeJ?PY(BHa&8d5Ux|IMtsb-A_k(igXVs4MUOc zGo?I5x(Ac;6zP6R%2T9!A}LRi?i-{$MY_L_@)YS_D9Tf$d)+8ck?t*{=~AS7uc$jk zx?hR9Q^dNe!hJIkYola4eoIMfBJ2c2`TtzsFM%bTvn)L*=*Xs3x9}LIxMV*JbBoVj zw{~eG8INMDKNmiwk*wKB)@dZ`^D-B|Aun_BneZ~_Z^p}UjC5Vbk}!jl7u6 z%jH!8KefJ?nA=D`z{_24O1rqEF2Q4n;*#ZEOUPePw*%b@D|6+Mz{_0zf97S*e;F^| zzG?BoO(T0bFSk4|4OkO-d?hdU4>I<2yHLG~m)}=T|Fn74PiegDeW6>ebB9u;eLX(s zc45ux#bQ<+BHMGtY0omtt1WoB-%a1S))&fJHj-!Y@{EyYzSiRW<-F`yZ8@&T$mA7` zWKUjp53nAVUH-W@FV|N&=~yqip|lsyU&{M4*PSJ;j(i!->t8Wqc)j(=L$i6gUG?x$ zCA;^};pG=2tm~YUiwb$U(*<9$Y32@P`{L|LDd+kbpI`PWN7;V3^4I3m=k$r?<-xe%UuZwP2$s zy#7l2XxyKajr7&eu03qahv#HVUgp}b6)$u5H{;8b^T)JUaq<1F4KF)hZPLBu#0A?% za;rviYhLE+1JhSFzJu4N`|Qv9qZ2Q4_Tj|KJx5BNUCQ$@Wo5%Nf!40}7ti!*BoF1~ z!0S#A*KR2c;$^R@;j?nKzaGQO1?Pga)qTET>cPghyUO_T&hFRSu%fa&8~3*i@6YM) z&`2J_%UpQ{@G@7Pc&t`jvSHVJ51PJS`ka@!@EW{64nf_DOv~h&yqr)KcXj{894%gc z5fm^@Z^>v0*J-Hf>mWqpS|JJ+e<>e2<%(i6bE>PNM(@Rc+)wAXe z;Qh_6xxKW1o{mQiHomlxF*nw3Uo@B%i7fxB^YNUZN4||@rTuXI&j{Y1EB{u!%;~S3 zFL1Kb9$QGIAxi_lDEs@amuL2}K5^NLzkf`iTY>ug9X`C=wMyD`+04BIc$w?p2J&+C z)r4QwOr9zG?~0qVpX@xc0iU-iE?GjL*$TDzeO(*L-FdllY{PP}+M;m6@*T{AEhnJt!f-{`JEI{(gg@ z369GGcQCx{d(G)%5AzpF`x<`LU+gyI52bxwyE=RQvchzweWhKB^C-?e?8M(c;fCvP z%WAgP^Y+2jFCM=XmyDBrdAaI_;byms`;_f9;d;0DUAlX9`S`f;v~m3?$J3LSd>6EC ze`ULfi~rOJi&abWp1Je)S6xlWTOix-(MayuNbbeU@6UH#yK~qM<@|z^mGcu!+C$MJx}0e%^SwPOCvW-HeF~eHhM%=Vayc0@ohxd4Ddw z?!4UVhMV>N+{Z0=nd>i<^Xq~O)1NLKxmYUPp)(RyWj5ZsbR zZjM{8^yg%yy>qhC-cJQG{TI&PqYS@(q+zmk_^(R)Js&iDhTE{O^TTsh{y(aDFIPU_ zoV=3YzqaUbdtM(-4&-Iw`Je$EcRUN><@Z%_-CVkyQRerAZ(Q)^ed&vN{~yk|);bSf zpq%e=?Lk?7ngLC`mxWzYwwK8lM;+cQeNe>TpBiNOX_?R6ibiq?FYopXFfcu`wv?BD zstVFwxc#&_OY9nx$$IABRQCt?Ji6|P@Gw&oS$&@*N*qE7&W_h z$HD76@G{qbWb-l^6=dk_aWbcoe2ABsfF>{3-a8({%fI^0Jki8_z9}ys^7Y^DV)sco zUq5)>SCW12igG+!d~M3zg@Lb>omKIZhd;p6WgVBC6v z$$n*g+UKm#?5fC6wpXq_`|#m&D`&shHSMCZKZ&gzwc&tSzH)wRH$uZZqY-vD~gv<;L93Iq|*SiGAY0U7}60dfGf1et);LGOO}Hob;v)2~Hn zKa4p@Vq7Sayy%%)^o%e+oK7|f=Y)+`oKi;5 zY@^pc(I40iKvRLfq!^C{Eb{YJI;L=sYBadwN`@oez$;F``u+))*fXIB)9@V2v5If= zeMl4BOV8k%q&O)m3TJ2yBx4lkZPCd8e6|>WVwVi}&{LmnbVOYI>6!FA#8{lb zMNid~H3;?nIQf%OB`BM3&*zemZ_mw>G&*TZf-#sq35z{7kN!4{P6Ivud^V>8zF1*E zjyTPep6P0jQNAwr^OP!VkJ(DvOdBa{@MZN}cA*qE> zt@wJP5iOFfP`{SazrKFEDeCvz^c&amU)6CpoZZ&g-u+M~)RyBK zSpJ{w9(yjolkfl9z0|7NlYswE*mo3Zqp&Y}{$d;~i9LUjo->Snk~j-^oZ>8CN7y($ z)3_64N2KloA9}W-E4Z1Css5&OfJo);O5I~(>M*aIsnMKASl zx@2gv0?fhXV!4^zRqihLk_XGfBbc4c-=c3n2f5$8y9m>l;UX-;sCEGIE1B}bl9np2)rnNyQfmqT*JxsqHa*F9I7 z8=Nc4P0UTnmFJe`mgiRH*5uaZl00#qB#+5+&y(f_=gIOC^HTEUd8K*fd6juJd3AXt zUz{(=XY$?irTM}6vi!vSlze%9X?}TrWqwV5T|Oxg7f1@20`~%GL2!YrAh95&KweN< zP+m}3P*YG>Knlf$l0v4?y-->hTqr9{EKDhs7nT;57giS56xJ1zB5{$Vh$(U}k`@IQ z$%+z-Qi|xwB(v0oo=j z^v#9FWze|-T318wT4-Jm-8G=S8T7Y94qTB3FXSQ+`3Of&5|Ec<!wWiuBmLyU)WTe(T!B<;k)j4t zvqMT=NF^L8BqR1*#9V<`YZ0SHv01TQv1_qcabR(HaYAu&acXgHaanOiadmNRaec8y ziCKwViED{hNnlBMNkU0-Noq-MNm)rnNp(qWNj+U8l4HK5uwyg19qiak9tbN=kSD{6 zbLD073VF4>R$edHNHa^bOLI;0N()R2hixaPrKaVkm8DgrRj1Xa)u(Bso59ju)4kFI z)5Fsf(v#Cu({t0y(ks%d@%?pux<-ashFykhhF3;lMtDX-Msh}KMs7w~Mny(7+C+VZ zhN3mNq9p`ohI8#87j2*dbzh5m*T^!rI&s?Dm; z(#ST;w##-4o9m=&Q8tF%`VHX$ga+=&92YZ$T7>Y%W=)|$_dN~&q>Hh&PmP5 z%_+;N$f?e$&8g4P$TiEg%XQ85$_>m7&rQfp&P~nD%`MBV$gR$;&8^SX$TQ2c%X7{1 z$_va3&r8Tl&P&b9%`3~R$g9q)&8yGT$T!Qk%XiHur2>NKA_+#@P5l2s+m*x8%VFg; zuy9f=E|wHC#qPz@;^1Ogabj^wvAnpnxV*TsxTd(Sn3RZ1BqdCVdx^9pxI|WxSdvmA zFDWf4FR3i4DXA+V<=Fd1yL0rZ5;=oDRf;}UCQn44Dwmha%jK2w8hM?Zq>0lcX-t}X znlvpKJ#AuIN}4>aG_5?XGOZ@9E{&v%(eE;B;AfVtPutJiRo%JiRi#CcQ45 zWQa2)8BB(IhBPBMLza=4k&+?LDCK(SI`q!sObL2scl64^nKJZADVd}O`$nN!CF;8d zHC~6FQUiUZ8G1`n$Ikzyu$^F751nyK5cX^D?}auYL#vRZO_Zh+2KzMOPhhR#u+&^w zX??aB7Ak>t2InNA$IeBcU4~w}0{wP1dTwfiBu@jqw;B3xJM`ee`KjoYYxB*}n>6nG zXwOFz_|NsPDuHUcpe)3m$E4OL)im2K@LKRzSD-GGC$;_+PP>ExfrCDytEL&ez)KLO zA`%Kz2@|BI)lN+y5+u0@1tR%C#)mO&;G)lHs^FPilrBufsmYD*6-kVndS;Gosrd6MoFCQ0=blcaJThinOiLL;n2s$_W>)YkpD zUpt-_gi02TmQ$AgN*puWL7UN3QyC&sGZGH*b1-5IsGwn_HFQjDI8H%`i;i*-GkVlf z-ALUxEOZindfvgBv7|0qMkdOGI3+mXNfsTWIA+Vij%h{xRg9W7^bZY__(hD5LaY*L zFAs?$~ICSak(Ajx7L??*OoXEueOZ4OPSNRM5nIu7rh6RPXQ%Mr& zqptBQs!0NDj<47n7Cb|LZPKUGwR;XNa9A|A%IVrG!xr}ovuF1`(_O4Ly-+@3w$-QO zKaAPw)Ms9L_j-BGpvYA^blTHdZS=uUkB~f<(AvD)&-b7e4#ymaZa_`8T*L2 z2jcptcf3^4IU=Unmvg`FSf09OxOBU^Xw;jrb8qdudptK~=)qg2OMZJf(rfhPAurEv z9CY74DK}`Txp$j(x;jab^OjZ~PC6cV%G%3(PWFf)ZXQj91>@SQbV~b@=q}kBuq=1{ zksn{DRM}n%Hpxv@_ZzUKyZUc=&xJ5lK}M1w79|qRG(%lm*^11VCQ578QZZ4}fUT>l zs;j6lRy2T~sENopd&tXzUdgdS9w~J}KYS#ihlLNx3KEg{v8Vnocv( z0H#0VE$=Juy`WckT%4?H$Bt8{PPLyD5fT#}8$B-0J|uclN7=-PXjyE>keJAhuwWdF z0mFsOQj;A`|8-zoIxw#G@Mp&G85IabLl{41FfTL01-<`a0%0+6vHu{6I7WvmZX^(V z5#iT=8yY5Buu76pKz^(bn-F-wMtA$7Oj*iVrKPhfUoY>l4%6Kfx{WzJ5mZ(cZ@C+$pVRm9p=Ig$r+0NvNZ7dT z*|2V<);-RgUs(IAKyRz|<|jJL=urhpL7ET5vt!P76RO6h*x#$YCpuYs(0bPWy8O-c zf%gh+W_Z0RUur)qK66=*Px%%dN<2ns%^BnnJ=pwhq;Pak>tE(s4gVo9X3gtOPw$(} z%L`WdrBr{rZjX|Mrq}A`&lne`>)X@n@{qeXV?uBLQQ5WG%Q><73%b58+;-;C;}-cp zi#vAgZDhS}@A{CH?qeVy}%DOam<58E8x7IXWS@2SFJp0iD-7w&%G{bOXJ`0>n) zHLEtdTW_%nVP-Cm%&;sD)v>K#HQ&0`$p_{;hqhmz*Z2ONtmh|~B=za&`^U2VzSbDM zlq$uzr_#t+m^sP+lK#|@VQ7<7F>3R*zxR!fj+69)eMgMLiB5505|8+}@MxUxG)>v_ zqyKkdTpgLtU6?Mk=XX|!4h$9l?ITl?@Xup_kd6UDi~(qK1$FOZ#Fq9&)lvCL;sH*3 zUhE8PzPV@9wi6!>m*$tLxmt+4_xyNR$NGlL#AAll+I6mn)~S_Nbh#)ncIbJ2k?yq6 zg|k-$+eDUZ^4{<$d{ot~^?qBm+8-{tlGmK9mx0PYXhXoqa zv)ep(jjTRmuM%Gn{_@nMmtBL>n!M_>r^Yq3FexzW`9tGfU3;cmO(;${N^?9!*l)EIW%C;}z=U$nyb;g3GSKPKN8Ckn% z&^(J5X&r~%OZlNgai_qeyWBoIp5La@eaqI86|S?ZHYT=zJuqN-^Uk)1yF`Wl=(lHs zevx_0d8c0OQCaZw+tGEEz6X}9TDZ5od7SNNGrOIqTidzXrgrJ)e0JuR6~&eQA_W=W@Vl;d*3^FIA(fH%tM=72l}i#`o|&5q1WdA{A7SPlT)zt z){_yNOFrHx9e3y8+Bq|xUV7U9p?8}cBfIRJS>qEQ{4_RU^wy5^E)U%hbYQBT-SelD z4%;njzs%ib(81gDJr^C(^f`JVt5?Uk)o-Kf6C{D{jYbBq{>5!jr+HUPlTB}K8u)5W z>E1r_$keKuOUX;L`7!V*#=u96SWT0g+L;JMn0=83gWh)sBXi{q#zK(}4oUFC;@DU$ z&UrA}w7b_A(P$Ph`pUjvl~KVE@Xat6)1j--A*I)DW7UDTALkr*IM;HK6EmFN(M*Jq zh#4dwAn(7xn;V5NTK##LQ;c!47#zYC!j42}w`jF!tjfV|G}CFcqoZQ58^sT980>r* zDKn6lG1&F|yTPtw2tU&OP5g1poXu2uiD=GRX3i>R&T?fT*{d*f<}y9_+8{2W27sV)9{vsu9edD z#xTWdH(lemmsmCGP!*%^_!kSZQfvIDS=gVijvL=%z4jV|+aW8~^;|QnYMM^U!LZTx z?cM4R$DErq_w)W9wOS{CIM6pQ<7LFPkOM6`XRRF>HZNt?;y%(L)jBI?R$277eA%t% zV&BTrPZRIDsoS?%|Db!*tP4A=rmpI8=TYbh&+ZA+TfQ`!m7Nkd_vcrqS_%8KJ@k|K z*UUUso%K({--p|;mbdNEc4DA+NHfidsNtz=?#+EwzU*b6b~iu%P`R)3A5pf&_e)wo zt-SG4uVkIw+SCDh-L+q6EV|U}u%p?Xx}zP=jM%i@yNlK_twYC(itlf|a?K=paPL4@ z$H}cNe%$h^b^XouT_q8zTZb(QkBZLO6?fQORV`c4*3K=dhtYs>+U45@yuQ8cN6ToF zS-o?n+;?vqmT`Eb@7M*0twNmFF1U5|W&MjLX}`3-{ae=B%4Z`(JnoKA->}e4ZK~Qi zwJq_@jQ5Wjv!m|%v8JN^w>*yP**&`%*73>OH)%m@s>!9aKKq8fT$`oY-%GqMu~{W) zb9Br4tRB6mT6aEHm7czN`t%m>y;e6X_|Ugy;_FTI2PW?7zxK}W@d*}B9=oiYX4e19 zrEM+4;~$i~|G4;f?Zn3sKa_lAo{D^y-ntb(DP(!~a~lH&4myxHv_)Eifn)ROe|TtZ z>G2`=bmqu|Y02w{P7WC8)w{gsiS<)PXeD}0{4{Oz!F`h^O*r8jYot3}`kONOKK36Q<+W z8$}K+M3PVAy#u}oH%bqEHhZl7D9gOP`WO|xc*E0~A%Qdfb^Jw4c!S$@9ELN2a@R!X z@4meH`qHEEt1}7uM^Dl}%`(w~w)@!c&Dtdm8z-LGL`nEWwzJCypIal;pC1W2neO!S zy8})=TTd@dFM2j&$jWtUoBVsN^K+T_>&$%~qduygFny(US0f>{{nbpm2PMoDNwP4?`S-MNt+V1`Ng9 zbHZQLnqAlbaCQHtHK|>$7j)FL$Z9>pZMkjMpq-J{sdb|>-|1FAbz66-i6)tPfHGIOf_C3DvfOgoG@B5fm^uX9)L zn6OA3z$d{O-|UJ;ti&f`5>5yYb!f%du)(eT!^cF1#Y+7B{3N~o26pY!%gLdGQ%_H) z4xWw}I&GPjG@Oc&<=1HGF_9f`{^TT?#4jvnN<>JQJjq}NChx5=dDs8CXd}3@Zr$qV z*Y8SxCs;`q+-YdnbkSz!zoa0zoT(UDeOF^{$%aub**H3MVO$(L(}_Et!08%}Li~TS zo-phG`=@~&Av;osy!RLveO#+&s`Gl+LOp-4w+Gas$7Nf*DNk)3SF^g$G?xSJk*Djj zD+|kO*Onf7=Cu9#I?KWjO%`9w8>+1l<0-AvG`-Z?qv^TZ746yx3U2NB`0jyM*wZ~{ zds!cUdr>p$piB9Qywo*?-6sT_4vZZ);?Xd2p}mVnNSkS^V_dBQrnzJo9u3)hR<+>H zfypT+R*gDSp)Ed9vS!z7n@!z>gIl(L7{1VHg!6P}s8L_XQ!XtJ8YLA3eCls9&&4w^k0GYo;z5ZDTeyTl};pId*T>>Ir7&W%K4%H&5R)E3fAU z)xJk3+nX8=eQVy_U{lbE(&8tdmM`;LINYjxM&Jaq`9&!jk1~@wWs9Ww?t^7bCh8ZZ z)=$&!6k<^pJLj=my!{>H`U&~bgEu~w+`l%}*7fSj{%@zYuG)5f;LxSMhf|`o@Atko z##k~c$Mo9cDNk~yUJuJSILrCz$bh{Yw%aq32`4^SM?KDo*7&?Cu32vW*!>$eK9R2> zZCn0v^uocPwqBT-y0M+#x@SgjUhMfbPLJ z(XC8>!4VD5Vd|k1)93B;Uh1a(t8Be6e0Y^#0sl1MjZU$5gSo%wJUxS}`=6>uu37J$ zY%?G$LG!BWH&gh{IVK~?sIepGzPeu(mebU)v-zVKW;C4zHxmUi0gS)gS1w&J@E=Wf zxs@t*3Cq@z`P$V$K-0y4bV`h!LmS0BK9ZjYV;&#OjKaz^w_1mJy!0QY#ZTq`YpFF} zziL7=XG>SJbQmo@T@?+*BD0k~b;pyBdSataPchTJ=kMuIFvR%UrbnZ<>TVc#dh5cS zru$9&pIq`unOE+ySXKNwcwf6a+HEG@&!4)y_=4eyWZ1LC9Q8q`unQ4 zd`OyaxY}-k?Bg2ewv$e{Jgt`m7kw`G(Vq8dkeU6YeKFgQ{?y8E*oF5)&YZe5c%z-y z$0;M5>~-E+)?v$z+{5RWl#!|jfj^}8yF79HaE;qJ#~#eRFn9m&%YVrKwDjDh_7-mC z!_H@PzB=m2`zM+Eelj?`Bw_Wq6@$)HspZTIdTFV7Y3ccZjrTiW4DG7k^kdhR@w1l6 ze$#4kqN1bg9iO+;tsX8{n>KT_>9N|GJHn&`Ubbjs=lyW@i!(c%I(I6GkbLX((vpV4?d*KE$f*q?s8<&?$G&%`wgl8Lq~PO zzAtK`x=rWXzS+6QLu}pueUIJqGkj|y8E$(Mv``$n~%8{ zouAM=yW>)wnchbYErV_zTedD?RBeTCVhc6fKD|`-y?q>~^88)>sp6?MyRzzkU3qWR zh$c5$byT0-Z26X^oz{C6~dfTlXE; z)LF0QrZHudL%V|*Dko#89QJjnBqm26PTVA1@6B$IH)&)w|8o|+*l`nUTb&pOS4T(1 zxY>zLbs%=4;=g%R|3?Gdz1!J754XoO*PfPs>axwWeR>y@&VPEgL0!EnFLGdf#mUY? z-w1w;>{oMV-)=Y4;7(tH1|1*wcD3K+;df^D8~(Y>dHno7Ep>MMY;<<2W4YL@Hh9(q z-?^T1F-uR(>1|vJPyIf(_rpF>Cmk=AFJOWOwZAiV>uiF>Z)&vt&|?DM8wRIcIR z+5@U88RufN2e`zovUEz)uM@x6)z|E4PVKsxJ$$Z}j5_r4Vs&iyUIPzy>f*ChxVLAx zz4-CG!F}$W+c&{%_!vR#$?@ratBuVj_+e&)BugZNeS;s8 zQFOQ!HJ`b&@MP`r&#nG=($yc|Fj;hLL|k;tG{x$Vkz(X&H0=BzS%|y%Cg9Yv+Vr5Y z;pe)qN*Qta%r9m~m;iPZAH?8|lN@iHl&^#S$%Q!j#);{`ICpUDq!_%1^MfV^Z~79s zA1`C@cKf@*`#Xzp-^Lx+sQXk5x*Lbg`q;MUcKc@I1r9bNZf}a||1mH6aggy&w}E{_ z6Sk zCsaGzZ^%muAS$J*`xn(l)a=oGHsjWW=>2U@MOF9kiWgkL3#BBT*OOZM-%Id|w;8(o z#^#qxyB~WQek<%vWB@A*;h(qvc!kM%?nwh|}5o zWO-s$_Xqvl#{Dqp*9Gq#Ev~G2wd~Du!J9M3;y%6ciHQ~$#4|^oN~c##KWhcvaPM~9 zf6~T~IIs3w2KMc6&{#D2KOMaQM+i=pp8|PK2vrK_1DC2_jt~pnKmXe_OsTn zPdvtTkN9-zpojPD*(>*-s{i5ME|UY>&$wkd44$|5fbd{a`V3PmlSMzvK0n-1X=kxW zdztgqJwET&f6;p6RBzLHe7hRmvIk4nUAo=kab4@4-ECJrh>IIB;oK&-r?ce_oo4Ml z^=QTcSDELzl;;%%U4QDTG4{tRvJk%kKR-*Fl%*;@I9Y9ic)Qh*PJ!FfWaD0>B?&L% z`Ny3uZ(&6x?f>1U@${Bj$fLTNYCAm@p@oVGX|jG@#QV6Y>E3b4qm!*hzF1YeAX<)f z=sAg*v;WQGb%T8zs;We&N*4A`L}0%UyH zG4Sox1CJgLxLjJ(mv)QQVqf%mlnJW4ZQSV!^b%_eZQPsk@$2|oWq2<{bql0ND}EXNg_?f z%I(U3Z;dL}ZNInj({SB3Nzjk6P_Ely;a2yXmAOBy&F+hv)GumU&#CvicCcM~XXF?4 zCvIWG4+-jb+%Rgk8QA@y7C(=OVp(q9J*?Lk_97k#q{8M&PfP0MV57Rrih>U-)xpU>H?t-~dg?-*W zQQJCMm-$>=vhZPPYjy2tE9;_Bmy$<+?E2wTnC6Tn z^KjG-=*OLT9T_H5OquEzXB-x(@HN+x8z*gF66&YCF?D+ipnTa#1huCwU*7tdE8 zA3gQoIPco5;Jh7@h;b+0K504gla{TsC?Uehka_4a^6l|9qn?B>8XM>}Vfhaw;qNS` z=bW=EJ8^pE`qI;#v#$&(b=7XHgWxeP2GdSC^!Y^fRcJA2EwHw#04-RrE z=u%yAw%%{nl-F%F*RLsgc`aXXyx+Vmy_&!li;{fywRPR_IcUdF@7>Gxe%@5~i?hXH z*@KK<3`b4XoN#+Uy~>6Uxw{`cYTw=V@H&6LCqEcv`Yu_h01eLX(^^4;K_R`PEV* z(agnc`k7SiqejPu$!4tl+^s`-+eFpdJ1u_>+ugT+uY^fa?|vWhVysWSq3-r~FXV*$ Ee+IUKqW}N^ diff --git a/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x86/native/WebView2Loader.dll b/visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/runtimes/win-x86/native/WebView2Loader.dll deleted file mode 100644 index e79094a27b09e3547bc65f205c674371bebbc5bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116184 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 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json index bf9f641b..85ff5aa4 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json @@ -13,6 +13,8 @@ "packagesPath": "C:\\Users\\RobBos\\.nuget\\packages\\", "outputPath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\obj\\", "projectStyle": "PackageReference", + "skipContentFileWrite": true, + "UsingMicrosoftNETSdk": false, "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], @@ -30,42 +32,36 @@ }, "frameworks": { "net472": { - "targetAlias": "net472", "projectReferences": {} } }, - "warningProperties": { - "noWarn": [ - "NU1701" - ], - "warnAsError": [ - "NU1605" - ] - }, "restoreAuditProperties": { "enableAudit": "true", "auditLevel": "low", "auditMode": "direct" - }, - "SdkAnalysisLevel": "10.0.200" + } }, "frameworks": { "net472": { - "targetAlias": "net472", "dependencies": { "MessagePack": { "target": "Package", "version": "[2.5.187, )" }, "Microsoft.VSSDK.BuildTools": { - "suppressParent": "All", "target": "Package", - "version": "[17.6.2164, )" + "version": "[17.6.2164, )", + "noWarn": [ + "NU1604" + ] }, "Microsoft.VisualStudio.SDK": { "include": "Compile, Build, Native, ContentFiles, Analyzers, BuildTransitive", "target": "Package", - "version": "[17.6.36389, )" + "version": "[17.6.36389, )", + "noWarn": [ + "NU1604" + ] }, "Microsoft.Web.WebView2": { "target": "Package", @@ -79,8 +75,24 @@ "target": "Package", "version": "[8.0.5, )" } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.201\\RuntimeIdentifierGraph.json" + } + } + }, + "runtimes": { + "win": { + "#import": [] + }, + "win-arm": { + "#import": [] + }, + "win-arm64": { + "#import": [] + }, + "win-x64": { + "#import": [] + }, + "win-x86": { + "#import": [] } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs deleted file mode 100644 index 3871b184..00000000 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotT.5379EF51.Up2Date b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotT.5379EF51.Up2Date deleted file mode 100644 index e69de29b..00000000 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfo.cs b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfo.cs deleted file mode 100644 index d27e68f7..00000000 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("CopilotTokenTracker")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+15ad8705022d8ba46ddb87de724b5f7dcdb0a09b")] -[assembly: System.Reflection.AssemblyProductAttribute("CopilotTokenTracker")] -[assembly: System.Reflection.AssemblyTitleAttribute("CopilotTokenTracker")] -[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] - -// Generated by the MSBuild WriteCodeFragment class. - diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfoInputs.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfoInputs.cache deleted file mode 100644 index 4b0b753a..00000000 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -e358e8b32cb3f06f41881dd044ee062c3963188a65f86d7b4e3423f43366f534 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.GeneratedMSBuildEditorConfig.editorconfig b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index cd0d1001..00000000 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -is_global = true -build_property.TargetFramework = net472 -build_property.TargetPlatformMinVersion = 7.0 -build_property.UsingMicrosoftNETSdkWeb = -build_property.ProjectTypeGuids = -build_property.PublishSingleFile = -build_property.IncludeAllContentForSelfExtract = -build_property._SupportedPlatformList = Linux,macOS,Windows -build_property.RootNamespace = CopilotTokenTracker -build_property.ProjectDir = C:\Users\RobBos\code\repos\rajbos\github-copilot-token-usage\visualstudio-extension\src\CopilotTokenTracker\ -build_property.EnableComHosting = -build_property.EnableGeneratedComInterfaceComImportInterop = -build_property.CsWinRTUseWindowsUIXamlProjections = false -build_property.EffectiveAnalysisLevelStyle = -build_property.EnableCodeStyleSeverity = diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.assets.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.assets.cache deleted file mode 100644 index 23dbcff92e5f7612e1d0bdd3edc28eefbadc9369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50588 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 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.csproj.AssemblyReference.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.csproj.AssemblyReference.cache deleted file mode 100644 index 999271c44ade761b57b48e22c33e6eb2a5c12c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115567 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

fwg{o2Ek<2EfNRJH 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 R{O#?Rk^lc?`M+8N{~uhvD=+{6 diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.g.resources b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.g.resources deleted file mode 100644 index d27ac728be5cef224d23a1ead6b2d9cdb2e824c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1546 zcmb_c&2G~`5T3+t0<;AQDj`9t8Z|;7Qs>V})1n;Opj>FHDv3xBJ+QVX)Qatm)*F)C zP%j)2a6o+l9)okm0rkWKaN>rMAK1g<^IsuVJRNw*0HHuFEY4e^{?0j|xx$xM1vVJP5vz#pktvjSG2| z0~OPT9$4UlDd--gA&|BKg@gkG0>&xF#Gi(;;EoEq*mDFGj9cGifH^^ILmf6@L;SY{ z_jt4-;EMqX1R&d%!Kg=DTy3HrtVb61a%!{FI*&_ML?x%KmehRV&#}po64A9%M$^n( zF_Xoc?JdJ*D=u-+>ktFiCtJKvJP#e+9+W4axiNVQAaOkc*DADQ*_5BYRD%(tjcl;3HoQ@xE@#x1M9dP+DAacudgyY(MV?eB!}H+$b<*UsdMjTl z6p5KHYM3u1_9fUG*IQ*GMm@^f(@>5wkT5IH-1F4XCs7HOu2c6vto)q!iP{Y8gz7hm zH;t$)RAKFa^UiuY?HLE?5KnbRDQZwB-Lu?QKb^~Dis?Ra>~v@BWn_qg1TxG(q85Xl z(EmMgYzodUtVjB(e}Q&}CMM7<>`T3;xvAE{xpMWZFGYP&@A=Z<5LSX7vos5EIF#fa zkx3WTaE}W0zn1pQF+EvZ)0# zdEt#8&1!f2hIYVw72*~rtZ>XQHf diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.pdb b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/CopilotTokenTracker.pdb deleted file mode 100644 index 37ea67cdf8a300cf3875651cefc2ca7d960b1313..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18936 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 b2u>B`m5W*H;aJ{nQbJI|ao3ZkY3jcLy@Q`= diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/ToolWindow/TokenTrackerControl.g.cs b/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/ToolWindow/TokenTrackerControl.g.cs deleted file mode 100644 index 80c66d82..00000000 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/Release/net472/ToolWindow/TokenTrackerControl.g.cs +++ /dev/null @@ -1,100 +0,0 @@ -#pragma checksum "..\..\..\..\ToolWindow\TokenTrackerControl.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "BBDCBD21ACC6EBC8A71D04E0A9E15A5EC8CBAFD9" -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using Microsoft.Web.WebView2.Wpf; -using System; -using System.Diagnostics; -using System.Windows; -using System.Windows.Automation; -using System.Windows.Controls; -using System.Windows.Controls.Primitives; -using System.Windows.Controls.Ribbon; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Ink; -using System.Windows.Input; -using System.Windows.Markup; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Media.Effects; -using System.Windows.Media.Imaging; -using System.Windows.Media.Media3D; -using System.Windows.Media.TextFormatting; -using System.Windows.Navigation; -using System.Windows.Shapes; -using System.Windows.Shell; - - -namespace CopilotTokenTracker.ToolWindow { - - - ///

- /// TokenTrackerControl - /// - public partial class TokenTrackerControl : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector { - - - #line 7 "..\..\..\..\ToolWindow\TokenTrackerControl.xaml" - [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] - internal System.Windows.Controls.TextBlock FallbackText; - - #line default - #line hidden - - - #line 16 "..\..\..\..\ToolWindow\TokenTrackerControl.xaml" - [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] - internal Microsoft.Web.WebView2.Wpf.WebView2 WebView; - - #line default - #line hidden - - private bool _contentLoaded; - - /// - /// InitializeComponent - /// - [System.Diagnostics.DebuggerNonUserCodeAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.5.0")] - public void InitializeComponent() { - if (_contentLoaded) { - return; - } - _contentLoaded = true; - System.Uri resourceLocater = new System.Uri("/CopilotTokenTracker;component/toolwindow/tokentrackercontrol.xaml", System.UriKind.Relative); - - #line 1 "..\..\..\..\ToolWindow\TokenTrackerControl.xaml" - System.Windows.Application.LoadComponent(this, resourceLocater); - - #line default - #line hidden - } - - [System.Diagnostics.DebuggerNonUserCodeAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.5.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] - [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")] - [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] - [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] - void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { - switch (connectionId) - { - case 1: - this.FallbackText = ((System.Windows.Controls.TextBlock)(target)); - return; - case 2: - this.WebView = ((Microsoft.Web.WebView2.Wpf.WebView2)(target)); - return; - } - this._contentLoaded = true; - } - } -} - diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json b/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json index cb4093a0..469671e9 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json @@ -2420,6 +2420,11991 @@ } } } + }, + ".NETFramework,Version=v4.7.2/win": { + "envdte/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90a/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90a.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "MessagePack/2.5.187": { + "type": "package", + "dependencies": { + "MessagePack.Annotations": "2.5.187", + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "System.Collections.Immutable": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + } + }, + "MessagePack.Annotations/2.5.187": { + "type": "package", + "compile": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/8.0.0": { + "type": "package", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "Microsoft.Build.Framework/17.6.3": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.2.2146", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.3.2": { + "type": "package", + "build": { + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.props": {}, + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets": {} + } + }, + "Microsoft.CSharp/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "Microsoft.IO.Redist/6.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.IO.Redist.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.NET.StringTools/17.6.3": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/Microsoft.NET.StringTools.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.3": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.ServiceHub.Analyzers/4.2.102": { + "type": "package" + }, + "Microsoft.ServiceHub.Framework/4.2.102": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.VisualStudio.Composition": "17.4.16", + "Microsoft.VisualStudio.Threading": "17.6.40", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.ServiceHub.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.ServiceHub.Resources/4.2.8": { + "type": "package", + "compile": { + "lib/net472/Microsoft.ServiceHub.Resources.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.CommandBars/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CommandBars.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ComponentModelHost/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ComponentModelHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition/17.6.17": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Validation": "17.0.71", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Composition.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition.Analyzers/17.6.17": { + "type": "package" + }, + "Microsoft.VisualStudio.CoreUtility/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Threading": "17.6.40", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CoreUtility.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Debugger.Interop.12.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.12.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.14.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.14.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.15.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.15.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.16.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.16.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Designer.Interfaces/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Designer.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Editor/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Shell.15.0": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.6.11" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Editor.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.GraphModel/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.GraphModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ImageCatalog/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ImageCatalog.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Imaging/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Interop/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "StreamJsonRpc": "2.15.26", + "System.ComponentModel.Composition": "7.0.0", + "System.Private.Uri": "4.3.2" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.Intellisense/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.Intellisense.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.StandardClassification/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Text.Logic": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.StandardClassification.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.LanguageServer.Client/17.6.42": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.ComponentModelHost": "17.6.252", + "Microsoft.VisualStudio.CoreUtility": "17.6.252", + "Microsoft.VisualStudio.ImageCatalog": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.28", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.LanguageServer.Client.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.OLE.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.OLE.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Package.LanguageService.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Package.LanguageService.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ProjectAggregator/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.ProjectAggregator.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RemoteControl/16.3.52": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.RemoteControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RpcContracts/17.6.13": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Framework": "4.2.100", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.RpcContracts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.SDK/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.CommandBars": "17.6.36389", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Debugger.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.14.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.15.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.16.0": "17.6.36389", + "Microsoft.VisualStudio.Designer.Interfaces": "17.6.36389", + "Microsoft.VisualStudio.Editor": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Language.Intellisense": "17.6.268", + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces": "17.6.268", + "Microsoft.VisualStudio.Language.StandardClassification": "17.6.268", + "Microsoft.VisualStudio.LanguageServer.Client": "17.6.42", + "Microsoft.VisualStudio.OLE.Interop": "17.6.36389", + "Microsoft.VisualStudio.Package.LanguageService.15.0": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Design": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0": "14.0.0", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.TextManager.Interop": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TextTemplating.VSHost": "17.6.36389", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.VCProjectEngine": "17.6.36389", + "Microsoft.VisualStudio.VSHelp": "17.6.36389", + "Microsoft.VisualStudio.VSHelp80": "17.6.36389", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.VisualStudio.WCFReference.Interop": "17.6.36389", + "Microsoft.VisualStudio.Web.BrowserLink.12.0": "12.0.0", + "Microsoft.Win32.Primitives": "4.3.0", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0", + "VSLangProj": "17.6.36389", + "VSLangProj100": "17.6.36389", + "VSLangProj110": "17.6.36389", + "VSLangProj140": "17.6.36389", + "VSLangProj150": "17.6.36389", + "VSLangProj157": "17.6.36389", + "VSLangProj158": "17.6.36389", + "VSLangProj165": "17.6.36389", + "VSLangProj2": "17.6.36389", + "VSLangProj80": "17.6.36389", + "VSLangProj90": "17.6.36389", + "envdte": "17.6.36389", + "envdte100": "17.6.36389", + "envdte80": "17.6.36389", + "envdte90": "17.6.36389", + "envdte90a": "17.6.36389", + "stdole": "17.6.36389" + } + }, + "Microsoft.VisualStudio.SDK.Analyzers/16.10.10": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.VisualStudio.Threading.Analyzers": "16.10.56" + }, + "build": { + "build/Microsoft.VisualStudio.SDK.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Setup.Configuration.Interop/3.6.2115": { + "type": "package", + "compile": { + "lib/net35/Microsoft.VisualStudio.Setup.Configuration.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net35/_._": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.VisualStudio.Setup.Configuration.Interop.targets": {} + } + }, + "Microsoft.VisualStudio.Shell.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Design/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Framework/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0/14.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.TaskRunnerExplorer.14.0.dll": {} + }, + "runtime": { + "lib/net40/_._": {} + } + }, + "Microsoft.VisualStudio.Telemetry/17.6.46": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.7.0", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Newtonsoft.Json": "13.0.1", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.Telemetry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Data/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Logic/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Logic.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI.Wpf/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextTemplating.VSHost/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextTemplating.VSHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading/17.6.40": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.0.71", + "Microsoft.Win32.Registry": "5.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Threading.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading.Analyzers/17.6.40": { + "type": "package", + "build": { + "build/Microsoft.VisualStudio.Threading.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Utilities/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Utilities.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Utilities.Internal/16.3.42": { + "type": "package", + "compile": { + "lib/net45/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Validation/17.6.11": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.Validation.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VCProjectEngine/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.VCProjectEngine.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.VSHelp/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VSHelp80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.WCFReference.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.WCFReference.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Web.BrowserLink.12.0/12.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.Web.BrowserLink.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net40/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VSSDK.BuildTools/17.6.2164": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VsSDK.CompatibilityAnalyzer": "17.6.2164" + }, + "build": { + "build/Microsoft.VSSDK.BuildTools.props": {}, + "build/Microsoft.VSSDK.BuildTools.targets": {} + } + }, + "Microsoft.VsSDK.CompatibilityAnalyzer/17.6.2164": { + "type": "package", + "frameworkAssemblies": [ + "System.IO.Compression", + "System.IO.Compression.FileSystem", + "WindowsBase" + ], + "build": { + "build/Microsoft.VsSDK.CompatibilityAnalyzer.props": {}, + "build/Microsoft.VsSDK.CompatibilityAnalyzer.targets": {} + } + }, + "Microsoft.Web.WebView2/1.0.2478.35": { + "type": "package", + "compile": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.Web.WebView2.targets": {} + } + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + }, + "compile": { + "ref/net46/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "Microsoft.Win32.Registry/5.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "ref/net461/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "Nerdbank.Streams/2.9.112": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.VisualStudio.Threading": "17.1.46", + "Microsoft.VisualStudio.Validation": "17.0.53", + "System.IO.Pipelines": "6.0.3", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/netstandard2.0/Nerdbank.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "compile": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "runtime.win.Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "compile": { + "ref/netstandard/_._": {} + }, + "runtime": { + "runtimes/win/lib/net/_._": {} + } + }, + "stdole/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/stdole.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "StreamJsonRpc/2.15.29": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.1", + "System.Collections.Immutable": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/StreamJsonRpc.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net45/System.Buffers.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Buffers.dll": { + "related": ".xml" + } + } + }, + "System.Collections.Immutable/7.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.ComponentModel.Composition/7.0.0": { + "type": "package", + "compile": { + "lib/net462/_._": {} + }, + "runtime": { + "lib/net462/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/net461/_._": {} + }, + "runtime": { + "lib/net461/_._": {} + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/7.0.1": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Memory/4.5.5": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Numerics.Vectors": "4.5.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "System", + "mscorlib" + ], + "compile": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + } + }, + "System.Numerics.Vectors/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "System.Numerics", + "mscorlib" + ], + "compile": { + "ref/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + } + }, + "System.Private.Uri/4.3.2": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "Microsoft.NETCore.Targets": "1.1.3" + }, + "compile": { + "ref/netstandard/_._": {} + } + }, + "System.Reflection.Emit/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Reflection.Metadata/7.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "7.0.0", + "System.Memory": "4.5.5" + }, + "compile": { + "lib/net462/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Reflection.TypeExtensions/4.7.0": { + "type": "package", + "compile": { + "ref/net472/System.Reflection.TypeExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + } + }, + "System.Security.AccessControl/6.0.0": { + "type": "package", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net461/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Security.Principal.Windows/5.0.0": { + "type": "package", + "compile": { + "ref/net461/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Text.Json/8.0.5": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/System.Text.Json.targets": {} + } + }, + "System.Threading.AccessControl/7.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net462/System.Threading.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Dataflow/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Threading.Tasks.Dataflow.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.ValueTuple/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net47/System.ValueTuple.dll": {} + }, + "runtime": { + "lib/net47/System.ValueTuple.dll": { + "related": ".xml" + } + } + }, + "VSLangProj/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj110/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj110.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj140/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj140.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj150/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj150.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj157/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj157.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj158/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj158.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj165/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj165.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj2/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj2.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + } + }, + ".NETFramework,Version=v4.7.2/win-arm": { + "envdte/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90a/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90a.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "MessagePack/2.5.187": { + "type": "package", + "dependencies": { + "MessagePack.Annotations": "2.5.187", + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "System.Collections.Immutable": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + } + }, + "MessagePack.Annotations/2.5.187": { + "type": "package", + "compile": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/8.0.0": { + "type": "package", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "Microsoft.Build.Framework/17.6.3": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.2.2146", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.3.2": { + "type": "package", + "build": { + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.props": {}, + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets": {} + } + }, + "Microsoft.CSharp/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "Microsoft.IO.Redist/6.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.IO.Redist.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.NET.StringTools/17.6.3": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/Microsoft.NET.StringTools.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.3": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.ServiceHub.Analyzers/4.2.102": { + "type": "package" + }, + "Microsoft.ServiceHub.Framework/4.2.102": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.VisualStudio.Composition": "17.4.16", + "Microsoft.VisualStudio.Threading": "17.6.40", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.ServiceHub.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.ServiceHub.Resources/4.2.8": { + "type": "package", + "compile": { + "lib/net472/Microsoft.ServiceHub.Resources.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.CommandBars/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CommandBars.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ComponentModelHost/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ComponentModelHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition/17.6.17": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Validation": "17.0.71", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Composition.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition.Analyzers/17.6.17": { + "type": "package" + }, + "Microsoft.VisualStudio.CoreUtility/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Threading": "17.6.40", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CoreUtility.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Debugger.Interop.12.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.12.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.14.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.14.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.15.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.15.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.16.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.16.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Designer.Interfaces/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Designer.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Editor/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Shell.15.0": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.6.11" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Editor.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.GraphModel/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.GraphModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ImageCatalog/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ImageCatalog.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Imaging/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Interop/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "StreamJsonRpc": "2.15.26", + "System.ComponentModel.Composition": "7.0.0", + "System.Private.Uri": "4.3.2" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.Intellisense/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.Intellisense.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.StandardClassification/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Text.Logic": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.StandardClassification.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.LanguageServer.Client/17.6.42": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.ComponentModelHost": "17.6.252", + "Microsoft.VisualStudio.CoreUtility": "17.6.252", + "Microsoft.VisualStudio.ImageCatalog": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.28", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.LanguageServer.Client.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.OLE.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.OLE.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Package.LanguageService.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Package.LanguageService.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ProjectAggregator/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.ProjectAggregator.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RemoteControl/16.3.52": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.RemoteControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RpcContracts/17.6.13": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Framework": "4.2.100", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.RpcContracts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.SDK/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.CommandBars": "17.6.36389", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Debugger.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.14.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.15.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.16.0": "17.6.36389", + "Microsoft.VisualStudio.Designer.Interfaces": "17.6.36389", + "Microsoft.VisualStudio.Editor": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Language.Intellisense": "17.6.268", + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces": "17.6.268", + "Microsoft.VisualStudio.Language.StandardClassification": "17.6.268", + "Microsoft.VisualStudio.LanguageServer.Client": "17.6.42", + "Microsoft.VisualStudio.OLE.Interop": "17.6.36389", + "Microsoft.VisualStudio.Package.LanguageService.15.0": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Design": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0": "14.0.0", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.TextManager.Interop": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TextTemplating.VSHost": "17.6.36389", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.VCProjectEngine": "17.6.36389", + "Microsoft.VisualStudio.VSHelp": "17.6.36389", + "Microsoft.VisualStudio.VSHelp80": "17.6.36389", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.VisualStudio.WCFReference.Interop": "17.6.36389", + "Microsoft.VisualStudio.Web.BrowserLink.12.0": "12.0.0", + "Microsoft.Win32.Primitives": "4.3.0", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0", + "VSLangProj": "17.6.36389", + "VSLangProj100": "17.6.36389", + "VSLangProj110": "17.6.36389", + "VSLangProj140": "17.6.36389", + "VSLangProj150": "17.6.36389", + "VSLangProj157": "17.6.36389", + "VSLangProj158": "17.6.36389", + "VSLangProj165": "17.6.36389", + "VSLangProj2": "17.6.36389", + "VSLangProj80": "17.6.36389", + "VSLangProj90": "17.6.36389", + "envdte": "17.6.36389", + "envdte100": "17.6.36389", + "envdte80": "17.6.36389", + "envdte90": "17.6.36389", + "envdte90a": "17.6.36389", + "stdole": "17.6.36389" + } + }, + "Microsoft.VisualStudio.SDK.Analyzers/16.10.10": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.VisualStudio.Threading.Analyzers": "16.10.56" + }, + "build": { + "build/Microsoft.VisualStudio.SDK.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Setup.Configuration.Interop/3.6.2115": { + "type": "package", + "compile": { + "lib/net35/Microsoft.VisualStudio.Setup.Configuration.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net35/_._": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.VisualStudio.Setup.Configuration.Interop.targets": {} + } + }, + "Microsoft.VisualStudio.Shell.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Design/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Framework/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0/14.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.TaskRunnerExplorer.14.0.dll": {} + }, + "runtime": { + "lib/net40/_._": {} + } + }, + "Microsoft.VisualStudio.Telemetry/17.6.46": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.7.0", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Newtonsoft.Json": "13.0.1", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.Telemetry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Data/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Logic/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Logic.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI.Wpf/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextTemplating.VSHost/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextTemplating.VSHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading/17.6.40": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.0.71", + "Microsoft.Win32.Registry": "5.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Threading.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading.Analyzers/17.6.40": { + "type": "package", + "build": { + "build/Microsoft.VisualStudio.Threading.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Utilities/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Utilities.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Utilities.Internal/16.3.42": { + "type": "package", + "compile": { + "lib/net45/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Validation/17.6.11": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.Validation.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VCProjectEngine/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.VCProjectEngine.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.VSHelp/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VSHelp80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.WCFReference.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.WCFReference.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Web.BrowserLink.12.0/12.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.Web.BrowserLink.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net40/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VSSDK.BuildTools/17.6.2164": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VsSDK.CompatibilityAnalyzer": "17.6.2164" + }, + "build": { + "build/Microsoft.VSSDK.BuildTools.props": {}, + "build/Microsoft.VSSDK.BuildTools.targets": {} + } + }, + "Microsoft.VsSDK.CompatibilityAnalyzer/17.6.2164": { + "type": "package", + "frameworkAssemblies": [ + "System.IO.Compression", + "System.IO.Compression.FileSystem", + "WindowsBase" + ], + "build": { + "build/Microsoft.VsSDK.CompatibilityAnalyzer.props": {}, + "build/Microsoft.VsSDK.CompatibilityAnalyzer.targets": {} + } + }, + "Microsoft.Web.WebView2/1.0.2478.35": { + "type": "package", + "compile": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.Web.WebView2.targets": {} + } + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "compile": { + "ref/net46/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "Microsoft.Win32.Registry/5.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "ref/net461/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "Nerdbank.Streams/2.9.112": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.VisualStudio.Threading": "17.1.46", + "Microsoft.VisualStudio.Validation": "17.0.53", + "System.IO.Pipelines": "6.0.3", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/netstandard2.0/Nerdbank.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "compile": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "stdole/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/stdole.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "StreamJsonRpc/2.15.29": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.1", + "System.Collections.Immutable": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/StreamJsonRpc.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net45/System.Buffers.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Buffers.dll": { + "related": ".xml" + } + } + }, + "System.Collections.Immutable/7.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.ComponentModel.Composition/7.0.0": { + "type": "package", + "compile": { + "lib/net462/_._": {} + }, + "runtime": { + "lib/net462/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/net461/_._": {} + }, + "runtime": { + "lib/net461/_._": {} + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/7.0.1": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Memory/4.5.5": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Numerics.Vectors": "4.5.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "System", + "mscorlib" + ], + "compile": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + } + }, + "System.Numerics.Vectors/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "System.Numerics", + "mscorlib" + ], + "compile": { + "ref/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + } + }, + "System.Private.Uri/4.3.2": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "Microsoft.NETCore.Targets": "1.1.3" + }, + "compile": { + "ref/netstandard/_._": {} + } + }, + "System.Reflection.Emit/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Reflection.Metadata/7.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "7.0.0", + "System.Memory": "4.5.5" + }, + "compile": { + "lib/net462/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Reflection.TypeExtensions/4.7.0": { + "type": "package", + "compile": { + "ref/net472/System.Reflection.TypeExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + } + }, + "System.Security.AccessControl/6.0.0": { + "type": "package", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net461/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Security.Principal.Windows/5.0.0": { + "type": "package", + "compile": { + "ref/net461/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Text.Json/8.0.5": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/System.Text.Json.targets": {} + } + }, + "System.Threading.AccessControl/7.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net462/System.Threading.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Dataflow/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Threading.Tasks.Dataflow.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.ValueTuple/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net47/System.ValueTuple.dll": {} + }, + "runtime": { + "lib/net47/System.ValueTuple.dll": { + "related": ".xml" + } + } + }, + "VSLangProj/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj110/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj110.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj140/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj140.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj150/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj150.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj157/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj157.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj158/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj158.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj165/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj165.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj2/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj2.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + } + }, + ".NETFramework,Version=v4.7.2/win-arm64": { + "envdte/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90a/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90a.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "MessagePack/2.5.187": { + "type": "package", + "dependencies": { + "MessagePack.Annotations": "2.5.187", + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "System.Collections.Immutable": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + } + }, + "MessagePack.Annotations/2.5.187": { + "type": "package", + "compile": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/8.0.0": { + "type": "package", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "Microsoft.Build.Framework/17.6.3": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.2.2146", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.3.2": { + "type": "package", + "build": { + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.props": {}, + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets": {} + } + }, + "Microsoft.CSharp/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "Microsoft.IO.Redist/6.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.IO.Redist.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.NET.StringTools/17.6.3": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/Microsoft.NET.StringTools.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.3": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.ServiceHub.Analyzers/4.2.102": { + "type": "package" + }, + "Microsoft.ServiceHub.Framework/4.2.102": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.VisualStudio.Composition": "17.4.16", + "Microsoft.VisualStudio.Threading": "17.6.40", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.ServiceHub.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.ServiceHub.Resources/4.2.8": { + "type": "package", + "compile": { + "lib/net472/Microsoft.ServiceHub.Resources.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.CommandBars/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CommandBars.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ComponentModelHost/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ComponentModelHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition/17.6.17": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Validation": "17.0.71", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Composition.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition.Analyzers/17.6.17": { + "type": "package" + }, + "Microsoft.VisualStudio.CoreUtility/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Threading": "17.6.40", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CoreUtility.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Debugger.Interop.12.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.12.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.14.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.14.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.15.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.15.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.16.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.16.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Designer.Interfaces/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Designer.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Editor/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Shell.15.0": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.6.11" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Editor.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.GraphModel/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.GraphModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ImageCatalog/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ImageCatalog.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Imaging/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Interop/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "StreamJsonRpc": "2.15.26", + "System.ComponentModel.Composition": "7.0.0", + "System.Private.Uri": "4.3.2" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.Intellisense/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.Intellisense.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.StandardClassification/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Text.Logic": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.StandardClassification.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.LanguageServer.Client/17.6.42": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.ComponentModelHost": "17.6.252", + "Microsoft.VisualStudio.CoreUtility": "17.6.252", + "Microsoft.VisualStudio.ImageCatalog": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.28", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.LanguageServer.Client.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.OLE.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.OLE.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Package.LanguageService.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Package.LanguageService.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ProjectAggregator/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.ProjectAggregator.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RemoteControl/16.3.52": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.RemoteControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RpcContracts/17.6.13": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Framework": "4.2.100", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.RpcContracts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.SDK/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.CommandBars": "17.6.36389", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Debugger.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.14.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.15.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.16.0": "17.6.36389", + "Microsoft.VisualStudio.Designer.Interfaces": "17.6.36389", + "Microsoft.VisualStudio.Editor": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Language.Intellisense": "17.6.268", + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces": "17.6.268", + "Microsoft.VisualStudio.Language.StandardClassification": "17.6.268", + "Microsoft.VisualStudio.LanguageServer.Client": "17.6.42", + "Microsoft.VisualStudio.OLE.Interop": "17.6.36389", + "Microsoft.VisualStudio.Package.LanguageService.15.0": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Design": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0": "14.0.0", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.TextManager.Interop": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TextTemplating.VSHost": "17.6.36389", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.VCProjectEngine": "17.6.36389", + "Microsoft.VisualStudio.VSHelp": "17.6.36389", + "Microsoft.VisualStudio.VSHelp80": "17.6.36389", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.VisualStudio.WCFReference.Interop": "17.6.36389", + "Microsoft.VisualStudio.Web.BrowserLink.12.0": "12.0.0", + "Microsoft.Win32.Primitives": "4.3.0", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0", + "VSLangProj": "17.6.36389", + "VSLangProj100": "17.6.36389", + "VSLangProj110": "17.6.36389", + "VSLangProj140": "17.6.36389", + "VSLangProj150": "17.6.36389", + "VSLangProj157": "17.6.36389", + "VSLangProj158": "17.6.36389", + "VSLangProj165": "17.6.36389", + "VSLangProj2": "17.6.36389", + "VSLangProj80": "17.6.36389", + "VSLangProj90": "17.6.36389", + "envdte": "17.6.36389", + "envdte100": "17.6.36389", + "envdte80": "17.6.36389", + "envdte90": "17.6.36389", + "envdte90a": "17.6.36389", + "stdole": "17.6.36389" + } + }, + "Microsoft.VisualStudio.SDK.Analyzers/16.10.10": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.VisualStudio.Threading.Analyzers": "16.10.56" + }, + "build": { + "build/Microsoft.VisualStudio.SDK.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Setup.Configuration.Interop/3.6.2115": { + "type": "package", + "compile": { + "lib/net35/Microsoft.VisualStudio.Setup.Configuration.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net35/_._": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.VisualStudio.Setup.Configuration.Interop.targets": {} + } + }, + "Microsoft.VisualStudio.Shell.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Design/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Framework/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0/14.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.TaskRunnerExplorer.14.0.dll": {} + }, + "runtime": { + "lib/net40/_._": {} + } + }, + "Microsoft.VisualStudio.Telemetry/17.6.46": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.7.0", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Newtonsoft.Json": "13.0.1", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.Telemetry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Data/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Logic/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Logic.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI.Wpf/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextTemplating.VSHost/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextTemplating.VSHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading/17.6.40": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.0.71", + "Microsoft.Win32.Registry": "5.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Threading.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading.Analyzers/17.6.40": { + "type": "package", + "build": { + "build/Microsoft.VisualStudio.Threading.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Utilities/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Utilities.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Utilities.Internal/16.3.42": { + "type": "package", + "compile": { + "lib/net45/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Validation/17.6.11": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.Validation.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VCProjectEngine/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.VCProjectEngine.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.VSHelp/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VSHelp80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.WCFReference.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.WCFReference.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Web.BrowserLink.12.0/12.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.Web.BrowserLink.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net40/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VSSDK.BuildTools/17.6.2164": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VsSDK.CompatibilityAnalyzer": "17.6.2164" + }, + "build": { + "build/Microsoft.VSSDK.BuildTools.props": {}, + "build/Microsoft.VSSDK.BuildTools.targets": {} + } + }, + "Microsoft.VsSDK.CompatibilityAnalyzer/17.6.2164": { + "type": "package", + "frameworkAssemblies": [ + "System.IO.Compression", + "System.IO.Compression.FileSystem", + "WindowsBase" + ], + "build": { + "build/Microsoft.VsSDK.CompatibilityAnalyzer.props": {}, + "build/Microsoft.VsSDK.CompatibilityAnalyzer.targets": {} + } + }, + "Microsoft.Web.WebView2/1.0.2478.35": { + "type": "package", + "compile": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "native": { + "runtimes/win-arm64/native/WebView2Loader.dll": {} + }, + "build": { + "build/Microsoft.Web.WebView2.targets": {} + } + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "compile": { + "ref/net46/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "Microsoft.Win32.Registry/5.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "ref/net461/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "Nerdbank.Streams/2.9.112": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.VisualStudio.Threading": "17.1.46", + "Microsoft.VisualStudio.Validation": "17.0.53", + "System.IO.Pipelines": "6.0.3", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/netstandard2.0/Nerdbank.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "compile": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "stdole/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/stdole.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "StreamJsonRpc/2.15.29": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.1", + "System.Collections.Immutable": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/StreamJsonRpc.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net45/System.Buffers.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Buffers.dll": { + "related": ".xml" + } + } + }, + "System.Collections.Immutable/7.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.ComponentModel.Composition/7.0.0": { + "type": "package", + "compile": { + "lib/net462/_._": {} + }, + "runtime": { + "lib/net462/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/net461/_._": {} + }, + "runtime": { + "lib/net461/_._": {} + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/7.0.1": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Memory/4.5.5": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Numerics.Vectors": "4.5.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "System", + "mscorlib" + ], + "compile": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + } + }, + "System.Numerics.Vectors/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "System.Numerics", + "mscorlib" + ], + "compile": { + "ref/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + } + }, + "System.Private.Uri/4.3.2": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "Microsoft.NETCore.Targets": "1.1.3" + }, + "compile": { + "ref/netstandard/_._": {} + } + }, + "System.Reflection.Emit/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Reflection.Metadata/7.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "7.0.0", + "System.Memory": "4.5.5" + }, + "compile": { + "lib/net462/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Reflection.TypeExtensions/4.7.0": { + "type": "package", + "compile": { + "ref/net472/System.Reflection.TypeExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + } + }, + "System.Security.AccessControl/6.0.0": { + "type": "package", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net461/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Security.Principal.Windows/5.0.0": { + "type": "package", + "compile": { + "ref/net461/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Text.Json/8.0.5": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/System.Text.Json.targets": {} + } + }, + "System.Threading.AccessControl/7.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net462/System.Threading.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Dataflow/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Threading.Tasks.Dataflow.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.ValueTuple/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net47/System.ValueTuple.dll": {} + }, + "runtime": { + "lib/net47/System.ValueTuple.dll": { + "related": ".xml" + } + } + }, + "VSLangProj/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj110/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj110.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj140/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj140.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj150/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj150.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj157/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj157.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj158/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj158.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj165/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj165.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj2/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj2.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + } + }, + ".NETFramework,Version=v4.7.2/win-x64": { + "envdte/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90a/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90a.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "MessagePack/2.5.187": { + "type": "package", + "dependencies": { + "MessagePack.Annotations": "2.5.187", + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "System.Collections.Immutable": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + } + }, + "MessagePack.Annotations/2.5.187": { + "type": "package", + "compile": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/8.0.0": { + "type": "package", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "Microsoft.Build.Framework/17.6.3": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.2.2146", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.3.2": { + "type": "package", + "build": { + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.props": {}, + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets": {} + } + }, + "Microsoft.CSharp/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "Microsoft.IO.Redist/6.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.IO.Redist.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.NET.StringTools/17.6.3": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/Microsoft.NET.StringTools.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.3": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.ServiceHub.Analyzers/4.2.102": { + "type": "package" + }, + "Microsoft.ServiceHub.Framework/4.2.102": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.VisualStudio.Composition": "17.4.16", + "Microsoft.VisualStudio.Threading": "17.6.40", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.ServiceHub.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.ServiceHub.Resources/4.2.8": { + "type": "package", + "compile": { + "lib/net472/Microsoft.ServiceHub.Resources.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.CommandBars/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CommandBars.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ComponentModelHost/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ComponentModelHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition/17.6.17": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Validation": "17.0.71", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Composition.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition.Analyzers/17.6.17": { + "type": "package" + }, + "Microsoft.VisualStudio.CoreUtility/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Threading": "17.6.40", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CoreUtility.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Debugger.Interop.12.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.12.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.14.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.14.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.15.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.15.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.16.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.16.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Designer.Interfaces/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Designer.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Editor/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Shell.15.0": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.6.11" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Editor.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.GraphModel/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.GraphModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ImageCatalog/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ImageCatalog.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Imaging/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Interop/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "StreamJsonRpc": "2.15.26", + "System.ComponentModel.Composition": "7.0.0", + "System.Private.Uri": "4.3.2" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.Intellisense/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.Intellisense.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.StandardClassification/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Text.Logic": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.StandardClassification.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.LanguageServer.Client/17.6.42": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.ComponentModelHost": "17.6.252", + "Microsoft.VisualStudio.CoreUtility": "17.6.252", + "Microsoft.VisualStudio.ImageCatalog": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.28", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.LanguageServer.Client.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.OLE.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.OLE.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Package.LanguageService.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Package.LanguageService.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ProjectAggregator/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.ProjectAggregator.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RemoteControl/16.3.52": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.RemoteControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RpcContracts/17.6.13": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Framework": "4.2.100", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.RpcContracts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.SDK/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.CommandBars": "17.6.36389", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Debugger.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.14.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.15.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.16.0": "17.6.36389", + "Microsoft.VisualStudio.Designer.Interfaces": "17.6.36389", + "Microsoft.VisualStudio.Editor": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Language.Intellisense": "17.6.268", + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces": "17.6.268", + "Microsoft.VisualStudio.Language.StandardClassification": "17.6.268", + "Microsoft.VisualStudio.LanguageServer.Client": "17.6.42", + "Microsoft.VisualStudio.OLE.Interop": "17.6.36389", + "Microsoft.VisualStudio.Package.LanguageService.15.0": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Design": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0": "14.0.0", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.TextManager.Interop": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TextTemplating.VSHost": "17.6.36389", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.VCProjectEngine": "17.6.36389", + "Microsoft.VisualStudio.VSHelp": "17.6.36389", + "Microsoft.VisualStudio.VSHelp80": "17.6.36389", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.VisualStudio.WCFReference.Interop": "17.6.36389", + "Microsoft.VisualStudio.Web.BrowserLink.12.0": "12.0.0", + "Microsoft.Win32.Primitives": "4.3.0", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0", + "VSLangProj": "17.6.36389", + "VSLangProj100": "17.6.36389", + "VSLangProj110": "17.6.36389", + "VSLangProj140": "17.6.36389", + "VSLangProj150": "17.6.36389", + "VSLangProj157": "17.6.36389", + "VSLangProj158": "17.6.36389", + "VSLangProj165": "17.6.36389", + "VSLangProj2": "17.6.36389", + "VSLangProj80": "17.6.36389", + "VSLangProj90": "17.6.36389", + "envdte": "17.6.36389", + "envdte100": "17.6.36389", + "envdte80": "17.6.36389", + "envdte90": "17.6.36389", + "envdte90a": "17.6.36389", + "stdole": "17.6.36389" + } + }, + "Microsoft.VisualStudio.SDK.Analyzers/16.10.10": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.VisualStudio.Threading.Analyzers": "16.10.56" + }, + "build": { + "build/Microsoft.VisualStudio.SDK.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Setup.Configuration.Interop/3.6.2115": { + "type": "package", + "compile": { + "lib/net35/Microsoft.VisualStudio.Setup.Configuration.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net35/_._": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.VisualStudio.Setup.Configuration.Interop.targets": {} + } + }, + "Microsoft.VisualStudio.Shell.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Design/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Framework/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0/14.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.TaskRunnerExplorer.14.0.dll": {} + }, + "runtime": { + "lib/net40/_._": {} + } + }, + "Microsoft.VisualStudio.Telemetry/17.6.46": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.7.0", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Newtonsoft.Json": "13.0.1", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.Telemetry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Data/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Logic/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Logic.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI.Wpf/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextTemplating.VSHost/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextTemplating.VSHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading/17.6.40": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.0.71", + "Microsoft.Win32.Registry": "5.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Threading.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading.Analyzers/17.6.40": { + "type": "package", + "build": { + "build/Microsoft.VisualStudio.Threading.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Utilities/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Utilities.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Utilities.Internal/16.3.42": { + "type": "package", + "compile": { + "lib/net45/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Validation/17.6.11": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.Validation.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VCProjectEngine/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.VCProjectEngine.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.VSHelp/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VSHelp80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.WCFReference.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.WCFReference.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Web.BrowserLink.12.0/12.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.Web.BrowserLink.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net40/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VSSDK.BuildTools/17.6.2164": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VsSDK.CompatibilityAnalyzer": "17.6.2164" + }, + "build": { + "build/Microsoft.VSSDK.BuildTools.props": {}, + "build/Microsoft.VSSDK.BuildTools.targets": {} + } + }, + "Microsoft.VsSDK.CompatibilityAnalyzer/17.6.2164": { + "type": "package", + "frameworkAssemblies": [ + "System.IO.Compression", + "System.IO.Compression.FileSystem", + "WindowsBase" + ], + "build": { + "build/Microsoft.VsSDK.CompatibilityAnalyzer.props": {}, + "build/Microsoft.VsSDK.CompatibilityAnalyzer.targets": {} + } + }, + "Microsoft.Web.WebView2/1.0.2478.35": { + "type": "package", + "compile": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "native": { + "runtimes/win-x64/native/WebView2Loader.dll": {} + }, + "build": { + "build/Microsoft.Web.WebView2.targets": {} + } + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + }, + "compile": { + "ref/net46/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "Microsoft.Win32.Registry/5.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "ref/net461/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "Nerdbank.Streams/2.9.112": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.VisualStudio.Threading": "17.1.46", + "Microsoft.VisualStudio.Validation": "17.0.53", + "System.IO.Pipelines": "6.0.3", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/netstandard2.0/Nerdbank.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "compile": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "runtime.win.Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "compile": { + "ref/netstandard/_._": {} + }, + "runtime": { + "runtimes/win/lib/net/_._": {} + } + }, + "stdole/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/stdole.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "StreamJsonRpc/2.15.29": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.1", + "System.Collections.Immutable": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/StreamJsonRpc.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net45/System.Buffers.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Buffers.dll": { + "related": ".xml" + } + } + }, + "System.Collections.Immutable/7.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.ComponentModel.Composition/7.0.0": { + "type": "package", + "compile": { + "lib/net462/_._": {} + }, + "runtime": { + "lib/net462/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/net461/_._": {} + }, + "runtime": { + "lib/net461/_._": {} + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/7.0.1": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Memory/4.5.5": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Numerics.Vectors": "4.5.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "System", + "mscorlib" + ], + "compile": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + } + }, + "System.Numerics.Vectors/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "System.Numerics", + "mscorlib" + ], + "compile": { + "ref/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + } + }, + "System.Private.Uri/4.3.2": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "Microsoft.NETCore.Targets": "1.1.3" + }, + "compile": { + "ref/netstandard/_._": {} + } + }, + "System.Reflection.Emit/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Reflection.Metadata/7.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "7.0.0", + "System.Memory": "4.5.5" + }, + "compile": { + "lib/net462/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Reflection.TypeExtensions/4.7.0": { + "type": "package", + "compile": { + "ref/net472/System.Reflection.TypeExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + } + }, + "System.Security.AccessControl/6.0.0": { + "type": "package", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net461/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Security.Principal.Windows/5.0.0": { + "type": "package", + "compile": { + "ref/net461/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Text.Json/8.0.5": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/System.Text.Json.targets": {} + } + }, + "System.Threading.AccessControl/7.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net462/System.Threading.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Dataflow/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Threading.Tasks.Dataflow.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.ValueTuple/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net47/System.ValueTuple.dll": {} + }, + "runtime": { + "lib/net47/System.ValueTuple.dll": { + "related": ".xml" + } + } + }, + "VSLangProj/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj110/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj110.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj140/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj140.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj150/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj150.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj157/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj157.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj158/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj158.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj165/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj165.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj2/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj2.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + } + }, + ".NETFramework,Version=v4.7.2/win-x86": { + "envdte/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "envdte90a/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/envdte90a.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "MessagePack/2.5.187": { + "type": "package", + "dependencies": { + "MessagePack.Annotations": "2.5.187", + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "System.Collections.Immutable": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/MessagePack.dll": { + "related": ".xml" + } + } + }, + "MessagePack.Annotations/2.5.187": { + "type": "package", + "compile": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/MessagePack.Annotations.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/8.0.0": { + "type": "package", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "Microsoft.Build.Framework/17.6.3": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.2.2146", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.3.2": { + "type": "package", + "build": { + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.props": {}, + "build/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets": {} + } + }, + "Microsoft.CSharp/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "Microsoft.IO.Redist/6.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.IO.Redist.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.NET.StringTools/17.6.3": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "ref/net472/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/Microsoft.NET.StringTools.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.3": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.ServiceHub.Analyzers/4.2.102": { + "type": "package" + }, + "Microsoft.ServiceHub.Framework/4.2.102": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.VisualStudio.Composition": "17.4.16", + "Microsoft.VisualStudio.Threading": "17.6.40", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.ServiceHub.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.ServiceHub.Resources/4.2.8": { + "type": "package", + "compile": { + "lib/net472/Microsoft.ServiceHub.Resources.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.CommandBars/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CommandBars.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ComponentModelHost/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ComponentModelHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition/17.6.17": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Validation": "17.0.71", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Composition.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Composition.Analyzers/17.6.17": { + "type": "package" + }, + "Microsoft.VisualStudio.CoreUtility/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Threading": "17.6.40", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.CoreUtility.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Debugger.Interop.12.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.12.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.14.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.14.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.15.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.15.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Debugger.Interop.16.0/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Debugger.Interop.16.0.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Designer.Interfaces/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Designer.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Editor/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Shell.15.0": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.6.11" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Editor.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.GraphModel/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.GraphModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ImageCatalog/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.ImageCatalog.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.Imaging/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Interop/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "StreamJsonRpc": "2.15.26", + "System.ComponentModel.Composition": "7.0.0", + "System.Private.Uri": "4.3.2" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.Intellisense/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.Intellisense.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Imaging": "17.6.35829", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Language.StandardClassification/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Text.Logic": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Language.StandardClassification.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.LanguageServer.Client/17.6.42": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.ComponentModelHost": "17.6.252", + "Microsoft.VisualStudio.CoreUtility": "17.6.252", + "Microsoft.VisualStudio.ImageCatalog": "17.6.35829", + "Microsoft.VisualStudio.Interop": "17.6.35829", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.28", + "Microsoft.VisualStudio.Text.Logic": "17.6.252", + "Microsoft.VisualStudio.Utilities": "17.6.35829", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.26", + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.LanguageServer.Client.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.OLE.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.OLE.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Package.LanguageService.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Package.LanguageService.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.ProjectAggregator/17.6.36387": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.ProjectAggregator.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RemoteControl/16.3.52": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.RemoteControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.RpcContracts/17.6.13": { + "type": "package", + "dependencies": { + "Microsoft.ServiceHub.Framework": "4.2.100", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.RpcContracts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.SDK/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.CommandBars": "17.6.36389", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Debugger.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.14.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.15.0": "17.6.36389", + "Microsoft.VisualStudio.Debugger.Interop.16.0": "17.6.36389", + "Microsoft.VisualStudio.Designer.Interfaces": "17.6.36389", + "Microsoft.VisualStudio.Editor": "17.6.268", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.Language": "17.6.268", + "Microsoft.VisualStudio.Language.Intellisense": "17.6.268", + "Microsoft.VisualStudio.Language.NavigateTo.Interfaces": "17.6.268", + "Microsoft.VisualStudio.Language.StandardClassification": "17.6.268", + "Microsoft.VisualStudio.LanguageServer.Client": "17.6.42", + "Microsoft.VisualStudio.OLE.Interop": "17.6.36389", + "Microsoft.VisualStudio.Package.LanguageService.15.0": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Design": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0": "14.0.0", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268", + "Microsoft.VisualStudio.Text.UI.Wpf": "17.6.268", + "Microsoft.VisualStudio.TextManager.Interop": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.10.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.11.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.12.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.8.0": "17.6.36389", + "Microsoft.VisualStudio.TextManager.Interop.9.0": "17.6.36389", + "Microsoft.VisualStudio.TextTemplating.VSHost": "17.6.36389", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.VCProjectEngine": "17.6.36389", + "Microsoft.VisualStudio.VSHelp": "17.6.36389", + "Microsoft.VisualStudio.VSHelp80": "17.6.36389", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.VisualStudio.WCFReference.Interop": "17.6.36389", + "Microsoft.VisualStudio.Web.BrowserLink.12.0": "12.0.0", + "Microsoft.Win32.Primitives": "4.3.0", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0", + "VSLangProj": "17.6.36389", + "VSLangProj100": "17.6.36389", + "VSLangProj110": "17.6.36389", + "VSLangProj140": "17.6.36389", + "VSLangProj150": "17.6.36389", + "VSLangProj157": "17.6.36389", + "VSLangProj158": "17.6.36389", + "VSLangProj165": "17.6.36389", + "VSLangProj2": "17.6.36389", + "VSLangProj80": "17.6.36389", + "VSLangProj90": "17.6.36389", + "envdte": "17.6.36389", + "envdte100": "17.6.36389", + "envdte80": "17.6.36389", + "envdte90": "17.6.36389", + "envdte90a": "17.6.36389", + "stdole": "17.6.36389" + } + }, + "Microsoft.VisualStudio.SDK.Analyzers/16.10.10": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.VisualStudio.Threading.Analyzers": "16.10.56" + }, + "build": { + "build/Microsoft.VisualStudio.SDK.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Setup.Configuration.Interop/3.6.2115": { + "type": "package", + "compile": { + "lib/net35/Microsoft.VisualStudio.Setup.Configuration.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net35/_._": { + "related": ".xml" + } + }, + "build": { + "build/Microsoft.VisualStudio.Setup.Configuration.Interop.targets": {} + } + }, + "Microsoft.VisualStudio.Shell.15.0/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Imaging": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.ProjectAggregator": "17.6.36387", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.15.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Design/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.3.2", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.ComponentModelHost": "17.6.268", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.ImageCatalog": "17.6.36389", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Sdk.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Shell.15.0": "17.6.36389", + "Microsoft.VisualStudio.Shell.Framework": "17.6.36389", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Framework/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Build.Framework": "17.6.3", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Analyzers": "4.2.102", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.GraphModel": "17.6.36389", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.36387", + "Microsoft.VisualStudio.Interop": "17.6.36389", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VisualStudio.Setup.Configuration.Interop": "3.6.2115", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities": "17.6.36389", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encodings.Web": "7.0.0", + "System.Text.Json": "7.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Shell.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Shell.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TaskRunnerExplorer.14.0/14.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.TaskRunnerExplorer.14.0.dll": {} + }, + "runtime": { + "lib/net40/_._": {} + } + }, + "Microsoft.VisualStudio.Telemetry/17.6.46": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.7.0", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Newtonsoft.Json": "13.0.1", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "compile": { + "lib/net45/Microsoft.VisualStudio.Telemetry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Data/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Threading": "17.6.40" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.Logic/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.Logic.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "System.ComponentModel.Composition": "7.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Text.UI.Wpf/17.6.268": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.CoreUtility": "17.6.268", + "Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime": "17.6.35829", + "Microsoft.VisualStudio.Text.Data": "17.6.268", + "Microsoft.VisualStudio.Text.Logic": "17.6.268", + "Microsoft.VisualStudio.Text.UI": "17.6.268" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Text.UI.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.10.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.10.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.11.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.11.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.12.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.8.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.8.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextManager.Interop.9.0/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextManager.Interop.9.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.TextTemplating.VSHost/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Validation": "17.6.11", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.TextTemplating.VSHost.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading/17.6.40": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Validation": "17.0.71", + "Microsoft.Win32.Registry": "5.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Threading.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Threading.Analyzers/17.6.40": { + "type": "package", + "build": { + "build/Microsoft.VisualStudio.Threading.Analyzers.targets": {} + } + }, + "Microsoft.VisualStudio.Utilities/17.6.36389": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "MessagePack.Annotations": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.IO.Redist": "6.0.0", + "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.ServiceHub.Framework": "4.2.102", + "Microsoft.ServiceHub.Resources": "4.2.8", + "Microsoft.VisualStudio.Composition": "17.6.17", + "Microsoft.VisualStudio.Composition.Analyzers": "17.6.17", + "Microsoft.VisualStudio.RemoteControl": "16.3.52", + "Microsoft.VisualStudio.RpcContracts": "17.6.13", + "Microsoft.VisualStudio.Telemetry": "17.6.46", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Microsoft.VisualStudio.Utilities.Internal": "16.3.42", + "Microsoft.VisualStudio.Validation": "17.6.11", + "Microsoft.Win32.Registry": "5.0.0", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.3", + "StreamJsonRpc": "2.15.29", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "7.0.0", + "System.ComponentModel.Composition": "7.0.0", + "System.Composition": "7.0.0", + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Memory": "4.5.5", + "System.Numerics.Vectors": "4.5.0", + "System.Reflection.Metadata": "7.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Threading.AccessControl": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.Utilities.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Utilities.Internal/16.3.42": { + "type": "package", + "compile": { + "lib/net45/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Validation/17.6.11": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.VisualStudio.Validation.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VCProjectEngine/17.6.36389": { + "type": "package", + "compile": { + "lib/net472/Microsoft.VisualStudio.VCProjectEngine.dll": {} + }, + "runtime": { + "lib/net472/_._": {} + } + }, + "Microsoft.VisualStudio.VSHelp/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.VSHelp80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.VSHelp80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.WCFReference.Interop/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/Microsoft.VisualStudio.WCFReference.Interop.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.Web.BrowserLink.12.0/12.0.0": { + "type": "package", + "compile": { + "lib/net40/Microsoft.VisualStudio.Web.BrowserLink.12.0.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net40/_._": { + "related": ".xml" + } + } + }, + "Microsoft.VSSDK.BuildTools/17.6.2164": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.SDK.Analyzers": "16.10.10", + "Microsoft.VsSDK.CompatibilityAnalyzer": "17.6.2164" + }, + "build": { + "build/Microsoft.VSSDK.BuildTools.props": {}, + "build/Microsoft.VSSDK.BuildTools.targets": {} + } + }, + "Microsoft.VsSDK.CompatibilityAnalyzer/17.6.2164": { + "type": "package", + "frameworkAssemblies": [ + "System.IO.Compression", + "System.IO.Compression.FileSystem", + "WindowsBase" + ], + "build": { + "build/Microsoft.VsSDK.CompatibilityAnalyzer.props": {}, + "build/Microsoft.VsSDK.CompatibilityAnalyzer.targets": {} + } + }, + "Microsoft.Web.WebView2/1.0.2478.35": { + "type": "package", + "compile": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Microsoft.Web.WebView2.Core.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.WinForms.dll": { + "related": ".xml" + }, + "lib/net45/Microsoft.Web.WebView2.Wpf.dll": { + "related": ".xml" + } + }, + "native": { + "runtimes/win-x86/native/WebView2Loader.dll": {} + }, + "build": { + "build/Microsoft.Web.WebView2.targets": {} + } + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + }, + "compile": { + "ref/net46/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/net46/_._": {} + } + }, + "Microsoft.Win32.Registry/5.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "ref/net461/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "Nerdbank.Streams/2.9.112": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.VisualStudio.Threading": "17.1.46", + "Microsoft.VisualStudio.Validation": "17.0.53", + "System.IO.Pipelines": "6.0.3", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/netstandard2.0/Nerdbank.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "compile": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net45/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "runtime.win.Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "compile": { + "ref/netstandard/_._": {} + }, + "runtime": { + "runtimes/win/lib/net/_._": {} + } + }, + "stdole/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/stdole.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "StreamJsonRpc/2.15.29": { + "type": "package", + "dependencies": { + "MessagePack": "2.5.108", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.VisualStudio.Threading": "17.6.40", + "Microsoft.VisualStudio.Threading.Analyzers": "17.6.40", + "Nerdbank.Streams": "2.9.112", + "Newtonsoft.Json": "13.0.1", + "System.Collections.Immutable": "7.0.0", + "System.Diagnostics.DiagnosticSource": "7.0.1", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Tasks.Dataflow": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/StreamJsonRpc.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/_._": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net45/System.Buffers.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Buffers.dll": { + "related": ".xml" + } + } + }, + "System.Collections.Immutable/7.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.ComponentModel.Composition/7.0.0": { + "type": "package", + "compile": { + "lib/net462/_._": {} + }, + "runtime": { + "lib/net462/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/net461/_._": {} + }, + "runtime": { + "lib/net461/_._": {} + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net462/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/7.0.1": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Threading.Tasks.Extensions": "4.5.4" + }, + "compile": { + "lib/net462/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Memory/4.5.5": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Numerics.Vectors": "4.5.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "System", + "mscorlib" + ], + "compile": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Memory.dll": { + "related": ".xml" + } + } + }, + "System.Numerics.Vectors/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "System.Numerics", + "mscorlib" + ], + "compile": { + "ref/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net46/System.Numerics.Vectors.dll": { + "related": ".xml" + } + } + }, + "System.Private.Uri/4.3.2": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "Microsoft.NETCore.Targets": "1.1.3" + }, + "compile": { + "ref/netstandard/_._": {} + } + }, + "System.Reflection.Emit/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, + "System.Reflection.Metadata/7.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "7.0.0", + "System.Memory": "4.5.5" + }, + "compile": { + "lib/net462/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Reflection.TypeExtensions/4.7.0": { + "type": "package", + "compile": { + "ref/net472/System.Reflection.TypeExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + } + }, + "System.Security.AccessControl/6.0.0": { + "type": "package", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net461/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Security.Principal.Windows/5.0.0": { + "type": "package", + "compile": { + "ref/net461/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "runtimes/win/lib/net461/_._": { + "related": ".xml" + } + } + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Text.Json/8.0.5": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + }, + "compile": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/System.Text.Json.targets": {} + } + }, + "System.Threading.AccessControl/7.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + }, + "compile": { + "lib/net462/System.Threading.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Dataflow/7.0.0": { + "type": "package", + "compile": { + "lib/net462/System.Threading.Tasks.Dataflow.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net462/_._": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net462/_._": {} + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + }, + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net461/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.ValueTuple/4.5.0": { + "type": "package", + "frameworkAssemblies": [ + "mscorlib" + ], + "compile": { + "ref/net47/System.ValueTuple.dll": {} + }, + "runtime": { + "lib/net47/System.ValueTuple.dll": { + "related": ".xml" + } + } + }, + "VSLangProj/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj100/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj100.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj110/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj110.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj140/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj140.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj150/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj150.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj157/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj157.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj158/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj158.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj165/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj165.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj2/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj2.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj80/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj80.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + }, + "VSLangProj90/17.6.36389": { + "type": "package", + "dependencies": { + "Microsoft.VisualStudio.Interop": "17.6.36389" + }, + "compile": { + "lib/net472/VSLangProj90.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net472/_._": { + "related": ".xml" + } + } + } } }, "libraries": { @@ -4839,6 +16824,22 @@ "packageIcon.png" ] }, + "runtime.win.Microsoft.Win32.Primitives/4.3.0": { + "sha512": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==", + "type": "package", + "path": "runtime.win.microsoft.win32.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "ref/netstandard/_._", + "runtime.win.microsoft.win32.primitives.4.3.0.nupkg.sha512", + "runtime.win.microsoft.win32.primitives.nuspec", + "runtimes/win/lib/net/_._", + "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Primitives.dll" + ] + }, "stdole/17.6.36389": { "sha512": "pODDhxBEF9l/nmB6tgdSrLydJ68+DwlBoL+8IXxMpjOJrN0VzsaQ91hMcnnhZV0Y+v9Y4F3ApCtTVNwIawpeJw==", "type": "package", @@ -6073,6 +18074,8 @@ "packagesPath": "C:\\Users\\RobBos\\.nuget\\packages\\", "outputPath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\obj\\", "projectStyle": "PackageReference", + "skipContentFileWrite": true, + "UsingMicrosoftNETSdk": false, "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], @@ -6090,42 +18093,36 @@ }, "frameworks": { "net472": { - "targetAlias": "net472", "projectReferences": {} } }, - "warningProperties": { - "noWarn": [ - "NU1701" - ], - "warnAsError": [ - "NU1605" - ] - }, "restoreAuditProperties": { "enableAudit": "true", "auditLevel": "low", "auditMode": "direct" - }, - "SdkAnalysisLevel": "10.0.200" + } }, "frameworks": { "net472": { - "targetAlias": "net472", "dependencies": { "MessagePack": { "target": "Package", "version": "[2.5.187, )" }, "Microsoft.VSSDK.BuildTools": { - "suppressParent": "All", "target": "Package", - "version": "[17.6.2164, )" + "version": "[17.6.2164, )", + "noWarn": [ + "NU1604" + ] }, "Microsoft.VisualStudio.SDK": { "include": "Compile, Build, Native, ContentFiles, Analyzers, BuildTransitive", "target": "Package", - "version": "[17.6.36389, )" + "version": "[17.6.36389, )", + "noWarn": [ + "NU1604" + ] }, "Microsoft.Web.WebView2": { "target": "Package", @@ -6139,8 +18136,24 @@ "target": "Package", "version": "[8.0.5, )" } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.201\\RuntimeIdentifierGraph.json" + } + } + }, + "runtimes": { + "win": { + "#import": [] + }, + "win-arm": { + "#import": [] + }, + "win-arm64": { + "#import": [] + }, + "win-x64": { + "#import": [] + }, + "win-x86": { + "#import": [] } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache index 99f7fd16..e1fd33ee 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "0V9z21iSHP4=", + "dgSpecHash": "LsYvHT6cvxI=", "success": true, "projectFilePath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj", "expectedPackageFiles": [ @@ -90,6 +90,7 @@ "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.win32.registry\\5.0.0\\microsoft.win32.registry.5.0.0.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\nerdbank.streams\\2.9.112\\nerdbank.streams.2.9.112.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\newtonsoft.json\\13.0.3\\newtonsoft.json.13.0.3.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\runtime.win.microsoft.win32.primitives\\4.3.0\\runtime.win.microsoft.win32.primitives.4.3.0.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\stdole\\17.6.36389\\stdole.17.6.36389.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\streamjsonrpc\\2.15.29\\streamjsonrpc.2.15.29.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512", diff --git a/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest b/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest index d3caa08c..5fe7a073 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest +++ b/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest @@ -18,27 +18,28 @@ - - - + + amd64 + + DisplayName="Microsoft .NET Framework" + d:Source="Manual" + Version="[4.5,)" /> + + + + - - - diff --git a/visualstudio-extension/src/CopilotTokenTracker/webview/chart.js b/visualstudio-extension/src/CopilotTokenTracker/webview/chart.js new file mode 100644 index 00000000..51b6efb2 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/webview/chart.js @@ -0,0 +1,35108 @@ +"use strict"; +(() => { + var __defProp = Object.defineProperty; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; + var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); + }; + var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + + // node_modules/@kurkle/color/dist/color.esm.js + function round(v) { + return v + 0.5 | 0; + } + function p2b(v) { + return lim(round(v * 2.55), 0, 255); + } + function n2b(v) { + return lim(round(v * 255), 0, 255); + } + function b2n(v) { + return lim(round(v / 2.55) / 100, 0, 1); + } + function n2p(v) { + return lim(round(v * 100), 0, 100); + } + function hexParse(str) { + var len = str.length; + var ret; + if (str[0] === "#") { + if (len === 4 || len === 5) { + ret = { + r: 255 & map$1[str[1]] * 17, + g: 255 & map$1[str[2]] * 17, + b: 255 & map$1[str[3]] * 17, + a: len === 5 ? map$1[str[4]] * 17 : 255 + }; + } else if (len === 7 || len === 9) { + ret = { + r: map$1[str[1]] << 4 | map$1[str[2]], + g: map$1[str[3]] << 4 | map$1[str[4]], + b: map$1[str[5]] << 4 | map$1[str[6]], + a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255 + }; + } + } + return ret; + } + function hexString(v) { + var f = isShort(v) ? h1 : h2; + return v ? "#" + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : void 0; + } + function hsl2rgbn(h, s, l) { + const a = s * Math.min(l, 1 - l); + const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); + return [f(0), f(8), f(4)]; + } + function hsv2rgbn(h, s, v) { + const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); + return [f(5), f(3), f(1)]; + } + function hwb2rgbn(h, w, b) { + const rgb = hsl2rgbn(h, 1, 0.5); + let i; + if (w + b > 1) { + i = 1 / (w + b); + w *= i; + b *= i; + } + for (i = 0; i < 3; i++) { + rgb[i] *= 1 - w - b; + rgb[i] += w; + } + return rgb; + } + function hueValue(r, g, b, d, max) { + if (r === max) { + return (g - b) / d + (g < b ? 6 : 0); + } + if (g === max) { + return (b - r) / d + 2; + } + return (r - g) / d + 4; + } + function rgb2hsl(v) { + const range2 = 255; + const r = v.r / range2; + const g = v.g / range2; + const b = v.b / range2; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const l = (max + min) / 2; + let h, s, d; + if (max !== min) { + d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + h = hueValue(r, g, b, d, max); + h = h * 60 + 0.5; + } + return [h | 0, s || 0, l]; + } + function calln(f, a, b, c) { + return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b); + } + function hsl2rgb(h, s, l) { + return calln(hsl2rgbn, h, s, l); + } + function hwb2rgb(h, w, b) { + return calln(hwb2rgbn, h, w, b); + } + function hsv2rgb(h, s, v) { + return calln(hsv2rgbn, h, s, v); + } + function hue(h) { + return (h % 360 + 360) % 360; + } + function hueParse(str) { + const m = HUE_RE.exec(str); + let a = 255; + let v; + if (!m) { + return; + } + if (m[5] !== v) { + a = m[6] ? p2b(+m[5]) : n2b(+m[5]); + } + const h = hue(+m[2]); + const p1 = +m[3] / 100; + const p2 = +m[4] / 100; + if (m[1] === "hwb") { + v = hwb2rgb(h, p1, p2); + } else if (m[1] === "hsv") { + v = hsv2rgb(h, p1, p2); + } else { + v = hsl2rgb(h, p1, p2); + } + return { + r: v[0], + g: v[1], + b: v[2], + a + }; + } + function rotate(v, deg) { + var h = rgb2hsl(v); + h[0] = hue(h[0] + deg); + h = hsl2rgb(h); + v.r = h[0]; + v.g = h[1]; + v.b = h[2]; + } + function hslString(v) { + if (!v) { + return; + } + const a = rgb2hsl(v); + const h = a[0]; + const s = n2p(a[1]); + const l = n2p(a[2]); + return v.a < 255 ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h}, ${s}%, ${l}%)`; + } + function unpack() { + const unpacked = {}; + const keys = Object.keys(names$1); + const tkeys = Object.keys(map); + let i, j, k, ok, nk; + for (i = 0; i < keys.length; i++) { + ok = nk = keys[i]; + for (j = 0; j < tkeys.length; j++) { + k = tkeys[j]; + nk = nk.replace(k, map[k]); + } + k = parseInt(names$1[ok], 16); + unpacked[nk] = [k >> 16 & 255, k >> 8 & 255, k & 255]; + } + return unpacked; + } + function nameParse(str) { + if (!names) { + names = unpack(); + names.transparent = [0, 0, 0, 0]; + } + const a = names[str.toLowerCase()]; + return a && { + r: a[0], + g: a[1], + b: a[2], + a: a.length === 4 ? a[3] : 255 + }; + } + function rgbParse(str) { + const m = RGB_RE.exec(str); + let a = 255; + let r, g, b; + if (!m) { + return; + } + if (m[7] !== r) { + const v = +m[7]; + a = m[8] ? p2b(v) : lim(v * 255, 0, 255); + } + r = +m[1]; + g = +m[3]; + b = +m[5]; + r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255)); + g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255)); + b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255)); + return { + r, + g, + b, + a + }; + } + function rgbString(v) { + return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`); + } + function interpolate(rgb1, rgb2, t) { + const r = from(b2n(rgb1.r)); + const g = from(b2n(rgb1.g)); + const b = from(b2n(rgb1.b)); + return { + r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))), + g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))), + b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))), + a: rgb1.a + t * (rgb2.a - rgb1.a) + }; + } + function modHSL(v, i, ratio) { + if (v) { + let tmp = rgb2hsl(v); + tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); + tmp = hsl2rgb(tmp); + v.r = tmp[0]; + v.g = tmp[1]; + v.b = tmp[2]; + } + } + function clone(v, proto) { + return v ? Object.assign(proto || {}, v) : v; + } + function fromObject(input) { + var v = { r: 0, g: 0, b: 0, a: 255 }; + if (Array.isArray(input)) { + if (input.length >= 3) { + v = { r: input[0], g: input[1], b: input[2], a: 255 }; + if (input.length > 3) { + v.a = n2b(input[3]); + } + } + } else { + v = clone(input, { r: 0, g: 0, b: 0, a: 1 }); + v.a = n2b(v.a); + } + return v; + } + function functionParse(str) { + if (str.charAt(0) === "r") { + return rgbParse(str); + } + return hueParse(str); + } + var lim, map$1, hex, h1, h2, eq, isShort, alpha, HUE_RE, map, names$1, names, RGB_RE, to, from, Color; + var init_color_esm = __esm({ + "node_modules/@kurkle/color/dist/color.esm.js"() { + lim = (v, l, h) => Math.max(Math.min(v, h), l); + map$1 = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15 }; + hex = [..."0123456789ABCDEF"]; + h1 = (b) => hex[b & 15]; + h2 = (b) => hex[(b & 240) >> 4] + hex[b & 15]; + eq = (b) => (b & 240) >> 4 === (b & 15); + isShort = (v) => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); + alpha = (a, f) => a < 255 ? f(a) : ""; + HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/; + map = { + x: "dark", + Z: "light", + Y: "re", + X: "blu", + W: "gr", + V: "medium", + U: "slate", + A: "ee", + T: "ol", + S: "or", + B: "ra", + C: "lateg", + D: "ights", + R: "in", + Q: "turquois", + E: "hi", + P: "ro", + O: "al", + N: "le", + M: "de", + L: "yello", + F: "en", + K: "ch", + G: "arks", + H: "ea", + I: "ightg", + J: "wh" + }; + names$1 = { + OiceXe: "f0f8ff", + antiquewEte: "faebd7", + aqua: "ffff", + aquamarRe: "7fffd4", + azuY: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "0", + blanKedOmond: "ffebcd", + Xe: "ff", + XeviTet: "8a2be2", + bPwn: "a52a2a", + burlywood: "deb887", + caMtXe: "5f9ea0", + KartYuse: "7fff00", + KocTate: "d2691e", + cSO: "ff7f50", + cSnflowerXe: "6495ed", + cSnsilk: "fff8dc", + crimson: "dc143c", + cyan: "ffff", + xXe: "8b", + xcyan: "8b8b", + xgTMnPd: "b8860b", + xWay: "a9a9a9", + xgYF: "6400", + xgYy: "a9a9a9", + xkhaki: "bdb76b", + xmagFta: "8b008b", + xTivegYF: "556b2f", + xSange: "ff8c00", + xScEd: "9932cc", + xYd: "8b0000", + xsOmon: "e9967a", + xsHgYF: "8fbc8f", + xUXe: "483d8b", + xUWay: "2f4f4f", + xUgYy: "2f4f4f", + xQe: "ced1", + xviTet: "9400d3", + dAppRk: "ff1493", + dApskyXe: "bfff", + dimWay: "696969", + dimgYy: "696969", + dodgerXe: "1e90ff", + fiYbrick: "b22222", + flSOwEte: "fffaf0", + foYstWAn: "228b22", + fuKsia: "ff00ff", + gaRsbSo: "dcdcdc", + ghostwEte: "f8f8ff", + gTd: "ffd700", + gTMnPd: "daa520", + Way: "808080", + gYF: "8000", + gYFLw: "adff2f", + gYy: "808080", + honeyMw: "f0fff0", + hotpRk: "ff69b4", + RdianYd: "cd5c5c", + Rdigo: "4b0082", + ivSy: "fffff0", + khaki: "f0e68c", + lavFMr: "e6e6fa", + lavFMrXsh: "fff0f5", + lawngYF: "7cfc00", + NmoncEffon: "fffacd", + ZXe: "add8e6", + ZcSO: "f08080", + Zcyan: "e0ffff", + ZgTMnPdLw: "fafad2", + ZWay: "d3d3d3", + ZgYF: "90ee90", + ZgYy: "d3d3d3", + ZpRk: "ffb6c1", + ZsOmon: "ffa07a", + ZsHgYF: "20b2aa", + ZskyXe: "87cefa", + ZUWay: "778899", + ZUgYy: "778899", + ZstAlXe: "b0c4de", + ZLw: "ffffe0", + lime: "ff00", + limegYF: "32cd32", + lRF: "faf0e6", + magFta: "ff00ff", + maPon: "800000", + VaquamarRe: "66cdaa", + VXe: "cd", + VScEd: "ba55d3", + VpurpN: "9370db", + VsHgYF: "3cb371", + VUXe: "7b68ee", + VsprRggYF: "fa9a", + VQe: "48d1cc", + VviTetYd: "c71585", + midnightXe: "191970", + mRtcYam: "f5fffa", + mistyPse: "ffe4e1", + moccasR: "ffe4b5", + navajowEte: "ffdead", + navy: "80", + Tdlace: "fdf5e6", + Tive: "808000", + TivedBb: "6b8e23", + Sange: "ffa500", + SangeYd: "ff4500", + ScEd: "da70d6", + pOegTMnPd: "eee8aa", + pOegYF: "98fb98", + pOeQe: "afeeee", + pOeviTetYd: "db7093", + papayawEp: "ffefd5", + pHKpuff: "ffdab9", + peru: "cd853f", + pRk: "ffc0cb", + plum: "dda0dd", + powMrXe: "b0e0e6", + purpN: "800080", + YbeccapurpN: "663399", + Yd: "ff0000", + Psybrown: "bc8f8f", + PyOXe: "4169e1", + saddNbPwn: "8b4513", + sOmon: "fa8072", + sandybPwn: "f4a460", + sHgYF: "2e8b57", + sHshell: "fff5ee", + siFna: "a0522d", + silver: "c0c0c0", + skyXe: "87ceeb", + UXe: "6a5acd", + UWay: "708090", + UgYy: "708090", + snow: "fffafa", + sprRggYF: "ff7f", + stAlXe: "4682b4", + tan: "d2b48c", + teO: "8080", + tEstN: "d8bfd8", + tomato: "ff6347", + Qe: "40e0d0", + viTet: "ee82ee", + JHt: "f5deb3", + wEte: "ffffff", + wEtesmoke: "f5f5f5", + Lw: "ffff00", + LwgYF: "9acd32" + }; + RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; + to = (v) => v <= 31308e-7 ? v * 12.92 : Math.pow(v, 1 / 2.4) * 1.055 - 0.055; + from = (v) => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); + Color = class _Color { + constructor(input) { + if (input instanceof _Color) { + return input; + } + const type = typeof input; + let v; + if (type === "object") { + v = fromObject(input); + } else if (type === "string") { + v = hexParse(input) || nameParse(input) || functionParse(input); + } + this._rgb = v; + this._valid = !!v; + } + get valid() { + return this._valid; + } + get rgb() { + var v = clone(this._rgb); + if (v) { + v.a = b2n(v.a); + } + return v; + } + set rgb(obj) { + this._rgb = fromObject(obj); + } + rgbString() { + return this._valid ? rgbString(this._rgb) : void 0; + } + hexString() { + return this._valid ? hexString(this._rgb) : void 0; + } + hslString() { + return this._valid ? hslString(this._rgb) : void 0; + } + mix(color2, weight) { + if (color2) { + const c1 = this.rgb; + const c2 = color2.rgb; + let w2; + const p = weight === w2 ? 0.5 : weight; + const w = 2 * p - 1; + const a = c1.a - c2.a; + const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2; + w2 = 1 - w1; + c1.r = 255 & w1 * c1.r + w2 * c2.r + 0.5; + c1.g = 255 & w1 * c1.g + w2 * c2.g + 0.5; + c1.b = 255 & w1 * c1.b + w2 * c2.b + 0.5; + c1.a = p * c1.a + (1 - p) * c2.a; + this.rgb = c1; + } + return this; + } + interpolate(color2, t) { + if (color2) { + this._rgb = interpolate(this._rgb, color2._rgb, t); + } + return this; + } + clone() { + return new _Color(this.rgb); + } + alpha(a) { + this._rgb.a = n2b(a); + return this; + } + clearer(ratio) { + const rgb = this._rgb; + rgb.a *= 1 - ratio; + return this; + } + greyscale() { + const rgb = this._rgb; + const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); + rgb.r = rgb.g = rgb.b = val; + return this; + } + opaquer(ratio) { + const rgb = this._rgb; + rgb.a *= 1 + ratio; + return this; + } + negate() { + const v = this._rgb; + v.r = 255 - v.r; + v.g = 255 - v.g; + v.b = 255 - v.b; + return this; + } + lighten(ratio) { + modHSL(this._rgb, 2, ratio); + return this; + } + darken(ratio) { + modHSL(this._rgb, 2, -ratio); + return this; + } + saturate(ratio) { + modHSL(this._rgb, 1, ratio); + return this; + } + desaturate(ratio) { + modHSL(this._rgb, 1, -ratio); + return this; + } + rotate(deg) { + rotate(this._rgb, deg); + return this; + } + }; + } + }); + + // node_modules/chart.js/dist/chunks/helpers.dataset.js + function noop() { + } + function isNullOrUndef(value) { + return value === null || value === void 0; + } + function isArray(value) { + if (Array.isArray && Array.isArray(value)) { + return true; + } + const type = Object.prototype.toString.call(value); + if (type.slice(0, 7) === "[object" && type.slice(-6) === "Array]") { + return true; + } + return false; + } + function isObject(value) { + return value !== null && Object.prototype.toString.call(value) === "[object Object]"; + } + function isNumberFinite(value) { + return (typeof value === "number" || value instanceof Number) && isFinite(+value); + } + function finiteOrDefault(value, defaultValue) { + return isNumberFinite(value) ? value : defaultValue; + } + function valueOrDefault(value, defaultValue) { + return typeof value === "undefined" ? defaultValue : value; + } + function callback(fn, args, thisArg) { + if (fn && typeof fn.call === "function") { + return fn.apply(thisArg, args); + } + } + function each(loopable, fn, thisArg, reverse) { + let i, len, keys; + if (isArray(loopable)) { + len = loopable.length; + if (reverse) { + for (i = len - 1; i >= 0; i--) { + fn.call(thisArg, loopable[i], i); + } + } else { + for (i = 0; i < len; i++) { + fn.call(thisArg, loopable[i], i); + } + } + } else if (isObject(loopable)) { + keys = Object.keys(loopable); + len = keys.length; + for (i = 0; i < len; i++) { + fn.call(thisArg, loopable[keys[i]], keys[i]); + } + } + } + function _elementsEqual(a0, a1) { + let i, ilen, v0, v1; + if (!a0 || !a1 || a0.length !== a1.length) { + return false; + } + for (i = 0, ilen = a0.length; i < ilen; ++i) { + v0 = a0[i]; + v1 = a1[i]; + if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) { + return false; + } + } + return true; + } + function clone2(source) { + if (isArray(source)) { + return source.map(clone2); + } + if (isObject(source)) { + const target = /* @__PURE__ */ Object.create(null); + const keys = Object.keys(source); + const klen = keys.length; + let k = 0; + for (; k < klen; ++k) { + target[keys[k]] = clone2(source[keys[k]]); + } + return target; + } + return source; + } + function isValidKey(key) { + return [ + "__proto__", + "prototype", + "constructor" + ].indexOf(key) === -1; + } + function _merger(key, target, source, options) { + if (!isValidKey(key)) { + return; + } + const tval = target[key]; + const sval = source[key]; + if (isObject(tval) && isObject(sval)) { + merge(tval, sval, options); + } else { + target[key] = clone2(sval); + } + } + function merge(target, source, options) { + const sources = isArray(source) ? source : [ + source + ]; + const ilen = sources.length; + if (!isObject(target)) { + return target; + } + options = options || {}; + const merger = options.merger || _merger; + let current; + for (let i = 0; i < ilen; ++i) { + current = sources[i]; + if (!isObject(current)) { + continue; + } + const keys = Object.keys(current); + for (let k = 0, klen = keys.length; k < klen; ++k) { + merger(keys[k], target, current, options); + } + } + return target; + } + function mergeIf(target, source) { + return merge(target, source, { + merger: _mergerIf + }); + } + function _mergerIf(key, target, source) { + if (!isValidKey(key)) { + return; + } + const tval = target[key]; + const sval = source[key]; + if (isObject(tval) && isObject(sval)) { + mergeIf(tval, sval); + } else if (!Object.prototype.hasOwnProperty.call(target, key)) { + target[key] = clone2(sval); + } + } + function _splitKey(key) { + const parts = key.split("."); + const keys = []; + let tmp = ""; + for (const part of parts) { + tmp += part; + if (tmp.endsWith("\\")) { + tmp = tmp.slice(0, -1) + "."; + } else { + keys.push(tmp); + tmp = ""; + } + } + return keys; + } + function _getKeyResolver(key) { + const keys = _splitKey(key); + return (obj) => { + for (const k of keys) { + if (k === "") { + break; + } + obj = obj && obj[k]; + } + return obj; + }; + } + function resolveObjectKey(obj, key) { + const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key)); + return resolver(obj); + } + function _capitalize(str) { + return str.charAt(0).toUpperCase() + str.slice(1); + } + function _isClickEvent(e) { + return e.type === "mouseup" || e.type === "click" || e.type === "contextmenu"; + } + function almostEquals(x, y, epsilon) { + return Math.abs(x - y) < epsilon; + } + function niceNum(range2) { + const roundedRange = Math.round(range2); + range2 = almostEquals(range2, roundedRange, range2 / 1e3) ? roundedRange : range2; + const niceRange = Math.pow(10, Math.floor(log10(range2))); + const fraction = range2 / niceRange; + const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10; + return niceFraction * niceRange; + } + function _factorize(value) { + const result = []; + const sqrt = Math.sqrt(value); + let i; + for (i = 1; i < sqrt; i++) { + if (value % i === 0) { + result.push(i); + result.push(value / i); + } + } + if (sqrt === (sqrt | 0)) { + result.push(sqrt); + } + result.sort((a, b) => a - b).pop(); + return result; + } + function isNonPrimitive(n) { + return typeof n === "symbol" || typeof n === "object" && n !== null && !(Symbol.toPrimitive in n || "toString" in n || "valueOf" in n); + } + function isNumber(n) { + return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n); + } + function almostWhole(x, epsilon) { + const rounded = Math.round(x); + return rounded - epsilon <= x && rounded + epsilon >= x; + } + function _setMinAndMaxByKey(array, target, property) { + let i, ilen, value; + for (i = 0, ilen = array.length; i < ilen; i++) { + value = array[i][property]; + if (!isNaN(value)) { + target.min = Math.min(target.min, value); + target.max = Math.max(target.max, value); + } + } + } + function toRadians(degrees) { + return degrees * (PI / 180); + } + function toDegrees(radians) { + return radians * (180 / PI); + } + function _decimalPlaces(x) { + if (!isNumberFinite(x)) { + return; + } + let e = 1; + let p = 0; + while (Math.round(x * e) / e !== x) { + e *= 10; + p++; + } + return p; + } + function getAngleFromPoint(centrePoint, anglePoint) { + const distanceFromXCenter = anglePoint.x - centrePoint.x; + const distanceFromYCenter = anglePoint.y - centrePoint.y; + const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter); + let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter); + if (angle < -0.5 * PI) { + angle += TAU; + } + return { + angle, + distance: radialDistanceFromCenter + }; + } + function distanceBetweenPoints(pt1, pt2) { + return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2)); + } + function _angleDiff(a, b) { + return (a - b + PITAU) % TAU - PI; + } + function _normalizeAngle(a) { + return (a % TAU + TAU) % TAU; + } + function _angleBetween(angle, start, end, sameAngleIsFullCircle) { + const a = _normalizeAngle(angle); + const s = _normalizeAngle(start); + const e = _normalizeAngle(end); + const angleToStart = _normalizeAngle(s - a); + const angleToEnd = _normalizeAngle(e - a); + const startToAngle = _normalizeAngle(a - s); + const endToAngle = _normalizeAngle(a - e); + return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle; + } + function _limitValue(value, min, max) { + return Math.max(min, Math.min(max, value)); + } + function _int16Range(value) { + return _limitValue(value, -32768, 32767); + } + function _isBetween(value, start, end, epsilon = 1e-6) { + return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon; + } + function _lookup(table, value, cmp) { + cmp = cmp || ((index2) => table[index2] < value); + let hi = table.length - 1; + let lo = 0; + let mid; + while (hi - lo > 1) { + mid = lo + hi >> 1; + if (cmp(mid)) { + lo = mid; + } else { + hi = mid; + } + } + return { + lo, + hi + }; + } + function _filterBetween(values, min, max) { + let start = 0; + let end = values.length; + while (start < end && values[start] < min) { + start++; + } + while (end > start && values[end - 1] > max) { + end--; + } + return start > 0 || end < values.length ? values.slice(start, end) : values; + } + function listenArrayEvents(array, listener) { + if (array._chartjs) { + array._chartjs.listeners.push(listener); + return; + } + Object.defineProperty(array, "_chartjs", { + configurable: true, + enumerable: false, + value: { + listeners: [ + listener + ] + } + }); + arrayEvents.forEach((key) => { + const method = "_onData" + _capitalize(key); + const base = array[key]; + Object.defineProperty(array, key, { + configurable: true, + enumerable: false, + value(...args) { + const res = base.apply(this, args); + array._chartjs.listeners.forEach((object) => { + if (typeof object[method] === "function") { + object[method](...args); + } + }); + return res; + } + }); + }); + } + function unlistenArrayEvents(array, listener) { + const stub = array._chartjs; + if (!stub) { + return; + } + const listeners = stub.listeners; + const index2 = listeners.indexOf(listener); + if (index2 !== -1) { + listeners.splice(index2, 1); + } + if (listeners.length > 0) { + return; + } + arrayEvents.forEach((key) => { + delete array[key]; + }); + delete array._chartjs; + } + function _arrayUnique(items) { + const set2 = new Set(items); + if (set2.size === items.length) { + return items; + } + return Array.from(set2); + } + function throttled(fn, thisArg) { + let argsToUse = []; + let ticking = false; + return function(...args) { + argsToUse = args; + if (!ticking) { + ticking = true; + requestAnimFrame.call(window, () => { + ticking = false; + fn.apply(thisArg, argsToUse); + }); + } + }; + } + function debounce(fn, delay) { + let timeout; + return function(...args) { + if (delay) { + clearTimeout(timeout); + timeout = setTimeout(fn, delay, args); + } else { + fn.apply(this, args); + } + return delay; + }; + } + function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) { + const pointCount = points.length; + let start = 0; + let count = pointCount; + if (meta._sorted) { + const { iScale, vScale, _parsed } = meta; + const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null; + const axis = iScale.axis; + const { min, max, minDefined, maxDefined } = iScale.getUserBounds(); + if (minDefined) { + start = Math.min( + // @ts-expect-error Need to type _parsed + _lookupByKey(_parsed, axis, min).lo, + // @ts-expect-error Need to fix types on _lookupByKey + animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo + ); + if (spanGaps) { + const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point) => !isNullOrUndef(point[vScale.axis])); + start -= Math.max(0, distanceToDefinedLo); + } + start = _limitValue(start, 0, pointCount - 1); + } + if (maxDefined) { + let end = Math.max( + // @ts-expect-error Need to type _parsed + _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, + // @ts-expect-error Need to fix types on _lookupByKey + animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1 + ); + if (spanGaps) { + const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point) => !isNullOrUndef(point[vScale.axis])); + end += Math.max(0, distanceToDefinedHi); + } + count = _limitValue(end, start, pointCount) - start; + } else { + count = pointCount - start; + } + } + return { + start, + count + }; + } + function _scaleRangesChanged(meta) { + const { xScale, yScale, _scaleRanges } = meta; + const newRanges = { + xmin: xScale.min, + xmax: xScale.max, + ymin: yScale.min, + ymax: yScale.max + }; + if (!_scaleRanges) { + meta._scaleRanges = newRanges; + return true; + } + const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max; + Object.assign(_scaleRanges, newRanges); + return changed; + } + function isPatternOrGradient(value) { + if (value && typeof value === "object") { + const type = value.toString(); + return type === "[object CanvasPattern]" || type === "[object CanvasGradient]"; + } + return false; + } + function color(value) { + return isPatternOrGradient(value) ? value : new Color(value); + } + function getHoverColor(value) { + return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString(); + } + function applyAnimationsDefaults(defaults2) { + defaults2.set("animation", { + delay: void 0, + duration: 1e3, + easing: "easeOutQuart", + fn: void 0, + from: void 0, + loop: void 0, + to: void 0, + type: void 0 + }); + defaults2.describe("animation", { + _fallback: false, + _indexable: false, + _scriptable: (name) => name !== "onProgress" && name !== "onComplete" && name !== "fn" + }); + defaults2.set("animations", { + colors: { + type: "color", + properties: colors + }, + numbers: { + type: "number", + properties: numbers + } + }); + defaults2.describe("animations", { + _fallback: "animation" + }); + defaults2.set("transitions", { + active: { + animation: { + duration: 400 + } + }, + resize: { + animation: { + duration: 0 + } + }, + show: { + animations: { + colors: { + from: "transparent" + }, + visible: { + type: "boolean", + duration: 0 + } + } + }, + hide: { + animations: { + colors: { + to: "transparent" + }, + visible: { + type: "boolean", + easing: "linear", + fn: (v) => v | 0 + } + } + } + }); + } + function applyLayoutsDefaults(defaults2) { + defaults2.set("layout", { + autoPadding: true, + padding: { + top: 0, + right: 0, + bottom: 0, + left: 0 + } + }); + } + function getNumberFormat(locale, options) { + options = options || {}; + const cacheKey = locale + JSON.stringify(options); + let formatter = intlCache.get(cacheKey); + if (!formatter) { + formatter = new Intl.NumberFormat(locale, options); + intlCache.set(cacheKey, formatter); + } + return formatter; + } + function formatNumber(num, locale, options) { + return getNumberFormat(locale, options).format(num); + } + function calculateDelta(tickValue, ticks) { + let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value; + if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) { + delta = tickValue - Math.floor(tickValue); + } + return delta; + } + function applyScaleDefaults(defaults2) { + defaults2.set("scale", { + display: true, + offset: false, + reverse: false, + beginAtZero: false, + bounds: "ticks", + clip: true, + grace: 0, + grid: { + display: true, + lineWidth: 1, + drawOnChartArea: true, + drawTicks: true, + tickLength: 8, + tickWidth: (_ctx, options) => options.lineWidth, + tickColor: (_ctx, options) => options.color, + offset: false + }, + border: { + display: true, + dash: [], + dashOffset: 0, + width: 1 + }, + title: { + display: false, + text: "", + padding: { + top: 4, + bottom: 4 + } + }, + ticks: { + minRotation: 0, + maxRotation: 50, + mirror: false, + textStrokeWidth: 0, + textStrokeColor: "", + padding: 3, + display: true, + autoSkip: true, + autoSkipPadding: 3, + labelOffset: 0, + callback: Ticks.formatters.values, + minor: {}, + major: {}, + align: "center", + crossAlign: "near", + showLabelBackdrop: false, + backdropColor: "rgba(255, 255, 255, 0.75)", + backdropPadding: 2 + } + }); + defaults2.route("scale.ticks", "color", "", "color"); + defaults2.route("scale.grid", "color", "", "borderColor"); + defaults2.route("scale.border", "color", "", "borderColor"); + defaults2.route("scale.title", "color", "", "color"); + defaults2.describe("scale", { + _fallback: false, + _scriptable: (name) => !name.startsWith("before") && !name.startsWith("after") && name !== "callback" && name !== "parser", + _indexable: (name) => name !== "borderDash" && name !== "tickBorderDash" && name !== "dash" + }); + defaults2.describe("scales", { + _fallback: "scale" + }); + defaults2.describe("scale.ticks", { + _scriptable: (name) => name !== "backdropPadding" && name !== "callback", + _indexable: (name) => name !== "backdropPadding" + }); + } + function getScope$1(node, key) { + if (!key) { + return node; + } + const keys = key.split("."); + for (let i = 0, n = keys.length; i < n; ++i) { + const k = keys[i]; + node = node[k] || (node[k] = /* @__PURE__ */ Object.create(null)); + } + return node; + } + function set(root, scope, values) { + if (typeof scope === "string") { + return merge(getScope$1(root, scope), values); + } + return merge(getScope$1(root, ""), scope); + } + function toFontString(font) { + if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) { + return null; + } + return (font.style ? font.style + " " : "") + (font.weight ? font.weight + " " : "") + font.size + "px " + font.family; + } + function _measureText(ctx, data, gc, longest, string) { + let textWidth = data[string]; + if (!textWidth) { + textWidth = data[string] = ctx.measureText(string).width; + gc.push(string); + } + if (textWidth > longest) { + longest = textWidth; + } + return longest; + } + function _longestText(ctx, font, arrayOfThings, cache2) { + cache2 = cache2 || {}; + let data = cache2.data = cache2.data || {}; + let gc = cache2.garbageCollect = cache2.garbageCollect || []; + if (cache2.font !== font) { + data = cache2.data = {}; + gc = cache2.garbageCollect = []; + cache2.font = font; + } + ctx.save(); + ctx.font = font; + let longest = 0; + const ilen = arrayOfThings.length; + let i, j, jlen, thing, nestedThing; + for (i = 0; i < ilen; i++) { + thing = arrayOfThings[i]; + if (thing !== void 0 && thing !== null && !isArray(thing)) { + longest = _measureText(ctx, data, gc, longest, thing); + } else if (isArray(thing)) { + for (j = 0, jlen = thing.length; j < jlen; j++) { + nestedThing = thing[j]; + if (nestedThing !== void 0 && nestedThing !== null && !isArray(nestedThing)) { + longest = _measureText(ctx, data, gc, longest, nestedThing); + } + } + } + } + ctx.restore(); + const gcLen = gc.length / 2; + if (gcLen > arrayOfThings.length) { + for (i = 0; i < gcLen; i++) { + delete data[gc[i]]; + } + gc.splice(0, gcLen); + } + return longest; + } + function _alignPixel(chart2, pixel, width) { + const devicePixelRatio = chart2.currentDevicePixelRatio; + const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0; + return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth; + } + function clearCanvas(canvas, ctx) { + if (!ctx && !canvas) { + return; + } + ctx = ctx || canvas.getContext("2d"); + ctx.save(); + ctx.resetTransform(); + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.restore(); + } + function drawPoint(ctx, options, x, y) { + drawPointLegend(ctx, options, x, y, null); + } + function drawPointLegend(ctx, options, x, y, w) { + let type, xOffset, yOffset, size, cornerRadius2, width, xOffsetW, yOffsetW; + const style = options.pointStyle; + const rotation = options.rotation; + const radius = options.radius; + let rad = (rotation || 0) * RAD_PER_DEG; + if (style && typeof style === "object") { + type = style.toString(); + if (type === "[object HTMLImageElement]" || type === "[object HTMLCanvasElement]") { + ctx.save(); + ctx.translate(x, y); + ctx.rotate(rad); + ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height); + ctx.restore(); + return; + } + } + if (isNaN(radius) || radius <= 0) { + return; + } + ctx.beginPath(); + switch (style) { + // Default includes circle + default: + if (w) { + ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU); + } else { + ctx.arc(x, y, radius, 0, TAU); + } + ctx.closePath(); + break; + case "triangle": + width = w ? w / 2 : radius; + ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); + rad += TWO_THIRDS_PI; + ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); + rad += TWO_THIRDS_PI; + ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); + ctx.closePath(); + break; + case "rectRounded": + cornerRadius2 = radius * 0.516; + size = radius - cornerRadius2; + xOffset = Math.cos(rad + QUARTER_PI) * size; + xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius2 : size); + yOffset = Math.sin(rad + QUARTER_PI) * size; + yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius2 : size); + ctx.arc(x - xOffsetW, y - yOffset, cornerRadius2, rad - PI, rad - HALF_PI); + ctx.arc(x + yOffsetW, y - xOffset, cornerRadius2, rad - HALF_PI, rad); + ctx.arc(x + xOffsetW, y + yOffset, cornerRadius2, rad, rad + HALF_PI); + ctx.arc(x - yOffsetW, y + xOffset, cornerRadius2, rad + HALF_PI, rad + PI); + ctx.closePath(); + break; + case "rect": + if (!rotation) { + size = Math.SQRT1_2 * radius; + width = w ? w / 2 : size; + ctx.rect(x - width, y - size, 2 * width, 2 * size); + break; + } + rad += QUARTER_PI; + /* falls through */ + case "rectRot": + xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); + ctx.moveTo(x - xOffsetW, y - yOffset); + ctx.lineTo(x + yOffsetW, y - xOffset); + ctx.lineTo(x + xOffsetW, y + yOffset); + ctx.lineTo(x - yOffsetW, y + xOffset); + ctx.closePath(); + break; + case "crossRot": + rad += QUARTER_PI; + /* falls through */ + case "cross": + xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); + ctx.moveTo(x - xOffsetW, y - yOffset); + ctx.lineTo(x + xOffsetW, y + yOffset); + ctx.moveTo(x + yOffsetW, y - xOffset); + ctx.lineTo(x - yOffsetW, y + xOffset); + break; + case "star": + xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); + ctx.moveTo(x - xOffsetW, y - yOffset); + ctx.lineTo(x + xOffsetW, y + yOffset); + ctx.moveTo(x + yOffsetW, y - xOffset); + ctx.lineTo(x - yOffsetW, y + xOffset); + rad += QUARTER_PI; + xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); + ctx.moveTo(x - xOffsetW, y - yOffset); + ctx.lineTo(x + xOffsetW, y + yOffset); + ctx.moveTo(x + yOffsetW, y - xOffset); + ctx.lineTo(x - yOffsetW, y + xOffset); + break; + case "line": + xOffset = w ? w / 2 : Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + break; + case "dash": + ctx.moveTo(x, y); + ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius); + break; + case false: + ctx.closePath(); + break; + } + ctx.fill(); + if (options.borderWidth > 0) { + ctx.stroke(); + } + } + function _isPointInArea(point, area, margin) { + margin = margin || 0.5; + return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin; + } + function clipArea(ctx, area) { + ctx.save(); + ctx.beginPath(); + ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); + ctx.clip(); + } + function unclipArea(ctx) { + ctx.restore(); + } + function _steppedLineTo(ctx, previous, target, flip, mode) { + if (!previous) { + return ctx.lineTo(target.x, target.y); + } + if (mode === "middle") { + const midpoint = (previous.x + target.x) / 2; + ctx.lineTo(midpoint, previous.y); + ctx.lineTo(midpoint, target.y); + } else if (mode === "after" !== !!flip) { + ctx.lineTo(previous.x, target.y); + } else { + ctx.lineTo(target.x, previous.y); + } + ctx.lineTo(target.x, target.y); + } + function _bezierCurveTo(ctx, previous, target, flip) { + if (!previous) { + return ctx.lineTo(target.x, target.y); + } + ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y); + } + function setRenderOpts(ctx, opts) { + if (opts.translation) { + ctx.translate(opts.translation[0], opts.translation[1]); + } + if (!isNullOrUndef(opts.rotation)) { + ctx.rotate(opts.rotation); + } + if (opts.color) { + ctx.fillStyle = opts.color; + } + if (opts.textAlign) { + ctx.textAlign = opts.textAlign; + } + if (opts.textBaseline) { + ctx.textBaseline = opts.textBaseline; + } + } + function decorateText(ctx, x, y, line, opts) { + if (opts.strikethrough || opts.underline) { + const metrics = ctx.measureText(line); + const left = x - metrics.actualBoundingBoxLeft; + const right = x + metrics.actualBoundingBoxRight; + const top = y - metrics.actualBoundingBoxAscent; + const bottom = y + metrics.actualBoundingBoxDescent; + const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom; + ctx.strokeStyle = ctx.fillStyle; + ctx.beginPath(); + ctx.lineWidth = opts.decorationWidth || 2; + ctx.moveTo(left, yDecoration); + ctx.lineTo(right, yDecoration); + ctx.stroke(); + } + } + function drawBackdrop(ctx, opts) { + const oldColor = ctx.fillStyle; + ctx.fillStyle = opts.color; + ctx.fillRect(opts.left, opts.top, opts.width, opts.height); + ctx.fillStyle = oldColor; + } + function renderText(ctx, text, x, y, font, opts = {}) { + const lines = isArray(text) ? text : [ + text + ]; + const stroke = opts.strokeWidth > 0 && opts.strokeColor !== ""; + let i, line; + ctx.save(); + ctx.font = font.string; + setRenderOpts(ctx, opts); + for (i = 0; i < lines.length; ++i) { + line = lines[i]; + if (opts.backdrop) { + drawBackdrop(ctx, opts.backdrop); + } + if (stroke) { + if (opts.strokeColor) { + ctx.strokeStyle = opts.strokeColor; + } + if (!isNullOrUndef(opts.strokeWidth)) { + ctx.lineWidth = opts.strokeWidth; + } + ctx.strokeText(line, x, y, opts.maxWidth); + } + ctx.fillText(line, x, y, opts.maxWidth); + decorateText(ctx, x, y, line, opts); + y += Number(font.lineHeight); + } + ctx.restore(); + } + function addRoundedRectPath(ctx, rect) { + const { x, y, w, h, radius } = rect; + ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true); + ctx.lineTo(x, y + h - radius.bottomLeft); + ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true); + ctx.lineTo(x + w - radius.bottomRight, y + h); + ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true); + ctx.lineTo(x + w, y + radius.topRight); + ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true); + ctx.lineTo(x + radius.topLeft, y); + } + function toLineHeight(value, size) { + const matches2 = ("" + value).match(LINE_HEIGHT); + if (!matches2 || matches2[1] === "normal") { + return size * 1.2; + } + value = +matches2[2]; + switch (matches2[3]) { + case "px": + return value; + case "%": + value /= 100; + break; + } + return size * value; + } + function _readValueToProps(value, props) { + const ret = {}; + const objProps = isObject(props); + const keys = objProps ? Object.keys(props) : props; + const read = isObject(value) ? objProps ? (prop) => valueOrDefault(value[prop], value[props[prop]]) : (prop) => value[prop] : () => value; + for (const prop of keys) { + ret[prop] = numberOrZero(read(prop)); + } + return ret; + } + function toTRBL(value) { + return _readValueToProps(value, { + top: "y", + right: "x", + bottom: "y", + left: "x" + }); + } + function toTRBLCorners(value) { + return _readValueToProps(value, [ + "topLeft", + "topRight", + "bottomLeft", + "bottomRight" + ]); + } + function toPadding(value) { + const obj = toTRBL(value); + obj.width = obj.left + obj.right; + obj.height = obj.top + obj.bottom; + return obj; + } + function toFont(options, fallback) { + options = options || {}; + fallback = fallback || defaults.font; + let size = valueOrDefault(options.size, fallback.size); + if (typeof size === "string") { + size = parseInt(size, 10); + } + let style = valueOrDefault(options.style, fallback.style); + if (style && !("" + style).match(FONT_STYLE)) { + console.warn('Invalid font style specified: "' + style + '"'); + style = void 0; + } + const font = { + family: valueOrDefault(options.family, fallback.family), + lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size), + size, + style, + weight: valueOrDefault(options.weight, fallback.weight), + string: "" + }; + font.string = toFontString(font); + return font; + } + function resolve(inputs, context, index2, info) { + let cacheable = true; + let i, ilen, value; + for (i = 0, ilen = inputs.length; i < ilen; ++i) { + value = inputs[i]; + if (value === void 0) { + continue; + } + if (context !== void 0 && typeof value === "function") { + value = value(context); + cacheable = false; + } + if (index2 !== void 0 && isArray(value)) { + value = value[index2 % value.length]; + cacheable = false; + } + if (value !== void 0) { + if (info && !cacheable) { + info.cacheable = false; + } + return value; + } + } + } + function _addGrace(minmax, grace, beginAtZero) { + const { min, max } = minmax; + const change = toDimension(grace, (max - min) / 2); + const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add; + return { + min: keepZero(min, -Math.abs(change)), + max: keepZero(max, change) + }; + } + function createContext(parentContext, context) { + return Object.assign(Object.create(parentContext), context); + } + function _createResolver(scopes, prefixes = [ + "" + ], rootScopes, fallback, getTarget = () => scopes[0]) { + const finalRootScopes = rootScopes || scopes; + if (typeof fallback === "undefined") { + fallback = _resolve("_fallback", scopes); + } + const cache2 = { + [Symbol.toStringTag]: "Object", + _cacheable: true, + _scopes: scopes, + _rootScopes: finalRootScopes, + _fallback: fallback, + _getTarget: getTarget, + override: (scope) => _createResolver([ + scope, + ...scopes + ], prefixes, finalRootScopes, fallback) + }; + return new Proxy(cache2, { + /** + * A trap for the delete operator. + */ + deleteProperty(target, prop) { + delete target[prop]; + delete target._keys; + delete scopes[0][prop]; + return true; + }, + /** + * A trap for getting property values. + */ + get(target, prop) { + return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target)); + }, + /** + * A trap for Object.getOwnPropertyDescriptor. + * Also used by Object.hasOwnProperty. + */ + getOwnPropertyDescriptor(target, prop) { + return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop); + }, + /** + * A trap for Object.getPrototypeOf. + */ + getPrototypeOf() { + return Reflect.getPrototypeOf(scopes[0]); + }, + /** + * A trap for the in operator. + */ + has(target, prop) { + return getKeysFromAllScopes(target).includes(prop); + }, + /** + * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols. + */ + ownKeys(target) { + return getKeysFromAllScopes(target); + }, + /** + * A trap for setting property values. + */ + set(target, prop, value) { + const storage = target._storage || (target._storage = getTarget()); + target[prop] = storage[prop] = value; + delete target._keys; + return true; + } + }); + } + function _attachContext(proxy, context, subProxy, descriptorDefaults) { + const cache2 = { + _cacheable: false, + _proxy: proxy, + _context: context, + _subProxy: subProxy, + _stack: /* @__PURE__ */ new Set(), + _descriptors: _descriptors(proxy, descriptorDefaults), + setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults), + override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults) + }; + return new Proxy(cache2, { + /** + * A trap for the delete operator. + */ + deleteProperty(target, prop) { + delete target[prop]; + delete proxy[prop]; + return true; + }, + /** + * A trap for getting property values. + */ + get(target, prop, receiver) { + return _cached(target, prop, () => _resolveWithContext(target, prop, receiver)); + }, + /** + * A trap for Object.getOwnPropertyDescriptor. + * Also used by Object.hasOwnProperty. + */ + getOwnPropertyDescriptor(target, prop) { + return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? { + enumerable: true, + configurable: true + } : void 0 : Reflect.getOwnPropertyDescriptor(proxy, prop); + }, + /** + * A trap for Object.getPrototypeOf. + */ + getPrototypeOf() { + return Reflect.getPrototypeOf(proxy); + }, + /** + * A trap for the in operator. + */ + has(target, prop) { + return Reflect.has(proxy, prop); + }, + /** + * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols. + */ + ownKeys() { + return Reflect.ownKeys(proxy); + }, + /** + * A trap for setting property values. + */ + set(target, prop, value) { + proxy[prop] = value; + delete target[prop]; + return true; + } + }); + } + function _descriptors(proxy, defaults2 = { + scriptable: true, + indexable: true + }) { + const { _scriptable = defaults2.scriptable, _indexable = defaults2.indexable, _allKeys = defaults2.allKeys } = proxy; + return { + allKeys: _allKeys, + scriptable: _scriptable, + indexable: _indexable, + isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable, + isIndexable: isFunction(_indexable) ? _indexable : () => _indexable + }; + } + function _cached(target, prop, resolve2) { + if (Object.prototype.hasOwnProperty.call(target, prop) || prop === "constructor") { + return target[prop]; + } + const value = resolve2(); + target[prop] = value; + return value; + } + function _resolveWithContext(target, prop, receiver) { + const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target; + let value = _proxy[prop]; + if (isFunction(value) && descriptors2.isScriptable(prop)) { + value = _resolveScriptable(prop, value, target, receiver); + } + if (isArray(value) && value.length) { + value = _resolveArray(prop, value, target, descriptors2.isIndexable); + } + if (needsSubResolver(prop, value)) { + value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors2); + } + return value; + } + function _resolveScriptable(prop, getValue, target, receiver) { + const { _proxy, _context, _subProxy, _stack } = target; + if (_stack.has(prop)) { + throw new Error("Recursion detected: " + Array.from(_stack).join("->") + "->" + prop); + } + _stack.add(prop); + let value = getValue(_context, _subProxy || receiver); + _stack.delete(prop); + if (needsSubResolver(prop, value)) { + value = createSubResolver(_proxy._scopes, _proxy, prop, value); + } + return value; + } + function _resolveArray(prop, value, target, isIndexable) { + const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target; + if (typeof _context.index !== "undefined" && isIndexable(prop)) { + return value[_context.index % value.length]; + } else if (isObject(value[0])) { + const arr = value; + const scopes = _proxy._scopes.filter((s) => s !== arr); + value = []; + for (const item of arr) { + const resolver = createSubResolver(scopes, _proxy, prop, item); + value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors2)); + } + } + return value; + } + function resolveFallback(fallback, prop, value) { + return isFunction(fallback) ? fallback(prop, value) : fallback; + } + function addScopes(set2, parentScopes, key, parentFallback, value) { + for (const parent of parentScopes) { + const scope = getScope(key, parent); + if (scope) { + set2.add(scope); + const fallback = resolveFallback(scope._fallback, key, value); + if (typeof fallback !== "undefined" && fallback !== key && fallback !== parentFallback) { + return fallback; + } + } else if (scope === false && typeof parentFallback !== "undefined" && key !== parentFallback) { + return null; + } + } + return false; + } + function createSubResolver(parentScopes, resolver, prop, value) { + const rootScopes = resolver._rootScopes; + const fallback = resolveFallback(resolver._fallback, prop, value); + const allScopes = [ + ...parentScopes, + ...rootScopes + ]; + const set2 = /* @__PURE__ */ new Set(); + set2.add(value); + let key = addScopesFromKey(set2, allScopes, prop, fallback || prop, value); + if (key === null) { + return false; + } + if (typeof fallback !== "undefined" && fallback !== prop) { + key = addScopesFromKey(set2, allScopes, fallback, key, value); + if (key === null) { + return false; + } + } + return _createResolver(Array.from(set2), [ + "" + ], rootScopes, fallback, () => subGetTarget(resolver, prop, value)); + } + function addScopesFromKey(set2, allScopes, key, fallback, item) { + while (key) { + key = addScopes(set2, allScopes, key, fallback, item); + } + return key; + } + function subGetTarget(resolver, prop, value) { + const parent = resolver._getTarget(); + if (!(prop in parent)) { + parent[prop] = {}; + } + const target = parent[prop]; + if (isArray(target) && isObject(value)) { + return value; + } + return target || {}; + } + function _resolveWithPrefixes(prop, prefixes, scopes, proxy) { + let value; + for (const prefix of prefixes) { + value = _resolve(readKey(prefix, prop), scopes); + if (typeof value !== "undefined") { + return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value; + } + } + } + function _resolve(key, scopes) { + for (const scope of scopes) { + if (!scope) { + continue; + } + const value = scope[key]; + if (typeof value !== "undefined") { + return value; + } + } + } + function getKeysFromAllScopes(target) { + let keys = target._keys; + if (!keys) { + keys = target._keys = resolveKeysFromAllScopes(target._scopes); + } + return keys; + } + function resolveKeysFromAllScopes(scopes) { + const set2 = /* @__PURE__ */ new Set(); + for (const scope of scopes) { + for (const key of Object.keys(scope).filter((k) => !k.startsWith("_"))) { + set2.add(key); + } + } + return Array.from(set2); + } + function _parseObjectDataRadialScale(meta, data, start, count) { + const { iScale } = meta; + const { key = "r" } = this._parsing; + const parsed = new Array(count); + let i, ilen, index2, item; + for (i = 0, ilen = count; i < ilen; ++i) { + index2 = i + start; + item = data[index2]; + parsed[i] = { + r: iScale.parse(resolveObjectKey(item, key), index2) + }; + } + return parsed; + } + function splineCurve(firstPoint, middlePoint, afterPoint, t) { + const previous = firstPoint.skip ? middlePoint : firstPoint; + const current = middlePoint; + const next = afterPoint.skip ? middlePoint : afterPoint; + const d01 = distanceBetweenPoints(current, previous); + const d12 = distanceBetweenPoints(next, current); + let s01 = d01 / (d01 + d12); + let s12 = d12 / (d01 + d12); + s01 = isNaN(s01) ? 0 : s01; + s12 = isNaN(s12) ? 0 : s12; + const fa = t * s01; + const fb = t * s12; + return { + previous: { + x: current.x - fa * (next.x - previous.x), + y: current.y - fa * (next.y - previous.y) + }, + next: { + x: current.x + fb * (next.x - previous.x), + y: current.y + fb * (next.y - previous.y) + } + }; + } + function monotoneAdjust(points, deltaK, mK) { + const pointsLen = points.length; + let alphaK, betaK, tauK, squaredMagnitude, pointCurrent; + let pointAfter = getPoint(points, 0); + for (let i = 0; i < pointsLen - 1; ++i) { + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent || !pointAfter) { + continue; + } + if (almostEquals(deltaK[i], 0, EPSILON)) { + mK[i] = mK[i + 1] = 0; + continue; + } + alphaK = mK[i] / deltaK[i]; + betaK = mK[i + 1] / deltaK[i]; + squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2); + if (squaredMagnitude <= 9) { + continue; + } + tauK = 3 / Math.sqrt(squaredMagnitude); + mK[i] = alphaK * tauK * deltaK[i]; + mK[i + 1] = betaK * tauK * deltaK[i]; + } + } + function monotoneCompute(points, mK, indexAxis = "x") { + const valueAxis = getValueAxis(indexAxis); + const pointsLen = points.length; + let delta, pointBefore, pointCurrent; + let pointAfter = getPoint(points, 0); + for (let i = 0; i < pointsLen; ++i) { + pointBefore = pointCurrent; + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent) { + continue; + } + const iPixel = pointCurrent[indexAxis]; + const vPixel = pointCurrent[valueAxis]; + if (pointBefore) { + delta = (iPixel - pointBefore[indexAxis]) / 3; + pointCurrent[`cp1${indexAxis}`] = iPixel - delta; + pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i]; + } + if (pointAfter) { + delta = (pointAfter[indexAxis] - iPixel) / 3; + pointCurrent[`cp2${indexAxis}`] = iPixel + delta; + pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i]; + } + } + } + function splineCurveMonotone(points, indexAxis = "x") { + const valueAxis = getValueAxis(indexAxis); + const pointsLen = points.length; + const deltaK = Array(pointsLen).fill(0); + const mK = Array(pointsLen); + let i, pointBefore, pointCurrent; + let pointAfter = getPoint(points, 0); + for (i = 0; i < pointsLen; ++i) { + pointBefore = pointCurrent; + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent) { + continue; + } + if (pointAfter) { + const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis]; + deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0; + } + mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2; + } + monotoneAdjust(points, deltaK, mK); + monotoneCompute(points, mK, indexAxis); + } + function capControlPoint(pt, min, max) { + return Math.max(Math.min(pt, max), min); + } + function capBezierPoints(points, area) { + let i, ilen, point, inArea, inAreaPrev; + let inAreaNext = _isPointInArea(points[0], area); + for (i = 0, ilen = points.length; i < ilen; ++i) { + inAreaPrev = inArea; + inArea = inAreaNext; + inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area); + if (!inArea) { + continue; + } + point = points[i]; + if (inAreaPrev) { + point.cp1x = capControlPoint(point.cp1x, area.left, area.right); + point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom); + } + if (inAreaNext) { + point.cp2x = capControlPoint(point.cp2x, area.left, area.right); + point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom); + } + } + } + function _updateBezierControlPoints(points, options, area, loop, indexAxis) { + let i, ilen, point, controlPoints; + if (options.spanGaps) { + points = points.filter((pt) => !pt.skip); + } + if (options.cubicInterpolationMode === "monotone") { + splineCurveMonotone(points, indexAxis); + } else { + let prev = loop ? points[points.length - 1] : points[0]; + for (i = 0, ilen = points.length; i < ilen; ++i) { + point = points[i]; + controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension); + point.cp1x = controlPoints.previous.x; + point.cp1y = controlPoints.previous.y; + point.cp2x = controlPoints.next.x; + point.cp2y = controlPoints.next.y; + prev = point; + } + } + if (options.capBezierPoints) { + capBezierPoints(points, area); + } + } + function _isDomSupported() { + return typeof window !== "undefined" && typeof document !== "undefined"; + } + function _getParentNode(domNode) { + let parent = domNode.parentNode; + if (parent && parent.toString() === "[object ShadowRoot]") { + parent = parent.host; + } + return parent; + } + function parseMaxStyle(styleValue, node, parentProperty) { + let valueInPixels; + if (typeof styleValue === "string") { + valueInPixels = parseInt(styleValue, 10); + if (styleValue.indexOf("%") !== -1) { + valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty]; + } + } else { + valueInPixels = styleValue; + } + return valueInPixels; + } + function getStyle(el2, property) { + return getComputedStyle2(el2).getPropertyValue(property); + } + function getPositionedStyle(styles, style, suffix) { + const result = {}; + suffix = suffix ? "-" + suffix : ""; + for (let i = 0; i < 4; i++) { + const pos = positions[i]; + result[pos] = parseFloat(styles[style + "-" + pos + suffix]) || 0; + } + result.width = result.left + result.right; + result.height = result.top + result.bottom; + return result; + } + function getCanvasPosition(e, canvas) { + const touches = e.touches; + const source = touches && touches.length ? touches[0] : e; + const { offsetX, offsetY } = source; + let box = false; + let x, y; + if (useOffsetPos(offsetX, offsetY, e.target)) { + x = offsetX; + y = offsetY; + } else { + const rect = canvas.getBoundingClientRect(); + x = source.clientX - rect.left; + y = source.clientY - rect.top; + box = true; + } + return { + x, + y, + box + }; + } + function getRelativePosition(event, chart2) { + if ("native" in event) { + return event; + } + const { canvas, currentDevicePixelRatio } = chart2; + const style = getComputedStyle2(canvas); + const borderBox = style.boxSizing === "border-box"; + const paddings = getPositionedStyle(style, "padding"); + const borders = getPositionedStyle(style, "border", "width"); + const { x, y, box } = getCanvasPosition(event, canvas); + const xOffset = paddings.left + (box && borders.left); + const yOffset = paddings.top + (box && borders.top); + let { width, height } = chart2; + if (borderBox) { + width -= paddings.width + borders.width; + height -= paddings.height + borders.height; + } + return { + x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio), + y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio) + }; + } + function getContainerSize(canvas, width, height) { + let maxWidth, maxHeight; + if (width === void 0 || height === void 0) { + const container = canvas && _getParentNode(canvas); + if (!container) { + width = canvas.clientWidth; + height = canvas.clientHeight; + } else { + const rect = container.getBoundingClientRect(); + const containerStyle = getComputedStyle2(container); + const containerBorder = getPositionedStyle(containerStyle, "border", "width"); + const containerPadding = getPositionedStyle(containerStyle, "padding"); + width = rect.width - containerPadding.width - containerBorder.width; + height = rect.height - containerPadding.height - containerBorder.height; + maxWidth = parseMaxStyle(containerStyle.maxWidth, container, "clientWidth"); + maxHeight = parseMaxStyle(containerStyle.maxHeight, container, "clientHeight"); + } + } + return { + width, + height, + maxWidth: maxWidth || INFINITY, + maxHeight: maxHeight || INFINITY + }; + } + function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) { + const style = getComputedStyle2(canvas); + const margins = getPositionedStyle(style, "margin"); + const maxWidth = parseMaxStyle(style.maxWidth, canvas, "clientWidth") || INFINITY; + const maxHeight = parseMaxStyle(style.maxHeight, canvas, "clientHeight") || INFINITY; + const containerSize = getContainerSize(canvas, bbWidth, bbHeight); + let { width, height } = containerSize; + if (style.boxSizing === "content-box") { + const borders = getPositionedStyle(style, "border", "width"); + const paddings = getPositionedStyle(style, "padding"); + width -= paddings.width + borders.width; + height -= paddings.height + borders.height; + } + width = Math.max(0, width - margins.width); + height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height); + width = round1(Math.min(width, maxWidth, containerSize.maxWidth)); + height = round1(Math.min(height, maxHeight, containerSize.maxHeight)); + if (width && !height) { + height = round1(width / 2); + } + const maintainHeight = bbWidth !== void 0 || bbHeight !== void 0; + if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) { + height = containerSize.height; + width = round1(Math.floor(height * aspectRatio)); + } + return { + width, + height + }; + } + function retinaScale(chart2, forceRatio, forceStyle) { + const pixelRatio = forceRatio || 1; + const deviceHeight = round1(chart2.height * pixelRatio); + const deviceWidth = round1(chart2.width * pixelRatio); + chart2.height = round1(chart2.height); + chart2.width = round1(chart2.width); + const canvas = chart2.canvas; + if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) { + canvas.style.height = `${chart2.height}px`; + canvas.style.width = `${chart2.width}px`; + } + if (chart2.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) { + chart2.currentDevicePixelRatio = pixelRatio; + canvas.height = deviceHeight; + canvas.width = deviceWidth; + chart2.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0); + return true; + } + return false; + } + function readUsedSize(element, property) { + const value = getStyle(element, property); + const matches2 = value && value.match(/^(\d+)(\.\d+)?px$/); + return matches2 ? +matches2[1] : void 0; + } + function _pointInLine(p1, p2, t, mode) { + return { + x: p1.x + t * (p2.x - p1.x), + y: p1.y + t * (p2.y - p1.y) + }; + } + function _steppedInterpolation(p1, p2, t, mode) { + return { + x: p1.x + t * (p2.x - p1.x), + y: mode === "middle" ? t < 0.5 ? p1.y : p2.y : mode === "after" ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y + }; + } + function _bezierInterpolation(p1, p2, t, mode) { + const cp1 = { + x: p1.cp2x, + y: p1.cp2y + }; + const cp2 = { + x: p2.cp1x, + y: p2.cp1y + }; + const a = _pointInLine(p1, cp1, t); + const b = _pointInLine(cp1, cp2, t); + const c = _pointInLine(cp2, p2, t); + const d = _pointInLine(a, b, t); + const e = _pointInLine(b, c, t); + return _pointInLine(d, e, t); + } + function getRtlAdapter(rtl, rectX, width) { + return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter(); + } + function overrideTextDirection(ctx, direction) { + let style, original; + if (direction === "ltr" || direction === "rtl") { + style = ctx.canvas.style; + original = [ + style.getPropertyValue("direction"), + style.getPropertyPriority("direction") + ]; + style.setProperty("direction", direction, "important"); + ctx.prevTextDirection = original; + } + } + function restoreTextDirection(ctx, original) { + if (original !== void 0) { + delete ctx.prevTextDirection; + ctx.canvas.style.setProperty("direction", original[0], original[1]); + } + } + function propertyFn(property) { + if (property === "angle") { + return { + between: _angleBetween, + compare: _angleDiff, + normalize: _normalizeAngle + }; + } + return { + between: _isBetween, + compare: (a, b) => a - b, + normalize: (x) => x + }; + } + function normalizeSegment({ start, end, count, loop, style }) { + return { + start: start % count, + end: end % count, + loop: loop && (end - start + 1) % count === 0, + style + }; + } + function getSegment(segment, points, bounds) { + const { property, start: startBound, end: endBound } = bounds; + const { between, normalize } = propertyFn(property); + const count = points.length; + let { start, end, loop } = segment; + let i, ilen; + if (loop) { + start += count; + end += count; + for (i = 0, ilen = count; i < ilen; ++i) { + if (!between(normalize(points[start % count][property]), startBound, endBound)) { + break; + } + start--; + end--; + } + start %= count; + end %= count; + } + if (end < start) { + end += count; + } + return { + start, + end, + loop, + style: segment.style + }; + } + function _boundSegment(segment, points, bounds) { + if (!bounds) { + return [ + segment + ]; + } + const { property, start: startBound, end: endBound } = bounds; + const count = points.length; + const { compare, between, normalize } = propertyFn(property); + const { start, end, loop, style } = getSegment(segment, points, bounds); + const result = []; + let inside = false; + let subStart = null; + let value, point, prevValue; + const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0; + const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value); + const shouldStart = () => inside || startIsBefore(); + const shouldStop = () => !inside || endIsBefore(); + for (let i = start, prev = start; i <= end; ++i) { + point = points[i % count]; + if (point.skip) { + continue; + } + value = normalize(point[property]); + if (value === prevValue) { + continue; + } + inside = between(value, startBound, endBound); + if (subStart === null && shouldStart()) { + subStart = compare(value, startBound) === 0 ? i : prev; + } + if (subStart !== null && shouldStop()) { + result.push(normalizeSegment({ + start: subStart, + end: i, + loop, + count, + style + })); + subStart = null; + } + prev = i; + prevValue = value; + } + if (subStart !== null) { + result.push(normalizeSegment({ + start: subStart, + end, + loop, + count, + style + })); + } + return result; + } + function _boundSegments(line, bounds) { + const result = []; + const segments = line.segments; + for (let i = 0; i < segments.length; i++) { + const sub = _boundSegment(segments[i], line.points, bounds); + if (sub.length) { + result.push(...sub); + } + } + return result; + } + function findStartAndEnd(points, count, loop, spanGaps) { + let start = 0; + let end = count - 1; + if (loop && !spanGaps) { + while (start < count && !points[start].skip) { + start++; + } + } + while (start < count && points[start].skip) { + start++; + } + start %= count; + if (loop) { + end += start; + } + while (end > start && points[end % count].skip) { + end--; + } + end %= count; + return { + start, + end + }; + } + function solidSegments(points, start, max, loop) { + const count = points.length; + const result = []; + let last = start; + let prev = points[start]; + let end; + for (end = start + 1; end <= max; ++end) { + const cur = points[end % count]; + if (cur.skip || cur.stop) { + if (!prev.skip) { + loop = false; + result.push({ + start: start % count, + end: (end - 1) % count, + loop + }); + start = last = cur.stop ? end : null; + } + } else { + last = end; + if (prev.skip) { + start = end; + } + } + prev = cur; + } + if (last !== null) { + result.push({ + start: start % count, + end: last % count, + loop + }); + } + return result; + } + function _computeSegments(line, segmentOptions) { + const points = line.points; + const spanGaps = line.options.spanGaps; + const count = points.length; + if (!count) { + return []; + } + const loop = !!line._loop; + const { start, end } = findStartAndEnd(points, count, loop, spanGaps); + if (spanGaps === true) { + return splitByStyles(line, [ + { + start, + end, + loop + } + ], points, segmentOptions); + } + const max = end < start ? end + count : end; + const completeLoop = !!line._fullLoop && start === 0 && end === count - 1; + return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions); + } + function splitByStyles(line, segments, points, segmentOptions) { + if (!segmentOptions || !segmentOptions.setContext || !points) { + return segments; + } + return doSplitByStyles(line, segments, points, segmentOptions); + } + function doSplitByStyles(line, segments, points, segmentOptions) { + const chartContext = line._chart.getContext(); + const baseStyle = readStyle(line.options); + const { _datasetIndex: datasetIndex, options: { spanGaps } } = line; + const count = points.length; + const result = []; + let prevStyle = baseStyle; + let start = segments[0].start; + let i = start; + function addStyle(s, e, l, st) { + const dir = spanGaps ? -1 : 1; + if (s === e) { + return; + } + s += count; + while (points[s % count].skip) { + s -= dir; + } + while (points[e % count].skip) { + e += dir; + } + if (s % count !== e % count) { + result.push({ + start: s % count, + end: e % count, + loop: l, + style: st + }); + prevStyle = st; + start = e % count; + } + } + for (const segment of segments) { + start = spanGaps ? start : segment.start; + let prev = points[start % count]; + let style; + for (i = start + 1; i <= segment.end; i++) { + const pt = points[i % count]; + style = readStyle(segmentOptions.setContext(createContext(chartContext, { + type: "segment", + p0: prev, + p1: pt, + p0DataIndex: (i - 1) % count, + p1DataIndex: i % count, + datasetIndex + }))); + if (styleChanged(style, prevStyle)) { + addStyle(start, i - 1, segment.loop, prevStyle); + } + prev = pt; + prevStyle = style; + } + if (start < i - 1) { + addStyle(start, i - 1, segment.loop, prevStyle); + } + } + return result; + } + function readStyle(options) { + return { + backgroundColor: options.backgroundColor, + borderCapStyle: options.borderCapStyle, + borderDash: options.borderDash, + borderDashOffset: options.borderDashOffset, + borderJoinStyle: options.borderJoinStyle, + borderWidth: options.borderWidth, + borderColor: options.borderColor + }; + } + function styleChanged(style, prevStyle) { + if (!prevStyle) { + return false; + } + const cache2 = []; + const replacer = function(key, value) { + if (!isPatternOrGradient(value)) { + return value; + } + if (!cache2.includes(value)) { + cache2.push(value); + } + return cache2.indexOf(value); + }; + return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer); + } + function getSizeForArea(scale, chartArea, field) { + return scale.options.clip ? scale[field] : chartArea[field]; + } + function getDatasetArea(meta, chartArea) { + const { xScale, yScale } = meta; + if (xScale && yScale) { + return { + left: getSizeForArea(xScale, chartArea, "left"), + right: getSizeForArea(xScale, chartArea, "right"), + top: getSizeForArea(yScale, chartArea, "top"), + bottom: getSizeForArea(yScale, chartArea, "bottom") + }; + } + return chartArea; + } + function getDatasetClipArea(chart2, meta) { + const clip = meta._clip; + if (clip.disabled) { + return false; + } + const area = getDatasetArea(meta, chart2.chartArea); + return { + left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left), + right: clip.right === false ? chart2.width : area.right + (clip.right === true ? 0 : clip.right), + top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top), + bottom: clip.bottom === false ? chart2.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom) + }; + } + var uid, toPercentage, toDimension, keyResolvers, defined, isFunction, setsEqual, PI, TAU, PITAU, INFINITY, RAD_PER_DEG, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, log10, sign, _lookupByKey, _rlookupByKey, arrayEvents, requestAnimFrame, _toLeftRightCenter, _alignStartEnd, _textX, atEdge, elasticIn, elasticOut, effects, numbers, colors, intlCache, formatters, Ticks, overrides, descriptors, Defaults, defaults, LINE_HEIGHT, FONT_STYLE, numberOrZero, readKey, needsSubResolver, getScope, EPSILON, getPoint, getValueAxis, getComputedStyle2, positions, useOffsetPos, round1, supportsEventListenerOptions, getRightToLeftAdapter, getLeftToRightAdapter; + var init_helpers_dataset = __esm({ + "node_modules/chart.js/dist/chunks/helpers.dataset.js"() { + init_color_esm(); + uid = /* @__PURE__ */ (() => { + let id = 0; + return () => id++; + })(); + toPercentage = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 : +value / dimension; + toDimension = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 * dimension : +value; + keyResolvers = { + // Chart.helpers.core resolveObjectKey should resolve empty key to root object + "": (v) => v, + // default resolvers + x: (o) => o.x, + y: (o) => o.y + }; + defined = (value) => typeof value !== "undefined"; + isFunction = (value) => typeof value === "function"; + setsEqual = (a, b) => { + if (a.size !== b.size) { + return false; + } + for (const item of a) { + if (!b.has(item)) { + return false; + } + } + return true; + }; + PI = Math.PI; + TAU = 2 * PI; + PITAU = TAU + PI; + INFINITY = Number.POSITIVE_INFINITY; + RAD_PER_DEG = PI / 180; + HALF_PI = PI / 2; + QUARTER_PI = PI / 4; + TWO_THIRDS_PI = PI * 2 / 3; + log10 = Math.log10; + sign = Math.sign; + _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? (index2) => { + const ti = table[index2][key]; + return ti < value || ti === value && table[index2 + 1][key] === value; + } : (index2) => table[index2][key] < value); + _rlookupByKey = (table, key, value) => _lookup(table, value, (index2) => table[index2][key] >= value); + arrayEvents = [ + "push", + "pop", + "shift", + "splice", + "unshift" + ]; + requestAnimFrame = (function() { + if (typeof window === "undefined") { + return function(callback2) { + return callback2(); + }; + } + return window.requestAnimationFrame; + })(); + _toLeftRightCenter = (align) => align === "start" ? "left" : align === "end" ? "right" : "center"; + _alignStartEnd = (align, start, end) => align === "start" ? start : align === "end" ? end : (start + end) / 2; + _textX = (align, left, right, rtl) => { + const check = rtl ? "left" : "right"; + return align === check ? right : align === "center" ? (left + right) / 2 : left; + }; + atEdge = (t) => t === 0 || t === 1; + elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p)); + elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1; + effects = { + linear: (t) => t, + easeInQuad: (t) => t * t, + easeOutQuad: (t) => -t * (t - 2), + easeInOutQuad: (t) => (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1), + easeInCubic: (t) => t * t * t, + easeOutCubic: (t) => (t -= 1) * t * t + 1, + easeInOutCubic: (t) => (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2), + easeInQuart: (t) => t * t * t * t, + easeOutQuart: (t) => -((t -= 1) * t * t * t - 1), + easeInOutQuart: (t) => (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2), + easeInQuint: (t) => t * t * t * t * t, + easeOutQuint: (t) => (t -= 1) * t * t * t * t + 1, + easeInOutQuint: (t) => (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2), + easeInSine: (t) => -Math.cos(t * HALF_PI) + 1, + easeOutSine: (t) => Math.sin(t * HALF_PI), + easeInOutSine: (t) => -0.5 * (Math.cos(PI * t) - 1), + easeInExpo: (t) => t === 0 ? 0 : Math.pow(2, 10 * (t - 1)), + easeOutExpo: (t) => t === 1 ? 1 : -Math.pow(2, -10 * t) + 1, + easeInOutExpo: (t) => atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2), + easeInCirc: (t) => t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1), + easeOutCirc: (t) => Math.sqrt(1 - (t -= 1) * t), + easeInOutCirc: (t) => (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1), + easeInElastic: (t) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3), + easeOutElastic: (t) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3), + easeInOutElastic(t) { + const s = 0.1125; + const p = 0.45; + return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p); + }, + easeInBack(t) { + const s = 1.70158; + return t * t * ((s + 1) * t - s); + }, + easeOutBack(t) { + const s = 1.70158; + return (t -= 1) * t * ((s + 1) * t + s) + 1; + }, + easeInOutBack(t) { + let s = 1.70158; + if ((t /= 0.5) < 1) { + return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s)); + } + return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2); + }, + easeInBounce: (t) => 1 - effects.easeOutBounce(1 - t), + easeOutBounce(t) { + const m = 7.5625; + const d = 2.75; + if (t < 1 / d) { + return m * t * t; + } + if (t < 2 / d) { + return m * (t -= 1.5 / d) * t + 0.75; + } + if (t < 2.5 / d) { + return m * (t -= 2.25 / d) * t + 0.9375; + } + return m * (t -= 2.625 / d) * t + 0.984375; + }, + easeInOutBounce: (t) => t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5 + }; + numbers = [ + "x", + "y", + "borderWidth", + "radius", + "tension" + ]; + colors = [ + "color", + "borderColor", + "backgroundColor" + ]; + intlCache = /* @__PURE__ */ new Map(); + formatters = { + values(value) { + return isArray(value) ? value : "" + value; + }, + numeric(tickValue, index2, ticks) { + if (tickValue === 0) { + return "0"; + } + const locale = this.chart.options.locale; + let notation; + let delta = tickValue; + if (ticks.length > 1) { + const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value)); + if (maxTick < 1e-4 || maxTick > 1e15) { + notation = "scientific"; + } + delta = calculateDelta(tickValue, ticks); + } + const logDelta = log10(Math.abs(delta)); + const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0); + const options = { + notation, + minimumFractionDigits: numDecimal, + maximumFractionDigits: numDecimal + }; + Object.assign(options, this.options.ticks.format); + return formatNumber(tickValue, locale, options); + }, + logarithmic(tickValue, index2, ticks) { + if (tickValue === 0) { + return "0"; + } + const remain = ticks[index2].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue))); + if ([ + 1, + 2, + 3, + 5, + 10, + 15 + ].includes(remain) || index2 > 0.8 * ticks.length) { + return formatters.numeric.call(this, tickValue, index2, ticks); + } + return ""; + } + }; + Ticks = { + formatters + }; + overrides = /* @__PURE__ */ Object.create(null); + descriptors = /* @__PURE__ */ Object.create(null); + Defaults = class { + constructor(_descriptors2, _appliers) { + this.animation = void 0; + this.backgroundColor = "rgba(0,0,0,0.1)"; + this.borderColor = "rgba(0,0,0,0.1)"; + this.color = "#666"; + this.datasets = {}; + this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio(); + this.elements = {}; + this.events = [ + "mousemove", + "mouseout", + "click", + "touchstart", + "touchmove" + ]; + this.font = { + family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", + size: 12, + style: "normal", + lineHeight: 1.2, + weight: null + }; + this.hover = {}; + this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor); + this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor); + this.hoverColor = (ctx, options) => getHoverColor(options.color); + this.indexAxis = "x"; + this.interaction = { + mode: "nearest", + intersect: true, + includeInvisible: false + }; + this.maintainAspectRatio = true; + this.onHover = null; + this.onClick = null; + this.parsing = true; + this.plugins = {}; + this.responsive = true; + this.scale = void 0; + this.scales = {}; + this.showLine = true; + this.drawActiveElementsOnTop = true; + this.describe(_descriptors2); + this.apply(_appliers); + } + set(scope, values) { + return set(this, scope, values); + } + get(scope) { + return getScope$1(this, scope); + } + describe(scope, values) { + return set(descriptors, scope, values); + } + override(scope, values) { + return set(overrides, scope, values); + } + route(scope, name, targetScope, targetName) { + const scopeObject = getScope$1(this, scope); + const targetScopeObject = getScope$1(this, targetScope); + const privateName = "_" + name; + Object.defineProperties(scopeObject, { + [privateName]: { + value: scopeObject[name], + writable: true + }, + [name]: { + enumerable: true, + get() { + const local = this[privateName]; + const target = targetScopeObject[targetName]; + if (isObject(local)) { + return Object.assign({}, target, local); + } + return valueOrDefault(local, target); + }, + set(value) { + this[privateName] = value; + } + } + }); + } + apply(appliers) { + appliers.forEach((apply) => apply(this)); + } + }; + defaults = /* @__PURE__ */ new Defaults({ + _scriptable: (name) => !name.startsWith("on"), + _indexable: (name) => name !== "events", + hover: { + _fallback: "interaction" + }, + interaction: { + _scriptable: false, + _indexable: false + } + }, [ + applyAnimationsDefaults, + applyLayoutsDefaults, + applyScaleDefaults + ]); + LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/; + FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/; + numberOrZero = (v) => +v || 0; + readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name; + needsSubResolver = (prop, value) => isObject(value) && prop !== "adapters" && (Object.getPrototypeOf(value) === null || value.constructor === Object); + getScope = (key, parent) => key === true ? parent : typeof key === "string" ? resolveObjectKey(parent, key) : void 0; + EPSILON = Number.EPSILON || 1e-14; + getPoint = (points, i) => i < points.length && !points[i].skip && points[i]; + getValueAxis = (indexAxis) => indexAxis === "x" ? "y" : "x"; + getComputedStyle2 = (element) => element.ownerDocument.defaultView.getComputedStyle(element, null); + positions = [ + "top", + "right", + "bottom", + "left" + ]; + useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot); + round1 = (v) => Math.round(v * 10) / 10; + supportsEventListenerOptions = (function() { + let passiveSupported = false; + try { + const options = { + get passive() { + passiveSupported = true; + return false; + } + }; + if (_isDomSupported()) { + window.addEventListener("test", null, options); + window.removeEventListener("test", null, options); + } + } catch (e) { + } + return passiveSupported; + })(); + getRightToLeftAdapter = function(rectX, width) { + return { + x(x) { + return rectX + rectX + width - x; + }, + setWidth(w) { + width = w; + }, + textAlign(align) { + if (align === "center") { + return align; + } + return align === "right" ? "left" : "right"; + }, + xPlus(x, value) { + return x - value; + }, + leftForLtr(x, itemWidth) { + return x - itemWidth; + } + }; + }; + getLeftToRightAdapter = function() { + return { + x(x) { + return x; + }, + setWidth(w) { + }, + textAlign(align) { + return align; + }, + xPlus(x, value) { + return x + value; + }, + leftForLtr(x, _itemWidth) { + return x; + } + }; + }; + } + }); + + // node_modules/chart.js/dist/chart.js + function awaitAll(animations, properties) { + const running = []; + const keys = Object.keys(properties); + for (let i = 0; i < keys.length; i++) { + const anim = animations[keys[i]]; + if (anim && anim.active()) { + running.push(anim.wait()); + } + } + return Promise.all(running); + } + function resolveTargetOptions(target, newOptions) { + if (!newOptions) { + return; + } + let options = target.options; + if (!options) { + target.options = newOptions; + return; + } + if (options.$shared) { + target.options = options = Object.assign({}, options, { + $shared: false, + $animations: {} + }); + } + return options; + } + function scaleClip(scale, allowedOverflow) { + const opts = scale && scale.options || {}; + const reverse = opts.reverse; + const min = opts.min === void 0 ? allowedOverflow : 0; + const max = opts.max === void 0 ? allowedOverflow : 0; + return { + start: reverse ? max : min, + end: reverse ? min : max + }; + } + function defaultClip(xScale, yScale, allowedOverflow) { + if (allowedOverflow === false) { + return false; + } + const x = scaleClip(xScale, allowedOverflow); + const y = scaleClip(yScale, allowedOverflow); + return { + top: y.end, + right: x.end, + bottom: y.start, + left: x.start + }; + } + function toClip(value) { + let t, r, b, l; + if (isObject(value)) { + t = value.top; + r = value.right; + b = value.bottom; + l = value.left; + } else { + t = r = b = l = value; + } + return { + top: t, + right: r, + bottom: b, + left: l, + disabled: value === false + }; + } + function getSortedDatasetIndices(chart2, filterVisible) { + const keys = []; + const metasets = chart2._getSortedDatasetMetas(filterVisible); + let i, ilen; + for (i = 0, ilen = metasets.length; i < ilen; ++i) { + keys.push(metasets[i].index); + } + return keys; + } + function applyStack(stack, value, dsIndex, options = {}) { + const keys = stack.keys; + const singleMode = options.mode === "single"; + let i, ilen, datasetIndex, otherValue; + if (value === null) { + return; + } + let found = false; + for (i = 0, ilen = keys.length; i < ilen; ++i) { + datasetIndex = +keys[i]; + if (datasetIndex === dsIndex) { + found = true; + if (options.all) { + continue; + } + break; + } + otherValue = stack.values[datasetIndex]; + if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) { + value += otherValue; + } + } + if (!found && !options.all) { + return 0; + } + return value; + } + function convertObjectDataToArray(data, meta) { + const { iScale, vScale } = meta; + const iAxisKey = iScale.axis === "x" ? "x" : "y"; + const vAxisKey = vScale.axis === "x" ? "x" : "y"; + const keys = Object.keys(data); + const adata = new Array(keys.length); + let i, ilen, key; + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + adata[i] = { + [iAxisKey]: key, + [vAxisKey]: data[key] + }; + } + return adata; + } + function isStacked(scale, meta) { + const stacked = scale && scale.options.stacked; + return stacked || stacked === void 0 && meta.stack !== void 0; + } + function getStackKey(indexScale, valueScale, meta) { + return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`; + } + function getUserBounds(scale) { + const { min, max, minDefined, maxDefined } = scale.getUserBounds(); + return { + min: minDefined ? min : Number.NEGATIVE_INFINITY, + max: maxDefined ? max : Number.POSITIVE_INFINITY + }; + } + function getOrCreateStack(stacks, stackKey, indexValue) { + const subStack = stacks[stackKey] || (stacks[stackKey] = {}); + return subStack[indexValue] || (subStack[indexValue] = {}); + } + function getLastIndexInStack(stack, vScale, positive, type) { + for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) { + const value = stack[meta.index]; + if (positive && value > 0 || !positive && value < 0) { + return meta.index; + } + } + return null; + } + function updateStacks(controller, parsed) { + const { chart: chart2, _cachedMeta: meta } = controller; + const stacks = chart2._stacks || (chart2._stacks = {}); + const { iScale, vScale, index: datasetIndex } = meta; + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const key = getStackKey(iScale, vScale, meta); + const ilen = parsed.length; + let stack; + for (let i = 0; i < ilen; ++i) { + const item = parsed[i]; + const { [iAxis]: index2, [vAxis]: value } = item; + const itemStacks = item._stacks || (item._stacks = {}); + stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index2); + stack[datasetIndex] = value; + stack._top = getLastIndexInStack(stack, vScale, true, meta.type); + stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type); + const visualValues = stack._visualValues || (stack._visualValues = {}); + visualValues[datasetIndex] = value; + } + } + function getFirstScaleId(chart2, axis) { + const scales2 = chart2.scales; + return Object.keys(scales2).filter((key) => scales2[key].axis === axis).shift(); + } + function createDatasetContext(parent, index2) { + return createContext(parent, { + active: false, + dataset: void 0, + datasetIndex: index2, + index: index2, + mode: "default", + type: "dataset" + }); + } + function createDataContext(parent, index2, element) { + return createContext(parent, { + active: false, + dataIndex: index2, + parsed: void 0, + raw: void 0, + element, + index: index2, + mode: "default", + type: "data" + }); + } + function clearStacks(meta, items) { + const datasetIndex = meta.controller.index; + const axis = meta.vScale && meta.vScale.axis; + if (!axis) { + return; + } + items = items || meta._parsed; + for (const parsed of items) { + const stacks = parsed._stacks; + if (!stacks || stacks[axis] === void 0 || stacks[axis][datasetIndex] === void 0) { + return; + } + delete stacks[axis][datasetIndex]; + if (stacks[axis]._visualValues !== void 0 && stacks[axis]._visualValues[datasetIndex] !== void 0) { + delete stacks[axis]._visualValues[datasetIndex]; + } + } + } + function getAllScaleValues(scale, type) { + if (!scale._cache.$bar) { + const visibleMetas = scale.getMatchingVisibleMetas(type); + let values = []; + for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) { + values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale)); + } + scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b)); + } + return scale._cache.$bar; + } + function computeMinSampleSize(meta) { + const scale = meta.iScale; + const values = getAllScaleValues(scale, meta.type); + let min = scale._length; + let i, ilen, curr, prev; + const updateMinAndPrev = () => { + if (curr === 32767 || curr === -32768) { + return; + } + if (defined(prev)) { + min = Math.min(min, Math.abs(curr - prev) || min); + } + prev = curr; + }; + for (i = 0, ilen = values.length; i < ilen; ++i) { + curr = scale.getPixelForValue(values[i]); + updateMinAndPrev(); + } + prev = void 0; + for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) { + curr = scale.getPixelForTick(i); + updateMinAndPrev(); + } + return min; + } + function computeFitCategoryTraits(index2, ruler, options, stackCount) { + const thickness = options.barThickness; + let size, ratio; + if (isNullOrUndef(thickness)) { + size = ruler.min * options.categoryPercentage; + ratio = options.barPercentage; + } else { + size = thickness * stackCount; + ratio = 1; + } + return { + chunk: size / stackCount, + ratio, + start: ruler.pixels[index2] - size / 2 + }; + } + function computeFlexCategoryTraits(index2, ruler, options, stackCount) { + const pixels = ruler.pixels; + const curr = pixels[index2]; + let prev = index2 > 0 ? pixels[index2 - 1] : null; + let next = index2 < pixels.length - 1 ? pixels[index2 + 1] : null; + const percent = options.categoryPercentage; + if (prev === null) { + prev = curr - (next === null ? ruler.end - ruler.start : next - curr); + } + if (next === null) { + next = curr + curr - prev; + } + const start = curr - (curr - Math.min(prev, next)) / 2 * percent; + const size = Math.abs(next - prev) / 2 * percent; + return { + chunk: size / stackCount, + ratio: options.barPercentage, + start + }; + } + function parseFloatBar(entry, item, vScale, i) { + const startValue = vScale.parse(entry[0], i); + const endValue = vScale.parse(entry[1], i); + const min = Math.min(startValue, endValue); + const max = Math.max(startValue, endValue); + let barStart = min; + let barEnd = max; + if (Math.abs(min) > Math.abs(max)) { + barStart = max; + barEnd = min; + } + item[vScale.axis] = barEnd; + item._custom = { + barStart, + barEnd, + start: startValue, + end: endValue, + min, + max + }; + } + function parseValue(entry, item, vScale, i) { + if (isArray(entry)) { + parseFloatBar(entry, item, vScale, i); + } else { + item[vScale.axis] = vScale.parse(entry, i); + } + return item; + } + function parseArrayOrPrimitive(meta, data, start, count) { + const iScale = meta.iScale; + const vScale = meta.vScale; + const labels = iScale.getLabels(); + const singleScale = iScale === vScale; + const parsed = []; + let i, ilen, item, entry; + for (i = start, ilen = start + count; i < ilen; ++i) { + entry = data[i]; + item = {}; + item[iScale.axis] = singleScale || iScale.parse(labels[i], i); + parsed.push(parseValue(entry, item, vScale, i)); + } + return parsed; + } + function isFloatBar(custom) { + return custom && custom.barStart !== void 0 && custom.barEnd !== void 0; + } + function barSign(size, vScale, actualBase) { + if (size !== 0) { + return sign(size); + } + return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1); + } + function borderProps(properties) { + let reverse, start, end, top, bottom; + if (properties.horizontal) { + reverse = properties.base > properties.x; + start = "left"; + end = "right"; + } else { + reverse = properties.base < properties.y; + start = "bottom"; + end = "top"; + } + if (reverse) { + top = "end"; + bottom = "start"; + } else { + top = "start"; + bottom = "end"; + } + return { + start, + end, + reverse, + top, + bottom + }; + } + function setBorderSkipped(properties, options, stack, index2) { + let edge = options.borderSkipped; + const res = {}; + if (!edge) { + properties.borderSkipped = res; + return; + } + if (edge === true) { + properties.borderSkipped = { + top: true, + right: true, + bottom: true, + left: true + }; + return; + } + const { start, end, reverse, top, bottom } = borderProps(properties); + if (edge === "middle" && stack) { + properties.enableBorderRadius = true; + if ((stack._top || 0) === index2) { + edge = top; + } else if ((stack._bottom || 0) === index2) { + edge = bottom; + } else { + res[parseEdge(bottom, start, end, reverse)] = true; + edge = top; + } + } + res[parseEdge(edge, start, end, reverse)] = true; + properties.borderSkipped = res; + } + function parseEdge(edge, a, b, reverse) { + if (reverse) { + edge = swap(edge, a, b); + edge = startEnd(edge, b, a); + } else { + edge = startEnd(edge, a, b); + } + return edge; + } + function swap(orig, v1, v2) { + return orig === v1 ? v2 : orig === v2 ? v1 : orig; + } + function startEnd(v, start, end) { + return v === "start" ? start : v === "end" ? end : v; + } + function setInflateAmount(properties, { inflateAmount }, ratio) { + properties.inflateAmount = inflateAmount === "auto" ? ratio === 1 ? 0.33 : 0 : inflateAmount; + } + function getRatioAndOffset(rotation, circumference, cutout) { + let ratioX = 1; + let ratioY = 1; + let offsetX = 0; + let offsetY = 0; + if (circumference < TAU) { + const startAngle = rotation; + const endAngle = startAngle + circumference; + const startX = Math.cos(startAngle); + const startY = Math.sin(startAngle); + const endX = Math.cos(endAngle); + const endY = Math.sin(endAngle); + const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout); + const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout); + const maxX = calcMax(0, startX, endX); + const maxY = calcMax(HALF_PI, startY, endY); + const minX = calcMin(PI, startX, endX); + const minY = calcMin(PI + HALF_PI, startY, endY); + ratioX = (maxX - minX) / 2; + ratioY = (maxY - minY) / 2; + offsetX = -(maxX + minX) / 2; + offsetY = -(maxY + minY) / 2; + } + return { + ratioX, + ratioY, + offsetX, + offsetY + }; + } + function abstract() { + throw new Error("This method is not implemented: Check that a complete date adapter is provided."); + } + function binarySearch(metaset, axis, value, intersect2) { + const { controller, data, _sorted } = metaset; + const iScale = controller._cachedMeta.iScale; + const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null; + if (iScale && axis === iScale.axis && axis !== "r" && _sorted && data.length) { + const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey; + if (!intersect2) { + const result = lookupMethod(data, axis, value); + if (spanGaps) { + const { vScale } = controller._cachedMeta; + const { _parsed } = metaset; + const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point) => !isNullOrUndef(point[vScale.axis])); + result.lo -= Math.max(0, distanceToDefinedLo); + const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point) => !isNullOrUndef(point[vScale.axis])); + result.hi += Math.max(0, distanceToDefinedHi); + } + return result; + } else if (controller._sharedOptions) { + const el2 = data[0]; + const range2 = typeof el2.getRange === "function" && el2.getRange(axis); + if (range2) { + const start = lookupMethod(data, axis, value - range2); + const end = lookupMethod(data, axis, value + range2); + return { + lo: start.lo, + hi: end.hi + }; + } + } + } + return { + lo: 0, + hi: data.length - 1 + }; + } + function evaluateInteractionItems(chart2, axis, position, handler, intersect2) { + const metasets = chart2.getSortedVisibleDatasetMetas(); + const value = position[axis]; + for (let i = 0, ilen = metasets.length; i < ilen; ++i) { + const { index: index2, data } = metasets[i]; + const { lo, hi } = binarySearch(metasets[i], axis, value, intersect2); + for (let j = lo; j <= hi; ++j) { + const element = data[j]; + if (!element.skip) { + handler(element, index2, j); + } + } + } + } + function getDistanceMetricForAxis(axis) { + const useX = axis.indexOf("x") !== -1; + const useY = axis.indexOf("y") !== -1; + return function(pt1, pt2) { + const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0; + const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0; + return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); + }; + } + function getIntersectItems(chart2, position, axis, useFinalPosition, includeInvisible) { + const items = []; + if (!includeInvisible && !chart2.isPointInArea(position)) { + return items; + } + const evaluationFunc = function(element, datasetIndex, index2) { + if (!includeInvisible && !_isPointInArea(element, chart2.chartArea, 0)) { + return; + } + if (element.inRange(position.x, position.y, useFinalPosition)) { + items.push({ + element, + datasetIndex, + index: index2 + }); + } + }; + evaluateInteractionItems(chart2, axis, position, evaluationFunc, true); + return items; + } + function getNearestRadialItems(chart2, position, axis, useFinalPosition) { + let items = []; + function evaluationFunc(element, datasetIndex, index2) { + const { startAngle, endAngle } = element.getProps([ + "startAngle", + "endAngle" + ], useFinalPosition); + const { angle } = getAngleFromPoint(element, { + x: position.x, + y: position.y + }); + if (_angleBetween(angle, startAngle, endAngle)) { + items.push({ + element, + datasetIndex, + index: index2 + }); + } + } + evaluateInteractionItems(chart2, axis, position, evaluationFunc); + return items; + } + function getNearestCartesianItems(chart2, position, axis, intersect2, useFinalPosition, includeInvisible) { + let items = []; + const distanceMetric = getDistanceMetricForAxis(axis); + let minDistance = Number.POSITIVE_INFINITY; + function evaluationFunc(element, datasetIndex, index2) { + const inRange3 = element.inRange(position.x, position.y, useFinalPosition); + if (intersect2 && !inRange3) { + return; + } + const center = element.getCenterPoint(useFinalPosition); + const pointInArea = !!includeInvisible || chart2.isPointInArea(center); + if (!pointInArea && !inRange3) { + return; + } + const distance = distanceMetric(position, center); + if (distance < minDistance) { + items = [ + { + element, + datasetIndex, + index: index2 + } + ]; + minDistance = distance; + } else if (distance === minDistance) { + items.push({ + element, + datasetIndex, + index: index2 + }); + } + } + evaluateInteractionItems(chart2, axis, position, evaluationFunc); + return items; + } + function getNearestItems(chart2, position, axis, intersect2, useFinalPosition, includeInvisible) { + if (!includeInvisible && !chart2.isPointInArea(position)) { + return []; + } + return axis === "r" && !intersect2 ? getNearestRadialItems(chart2, position, axis, useFinalPosition) : getNearestCartesianItems(chart2, position, axis, intersect2, useFinalPosition, includeInvisible); + } + function getAxisItems(chart2, position, axis, intersect2, useFinalPosition) { + const items = []; + const rangeMethod = axis === "x" ? "inXRange" : "inYRange"; + let intersectsItem = false; + evaluateInteractionItems(chart2, axis, position, (element, datasetIndex, index2) => { + if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) { + items.push({ + element, + datasetIndex, + index: index2 + }); + intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition); + } + }); + if (intersect2 && !intersectsItem) { + return []; + } + return items; + } + function filterByPosition(array, position) { + return array.filter((v) => v.pos === position); + } + function filterDynamicPositionByAxis(array, axis) { + return array.filter((v) => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis); + } + function sortByWeight(array, reverse) { + return array.sort((a, b) => { + const v0 = reverse ? b : a; + const v1 = reverse ? a : b; + return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight; + }); + } + function wrapBoxes(boxes) { + const layoutBoxes = []; + let i, ilen, box, pos, stack, stackWeight; + for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) { + box = boxes[i]; + ({ position: pos, options: { stack, stackWeight = 1 } } = box); + layoutBoxes.push({ + index: i, + box, + pos, + horizontal: box.isHorizontal(), + weight: box.weight, + stack: stack && pos + stack, + stackWeight + }); + } + return layoutBoxes; + } + function buildStacks(layouts2) { + const stacks = {}; + for (const wrap of layouts2) { + const { stack, pos, stackWeight } = wrap; + if (!stack || !STATIC_POSITIONS.includes(pos)) { + continue; + } + const _stack = stacks[stack] || (stacks[stack] = { + count: 0, + placed: 0, + weight: 0, + size: 0 + }); + _stack.count++; + _stack.weight += stackWeight; + } + return stacks; + } + function setLayoutDims(layouts2, params) { + const stacks = buildStacks(layouts2); + const { vBoxMaxWidth, hBoxMaxHeight } = params; + let i, ilen, layout; + for (i = 0, ilen = layouts2.length; i < ilen; ++i) { + layout = layouts2[i]; + const { fullSize } = layout.box; + const stack = stacks[layout.stack]; + const factor = stack && layout.stackWeight / stack.weight; + if (layout.horizontal) { + layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth; + layout.height = hBoxMaxHeight; + } else { + layout.width = vBoxMaxWidth; + layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight; + } + } + return stacks; + } + function buildLayoutBoxes(boxes) { + const layoutBoxes = wrapBoxes(boxes); + const fullSize = sortByWeight(layoutBoxes.filter((wrap) => wrap.box.fullSize), true); + const left = sortByWeight(filterByPosition(layoutBoxes, "left"), true); + const right = sortByWeight(filterByPosition(layoutBoxes, "right")); + const top = sortByWeight(filterByPosition(layoutBoxes, "top"), true); + const bottom = sortByWeight(filterByPosition(layoutBoxes, "bottom")); + const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, "x"); + const centerVertical = filterDynamicPositionByAxis(layoutBoxes, "y"); + return { + fullSize, + leftAndTop: left.concat(top), + rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal), + chartArea: filterByPosition(layoutBoxes, "chartArea"), + vertical: left.concat(right).concat(centerVertical), + horizontal: top.concat(bottom).concat(centerHorizontal) + }; + } + function getCombinedMax(maxPadding, chartArea, a, b) { + return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]); + } + function updateMaxPadding(maxPadding, boxPadding) { + maxPadding.top = Math.max(maxPadding.top, boxPadding.top); + maxPadding.left = Math.max(maxPadding.left, boxPadding.left); + maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom); + maxPadding.right = Math.max(maxPadding.right, boxPadding.right); + } + function updateDims(chartArea, params, layout, stacks) { + const { pos, box } = layout; + const maxPadding = chartArea.maxPadding; + if (!isObject(pos)) { + if (layout.size) { + chartArea[pos] -= layout.size; + } + const stack = stacks[layout.stack] || { + size: 0, + count: 1 + }; + stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width); + layout.size = stack.size / stack.count; + chartArea[pos] += layout.size; + } + if (box.getPadding) { + updateMaxPadding(maxPadding, box.getPadding()); + } + const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, "left", "right")); + const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, "top", "bottom")); + const widthChanged = newWidth !== chartArea.w; + const heightChanged = newHeight !== chartArea.h; + chartArea.w = newWidth; + chartArea.h = newHeight; + return layout.horizontal ? { + same: widthChanged, + other: heightChanged + } : { + same: heightChanged, + other: widthChanged + }; + } + function handleMaxPadding(chartArea) { + const maxPadding = chartArea.maxPadding; + function updatePos(pos) { + const change = Math.max(maxPadding[pos] - chartArea[pos], 0); + chartArea[pos] += change; + return change; + } + chartArea.y += updatePos("top"); + chartArea.x += updatePos("left"); + updatePos("right"); + updatePos("bottom"); + } + function getMargins(horizontal, chartArea) { + const maxPadding = chartArea.maxPadding; + function marginForPositions(positions2) { + const margin = { + left: 0, + top: 0, + right: 0, + bottom: 0 + }; + positions2.forEach((pos) => { + margin[pos] = Math.max(chartArea[pos], maxPadding[pos]); + }); + return margin; + } + return horizontal ? marginForPositions([ + "left", + "right" + ]) : marginForPositions([ + "top", + "bottom" + ]); + } + function fitBoxes(boxes, chartArea, params, stacks) { + const refitBoxes = []; + let i, ilen, layout, box, refit, changed; + for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) { + layout = boxes[i]; + box = layout.box; + box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea)); + const { same, other } = updateDims(chartArea, params, layout, stacks); + refit |= same && refitBoxes.length; + changed = changed || other; + if (!box.fullSize) { + refitBoxes.push(layout); + } + } + return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed; + } + function setBoxDims(box, left, top, width, height) { + box.top = top; + box.left = left; + box.right = left + width; + box.bottom = top + height; + box.width = width; + box.height = height; + } + function placeBoxes(boxes, chartArea, params, stacks) { + const userPadding = params.padding; + let { x, y } = chartArea; + for (const layout of boxes) { + const box = layout.box; + const stack = stacks[layout.stack] || { + count: 1, + placed: 0, + weight: 1 + }; + const weight = layout.stackWeight / stack.weight || 1; + if (layout.horizontal) { + const width = chartArea.w * weight; + const height = stack.size || box.height; + if (defined(stack.start)) { + y = stack.start; + } + if (box.fullSize) { + setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height); + } else { + setBoxDims(box, chartArea.left + stack.placed, y, width, height); + } + stack.start = y; + stack.placed += width; + y = box.bottom; + } else { + const height = chartArea.h * weight; + const width = stack.size || box.width; + if (defined(stack.start)) { + x = stack.start; + } + if (box.fullSize) { + setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top); + } else { + setBoxDims(box, x, chartArea.top + stack.placed, width, height); + } + stack.start = x; + stack.placed += height; + x = box.right; + } + } + chartArea.x = x; + chartArea.y = y; + } + function initCanvas(canvas, aspectRatio) { + const style = canvas.style; + const renderHeight = canvas.getAttribute("height"); + const renderWidth = canvas.getAttribute("width"); + canvas[EXPANDO_KEY] = { + initial: { + height: renderHeight, + width: renderWidth, + style: { + display: style.display, + height: style.height, + width: style.width + } + } + }; + style.display = style.display || "block"; + style.boxSizing = style.boxSizing || "border-box"; + if (isNullOrEmpty(renderWidth)) { + const displayWidth = readUsedSize(canvas, "width"); + if (displayWidth !== void 0) { + canvas.width = displayWidth; + } + } + if (isNullOrEmpty(renderHeight)) { + if (canvas.style.height === "") { + canvas.height = canvas.width / (aspectRatio || 2); + } else { + const displayHeight = readUsedSize(canvas, "height"); + if (displayHeight !== void 0) { + canvas.height = displayHeight; + } + } + } + return canvas; + } + function addListener(node, type, listener) { + if (node) { + node.addEventListener(type, listener, eventListenerOptions); + } + } + function removeListener(chart2, type, listener) { + if (chart2 && chart2.canvas) { + chart2.canvas.removeEventListener(type, listener, eventListenerOptions); + } + } + function fromNativeEvent(event, chart2) { + const type = EVENT_TYPES[event.type] || event.type; + const { x, y } = getRelativePosition(event, chart2); + return { + type, + chart: chart2, + native: event, + x: x !== void 0 ? x : null, + y: y !== void 0 ? y : null + }; + } + function nodeListContains(nodeList, canvas) { + for (const node of nodeList) { + if (node === canvas || node.contains(canvas)) { + return true; + } + } + } + function createAttachObserver(chart2, type, listener) { + const canvas = chart2.canvas; + const observer = new MutationObserver((entries) => { + let trigger = false; + for (const entry of entries) { + trigger = trigger || nodeListContains(entry.addedNodes, canvas); + trigger = trigger && !nodeListContains(entry.removedNodes, canvas); + } + if (trigger) { + listener(); + } + }); + observer.observe(document, { + childList: true, + subtree: true + }); + return observer; + } + function createDetachObserver(chart2, type, listener) { + const canvas = chart2.canvas; + const observer = new MutationObserver((entries) => { + let trigger = false; + for (const entry of entries) { + trigger = trigger || nodeListContains(entry.removedNodes, canvas); + trigger = trigger && !nodeListContains(entry.addedNodes, canvas); + } + if (trigger) { + listener(); + } + }); + observer.observe(document, { + childList: true, + subtree: true + }); + return observer; + } + function onWindowResize() { + const dpr = window.devicePixelRatio; + if (dpr === oldDevicePixelRatio) { + return; + } + oldDevicePixelRatio = dpr; + drpListeningCharts.forEach((resize, chart2) => { + if (chart2.currentDevicePixelRatio !== dpr) { + resize(); + } + }); + } + function listenDevicePixelRatioChanges(chart2, resize) { + if (!drpListeningCharts.size) { + window.addEventListener("resize", onWindowResize); + } + drpListeningCharts.set(chart2, resize); + } + function unlistenDevicePixelRatioChanges(chart2) { + drpListeningCharts.delete(chart2); + if (!drpListeningCharts.size) { + window.removeEventListener("resize", onWindowResize); + } + } + function createResizeObserver(chart2, type, listener) { + const canvas = chart2.canvas; + const container = canvas && _getParentNode(canvas); + if (!container) { + return; + } + const resize = throttled((width, height) => { + const w = container.clientWidth; + listener(width, height); + if (w < container.clientWidth) { + listener(); + } + }, window); + const observer = new ResizeObserver((entries) => { + const entry = entries[0]; + const width = entry.contentRect.width; + const height = entry.contentRect.height; + if (width === 0 && height === 0) { + return; + } + resize(width, height); + }); + observer.observe(container); + listenDevicePixelRatioChanges(chart2, resize); + return observer; + } + function releaseObserver(chart2, type, observer) { + if (observer) { + observer.disconnect(); + } + if (type === "resize") { + unlistenDevicePixelRatioChanges(chart2); + } + } + function createProxyAndListen(chart2, type, listener) { + const canvas = chart2.canvas; + const proxy = throttled((event) => { + if (chart2.ctx !== null) { + listener(fromNativeEvent(event, chart2)); + } + }, chart2); + addListener(canvas, type, proxy); + return proxy; + } + function _detectPlatform(canvas) { + if (!_isDomSupported() || typeof OffscreenCanvas !== "undefined" && canvas instanceof OffscreenCanvas) { + return BasicPlatform; + } + return DomPlatform; + } + function autoSkip(scale, ticks) { + const tickOpts = scale.options.ticks; + const determinedMaxTicks = determineMaxTicks(scale); + const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks); + const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : []; + const numMajorIndices = majorIndices.length; + const first = majorIndices[0]; + const last = majorIndices[numMajorIndices - 1]; + const newTicks = []; + if (numMajorIndices > ticksLimit) { + skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit); + return newTicks; + } + const spacing = calculateSpacing(majorIndices, ticks, ticksLimit); + if (numMajorIndices > 0) { + let i, ilen; + const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null; + skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first); + for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) { + skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]); + } + skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing); + return newTicks; + } + skip(ticks, newTicks, spacing); + return newTicks; + } + function determineMaxTicks(scale) { + const offset = scale.options.offset; + const tickLength = scale._tickSize(); + const maxScale = scale._length / tickLength + (offset ? 0 : 1); + const maxChart = scale._maxLength / tickLength; + return Math.floor(Math.min(maxScale, maxChart)); + } + function calculateSpacing(majorIndices, ticks, ticksLimit) { + const evenMajorSpacing = getEvenSpacing(majorIndices); + const spacing = ticks.length / ticksLimit; + if (!evenMajorSpacing) { + return Math.max(spacing, 1); + } + const factors = _factorize(evenMajorSpacing); + for (let i = 0, ilen = factors.length - 1; i < ilen; i++) { + const factor = factors[i]; + if (factor > spacing) { + return factor; + } + } + return Math.max(spacing, 1); + } + function getMajorIndices(ticks) { + const result = []; + let i, ilen; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + if (ticks[i].major) { + result.push(i); + } + } + return result; + } + function skipMajors(ticks, newTicks, majorIndices, spacing) { + let count = 0; + let next = majorIndices[0]; + let i; + spacing = Math.ceil(spacing); + for (i = 0; i < ticks.length; i++) { + if (i === next) { + newTicks.push(ticks[i]); + count++; + next = majorIndices[count * spacing]; + } + } + } + function skip(ticks, newTicks, spacing, majorStart, majorEnd) { + const start = valueOrDefault(majorStart, 0); + const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length); + let count = 0; + let length, i, next; + spacing = Math.ceil(spacing); + if (majorEnd) { + length = majorEnd - majorStart; + spacing = length / Math.floor(length / spacing); + } + next = start; + while (next < 0) { + count++; + next = Math.round(start + count * spacing); + } + for (i = Math.max(start, 0); i < end; i++) { + if (i === next) { + newTicks.push(ticks[i]); + count++; + next = Math.round(start + count * spacing); + } + } + } + function getEvenSpacing(arr) { + const len = arr.length; + let i, diff; + if (len < 2) { + return false; + } + for (diff = arr[0], i = 1; i < len; ++i) { + if (arr[i] - arr[i - 1] !== diff) { + return false; + } + } + return diff; + } + function sample(arr, numItems) { + const result = []; + const increment = arr.length / numItems; + const len = arr.length; + let i = 0; + for (; i < len; i += increment) { + result.push(arr[Math.floor(i)]); + } + return result; + } + function getPixelForGridLine(scale, index2, offsetGridLines) { + const length = scale.ticks.length; + const validIndex2 = Math.min(index2, length - 1); + const start = scale._startPixel; + const end = scale._endPixel; + const epsilon = 1e-6; + let lineValue = scale.getPixelForTick(validIndex2); + let offset; + if (offsetGridLines) { + if (length === 1) { + offset = Math.max(lineValue - start, end - lineValue); + } else if (index2 === 0) { + offset = (scale.getPixelForTick(1) - lineValue) / 2; + } else { + offset = (lineValue - scale.getPixelForTick(validIndex2 - 1)) / 2; + } + lineValue += validIndex2 < index2 ? offset : -offset; + if (lineValue < start - epsilon || lineValue > end + epsilon) { + return; + } + } + return lineValue; + } + function garbageCollect(caches, length) { + each(caches, (cache2) => { + const gc = cache2.gc; + const gcLen = gc.length / 2; + let i; + if (gcLen > length) { + for (i = 0; i < gcLen; ++i) { + delete cache2.data[gc[i]]; + } + gc.splice(0, gcLen); + } + }); + } + function getTickMarkLength(options) { + return options.drawTicks ? options.tickLength : 0; + } + function getTitleHeight(options, fallback) { + if (!options.display) { + return 0; + } + const font = toFont(options.font, fallback); + const padding = toPadding(options.padding); + const lines = isArray(options.text) ? options.text.length : 1; + return lines * font.lineHeight + padding.height; + } + function createScaleContext(parent, scale) { + return createContext(parent, { + scale, + type: "scale" + }); + } + function createTickContext(parent, index2, tick) { + return createContext(parent, { + tick, + index: index2, + type: "tick" + }); + } + function titleAlign(align, position, reverse) { + let ret = _toLeftRightCenter(align); + if (reverse && position !== "right" || !reverse && position === "right") { + ret = reverseAlign(ret); + } + return ret; + } + function titleArgs(scale, offset, position, align) { + const { top, left, bottom, right, chart: chart2 } = scale; + const { chartArea, scales: scales2 } = chart2; + let rotation = 0; + let maxWidth, titleX, titleY; + const height = bottom - top; + const width = right - left; + if (scale.isHorizontal()) { + titleX = _alignStartEnd(align, left, right); + if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + titleY = scales2[positionAxisID].getPixelForValue(value) + height - offset; + } else if (position === "center") { + titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset; + } else { + titleY = offsetFromEdge(scale, position, offset); + } + maxWidth = right - left; + } else { + if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + titleX = scales2[positionAxisID].getPixelForValue(value) - width + offset; + } else if (position === "center") { + titleX = (chartArea.left + chartArea.right) / 2 - width + offset; + } else { + titleX = offsetFromEdge(scale, position, offset); + } + titleY = _alignStartEnd(align, bottom, top); + rotation = position === "left" ? -HALF_PI : HALF_PI; + } + return { + titleX, + titleY, + maxWidth, + rotation + }; + } + function registerDefaults(item, scope, parentScope) { + const itemDefaults = merge(/* @__PURE__ */ Object.create(null), [ + parentScope ? defaults.get(parentScope) : {}, + defaults.get(scope), + item.defaults + ]); + defaults.set(scope, itemDefaults); + if (item.defaultRoutes) { + routeDefaults(scope, item.defaultRoutes); + } + if (item.descriptors) { + defaults.describe(scope, item.descriptors); + } + } + function routeDefaults(scope, routes) { + Object.keys(routes).forEach((property) => { + const propertyParts = property.split("."); + const sourceName = propertyParts.pop(); + const sourceScope = [ + scope + ].concat(propertyParts).join("."); + const parts = routes[property].split("."); + const targetName = parts.pop(); + const targetScope = parts.join("."); + defaults.route(sourceScope, sourceName, targetScope, targetName); + }); + } + function isIChartComponent(proto) { + return "id" in proto && "defaults" in proto; + } + function allPlugins(config) { + const localIds = {}; + const plugins2 = []; + const keys = Object.keys(registry.plugins.items); + for (let i = 0; i < keys.length; i++) { + plugins2.push(registry.getPlugin(keys[i])); + } + const local = config.plugins || []; + for (let i = 0; i < local.length; i++) { + const plugin = local[i]; + if (plugins2.indexOf(plugin) === -1) { + plugins2.push(plugin); + localIds[plugin.id] = true; + } + } + return { + plugins: plugins2, + localIds + }; + } + function getOpts(options, all2) { + if (!all2 && options === false) { + return null; + } + if (options === true) { + return {}; + } + return options; + } + function createDescriptors(chart2, { plugins: plugins2, localIds }, options, all2) { + const result = []; + const context = chart2.getContext(); + for (const plugin of plugins2) { + const id = plugin.id; + const opts = getOpts(options[id], all2); + if (opts === null) { + continue; + } + result.push({ + plugin, + options: pluginOpts(chart2.config, { + plugin, + local: localIds[id] + }, opts, context) + }); + } + return result; + } + function pluginOpts(config, { plugin, local }, opts, context) { + const keys = config.pluginScopeKeys(plugin); + const scopes = config.getOptionScopes(opts, keys); + if (local && plugin.defaults) { + scopes.push(plugin.defaults); + } + return config.createResolver(scopes, context, [ + "" + ], { + scriptable: false, + indexable: false, + allKeys: true + }); + } + function getIndexAxis(type, options) { + const datasetDefaults = defaults.datasets[type] || {}; + const datasetOptions = (options.datasets || {})[type] || {}; + return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || "x"; + } + function getAxisFromDefaultScaleID(id, indexAxis) { + let axis = id; + if (id === "_index_") { + axis = indexAxis; + } else if (id === "_value_") { + axis = indexAxis === "x" ? "y" : "x"; + } + return axis; + } + function getDefaultScaleIDFromAxis(axis, indexAxis) { + return axis === indexAxis ? "_index_" : "_value_"; + } + function idMatchesAxis(id) { + if (id === "x" || id === "y" || id === "r") { + return id; + } + } + function axisFromPosition(position) { + if (position === "top" || position === "bottom") { + return "x"; + } + if (position === "left" || position === "right") { + return "y"; + } + } + function determineAxis(id, ...scaleOptions) { + if (idMatchesAxis(id)) { + return id; + } + for (const opts of scaleOptions) { + const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase()); + if (axis) { + return axis; + } + } + throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`); + } + function getAxisFromDataset(id, axis, dataset) { + if (dataset[axis + "AxisID"] === id) { + return { + axis + }; + } + } + function retrieveAxisFromDatasets(id, config) { + if (config.data && config.data.datasets) { + const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id); + if (boundDs.length) { + return getAxisFromDataset(id, "x", boundDs[0]) || getAxisFromDataset(id, "y", boundDs[0]); + } + } + return {}; + } + function mergeScaleConfig(config, options) { + const chartDefaults = overrides[config.type] || { + scales: {} + }; + const configScales = options.scales || {}; + const chartIndexAxis = getIndexAxis(config.type, options); + const scales2 = /* @__PURE__ */ Object.create(null); + Object.keys(configScales).forEach((id) => { + const scaleConf = configScales[id]; + if (!isObject(scaleConf)) { + return console.error(`Invalid scale configuration for scale: ${id}`); + } + if (scaleConf._proxy) { + return console.warn(`Ignoring resolver passed as options for scale: ${id}`); + } + const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]); + const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis); + const defaultScaleOptions = chartDefaults.scales || {}; + scales2[id] = mergeIf(/* @__PURE__ */ Object.create(null), [ + { + axis + }, + scaleConf, + defaultScaleOptions[axis], + defaultScaleOptions[defaultId] + ]); + }); + config.data.datasets.forEach((dataset) => { + const type = dataset.type || config.type; + const indexAxis = dataset.indexAxis || getIndexAxis(type, options); + const datasetDefaults = overrides[type] || {}; + const defaultScaleOptions = datasetDefaults.scales || {}; + Object.keys(defaultScaleOptions).forEach((defaultID) => { + const axis = getAxisFromDefaultScaleID(defaultID, indexAxis); + const id = dataset[axis + "AxisID"] || axis; + scales2[id] = scales2[id] || /* @__PURE__ */ Object.create(null); + mergeIf(scales2[id], [ + { + axis + }, + configScales[id], + defaultScaleOptions[defaultID] + ]); + }); + }); + Object.keys(scales2).forEach((key) => { + const scale = scales2[key]; + mergeIf(scale, [ + defaults.scales[scale.type], + defaults.scale + ]); + }); + return scales2; + } + function initOptions(config) { + const options = config.options || (config.options = {}); + options.plugins = valueOrDefault(options.plugins, {}); + options.scales = mergeScaleConfig(config, options); + } + function initData(data) { + data = data || {}; + data.datasets = data.datasets || []; + data.labels = data.labels || []; + return data; + } + function initConfig(config) { + config = config || {}; + config.data = initData(config.data); + initOptions(config); + return config; + } + function cachedKeys(cacheKey, generate) { + let keys = keyCache.get(cacheKey); + if (!keys) { + keys = generate(); + keyCache.set(cacheKey, keys); + keysCached.add(keys); + } + return keys; + } + function getResolver(resolverCache, scopes, prefixes) { + let cache2 = resolverCache.get(scopes); + if (!cache2) { + cache2 = /* @__PURE__ */ new Map(); + resolverCache.set(scopes, cache2); + } + const cacheKey = prefixes.join(); + let cached = cache2.get(cacheKey); + if (!cached) { + const resolver = _createResolver(scopes, prefixes); + cached = { + resolver, + subPrefixes: prefixes.filter((p) => !p.toLowerCase().includes("hover")) + }; + cache2.set(cacheKey, cached); + } + return cached; + } + function needContext(proxy, names2) { + const { isScriptable, isIndexable } = _descriptors(proxy); + for (const prop of names2) { + const scriptable = isScriptable(prop); + const indexable = isIndexable(prop); + const value = (indexable || scriptable) && proxy[prop]; + if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) { + return true; + } + } + return false; + } + function positionIsHorizontal(position, axis) { + return position === "top" || position === "bottom" || KNOWN_POSITIONS.indexOf(position) === -1 && axis === "x"; + } + function compare2Level(l1, l2) { + return function(a, b) { + return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1]; + }; + } + function onAnimationsComplete(context) { + const chart2 = context.chart; + const animationOptions = chart2.options.animation; + chart2.notifyPlugins("afterRender"); + callback(animationOptions && animationOptions.onComplete, [ + context + ], chart2); + } + function onAnimationProgress(context) { + const chart2 = context.chart; + const animationOptions = chart2.options.animation; + callback(animationOptions && animationOptions.onProgress, [ + context + ], chart2); + } + function getCanvas(item) { + if (_isDomSupported() && typeof item === "string") { + item = document.getElementById(item); + } else if (item && item.length) { + item = item[0]; + } + if (item && item.canvas) { + item = item.canvas; + } + return item; + } + function moveNumericKeys(obj, start, move) { + const keys = Object.keys(obj); + for (const key of keys) { + const intKey = +key; + if (intKey >= start) { + const value = obj[key]; + delete obj[key]; + if (move > 0 || intKey > start) { + obj[intKey + move] = value; + } + } + } + } + function determineLastEvent(e, lastEvent, inChartArea, isClick) { + if (!inChartArea || e.type === "mouseout") { + return null; + } + if (isClick) { + return lastEvent; + } + return e; + } + function invalidatePlugins() { + return each(Chart.instances, (chart2) => chart2._plugins.invalidate()); + } + function clipSelf(ctx, element, endAngle) { + const { startAngle, x, y, outerRadius, innerRadius, options } = element; + const { borderWidth: borderWidth2, borderJoinStyle } = options; + const outerAngleClip = Math.min(borderWidth2 / outerRadius, _normalizeAngle(startAngle - endAngle)); + ctx.beginPath(); + ctx.arc(x, y, outerRadius - borderWidth2 / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2); + if (innerRadius > 0) { + const innerAngleClip = Math.min(borderWidth2 / innerRadius, _normalizeAngle(startAngle - endAngle)); + ctx.arc(x, y, innerRadius + borderWidth2 / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true); + } else { + const clipWidth = Math.min(borderWidth2 / 2, outerRadius * _normalizeAngle(startAngle - endAngle)); + if (borderJoinStyle === "round") { + ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true); + } else if (borderJoinStyle === "bevel") { + const r = 2 * clipWidth * clipWidth; + const endX = -r * Math.cos(endAngle + PI / 2) + x; + const endY = -r * Math.sin(endAngle + PI / 2) + y; + const startX = r * Math.cos(startAngle + PI / 2) + x; + const startY = r * Math.sin(startAngle + PI / 2) + y; + ctx.lineTo(endX, endY); + ctx.lineTo(startX, startY); + } + } + ctx.closePath(); + ctx.moveTo(0, 0); + ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height); + ctx.clip("evenodd"); + } + function clipArc(ctx, element, endAngle) { + const { startAngle, pixelMargin, x, y, outerRadius, innerRadius } = element; + let angleMargin = pixelMargin / outerRadius; + ctx.beginPath(); + ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin); + if (innerRadius > pixelMargin) { + angleMargin = pixelMargin / innerRadius; + ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true); + } else { + ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI); + } + ctx.closePath(); + ctx.clip(); + } + function toRadiusCorners(value) { + return _readValueToProps(value, [ + "outerStart", + "outerEnd", + "innerStart", + "innerEnd" + ]); + } + function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) { + const o = toRadiusCorners(arc.options.borderRadius); + const halfThickness = (outerRadius - innerRadius) / 2; + const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2); + const computeOuterLimit = (val) => { + const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2; + return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit)); + }; + return { + outerStart: computeOuterLimit(o.outerStart), + outerEnd: computeOuterLimit(o.outerEnd), + innerStart: _limitValue(o.innerStart, 0, innerLimit), + innerEnd: _limitValue(o.innerEnd, 0, innerLimit) + }; + } + function rThetaToXY(r, theta, x, y) { + return { + x: x + r * Math.cos(theta), + y: y + r * Math.sin(theta) + }; + } + function pathArc(ctx, element, offset, spacing, end, circular) { + const { x, y, startAngle: start, pixelMargin, innerRadius: innerR } = element; + const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0); + const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0; + let spacingOffset = 0; + const alpha2 = end - start; + if (spacing) { + const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0; + const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0; + const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2; + const adjustedAngle = avNogSpacingRadius !== 0 ? alpha2 * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha2; + spacingOffset = (alpha2 - adjustedAngle) / 2; + } + const beta = Math.max(1e-3, alpha2 * outerRadius - offset / PI) / outerRadius; + const angleOffset = (alpha2 - beta) / 2; + const startAngle = start + angleOffset + spacingOffset; + const endAngle = end - angleOffset - spacingOffset; + const { outerStart, outerEnd, innerStart, innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle); + const outerStartAdjustedRadius = outerRadius - outerStart; + const outerEndAdjustedRadius = outerRadius - outerEnd; + const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius; + const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius; + const innerStartAdjustedRadius = innerRadius + innerStart; + const innerEndAdjustedRadius = innerRadius + innerEnd; + const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius; + const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius; + ctx.beginPath(); + if (circular) { + const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2; + ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle); + ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle); + if (outerEnd > 0) { + const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI); + } + const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y); + ctx.lineTo(p4.x, p4.y); + if (innerEnd > 0) { + const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI); + } + const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2; + ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true); + ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true); + if (innerStart > 0) { + const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI); + } + const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y); + ctx.lineTo(p8.x, p8.y); + if (outerStart > 0) { + const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle); + } + } else { + ctx.moveTo(x, y); + const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x; + const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y; + ctx.lineTo(outerStartX, outerStartY); + const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x; + const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y; + ctx.lineTo(outerEndX, outerEndY); + } + ctx.closePath(); + } + function drawArc(ctx, element, offset, spacing, circular) { + const { fullCircles, startAngle, circumference } = element; + let endAngle = element.endAngle; + if (fullCircles) { + pathArc(ctx, element, offset, spacing, endAngle, circular); + for (let i = 0; i < fullCircles; ++i) { + ctx.fill(); + } + if (!isNaN(circumference)) { + endAngle = startAngle + (circumference % TAU || TAU); + } + } + pathArc(ctx, element, offset, spacing, endAngle, circular); + ctx.fill(); + return endAngle; + } + function drawBorder(ctx, element, offset, spacing, circular) { + const { fullCircles, startAngle, circumference, options } = element; + const { borderWidth: borderWidth2, borderJoinStyle, borderDash, borderDashOffset, borderRadius } = options; + const inner = options.borderAlign === "inner"; + if (!borderWidth2) { + return; + } + ctx.setLineDash(borderDash || []); + ctx.lineDashOffset = borderDashOffset; + if (inner) { + ctx.lineWidth = borderWidth2 * 2; + ctx.lineJoin = borderJoinStyle || "round"; + } else { + ctx.lineWidth = borderWidth2; + ctx.lineJoin = borderJoinStyle || "bevel"; + } + let endAngle = element.endAngle; + if (fullCircles) { + pathArc(ctx, element, offset, spacing, endAngle, circular); + for (let i = 0; i < fullCircles; ++i) { + ctx.stroke(); + } + if (!isNaN(circumference)) { + endAngle = startAngle + (circumference % TAU || TAU); + } + } + if (inner) { + clipArc(ctx, element, endAngle); + } + if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== "miter") { + clipSelf(ctx, element, endAngle); + } + if (!fullCircles) { + pathArc(ctx, element, offset, spacing, endAngle, circular); + ctx.stroke(); + } + } + function setStyle(ctx, options, style = options) { + ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle); + ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash)); + ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset); + ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle); + ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth); + ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor); + } + function lineTo(ctx, previous, target) { + ctx.lineTo(target.x, target.y); + } + function getLineMethod(options) { + if (options.stepped) { + return _steppedLineTo; + } + if (options.tension || options.cubicInterpolationMode === "monotone") { + return _bezierCurveTo; + } + return lineTo; + } + function pathVars(points, segment, params = {}) { + const count = points.length; + const { start: paramsStart = 0, end: paramsEnd = count - 1 } = params; + const { start: segmentStart, end: segmentEnd } = segment; + const start = Math.max(paramsStart, segmentStart); + const end = Math.min(paramsEnd, segmentEnd); + const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd; + return { + count, + start, + loop: segment.loop, + ilen: end < start && !outside ? count + end - start : end - start + }; + } + function pathSegment(ctx, line, segment, params) { + const { points, options } = line; + const { count, start, loop, ilen } = pathVars(points, segment, params); + const lineMethod = getLineMethod(options); + let { move = true, reverse } = params || {}; + let i, point, prev; + for (i = 0; i <= ilen; ++i) { + point = points[(start + (reverse ? ilen - i : i)) % count]; + if (point.skip) { + continue; + } else if (move) { + ctx.moveTo(point.x, point.y); + move = false; + } else { + lineMethod(ctx, prev, point, reverse, options.stepped); + } + prev = point; + } + if (loop) { + point = points[(start + (reverse ? ilen : 0)) % count]; + lineMethod(ctx, prev, point, reverse, options.stepped); + } + return !!loop; + } + function fastPathSegment(ctx, line, segment, params) { + const points = line.points; + const { count, start, ilen } = pathVars(points, segment, params); + const { move = true, reverse } = params || {}; + let avgX = 0; + let countX = 0; + let i, point, prevX, minY, maxY, lastY; + const pointIndex = (index2) => (start + (reverse ? ilen - index2 : index2)) % count; + const drawX = () => { + if (minY !== maxY) { + ctx.lineTo(avgX, maxY); + ctx.lineTo(avgX, minY); + ctx.lineTo(avgX, lastY); + } + }; + if (move) { + point = points[pointIndex(0)]; + ctx.moveTo(point.x, point.y); + } + for (i = 0; i <= ilen; ++i) { + point = points[pointIndex(i)]; + if (point.skip) { + continue; + } + const x = point.x; + const y = point.y; + const truncX = x | 0; + if (truncX === prevX) { + if (y < minY) { + minY = y; + } else if (y > maxY) { + maxY = y; + } + avgX = (countX * avgX + x) / ++countX; + } else { + drawX(); + ctx.lineTo(x, y); + prevX = truncX; + countX = 0; + minY = maxY = y; + } + lastY = y; + } + drawX(); + } + function _getSegmentMethod(line) { + const opts = line.options; + const borderDash = opts.borderDash && opts.borderDash.length; + const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== "monotone" && !opts.stepped && !borderDash; + return useFastPath ? fastPathSegment : pathSegment; + } + function _getInterpolationMethod(options) { + if (options.stepped) { + return _steppedInterpolation; + } + if (options.tension || options.cubicInterpolationMode === "monotone") { + return _bezierInterpolation; + } + return _pointInLine; + } + function strokePathWithCache(ctx, line, start, count) { + let path = line._path; + if (!path) { + path = line._path = new Path2D(); + if (line.path(path, start, count)) { + path.closePath(); + } + } + setStyle(ctx, line.options); + ctx.stroke(path); + } + function strokePathDirect(ctx, line, start, count) { + const { segments, options } = line; + const segmentMethod = _getSegmentMethod(line); + for (const segment of segments) { + setStyle(ctx, options, segment.style); + ctx.beginPath(); + if (segmentMethod(ctx, line, segment, { + start, + end: start + count - 1 + })) { + ctx.closePath(); + } + ctx.stroke(); + } + } + function draw(ctx, line, start, count) { + if (usePath2D && !line.options.segment) { + strokePathWithCache(ctx, line, start, count); + } else { + strokePathDirect(ctx, line, start, count); + } + } + function inRange$1(el2, pos, axis, useFinalPosition) { + const options = el2.options; + const { [axis]: value } = el2.getProps([ + axis + ], useFinalPosition); + return Math.abs(pos - value) < options.radius + options.hitRadius; + } + function getBarBounds(bar, useFinalPosition) { + const { x, y, base, width, height } = bar.getProps([ + "x", + "y", + "base", + "width", + "height" + ], useFinalPosition); + let left, right, top, bottom, half; + if (bar.horizontal) { + half = height / 2; + left = Math.min(x, base); + right = Math.max(x, base); + top = y - half; + bottom = y + half; + } else { + half = width / 2; + left = x - half; + right = x + half; + top = Math.min(y, base); + bottom = Math.max(y, base); + } + return { + left, + top, + right, + bottom + }; + } + function skipOrLimit(skip2, value, min, max) { + return skip2 ? 0 : _limitValue(value, min, max); + } + function parseBorderWidth(bar, maxW, maxH) { + const value = bar.options.borderWidth; + const skip2 = bar.borderSkipped; + const o = toTRBL(value); + return { + t: skipOrLimit(skip2.top, o.top, 0, maxH), + r: skipOrLimit(skip2.right, o.right, 0, maxW), + b: skipOrLimit(skip2.bottom, o.bottom, 0, maxH), + l: skipOrLimit(skip2.left, o.left, 0, maxW) + }; + } + function parseBorderRadius(bar, maxW, maxH) { + const { enableBorderRadius } = bar.getProps([ + "enableBorderRadius" + ]); + const value = bar.options.borderRadius; + const o = toTRBLCorners(value); + const maxR = Math.min(maxW, maxH); + const skip2 = bar.borderSkipped; + const enableBorder = enableBorderRadius || isObject(value); + return { + topLeft: skipOrLimit(!enableBorder || skip2.top || skip2.left, o.topLeft, 0, maxR), + topRight: skipOrLimit(!enableBorder || skip2.top || skip2.right, o.topRight, 0, maxR), + bottomLeft: skipOrLimit(!enableBorder || skip2.bottom || skip2.left, o.bottomLeft, 0, maxR), + bottomRight: skipOrLimit(!enableBorder || skip2.bottom || skip2.right, o.bottomRight, 0, maxR) + }; + } + function boundingRects(bar) { + const bounds = getBarBounds(bar); + const width = bounds.right - bounds.left; + const height = bounds.bottom - bounds.top; + const border = parseBorderWidth(bar, width / 2, height / 2); + const radius = parseBorderRadius(bar, width / 2, height / 2); + return { + outer: { + x: bounds.left, + y: bounds.top, + w: width, + h: height, + radius + }, + inner: { + x: bounds.left + border.l, + y: bounds.top + border.t, + w: width - border.l - border.r, + h: height - border.t - border.b, + radius: { + topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)), + topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)), + bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)), + bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)) + } + } + }; + } + function inRange(bar, x, y, useFinalPosition) { + const skipX = x === null; + const skipY = y === null; + const skipBoth = skipX && skipY; + const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition); + return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom)); + } + function hasRadius(radius) { + return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight; + } + function addNormalRectPath(ctx, rect) { + ctx.rect(rect.x, rect.y, rect.w, rect.h); + } + function inflateRect(rect, amount, refRect = {}) { + const x = rect.x !== refRect.x ? -amount : 0; + const y = rect.y !== refRect.y ? -amount : 0; + const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x; + const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y; + return { + x: rect.x + x, + y: rect.y + y, + w: rect.w + w, + h: rect.h + h, + radius: rect.radius + }; + } + function getBorderColor(i) { + return BORDER_COLORS[i % BORDER_COLORS.length]; + } + function getBackgroundColor(i) { + return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length]; + } + function colorizeDefaultDataset(dataset, i) { + dataset.borderColor = getBorderColor(i); + dataset.backgroundColor = getBackgroundColor(i); + return ++i; + } + function colorizeDoughnutDataset(dataset, i) { + dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++)); + return i; + } + function colorizePolarAreaDataset(dataset, i) { + dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++)); + return i; + } + function getColorizer(chart2) { + let i = 0; + return (dataset, datasetIndex) => { + const controller = chart2.getDatasetMeta(datasetIndex).controller; + if (controller instanceof DoughnutController) { + i = colorizeDoughnutDataset(dataset, i); + } else if (controller instanceof PolarAreaController) { + i = colorizePolarAreaDataset(dataset, i); + } else if (controller) { + i = colorizeDefaultDataset(dataset, i); + } + }; + } + function containsColorsDefinitions(descriptors2) { + let k; + for (k in descriptors2) { + if (descriptors2[k].borderColor || descriptors2[k].backgroundColor) { + return true; + } + } + return false; + } + function containsColorsDefinition(descriptor) { + return descriptor && (descriptor.borderColor || descriptor.backgroundColor); + } + function containsDefaultColorsDefenitions() { + return defaults.borderColor !== "rgba(0,0,0,0.1)" || defaults.backgroundColor !== "rgba(0,0,0,0.1)"; + } + function lttbDecimation(data, start, count, availableWidth, options) { + const samples = options.samples || availableWidth; + if (samples >= count) { + return data.slice(start, start + count); + } + const decimated = []; + const bucketWidth = (count - 2) / (samples - 2); + let sampledIndex = 0; + const endIndex = start + count - 1; + let a = start; + let i, maxAreaPoint, maxArea, area, nextA; + decimated[sampledIndex++] = data[a]; + for (i = 0; i < samples - 2; i++) { + let avgX = 0; + let avgY = 0; + let j; + const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start; + const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start; + const avgRangeLength = avgRangeEnd - avgRangeStart; + for (j = avgRangeStart; j < avgRangeEnd; j++) { + avgX += data[j].x; + avgY += data[j].y; + } + avgX /= avgRangeLength; + avgY /= avgRangeLength; + const rangeOffs = Math.floor(i * bucketWidth) + 1 + start; + const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start; + const { x: pointAx, y: pointAy } = data[a]; + maxArea = area = -1; + for (j = rangeOffs; j < rangeTo; j++) { + area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy)); + if (area > maxArea) { + maxArea = area; + maxAreaPoint = data[j]; + nextA = j; + } + } + decimated[sampledIndex++] = maxAreaPoint; + a = nextA; + } + decimated[sampledIndex++] = data[endIndex]; + return decimated; + } + function minMaxDecimation(data, start, count, availableWidth) { + let avgX = 0; + let countX = 0; + let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY; + const decimated = []; + const endIndex = start + count - 1; + const xMin = data[start].x; + const xMax = data[endIndex].x; + const dx = xMax - xMin; + for (i = start; i < start + count; ++i) { + point = data[i]; + x = (point.x - xMin) / dx * availableWidth; + y = point.y; + const truncX = x | 0; + if (truncX === prevX) { + if (y < minY) { + minY = y; + minIndex = i; + } else if (y > maxY) { + maxY = y; + maxIndex = i; + } + avgX = (countX * avgX + point.x) / ++countX; + } else { + const lastIndex = i - 1; + if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) { + const intermediateIndex1 = Math.min(minIndex, maxIndex); + const intermediateIndex2 = Math.max(minIndex, maxIndex); + if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) { + decimated.push({ + ...data[intermediateIndex1], + x: avgX + }); + } + if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) { + decimated.push({ + ...data[intermediateIndex2], + x: avgX + }); + } + } + if (i > 0 && lastIndex !== startIndex) { + decimated.push(data[lastIndex]); + } + decimated.push(point); + prevX = truncX; + countX = 0; + minY = maxY = y; + minIndex = maxIndex = startIndex = i; + } + } + return decimated; + } + function cleanDecimatedDataset(dataset) { + if (dataset._decimated) { + const data = dataset._data; + delete dataset._decimated; + delete dataset._data; + Object.defineProperty(dataset, "data", { + configurable: true, + enumerable: true, + writable: true, + value: data + }); + } + } + function cleanDecimatedData(chart2) { + chart2.data.datasets.forEach((dataset) => { + cleanDecimatedDataset(dataset); + }); + } + function getStartAndCountOfVisiblePointsSimplified(meta, points) { + const pointCount = points.length; + let start = 0; + let count; + const { iScale } = meta; + const { min, max, minDefined, maxDefined } = iScale.getUserBounds(); + if (minDefined) { + start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1); + } + if (maxDefined) { + count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start; + } else { + count = pointCount - start; + } + return { + start, + count + }; + } + function _segments(line, target, property) { + const segments = line.segments; + const points = line.points; + const tpoints = target.points; + const parts = []; + for (const segment of segments) { + let { start, end } = segment; + end = _findSegmentEnd(start, end, points); + const bounds = _getBounds(property, points[start], points[end], segment.loop); + if (!target.segments) { + parts.push({ + source: segment, + target: bounds, + start: points[start], + end: points[end] + }); + continue; + } + const targetSegments = _boundSegments(target, bounds); + for (const tgt of targetSegments) { + const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop); + const fillSources = _boundSegment(segment, points, subBounds); + for (const fillSource of fillSources) { + parts.push({ + source: fillSource, + target: tgt, + start: { + [property]: _getEdge(bounds, subBounds, "start", Math.max) + }, + end: { + [property]: _getEdge(bounds, subBounds, "end", Math.min) + } + }); + } + } + } + return parts; + } + function _getBounds(property, first, last, loop) { + if (loop) { + return; + } + let start = first[property]; + let end = last[property]; + if (property === "angle") { + start = _normalizeAngle(start); + end = _normalizeAngle(end); + } + return { + property, + start, + end + }; + } + function _pointsFromSegments(boundary, line) { + const { x = null, y = null } = boundary || {}; + const linePoints = line.points; + const points = []; + line.segments.forEach(({ start, end }) => { + end = _findSegmentEnd(start, end, linePoints); + const first = linePoints[start]; + const last = linePoints[end]; + if (y !== null) { + points.push({ + x: first.x, + y + }); + points.push({ + x: last.x, + y + }); + } else if (x !== null) { + points.push({ + x, + y: first.y + }); + points.push({ + x, + y: last.y + }); + } + }); + return points; + } + function _findSegmentEnd(start, end, points) { + for (; end > start; end--) { + const point = points[end]; + if (!isNaN(point.x) && !isNaN(point.y)) { + break; + } + } + return end; + } + function _getEdge(a, b, prop, fn) { + if (a && b) { + return fn(a[prop], b[prop]); + } + return a ? a[prop] : b ? b[prop] : 0; + } + function _createBoundaryLine(boundary, line) { + let points = []; + let _loop = false; + if (isArray(boundary)) { + _loop = true; + points = boundary; + } else { + points = _pointsFromSegments(boundary, line); + } + return points.length ? new LineElement({ + points, + options: { + tension: 0 + }, + _loop, + _fullLoop: _loop + }) : null; + } + function _shouldApplyFill(source) { + return source && source.fill !== false; + } + function _resolveTarget(sources, index2, propagate) { + const source = sources[index2]; + let fill2 = source.fill; + const visited = [ + index2 + ]; + let target; + if (!propagate) { + return fill2; + } + while (fill2 !== false && visited.indexOf(fill2) === -1) { + if (!isNumberFinite(fill2)) { + return fill2; + } + target = sources[fill2]; + if (!target) { + return false; + } + if (target.visible) { + return fill2; + } + visited.push(fill2); + fill2 = target.fill; + } + return false; + } + function _decodeFill(line, index2, count) { + const fill2 = parseFillOption(line); + if (isObject(fill2)) { + return isNaN(fill2.value) ? false : fill2; + } + let target = parseFloat(fill2); + if (isNumberFinite(target) && Math.floor(target) === target) { + return decodeTargetIndex(fill2[0], index2, target, count); + } + return [ + "origin", + "start", + "end", + "stack", + "shape" + ].indexOf(fill2) >= 0 && fill2; + } + function decodeTargetIndex(firstCh, index2, target, count) { + if (firstCh === "-" || firstCh === "+") { + target = index2 + target; + } + if (target === index2 || target < 0 || target >= count) { + return false; + } + return target; + } + function _getTargetPixel(fill2, scale) { + let pixel = null; + if (fill2 === "start") { + pixel = scale.bottom; + } else if (fill2 === "end") { + pixel = scale.top; + } else if (isObject(fill2)) { + pixel = scale.getPixelForValue(fill2.value); + } else if (scale.getBasePixel) { + pixel = scale.getBasePixel(); + } + return pixel; + } + function _getTargetValue(fill2, scale, startValue) { + let value; + if (fill2 === "start") { + value = startValue; + } else if (fill2 === "end") { + value = scale.options.reverse ? scale.min : scale.max; + } else if (isObject(fill2)) { + value = fill2.value; + } else { + value = scale.getBaseValue(); + } + return value; + } + function parseFillOption(line) { + const options = line.options; + const fillOption = options.fill; + let fill2 = valueOrDefault(fillOption && fillOption.target, fillOption); + if (fill2 === void 0) { + fill2 = !!options.backgroundColor; + } + if (fill2 === false || fill2 === null) { + return false; + } + if (fill2 === true) { + return "origin"; + } + return fill2; + } + function _buildStackLine(source) { + const { scale, index: index2, line } = source; + const points = []; + const segments = line.segments; + const sourcePoints = line.points; + const linesBelow = getLinesBelow(scale, index2); + linesBelow.push(_createBoundaryLine({ + x: null, + y: scale.bottom + }, line)); + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + for (let j = segment.start; j <= segment.end; j++) { + addPointsBelow(points, sourcePoints[j], linesBelow); + } + } + return new LineElement({ + points, + options: {} + }); + } + function getLinesBelow(scale, index2) { + const below = []; + const metas = scale.getMatchingVisibleMetas("line"); + for (let i = 0; i < metas.length; i++) { + const meta = metas[i]; + if (meta.index === index2) { + break; + } + if (!meta.hidden) { + below.unshift(meta.dataset); + } + } + return below; + } + function addPointsBelow(points, sourcePoint, linesBelow) { + const postponed = []; + for (let j = 0; j < linesBelow.length; j++) { + const line = linesBelow[j]; + const { first, last, point } = findPoint(line, sourcePoint, "x"); + if (!point || first && last) { + continue; + } + if (first) { + postponed.unshift(point); + } else { + points.push(point); + if (!last) { + break; + } + } + } + points.push(...postponed); + } + function findPoint(line, sourcePoint, property) { + const point = line.interpolate(sourcePoint, property); + if (!point) { + return {}; + } + const pointValue = point[property]; + const segments = line.segments; + const linePoints = line.points; + let first = false; + let last = false; + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + const firstValue = linePoints[segment.start][property]; + const lastValue = linePoints[segment.end][property]; + if (_isBetween(pointValue, firstValue, lastValue)) { + first = pointValue === firstValue; + last = pointValue === lastValue; + break; + } + } + return { + first, + last, + point + }; + } + function _getTarget(source) { + const { chart: chart2, fill: fill2, line } = source; + if (isNumberFinite(fill2)) { + return getLineByIndex(chart2, fill2); + } + if (fill2 === "stack") { + return _buildStackLine(source); + } + if (fill2 === "shape") { + return true; + } + const boundary = computeBoundary(source); + if (boundary instanceof simpleArc) { + return boundary; + } + return _createBoundaryLine(boundary, line); + } + function getLineByIndex(chart2, index2) { + const meta = chart2.getDatasetMeta(index2); + const visible = meta && chart2.isDatasetVisible(index2); + return visible ? meta.dataset : null; + } + function computeBoundary(source) { + const scale = source.scale || {}; + if (scale.getPointPositionForValue) { + return computeCircularBoundary(source); + } + return computeLinearBoundary(source); + } + function computeLinearBoundary(source) { + const { scale = {}, fill: fill2 } = source; + const pixel = _getTargetPixel(fill2, scale); + if (isNumberFinite(pixel)) { + const horizontal = scale.isHorizontal(); + return { + x: horizontal ? pixel : null, + y: horizontal ? null : pixel + }; + } + return null; + } + function computeCircularBoundary(source) { + const { scale, fill: fill2 } = source; + const options = scale.options; + const length = scale.getLabels().length; + const start = options.reverse ? scale.max : scale.min; + const value = _getTargetValue(fill2, scale, start); + const target = []; + if (options.grid.circular) { + const center = scale.getPointPositionForValue(0, start); + return new simpleArc({ + x: center.x, + y: center.y, + radius: scale.getDistanceFromCenterForValue(value) + }); + } + for (let i = 0; i < length; ++i) { + target.push(scale.getPointPositionForValue(i, value)); + } + return target; + } + function _drawfill(ctx, source, area) { + const target = _getTarget(source); + const { chart: chart2, index: index2, line, scale, axis } = source; + const lineOpts = line.options; + const fillOption = lineOpts.fill; + const color2 = lineOpts.backgroundColor; + const { above = color2, below = color2 } = fillOption || {}; + const meta = chart2.getDatasetMeta(index2); + const clip = getDatasetClipArea(chart2, meta); + if (target && line.points.length) { + clipArea(ctx, area); + doFill(ctx, { + line, + target, + above, + below, + area, + scale, + axis, + clip + }); + unclipArea(ctx); + } + } + function doFill(ctx, cfg) { + const { line, target, above, below, area, scale, clip } = cfg; + const property = line._loop ? "angle" : cfg.axis; + ctx.save(); + let fillColor = below; + if (below !== above) { + if (property === "x") { + clipVertical(ctx, target, area.top); + fill(ctx, { + line, + target, + color: above, + scale, + property, + clip + }); + ctx.restore(); + ctx.save(); + clipVertical(ctx, target, area.bottom); + } else if (property === "y") { + clipHorizontal(ctx, target, area.left); + fill(ctx, { + line, + target, + color: below, + scale, + property, + clip + }); + ctx.restore(); + ctx.save(); + clipHorizontal(ctx, target, area.right); + fillColor = above; + } + } + fill(ctx, { + line, + target, + color: fillColor, + scale, + property, + clip + }); + ctx.restore(); + } + function clipVertical(ctx, target, clipY) { + const { segments, points } = target; + let first = true; + let lineLoop = false; + ctx.beginPath(); + for (const segment of segments) { + const { start, end } = segment; + const firstPoint = points[start]; + const lastPoint = points[_findSegmentEnd(start, end, points)]; + if (first) { + ctx.moveTo(firstPoint.x, firstPoint.y); + first = false; + } else { + ctx.lineTo(firstPoint.x, clipY); + ctx.lineTo(firstPoint.x, firstPoint.y); + } + lineLoop = !!target.pathSegment(ctx, segment, { + move: lineLoop + }); + if (lineLoop) { + ctx.closePath(); + } else { + ctx.lineTo(lastPoint.x, clipY); + } + } + ctx.lineTo(target.first().x, clipY); + ctx.closePath(); + ctx.clip(); + } + function clipHorizontal(ctx, target, clipX) { + const { segments, points } = target; + let first = true; + let lineLoop = false; + ctx.beginPath(); + for (const segment of segments) { + const { start, end } = segment; + const firstPoint = points[start]; + const lastPoint = points[_findSegmentEnd(start, end, points)]; + if (first) { + ctx.moveTo(firstPoint.x, firstPoint.y); + first = false; + } else { + ctx.lineTo(clipX, firstPoint.y); + ctx.lineTo(firstPoint.x, firstPoint.y); + } + lineLoop = !!target.pathSegment(ctx, segment, { + move: lineLoop + }); + if (lineLoop) { + ctx.closePath(); + } else { + ctx.lineTo(clipX, lastPoint.y); + } + } + ctx.lineTo(clipX, target.first().y); + ctx.closePath(); + ctx.clip(); + } + function fill(ctx, cfg) { + const { line, target, property, color: color2, scale, clip } = cfg; + const segments = _segments(line, target, property); + for (const { source: src, target: tgt, start, end } of segments) { + const { style: { backgroundColor = color2 } = {} } = src; + const notShape = target !== true; + ctx.save(); + ctx.fillStyle = backgroundColor; + clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end)); + ctx.beginPath(); + const lineLoop = !!line.pathSegment(ctx, src); + let loop; + if (notShape) { + if (lineLoop) { + ctx.closePath(); + } else { + interpolatedLineTo(ctx, target, end, property); + } + const targetLoop = !!target.pathSegment(ctx, tgt, { + move: lineLoop, + reverse: true + }); + loop = lineLoop && targetLoop; + if (!loop) { + interpolatedLineTo(ctx, target, start, property); + } + } + ctx.closePath(); + ctx.fill(loop ? "evenodd" : "nonzero"); + ctx.restore(); + } + } + function clipBounds(ctx, scale, clip, bounds) { + const chartArea = scale.chart.chartArea; + const { property, start, end } = bounds || {}; + if (property === "x" || property === "y") { + let left, top, right, bottom; + if (property === "x") { + left = start; + top = chartArea.top; + right = end; + bottom = chartArea.bottom; + } else { + left = chartArea.left; + top = start; + right = chartArea.right; + bottom = end; + } + ctx.beginPath(); + if (clip) { + left = Math.max(left, clip.left); + right = Math.min(right, clip.right); + top = Math.max(top, clip.top); + bottom = Math.min(bottom, clip.bottom); + } + ctx.rect(left, top, right - left, bottom - top); + ctx.clip(); + } + } + function interpolatedLineTo(ctx, target, point, property) { + const interpolatedPoint = target.interpolate(point, property); + if (interpolatedPoint) { + ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y); + } + } + function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) { + const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx); + const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight); + return { + itemWidth, + itemHeight + }; + } + function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) { + let legendItemText = legendItem.text; + if (legendItemText && typeof legendItemText !== "string") { + legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b); + } + return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width; + } + function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) { + let itemHeight = _itemHeight; + if (typeof legendItem.text !== "string") { + itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight); + } + return itemHeight; + } + function calculateLegendItemHeight(legendItem, fontLineHeight) { + const labelHeight = legendItem.text ? legendItem.text.length : 0; + return fontLineHeight * labelHeight; + } + function isListened(type, opts) { + if ((type === "mousemove" || type === "mouseout") && (opts.onHover || opts.onLeave)) { + return true; + } + if (opts.onClick && (type === "click" || type === "mouseup")) { + return true; + } + return false; + } + function createTitle(chart2, titleOpts) { + const title = new Title({ + ctx: chart2.ctx, + options: titleOpts, + chart: chart2 + }); + layouts.configure(chart2, title, titleOpts); + layouts.addBox(chart2, title); + chart2.titleBlock = title; + } + function pushOrConcat(base, toPush) { + if (toPush) { + if (isArray(toPush)) { + Array.prototype.push.apply(base, toPush); + } else { + base.push(toPush); + } + } + return base; + } + function splitNewlines(str) { + if ((typeof str === "string" || str instanceof String) && str.indexOf("\n") > -1) { + return str.split("\n"); + } + return str; + } + function createTooltipItem(chart2, item) { + const { element, datasetIndex, index: index2 } = item; + const controller = chart2.getDatasetMeta(datasetIndex).controller; + const { label, value } = controller.getLabelAndValue(index2); + return { + chart: chart2, + label, + parsed: controller.getParsed(index2), + raw: chart2.data.datasets[datasetIndex].data[index2], + formattedValue: value, + dataset: controller.getDataset(), + dataIndex: index2, + datasetIndex, + element + }; + } + function getTooltipSize(tooltip, options) { + const ctx = tooltip.chart.ctx; + const { body, footer, title } = tooltip; + const { boxWidth, boxHeight } = options; + const bodyFont = toFont(options.bodyFont); + const titleFont = toFont(options.titleFont); + const footerFont = toFont(options.footerFont); + const titleLineCount = title.length; + const footerLineCount = footer.length; + const bodyLineItemCount = body.length; + const padding = toPadding(options.padding); + let height = padding.height; + let width = 0; + let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0); + combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length; + if (titleLineCount) { + height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom; + } + if (combinedBodyLength) { + const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight; + height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing; + } + if (footerLineCount) { + height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing; + } + let widthPadding = 0; + const maxLineWidth = function(line) { + width = Math.max(width, ctx.measureText(line).width + widthPadding); + }; + ctx.save(); + ctx.font = titleFont.string; + each(tooltip.title, maxLineWidth); + ctx.font = bodyFont.string; + each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth); + widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0; + each(body, (bodyItem) => { + each(bodyItem.before, maxLineWidth); + each(bodyItem.lines, maxLineWidth); + each(bodyItem.after, maxLineWidth); + }); + widthPadding = 0; + ctx.font = footerFont.string; + each(tooltip.footer, maxLineWidth); + ctx.restore(); + width += padding.width; + return { + width, + height + }; + } + function determineYAlign(chart2, size) { + const { y, height } = size; + if (y < height / 2) { + return "top"; + } else if (y > chart2.height - height / 2) { + return "bottom"; + } + return "center"; + } + function doesNotFitWithAlign(xAlign, chart2, options, size) { + const { x, width } = size; + const caret = options.caretSize + options.caretPadding; + if (xAlign === "left" && x + width + caret > chart2.width) { + return true; + } + if (xAlign === "right" && x - width - caret < 0) { + return true; + } + } + function determineXAlign(chart2, options, size, yAlign) { + const { x, width } = size; + const { width: chartWidth, chartArea: { left, right } } = chart2; + let xAlign = "center"; + if (yAlign === "center") { + xAlign = x <= (left + right) / 2 ? "left" : "right"; + } else if (x <= width / 2) { + xAlign = "left"; + } else if (x >= chartWidth - width / 2) { + xAlign = "right"; + } + if (doesNotFitWithAlign(xAlign, chart2, options, size)) { + xAlign = "center"; + } + return xAlign; + } + function determineAlignment(chart2, options, size) { + const yAlign = size.yAlign || options.yAlign || determineYAlign(chart2, size); + return { + xAlign: size.xAlign || options.xAlign || determineXAlign(chart2, options, size, yAlign), + yAlign + }; + } + function alignX(size, xAlign) { + let { x, width } = size; + if (xAlign === "right") { + x -= width; + } else if (xAlign === "center") { + x -= width / 2; + } + return x; + } + function alignY(size, yAlign, paddingAndSize) { + let { y, height } = size; + if (yAlign === "top") { + y += paddingAndSize; + } else if (yAlign === "bottom") { + y -= height + paddingAndSize; + } else { + y -= height / 2; + } + return y; + } + function getBackgroundPoint(options, size, alignment, chart2) { + const { caretSize, caretPadding, cornerRadius: cornerRadius2 } = options; + const { xAlign, yAlign } = alignment; + const paddingAndSize = caretSize + caretPadding; + const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius2); + let x = alignX(size, xAlign); + const y = alignY(size, yAlign, paddingAndSize); + if (yAlign === "center") { + if (xAlign === "left") { + x += paddingAndSize; + } else if (xAlign === "right") { + x -= paddingAndSize; + } + } else if (xAlign === "left") { + x -= Math.max(topLeft, bottomLeft) + caretSize; + } else if (xAlign === "right") { + x += Math.max(topRight, bottomRight) + caretSize; + } + return { + x: _limitValue(x, 0, chart2.width - size.width), + y: _limitValue(y, 0, chart2.height - size.height) + }; + } + function getAlignedX(tooltip, align, options) { + const padding = toPadding(options.padding); + return align === "center" ? tooltip.x + tooltip.width / 2 : align === "right" ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left; + } + function getBeforeAfterBodyLines(callback2) { + return pushOrConcat([], splitNewlines(callback2)); + } + function createTooltipContext(parent, tooltip, tooltipItems) { + return createContext(parent, { + tooltip, + tooltipItems, + type: "tooltip" + }); + } + function overrideCallbacks(callbacks, context) { + const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks; + return override ? callbacks.override(override) : callbacks; + } + function invokeCallbackWithFallback(callbacks, name, ctx, arg) { + const result = callbacks[name].call(ctx, arg); + if (typeof result === "undefined") { + return defaultCallbacks[name].call(ctx, arg); + } + return result; + } + function findOrAddLabel(labels, raw, index2, addedLabels) { + const first = labels.indexOf(raw); + if (first === -1) { + return addIfString(labels, raw, index2, addedLabels); + } + const last = labels.lastIndexOf(raw); + return first !== last ? index2 : first; + } + function _getLabelForValue(value) { + const labels = this.getLabels(); + if (value >= 0 && value < labels.length) { + return labels[value]; + } + return value; + } + function generateTicks$1(generationOptions, dataRange) { + const ticks = []; + const MIN_SPACING = 1e-14; + const { bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds } = generationOptions; + const unit = step || 1; + const maxSpaces = maxTicks - 1; + const { min: rmin, max: rmax } = dataRange; + const minDefined = !isNullOrUndef(min); + const maxDefined = !isNullOrUndef(max); + const countDefined = !isNullOrUndef(count); + const minSpacing = (rmax - rmin) / (maxDigits + 1); + let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit; + let factor, niceMin, niceMax, numSpaces; + if (spacing < MIN_SPACING && !minDefined && !maxDefined) { + return [ + { + value: rmin + }, + { + value: rmax + } + ]; + } + numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing); + if (numSpaces > maxSpaces) { + spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit; + } + if (!isNullOrUndef(precision)) { + factor = Math.pow(10, precision); + spacing = Math.ceil(spacing * factor) / factor; + } + if (bounds === "ticks") { + niceMin = Math.floor(rmin / spacing) * spacing; + niceMax = Math.ceil(rmax / spacing) * spacing; + } else { + niceMin = rmin; + niceMax = rmax; + } + if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1e3)) { + numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks)); + spacing = (max - min) / numSpaces; + niceMin = min; + niceMax = max; + } else if (countDefined) { + niceMin = minDefined ? min : niceMin; + niceMax = maxDefined ? max : niceMax; + numSpaces = count - 1; + spacing = (niceMax - niceMin) / numSpaces; + } else { + numSpaces = (niceMax - niceMin) / spacing; + if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1e3)) { + numSpaces = Math.round(numSpaces); + } else { + numSpaces = Math.ceil(numSpaces); + } + } + const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin)); + factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision); + niceMin = Math.round(niceMin * factor) / factor; + niceMax = Math.round(niceMax * factor) / factor; + let j = 0; + if (minDefined) { + if (includeBounds && niceMin !== min) { + ticks.push({ + value: min + }); + if (niceMin < min) { + j++; + } + if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) { + j++; + } + } else if (niceMin < min) { + j++; + } + } + for (; j < numSpaces; ++j) { + const tickValue = Math.round((niceMin + j * spacing) * factor) / factor; + if (maxDefined && tickValue > max) { + break; + } + ticks.push({ + value: tickValue + }); + } + if (maxDefined && includeBounds && niceMax !== max) { + if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) { + ticks[ticks.length - 1].value = max; + } else { + ticks.push({ + value: max + }); + } + } else if (!maxDefined || niceMax === max) { + ticks.push({ + value: niceMax + }); + } + return ticks; + } + function relativeLabelSize(value, minSpacing, { horizontal, minRotation }) { + const rad = toRadians(minRotation); + const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 1e-3; + const length = 0.75 * minSpacing * ("" + value).length; + return Math.min(minSpacing / ratio, length); + } + function isMajor(tickVal) { + const remain = tickVal / Math.pow(10, log10Floor(tickVal)); + return remain === 1; + } + function steps(min, max, rangeExp) { + const rangeStep = Math.pow(10, rangeExp); + const start = Math.floor(min / rangeStep); + const end = Math.ceil(max / rangeStep); + return end - start; + } + function startExp(min, max) { + const range2 = max - min; + let rangeExp = log10Floor(range2); + while (steps(min, max, rangeExp) > 10) { + rangeExp++; + } + while (steps(min, max, rangeExp) < 10) { + rangeExp--; + } + return Math.min(rangeExp, log10Floor(min)); + } + function generateTicks(generationOptions, { min, max }) { + min = finiteOrDefault(generationOptions.min, min); + const ticks = []; + const minExp = log10Floor(min); + let exp = startExp(min, max); + let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1; + const stepSize = Math.pow(10, exp); + const base = minExp > exp ? Math.pow(10, minExp) : 0; + const start = Math.round((min - base) * precision) / precision; + const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10; + let significand = Math.floor((start - offset) / Math.pow(10, exp)); + let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision); + while (value < max) { + ticks.push({ + value, + major: isMajor(value), + significand + }); + if (significand >= 10) { + significand = significand < 15 ? 15 : 20; + } else { + significand++; + } + if (significand >= 20) { + exp++; + significand = 2; + precision = exp >= 0 ? 1 : precision; + } + value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision; + } + const lastTick = finiteOrDefault(generationOptions.max, value); + ticks.push({ + value: lastTick, + major: isMajor(lastTick), + significand + }); + return ticks; + } + function getTickBackdropHeight(opts) { + const tickOpts = opts.ticks; + if (tickOpts.display && opts.display) { + const padding = toPadding(tickOpts.backdropPadding); + return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height; + } + return 0; + } + function measureLabelSize(ctx, font, label) { + label = isArray(label) ? label : [ + label + ]; + return { + w: _longestText(ctx, font.string, label), + h: label.length * font.lineHeight + }; + } + function determineLimits(angle, pos, size, min, max) { + if (angle === min || angle === max) { + return { + start: pos - size / 2, + end: pos + size / 2 + }; + } else if (angle < min || angle > max) { + return { + start: pos - size, + end: pos + }; + } + return { + start: pos, + end: pos + size + }; + } + function fitWithPointLabels(scale) { + const orig = { + l: scale.left + scale._padding.left, + r: scale.right - scale._padding.right, + t: scale.top + scale._padding.top, + b: scale.bottom - scale._padding.bottom + }; + const limits = Object.assign({}, orig); + const labelSizes = []; + const padding = []; + const valueCount = scale._pointLabels.length; + const pointLabelOpts = scale.options.pointLabels; + const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0; + for (let i = 0; i < valueCount; i++) { + const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i)); + padding[i] = opts.padding; + const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle); + const plFont = toFont(opts.font); + const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]); + labelSizes[i] = textSize; + const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle); + const angle = Math.round(toDegrees(angleRadians)); + const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180); + const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270); + updateLimits(limits, orig, angleRadians, hLimits, vLimits); + } + scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b); + scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding); + } + function updateLimits(limits, orig, angle, hLimits, vLimits) { + const sin = Math.abs(Math.sin(angle)); + const cos = Math.abs(Math.cos(angle)); + let x = 0; + let y = 0; + if (hLimits.start < orig.l) { + x = (orig.l - hLimits.start) / sin; + limits.l = Math.min(limits.l, orig.l - x); + } else if (hLimits.end > orig.r) { + x = (hLimits.end - orig.r) / sin; + limits.r = Math.max(limits.r, orig.r + x); + } + if (vLimits.start < orig.t) { + y = (orig.t - vLimits.start) / cos; + limits.t = Math.min(limits.t, orig.t - y); + } else if (vLimits.end > orig.b) { + y = (vLimits.end - orig.b) / cos; + limits.b = Math.max(limits.b, orig.b + y); + } + } + function createPointLabelItem(scale, index2, itemOpts) { + const outerDistance = scale.drawingArea; + const { extra, additionalAngle, padding, size } = itemOpts; + const pointLabelPosition = scale.getPointPosition(index2, outerDistance + extra + padding, additionalAngle); + const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI))); + const y = yForAngle(pointLabelPosition.y, size.h, angle); + const textAlign = getTextAlignForAngle(angle); + const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign); + return { + visible: true, + x: pointLabelPosition.x, + y, + textAlign, + left, + top: y, + right: left + size.w, + bottom: y + size.h + }; + } + function isNotOverlapped(item, area) { + if (!area) { + return true; + } + const { left, top, right, bottom } = item; + const apexesInArea = _isPointInArea({ + x: left, + y: top + }, area) || _isPointInArea({ + x: left, + y: bottom + }, area) || _isPointInArea({ + x: right, + y: top + }, area) || _isPointInArea({ + x: right, + y: bottom + }, area); + return !apexesInArea; + } + function buildPointLabelItems(scale, labelSizes, padding) { + const items = []; + const valueCount = scale._pointLabels.length; + const opts = scale.options; + const { centerPointLabels, display: display2 } = opts.pointLabels; + const itemOpts = { + extra: getTickBackdropHeight(opts) / 2, + additionalAngle: centerPointLabels ? PI / valueCount : 0 + }; + let area; + for (let i = 0; i < valueCount; i++) { + itemOpts.padding = padding[i]; + itemOpts.size = labelSizes[i]; + const item = createPointLabelItem(scale, i, itemOpts); + items.push(item); + if (display2 === "auto") { + item.visible = isNotOverlapped(item, area); + if (item.visible) { + area = item; + } + } + } + return items; + } + function getTextAlignForAngle(angle) { + if (angle === 0 || angle === 180) { + return "center"; + } else if (angle < 180) { + return "left"; + } + return "right"; + } + function leftForTextAlign(x, w, align) { + if (align === "right") { + x -= w; + } else if (align === "center") { + x -= w / 2; + } + return x; + } + function yForAngle(y, h, angle) { + if (angle === 90 || angle === 270) { + y -= h / 2; + } else if (angle > 270 || angle < 90) { + y -= h; + } + return y; + } + function drawPointLabelBox(ctx, opts, item) { + const { left, top, right, bottom } = item; + const { backdropColor } = opts; + if (!isNullOrUndef(backdropColor)) { + const borderRadius = toTRBLCorners(opts.borderRadius); + const padding = toPadding(opts.backdropPadding); + ctx.fillStyle = backdropColor; + const backdropLeft = left - padding.left; + const backdropTop = top - padding.top; + const backdropWidth = right - left + padding.width; + const backdropHeight = bottom - top + padding.height; + if (Object.values(borderRadius).some((v) => v !== 0)) { + ctx.beginPath(); + addRoundedRectPath(ctx, { + x: backdropLeft, + y: backdropTop, + w: backdropWidth, + h: backdropHeight, + radius: borderRadius + }); + ctx.fill(); + } else { + ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight); + } + } + } + function drawPointLabels(scale, labelCount) { + const { ctx, options: { pointLabels } } = scale; + for (let i = labelCount - 1; i >= 0; i--) { + const item = scale._pointLabelItems[i]; + if (!item.visible) { + continue; + } + const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i)); + drawPointLabelBox(ctx, optsAtIndex, item); + const plFont = toFont(optsAtIndex.font); + const { x, y, textAlign } = item; + renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, { + color: optsAtIndex.color, + textAlign, + textBaseline: "middle" + }); + } + } + function pathRadiusLine(scale, radius, circular, labelCount) { + const { ctx } = scale; + if (circular) { + ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU); + } else { + let pointPosition = scale.getPointPosition(0, radius); + ctx.moveTo(pointPosition.x, pointPosition.y); + for (let i = 1; i < labelCount; i++) { + pointPosition = scale.getPointPosition(i, radius); + ctx.lineTo(pointPosition.x, pointPosition.y); + } + } + } + function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) { + const ctx = scale.ctx; + const circular = gridLineOpts.circular; + const { color: color2, lineWidth } = gridLineOpts; + if (!circular && !labelCount || !color2 || !lineWidth || radius < 0) { + return; + } + ctx.save(); + ctx.strokeStyle = color2; + ctx.lineWidth = lineWidth; + ctx.setLineDash(borderOpts.dash || []); + ctx.lineDashOffset = borderOpts.dashOffset; + ctx.beginPath(); + pathRadiusLine(scale, radius, circular, labelCount); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } + function createPointLabelContext(parent, index2, label) { + return createContext(parent, { + label, + index: index2, + type: "pointLabel" + }); + } + function sorter(a, b) { + return a - b; + } + function parse(scale, input) { + if (isNullOrUndef(input)) { + return null; + } + const adapter = scale._adapter; + const { parser, round: round2, isoWeekday } = scale._parseOpts; + let value = input; + if (typeof parser === "function") { + value = parser(value); + } + if (!isNumberFinite(value)) { + value = typeof parser === "string" ? adapter.parse(value, parser) : adapter.parse(value); + } + if (value === null) { + return null; + } + if (round2) { + value = round2 === "week" && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, "isoWeek", isoWeekday) : adapter.startOf(value, round2); + } + return +value; + } + function determineUnitForAutoTicks(minUnit, min, max, capacity) { + const ilen = UNITS.length; + for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) { + const interval = INTERVALS[UNITS[i]]; + const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER; + if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) { + return UNITS[i]; + } + } + return UNITS[ilen - 1]; + } + function determineUnitForFormatting(scale, numTicks, minUnit, min, max) { + for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) { + const unit = UNITS[i]; + if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) { + return unit; + } + } + return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0]; + } + function determineMajorUnit(unit) { + for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) { + if (INTERVALS[UNITS[i]].common) { + return UNITS[i]; + } + } + } + function addTick(ticks, time, timestamps) { + if (!timestamps) { + ticks[time] = true; + } else if (timestamps.length) { + const { lo, hi } = _lookup(timestamps, time); + const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi]; + ticks[timestamp] = true; + } + } + function setMajorTicks(scale, ticks, map3, majorUnit) { + const adapter = scale._adapter; + const first = +adapter.startOf(ticks[0].value, majorUnit); + const last = ticks[ticks.length - 1].value; + let major, index2; + for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) { + index2 = map3[major]; + if (index2 >= 0) { + ticks[index2].major = true; + } + } + return ticks; + } + function ticksFromTimestamps(scale, values, majorUnit) { + const ticks = []; + const map3 = {}; + const ilen = values.length; + let i, value; + for (i = 0; i < ilen; ++i) { + value = values[i]; + map3[value] = i; + ticks.push({ + value, + major: false + }); + } + return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map3, majorUnit); + } + function interpolate2(table, val, reverse) { + let lo = 0; + let hi = table.length - 1; + let prevSource, nextSource, prevTarget, nextTarget; + if (reverse) { + if (val >= table[lo].pos && val <= table[hi].pos) { + ({ lo, hi } = _lookupByKey(table, "pos", val)); + } + ({ pos: prevSource, time: prevTarget } = table[lo]); + ({ pos: nextSource, time: nextTarget } = table[hi]); + } else { + if (val >= table[lo].time && val <= table[hi].time) { + ({ lo, hi } = _lookupByKey(table, "time", val)); + } + ({ time: prevSource, pos: prevTarget } = table[lo]); + ({ time: nextSource, pos: nextTarget } = table[hi]); + } + const span = nextSource - prevSource; + return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget; + } + var Animator, animator, transparent, interpolators, Animation, Animations, isDirectUpdateMode, cloneIfNotShared, createStack, DatasetController, BarController, BubbleController, DoughnutController, LineController, PolarAreaController, PieController, RadarController, ScatterController, controllers, DateAdapterBase, adapters, Interaction, STATIC_POSITIONS, layouts, BasePlatform, BasicPlatform, EXPANDO_KEY, EVENT_TYPES, isNullOrEmpty, eventListenerOptions, drpListeningCharts, oldDevicePixelRatio, DomPlatform, Element2, reverseAlign, offsetFromEdge, getTicksLimit, Scale, TypedRegistry, Registry, registry, PluginService, keyCache, keysCached, addIfFound, Config, hasFunction, version, KNOWN_POSITIONS, instances, getChart, Chart, ArcElement, usePath2D, LineElement, PointElement, BarElement, elements, BORDER_COLORS, BACKGROUND_COLORS, plugin_colors, plugin_decimation, simpleArc, index, getBoxSize, itemsEqual, Legend, plugin_legend, Title, plugin_title, map2, plugin_subtitle, positioners, defaultCallbacks, Tooltip, plugin_tooltip, plugins, addIfString, validIndex, CategoryScale, LinearScaleBase, LinearScale, log10Floor, changeExponent, LogarithmicScale, RadialLinearScale, INTERVALS, UNITS, TimeScale, TimeSeriesScale, scales, registerables; + var init_chart = __esm({ + "node_modules/chart.js/dist/chart.js"() { + init_helpers_dataset(); + Animator = class { + constructor() { + this._request = null; + this._charts = /* @__PURE__ */ new Map(); + this._running = false; + this._lastDate = void 0; + } + _notify(chart2, anims, date, type) { + const callbacks = anims.listeners[type]; + const numSteps = anims.duration; + callbacks.forEach((fn) => fn({ + chart: chart2, + initial: anims.initial, + numSteps, + currentStep: Math.min(date - anims.start, numSteps) + })); + } + _refresh() { + if (this._request) { + return; + } + this._running = true; + this._request = requestAnimFrame.call(window, () => { + this._update(); + this._request = null; + if (this._running) { + this._refresh(); + } + }); + } + _update(date = Date.now()) { + let remaining = 0; + this._charts.forEach((anims, chart2) => { + if (!anims.running || !anims.items.length) { + return; + } + const items = anims.items; + let i = items.length - 1; + let draw2 = false; + let item; + for (; i >= 0; --i) { + item = items[i]; + if (item._active) { + if (item._total > anims.duration) { + anims.duration = item._total; + } + item.tick(date); + draw2 = true; + } else { + items[i] = items[items.length - 1]; + items.pop(); + } + } + if (draw2) { + chart2.draw(); + this._notify(chart2, anims, date, "progress"); + } + if (!items.length) { + anims.running = false; + this._notify(chart2, anims, date, "complete"); + anims.initial = false; + } + remaining += items.length; + }); + this._lastDate = date; + if (remaining === 0) { + this._running = false; + } + } + _getAnims(chart2) { + const charts = this._charts; + let anims = charts.get(chart2); + if (!anims) { + anims = { + running: false, + initial: true, + items: [], + listeners: { + complete: [], + progress: [] + } + }; + charts.set(chart2, anims); + } + return anims; + } + listen(chart2, event, cb) { + this._getAnims(chart2).listeners[event].push(cb); + } + add(chart2, items) { + if (!items || !items.length) { + return; + } + this._getAnims(chart2).items.push(...items); + } + has(chart2) { + return this._getAnims(chart2).items.length > 0; + } + start(chart2) { + const anims = this._charts.get(chart2); + if (!anims) { + return; + } + anims.running = true; + anims.start = Date.now(); + anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0); + this._refresh(); + } + running(chart2) { + if (!this._running) { + return false; + } + const anims = this._charts.get(chart2); + if (!anims || !anims.running || !anims.items.length) { + return false; + } + return true; + } + stop(chart2) { + const anims = this._charts.get(chart2); + if (!anims || !anims.items.length) { + return; + } + const items = anims.items; + let i = items.length - 1; + for (; i >= 0; --i) { + items[i].cancel(); + } + anims.items = []; + this._notify(chart2, anims, Date.now(), "complete"); + } + remove(chart2) { + return this._charts.delete(chart2); + } + }; + animator = /* @__PURE__ */ new Animator(); + transparent = "transparent"; + interpolators = { + boolean(from2, to2, factor) { + return factor > 0.5 ? to2 : from2; + }, + color(from2, to2, factor) { + const c0 = color(from2 || transparent); + const c1 = c0.valid && color(to2 || transparent); + return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to2; + }, + number(from2, to2, factor) { + return from2 + (to2 - from2) * factor; + } + }; + Animation = class { + constructor(cfg, target, prop, to2) { + const currentValue = target[prop]; + to2 = resolve([ + cfg.to, + to2, + currentValue, + cfg.from + ]); + const from2 = resolve([ + cfg.from, + currentValue, + to2 + ]); + this._active = true; + this._fn = cfg.fn || interpolators[cfg.type || typeof from2]; + this._easing = effects[cfg.easing] || effects.linear; + this._start = Math.floor(Date.now() + (cfg.delay || 0)); + this._duration = this._total = Math.floor(cfg.duration); + this._loop = !!cfg.loop; + this._target = target; + this._prop = prop; + this._from = from2; + this._to = to2; + this._promises = void 0; + } + active() { + return this._active; + } + update(cfg, to2, date) { + if (this._active) { + this._notify(false); + const currentValue = this._target[this._prop]; + const elapsed = date - this._start; + const remain = this._duration - elapsed; + this._start = date; + this._duration = Math.floor(Math.max(remain, cfg.duration)); + this._total += elapsed; + this._loop = !!cfg.loop; + this._to = resolve([ + cfg.to, + to2, + currentValue, + cfg.from + ]); + this._from = resolve([ + cfg.from, + currentValue, + to2 + ]); + } + } + cancel() { + if (this._active) { + this.tick(Date.now()); + this._active = false; + this._notify(false); + } + } + tick(date) { + const elapsed = date - this._start; + const duration = this._duration; + const prop = this._prop; + const from2 = this._from; + const loop = this._loop; + const to2 = this._to; + let factor; + this._active = from2 !== to2 && (loop || elapsed < duration); + if (!this._active) { + this._target[prop] = to2; + this._notify(true); + return; + } + if (elapsed < 0) { + this._target[prop] = from2; + return; + } + factor = elapsed / duration % 2; + factor = loop && factor > 1 ? 2 - factor : factor; + factor = this._easing(Math.min(1, Math.max(0, factor))); + this._target[prop] = this._fn(from2, to2, factor); + } + wait() { + const promises = this._promises || (this._promises = []); + return new Promise((res, rej) => { + promises.push({ + res, + rej + }); + }); + } + _notify(resolved) { + const method = resolved ? "res" : "rej"; + const promises = this._promises || []; + for (let i = 0; i < promises.length; i++) { + promises[i][method](); + } + } + }; + Animations = class { + constructor(chart2, config) { + this._chart = chart2; + this._properties = /* @__PURE__ */ new Map(); + this.configure(config); + } + configure(config) { + if (!isObject(config)) { + return; + } + const animationOptions = Object.keys(defaults.animation); + const animatedProps = this._properties; + Object.getOwnPropertyNames(config).forEach((key) => { + const cfg = config[key]; + if (!isObject(cfg)) { + return; + } + const resolved = {}; + for (const option of animationOptions) { + resolved[option] = cfg[option]; + } + (isArray(cfg.properties) && cfg.properties || [ + key + ]).forEach((prop) => { + if (prop === key || !animatedProps.has(prop)) { + animatedProps.set(prop, resolved); + } + }); + }); + } + _animateOptions(target, values) { + const newOptions = values.options; + const options = resolveTargetOptions(target, newOptions); + if (!options) { + return []; + } + const animations = this._createAnimations(options, newOptions); + if (newOptions.$shared) { + awaitAll(target.options.$animations, newOptions).then(() => { + target.options = newOptions; + }, () => { + }); + } + return animations; + } + _createAnimations(target, values) { + const animatedProps = this._properties; + const animations = []; + const running = target.$animations || (target.$animations = {}); + const props = Object.keys(values); + const date = Date.now(); + let i; + for (i = props.length - 1; i >= 0; --i) { + const prop = props[i]; + if (prop.charAt(0) === "$") { + continue; + } + if (prop === "options") { + animations.push(...this._animateOptions(target, values)); + continue; + } + const value = values[prop]; + let animation = running[prop]; + const cfg = animatedProps.get(prop); + if (animation) { + if (cfg && animation.active()) { + animation.update(cfg, value, date); + continue; + } else { + animation.cancel(); + } + } + if (!cfg || !cfg.duration) { + target[prop] = value; + continue; + } + running[prop] = animation = new Animation(cfg, target, prop, value); + animations.push(animation); + } + return animations; + } + update(target, values) { + if (this._properties.size === 0) { + Object.assign(target, values); + return; + } + const animations = this._createAnimations(target, values); + if (animations.length) { + animator.add(this._chart, animations); + return true; + } + } + }; + isDirectUpdateMode = (mode) => mode === "reset" || mode === "none"; + cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached); + createStack = (canStack, meta, chart2) => canStack && !meta.hidden && meta._stacked && { + keys: getSortedDatasetIndices(chart2, true), + values: null + }; + DatasetController = class { + constructor(chart2, datasetIndex) { + this.chart = chart2; + this._ctx = chart2.ctx; + this.index = datasetIndex; + this._cachedDataOpts = {}; + this._cachedMeta = this.getMeta(); + this._type = this._cachedMeta.type; + this.options = void 0; + this._parsing = false; + this._data = void 0; + this._objectData = void 0; + this._sharedOptions = void 0; + this._drawStart = void 0; + this._drawCount = void 0; + this.enableOptionSharing = false; + this.supportsDecimation = false; + this.$context = void 0; + this._syncList = []; + this.datasetElementType = new.target.datasetElementType; + this.dataElementType = new.target.dataElementType; + this.initialize(); + } + initialize() { + const meta = this._cachedMeta; + this.configure(); + this.linkScales(); + meta._stacked = isStacked(meta.vScale, meta); + this.addElements(); + if (this.options.fill && !this.chart.isPluginEnabled("filler")) { + console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options"); + } + } + updateIndex(datasetIndex) { + if (this.index !== datasetIndex) { + clearStacks(this._cachedMeta); + } + this.index = datasetIndex; + } + linkScales() { + const chart2 = this.chart; + const meta = this._cachedMeta; + const dataset = this.getDataset(); + const chooseId = (axis, x, y, r) => axis === "x" ? x : axis === "r" ? r : y; + const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart2, "x")); + const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart2, "y")); + const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart2, "r")); + const indexAxis = meta.indexAxis; + const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid); + const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid); + meta.xScale = this.getScaleForId(xid); + meta.yScale = this.getScaleForId(yid); + meta.rScale = this.getScaleForId(rid); + meta.iScale = this.getScaleForId(iid); + meta.vScale = this.getScaleForId(vid); + } + getDataset() { + return this.chart.data.datasets[this.index]; + } + getMeta() { + return this.chart.getDatasetMeta(this.index); + } + getScaleForId(scaleID) { + return this.chart.scales[scaleID]; + } + _getOtherScale(scale) { + const meta = this._cachedMeta; + return scale === meta.iScale ? meta.vScale : meta.iScale; + } + reset() { + this._update("reset"); + } + _destroy() { + const meta = this._cachedMeta; + if (this._data) { + unlistenArrayEvents(this._data, this); + } + if (meta._stacked) { + clearStacks(meta); + } + } + _dataCheck() { + const dataset = this.getDataset(); + const data = dataset.data || (dataset.data = []); + const _data = this._data; + if (isObject(data)) { + const meta = this._cachedMeta; + this._data = convertObjectDataToArray(data, meta); + } else if (_data !== data) { + if (_data) { + unlistenArrayEvents(_data, this); + const meta = this._cachedMeta; + clearStacks(meta); + meta._parsed = []; + } + if (data && Object.isExtensible(data)) { + listenArrayEvents(data, this); + } + this._syncList = []; + this._data = data; + } + } + addElements() { + const meta = this._cachedMeta; + this._dataCheck(); + if (this.datasetElementType) { + meta.dataset = new this.datasetElementType(); + } + } + buildOrUpdateElements(resetNewElements) { + const meta = this._cachedMeta; + const dataset = this.getDataset(); + let stackChanged = false; + this._dataCheck(); + const oldStacked = meta._stacked; + meta._stacked = isStacked(meta.vScale, meta); + if (meta.stack !== dataset.stack) { + stackChanged = true; + clearStacks(meta); + meta.stack = dataset.stack; + } + this._resyncElements(resetNewElements); + if (stackChanged || oldStacked !== meta._stacked) { + updateStacks(this, meta._parsed); + meta._stacked = isStacked(meta.vScale, meta); + } + } + configure() { + const config = this.chart.config; + const scopeKeys = config.datasetScopeKeys(this._type); + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true); + this.options = config.createResolver(scopes, this.getContext()); + this._parsing = this.options.parsing; + this._cachedDataOpts = {}; + } + parse(start, count) { + const { _cachedMeta: meta, _data: data } = this; + const { iScale, _stacked } = meta; + const iAxis = iScale.axis; + let sorted = start === 0 && count === data.length ? true : meta._sorted; + let prev = start > 0 && meta._parsed[start - 1]; + let i, cur, parsed; + if (this._parsing === false) { + meta._parsed = data; + meta._sorted = true; + parsed = data; + } else { + if (isArray(data[start])) { + parsed = this.parseArrayData(meta, data, start, count); + } else if (isObject(data[start])) { + parsed = this.parseObjectData(meta, data, start, count); + } else { + parsed = this.parsePrimitiveData(meta, data, start, count); + } + const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis]; + for (i = 0; i < count; ++i) { + meta._parsed[i + start] = cur = parsed[i]; + if (sorted) { + if (isNotInOrderComparedToPrev()) { + sorted = false; + } + prev = cur; + } + } + meta._sorted = sorted; + } + if (_stacked) { + updateStacks(this, parsed); + } + } + parsePrimitiveData(meta, data, start, count) { + const { iScale, vScale } = meta; + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const labels = iScale.getLabels(); + const singleScale = iScale === vScale; + const parsed = new Array(count); + let i, ilen, index2; + for (i = 0, ilen = count; i < ilen; ++i) { + index2 = i + start; + parsed[i] = { + [iAxis]: singleScale || iScale.parse(labels[index2], index2), + [vAxis]: vScale.parse(data[index2], index2) + }; + } + return parsed; + } + parseArrayData(meta, data, start, count) { + const { xScale, yScale } = meta; + const parsed = new Array(count); + let i, ilen, index2, item; + for (i = 0, ilen = count; i < ilen; ++i) { + index2 = i + start; + item = data[index2]; + parsed[i] = { + x: xScale.parse(item[0], index2), + y: yScale.parse(item[1], index2) + }; + } + return parsed; + } + parseObjectData(meta, data, start, count) { + const { xScale, yScale } = meta; + const { xAxisKey = "x", yAxisKey = "y" } = this._parsing; + const parsed = new Array(count); + let i, ilen, index2, item; + for (i = 0, ilen = count; i < ilen; ++i) { + index2 = i + start; + item = data[index2]; + parsed[i] = { + x: xScale.parse(resolveObjectKey(item, xAxisKey), index2), + y: yScale.parse(resolveObjectKey(item, yAxisKey), index2) + }; + } + return parsed; + } + getParsed(index2) { + return this._cachedMeta._parsed[index2]; + } + getDataElement(index2) { + return this._cachedMeta.data[index2]; + } + applyStack(scale, parsed, mode) { + const chart2 = this.chart; + const meta = this._cachedMeta; + const value = parsed[scale.axis]; + const stack = { + keys: getSortedDatasetIndices(chart2, true), + values: parsed._stacks[scale.axis]._visualValues + }; + return applyStack(stack, value, meta.index, { + mode + }); + } + updateRangeFromParsed(range2, scale, parsed, stack) { + const parsedValue = parsed[scale.axis]; + let value = parsedValue === null ? NaN : parsedValue; + const values = stack && parsed._stacks[scale.axis]; + if (stack && values) { + stack.values = values; + value = applyStack(stack, parsedValue, this._cachedMeta.index); + } + range2.min = Math.min(range2.min, value); + range2.max = Math.max(range2.max, value); + } + getMinMax(scale, canStack) { + const meta = this._cachedMeta; + const _parsed = meta._parsed; + const sorted = meta._sorted && scale === meta.iScale; + const ilen = _parsed.length; + const otherScale = this._getOtherScale(scale); + const stack = createStack(canStack, meta, this.chart); + const range2 = { + min: Number.POSITIVE_INFINITY, + max: Number.NEGATIVE_INFINITY + }; + const { min: otherMin, max: otherMax } = getUserBounds(otherScale); + let i, parsed; + function _skip() { + parsed = _parsed[i]; + const otherValue = parsed[otherScale.axis]; + return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue; + } + for (i = 0; i < ilen; ++i) { + if (_skip()) { + continue; + } + this.updateRangeFromParsed(range2, scale, parsed, stack); + if (sorted) { + break; + } + } + if (sorted) { + for (i = ilen - 1; i >= 0; --i) { + if (_skip()) { + continue; + } + this.updateRangeFromParsed(range2, scale, parsed, stack); + break; + } + } + return range2; + } + getAllParsedValues(scale) { + const parsed = this._cachedMeta._parsed; + const values = []; + let i, ilen, value; + for (i = 0, ilen = parsed.length; i < ilen; ++i) { + value = parsed[i][scale.axis]; + if (isNumberFinite(value)) { + values.push(value); + } + } + return values; + } + getMaxOverflow() { + return false; + } + getLabelAndValue(index2) { + const meta = this._cachedMeta; + const iScale = meta.iScale; + const vScale = meta.vScale; + const parsed = this.getParsed(index2); + return { + label: iScale ? "" + iScale.getLabelForValue(parsed[iScale.axis]) : "", + value: vScale ? "" + vScale.getLabelForValue(parsed[vScale.axis]) : "" + }; + } + _update(mode) { + const meta = this._cachedMeta; + this.update(mode || "default"); + meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow()))); + } + update(mode) { + } + draw() { + const ctx = this._ctx; + const chart2 = this.chart; + const meta = this._cachedMeta; + const elements3 = meta.data || []; + const area = chart2.chartArea; + const active = []; + const start = this._drawStart || 0; + const count = this._drawCount || elements3.length - start; + const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop; + let i; + if (meta.dataset) { + meta.dataset.draw(ctx, area, start, count); + } + for (i = start; i < start + count; ++i) { + const element = elements3[i]; + if (element.hidden) { + continue; + } + if (element.active && drawActiveElementsOnTop) { + active.push(element); + } else { + element.draw(ctx, area); + } + } + for (i = 0; i < active.length; ++i) { + active[i].draw(ctx, area); + } + } + getStyle(index2, active) { + const mode = active ? "active" : "default"; + return index2 === void 0 && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index2 || 0, mode); + } + getContext(index2, active, mode) { + const dataset = this.getDataset(); + let context; + if (index2 >= 0 && index2 < this._cachedMeta.data.length) { + const element = this._cachedMeta.data[index2]; + context = element.$context || (element.$context = createDataContext(this.getContext(), index2, element)); + context.parsed = this.getParsed(index2); + context.raw = dataset.data[index2]; + context.index = context.dataIndex = index2; + } else { + context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index)); + context.dataset = dataset; + context.index = context.datasetIndex = this.index; + } + context.active = !!active; + context.mode = mode; + return context; + } + resolveDatasetElementOptions(mode) { + return this._resolveElementOptions(this.datasetElementType.id, mode); + } + resolveDataElementOptions(index2, mode) { + return this._resolveElementOptions(this.dataElementType.id, mode, index2); + } + _resolveElementOptions(elementType, mode = "default", index2) { + const active = mode === "active"; + const cache2 = this._cachedDataOpts; + const cacheKey = elementType + "-" + mode; + const cached = cache2[cacheKey]; + const sharing = this.enableOptionSharing && defined(index2); + if (cached) { + return cloneIfNotShared(cached, sharing); + } + const config = this.chart.config; + const scopeKeys = config.datasetElementScopeKeys(this._type, elementType); + const prefixes = active ? [ + `${elementType}Hover`, + "hover", + elementType, + "" + ] : [ + elementType, + "" + ]; + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); + const names2 = Object.keys(defaults.elements[elementType]); + const context = () => this.getContext(index2, active, mode); + const values = config.resolveNamedOptions(scopes, names2, context, prefixes); + if (values.$shared) { + values.$shared = sharing; + cache2[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing)); + } + return values; + } + _resolveAnimations(index2, transition, active) { + const chart2 = this.chart; + const cache2 = this._cachedDataOpts; + const cacheKey = `animation-${transition}`; + const cached = cache2[cacheKey]; + if (cached) { + return cached; + } + let options; + if (chart2.options.animation !== false) { + const config = this.chart.config; + const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition); + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); + options = config.createResolver(scopes, this.getContext(index2, active, transition)); + } + const animations = new Animations(chart2, options && options.animations); + if (options && options._cacheable) { + cache2[cacheKey] = Object.freeze(animations); + } + return animations; + } + getSharedOptions(options) { + if (!options.$shared) { + return; + } + return this._sharedOptions || (this._sharedOptions = Object.assign({}, options)); + } + includeOptions(mode, sharedOptions) { + return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled; + } + _getSharedOptions(start, mode) { + const firstOpts = this.resolveDataElementOptions(start, mode); + const previouslySharedOptions = this._sharedOptions; + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions; + this.updateSharedOptions(sharedOptions, mode, firstOpts); + return { + sharedOptions, + includeOptions + }; + } + updateElement(element, index2, properties, mode) { + if (isDirectUpdateMode(mode)) { + Object.assign(element, properties); + } else { + this._resolveAnimations(index2, mode).update(element, properties); + } + } + updateSharedOptions(sharedOptions, mode, newOptions) { + if (sharedOptions && !isDirectUpdateMode(mode)) { + this._resolveAnimations(void 0, mode).update(sharedOptions, newOptions); + } + } + _setStyle(element, index2, mode, active) { + element.active = active; + const options = this.getStyle(index2, active); + this._resolveAnimations(index2, mode, active).update(element, { + options: !active && this.getSharedOptions(options) || options + }); + } + removeHoverStyle(element, datasetIndex, index2) { + this._setStyle(element, index2, "active", false); + } + setHoverStyle(element, datasetIndex, index2) { + this._setStyle(element, index2, "active", true); + } + _removeDatasetHoverStyle() { + const element = this._cachedMeta.dataset; + if (element) { + this._setStyle(element, void 0, "active", false); + } + } + _setDatasetHoverStyle() { + const element = this._cachedMeta.dataset; + if (element) { + this._setStyle(element, void 0, "active", true); + } + } + _resyncElements(resetNewElements) { + const data = this._data; + const elements3 = this._cachedMeta.data; + for (const [method, arg1, arg2] of this._syncList) { + this[method](arg1, arg2); + } + this._syncList = []; + const numMeta = elements3.length; + const numData = data.length; + const count = Math.min(numData, numMeta); + if (count) { + this.parse(0, count); + } + if (numData > numMeta) { + this._insertElements(numMeta, numData - numMeta, resetNewElements); + } else if (numData < numMeta) { + this._removeElements(numData, numMeta - numData); + } + } + _insertElements(start, count, resetNewElements = true) { + const meta = this._cachedMeta; + const data = meta.data; + const end = start + count; + let i; + const move = (arr) => { + arr.length += count; + for (i = arr.length - 1; i >= end; i--) { + arr[i] = arr[i - count]; + } + }; + move(data); + for (i = start; i < end; ++i) { + data[i] = new this.dataElementType(); + } + if (this._parsing) { + move(meta._parsed); + } + this.parse(start, count); + if (resetNewElements) { + this.updateElements(data, start, count, "reset"); + } + } + updateElements(element, start, count, mode) { + } + _removeElements(start, count) { + const meta = this._cachedMeta; + if (this._parsing) { + const removed = meta._parsed.splice(start, count); + if (meta._stacked) { + clearStacks(meta, removed); + } + } + meta.data.splice(start, count); + } + _sync(args) { + if (this._parsing) { + this._syncList.push(args); + } else { + const [method, arg1, arg2] = args; + this[method](arg1, arg2); + } + this.chart._dataChanges.push([ + this.index, + ...args + ]); + } + _onDataPush() { + const count = arguments.length; + this._sync([ + "_insertElements", + this.getDataset().data.length - count, + count + ]); + } + _onDataPop() { + this._sync([ + "_removeElements", + this._cachedMeta.data.length - 1, + 1 + ]); + } + _onDataShift() { + this._sync([ + "_removeElements", + 0, + 1 + ]); + } + _onDataSplice(start, count) { + if (count) { + this._sync([ + "_removeElements", + start, + count + ]); + } + const newCount = arguments.length - 2; + if (newCount) { + this._sync([ + "_insertElements", + start, + newCount + ]); + } + } + _onDataUnshift() { + this._sync([ + "_insertElements", + 0, + arguments.length + ]); + } + }; + __publicField(DatasetController, "defaults", {}); + __publicField(DatasetController, "datasetElementType", null); + __publicField(DatasetController, "dataElementType", null); + BarController = class extends DatasetController { + parsePrimitiveData(meta, data, start, count) { + return parseArrayOrPrimitive(meta, data, start, count); + } + parseArrayData(meta, data, start, count) { + return parseArrayOrPrimitive(meta, data, start, count); + } + parseObjectData(meta, data, start, count) { + const { iScale, vScale } = meta; + const { xAxisKey = "x", yAxisKey = "y" } = this._parsing; + const iAxisKey = iScale.axis === "x" ? xAxisKey : yAxisKey; + const vAxisKey = vScale.axis === "x" ? xAxisKey : yAxisKey; + const parsed = []; + let i, ilen, item, obj; + for (i = start, ilen = start + count; i < ilen; ++i) { + obj = data[i]; + item = {}; + item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i); + parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i)); + } + return parsed; + } + updateRangeFromParsed(range2, scale, parsed, stack) { + super.updateRangeFromParsed(range2, scale, parsed, stack); + const custom = parsed._custom; + if (custom && scale === this._cachedMeta.vScale) { + range2.min = Math.min(range2.min, custom.min); + range2.max = Math.max(range2.max, custom.max); + } + } + getMaxOverflow() { + return 0; + } + getLabelAndValue(index2) { + const meta = this._cachedMeta; + const { iScale, vScale } = meta; + const parsed = this.getParsed(index2); + const custom = parsed._custom; + const value = isFloatBar(custom) ? "[" + custom.start + ", " + custom.end + "]" : "" + vScale.getLabelForValue(parsed[vScale.axis]); + return { + label: "" + iScale.getLabelForValue(parsed[iScale.axis]), + value + }; + } + initialize() { + this.enableOptionSharing = true; + super.initialize(); + const meta = this._cachedMeta; + meta.stack = this.getDataset().stack; + } + update(mode) { + const meta = this._cachedMeta; + this.updateElements(meta.data, 0, meta.data.length, mode); + } + updateElements(bars, start, count, mode) { + const reset = mode === "reset"; + const { index: index2, _cachedMeta: { vScale } } = this; + const base = vScale.getBasePixel(); + const horizontal = vScale.isHorizontal(); + const ruler = this._getRuler(); + const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode); + for (let i = start; i < start + count; i++) { + const parsed = this.getParsed(i); + const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? { + base, + head: base + } : this._calculateBarValuePixels(i); + const ipixels = this._calculateBarIndexPixels(i, ruler); + const stack = (parsed._stacks || {})[vScale.axis]; + const properties = { + horizontal, + base: vpixels.base, + enableBorderRadius: !stack || isFloatBar(parsed._custom) || index2 === stack._top || index2 === stack._bottom, + x: horizontal ? vpixels.head : ipixels.center, + y: horizontal ? ipixels.center : vpixels.head, + height: horizontal ? ipixels.size : Math.abs(vpixels.size), + width: horizontal ? Math.abs(vpixels.size) : ipixels.size + }; + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? "active" : mode); + } + const options = properties.options || bars[i].options; + setBorderSkipped(properties, options, stack, index2); + setInflateAmount(properties, options, ruler.ratio); + this.updateElement(bars[i], i, properties, mode); + } + } + _getStacks(last, dataIndex) { + const { iScale } = this._cachedMeta; + const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta) => meta.controller.options.grouped); + const stacked = iScale.options.stacked; + const stacks = []; + const currentParsed = this._cachedMeta.controller.getParsed(dataIndex); + const iScaleValue = currentParsed && currentParsed[iScale.axis]; + const skipNull = (meta) => { + const parsed = meta._parsed.find((item) => item[iScale.axis] === iScaleValue); + const val = parsed && parsed[meta.vScale.axis]; + if (isNullOrUndef(val) || isNaN(val)) { + return true; + } + }; + for (const meta of metasets) { + if (dataIndex !== void 0 && skipNull(meta)) { + continue; + } + if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === void 0 && meta.stack === void 0) { + stacks.push(meta.stack); + } + if (meta.index === last) { + break; + } + } + if (!stacks.length) { + stacks.push(void 0); + } + return stacks; + } + _getStackCount(index2) { + return this._getStacks(void 0, index2).length; + } + _getAxisCount() { + return this._getAxis().length; + } + getFirstScaleIdForIndexAxis() { + const scales2 = this.chart.scales; + const indexScaleId = this.chart.options.indexAxis; + return Object.keys(scales2).filter((key) => scales2[key].axis === indexScaleId).shift(); + } + _getAxis() { + const axis = {}; + const firstScaleAxisId = this.getFirstScaleIdForIndexAxis(); + for (const dataset of this.chart.data.datasets) { + axis[valueOrDefault(this.chart.options.indexAxis === "x" ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true; + } + return Object.keys(axis); + } + _getStackIndex(datasetIndex, name, dataIndex) { + const stacks = this._getStacks(datasetIndex, dataIndex); + const index2 = name !== void 0 ? stacks.indexOf(name) : -1; + return index2 === -1 ? stacks.length - 1 : index2; + } + _getRuler() { + const opts = this.options; + const meta = this._cachedMeta; + const iScale = meta.iScale; + const pixels = []; + let i, ilen; + for (i = 0, ilen = meta.data.length; i < ilen; ++i) { + pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i)); + } + const barThickness = opts.barThickness; + const min = barThickness || computeMinSampleSize(meta); + return { + min, + pixels, + start: iScale._startPixel, + end: iScale._endPixel, + stackCount: this._getStackCount(), + scale: iScale, + grouped: opts.grouped, + ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage + }; + } + _calculateBarValuePixels(index2) { + const { _cachedMeta: { vScale, _stacked, index: datasetIndex }, options: { base: baseValue, minBarLength } } = this; + const actualBase = baseValue || 0; + const parsed = this.getParsed(index2); + const custom = parsed._custom; + const floating = isFloatBar(custom); + let value = parsed[vScale.axis]; + let start = 0; + let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value; + let head, size; + if (length !== value) { + start = length - value; + length = value; + } + if (floating) { + value = custom.barStart; + length = custom.barEnd - custom.barStart; + if (value !== 0 && sign(value) !== sign(custom.barEnd)) { + start = 0; + } + start += value; + } + const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start; + let base = vScale.getPixelForValue(startValue); + if (this.chart.getDataVisibility(index2)) { + head = vScale.getPixelForValue(start + length); + } else { + head = base; + } + size = head - base; + if (Math.abs(size) < minBarLength) { + size = barSign(size, vScale, actualBase) * minBarLength; + if (value === actualBase) { + base -= size / 2; + } + const startPixel = vScale.getPixelForDecimal(0); + const endPixel = vScale.getPixelForDecimal(1); + const min = Math.min(startPixel, endPixel); + const max = Math.max(startPixel, endPixel); + base = Math.max(Math.min(base, max), min); + head = base + size; + if (_stacked && !floating) { + parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base); + } + } + if (base === vScale.getPixelForValue(actualBase)) { + const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2; + base += halfGrid; + size -= halfGrid; + } + return { + size, + base, + head, + center: head + size / 2 + }; + } + _calculateBarIndexPixels(index2, ruler) { + const scale = ruler.scale; + const options = this.options; + const skipNull = options.skipNull; + const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity); + let center, size; + const axisCount = this._getAxisCount(); + if (ruler.grouped) { + const stackCount = skipNull ? this._getStackCount(index2) : ruler.stackCount; + const range2 = options.barThickness === "flex" ? computeFlexCategoryTraits(index2, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index2, ruler, options, stackCount * axisCount); + const axisID = this.chart.options.indexAxis === "x" ? this.getDataset().xAxisID : this.getDataset().yAxisID; + const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis())); + const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index2 : void 0) + axisNumber; + center = range2.start + range2.chunk * stackIndex + range2.chunk / 2; + size = Math.min(maxBarThickness, range2.chunk * range2.ratio); + } else { + center = scale.getPixelForValue(this.getParsed(index2)[scale.axis], index2); + size = Math.min(maxBarThickness, ruler.min * ruler.ratio); + } + return { + base: center - size / 2, + head: center + size / 2, + center, + size + }; + } + draw() { + const meta = this._cachedMeta; + const vScale = meta.vScale; + const rects = meta.data; + const ilen = rects.length; + let i = 0; + for (; i < ilen; ++i) { + if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) { + rects[i].draw(this._ctx); + } + } + } + }; + __publicField(BarController, "id", "bar"); + __publicField(BarController, "defaults", { + datasetElementType: false, + dataElementType: "bar", + categoryPercentage: 0.8, + barPercentage: 0.9, + grouped: true, + animations: { + numbers: { + type: "number", + properties: [ + "x", + "y", + "base", + "width", + "height" + ] + } + } + }); + __publicField(BarController, "overrides", { + scales: { + _index_: { + type: "category", + offset: true, + grid: { + offset: true + } + }, + _value_: { + type: "linear", + beginAtZero: true + } + } + }); + BubbleController = class extends DatasetController { + initialize() { + this.enableOptionSharing = true; + super.initialize(); + } + parsePrimitiveData(meta, data, start, count) { + const parsed = super.parsePrimitiveData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + parsed[i]._custom = this.resolveDataElementOptions(i + start).radius; + } + return parsed; + } + parseArrayData(meta, data, start, count) { + const parsed = super.parseArrayData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + const item = data[start + i]; + parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius); + } + return parsed; + } + parseObjectData(meta, data, start, count) { + const parsed = super.parseObjectData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + const item = data[start + i]; + parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius); + } + return parsed; + } + getMaxOverflow() { + const data = this._cachedMeta.data; + let max = 0; + for (let i = data.length - 1; i >= 0; --i) { + max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2); + } + return max > 0 && max; + } + getLabelAndValue(index2) { + const meta = this._cachedMeta; + const labels = this.chart.data.labels || []; + const { xScale, yScale } = meta; + const parsed = this.getParsed(index2); + const x = xScale.getLabelForValue(parsed.x); + const y = yScale.getLabelForValue(parsed.y); + const r = parsed._custom; + return { + label: labels[index2] || "", + value: "(" + x + ", " + y + (r ? ", " + r : "") + ")" + }; + } + update(mode) { + const points = this._cachedMeta.data; + this.updateElements(points, 0, points.length, mode); + } + updateElements(points, start, count, mode) { + const reset = mode === "reset"; + const { iScale, vScale } = this._cachedMeta; + const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode); + const iAxis = iScale.axis; + const vAxis = vScale.axis; + for (let i = start; i < start + count; i++) { + const point = points[i]; + const parsed = !reset && this.getParsed(i); + const properties = {}; + const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]); + const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]); + properties.skip = isNaN(iPixel) || isNaN(vPixel); + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? "active" : mode); + if (reset) { + properties.options.radius = 0; + } + } + this.updateElement(point, i, properties, mode); + } + } + resolveDataElementOptions(index2, mode) { + const parsed = this.getParsed(index2); + let values = super.resolveDataElementOptions(index2, mode); + if (values.$shared) { + values = Object.assign({}, values, { + $shared: false + }); + } + const radius = values.radius; + if (mode !== "active") { + values.radius = 0; + } + values.radius += valueOrDefault(parsed && parsed._custom, radius); + return values; + } + }; + __publicField(BubbleController, "id", "bubble"); + __publicField(BubbleController, "defaults", { + datasetElementType: false, + dataElementType: "point", + animations: { + numbers: { + type: "number", + properties: [ + "x", + "y", + "borderWidth", + "radius" + ] + } + } + }); + __publicField(BubbleController, "overrides", { + scales: { + x: { + type: "linear" + }, + y: { + type: "linear" + } + } + }); + DoughnutController = class extends DatasetController { + constructor(chart2, datasetIndex) { + super(chart2, datasetIndex); + this.enableOptionSharing = true; + this.innerRadius = void 0; + this.outerRadius = void 0; + this.offsetX = void 0; + this.offsetY = void 0; + } + linkScales() { + } + parse(start, count) { + const data = this.getDataset().data; + const meta = this._cachedMeta; + if (this._parsing === false) { + meta._parsed = data; + } else { + let getter = (i2) => +data[i2]; + if (isObject(data[start])) { + const { key = "value" } = this._parsing; + getter = (i2) => +resolveObjectKey(data[i2], key); + } + let i, ilen; + for (i = start, ilen = start + count; i < ilen; ++i) { + meta._parsed[i] = getter(i); + } + } + } + _getRotation() { + return toRadians(this.options.rotation - 90); + } + _getCircumference() { + return toRadians(this.options.circumference); + } + _getRotationExtents() { + let min = TAU; + let max = -TAU; + for (let i = 0; i < this.chart.data.datasets.length; ++i) { + if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) { + const controller = this.chart.getDatasetMeta(i).controller; + const rotation = controller._getRotation(); + const circumference = controller._getCircumference(); + min = Math.min(min, rotation); + max = Math.max(max, rotation + circumference); + } + } + return { + rotation: min, + circumference: max - min + }; + } + update(mode) { + const chart2 = this.chart; + const { chartArea } = chart2; + const meta = this._cachedMeta; + const arcs = meta.data; + const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing; + const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0); + const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1); + const chartWeight = this._getRingWeight(this.index); + const { circumference, rotation } = this._getRotationExtents(); + const { ratioX, ratioY, offsetX, offsetY } = getRatioAndOffset(rotation, circumference, cutout); + const maxWidth = (chartArea.width - spacing) / ratioX; + const maxHeight = (chartArea.height - spacing) / ratioY; + const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0); + const outerRadius = toDimension(this.options.radius, maxRadius); + const innerRadius = Math.max(outerRadius * cutout, 0); + const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal(); + this.offsetX = offsetX * outerRadius; + this.offsetY = offsetY * outerRadius; + meta.total = this.calculateTotal(); + this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index); + this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0); + this.updateElements(arcs, 0, arcs.length, mode); + } + _circumference(i, reset) { + const opts = this.options; + const meta = this._cachedMeta; + const circumference = this._getCircumference(); + if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) { + return 0; + } + return this.calculateCircumference(meta._parsed[i] * circumference / TAU); + } + updateElements(arcs, start, count, mode) { + const reset = mode === "reset"; + const chart2 = this.chart; + const chartArea = chart2.chartArea; + const opts = chart2.options; + const animationOpts = opts.animation; + const centerX = (chartArea.left + chartArea.right) / 2; + const centerY = (chartArea.top + chartArea.bottom) / 2; + const animateScale = reset && animationOpts.animateScale; + const innerRadius = animateScale ? 0 : this.innerRadius; + const outerRadius = animateScale ? 0 : this.outerRadius; + const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode); + let startAngle = this._getRotation(); + let i; + for (i = 0; i < start; ++i) { + startAngle += this._circumference(i, reset); + } + for (i = start; i < start + count; ++i) { + const circumference = this._circumference(i, reset); + const arc = arcs[i]; + const properties = { + x: centerX + this.offsetX, + y: centerY + this.offsetY, + startAngle, + endAngle: startAngle + circumference, + circumference, + outerRadius, + innerRadius + }; + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? "active" : mode); + } + startAngle += circumference; + this.updateElement(arc, i, properties, mode); + } + } + calculateTotal() { + const meta = this._cachedMeta; + const metaData = meta.data; + let total = 0; + let i; + for (i = 0; i < metaData.length; i++) { + const value = meta._parsed[i]; + if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) { + total += Math.abs(value); + } + } + return total; + } + calculateCircumference(value) { + const total = this._cachedMeta.total; + if (total > 0 && !isNaN(value)) { + return TAU * (Math.abs(value) / total); + } + return 0; + } + getLabelAndValue(index2) { + const meta = this._cachedMeta; + const chart2 = this.chart; + const labels = chart2.data.labels || []; + const value = formatNumber(meta._parsed[index2], chart2.options.locale); + return { + label: labels[index2] || "", + value + }; + } + getMaxBorderWidth(arcs) { + let max = 0; + const chart2 = this.chart; + let i, ilen, meta, controller, options; + if (!arcs) { + for (i = 0, ilen = chart2.data.datasets.length; i < ilen; ++i) { + if (chart2.isDatasetVisible(i)) { + meta = chart2.getDatasetMeta(i); + arcs = meta.data; + controller = meta.controller; + break; + } + } + } + if (!arcs) { + return 0; + } + for (i = 0, ilen = arcs.length; i < ilen; ++i) { + options = controller.resolveDataElementOptions(i); + if (options.borderAlign !== "inner") { + max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0); + } + } + return max; + } + getMaxOffset(arcs) { + let max = 0; + for (let i = 0, ilen = arcs.length; i < ilen; ++i) { + const options = this.resolveDataElementOptions(i); + max = Math.max(max, options.offset || 0, options.hoverOffset || 0); + } + return max; + } + _getRingWeightOffset(datasetIndex) { + let ringWeightOffset = 0; + for (let i = 0; i < datasetIndex; ++i) { + if (this.chart.isDatasetVisible(i)) { + ringWeightOffset += this._getRingWeight(i); + } + } + return ringWeightOffset; + } + _getRingWeight(datasetIndex) { + return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0); + } + _getVisibleDatasetWeightTotal() { + return this._getRingWeightOffset(this.chart.data.datasets.length) || 1; + } + }; + __publicField(DoughnutController, "id", "doughnut"); + __publicField(DoughnutController, "defaults", { + datasetElementType: false, + dataElementType: "arc", + animation: { + animateRotate: true, + animateScale: false + }, + animations: { + numbers: { + type: "number", + properties: [ + "circumference", + "endAngle", + "innerRadius", + "outerRadius", + "startAngle", + "x", + "y", + "offset", + "borderWidth", + "spacing" + ] + } + }, + cutout: "50%", + rotation: 0, + circumference: 360, + radius: "100%", + spacing: 0, + indexAxis: "r" + }); + __publicField(DoughnutController, "descriptors", { + _scriptable: (name) => name !== "spacing", + _indexable: (name) => name !== "spacing" && !name.startsWith("borderDash") && !name.startsWith("hoverBorderDash") + }); + __publicField(DoughnutController, "overrides", { + aspectRatio: 1, + plugins: { + legend: { + labels: { + generateLabels(chart2) { + const data = chart2.data; + const { labels: { pointStyle, textAlign, color: color2, useBorderRadius, borderRadius } } = chart2.legend.options; + if (data.labels.length && data.datasets.length) { + return data.labels.map((label, i) => { + const meta = chart2.getDatasetMeta(0); + const style = meta.controller.getStyle(i); + return { + text: label, + fillStyle: style.backgroundColor, + fontColor: color2, + hidden: !chart2.getDataVisibility(i), + lineDash: style.borderDash, + lineDashOffset: style.borderDashOffset, + lineJoin: style.borderJoinStyle, + lineWidth: style.borderWidth, + strokeStyle: style.borderColor, + textAlign, + pointStyle, + borderRadius: useBorderRadius && (borderRadius || style.borderRadius), + index: i + }; + }); + } + return []; + } + }, + onClick(e, legendItem, legend) { + legend.chart.toggleDataVisibility(legendItem.index); + legend.chart.update(); + } + } + } + }); + LineController = class extends DatasetController { + initialize() { + this.enableOptionSharing = true; + this.supportsDecimation = true; + super.initialize(); + } + update(mode) { + const meta = this._cachedMeta; + const { dataset: line, data: points = [], _dataset } = meta; + const animationsDisabled = this.chart._animationsDisabled; + let { start, count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled); + this._drawStart = start; + this._drawCount = count; + if (_scaleRangesChanged(meta)) { + start = 0; + count = points.length; + } + line._chart = this.chart; + line._datasetIndex = this.index; + line._decimated = !!_dataset._decimated; + line.points = points; + const options = this.resolveDatasetElementOptions(mode); + if (!this.options.showLine) { + options.borderWidth = 0; + } + options.segment = this.options.segment; + this.updateElement(line, void 0, { + animated: !animationsDisabled, + options + }, mode); + this.updateElements(points, start, count, mode); + } + updateElements(points, start, count, mode) { + const reset = mode === "reset"; + const { iScale, vScale, _stacked, _dataset } = this._cachedMeta; + const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode); + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const { spanGaps, segment } = this.options; + const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY; + const directUpdate = this.chart._animationsDisabled || reset || mode === "none"; + const end = start + count; + const pointsCount = points.length; + let prevParsed = start > 0 && this.getParsed(start - 1); + for (let i = 0; i < pointsCount; ++i) { + const point = points[i]; + const properties = directUpdate ? point : {}; + if (i < start || i >= end) { + properties.skip = true; + continue; + } + const parsed = this.getParsed(i); + const nullData = isNullOrUndef(parsed[vAxis]); + const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i); + const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i); + properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData; + properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength; + if (segment) { + properties.parsed = parsed; + properties.raw = _dataset.data[i]; + } + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? "active" : mode); + } + if (!directUpdate) { + this.updateElement(point, i, properties, mode); + } + prevParsed = parsed; + } + } + getMaxOverflow() { + const meta = this._cachedMeta; + const dataset = meta.dataset; + const border = dataset.options && dataset.options.borderWidth || 0; + const data = meta.data || []; + if (!data.length) { + return border; + } + const firstPoint = data[0].size(this.resolveDataElementOptions(0)); + const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1)); + return Math.max(border, firstPoint, lastPoint) / 2; + } + draw() { + const meta = this._cachedMeta; + meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis); + super.draw(); + } + }; + __publicField(LineController, "id", "line"); + __publicField(LineController, "defaults", { + datasetElementType: "line", + dataElementType: "point", + showLine: true, + spanGaps: false + }); + __publicField(LineController, "overrides", { + scales: { + _index_: { + type: "category" + }, + _value_: { + type: "linear" + } + } + }); + PolarAreaController = class extends DatasetController { + constructor(chart2, datasetIndex) { + super(chart2, datasetIndex); + this.innerRadius = void 0; + this.outerRadius = void 0; + } + getLabelAndValue(index2) { + const meta = this._cachedMeta; + const chart2 = this.chart; + const labels = chart2.data.labels || []; + const value = formatNumber(meta._parsed[index2].r, chart2.options.locale); + return { + label: labels[index2] || "", + value + }; + } + parseObjectData(meta, data, start, count) { + return _parseObjectDataRadialScale.bind(this)(meta, data, start, count); + } + update(mode) { + const arcs = this._cachedMeta.data; + this._updateRadius(); + this.updateElements(arcs, 0, arcs.length, mode); + } + getMinMax() { + const meta = this._cachedMeta; + const range2 = { + min: Number.POSITIVE_INFINITY, + max: Number.NEGATIVE_INFINITY + }; + meta.data.forEach((element, index2) => { + const parsed = this.getParsed(index2).r; + if (!isNaN(parsed) && this.chart.getDataVisibility(index2)) { + if (parsed < range2.min) { + range2.min = parsed; + } + if (parsed > range2.max) { + range2.max = parsed; + } + } + }); + return range2; + } + _updateRadius() { + const chart2 = this.chart; + const chartArea = chart2.chartArea; + const opts = chart2.options; + const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top); + const outerRadius = Math.max(minSize / 2, 0); + const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0); + const radiusLength = (outerRadius - innerRadius) / chart2.getVisibleDatasetCount(); + this.outerRadius = outerRadius - radiusLength * this.index; + this.innerRadius = this.outerRadius - radiusLength; + } + updateElements(arcs, start, count, mode) { + const reset = mode === "reset"; + const chart2 = this.chart; + const opts = chart2.options; + const animationOpts = opts.animation; + const scale = this._cachedMeta.rScale; + const centerX = scale.xCenter; + const centerY = scale.yCenter; + const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI; + let angle = datasetStartAngle; + let i; + const defaultAngle = 360 / this.countVisibleElements(); + for (i = 0; i < start; ++i) { + angle += this._computeAngle(i, mode, defaultAngle); + } + for (i = start; i < start + count; i++) { + const arc = arcs[i]; + let startAngle = angle; + let endAngle = angle + this._computeAngle(i, mode, defaultAngle); + let outerRadius = chart2.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0; + angle = endAngle; + if (reset) { + if (animationOpts.animateScale) { + outerRadius = 0; + } + if (animationOpts.animateRotate) { + startAngle = endAngle = datasetStartAngle; + } + } + const properties = { + x: centerX, + y: centerY, + innerRadius: 0, + outerRadius, + startAngle, + endAngle, + options: this.resolveDataElementOptions(i, arc.active ? "active" : mode) + }; + this.updateElement(arc, i, properties, mode); + } + } + countVisibleElements() { + const meta = this._cachedMeta; + let count = 0; + meta.data.forEach((element, index2) => { + if (!isNaN(this.getParsed(index2).r) && this.chart.getDataVisibility(index2)) { + count++; + } + }); + return count; + } + _computeAngle(index2, mode, defaultAngle) { + return this.chart.getDataVisibility(index2) ? toRadians(this.resolveDataElementOptions(index2, mode).angle || defaultAngle) : 0; + } + }; + __publicField(PolarAreaController, "id", "polarArea"); + __publicField(PolarAreaController, "defaults", { + dataElementType: "arc", + animation: { + animateRotate: true, + animateScale: true + }, + animations: { + numbers: { + type: "number", + properties: [ + "x", + "y", + "startAngle", + "endAngle", + "innerRadius", + "outerRadius" + ] + } + }, + indexAxis: "r", + startAngle: 0 + }); + __publicField(PolarAreaController, "overrides", { + aspectRatio: 1, + plugins: { + legend: { + labels: { + generateLabels(chart2) { + const data = chart2.data; + if (data.labels.length && data.datasets.length) { + const { labels: { pointStyle, color: color2 } } = chart2.legend.options; + return data.labels.map((label, i) => { + const meta = chart2.getDatasetMeta(0); + const style = meta.controller.getStyle(i); + return { + text: label, + fillStyle: style.backgroundColor, + strokeStyle: style.borderColor, + fontColor: color2, + lineWidth: style.borderWidth, + pointStyle, + hidden: !chart2.getDataVisibility(i), + index: i + }; + }); + } + return []; + } + }, + onClick(e, legendItem, legend) { + legend.chart.toggleDataVisibility(legendItem.index); + legend.chart.update(); + } + } + }, + scales: { + r: { + type: "radialLinear", + angleLines: { + display: false + }, + beginAtZero: true, + grid: { + circular: true + }, + pointLabels: { + display: false + }, + startAngle: 0 + } + } + }); + PieController = class extends DoughnutController { + }; + __publicField(PieController, "id", "pie"); + __publicField(PieController, "defaults", { + cutout: 0, + rotation: 0, + circumference: 360, + radius: "100%" + }); + RadarController = class extends DatasetController { + getLabelAndValue(index2) { + const vScale = this._cachedMeta.vScale; + const parsed = this.getParsed(index2); + return { + label: vScale.getLabels()[index2], + value: "" + vScale.getLabelForValue(parsed[vScale.axis]) + }; + } + parseObjectData(meta, data, start, count) { + return _parseObjectDataRadialScale.bind(this)(meta, data, start, count); + } + update(mode) { + const meta = this._cachedMeta; + const line = meta.dataset; + const points = meta.data || []; + const labels = meta.iScale.getLabels(); + line.points = points; + if (mode !== "resize") { + const options = this.resolveDatasetElementOptions(mode); + if (!this.options.showLine) { + options.borderWidth = 0; + } + const properties = { + _loop: true, + _fullLoop: labels.length === points.length, + options + }; + this.updateElement(line, void 0, properties, mode); + } + this.updateElements(points, 0, points.length, mode); + } + updateElements(points, start, count, mode) { + const scale = this._cachedMeta.rScale; + const reset = mode === "reset"; + for (let i = start; i < start + count; i++) { + const point = points[i]; + const options = this.resolveDataElementOptions(i, point.active ? "active" : mode); + const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r); + const x = reset ? scale.xCenter : pointPosition.x; + const y = reset ? scale.yCenter : pointPosition.y; + const properties = { + x, + y, + angle: pointPosition.angle, + skip: isNaN(x) || isNaN(y), + options + }; + this.updateElement(point, i, properties, mode); + } + } + }; + __publicField(RadarController, "id", "radar"); + __publicField(RadarController, "defaults", { + datasetElementType: "line", + dataElementType: "point", + indexAxis: "r", + showLine: true, + elements: { + line: { + fill: "start" + } + } + }); + __publicField(RadarController, "overrides", { + aspectRatio: 1, + scales: { + r: { + type: "radialLinear" + } + } + }); + ScatterController = class extends DatasetController { + getLabelAndValue(index2) { + const meta = this._cachedMeta; + const labels = this.chart.data.labels || []; + const { xScale, yScale } = meta; + const parsed = this.getParsed(index2); + const x = xScale.getLabelForValue(parsed.x); + const y = yScale.getLabelForValue(parsed.y); + return { + label: labels[index2] || "", + value: "(" + x + ", " + y + ")" + }; + } + update(mode) { + const meta = this._cachedMeta; + const { data: points = [] } = meta; + const animationsDisabled = this.chart._animationsDisabled; + let { start, count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled); + this._drawStart = start; + this._drawCount = count; + if (_scaleRangesChanged(meta)) { + start = 0; + count = points.length; + } + if (this.options.showLine) { + if (!this.datasetElementType) { + this.addElements(); + } + const { dataset: line, _dataset } = meta; + line._chart = this.chart; + line._datasetIndex = this.index; + line._decimated = !!_dataset._decimated; + line.points = points; + const options = this.resolveDatasetElementOptions(mode); + options.segment = this.options.segment; + this.updateElement(line, void 0, { + animated: !animationsDisabled, + options + }, mode); + } else if (this.datasetElementType) { + delete meta.dataset; + this.datasetElementType = false; + } + this.updateElements(points, start, count, mode); + } + addElements() { + const { showLine } = this.options; + if (!this.datasetElementType && showLine) { + this.datasetElementType = this.chart.registry.getElement("line"); + } + super.addElements(); + } + updateElements(points, start, count, mode) { + const reset = mode === "reset"; + const { iScale, vScale, _stacked, _dataset } = this._cachedMeta; + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const { spanGaps, segment } = this.options; + const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY; + const directUpdate = this.chart._animationsDisabled || reset || mode === "none"; + let prevParsed = start > 0 && this.getParsed(start - 1); + for (let i = start; i < start + count; ++i) { + const point = points[i]; + const parsed = this.getParsed(i); + const properties = directUpdate ? point : {}; + const nullData = isNullOrUndef(parsed[vAxis]); + const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i); + const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i); + properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData; + properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength; + if (segment) { + properties.parsed = parsed; + properties.raw = _dataset.data[i]; + } + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? "active" : mode); + } + if (!directUpdate) { + this.updateElement(point, i, properties, mode); + } + prevParsed = parsed; + } + this.updateSharedOptions(sharedOptions, mode, firstOpts); + } + getMaxOverflow() { + const meta = this._cachedMeta; + const data = meta.data || []; + if (!this.options.showLine) { + let max = 0; + for (let i = data.length - 1; i >= 0; --i) { + max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2); + } + return max > 0 && max; + } + const dataset = meta.dataset; + const border = dataset.options && dataset.options.borderWidth || 0; + if (!data.length) { + return border; + } + const firstPoint = data[0].size(this.resolveDataElementOptions(0)); + const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1)); + return Math.max(border, firstPoint, lastPoint) / 2; + } + }; + __publicField(ScatterController, "id", "scatter"); + __publicField(ScatterController, "defaults", { + datasetElementType: false, + dataElementType: "point", + showLine: false, + fill: false + }); + __publicField(ScatterController, "overrides", { + interaction: { + mode: "point" + }, + scales: { + x: { + type: "linear" + }, + y: { + type: "linear" + } + } + }); + controllers = /* @__PURE__ */ Object.freeze({ + __proto__: null, + BarController, + BubbleController, + DoughnutController, + LineController, + PieController, + PolarAreaController, + RadarController, + ScatterController + }); + DateAdapterBase = class _DateAdapterBase { + constructor(options) { + __publicField(this, "options"); + this.options = options || {}; + } + /** + * Override default date adapter methods. + * Accepts type parameter to define options type. + * @example + * Chart._adapters._date.override<{myAdapterOption: string}>({ + * init() { + * console.log(this.options.myAdapterOption); + * } + * }) + */ + static override(members) { + Object.assign(_DateAdapterBase.prototype, members); + } + // eslint-disable-next-line @typescript-eslint/no-empty-function + init() { + } + formats() { + return abstract(); + } + parse() { + return abstract(); + } + format() { + return abstract(); + } + add() { + return abstract(); + } + diff() { + return abstract(); + } + startOf() { + return abstract(); + } + endOf() { + return abstract(); + } + }; + adapters = { + _date: DateAdapterBase + }; + Interaction = { + evaluateInteractionItems, + modes: { + index(chart2, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart2); + const axis = options.axis || "x"; + const includeInvisible = options.includeInvisible || false; + const items = options.intersect ? getIntersectItems(chart2, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart2, position, axis, false, useFinalPosition, includeInvisible); + const elements3 = []; + if (!items.length) { + return []; + } + chart2.getSortedVisibleDatasetMetas().forEach((meta) => { + const index2 = items[0].index; + const element = meta.data[index2]; + if (element && !element.skip) { + elements3.push({ + element, + datasetIndex: meta.index, + index: index2 + }); + } + }); + return elements3; + }, + dataset(chart2, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart2); + const axis = options.axis || "xy"; + const includeInvisible = options.includeInvisible || false; + let items = options.intersect ? getIntersectItems(chart2, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart2, position, axis, false, useFinalPosition, includeInvisible); + if (items.length > 0) { + const datasetIndex = items[0].datasetIndex; + const data = chart2.getDatasetMeta(datasetIndex).data; + items = []; + for (let i = 0; i < data.length; ++i) { + items.push({ + element: data[i], + datasetIndex, + index: i + }); + } + } + return items; + }, + point(chart2, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart2); + const axis = options.axis || "xy"; + const includeInvisible = options.includeInvisible || false; + return getIntersectItems(chart2, position, axis, useFinalPosition, includeInvisible); + }, + nearest(chart2, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart2); + const axis = options.axis || "xy"; + const includeInvisible = options.includeInvisible || false; + return getNearestItems(chart2, position, axis, options.intersect, useFinalPosition, includeInvisible); + }, + x(chart2, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart2); + return getAxisItems(chart2, position, "x", options.intersect, useFinalPosition); + }, + y(chart2, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart2); + return getAxisItems(chart2, position, "y", options.intersect, useFinalPosition); + } + } + }; + STATIC_POSITIONS = [ + "left", + "top", + "right", + "bottom" + ]; + layouts = { + addBox(chart2, item) { + if (!chart2.boxes) { + chart2.boxes = []; + } + item.fullSize = item.fullSize || false; + item.position = item.position || "top"; + item.weight = item.weight || 0; + item._layers = item._layers || function() { + return [ + { + z: 0, + draw(chartArea) { + item.draw(chartArea); + } + } + ]; + }; + chart2.boxes.push(item); + }, + removeBox(chart2, layoutItem) { + const index2 = chart2.boxes ? chart2.boxes.indexOf(layoutItem) : -1; + if (index2 !== -1) { + chart2.boxes.splice(index2, 1); + } + }, + configure(chart2, item, options) { + item.fullSize = options.fullSize; + item.position = options.position; + item.weight = options.weight; + }, + update(chart2, width, height, minPadding) { + if (!chart2) { + return; + } + const padding = toPadding(chart2.options.layout.padding); + const availableWidth = Math.max(width - padding.width, 0); + const availableHeight = Math.max(height - padding.height, 0); + const boxes = buildLayoutBoxes(chart2.boxes); + const verticalBoxes = boxes.vertical; + const horizontalBoxes = boxes.horizontal; + each(chart2.boxes, (box) => { + if (typeof box.beforeLayout === "function") { + box.beforeLayout(); + } + }); + const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1; + const params = Object.freeze({ + outerWidth: width, + outerHeight: height, + padding, + availableWidth, + availableHeight, + vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount, + hBoxMaxHeight: availableHeight / 2 + }); + const maxPadding = Object.assign({}, padding); + updateMaxPadding(maxPadding, toPadding(minPadding)); + const chartArea = Object.assign({ + maxPadding, + w: availableWidth, + h: availableHeight, + x: padding.left, + y: padding.top + }, padding); + const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params); + fitBoxes(boxes.fullSize, chartArea, params, stacks); + fitBoxes(verticalBoxes, chartArea, params, stacks); + if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) { + fitBoxes(verticalBoxes, chartArea, params, stacks); + } + handleMaxPadding(chartArea); + placeBoxes(boxes.leftAndTop, chartArea, params, stacks); + chartArea.x += chartArea.w; + chartArea.y += chartArea.h; + placeBoxes(boxes.rightAndBottom, chartArea, params, stacks); + chart2.chartArea = { + left: chartArea.left, + top: chartArea.top, + right: chartArea.left + chartArea.w, + bottom: chartArea.top + chartArea.h, + height: chartArea.h, + width: chartArea.w + }; + each(boxes.chartArea, (layout) => { + const box = layout.box; + Object.assign(box, chart2.chartArea); + box.update(chartArea.w, chartArea.h, { + left: 0, + top: 0, + right: 0, + bottom: 0 + }); + }); + } + }; + BasePlatform = class { + acquireContext(canvas, aspectRatio) { + } + releaseContext(context) { + return false; + } + addEventListener(chart2, type, listener) { + } + removeEventListener(chart2, type, listener) { + } + getDevicePixelRatio() { + return 1; + } + getMaximumSize(element, width, height, aspectRatio) { + width = Math.max(0, width || element.width); + height = height || element.height; + return { + width, + height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height) + }; + } + isAttached(canvas) { + return true; + } + updateConfig(config) { + } + }; + BasicPlatform = class extends BasePlatform { + acquireContext(item) { + return item && item.getContext && item.getContext("2d") || null; + } + updateConfig(config) { + config.options.animation = false; + } + }; + EXPANDO_KEY = "$chartjs"; + EVENT_TYPES = { + touchstart: "mousedown", + touchmove: "mousemove", + touchend: "mouseup", + pointerenter: "mouseenter", + pointerdown: "mousedown", + pointermove: "mousemove", + pointerup: "mouseup", + pointerleave: "mouseout", + pointerout: "mouseout" + }; + isNullOrEmpty = (value) => value === null || value === ""; + eventListenerOptions = supportsEventListenerOptions ? { + passive: true + } : false; + drpListeningCharts = /* @__PURE__ */ new Map(); + oldDevicePixelRatio = 0; + DomPlatform = class extends BasePlatform { + acquireContext(canvas, aspectRatio) { + const context = canvas && canvas.getContext && canvas.getContext("2d"); + if (context && context.canvas === canvas) { + initCanvas(canvas, aspectRatio); + return context; + } + return null; + } + releaseContext(context) { + const canvas = context.canvas; + if (!canvas[EXPANDO_KEY]) { + return false; + } + const initial = canvas[EXPANDO_KEY].initial; + [ + "height", + "width" + ].forEach((prop) => { + const value = initial[prop]; + if (isNullOrUndef(value)) { + canvas.removeAttribute(prop); + } else { + canvas.setAttribute(prop, value); + } + }); + const style = initial.style || {}; + Object.keys(style).forEach((key) => { + canvas.style[key] = style[key]; + }); + canvas.width = canvas.width; + delete canvas[EXPANDO_KEY]; + return true; + } + addEventListener(chart2, type, listener) { + this.removeEventListener(chart2, type); + const proxies = chart2.$proxies || (chart2.$proxies = {}); + const handlers = { + attach: createAttachObserver, + detach: createDetachObserver, + resize: createResizeObserver + }; + const handler = handlers[type] || createProxyAndListen; + proxies[type] = handler(chart2, type, listener); + } + removeEventListener(chart2, type) { + const proxies = chart2.$proxies || (chart2.$proxies = {}); + const proxy = proxies[type]; + if (!proxy) { + return; + } + const handlers = { + attach: releaseObserver, + detach: releaseObserver, + resize: releaseObserver + }; + const handler = handlers[type] || removeListener; + handler(chart2, type, proxy); + proxies[type] = void 0; + } + getDevicePixelRatio() { + return window.devicePixelRatio; + } + getMaximumSize(canvas, width, height, aspectRatio) { + return getMaximumSize(canvas, width, height, aspectRatio); + } + isAttached(canvas) { + const container = canvas && _getParentNode(canvas); + return !!(container && container.isConnected); + } + }; + Element2 = class { + constructor() { + __publicField(this, "x"); + __publicField(this, "y"); + __publicField(this, "active", false); + __publicField(this, "options"); + __publicField(this, "$animations"); + } + tooltipPosition(useFinalPosition) { + const { x, y } = this.getProps([ + "x", + "y" + ], useFinalPosition); + return { + x, + y + }; + } + hasValue() { + return isNumber(this.x) && isNumber(this.y); + } + getProps(props, final) { + const anims = this.$animations; + if (!final || !anims) { + return this; + } + const ret = {}; + props.forEach((prop) => { + ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop]; + }); + return ret; + } + }; + __publicField(Element2, "defaults", {}); + __publicField(Element2, "defaultRoutes"); + reverseAlign = (align) => align === "left" ? "right" : align === "right" ? "left" : align; + offsetFromEdge = (scale, edge, offset) => edge === "top" || edge === "left" ? scale[edge] + offset : scale[edge] - offset; + getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength); + Scale = class _Scale extends Element2 { + constructor(cfg) { + super(); + this.id = cfg.id; + this.type = cfg.type; + this.options = void 0; + this.ctx = cfg.ctx; + this.chart = cfg.chart; + this.top = void 0; + this.bottom = void 0; + this.left = void 0; + this.right = void 0; + this.width = void 0; + this.height = void 0; + this._margins = { + left: 0, + right: 0, + top: 0, + bottom: 0 + }; + this.maxWidth = void 0; + this.maxHeight = void 0; + this.paddingTop = void 0; + this.paddingBottom = void 0; + this.paddingLeft = void 0; + this.paddingRight = void 0; + this.axis = void 0; + this.labelRotation = void 0; + this.min = void 0; + this.max = void 0; + this._range = void 0; + this.ticks = []; + this._gridLineItems = null; + this._labelItems = null; + this._labelSizes = null; + this._length = 0; + this._maxLength = 0; + this._longestTextCache = {}; + this._startPixel = void 0; + this._endPixel = void 0; + this._reversePixels = false; + this._userMax = void 0; + this._userMin = void 0; + this._suggestedMax = void 0; + this._suggestedMin = void 0; + this._ticksLength = 0; + this._borderValue = 0; + this._cache = {}; + this._dataLimitsCached = false; + this.$context = void 0; + } + init(options) { + this.options = options.setContext(this.getContext()); + this.axis = options.axis; + this._userMin = this.parse(options.min); + this._userMax = this.parse(options.max); + this._suggestedMin = this.parse(options.suggestedMin); + this._suggestedMax = this.parse(options.suggestedMax); + } + parse(raw, index2) { + return raw; + } + getUserBounds() { + let { _userMin, _userMax, _suggestedMin, _suggestedMax } = this; + _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY); + _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY); + _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY); + _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY); + return { + min: finiteOrDefault(_userMin, _suggestedMin), + max: finiteOrDefault(_userMax, _suggestedMax), + minDefined: isNumberFinite(_userMin), + maxDefined: isNumberFinite(_userMax) + }; + } + getMinMax(canStack) { + let { min, max, minDefined, maxDefined } = this.getUserBounds(); + let range2; + if (minDefined && maxDefined) { + return { + min, + max + }; + } + const metas = this.getMatchingVisibleMetas(); + for (let i = 0, ilen = metas.length; i < ilen; ++i) { + range2 = metas[i].controller.getMinMax(this, canStack); + if (!minDefined) { + min = Math.min(min, range2.min); + } + if (!maxDefined) { + max = Math.max(max, range2.max); + } + } + min = maxDefined && min > max ? max : min; + max = minDefined && min > max ? min : max; + return { + min: finiteOrDefault(min, finiteOrDefault(max, min)), + max: finiteOrDefault(max, finiteOrDefault(min, max)) + }; + } + getPadding() { + return { + left: this.paddingLeft || 0, + top: this.paddingTop || 0, + right: this.paddingRight || 0, + bottom: this.paddingBottom || 0 + }; + } + getTicks() { + return this.ticks; + } + getLabels() { + const data = this.chart.data; + return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || []; + } + getLabelItems(chartArea = this.chart.chartArea) { + const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea)); + return items; + } + beforeLayout() { + this._cache = {}; + this._dataLimitsCached = false; + } + beforeUpdate() { + callback(this.options.beforeUpdate, [ + this + ]); + } + update(maxWidth, maxHeight, margins) { + const { beginAtZero, grace, ticks: tickOpts } = this.options; + const sampleSize = tickOpts.sampleSize; + this.beforeUpdate(); + this.maxWidth = maxWidth; + this.maxHeight = maxHeight; + this._margins = margins = Object.assign({ + left: 0, + right: 0, + top: 0, + bottom: 0 + }, margins); + this.ticks = null; + this._labelSizes = null; + this._gridLineItems = null; + this._labelItems = null; + this.beforeSetDimensions(); + this.setDimensions(); + this.afterSetDimensions(); + this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom; + if (!this._dataLimitsCached) { + this.beforeDataLimits(); + this.determineDataLimits(); + this.afterDataLimits(); + this._range = _addGrace(this, grace, beginAtZero); + this._dataLimitsCached = true; + } + this.beforeBuildTicks(); + this.ticks = this.buildTicks() || []; + this.afterBuildTicks(); + const samplingEnabled = sampleSize < this.ticks.length; + this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks); + this.configure(); + this.beforeCalculateLabelRotation(); + this.calculateLabelRotation(); + this.afterCalculateLabelRotation(); + if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === "auto")) { + this.ticks = autoSkip(this, this.ticks); + this._labelSizes = null; + this.afterAutoSkip(); + } + if (samplingEnabled) { + this._convertTicksToLabels(this.ticks); + } + this.beforeFit(); + this.fit(); + this.afterFit(); + this.afterUpdate(); + } + configure() { + let reversePixels = this.options.reverse; + let startPixel, endPixel; + if (this.isHorizontal()) { + startPixel = this.left; + endPixel = this.right; + } else { + startPixel = this.top; + endPixel = this.bottom; + reversePixels = !reversePixels; + } + this._startPixel = startPixel; + this._endPixel = endPixel; + this._reversePixels = reversePixels; + this._length = endPixel - startPixel; + this._alignToPixels = this.options.alignToPixels; + } + afterUpdate() { + callback(this.options.afterUpdate, [ + this + ]); + } + beforeSetDimensions() { + callback(this.options.beforeSetDimensions, [ + this + ]); + } + setDimensions() { + if (this.isHorizontal()) { + this.width = this.maxWidth; + this.left = 0; + this.right = this.width; + } else { + this.height = this.maxHeight; + this.top = 0; + this.bottom = this.height; + } + this.paddingLeft = 0; + this.paddingTop = 0; + this.paddingRight = 0; + this.paddingBottom = 0; + } + afterSetDimensions() { + callback(this.options.afterSetDimensions, [ + this + ]); + } + _callHooks(name) { + this.chart.notifyPlugins(name, this.getContext()); + callback(this.options[name], [ + this + ]); + } + beforeDataLimits() { + this._callHooks("beforeDataLimits"); + } + determineDataLimits() { + } + afterDataLimits() { + this._callHooks("afterDataLimits"); + } + beforeBuildTicks() { + this._callHooks("beforeBuildTicks"); + } + buildTicks() { + return []; + } + afterBuildTicks() { + this._callHooks("afterBuildTicks"); + } + beforeTickToLabelConversion() { + callback(this.options.beforeTickToLabelConversion, [ + this + ]); + } + generateTickLabels(ticks) { + const tickOpts = this.options.ticks; + let i, ilen, tick; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + tick = ticks[i]; + tick.label = callback(tickOpts.callback, [ + tick.value, + i, + ticks + ], this); + } + } + afterTickToLabelConversion() { + callback(this.options.afterTickToLabelConversion, [ + this + ]); + } + beforeCalculateLabelRotation() { + callback(this.options.beforeCalculateLabelRotation, [ + this + ]); + } + calculateLabelRotation() { + const options = this.options; + const tickOpts = options.ticks; + const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit); + const minRotation = tickOpts.minRotation || 0; + const maxRotation = tickOpts.maxRotation; + let labelRotation = minRotation; + let tickWidth, maxHeight, maxLabelDiagonal; + if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) { + this.labelRotation = minRotation; + return; + } + const labelSizes = this._getLabelSizes(); + const maxLabelWidth = labelSizes.widest.width; + const maxLabelHeight = labelSizes.highest.height; + const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth); + tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1); + if (maxLabelWidth + 6 > tickWidth) { + tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1)); + maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font); + maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight); + labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1)))); + labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation)); + } + this.labelRotation = labelRotation; + } + afterCalculateLabelRotation() { + callback(this.options.afterCalculateLabelRotation, [ + this + ]); + } + afterAutoSkip() { + } + beforeFit() { + callback(this.options.beforeFit, [ + this + ]); + } + fit() { + const minSize = { + width: 0, + height: 0 + }; + const { chart: chart2, options: { ticks: tickOpts, title: titleOpts, grid: gridOpts } } = this; + const display2 = this._isVisible(); + const isHorizontal = this.isHorizontal(); + if (display2) { + const titleHeight = getTitleHeight(titleOpts, chart2.options.font); + if (isHorizontal) { + minSize.width = this.maxWidth; + minSize.height = getTickMarkLength(gridOpts) + titleHeight; + } else { + minSize.height = this.maxHeight; + minSize.width = getTickMarkLength(gridOpts) + titleHeight; + } + if (tickOpts.display && this.ticks.length) { + const { first, last, widest, highest } = this._getLabelSizes(); + const tickPadding = tickOpts.padding * 2; + const angleRadians = toRadians(this.labelRotation); + const cos = Math.cos(angleRadians); + const sin = Math.sin(angleRadians); + if (isHorizontal) { + const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height; + minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding); + } else { + const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height; + minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding); + } + this._calculatePadding(first, last, sin, cos); + } + } + this._handleMargins(); + if (isHorizontal) { + this.width = this._length = chart2.width - this._margins.left - this._margins.right; + this.height = minSize.height; + } else { + this.width = minSize.width; + this.height = this._length = chart2.height - this._margins.top - this._margins.bottom; + } + } + _calculatePadding(first, last, sin, cos) { + const { ticks: { align, padding }, position } = this.options; + const isRotated = this.labelRotation !== 0; + const labelsBelowTicks = position !== "top" && this.axis === "x"; + if (this.isHorizontal()) { + const offsetLeft = this.getPixelForTick(0) - this.left; + const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1); + let paddingLeft = 0; + let paddingRight = 0; + if (isRotated) { + if (labelsBelowTicks) { + paddingLeft = cos * first.width; + paddingRight = sin * last.height; + } else { + paddingLeft = sin * first.height; + paddingRight = cos * last.width; + } + } else if (align === "start") { + paddingRight = last.width; + } else if (align === "end") { + paddingLeft = first.width; + } else if (align !== "inner") { + paddingLeft = first.width / 2; + paddingRight = last.width / 2; + } + this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0); + this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0); + } else { + let paddingTop = last.height / 2; + let paddingBottom = first.height / 2; + if (align === "start") { + paddingTop = 0; + paddingBottom = first.height; + } else if (align === "end") { + paddingTop = last.height; + paddingBottom = 0; + } + this.paddingTop = paddingTop + padding; + this.paddingBottom = paddingBottom + padding; + } + } + _handleMargins() { + if (this._margins) { + this._margins.left = Math.max(this.paddingLeft, this._margins.left); + this._margins.top = Math.max(this.paddingTop, this._margins.top); + this._margins.right = Math.max(this.paddingRight, this._margins.right); + this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom); + } + } + afterFit() { + callback(this.options.afterFit, [ + this + ]); + } + isHorizontal() { + const { axis, position } = this.options; + return position === "top" || position === "bottom" || axis === "x"; + } + isFullSize() { + return this.options.fullSize; + } + _convertTicksToLabels(ticks) { + this.beforeTickToLabelConversion(); + this.generateTickLabels(ticks); + let i, ilen; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + if (isNullOrUndef(ticks[i].label)) { + ticks.splice(i, 1); + ilen--; + i--; + } + } + this.afterTickToLabelConversion(); + } + _getLabelSizes() { + let labelSizes = this._labelSizes; + if (!labelSizes) { + const sampleSize = this.options.ticks.sampleSize; + let ticks = this.ticks; + if (sampleSize < ticks.length) { + ticks = sample(ticks, sampleSize); + } + this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit); + } + return labelSizes; + } + _computeLabelSizes(ticks, length, maxTicksLimit) { + const { ctx, _longestTextCache: caches } = this; + const widths = []; + const heights = []; + const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit)); + let widestLabelSize = 0; + let highestLabelSize = 0; + let i, j, jlen, label, tickFont, fontString, cache2, lineHeight, width, height, nestedLabel; + for (i = 0; i < length; i += increment) { + label = ticks[i].label; + tickFont = this._resolveTickFontOptions(i); + ctx.font = fontString = tickFont.string; + cache2 = caches[fontString] = caches[fontString] || { + data: {}, + gc: [] + }; + lineHeight = tickFont.lineHeight; + width = height = 0; + if (!isNullOrUndef(label) && !isArray(label)) { + width = _measureText(ctx, cache2.data, cache2.gc, width, label); + height = lineHeight; + } else if (isArray(label)) { + for (j = 0, jlen = label.length; j < jlen; ++j) { + nestedLabel = label[j]; + if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) { + width = _measureText(ctx, cache2.data, cache2.gc, width, nestedLabel); + height += lineHeight; + } + } + } + widths.push(width); + heights.push(height); + widestLabelSize = Math.max(width, widestLabelSize); + highestLabelSize = Math.max(height, highestLabelSize); + } + garbageCollect(caches, length); + const widest = widths.indexOf(widestLabelSize); + const highest = heights.indexOf(highestLabelSize); + const valueAt = (idx) => ({ + width: widths[idx] || 0, + height: heights[idx] || 0 + }); + return { + first: valueAt(0), + last: valueAt(length - 1), + widest: valueAt(widest), + highest: valueAt(highest), + widths, + heights + }; + } + getLabelForValue(value) { + return value; + } + getPixelForValue(value, index2) { + return NaN; + } + getValueForPixel(pixel) { + } + getPixelForTick(index2) { + const ticks = this.ticks; + if (index2 < 0 || index2 > ticks.length - 1) { + return null; + } + return this.getPixelForValue(ticks[index2].value); + } + getPixelForDecimal(decimal) { + if (this._reversePixels) { + decimal = 1 - decimal; + } + const pixel = this._startPixel + decimal * this._length; + return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel); + } + getDecimalForPixel(pixel) { + const decimal = (pixel - this._startPixel) / this._length; + return this._reversePixels ? 1 - decimal : decimal; + } + getBasePixel() { + return this.getPixelForValue(this.getBaseValue()); + } + getBaseValue() { + const { min, max } = this; + return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0; + } + getContext(index2) { + const ticks = this.ticks || []; + if (index2 >= 0 && index2 < ticks.length) { + const tick = ticks[index2]; + return tick.$context || (tick.$context = createTickContext(this.getContext(), index2, tick)); + } + return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this)); + } + _tickSize() { + const optionTicks = this.options.ticks; + const rot = toRadians(this.labelRotation); + const cos = Math.abs(Math.cos(rot)); + const sin = Math.abs(Math.sin(rot)); + const labelSizes = this._getLabelSizes(); + const padding = optionTicks.autoSkipPadding || 0; + const w = labelSizes ? labelSizes.widest.width + padding : 0; + const h = labelSizes ? labelSizes.highest.height + padding : 0; + return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin; + } + _isVisible() { + const display2 = this.options.display; + if (display2 !== "auto") { + return !!display2; + } + return this.getMatchingVisibleMetas().length > 0; + } + _computeGridLineItems(chartArea) { + const axis = this.axis; + const chart2 = this.chart; + const options = this.options; + const { grid, position, border } = options; + const offset = grid.offset; + const isHorizontal = this.isHorizontal(); + const ticks = this.ticks; + const ticksLength = ticks.length + (offset ? 1 : 0); + const tl = getTickMarkLength(grid); + const items = []; + const borderOpts = border.setContext(this.getContext()); + const axisWidth = borderOpts.display ? borderOpts.width : 0; + const axisHalfWidth = axisWidth / 2; + const alignBorderValue = function(pixel) { + return _alignPixel(chart2, pixel, axisWidth); + }; + let borderValue, i, lineValue, alignedLineValue; + let tx1, ty1, tx2, ty2, x1, y1, x2, y2; + if (position === "top") { + borderValue = alignBorderValue(this.bottom); + ty1 = this.bottom - tl; + ty2 = borderValue - axisHalfWidth; + y1 = alignBorderValue(chartArea.top) + axisHalfWidth; + y2 = chartArea.bottom; + } else if (position === "bottom") { + borderValue = alignBorderValue(this.top); + y1 = chartArea.top; + y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth; + ty1 = borderValue + axisHalfWidth; + ty2 = this.top + tl; + } else if (position === "left") { + borderValue = alignBorderValue(this.right); + tx1 = this.right - tl; + tx2 = borderValue - axisHalfWidth; + x1 = alignBorderValue(chartArea.left) + axisHalfWidth; + x2 = chartArea.right; + } else if (position === "right") { + borderValue = alignBorderValue(this.left); + x1 = chartArea.left; + x2 = alignBorderValue(chartArea.right) - axisHalfWidth; + tx1 = borderValue + axisHalfWidth; + tx2 = this.left + tl; + } else if (axis === "x") { + if (position === "center") { + borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5); + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); + } + y1 = chartArea.top; + y2 = chartArea.bottom; + ty1 = borderValue + axisHalfWidth; + ty2 = ty1 + tl; + } else if (axis === "y") { + if (position === "center") { + borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2); + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); + } + tx1 = borderValue - axisHalfWidth; + tx2 = tx1 - tl; + x1 = chartArea.left; + x2 = chartArea.right; + } + const limit2 = valueOrDefault(options.ticks.maxTicksLimit, ticksLength); + const step = Math.max(1, Math.ceil(ticksLength / limit2)); + for (i = 0; i < ticksLength; i += step) { + const context = this.getContext(i); + const optsAtIndex = grid.setContext(context); + const optsAtIndexBorder = border.setContext(context); + const lineWidth = optsAtIndex.lineWidth; + const lineColor = optsAtIndex.color; + const borderDash = optsAtIndexBorder.dash || []; + const borderDashOffset = optsAtIndexBorder.dashOffset; + const tickWidth = optsAtIndex.tickWidth; + const tickColor = optsAtIndex.tickColor; + const tickBorderDash = optsAtIndex.tickBorderDash || []; + const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset; + lineValue = getPixelForGridLine(this, i, offset); + if (lineValue === void 0) { + continue; + } + alignedLineValue = _alignPixel(chart2, lineValue, lineWidth); + if (isHorizontal) { + tx1 = tx2 = x1 = x2 = alignedLineValue; + } else { + ty1 = ty2 = y1 = y2 = alignedLineValue; + } + items.push({ + tx1, + ty1, + tx2, + ty2, + x1, + y1, + x2, + y2, + width: lineWidth, + color: lineColor, + borderDash, + borderDashOffset, + tickWidth, + tickColor, + tickBorderDash, + tickBorderDashOffset + }); + } + this._ticksLength = ticksLength; + this._borderValue = borderValue; + return items; + } + _computeLabelItems(chartArea) { + const axis = this.axis; + const options = this.options; + const { position, ticks: optionTicks } = options; + const isHorizontal = this.isHorizontal(); + const ticks = this.ticks; + const { align, crossAlign, padding, mirror } = optionTicks; + const tl = getTickMarkLength(options.grid); + const tickAndPadding = tl + padding; + const hTickAndPadding = mirror ? -padding : tickAndPadding; + const rotation = -toRadians(this.labelRotation); + const items = []; + let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset; + let textBaseline = "middle"; + if (position === "top") { + y = this.bottom - hTickAndPadding; + textAlign = this._getXAxisLabelAlignment(); + } else if (position === "bottom") { + y = this.top + hTickAndPadding; + textAlign = this._getXAxisLabelAlignment(); + } else if (position === "left") { + const ret = this._getYAxisLabelAlignment(tl); + textAlign = ret.textAlign; + x = ret.x; + } else if (position === "right") { + const ret = this._getYAxisLabelAlignment(tl); + textAlign = ret.textAlign; + x = ret.x; + } else if (axis === "x") { + if (position === "center") { + y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding; + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding; + } + textAlign = this._getXAxisLabelAlignment(); + } else if (axis === "y") { + if (position === "center") { + x = (chartArea.left + chartArea.right) / 2 - tickAndPadding; + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + x = this.chart.scales[positionAxisID].getPixelForValue(value); + } + textAlign = this._getYAxisLabelAlignment(tl).textAlign; + } + if (axis === "y") { + if (align === "start") { + textBaseline = "top"; + } else if (align === "end") { + textBaseline = "bottom"; + } + } + const labelSizes = this._getLabelSizes(); + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + tick = ticks[i]; + label = tick.label; + const optsAtIndex = optionTicks.setContext(this.getContext(i)); + pixel = this.getPixelForTick(i) + optionTicks.labelOffset; + font = this._resolveTickFontOptions(i); + lineHeight = font.lineHeight; + lineCount = isArray(label) ? label.length : 1; + const halfCount = lineCount / 2; + const color2 = optsAtIndex.color; + const strokeColor = optsAtIndex.textStrokeColor; + const strokeWidth = optsAtIndex.textStrokeWidth; + let tickTextAlign = textAlign; + if (isHorizontal) { + x = pixel; + if (textAlign === "inner") { + if (i === ilen - 1) { + tickTextAlign = !this.options.reverse ? "right" : "left"; + } else if (i === 0) { + tickTextAlign = !this.options.reverse ? "left" : "right"; + } else { + tickTextAlign = "center"; + } + } + if (position === "top") { + if (crossAlign === "near" || rotation !== 0) { + textOffset = -lineCount * lineHeight + lineHeight / 2; + } else if (crossAlign === "center") { + textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight; + } else { + textOffset = -labelSizes.highest.height + lineHeight / 2; + } + } else { + if (crossAlign === "near" || rotation !== 0) { + textOffset = lineHeight / 2; + } else if (crossAlign === "center") { + textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight; + } else { + textOffset = labelSizes.highest.height - lineCount * lineHeight; + } + } + if (mirror) { + textOffset *= -1; + } + if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) { + x += lineHeight / 2 * Math.sin(rotation); + } + } else { + y = pixel; + textOffset = (1 - lineCount) * lineHeight / 2; + } + let backdrop; + if (optsAtIndex.showLabelBackdrop) { + const labelPadding = toPadding(optsAtIndex.backdropPadding); + const height = labelSizes.heights[i]; + const width = labelSizes.widths[i]; + let top = textOffset - labelPadding.top; + let left = 0 - labelPadding.left; + switch (textBaseline) { + case "middle": + top -= height / 2; + break; + case "bottom": + top -= height; + break; + } + switch (textAlign) { + case "center": + left -= width / 2; + break; + case "right": + left -= width; + break; + case "inner": + if (i === ilen - 1) { + left -= width; + } else if (i > 0) { + left -= width / 2; + } + break; + } + backdrop = { + left, + top, + width: width + labelPadding.width, + height: height + labelPadding.height, + color: optsAtIndex.backdropColor + }; + } + items.push({ + label, + font, + textOffset, + options: { + rotation, + color: color2, + strokeColor, + strokeWidth, + textAlign: tickTextAlign, + textBaseline, + translation: [ + x, + y + ], + backdrop + } + }); + } + return items; + } + _getXAxisLabelAlignment() { + const { position, ticks } = this.options; + const rotation = -toRadians(this.labelRotation); + if (rotation) { + return position === "top" ? "left" : "right"; + } + let align = "center"; + if (ticks.align === "start") { + align = "left"; + } else if (ticks.align === "end") { + align = "right"; + } else if (ticks.align === "inner") { + align = "inner"; + } + return align; + } + _getYAxisLabelAlignment(tl) { + const { position, ticks: { crossAlign, mirror, padding } } = this.options; + const labelSizes = this._getLabelSizes(); + const tickAndPadding = tl + padding; + const widest = labelSizes.widest.width; + let textAlign; + let x; + if (position === "left") { + if (mirror) { + x = this.right + padding; + if (crossAlign === "near") { + textAlign = "left"; + } else if (crossAlign === "center") { + textAlign = "center"; + x += widest / 2; + } else { + textAlign = "right"; + x += widest; + } + } else { + x = this.right - tickAndPadding; + if (crossAlign === "near") { + textAlign = "right"; + } else if (crossAlign === "center") { + textAlign = "center"; + x -= widest / 2; + } else { + textAlign = "left"; + x = this.left; + } + } + } else if (position === "right") { + if (mirror) { + x = this.left + padding; + if (crossAlign === "near") { + textAlign = "right"; + } else if (crossAlign === "center") { + textAlign = "center"; + x -= widest / 2; + } else { + textAlign = "left"; + x -= widest; + } + } else { + x = this.left + tickAndPadding; + if (crossAlign === "near") { + textAlign = "left"; + } else if (crossAlign === "center") { + textAlign = "center"; + x += widest / 2; + } else { + textAlign = "right"; + x = this.right; + } + } + } else { + textAlign = "right"; + } + return { + textAlign, + x + }; + } + _computeLabelArea() { + if (this.options.ticks.mirror) { + return; + } + const chart2 = this.chart; + const position = this.options.position; + if (position === "left" || position === "right") { + return { + top: 0, + left: this.left, + bottom: chart2.height, + right: this.right + }; + } + if (position === "top" || position === "bottom") { + return { + top: this.top, + left: 0, + bottom: this.bottom, + right: chart2.width + }; + } + } + drawBackground() { + const { ctx, options: { backgroundColor }, left, top, width, height } = this; + if (backgroundColor) { + ctx.save(); + ctx.fillStyle = backgroundColor; + ctx.fillRect(left, top, width, height); + ctx.restore(); + } + } + getLineWidthForValue(value) { + const grid = this.options.grid; + if (!this._isVisible() || !grid.display) { + return 0; + } + const ticks = this.ticks; + const index2 = ticks.findIndex((t) => t.value === value); + if (index2 >= 0) { + const opts = grid.setContext(this.getContext(index2)); + return opts.lineWidth; + } + return 0; + } + drawGrid(chartArea) { + const grid = this.options.grid; + const ctx = this.ctx; + const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea)); + let i, ilen; + const drawLine = (p1, p2, style) => { + if (!style.width || !style.color) { + return; + } + ctx.save(); + ctx.lineWidth = style.width; + ctx.strokeStyle = style.color; + ctx.setLineDash(style.borderDash || []); + ctx.lineDashOffset = style.borderDashOffset; + ctx.beginPath(); + ctx.moveTo(p1.x, p1.y); + ctx.lineTo(p2.x, p2.y); + ctx.stroke(); + ctx.restore(); + }; + if (grid.display) { + for (i = 0, ilen = items.length; i < ilen; ++i) { + const item = items[i]; + if (grid.drawOnChartArea) { + drawLine({ + x: item.x1, + y: item.y1 + }, { + x: item.x2, + y: item.y2 + }, item); + } + if (grid.drawTicks) { + drawLine({ + x: item.tx1, + y: item.ty1 + }, { + x: item.tx2, + y: item.ty2 + }, { + color: item.tickColor, + width: item.tickWidth, + borderDash: item.tickBorderDash, + borderDashOffset: item.tickBorderDashOffset + }); + } + } + } + } + drawBorder() { + const { chart: chart2, ctx, options: { border, grid } } = this; + const borderOpts = border.setContext(this.getContext()); + const axisWidth = border.display ? borderOpts.width : 0; + if (!axisWidth) { + return; + } + const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth; + const borderValue = this._borderValue; + let x1, x2, y1, y2; + if (this.isHorizontal()) { + x1 = _alignPixel(chart2, this.left, axisWidth) - axisWidth / 2; + x2 = _alignPixel(chart2, this.right, lastLineWidth) + lastLineWidth / 2; + y1 = y2 = borderValue; + } else { + y1 = _alignPixel(chart2, this.top, axisWidth) - axisWidth / 2; + y2 = _alignPixel(chart2, this.bottom, lastLineWidth) + lastLineWidth / 2; + x1 = x2 = borderValue; + } + ctx.save(); + ctx.lineWidth = borderOpts.width; + ctx.strokeStyle = borderOpts.color; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + ctx.restore(); + } + drawLabels(chartArea) { + const optionTicks = this.options.ticks; + if (!optionTicks.display) { + return; + } + const ctx = this.ctx; + const area = this._computeLabelArea(); + if (area) { + clipArea(ctx, area); + } + const items = this.getLabelItems(chartArea); + for (const item of items) { + const renderTextOptions = item.options; + const tickFont = item.font; + const label = item.label; + const y = item.textOffset; + renderText(ctx, label, 0, y, tickFont, renderTextOptions); + } + if (area) { + unclipArea(ctx); + } + } + drawTitle() { + const { ctx, options: { position, title, reverse } } = this; + if (!title.display) { + return; + } + const font = toFont(title.font); + const padding = toPadding(title.padding); + const align = title.align; + let offset = font.lineHeight / 2; + if (position === "bottom" || position === "center" || isObject(position)) { + offset += padding.bottom; + if (isArray(title.text)) { + offset += font.lineHeight * (title.text.length - 1); + } + } else { + offset += padding.top; + } + const { titleX, titleY, maxWidth, rotation } = titleArgs(this, offset, position, align); + renderText(ctx, title.text, 0, 0, font, { + color: title.color, + maxWidth, + rotation, + textAlign: titleAlign(align, position, reverse), + textBaseline: "middle", + translation: [ + titleX, + titleY + ] + }); + } + draw(chartArea) { + if (!this._isVisible()) { + return; + } + this.drawBackground(); + this.drawGrid(chartArea); + this.drawBorder(); + this.drawTitle(); + this.drawLabels(chartArea); + } + _layers() { + const opts = this.options; + const tz = opts.ticks && opts.ticks.z || 0; + const gz = valueOrDefault(opts.grid && opts.grid.z, -1); + const bz = valueOrDefault(opts.border && opts.border.z, 0); + if (!this._isVisible() || this.draw !== _Scale.prototype.draw) { + return [ + { + z: tz, + draw: (chartArea) => { + this.draw(chartArea); + } + } + ]; + } + return [ + { + z: gz, + draw: (chartArea) => { + this.drawBackground(); + this.drawGrid(chartArea); + this.drawTitle(); + } + }, + { + z: bz, + draw: () => { + this.drawBorder(); + } + }, + { + z: tz, + draw: (chartArea) => { + this.drawLabels(chartArea); + } + } + ]; + } + getMatchingVisibleMetas(type) { + const metas = this.chart.getSortedVisibleDatasetMetas(); + const axisID = this.axis + "AxisID"; + const result = []; + let i, ilen; + for (i = 0, ilen = metas.length; i < ilen; ++i) { + const meta = metas[i]; + if (meta[axisID] === this.id && (!type || meta.type === type)) { + result.push(meta); + } + } + return result; + } + _resolveTickFontOptions(index2) { + const opts = this.options.ticks.setContext(this.getContext(index2)); + return toFont(opts.font); + } + _maxDigits() { + const fontSize = this._resolveTickFontOptions(0).lineHeight; + return (this.isHorizontal() ? this.width : this.height) / fontSize; + } + }; + TypedRegistry = class { + constructor(type, scope, override) { + this.type = type; + this.scope = scope; + this.override = override; + this.items = /* @__PURE__ */ Object.create(null); + } + isForType(type) { + return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype); + } + register(item) { + const proto = Object.getPrototypeOf(item); + let parentScope; + if (isIChartComponent(proto)) { + parentScope = this.register(proto); + } + const items = this.items; + const id = item.id; + const scope = this.scope + "." + id; + if (!id) { + throw new Error("class does not have id: " + item); + } + if (id in items) { + return scope; + } + items[id] = item; + registerDefaults(item, scope, parentScope); + if (this.override) { + defaults.override(item.id, item.overrides); + } + return scope; + } + get(id) { + return this.items[id]; + } + unregister(item) { + const items = this.items; + const id = item.id; + const scope = this.scope; + if (id in items) { + delete items[id]; + } + if (scope && id in defaults[scope]) { + delete defaults[scope][id]; + if (this.override) { + delete overrides[id]; + } + } + } + }; + Registry = class { + constructor() { + this.controllers = new TypedRegistry(DatasetController, "datasets", true); + this.elements = new TypedRegistry(Element2, "elements"); + this.plugins = new TypedRegistry(Object, "plugins"); + this.scales = new TypedRegistry(Scale, "scales"); + this._typedRegistries = [ + this.controllers, + this.scales, + this.elements + ]; + } + add(...args) { + this._each("register", args); + } + remove(...args) { + this._each("unregister", args); + } + addControllers(...args) { + this._each("register", args, this.controllers); + } + addElements(...args) { + this._each("register", args, this.elements); + } + addPlugins(...args) { + this._each("register", args, this.plugins); + } + addScales(...args) { + this._each("register", args, this.scales); + } + getController(id) { + return this._get(id, this.controllers, "controller"); + } + getElement(id) { + return this._get(id, this.elements, "element"); + } + getPlugin(id) { + return this._get(id, this.plugins, "plugin"); + } + getScale(id) { + return this._get(id, this.scales, "scale"); + } + removeControllers(...args) { + this._each("unregister", args, this.controllers); + } + removeElements(...args) { + this._each("unregister", args, this.elements); + } + removePlugins(...args) { + this._each("unregister", args, this.plugins); + } + removeScales(...args) { + this._each("unregister", args, this.scales); + } + _each(method, args, typedRegistry) { + [ + ...args + ].forEach((arg) => { + const reg = typedRegistry || this._getRegistryForType(arg); + if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) { + this._exec(method, reg, arg); + } else { + each(arg, (item) => { + const itemReg = typedRegistry || this._getRegistryForType(item); + this._exec(method, itemReg, item); + }); + } + }); + } + _exec(method, registry2, component) { + const camelMethod = _capitalize(method); + callback(component["before" + camelMethod], [], component); + registry2[method](component); + callback(component["after" + camelMethod], [], component); + } + _getRegistryForType(type) { + for (let i = 0; i < this._typedRegistries.length; i++) { + const reg = this._typedRegistries[i]; + if (reg.isForType(type)) { + return reg; + } + } + return this.plugins; + } + _get(id, typedRegistry, type) { + const item = typedRegistry.get(id); + if (item === void 0) { + throw new Error('"' + id + '" is not a registered ' + type + "."); + } + return item; + } + }; + registry = /* @__PURE__ */ new Registry(); + PluginService = class { + constructor() { + this._init = void 0; + } + notify(chart2, hook, args, filter) { + if (hook === "beforeInit") { + this._init = this._createDescriptors(chart2, true); + this._notify(this._init, chart2, "install"); + } + if (this._init === void 0) { + return; + } + const descriptors2 = filter ? this._descriptors(chart2).filter(filter) : this._descriptors(chart2); + const result = this._notify(descriptors2, chart2, hook, args); + if (hook === "afterDestroy") { + this._notify(descriptors2, chart2, "stop"); + this._notify(this._init, chart2, "uninstall"); + this._init = void 0; + } + return result; + } + _notify(descriptors2, chart2, hook, args) { + args = args || {}; + for (const descriptor of descriptors2) { + const plugin = descriptor.plugin; + const method = plugin[hook]; + const params = [ + chart2, + args, + descriptor.options + ]; + if (callback(method, params, plugin) === false && args.cancelable) { + return false; + } + } + return true; + } + invalidate() { + if (!isNullOrUndef(this._cache)) { + this._oldCache = this._cache; + this._cache = void 0; + } + } + _descriptors(chart2) { + if (this._cache) { + return this._cache; + } + const descriptors2 = this._cache = this._createDescriptors(chart2); + this._notifyStateChanges(chart2); + return descriptors2; + } + _createDescriptors(chart2, all2) { + const config = chart2 && chart2.config; + const options = valueOrDefault(config.options && config.options.plugins, {}); + const plugins2 = allPlugins(config); + return options === false && !all2 ? [] : createDescriptors(chart2, plugins2, options, all2); + } + _notifyStateChanges(chart2) { + const previousDescriptors = this._oldCache || []; + const descriptors2 = this._cache; + const diff = (a, b) => a.filter((x) => !b.some((y) => x.plugin.id === y.plugin.id)); + this._notify(diff(previousDescriptors, descriptors2), chart2, "stop"); + this._notify(diff(descriptors2, previousDescriptors), chart2, "start"); + } + }; + keyCache = /* @__PURE__ */ new Map(); + keysCached = /* @__PURE__ */ new Set(); + addIfFound = (set2, obj, key) => { + const opts = resolveObjectKey(obj, key); + if (opts !== void 0) { + set2.add(opts); + } + }; + Config = class { + constructor(config) { + this._config = initConfig(config); + this._scopeCache = /* @__PURE__ */ new Map(); + this._resolverCache = /* @__PURE__ */ new Map(); + } + get platform() { + return this._config.platform; + } + get type() { + return this._config.type; + } + set type(type) { + this._config.type = type; + } + get data() { + return this._config.data; + } + set data(data) { + this._config.data = initData(data); + } + get options() { + return this._config.options; + } + set options(options) { + this._config.options = options; + } + get plugins() { + return this._config.plugins; + } + update() { + const config = this._config; + this.clearCache(); + initOptions(config); + } + clearCache() { + this._scopeCache.clear(); + this._resolverCache.clear(); + } + datasetScopeKeys(datasetType) { + return cachedKeys(datasetType, () => [ + [ + `datasets.${datasetType}`, + "" + ] + ]); + } + datasetAnimationScopeKeys(datasetType, transition) { + return cachedKeys(`${datasetType}.transition.${transition}`, () => [ + [ + `datasets.${datasetType}.transitions.${transition}`, + `transitions.${transition}` + ], + [ + `datasets.${datasetType}`, + "" + ] + ]); + } + datasetElementScopeKeys(datasetType, elementType) { + return cachedKeys(`${datasetType}-${elementType}`, () => [ + [ + `datasets.${datasetType}.elements.${elementType}`, + `datasets.${datasetType}`, + `elements.${elementType}`, + "" + ] + ]); + } + pluginScopeKeys(plugin) { + const id = plugin.id; + const type = this.type; + return cachedKeys(`${type}-plugin-${id}`, () => [ + [ + `plugins.${id}`, + ...plugin.additionalOptionScopes || [] + ] + ]); + } + _cachedScopes(mainScope, resetCache) { + const _scopeCache = this._scopeCache; + let cache2 = _scopeCache.get(mainScope); + if (!cache2 || resetCache) { + cache2 = /* @__PURE__ */ new Map(); + _scopeCache.set(mainScope, cache2); + } + return cache2; + } + getOptionScopes(mainScope, keyLists, resetCache) { + const { options, type } = this; + const cache2 = this._cachedScopes(mainScope, resetCache); + const cached = cache2.get(keyLists); + if (cached) { + return cached; + } + const scopes = /* @__PURE__ */ new Set(); + keyLists.forEach((keys) => { + if (mainScope) { + scopes.add(mainScope); + keys.forEach((key) => addIfFound(scopes, mainScope, key)); + } + keys.forEach((key) => addIfFound(scopes, options, key)); + keys.forEach((key) => addIfFound(scopes, overrides[type] || {}, key)); + keys.forEach((key) => addIfFound(scopes, defaults, key)); + keys.forEach((key) => addIfFound(scopes, descriptors, key)); + }); + const array = Array.from(scopes); + if (array.length === 0) { + array.push(/* @__PURE__ */ Object.create(null)); + } + if (keysCached.has(keyLists)) { + cache2.set(keyLists, array); + } + return array; + } + chartOptionScopes() { + const { options, type } = this; + return [ + options, + overrides[type] || {}, + defaults.datasets[type] || {}, + { + type + }, + defaults, + descriptors + ]; + } + resolveNamedOptions(scopes, names2, context, prefixes = [ + "" + ]) { + const result = { + $shared: true + }; + const { resolver, subPrefixes } = getResolver(this._resolverCache, scopes, prefixes); + let options = resolver; + if (needContext(resolver, names2)) { + result.$shared = false; + context = isFunction(context) ? context() : context; + const subResolver = this.createResolver(scopes, context, subPrefixes); + options = _attachContext(resolver, context, subResolver); + } + for (const prop of names2) { + result[prop] = options[prop]; + } + return result; + } + createResolver(scopes, context, prefixes = [ + "" + ], descriptorDefaults) { + const { resolver } = getResolver(this._resolverCache, scopes, prefixes); + return isObject(context) ? _attachContext(resolver, context, void 0, descriptorDefaults) : resolver; + } + }; + hasFunction = (value) => isObject(value) && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key])); + version = "4.5.1"; + KNOWN_POSITIONS = [ + "top", + "bottom", + "left", + "right", + "chartArea" + ]; + instances = {}; + getChart = (key) => { + const canvas = getCanvas(key); + return Object.values(instances).filter((c) => c.canvas === canvas).pop(); + }; + Chart = class { + static register(...items) { + registry.add(...items); + invalidatePlugins(); + } + static unregister(...items) { + registry.remove(...items); + invalidatePlugins(); + } + constructor(item, userConfig) { + const config = this.config = new Config(userConfig); + const initialCanvas = getCanvas(item); + const existingChart = getChart(initialCanvas); + if (existingChart) { + throw new Error("Canvas is already in use. Chart with ID '" + existingChart.id + "' must be destroyed before the canvas with ID '" + existingChart.canvas.id + "' can be reused."); + } + const options = config.createResolver(config.chartOptionScopes(), this.getContext()); + this.platform = new (config.platform || _detectPlatform(initialCanvas))(); + this.platform.updateConfig(config); + const context = this.platform.acquireContext(initialCanvas, options.aspectRatio); + const canvas = context && context.canvas; + const height = canvas && canvas.height; + const width = canvas && canvas.width; + this.id = uid(); + this.ctx = context; + this.canvas = canvas; + this.width = width; + this.height = height; + this._options = options; + this._aspectRatio = this.aspectRatio; + this._layers = []; + this._metasets = []; + this._stacks = void 0; + this.boxes = []; + this.currentDevicePixelRatio = void 0; + this.chartArea = void 0; + this._active = []; + this._lastEvent = void 0; + this._listeners = {}; + this._responsiveListeners = void 0; + this._sortedMetasets = []; + this.scales = {}; + this._plugins = new PluginService(); + this.$proxies = {}; + this._hiddenIndices = {}; + this.attached = false; + this._animationsDisabled = void 0; + this.$context = void 0; + this._doResize = debounce((mode) => this.update(mode), options.resizeDelay || 0); + this._dataChanges = []; + instances[this.id] = this; + if (!context || !canvas) { + console.error("Failed to create chart: can't acquire context from the given item"); + return; + } + animator.listen(this, "complete", onAnimationsComplete); + animator.listen(this, "progress", onAnimationProgress); + this._initialize(); + if (this.attached) { + this.update(); + } + } + get aspectRatio() { + const { options: { aspectRatio, maintainAspectRatio }, width, height, _aspectRatio } = this; + if (!isNullOrUndef(aspectRatio)) { + return aspectRatio; + } + if (maintainAspectRatio && _aspectRatio) { + return _aspectRatio; + } + return height ? width / height : null; + } + get data() { + return this.config.data; + } + set data(data) { + this.config.data = data; + } + get options() { + return this._options; + } + set options(options) { + this.config.options = options; + } + get registry() { + return registry; + } + _initialize() { + this.notifyPlugins("beforeInit"); + if (this.options.responsive) { + this.resize(); + } else { + retinaScale(this, this.options.devicePixelRatio); + } + this.bindEvents(); + this.notifyPlugins("afterInit"); + return this; + } + clear() { + clearCanvas(this.canvas, this.ctx); + return this; + } + stop() { + animator.stop(this); + return this; + } + resize(width, height) { + if (!animator.running(this)) { + this._resize(width, height); + } else { + this._resizeBeforeDraw = { + width, + height + }; + } + } + _resize(width, height) { + const options = this.options; + const canvas = this.canvas; + const aspectRatio = options.maintainAspectRatio && this.aspectRatio; + const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio); + const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio(); + const mode = this.width ? "resize" : "attach"; + this.width = newSize.width; + this.height = newSize.height; + this._aspectRatio = this.aspectRatio; + if (!retinaScale(this, newRatio, true)) { + return; + } + this.notifyPlugins("resize", { + size: newSize + }); + callback(options.onResize, [ + this, + newSize + ], this); + if (this.attached) { + if (this._doResize(mode)) { + this.render(); + } + } + } + ensureScalesHaveIDs() { + const options = this.options; + const scalesOptions = options.scales || {}; + each(scalesOptions, (axisOptions, axisID) => { + axisOptions.id = axisID; + }); + } + buildOrUpdateScales() { + const options = this.options; + const scaleOpts = options.scales; + const scales2 = this.scales; + const updated = Object.keys(scales2).reduce((obj, id) => { + obj[id] = false; + return obj; + }, {}); + let items = []; + if (scaleOpts) { + items = items.concat(Object.keys(scaleOpts).map((id) => { + const scaleOptions = scaleOpts[id]; + const axis = determineAxis(id, scaleOptions); + const isRadial = axis === "r"; + const isHorizontal = axis === "x"; + return { + options: scaleOptions, + dposition: isRadial ? "chartArea" : isHorizontal ? "bottom" : "left", + dtype: isRadial ? "radialLinear" : isHorizontal ? "category" : "linear" + }; + })); + } + each(items, (item) => { + const scaleOptions = item.options; + const id = scaleOptions.id; + const axis = determineAxis(id, scaleOptions); + const scaleType = valueOrDefault(scaleOptions.type, item.dtype); + if (scaleOptions.position === void 0 || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) { + scaleOptions.position = item.dposition; + } + updated[id] = true; + let scale = null; + if (id in scales2 && scales2[id].type === scaleType) { + scale = scales2[id]; + } else { + const scaleClass = registry.getScale(scaleType); + scale = new scaleClass({ + id, + type: scaleType, + ctx: this.ctx, + chart: this + }); + scales2[scale.id] = scale; + } + scale.init(scaleOptions, options); + }); + each(updated, (hasUpdated, id) => { + if (!hasUpdated) { + delete scales2[id]; + } + }); + each(scales2, (scale) => { + layouts.configure(this, scale, scale.options); + layouts.addBox(this, scale); + }); + } + _updateMetasets() { + const metasets = this._metasets; + const numData = this.data.datasets.length; + const numMeta = metasets.length; + metasets.sort((a, b) => a.index - b.index); + if (numMeta > numData) { + for (let i = numData; i < numMeta; ++i) { + this._destroyDatasetMeta(i); + } + metasets.splice(numData, numMeta - numData); + } + this._sortedMetasets = metasets.slice(0).sort(compare2Level("order", "index")); + } + _removeUnreferencedMetasets() { + const { _metasets: metasets, data: { datasets } } = this; + if (metasets.length > datasets.length) { + delete this._stacks; + } + metasets.forEach((meta, index2) => { + if (datasets.filter((x) => x === meta._dataset).length === 0) { + this._destroyDatasetMeta(index2); + } + }); + } + buildOrUpdateControllers() { + const newControllers = []; + const datasets = this.data.datasets; + let i, ilen; + this._removeUnreferencedMetasets(); + for (i = 0, ilen = datasets.length; i < ilen; i++) { + const dataset = datasets[i]; + let meta = this.getDatasetMeta(i); + const type = dataset.type || this.config.type; + if (meta.type && meta.type !== type) { + this._destroyDatasetMeta(i); + meta = this.getDatasetMeta(i); + } + meta.type = type; + meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options); + meta.order = dataset.order || 0; + meta.index = i; + meta.label = "" + dataset.label; + meta.visible = this.isDatasetVisible(i); + if (meta.controller) { + meta.controller.updateIndex(i); + meta.controller.linkScales(); + } else { + const ControllerClass = registry.getController(type); + const { datasetElementType, dataElementType } = defaults.datasets[type]; + Object.assign(ControllerClass, { + dataElementType: registry.getElement(dataElementType), + datasetElementType: datasetElementType && registry.getElement(datasetElementType) + }); + meta.controller = new ControllerClass(this, i); + newControllers.push(meta.controller); + } + } + this._updateMetasets(); + return newControllers; + } + _resetElements() { + each(this.data.datasets, (dataset, datasetIndex) => { + this.getDatasetMeta(datasetIndex).controller.reset(); + }, this); + } + reset() { + this._resetElements(); + this.notifyPlugins("reset"); + } + update(mode) { + const config = this.config; + config.update(); + const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext()); + const animsDisabled = this._animationsDisabled = !options.animation; + this._updateScales(); + this._checkEventBindings(); + this._updateHiddenIndices(); + this._plugins.invalidate(); + if (this.notifyPlugins("beforeUpdate", { + mode, + cancelable: true + }) === false) { + return; + } + const newControllers = this.buildOrUpdateControllers(); + this.notifyPlugins("beforeElementsUpdate"); + let minPadding = 0; + for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) { + const { controller } = this.getDatasetMeta(i); + const reset = !animsDisabled && newControllers.indexOf(controller) === -1; + controller.buildOrUpdateElements(reset); + minPadding = Math.max(+controller.getMaxOverflow(), minPadding); + } + minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0; + this._updateLayout(minPadding); + if (!animsDisabled) { + each(newControllers, (controller) => { + controller.reset(); + }); + } + this._updateDatasets(mode); + this.notifyPlugins("afterUpdate", { + mode + }); + this._layers.sort(compare2Level("z", "_idx")); + const { _active, _lastEvent } = this; + if (_lastEvent) { + this._eventHandler(_lastEvent, true); + } else if (_active.length) { + this._updateHoverStyles(_active, _active, true); + } + this.render(); + } + _updateScales() { + each(this.scales, (scale) => { + layouts.removeBox(this, scale); + }); + this.ensureScalesHaveIDs(); + this.buildOrUpdateScales(); + } + _checkEventBindings() { + const options = this.options; + const existingEvents = new Set(Object.keys(this._listeners)); + const newEvents = new Set(options.events); + if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) { + this.unbindEvents(); + this.bindEvents(); + } + } + _updateHiddenIndices() { + const { _hiddenIndices } = this; + const changes = this._getUniformDataChanges() || []; + for (const { method, start, count } of changes) { + const move = method === "_removeElements" ? -count : count; + moveNumericKeys(_hiddenIndices, start, move); + } + } + _getUniformDataChanges() { + const _dataChanges = this._dataChanges; + if (!_dataChanges || !_dataChanges.length) { + return; + } + this._dataChanges = []; + const datasetCount = this.data.datasets.length; + const makeSet = (idx) => new Set(_dataChanges.filter((c) => c[0] === idx).map((c, i) => i + "," + c.splice(1).join(","))); + const changeSet = makeSet(0); + for (let i = 1; i < datasetCount; i++) { + if (!setsEqual(changeSet, makeSet(i))) { + return; + } + } + return Array.from(changeSet).map((c) => c.split(",")).map((a) => ({ + method: a[1], + start: +a[2], + count: +a[3] + })); + } + _updateLayout(minPadding) { + if (this.notifyPlugins("beforeLayout", { + cancelable: true + }) === false) { + return; + } + layouts.update(this, this.width, this.height, minPadding); + const area = this.chartArea; + const noArea = area.width <= 0 || area.height <= 0; + this._layers = []; + each(this.boxes, (box) => { + if (noArea && box.position === "chartArea") { + return; + } + if (box.configure) { + box.configure(); + } + this._layers.push(...box._layers()); + }, this); + this._layers.forEach((item, index2) => { + item._idx = index2; + }); + this.notifyPlugins("afterLayout"); + } + _updateDatasets(mode) { + if (this.notifyPlugins("beforeDatasetsUpdate", { + mode, + cancelable: true + }) === false) { + return; + } + for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this.getDatasetMeta(i).controller.configure(); + } + for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this._updateDataset(i, isFunction(mode) ? mode({ + datasetIndex: i + }) : mode); + } + this.notifyPlugins("afterDatasetsUpdate", { + mode + }); + } + _updateDataset(index2, mode) { + const meta = this.getDatasetMeta(index2); + const args = { + meta, + index: index2, + mode, + cancelable: true + }; + if (this.notifyPlugins("beforeDatasetUpdate", args) === false) { + return; + } + meta.controller._update(mode); + args.cancelable = false; + this.notifyPlugins("afterDatasetUpdate", args); + } + render() { + if (this.notifyPlugins("beforeRender", { + cancelable: true + }) === false) { + return; + } + if (animator.has(this)) { + if (this.attached && !animator.running(this)) { + animator.start(this); + } + } else { + this.draw(); + onAnimationsComplete({ + chart: this + }); + } + } + draw() { + let i; + if (this._resizeBeforeDraw) { + const { width, height } = this._resizeBeforeDraw; + this._resizeBeforeDraw = null; + this._resize(width, height); + } + this.clear(); + if (this.width <= 0 || this.height <= 0) { + return; + } + if (this.notifyPlugins("beforeDraw", { + cancelable: true + }) === false) { + return; + } + const layers = this._layers; + for (i = 0; i < layers.length && layers[i].z <= 0; ++i) { + layers[i].draw(this.chartArea); + } + this._drawDatasets(); + for (; i < layers.length; ++i) { + layers[i].draw(this.chartArea); + } + this.notifyPlugins("afterDraw"); + } + _getSortedDatasetMetas(filterVisible) { + const metasets = this._sortedMetasets; + const result = []; + let i, ilen; + for (i = 0, ilen = metasets.length; i < ilen; ++i) { + const meta = metasets[i]; + if (!filterVisible || meta.visible) { + result.push(meta); + } + } + return result; + } + getSortedVisibleDatasetMetas() { + return this._getSortedDatasetMetas(true); + } + _drawDatasets() { + if (this.notifyPlugins("beforeDatasetsDraw", { + cancelable: true + }) === false) { + return; + } + const metasets = this.getSortedVisibleDatasetMetas(); + for (let i = metasets.length - 1; i >= 0; --i) { + this._drawDataset(metasets[i]); + } + this.notifyPlugins("afterDatasetsDraw"); + } + _drawDataset(meta) { + const ctx = this.ctx; + const args = { + meta, + index: meta.index, + cancelable: true + }; + const clip = getDatasetClipArea(this, meta); + if (this.notifyPlugins("beforeDatasetDraw", args) === false) { + return; + } + if (clip) { + clipArea(ctx, clip); + } + meta.controller.draw(); + if (clip) { + unclipArea(ctx); + } + args.cancelable = false; + this.notifyPlugins("afterDatasetDraw", args); + } + isPointInArea(point) { + return _isPointInArea(point, this.chartArea, this._minPadding); + } + getElementsAtEventForMode(e, mode, options, useFinalPosition) { + const method = Interaction.modes[mode]; + if (typeof method === "function") { + return method(this, e, options, useFinalPosition); + } + return []; + } + getDatasetMeta(datasetIndex) { + const dataset = this.data.datasets[datasetIndex]; + const metasets = this._metasets; + let meta = metasets.filter((x) => x && x._dataset === dataset).pop(); + if (!meta) { + meta = { + type: null, + data: [], + dataset: null, + controller: null, + hidden: null, + xAxisID: null, + yAxisID: null, + order: dataset && dataset.order || 0, + index: datasetIndex, + _dataset: dataset, + _parsed: [], + _sorted: false + }; + metasets.push(meta); + } + return meta; + } + getContext() { + return this.$context || (this.$context = createContext(null, { + chart: this, + type: "chart" + })); + } + getVisibleDatasetCount() { + return this.getSortedVisibleDatasetMetas().length; + } + isDatasetVisible(datasetIndex) { + const dataset = this.data.datasets[datasetIndex]; + if (!dataset) { + return false; + } + const meta = this.getDatasetMeta(datasetIndex); + return typeof meta.hidden === "boolean" ? !meta.hidden : !dataset.hidden; + } + setDatasetVisibility(datasetIndex, visible) { + const meta = this.getDatasetMeta(datasetIndex); + meta.hidden = !visible; + } + toggleDataVisibility(index2) { + this._hiddenIndices[index2] = !this._hiddenIndices[index2]; + } + getDataVisibility(index2) { + return !this._hiddenIndices[index2]; + } + _updateVisibility(datasetIndex, dataIndex, visible) { + const mode = visible ? "show" : "hide"; + const meta = this.getDatasetMeta(datasetIndex); + const anims = meta.controller._resolveAnimations(void 0, mode); + if (defined(dataIndex)) { + meta.data[dataIndex].hidden = !visible; + this.update(); + } else { + this.setDatasetVisibility(datasetIndex, visible); + anims.update(meta, { + visible + }); + this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : void 0); + } + } + hide(datasetIndex, dataIndex) { + this._updateVisibility(datasetIndex, dataIndex, false); + } + show(datasetIndex, dataIndex) { + this._updateVisibility(datasetIndex, dataIndex, true); + } + _destroyDatasetMeta(datasetIndex) { + const meta = this._metasets[datasetIndex]; + if (meta && meta.controller) { + meta.controller._destroy(); + } + delete this._metasets[datasetIndex]; + } + _stop() { + let i, ilen; + this.stop(); + animator.remove(this); + for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this._destroyDatasetMeta(i); + } + } + destroy() { + this.notifyPlugins("beforeDestroy"); + const { canvas, ctx } = this; + this._stop(); + this.config.clearCache(); + if (canvas) { + this.unbindEvents(); + clearCanvas(canvas, ctx); + this.platform.releaseContext(ctx); + this.canvas = null; + this.ctx = null; + } + delete instances[this.id]; + this.notifyPlugins("afterDestroy"); + } + toBase64Image(...args) { + return this.canvas.toDataURL(...args); + } + bindEvents() { + this.bindUserEvents(); + if (this.options.responsive) { + this.bindResponsiveEvents(); + } else { + this.attached = true; + } + } + bindUserEvents() { + const listeners = this._listeners; + const platform = this.platform; + const _add = (type, listener2) => { + platform.addEventListener(this, type, listener2); + listeners[type] = listener2; + }; + const listener = (e, x, y) => { + e.offsetX = x; + e.offsetY = y; + this._eventHandler(e); + }; + each(this.options.events, (type) => _add(type, listener)); + } + bindResponsiveEvents() { + if (!this._responsiveListeners) { + this._responsiveListeners = {}; + } + const listeners = this._responsiveListeners; + const platform = this.platform; + const _add = (type, listener2) => { + platform.addEventListener(this, type, listener2); + listeners[type] = listener2; + }; + const _remove = (type, listener2) => { + if (listeners[type]) { + platform.removeEventListener(this, type, listener2); + delete listeners[type]; + } + }; + const listener = (width, height) => { + if (this.canvas) { + this.resize(width, height); + } + }; + let detached; + const attached = () => { + _remove("attach", attached); + this.attached = true; + this.resize(); + _add("resize", listener); + _add("detach", detached); + }; + detached = () => { + this.attached = false; + _remove("resize", listener); + this._stop(); + this._resize(0, 0); + _add("attach", attached); + }; + if (platform.isAttached(this.canvas)) { + attached(); + } else { + detached(); + } + } + unbindEvents() { + each(this._listeners, (listener, type) => { + this.platform.removeEventListener(this, type, listener); + }); + this._listeners = {}; + each(this._responsiveListeners, (listener, type) => { + this.platform.removeEventListener(this, type, listener); + }); + this._responsiveListeners = void 0; + } + updateHoverStyle(items, mode, enabled) { + const prefix = enabled ? "set" : "remove"; + let meta, item, i, ilen; + if (mode === "dataset") { + meta = this.getDatasetMeta(items[0].datasetIndex); + meta.controller["_" + prefix + "DatasetHoverStyle"](); + } + for (i = 0, ilen = items.length; i < ilen; ++i) { + item = items[i]; + const controller = item && this.getDatasetMeta(item.datasetIndex).controller; + if (controller) { + controller[prefix + "HoverStyle"](item.element, item.datasetIndex, item.index); + } + } + } + getActiveElements() { + return this._active || []; + } + setActiveElements(activeElements) { + const lastActive = this._active || []; + const active = activeElements.map(({ datasetIndex, index: index2 }) => { + const meta = this.getDatasetMeta(datasetIndex); + if (!meta) { + throw new Error("No dataset found at index " + datasetIndex); + } + return { + datasetIndex, + element: meta.data[index2], + index: index2 + }; + }); + const changed = !_elementsEqual(active, lastActive); + if (changed) { + this._active = active; + this._lastEvent = null; + this._updateHoverStyles(active, lastActive); + } + } + notifyPlugins(hook, args, filter) { + return this._plugins.notify(this, hook, args, filter); + } + isPluginEnabled(pluginId) { + return this._plugins._cache.filter((p) => p.plugin.id === pluginId).length === 1; + } + _updateHoverStyles(active, lastActive, replay) { + const hoverOptions = this.options.hover; + const diff = (a, b) => a.filter((x) => !b.some((y) => x.datasetIndex === y.datasetIndex && x.index === y.index)); + const deactivated = diff(lastActive, active); + const activated = replay ? active : diff(active, lastActive); + if (deactivated.length) { + this.updateHoverStyle(deactivated, hoverOptions.mode, false); + } + if (activated.length && hoverOptions.mode) { + this.updateHoverStyle(activated, hoverOptions.mode, true); + } + } + _eventHandler(e, replay) { + const args = { + event: e, + replay, + cancelable: true, + inChartArea: this.isPointInArea(e) + }; + const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type); + if (this.notifyPlugins("beforeEvent", args, eventFilter) === false) { + return; + } + const changed = this._handleEvent(e, replay, args.inChartArea); + args.cancelable = false; + this.notifyPlugins("afterEvent", args, eventFilter); + if (changed || args.changed) { + this.render(); + } + return this; + } + _handleEvent(e, replay, inChartArea) { + const { _active: lastActive = [], options } = this; + const useFinalPosition = replay; + const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition); + const isClick = _isClickEvent(e); + const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick); + if (inChartArea) { + this._lastEvent = null; + callback(options.onHover, [ + e, + active, + this + ], this); + if (isClick) { + callback(options.onClick, [ + e, + active, + this + ], this); + } + } + const changed = !_elementsEqual(active, lastActive); + if (changed || replay) { + this._active = active; + this._updateHoverStyles(active, lastActive, replay); + } + this._lastEvent = lastEvent; + return changed; + } + _getActiveElements(e, lastActive, inChartArea, useFinalPosition) { + if (e.type === "mouseout") { + return []; + } + if (!inChartArea) { + return lastActive; + } + const hoverOptions = this.options.hover; + return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition); + } + }; + __publicField(Chart, "defaults", defaults); + __publicField(Chart, "instances", instances); + __publicField(Chart, "overrides", overrides); + __publicField(Chart, "registry", registry); + __publicField(Chart, "version", version); + __publicField(Chart, "getChart", getChart); + ArcElement = class extends Element2 { + constructor(cfg) { + super(); + __publicField(this, "circumference"); + __publicField(this, "endAngle"); + __publicField(this, "fullCircles"); + __publicField(this, "innerRadius"); + __publicField(this, "outerRadius"); + __publicField(this, "pixelMargin"); + __publicField(this, "startAngle"); + this.options = void 0; + this.circumference = void 0; + this.startAngle = void 0; + this.endAngle = void 0; + this.innerRadius = void 0; + this.outerRadius = void 0; + this.pixelMargin = 0; + this.fullCircles = 0; + if (cfg) { + Object.assign(this, cfg); + } + } + inRange(chartX, chartY, useFinalPosition) { + const point = this.getProps([ + "x", + "y" + ], useFinalPosition); + const { angle, distance } = getAngleFromPoint(point, { + x: chartX, + y: chartY + }); + const { startAngle, endAngle, innerRadius, outerRadius, circumference } = this.getProps([ + "startAngle", + "endAngle", + "innerRadius", + "outerRadius", + "circumference" + ], useFinalPosition); + const rAdjust = (this.options.spacing + this.options.borderWidth) / 2; + const _circumference = valueOrDefault(circumference, endAngle - startAngle); + const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle; + const betweenAngles = _circumference >= TAU || nonZeroBetween; + const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust); + return betweenAngles && withinRadius; + } + getCenterPoint(useFinalPosition) { + const { x, y, startAngle, endAngle, innerRadius, outerRadius } = this.getProps([ + "x", + "y", + "startAngle", + "endAngle", + "innerRadius", + "outerRadius" + ], useFinalPosition); + const { offset, spacing } = this.options; + const halfAngle = (startAngle + endAngle) / 2; + const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2; + return { + x: x + Math.cos(halfAngle) * halfRadius, + y: y + Math.sin(halfAngle) * halfRadius + }; + } + tooltipPosition(useFinalPosition) { + return this.getCenterPoint(useFinalPosition); + } + draw(ctx) { + const { options, circumference } = this; + const offset = (options.offset || 0) / 4; + const spacing = (options.spacing || 0) / 2; + const circular = options.circular; + this.pixelMargin = options.borderAlign === "inner" ? 0.33 : 0; + this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0; + if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) { + return; + } + ctx.save(); + const halfAngle = (this.startAngle + this.endAngle) / 2; + ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset); + const fix = 1 - Math.sin(Math.min(PI, circumference || 0)); + const radiusOffset = offset * fix; + ctx.fillStyle = options.backgroundColor; + ctx.strokeStyle = options.borderColor; + drawArc(ctx, this, radiusOffset, spacing, circular); + drawBorder(ctx, this, radiusOffset, spacing, circular); + ctx.restore(); + } + }; + __publicField(ArcElement, "id", "arc"); + __publicField(ArcElement, "defaults", { + borderAlign: "center", + borderColor: "#fff", + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: void 0, + borderRadius: 0, + borderWidth: 2, + offset: 0, + spacing: 0, + angle: void 0, + circular: true, + selfJoin: false + }); + __publicField(ArcElement, "defaultRoutes", { + backgroundColor: "backgroundColor" + }); + __publicField(ArcElement, "descriptors", { + _scriptable: true, + _indexable: (name) => name !== "borderDash" + }); + usePath2D = typeof Path2D === "function"; + LineElement = class extends Element2 { + constructor(cfg) { + super(); + this.animated = true; + this.options = void 0; + this._chart = void 0; + this._loop = void 0; + this._fullLoop = void 0; + this._path = void 0; + this._points = void 0; + this._segments = void 0; + this._decimated = false; + this._pointsUpdated = false; + this._datasetIndex = void 0; + if (cfg) { + Object.assign(this, cfg); + } + } + updateControlPoints(chartArea, indexAxis) { + const options = this.options; + if ((options.tension || options.cubicInterpolationMode === "monotone") && !options.stepped && !this._pointsUpdated) { + const loop = options.spanGaps ? this._loop : this._fullLoop; + _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis); + this._pointsUpdated = true; + } + } + set points(points) { + this._points = points; + delete this._segments; + delete this._path; + this._pointsUpdated = false; + } + get points() { + return this._points; + } + get segments() { + return this._segments || (this._segments = _computeSegments(this, this.options.segment)); + } + first() { + const segments = this.segments; + const points = this.points; + return segments.length && points[segments[0].start]; + } + last() { + const segments = this.segments; + const points = this.points; + const count = segments.length; + return count && points[segments[count - 1].end]; + } + interpolate(point, property) { + const options = this.options; + const value = point[property]; + const points = this.points; + const segments = _boundSegments(this, { + property, + start: value, + end: value + }); + if (!segments.length) { + return; + } + const result = []; + const _interpolate = _getInterpolationMethod(options); + let i, ilen; + for (i = 0, ilen = segments.length; i < ilen; ++i) { + const { start, end } = segments[i]; + const p1 = points[start]; + const p2 = points[end]; + if (p1 === p2) { + result.push(p1); + continue; + } + const t = Math.abs((value - p1[property]) / (p2[property] - p1[property])); + const interpolated = _interpolate(p1, p2, t, options.stepped); + interpolated[property] = point[property]; + result.push(interpolated); + } + return result.length === 1 ? result[0] : result; + } + pathSegment(ctx, segment, params) { + const segmentMethod = _getSegmentMethod(this); + return segmentMethod(ctx, this, segment, params); + } + path(ctx, start, count) { + const segments = this.segments; + const segmentMethod = _getSegmentMethod(this); + let loop = this._loop; + start = start || 0; + count = count || this.points.length - start; + for (const segment of segments) { + loop &= segmentMethod(ctx, this, segment, { + start, + end: start + count - 1 + }); + } + return !!loop; + } + draw(ctx, chartArea, start, count) { + const options = this.options || {}; + const points = this.points || []; + if (points.length && options.borderWidth) { + ctx.save(); + draw(ctx, this, start, count); + ctx.restore(); + } + if (this.animated) { + this._pointsUpdated = false; + this._path = void 0; + } + } + }; + __publicField(LineElement, "id", "line"); + __publicField(LineElement, "defaults", { + borderCapStyle: "butt", + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: "miter", + borderWidth: 3, + capBezierPoints: true, + cubicInterpolationMode: "default", + fill: false, + spanGaps: false, + stepped: false, + tension: 0 + }); + __publicField(LineElement, "defaultRoutes", { + backgroundColor: "backgroundColor", + borderColor: "borderColor" + }); + __publicField(LineElement, "descriptors", { + _scriptable: true, + _indexable: (name) => name !== "borderDash" && name !== "fill" + }); + PointElement = class extends Element2 { + constructor(cfg) { + super(); + __publicField(this, "parsed"); + __publicField(this, "skip"); + __publicField(this, "stop"); + this.options = void 0; + this.parsed = void 0; + this.skip = void 0; + this.stop = void 0; + if (cfg) { + Object.assign(this, cfg); + } + } + inRange(mouseX, mouseY, useFinalPosition) { + const options = this.options; + const { x, y } = this.getProps([ + "x", + "y" + ], useFinalPosition); + return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2); + } + inXRange(mouseX, useFinalPosition) { + return inRange$1(this, mouseX, "x", useFinalPosition); + } + inYRange(mouseY, useFinalPosition) { + return inRange$1(this, mouseY, "y", useFinalPosition); + } + getCenterPoint(useFinalPosition) { + const { x, y } = this.getProps([ + "x", + "y" + ], useFinalPosition); + return { + x, + y + }; + } + size(options) { + options = options || this.options || {}; + let radius = options.radius || 0; + radius = Math.max(radius, radius && options.hoverRadius || 0); + const borderWidth2 = radius && options.borderWidth || 0; + return (radius + borderWidth2) * 2; + } + draw(ctx, area) { + const options = this.options; + if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) { + return; + } + ctx.strokeStyle = options.borderColor; + ctx.lineWidth = options.borderWidth; + ctx.fillStyle = options.backgroundColor; + drawPoint(ctx, options, this.x, this.y); + } + getRange() { + const options = this.options || {}; + return options.radius + options.hitRadius; + } + }; + __publicField(PointElement, "id", "point"); + /** + * @type {any} + */ + __publicField(PointElement, "defaults", { + borderWidth: 1, + hitRadius: 1, + hoverBorderWidth: 1, + hoverRadius: 4, + pointStyle: "circle", + radius: 3, + rotation: 0 + }); + /** + * @type {any} + */ + __publicField(PointElement, "defaultRoutes", { + backgroundColor: "backgroundColor", + borderColor: "borderColor" + }); + BarElement = class extends Element2 { + constructor(cfg) { + super(); + this.options = void 0; + this.horizontal = void 0; + this.base = void 0; + this.width = void 0; + this.height = void 0; + this.inflateAmount = void 0; + if (cfg) { + Object.assign(this, cfg); + } + } + draw(ctx) { + const { inflateAmount, options: { borderColor, backgroundColor } } = this; + const { inner, outer } = boundingRects(this); + const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath; + ctx.save(); + if (outer.w !== inner.w || outer.h !== inner.h) { + ctx.beginPath(); + addRectPath(ctx, inflateRect(outer, inflateAmount, inner)); + ctx.clip(); + addRectPath(ctx, inflateRect(inner, -inflateAmount, outer)); + ctx.fillStyle = borderColor; + ctx.fill("evenodd"); + } + ctx.beginPath(); + addRectPath(ctx, inflateRect(inner, inflateAmount)); + ctx.fillStyle = backgroundColor; + ctx.fill(); + ctx.restore(); + } + inRange(mouseX, mouseY, useFinalPosition) { + return inRange(this, mouseX, mouseY, useFinalPosition); + } + inXRange(mouseX, useFinalPosition) { + return inRange(this, mouseX, null, useFinalPosition); + } + inYRange(mouseY, useFinalPosition) { + return inRange(this, null, mouseY, useFinalPosition); + } + getCenterPoint(useFinalPosition) { + const { x, y, base, horizontal } = this.getProps([ + "x", + "y", + "base", + "horizontal" + ], useFinalPosition); + return { + x: horizontal ? (x + base) / 2 : x, + y: horizontal ? y : (y + base) / 2 + }; + } + getRange(axis) { + return axis === "x" ? this.width / 2 : this.height / 2; + } + }; + __publicField(BarElement, "id", "bar"); + __publicField(BarElement, "defaults", { + borderSkipped: "start", + borderWidth: 0, + borderRadius: 0, + inflateAmount: "auto", + pointStyle: void 0 + }); + __publicField(BarElement, "defaultRoutes", { + backgroundColor: "backgroundColor", + borderColor: "borderColor" + }); + elements = /* @__PURE__ */ Object.freeze({ + __proto__: null, + ArcElement, + BarElement, + LineElement, + PointElement + }); + BORDER_COLORS = [ + "rgb(54, 162, 235)", + "rgb(255, 99, 132)", + "rgb(255, 159, 64)", + "rgb(255, 205, 86)", + "rgb(75, 192, 192)", + "rgb(153, 102, 255)", + "rgb(201, 203, 207)" + // grey + ]; + BACKGROUND_COLORS = /* @__PURE__ */ BORDER_COLORS.map((color2) => color2.replace("rgb(", "rgba(").replace(")", ", 0.5)")); + plugin_colors = { + id: "colors", + defaults: { + enabled: true, + forceOverride: false + }, + beforeLayout(chart2, _args, options) { + if (!options.enabled) { + return; + } + const { data: { datasets }, options: chartOptions } = chart2.config; + const { elements: elements3 } = chartOptions; + const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements3 && containsColorsDefinitions(elements3) || containsDefaultColorsDefenitions(); + if (!options.forceOverride && containsColorDefenition) { + return; + } + const colorizer = getColorizer(chart2); + datasets.forEach(colorizer); + } + }; + plugin_decimation = { + id: "decimation", + defaults: { + algorithm: "min-max", + enabled: false + }, + beforeElementsUpdate: (chart2, args, options) => { + if (!options.enabled) { + cleanDecimatedData(chart2); + return; + } + const availableWidth = chart2.width; + chart2.data.datasets.forEach((dataset, datasetIndex) => { + const { _data, indexAxis } = dataset; + const meta = chart2.getDatasetMeta(datasetIndex); + const data = _data || dataset.data; + if (resolve([ + indexAxis, + chart2.options.indexAxis + ]) === "y") { + return; + } + if (!meta.controller.supportsDecimation) { + return; + } + const xAxis = chart2.scales[meta.xAxisID]; + if (xAxis.type !== "linear" && xAxis.type !== "time") { + return; + } + if (chart2.options.parsing) { + return; + } + let { start, count } = getStartAndCountOfVisiblePointsSimplified(meta, data); + const threshold = options.threshold || 4 * availableWidth; + if (count <= threshold) { + cleanDecimatedDataset(dataset); + return; + } + if (isNullOrUndef(_data)) { + dataset._data = data; + delete dataset.data; + Object.defineProperty(dataset, "data", { + configurable: true, + enumerable: true, + get: function() { + return this._decimated; + }, + set: function(d) { + this._data = d; + } + }); + } + let decimated; + switch (options.algorithm) { + case "lttb": + decimated = lttbDecimation(data, start, count, availableWidth, options); + break; + case "min-max": + decimated = minMaxDecimation(data, start, count, availableWidth); + break; + default: + throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`); + } + dataset._decimated = decimated; + }); + }, + destroy(chart2) { + cleanDecimatedData(chart2); + } + }; + simpleArc = class { + constructor(opts) { + this.x = opts.x; + this.y = opts.y; + this.radius = opts.radius; + } + pathSegment(ctx, bounds, opts) { + const { x, y, radius } = this; + bounds = bounds || { + start: 0, + end: TAU + }; + ctx.arc(x, y, radius, bounds.end, bounds.start, true); + return !opts.bounds; + } + interpolate(point) { + const { x, y, radius } = this; + const angle = point.angle; + return { + x: x + Math.cos(angle) * radius, + y: y + Math.sin(angle) * radius, + angle + }; + } + }; + index = { + id: "filler", + afterDatasetsUpdate(chart2, _args, options) { + const count = (chart2.data.datasets || []).length; + const sources = []; + let meta, i, line, source; + for (i = 0; i < count; ++i) { + meta = chart2.getDatasetMeta(i); + line = meta.dataset; + source = null; + if (line && line.options && line instanceof LineElement) { + source = { + visible: chart2.isDatasetVisible(i), + index: i, + fill: _decodeFill(line, i, count), + chart: chart2, + axis: meta.controller.options.indexAxis, + scale: meta.vScale, + line + }; + } + meta.$filler = source; + sources.push(source); + } + for (i = 0; i < count; ++i) { + source = sources[i]; + if (!source || source.fill === false) { + continue; + } + source.fill = _resolveTarget(sources, i, options.propagate); + } + }, + beforeDraw(chart2, _args, options) { + const draw2 = options.drawTime === "beforeDraw"; + const metasets = chart2.getSortedVisibleDatasetMetas(); + const area = chart2.chartArea; + for (let i = metasets.length - 1; i >= 0; --i) { + const source = metasets[i].$filler; + if (!source) { + continue; + } + source.line.updateControlPoints(area, source.axis); + if (draw2 && source.fill) { + _drawfill(chart2.ctx, source, area); + } + } + }, + beforeDatasetsDraw(chart2, _args, options) { + if (options.drawTime !== "beforeDatasetsDraw") { + return; + } + const metasets = chart2.getSortedVisibleDatasetMetas(); + for (let i = metasets.length - 1; i >= 0; --i) { + const source = metasets[i].$filler; + if (_shouldApplyFill(source)) { + _drawfill(chart2.ctx, source, chart2.chartArea); + } + } + }, + beforeDatasetDraw(chart2, args, options) { + const source = args.meta.$filler; + if (!_shouldApplyFill(source) || options.drawTime !== "beforeDatasetDraw") { + return; + } + _drawfill(chart2.ctx, source, chart2.chartArea); + }, + defaults: { + propagate: true, + drawTime: "beforeDatasetDraw" + } + }; + getBoxSize = (labelOpts, fontSize) => { + let { boxHeight = fontSize, boxWidth = fontSize } = labelOpts; + if (labelOpts.usePointStyle) { + boxHeight = Math.min(boxHeight, fontSize); + boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize); + } + return { + boxWidth, + boxHeight, + itemHeight: Math.max(fontSize, boxHeight) + }; + }; + itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index; + Legend = class extends Element2 { + constructor(config) { + super(); + this._added = false; + this.legendHitBoxes = []; + this._hoveredItem = null; + this.doughnutMode = false; + this.chart = config.chart; + this.options = config.options; + this.ctx = config.ctx; + this.legendItems = void 0; + this.columnSizes = void 0; + this.lineWidths = void 0; + this.maxHeight = void 0; + this.maxWidth = void 0; + this.top = void 0; + this.bottom = void 0; + this.left = void 0; + this.right = void 0; + this.height = void 0; + this.width = void 0; + this._margins = void 0; + this.position = void 0; + this.weight = void 0; + this.fullSize = void 0; + } + update(maxWidth, maxHeight, margins) { + this.maxWidth = maxWidth; + this.maxHeight = maxHeight; + this._margins = margins; + this.setDimensions(); + this.buildLabels(); + this.fit(); + } + setDimensions() { + if (this.isHorizontal()) { + this.width = this.maxWidth; + this.left = this._margins.left; + this.right = this.width; + } else { + this.height = this.maxHeight; + this.top = this._margins.top; + this.bottom = this.height; + } + } + buildLabels() { + const labelOpts = this.options.labels || {}; + let legendItems = callback(labelOpts.generateLabels, [ + this.chart + ], this) || []; + if (labelOpts.filter) { + legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data)); + } + if (labelOpts.sort) { + legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data)); + } + if (this.options.reverse) { + legendItems.reverse(); + } + this.legendItems = legendItems; + } + fit() { + const { options, ctx } = this; + if (!options.display) { + this.width = this.height = 0; + return; + } + const labelOpts = options.labels; + const labelFont = toFont(labelOpts.font); + const fontSize = labelFont.size; + const titleHeight = this._computeTitleHeight(); + const { boxWidth, itemHeight } = getBoxSize(labelOpts, fontSize); + let width, height; + ctx.font = labelFont.string; + if (this.isHorizontal()) { + width = this.maxWidth; + height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10; + } else { + height = this.maxHeight; + width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10; + } + this.width = Math.min(width, options.maxWidth || this.maxWidth); + this.height = Math.min(height, options.maxHeight || this.maxHeight); + } + _fitRows(titleHeight, fontSize, boxWidth, itemHeight) { + const { ctx, maxWidth, options: { labels: { padding } } } = this; + const hitboxes = this.legendHitBoxes = []; + const lineWidths = this.lineWidths = [ + 0 + ]; + const lineHeight = itemHeight + padding; + let totalHeight = titleHeight; + ctx.textAlign = "left"; + ctx.textBaseline = "middle"; + let row = -1; + let top = -lineHeight; + this.legendItems.forEach((legendItem, i) => { + const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width; + if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) { + totalHeight += lineHeight; + lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0; + top += lineHeight; + row++; + } + hitboxes[i] = { + left: 0, + top, + row, + width: itemWidth, + height: itemHeight + }; + lineWidths[lineWidths.length - 1] += itemWidth + padding; + }); + return totalHeight; + } + _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) { + const { ctx, maxHeight, options: { labels: { padding } } } = this; + const hitboxes = this.legendHitBoxes = []; + const columnSizes = this.columnSizes = []; + const heightLimit = maxHeight - titleHeight; + let totalWidth = padding; + let currentColWidth = 0; + let currentColHeight = 0; + let left = 0; + let col = 0; + this.legendItems.forEach((legendItem, i) => { + const { itemWidth, itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight); + if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) { + totalWidth += currentColWidth + padding; + columnSizes.push({ + width: currentColWidth, + height: currentColHeight + }); + left += currentColWidth + padding; + col++; + currentColWidth = currentColHeight = 0; + } + hitboxes[i] = { + left, + top: currentColHeight, + col, + width: itemWidth, + height: itemHeight + }; + currentColWidth = Math.max(currentColWidth, itemWidth); + currentColHeight += itemHeight + padding; + }); + totalWidth += currentColWidth; + columnSizes.push({ + width: currentColWidth, + height: currentColHeight + }); + return totalWidth; + } + adjustHitBoxes() { + if (!this.options.display) { + return; + } + const titleHeight = this._computeTitleHeight(); + const { legendHitBoxes: hitboxes, options: { align, labels: { padding }, rtl } } = this; + const rtlHelper = getRtlAdapter(rtl, this.left, this.width); + if (this.isHorizontal()) { + let row = 0; + let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); + for (const hitbox of hitboxes) { + if (row !== hitbox.row) { + row = hitbox.row; + left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); + } + hitbox.top += this.top + titleHeight + padding; + hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width); + left += hitbox.width + padding; + } + } else { + let col = 0; + let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); + for (const hitbox of hitboxes) { + if (hitbox.col !== col) { + col = hitbox.col; + top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); + } + hitbox.top = top; + hitbox.left += this.left + padding; + hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width); + top += hitbox.height + padding; + } + } + } + isHorizontal() { + return this.options.position === "top" || this.options.position === "bottom"; + } + draw() { + if (this.options.display) { + const ctx = this.ctx; + clipArea(ctx, this); + this._draw(); + unclipArea(ctx); + } + } + _draw() { + const { options: opts, columnSizes, lineWidths, ctx } = this; + const { align, labels: labelOpts } = opts; + const defaultColor = defaults.color; + const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); + const labelFont = toFont(labelOpts.font); + const { padding } = labelOpts; + const fontSize = labelFont.size; + const halfFontSize = fontSize / 2; + let cursor; + this.drawTitle(); + ctx.textAlign = rtlHelper.textAlign("left"); + ctx.textBaseline = "middle"; + ctx.lineWidth = 0.5; + ctx.font = labelFont.string; + const { boxWidth, boxHeight, itemHeight } = getBoxSize(labelOpts, fontSize); + const drawLegendBox = function(x, y, legendItem) { + if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) { + return; + } + ctx.save(); + const lineWidth = valueOrDefault(legendItem.lineWidth, 1); + ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor); + ctx.lineCap = valueOrDefault(legendItem.lineCap, "butt"); + ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0); + ctx.lineJoin = valueOrDefault(legendItem.lineJoin, "miter"); + ctx.lineWidth = lineWidth; + ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor); + ctx.setLineDash(valueOrDefault(legendItem.lineDash, [])); + if (labelOpts.usePointStyle) { + const drawOptions = { + radius: boxHeight * Math.SQRT2 / 2, + pointStyle: legendItem.pointStyle, + rotation: legendItem.rotation, + borderWidth: lineWidth + }; + const centerX = rtlHelper.xPlus(x, boxWidth / 2); + const centerY = y + halfFontSize; + drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth); + } else { + const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0); + const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth); + const borderRadius = toTRBLCorners(legendItem.borderRadius); + ctx.beginPath(); + if (Object.values(borderRadius).some((v) => v !== 0)) { + addRoundedRectPath(ctx, { + x: xBoxLeft, + y: yBoxTop, + w: boxWidth, + h: boxHeight, + radius: borderRadius + }); + } else { + ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight); + } + ctx.fill(); + if (lineWidth !== 0) { + ctx.stroke(); + } + } + ctx.restore(); + }; + const fillText = function(x, y, legendItem) { + renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, { + strikethrough: legendItem.hidden, + textAlign: rtlHelper.textAlign(legendItem.textAlign) + }); + }; + const isHorizontal = this.isHorizontal(); + const titleHeight = this._computeTitleHeight(); + if (isHorizontal) { + cursor = { + x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]), + y: this.top + padding + titleHeight, + line: 0 + }; + } else { + cursor = { + x: this.left + padding, + y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height), + line: 0 + }; + } + overrideTextDirection(this.ctx, opts.textDirection); + const lineHeight = itemHeight + padding; + this.legendItems.forEach((legendItem, i) => { + ctx.strokeStyle = legendItem.fontColor; + ctx.fillStyle = legendItem.fontColor; + const textWidth = ctx.measureText(legendItem.text).width; + const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign)); + const width = boxWidth + halfFontSize + textWidth; + let x = cursor.x; + let y = cursor.y; + rtlHelper.setWidth(this.width); + if (isHorizontal) { + if (i > 0 && x + width + padding > this.right) { + y = cursor.y += lineHeight; + cursor.line++; + x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]); + } + } else if (i > 0 && y + lineHeight > this.bottom) { + x = cursor.x = x + columnSizes[cursor.line].width + padding; + cursor.line++; + y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height); + } + const realX = rtlHelper.x(x); + drawLegendBox(realX, y, legendItem); + x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl); + fillText(rtlHelper.x(x), y, legendItem); + if (isHorizontal) { + cursor.x += width + padding; + } else if (typeof legendItem.text !== "string") { + const fontLineHeight = labelFont.lineHeight; + cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding; + } else { + cursor.y += lineHeight; + } + }); + restoreTextDirection(this.ctx, opts.textDirection); + } + drawTitle() { + const opts = this.options; + const titleOpts = opts.title; + const titleFont = toFont(titleOpts.font); + const titlePadding = toPadding(titleOpts.padding); + if (!titleOpts.display) { + return; + } + const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); + const ctx = this.ctx; + const position = titleOpts.position; + const halfFontSize = titleFont.size / 2; + const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize; + let y; + let left = this.left; + let maxWidth = this.width; + if (this.isHorizontal()) { + maxWidth = Math.max(...this.lineWidths); + y = this.top + topPaddingPlusHalfFontSize; + left = _alignStartEnd(opts.align, left, this.right - maxWidth); + } else { + const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0); + y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight()); + } + const x = _alignStartEnd(position, left, left + maxWidth); + ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position)); + ctx.textBaseline = "middle"; + ctx.strokeStyle = titleOpts.color; + ctx.fillStyle = titleOpts.color; + ctx.font = titleFont.string; + renderText(ctx, titleOpts.text, x, y, titleFont); + } + _computeTitleHeight() { + const titleOpts = this.options.title; + const titleFont = toFont(titleOpts.font); + const titlePadding = toPadding(titleOpts.padding); + return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0; + } + _getLegendItemAt(x, y) { + let i, hitBox, lh; + if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) { + lh = this.legendHitBoxes; + for (i = 0; i < lh.length; ++i) { + hitBox = lh[i]; + if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) { + return this.legendItems[i]; + } + } + } + return null; + } + handleEvent(e) { + const opts = this.options; + if (!isListened(e.type, opts)) { + return; + } + const hoveredItem = this._getLegendItemAt(e.x, e.y); + if (e.type === "mousemove" || e.type === "mouseout") { + const previous = this._hoveredItem; + const sameItem = itemsEqual(previous, hoveredItem); + if (previous && !sameItem) { + callback(opts.onLeave, [ + e, + previous, + this + ], this); + } + this._hoveredItem = hoveredItem; + if (hoveredItem && !sameItem) { + callback(opts.onHover, [ + e, + hoveredItem, + this + ], this); + } + } else if (hoveredItem) { + callback(opts.onClick, [ + e, + hoveredItem, + this + ], this); + } + } + }; + plugin_legend = { + id: "legend", + _element: Legend, + start(chart2, _args, options) { + const legend = chart2.legend = new Legend({ + ctx: chart2.ctx, + options, + chart: chart2 + }); + layouts.configure(chart2, legend, options); + layouts.addBox(chart2, legend); + }, + stop(chart2) { + layouts.removeBox(chart2, chart2.legend); + delete chart2.legend; + }, + beforeUpdate(chart2, _args, options) { + const legend = chart2.legend; + layouts.configure(chart2, legend, options); + legend.options = options; + }, + afterUpdate(chart2) { + const legend = chart2.legend; + legend.buildLabels(); + legend.adjustHitBoxes(); + }, + afterEvent(chart2, args) { + if (!args.replay) { + chart2.legend.handleEvent(args.event); + } + }, + defaults: { + display: true, + position: "top", + align: "center", + fullSize: true, + reverse: false, + weight: 1e3, + onClick(e, legendItem, legend) { + const index2 = legendItem.datasetIndex; + const ci = legend.chart; + if (ci.isDatasetVisible(index2)) { + ci.hide(index2); + legendItem.hidden = true; + } else { + ci.show(index2); + legendItem.hidden = false; + } + }, + onHover: null, + onLeave: null, + labels: { + color: (ctx) => ctx.chart.options.color, + boxWidth: 40, + padding: 10, + generateLabels(chart2) { + const datasets = chart2.data.datasets; + const { labels: { usePointStyle, pointStyle, textAlign, color: color2, useBorderRadius, borderRadius } } = chart2.legend.options; + return chart2._getSortedDatasetMetas().map((meta) => { + const style = meta.controller.getStyle(usePointStyle ? 0 : void 0); + const borderWidth2 = toPadding(style.borderWidth); + return { + text: datasets[meta.index].label, + fillStyle: style.backgroundColor, + fontColor: color2, + hidden: !meta.visible, + lineCap: style.borderCapStyle, + lineDash: style.borderDash, + lineDashOffset: style.borderDashOffset, + lineJoin: style.borderJoinStyle, + lineWidth: (borderWidth2.width + borderWidth2.height) / 4, + strokeStyle: style.borderColor, + pointStyle: pointStyle || style.pointStyle, + rotation: style.rotation, + textAlign: textAlign || style.textAlign, + borderRadius: useBorderRadius && (borderRadius || style.borderRadius), + datasetIndex: meta.index + }; + }, this); + } + }, + title: { + color: (ctx) => ctx.chart.options.color, + display: false, + position: "center", + text: "" + } + }, + descriptors: { + _scriptable: (name) => !name.startsWith("on"), + labels: { + _scriptable: (name) => ![ + "generateLabels", + "filter", + "sort" + ].includes(name) + } + } + }; + Title = class extends Element2 { + constructor(config) { + super(); + this.chart = config.chart; + this.options = config.options; + this.ctx = config.ctx; + this._padding = void 0; + this.top = void 0; + this.bottom = void 0; + this.left = void 0; + this.right = void 0; + this.width = void 0; + this.height = void 0; + this.position = void 0; + this.weight = void 0; + this.fullSize = void 0; + } + update(maxWidth, maxHeight) { + const opts = this.options; + this.left = 0; + this.top = 0; + if (!opts.display) { + this.width = this.height = this.right = this.bottom = 0; + return; + } + this.width = this.right = maxWidth; + this.height = this.bottom = maxHeight; + const lineCount = isArray(opts.text) ? opts.text.length : 1; + this._padding = toPadding(opts.padding); + const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height; + if (this.isHorizontal()) { + this.height = textSize; + } else { + this.width = textSize; + } + } + isHorizontal() { + const pos = this.options.position; + return pos === "top" || pos === "bottom"; + } + _drawArgs(offset) { + const { top, left, bottom, right, options } = this; + const align = options.align; + let rotation = 0; + let maxWidth, titleX, titleY; + if (this.isHorizontal()) { + titleX = _alignStartEnd(align, left, right); + titleY = top + offset; + maxWidth = right - left; + } else { + if (options.position === "left") { + titleX = left + offset; + titleY = _alignStartEnd(align, bottom, top); + rotation = PI * -0.5; + } else { + titleX = right - offset; + titleY = _alignStartEnd(align, top, bottom); + rotation = PI * 0.5; + } + maxWidth = bottom - top; + } + return { + titleX, + titleY, + maxWidth, + rotation + }; + } + draw() { + const ctx = this.ctx; + const opts = this.options; + if (!opts.display) { + return; + } + const fontOpts = toFont(opts.font); + const lineHeight = fontOpts.lineHeight; + const offset = lineHeight / 2 + this._padding.top; + const { titleX, titleY, maxWidth, rotation } = this._drawArgs(offset); + renderText(ctx, opts.text, 0, 0, fontOpts, { + color: opts.color, + maxWidth, + rotation, + textAlign: _toLeftRightCenter(opts.align), + textBaseline: "middle", + translation: [ + titleX, + titleY + ] + }); + } + }; + plugin_title = { + id: "title", + _element: Title, + start(chart2, _args, options) { + createTitle(chart2, options); + }, + stop(chart2) { + const titleBlock = chart2.titleBlock; + layouts.removeBox(chart2, titleBlock); + delete chart2.titleBlock; + }, + beforeUpdate(chart2, _args, options) { + const title = chart2.titleBlock; + layouts.configure(chart2, title, options); + title.options = options; + }, + defaults: { + align: "center", + display: false, + font: { + weight: "bold" + }, + fullSize: true, + padding: 10, + position: "top", + text: "", + weight: 2e3 + }, + defaultRoutes: { + color: "color" + }, + descriptors: { + _scriptable: true, + _indexable: false + } + }; + map2 = /* @__PURE__ */ new WeakMap(); + plugin_subtitle = { + id: "subtitle", + start(chart2, _args, options) { + const title = new Title({ + ctx: chart2.ctx, + options, + chart: chart2 + }); + layouts.configure(chart2, title, options); + layouts.addBox(chart2, title); + map2.set(chart2, title); + }, + stop(chart2) { + layouts.removeBox(chart2, map2.get(chart2)); + map2.delete(chart2); + }, + beforeUpdate(chart2, _args, options) { + const title = map2.get(chart2); + layouts.configure(chart2, title, options); + title.options = options; + }, + defaults: { + align: "center", + display: false, + font: { + weight: "normal" + }, + fullSize: true, + padding: 0, + position: "top", + text: "", + weight: 1500 + }, + defaultRoutes: { + color: "color" + }, + descriptors: { + _scriptable: true, + _indexable: false + } + }; + positioners = { + average(items) { + if (!items.length) { + return false; + } + let i, len; + let xSet = /* @__PURE__ */ new Set(); + let y = 0; + let count = 0; + for (i = 0, len = items.length; i < len; ++i) { + const el2 = items[i].element; + if (el2 && el2.hasValue()) { + const pos = el2.tooltipPosition(); + xSet.add(pos.x); + y += pos.y; + ++count; + } + } + if (count === 0 || xSet.size === 0) { + return false; + } + const xAverage = [ + ...xSet + ].reduce((a, b) => a + b) / xSet.size; + return { + x: xAverage, + y: y / count + }; + }, + nearest(items, eventPosition) { + if (!items.length) { + return false; + } + let x = eventPosition.x; + let y = eventPosition.y; + let minDistance = Number.POSITIVE_INFINITY; + let i, len, nearestElement; + for (i = 0, len = items.length; i < len; ++i) { + const el2 = items[i].element; + if (el2 && el2.hasValue()) { + const center = el2.getCenterPoint(); + const d = distanceBetweenPoints(eventPosition, center); + if (d < minDistance) { + minDistance = d; + nearestElement = el2; + } + } + } + if (nearestElement) { + const tp = nearestElement.tooltipPosition(); + x = tp.x; + y = tp.y; + } + return { + x, + y + }; + } + }; + defaultCallbacks = { + beforeTitle: noop, + title(tooltipItems) { + if (tooltipItems.length > 0) { + const item = tooltipItems[0]; + const labels = item.chart.data.labels; + const labelCount = labels ? labels.length : 0; + if (this && this.options && this.options.mode === "dataset") { + return item.dataset.label || ""; + } else if (item.label) { + return item.label; + } else if (labelCount > 0 && item.dataIndex < labelCount) { + return labels[item.dataIndex]; + } + } + return ""; + }, + afterTitle: noop, + beforeBody: noop, + beforeLabel: noop, + label(tooltipItem) { + if (this && this.options && this.options.mode === "dataset") { + return tooltipItem.label + ": " + tooltipItem.formattedValue || tooltipItem.formattedValue; + } + let label = tooltipItem.dataset.label || ""; + if (label) { + label += ": "; + } + const value = tooltipItem.formattedValue; + if (!isNullOrUndef(value)) { + label += value; + } + return label; + }, + labelColor(tooltipItem) { + const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); + const options = meta.controller.getStyle(tooltipItem.dataIndex); + return { + borderColor: options.borderColor, + backgroundColor: options.backgroundColor, + borderWidth: options.borderWidth, + borderDash: options.borderDash, + borderDashOffset: options.borderDashOffset, + borderRadius: 0 + }; + }, + labelTextColor() { + return this.options.bodyColor; + }, + labelPointStyle(tooltipItem) { + const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); + const options = meta.controller.getStyle(tooltipItem.dataIndex); + return { + pointStyle: options.pointStyle, + rotation: options.rotation + }; + }, + afterLabel: noop, + afterBody: noop, + beforeFooter: noop, + footer: noop, + afterFooter: noop + }; + Tooltip = class extends Element2 { + constructor(config) { + super(); + this.opacity = 0; + this._active = []; + this._eventPosition = void 0; + this._size = void 0; + this._cachedAnimations = void 0; + this._tooltipItems = []; + this.$animations = void 0; + this.$context = void 0; + this.chart = config.chart; + this.options = config.options; + this.dataPoints = void 0; + this.title = void 0; + this.beforeBody = void 0; + this.body = void 0; + this.afterBody = void 0; + this.footer = void 0; + this.xAlign = void 0; + this.yAlign = void 0; + this.x = void 0; + this.y = void 0; + this.height = void 0; + this.width = void 0; + this.caretX = void 0; + this.caretY = void 0; + this.labelColors = void 0; + this.labelPointStyles = void 0; + this.labelTextColors = void 0; + } + initialize(options) { + this.options = options; + this._cachedAnimations = void 0; + this.$context = void 0; + } + _resolveAnimations() { + const cached = this._cachedAnimations; + if (cached) { + return cached; + } + const chart2 = this.chart; + const options = this.options.setContext(this.getContext()); + const opts = options.enabled && chart2.options.animation && options.animations; + const animations = new Animations(this.chart, opts); + if (opts._cacheable) { + this._cachedAnimations = Object.freeze(animations); + } + return animations; + } + getContext() { + return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems)); + } + getTitle(context, options) { + const { callbacks } = options; + const beforeTitle = invokeCallbackWithFallback(callbacks, "beforeTitle", this, context); + const title = invokeCallbackWithFallback(callbacks, "title", this, context); + const afterTitle = invokeCallbackWithFallback(callbacks, "afterTitle", this, context); + let lines = []; + lines = pushOrConcat(lines, splitNewlines(beforeTitle)); + lines = pushOrConcat(lines, splitNewlines(title)); + lines = pushOrConcat(lines, splitNewlines(afterTitle)); + return lines; + } + getBeforeBody(tooltipItems, options) { + return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "beforeBody", this, tooltipItems)); + } + getBody(tooltipItems, options) { + const { callbacks } = options; + const bodyItems = []; + each(tooltipItems, (context) => { + const bodyItem = { + before: [], + lines: [], + after: [] + }; + const scoped = overrideCallbacks(callbacks, context); + pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, "beforeLabel", this, context))); + pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, "label", this, context)); + pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, "afterLabel", this, context))); + bodyItems.push(bodyItem); + }); + return bodyItems; + } + getAfterBody(tooltipItems, options) { + return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "afterBody", this, tooltipItems)); + } + getFooter(tooltipItems, options) { + const { callbacks } = options; + const beforeFooter = invokeCallbackWithFallback(callbacks, "beforeFooter", this, tooltipItems); + const footer = invokeCallbackWithFallback(callbacks, "footer", this, tooltipItems); + const afterFooter = invokeCallbackWithFallback(callbacks, "afterFooter", this, tooltipItems); + let lines = []; + lines = pushOrConcat(lines, splitNewlines(beforeFooter)); + lines = pushOrConcat(lines, splitNewlines(footer)); + lines = pushOrConcat(lines, splitNewlines(afterFooter)); + return lines; + } + _createItems(options) { + const active = this._active; + const data = this.chart.data; + const labelColors = []; + const labelPointStyles = []; + const labelTextColors = []; + let tooltipItems = []; + let i, len; + for (i = 0, len = active.length; i < len; ++i) { + tooltipItems.push(createTooltipItem(this.chart, active[i])); + } + if (options.filter) { + tooltipItems = tooltipItems.filter((element, index2, array) => options.filter(element, index2, array, data)); + } + if (options.itemSort) { + tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data)); + } + each(tooltipItems, (context) => { + const scoped = overrideCallbacks(options.callbacks, context); + labelColors.push(invokeCallbackWithFallback(scoped, "labelColor", this, context)); + labelPointStyles.push(invokeCallbackWithFallback(scoped, "labelPointStyle", this, context)); + labelTextColors.push(invokeCallbackWithFallback(scoped, "labelTextColor", this, context)); + }); + this.labelColors = labelColors; + this.labelPointStyles = labelPointStyles; + this.labelTextColors = labelTextColors; + this.dataPoints = tooltipItems; + return tooltipItems; + } + update(changed, replay) { + const options = this.options.setContext(this.getContext()); + const active = this._active; + let properties; + let tooltipItems = []; + if (!active.length) { + if (this.opacity !== 0) { + properties = { + opacity: 0 + }; + } + } else { + const position = positioners[options.position].call(this, active, this._eventPosition); + tooltipItems = this._createItems(options); + this.title = this.getTitle(tooltipItems, options); + this.beforeBody = this.getBeforeBody(tooltipItems, options); + this.body = this.getBody(tooltipItems, options); + this.afterBody = this.getAfterBody(tooltipItems, options); + this.footer = this.getFooter(tooltipItems, options); + const size = this._size = getTooltipSize(this, options); + const positionAndSize = Object.assign({}, position, size); + const alignment = determineAlignment(this.chart, options, positionAndSize); + const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart); + this.xAlign = alignment.xAlign; + this.yAlign = alignment.yAlign; + properties = { + opacity: 1, + x: backgroundPoint.x, + y: backgroundPoint.y, + width: size.width, + height: size.height, + caretX: position.x, + caretY: position.y + }; + } + this._tooltipItems = tooltipItems; + this.$context = void 0; + if (properties) { + this._resolveAnimations().update(this, properties); + } + if (changed && options.external) { + options.external.call(this, { + chart: this.chart, + tooltip: this, + replay + }); + } + } + drawCaret(tooltipPoint, ctx, size, options) { + const caretPosition = this.getCaretPosition(tooltipPoint, size, options); + ctx.lineTo(caretPosition.x1, caretPosition.y1); + ctx.lineTo(caretPosition.x2, caretPosition.y2); + ctx.lineTo(caretPosition.x3, caretPosition.y3); + } + getCaretPosition(tooltipPoint, size, options) { + const { xAlign, yAlign } = this; + const { caretSize, cornerRadius: cornerRadius2 } = options; + const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius2); + const { x: ptX, y: ptY } = tooltipPoint; + const { width, height } = size; + let x1, x2, x3, y1, y2, y3; + if (yAlign === "center") { + y2 = ptY + height / 2; + if (xAlign === "left") { + x1 = ptX; + x2 = x1 - caretSize; + y1 = y2 + caretSize; + y3 = y2 - caretSize; + } else { + x1 = ptX + width; + x2 = x1 + caretSize; + y1 = y2 - caretSize; + y3 = y2 + caretSize; + } + x3 = x1; + } else { + if (xAlign === "left") { + x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize; + } else if (xAlign === "right") { + x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize; + } else { + x2 = this.caretX; + } + if (yAlign === "top") { + y1 = ptY; + y2 = y1 - caretSize; + x1 = x2 - caretSize; + x3 = x2 + caretSize; + } else { + y1 = ptY + height; + y2 = y1 + caretSize; + x1 = x2 + caretSize; + x3 = x2 - caretSize; + } + y3 = y1; + } + return { + x1, + x2, + x3, + y1, + y2, + y3 + }; + } + drawTitle(pt, ctx, options) { + const title = this.title; + const length = title.length; + let titleFont, titleSpacing, i; + if (length) { + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + pt.x = getAlignedX(this, options.titleAlign, options); + ctx.textAlign = rtlHelper.textAlign(options.titleAlign); + ctx.textBaseline = "middle"; + titleFont = toFont(options.titleFont); + titleSpacing = options.titleSpacing; + ctx.fillStyle = options.titleColor; + ctx.font = titleFont.string; + for (i = 0; i < length; ++i) { + ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2); + pt.y += titleFont.lineHeight + titleSpacing; + if (i + 1 === length) { + pt.y += options.titleMarginBottom - titleSpacing; + } + } + } + } + _drawColorBox(ctx, pt, i, rtlHelper, options) { + const labelColor = this.labelColors[i]; + const labelPointStyle = this.labelPointStyles[i]; + const { boxHeight, boxWidth } = options; + const bodyFont = toFont(options.bodyFont); + const colorX = getAlignedX(this, "left", options); + const rtlColorX = rtlHelper.x(colorX); + const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0; + const colorY = pt.y + yOffSet; + if (options.usePointStyle) { + const drawOptions = { + radius: Math.min(boxWidth, boxHeight) / 2, + pointStyle: labelPointStyle.pointStyle, + rotation: labelPointStyle.rotation, + borderWidth: 1 + }; + const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2; + const centerY = colorY + boxHeight / 2; + ctx.strokeStyle = options.multiKeyBackground; + ctx.fillStyle = options.multiKeyBackground; + drawPoint(ctx, drawOptions, centerX, centerY); + ctx.strokeStyle = labelColor.borderColor; + ctx.fillStyle = labelColor.backgroundColor; + drawPoint(ctx, drawOptions, centerX, centerY); + } else { + ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1; + ctx.strokeStyle = labelColor.borderColor; + ctx.setLineDash(labelColor.borderDash || []); + ctx.lineDashOffset = labelColor.borderDashOffset || 0; + const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth); + const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2); + const borderRadius = toTRBLCorners(labelColor.borderRadius); + if (Object.values(borderRadius).some((v) => v !== 0)) { + ctx.beginPath(); + ctx.fillStyle = options.multiKeyBackground; + addRoundedRectPath(ctx, { + x: outerX, + y: colorY, + w: boxWidth, + h: boxHeight, + radius: borderRadius + }); + ctx.fill(); + ctx.stroke(); + ctx.fillStyle = labelColor.backgroundColor; + ctx.beginPath(); + addRoundedRectPath(ctx, { + x: innerX, + y: colorY + 1, + w: boxWidth - 2, + h: boxHeight - 2, + radius: borderRadius + }); + ctx.fill(); + } else { + ctx.fillStyle = options.multiKeyBackground; + ctx.fillRect(outerX, colorY, boxWidth, boxHeight); + ctx.strokeRect(outerX, colorY, boxWidth, boxHeight); + ctx.fillStyle = labelColor.backgroundColor; + ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2); + } + } + ctx.fillStyle = this.labelTextColors[i]; + } + drawBody(pt, ctx, options) { + const { body } = this; + const { bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding } = options; + const bodyFont = toFont(options.bodyFont); + let bodyLineHeight = bodyFont.lineHeight; + let xLinePadding = 0; + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + const fillLineOfText = function(line) { + ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2); + pt.y += bodyLineHeight + bodySpacing; + }; + const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign); + let bodyItem, textColor, lines, i, j, ilen, jlen; + ctx.textAlign = bodyAlign; + ctx.textBaseline = "middle"; + ctx.font = bodyFont.string; + pt.x = getAlignedX(this, bodyAlignForCalculation, options); + ctx.fillStyle = options.bodyColor; + each(this.beforeBody, fillLineOfText); + xLinePadding = displayColors && bodyAlignForCalculation !== "right" ? bodyAlign === "center" ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0; + for (i = 0, ilen = body.length; i < ilen; ++i) { + bodyItem = body[i]; + textColor = this.labelTextColors[i]; + ctx.fillStyle = textColor; + each(bodyItem.before, fillLineOfText); + lines = bodyItem.lines; + if (displayColors && lines.length) { + this._drawColorBox(ctx, pt, i, rtlHelper, options); + bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight); + } + for (j = 0, jlen = lines.length; j < jlen; ++j) { + fillLineOfText(lines[j]); + bodyLineHeight = bodyFont.lineHeight; + } + each(bodyItem.after, fillLineOfText); + } + xLinePadding = 0; + bodyLineHeight = bodyFont.lineHeight; + each(this.afterBody, fillLineOfText); + pt.y -= bodySpacing; + } + drawFooter(pt, ctx, options) { + const footer = this.footer; + const length = footer.length; + let footerFont, i; + if (length) { + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + pt.x = getAlignedX(this, options.footerAlign, options); + pt.y += options.footerMarginTop; + ctx.textAlign = rtlHelper.textAlign(options.footerAlign); + ctx.textBaseline = "middle"; + footerFont = toFont(options.footerFont); + ctx.fillStyle = options.footerColor; + ctx.font = footerFont.string; + for (i = 0; i < length; ++i) { + ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2); + pt.y += footerFont.lineHeight + options.footerSpacing; + } + } + } + drawBackground(pt, ctx, tooltipSize, options) { + const { xAlign, yAlign } = this; + const { x, y } = pt; + const { width, height } = tooltipSize; + const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(options.cornerRadius); + ctx.fillStyle = options.backgroundColor; + ctx.strokeStyle = options.borderColor; + ctx.lineWidth = options.borderWidth; + ctx.beginPath(); + ctx.moveTo(x + topLeft, y); + if (yAlign === "top") { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + width - topRight, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + topRight); + if (yAlign === "center" && xAlign === "right") { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + width, y + height - bottomRight); + ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height); + if (yAlign === "bottom") { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + bottomLeft, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft); + if (yAlign === "center" && xAlign === "left") { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x, y + topLeft); + ctx.quadraticCurveTo(x, y, x + topLeft, y); + ctx.closePath(); + ctx.fill(); + if (options.borderWidth > 0) { + ctx.stroke(); + } + } + _updateAnimationTarget(options) { + const chart2 = this.chart; + const anims = this.$animations; + const animX = anims && anims.x; + const animY = anims && anims.y; + if (animX || animY) { + const position = positioners[options.position].call(this, this._active, this._eventPosition); + if (!position) { + return; + } + const size = this._size = getTooltipSize(this, options); + const positionAndSize = Object.assign({}, position, this._size); + const alignment = determineAlignment(chart2, options, positionAndSize); + const point = getBackgroundPoint(options, positionAndSize, alignment, chart2); + if (animX._to !== point.x || animY._to !== point.y) { + this.xAlign = alignment.xAlign; + this.yAlign = alignment.yAlign; + this.width = size.width; + this.height = size.height; + this.caretX = position.x; + this.caretY = position.y; + this._resolveAnimations().update(this, point); + } + } + } + _willRender() { + return !!this.opacity; + } + draw(ctx) { + const options = this.options.setContext(this.getContext()); + let opacity = this.opacity; + if (!opacity) { + return; + } + this._updateAnimationTarget(options); + const tooltipSize = { + width: this.width, + height: this.height + }; + const pt = { + x: this.x, + y: this.y + }; + opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity; + const padding = toPadding(options.padding); + const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length; + if (options.enabled && hasTooltipContent) { + ctx.save(); + ctx.globalAlpha = opacity; + this.drawBackground(pt, ctx, tooltipSize, options); + overrideTextDirection(ctx, options.textDirection); + pt.y += padding.top; + this.drawTitle(pt, ctx, options); + this.drawBody(pt, ctx, options); + this.drawFooter(pt, ctx, options); + restoreTextDirection(ctx, options.textDirection); + ctx.restore(); + } + } + getActiveElements() { + return this._active || []; + } + setActiveElements(activeElements, eventPosition) { + const lastActive = this._active; + const active = activeElements.map(({ datasetIndex, index: index2 }) => { + const meta = this.chart.getDatasetMeta(datasetIndex); + if (!meta) { + throw new Error("Cannot find a dataset at index " + datasetIndex); + } + return { + datasetIndex, + element: meta.data[index2], + index: index2 + }; + }); + const changed = !_elementsEqual(lastActive, active); + const positionChanged = this._positionChanged(active, eventPosition); + if (changed || positionChanged) { + this._active = active; + this._eventPosition = eventPosition; + this._ignoreReplayEvents = true; + this.update(true); + } + } + handleEvent(e, replay, inChartArea = true) { + if (replay && this._ignoreReplayEvents) { + return false; + } + this._ignoreReplayEvents = false; + const options = this.options; + const lastActive = this._active || []; + const active = this._getActiveElements(e, lastActive, replay, inChartArea); + const positionChanged = this._positionChanged(active, e); + const changed = replay || !_elementsEqual(active, lastActive) || positionChanged; + if (changed) { + this._active = active; + if (options.enabled || options.external) { + this._eventPosition = { + x: e.x, + y: e.y + }; + this.update(true, replay); + } + } + return changed; + } + _getActiveElements(e, lastActive, replay, inChartArea) { + const options = this.options; + if (e.type === "mouseout") { + return []; + } + if (!inChartArea) { + return lastActive.filter((i) => this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== void 0); + } + const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay); + if (options.reverse) { + active.reverse(); + } + return active; + } + _positionChanged(active, e) { + const { caretX, caretY, options } = this; + const position = positioners[options.position].call(this, active, e); + return position !== false && (caretX !== position.x || caretY !== position.y); + } + }; + __publicField(Tooltip, "positioners", positioners); + plugin_tooltip = { + id: "tooltip", + _element: Tooltip, + positioners, + afterInit(chart2, _args, options) { + if (options) { + chart2.tooltip = new Tooltip({ + chart: chart2, + options + }); + } + }, + beforeUpdate(chart2, _args, options) { + if (chart2.tooltip) { + chart2.tooltip.initialize(options); + } + }, + reset(chart2, _args, options) { + if (chart2.tooltip) { + chart2.tooltip.initialize(options); + } + }, + afterDraw(chart2) { + const tooltip = chart2.tooltip; + if (tooltip && tooltip._willRender()) { + const args = { + tooltip + }; + if (chart2.notifyPlugins("beforeTooltipDraw", { + ...args, + cancelable: true + }) === false) { + return; + } + tooltip.draw(chart2.ctx); + chart2.notifyPlugins("afterTooltipDraw", args); + } + }, + afterEvent(chart2, args) { + if (chart2.tooltip) { + const useFinalPosition = args.replay; + if (chart2.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) { + args.changed = true; + } + } + }, + defaults: { + enabled: true, + external: null, + position: "average", + backgroundColor: "rgba(0,0,0,0.8)", + titleColor: "#fff", + titleFont: { + weight: "bold" + }, + titleSpacing: 2, + titleMarginBottom: 6, + titleAlign: "left", + bodyColor: "#fff", + bodySpacing: 2, + bodyFont: {}, + bodyAlign: "left", + footerColor: "#fff", + footerSpacing: 2, + footerMarginTop: 6, + footerFont: { + weight: "bold" + }, + footerAlign: "left", + padding: 6, + caretPadding: 2, + caretSize: 5, + cornerRadius: 6, + boxHeight: (ctx, opts) => opts.bodyFont.size, + boxWidth: (ctx, opts) => opts.bodyFont.size, + multiKeyBackground: "#fff", + displayColors: true, + boxPadding: 0, + borderColor: "rgba(0,0,0,0)", + borderWidth: 0, + animation: { + duration: 400, + easing: "easeOutQuart" + }, + animations: { + numbers: { + type: "number", + properties: [ + "x", + "y", + "width", + "height", + "caretX", + "caretY" + ] + }, + opacity: { + easing: "linear", + duration: 200 + } + }, + callbacks: defaultCallbacks + }, + defaultRoutes: { + bodyFont: "font", + footerFont: "font", + titleFont: "font" + }, + descriptors: { + _scriptable: (name) => name !== "filter" && name !== "itemSort" && name !== "external", + _indexable: false, + callbacks: { + _scriptable: false, + _indexable: false + }, + animation: { + _fallback: false + }, + animations: { + _fallback: "animation" + } + }, + additionalOptionScopes: [ + "interaction" + ] + }; + plugins = /* @__PURE__ */ Object.freeze({ + __proto__: null, + Colors: plugin_colors, + Decimation: plugin_decimation, + Filler: index, + Legend: plugin_legend, + SubTitle: plugin_subtitle, + Title: plugin_title, + Tooltip: plugin_tooltip + }); + addIfString = (labels, raw, index2, addedLabels) => { + if (typeof raw === "string") { + index2 = labels.push(raw) - 1; + addedLabels.unshift({ + index: index2, + label: raw + }); + } else if (isNaN(raw)) { + index2 = null; + } + return index2; + }; + validIndex = (index2, max) => index2 === null ? null : _limitValue(Math.round(index2), 0, max); + CategoryScale = class extends Scale { + constructor(cfg) { + super(cfg); + this._startValue = void 0; + this._valueRange = 0; + this._addedLabels = []; + } + init(scaleOptions) { + const added = this._addedLabels; + if (added.length) { + const labels = this.getLabels(); + for (const { index: index2, label } of added) { + if (labels[index2] === label) { + labels.splice(index2, 1); + } + } + this._addedLabels = []; + } + super.init(scaleOptions); + } + parse(raw, index2) { + if (isNullOrUndef(raw)) { + return null; + } + const labels = this.getLabels(); + index2 = isFinite(index2) && labels[index2] === raw ? index2 : findOrAddLabel(labels, raw, valueOrDefault(index2, raw), this._addedLabels); + return validIndex(index2, labels.length - 1); + } + determineDataLimits() { + const { minDefined, maxDefined } = this.getUserBounds(); + let { min, max } = this.getMinMax(true); + if (this.options.bounds === "ticks") { + if (!minDefined) { + min = 0; + } + if (!maxDefined) { + max = this.getLabels().length - 1; + } + } + this.min = min; + this.max = max; + } + buildTicks() { + const min = this.min; + const max = this.max; + const offset = this.options.offset; + const ticks = []; + let labels = this.getLabels(); + labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1); + this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1); + this._startValue = this.min - (offset ? 0.5 : 0); + for (let value = min; value <= max; value++) { + ticks.push({ + value + }); + } + return ticks; + } + getLabelForValue(value) { + return _getLabelForValue.call(this, value); + } + configure() { + super.configure(); + if (!this.isHorizontal()) { + this._reversePixels = !this._reversePixels; + } + } + getPixelForValue(value) { + if (typeof value !== "number") { + value = this.parse(value); + } + return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); + } + getPixelForTick(index2) { + const ticks = this.ticks; + if (index2 < 0 || index2 > ticks.length - 1) { + return null; + } + return this.getPixelForValue(ticks[index2].value); + } + getValueForPixel(pixel) { + return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange); + } + getBasePixel() { + return this.bottom; + } + }; + __publicField(CategoryScale, "id", "category"); + __publicField(CategoryScale, "defaults", { + ticks: { + callback: _getLabelForValue + } + }); + LinearScaleBase = class extends Scale { + constructor(cfg) { + super(cfg); + this.start = void 0; + this.end = void 0; + this._startValue = void 0; + this._endValue = void 0; + this._valueRange = 0; + } + parse(raw, index2) { + if (isNullOrUndef(raw)) { + return null; + } + if ((typeof raw === "number" || raw instanceof Number) && !isFinite(+raw)) { + return null; + } + return +raw; + } + handleTickRangeOptions() { + const { beginAtZero } = this.options; + const { minDefined, maxDefined } = this.getUserBounds(); + let { min, max } = this; + const setMin = (v) => min = minDefined ? min : v; + const setMax = (v) => max = maxDefined ? max : v; + if (beginAtZero) { + const minSign = sign(min); + const maxSign = sign(max); + if (minSign < 0 && maxSign < 0) { + setMax(0); + } else if (minSign > 0 && maxSign > 0) { + setMin(0); + } + } + if (min === max) { + let offset = max === 0 ? 1 : Math.abs(max * 0.05); + setMax(max + offset); + if (!beginAtZero) { + setMin(min - offset); + } + } + this.min = min; + this.max = max; + } + getTickLimit() { + const tickOpts = this.options.ticks; + let { maxTicksLimit, stepSize } = tickOpts; + let maxTicks; + if (stepSize) { + maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1; + if (maxTicks > 1e3) { + console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`); + maxTicks = 1e3; + } + } else { + maxTicks = this.computeTickLimit(); + maxTicksLimit = maxTicksLimit || 11; + } + if (maxTicksLimit) { + maxTicks = Math.min(maxTicksLimit, maxTicks); + } + return maxTicks; + } + computeTickLimit() { + return Number.POSITIVE_INFINITY; + } + buildTicks() { + const opts = this.options; + const tickOpts = opts.ticks; + let maxTicks = this.getTickLimit(); + maxTicks = Math.max(2, maxTicks); + const numericGeneratorOptions = { + maxTicks, + bounds: opts.bounds, + min: opts.min, + max: opts.max, + precision: tickOpts.precision, + step: tickOpts.stepSize, + count: tickOpts.count, + maxDigits: this._maxDigits(), + horizontal: this.isHorizontal(), + minRotation: tickOpts.minRotation || 0, + includeBounds: tickOpts.includeBounds !== false + }; + const dataRange = this._range || this; + const ticks = generateTicks$1(numericGeneratorOptions, dataRange); + if (opts.bounds === "ticks") { + _setMinAndMaxByKey(ticks, this, "value"); + } + if (opts.reverse) { + ticks.reverse(); + this.start = this.max; + this.end = this.min; + } else { + this.start = this.min; + this.end = this.max; + } + return ticks; + } + configure() { + const ticks = this.ticks; + let start = this.min; + let end = this.max; + super.configure(); + if (this.options.offset && ticks.length) { + const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2; + start -= offset; + end += offset; + } + this._startValue = start; + this._endValue = end; + this._valueRange = end - start; + } + getLabelForValue(value) { + return formatNumber(value, this.chart.options.locale, this.options.ticks.format); + } + }; + LinearScale = class extends LinearScaleBase { + determineDataLimits() { + const { min, max } = this.getMinMax(true); + this.min = isNumberFinite(min) ? min : 0; + this.max = isNumberFinite(max) ? max : 1; + this.handleTickRangeOptions(); + } + computeTickLimit() { + const horizontal = this.isHorizontal(); + const length = horizontal ? this.width : this.height; + const minRotation = toRadians(this.options.ticks.minRotation); + const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 1e-3; + const tickFont = this._resolveTickFontOptions(0); + return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio)); + } + getPixelForValue(value) { + return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); + } + getValueForPixel(pixel) { + return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange; + } + }; + __publicField(LinearScale, "id", "linear"); + __publicField(LinearScale, "defaults", { + ticks: { + callback: Ticks.formatters.numeric + } + }); + log10Floor = (v) => Math.floor(log10(v)); + changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m); + LogarithmicScale = class extends Scale { + constructor(cfg) { + super(cfg); + this.start = void 0; + this.end = void 0; + this._startValue = void 0; + this._valueRange = 0; + } + parse(raw, index2) { + const value = LinearScaleBase.prototype.parse.apply(this, [ + raw, + index2 + ]); + if (value === 0) { + this._zero = true; + return void 0; + } + return isNumberFinite(value) && value > 0 ? value : null; + } + determineDataLimits() { + const { min, max } = this.getMinMax(true); + this.min = isNumberFinite(min) ? Math.max(0, min) : null; + this.max = isNumberFinite(max) ? Math.max(0, max) : null; + if (this.options.beginAtZero) { + this._zero = true; + } + if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) { + this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0); + } + this.handleTickRangeOptions(); + } + handleTickRangeOptions() { + const { minDefined, maxDefined } = this.getUserBounds(); + let min = this.min; + let max = this.max; + const setMin = (v) => min = minDefined ? min : v; + const setMax = (v) => max = maxDefined ? max : v; + if (min === max) { + if (min <= 0) { + setMin(1); + setMax(10); + } else { + setMin(changeExponent(min, -1)); + setMax(changeExponent(max, 1)); + } + } + if (min <= 0) { + setMin(changeExponent(max, -1)); + } + if (max <= 0) { + setMax(changeExponent(min, 1)); + } + this.min = min; + this.max = max; + } + buildTicks() { + const opts = this.options; + const generationOptions = { + min: this._userMin, + max: this._userMax + }; + const ticks = generateTicks(generationOptions, this); + if (opts.bounds === "ticks") { + _setMinAndMaxByKey(ticks, this, "value"); + } + if (opts.reverse) { + ticks.reverse(); + this.start = this.max; + this.end = this.min; + } else { + this.start = this.min; + this.end = this.max; + } + return ticks; + } + getLabelForValue(value) { + return value === void 0 ? "0" : formatNumber(value, this.chart.options.locale, this.options.ticks.format); + } + configure() { + const start = this.min; + super.configure(); + this._startValue = log10(start); + this._valueRange = log10(this.max) - log10(start); + } + getPixelForValue(value) { + if (value === void 0 || value === 0) { + value = this.min; + } + if (value === null || isNaN(value)) { + return NaN; + } + return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange); + } + getValueForPixel(pixel) { + const decimal = this.getDecimalForPixel(pixel); + return Math.pow(10, this._startValue + decimal * this._valueRange); + } + }; + __publicField(LogarithmicScale, "id", "logarithmic"); + __publicField(LogarithmicScale, "defaults", { + ticks: { + callback: Ticks.formatters.logarithmic, + major: { + enabled: true + } + } + }); + RadialLinearScale = class extends LinearScaleBase { + constructor(cfg) { + super(cfg); + this.xCenter = void 0; + this.yCenter = void 0; + this.drawingArea = void 0; + this._pointLabels = []; + this._pointLabelItems = []; + } + setDimensions() { + const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2); + const w = this.width = this.maxWidth - padding.width; + const h = this.height = this.maxHeight - padding.height; + this.xCenter = Math.floor(this.left + w / 2 + padding.left); + this.yCenter = Math.floor(this.top + h / 2 + padding.top); + this.drawingArea = Math.floor(Math.min(w, h) / 2); + } + determineDataLimits() { + const { min, max } = this.getMinMax(false); + this.min = isNumberFinite(min) && !isNaN(min) ? min : 0; + this.max = isNumberFinite(max) && !isNaN(max) ? max : 0; + this.handleTickRangeOptions(); + } + computeTickLimit() { + return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options)); + } + generateTickLabels(ticks) { + LinearScaleBase.prototype.generateTickLabels.call(this, ticks); + this._pointLabels = this.getLabels().map((value, index2) => { + const label = callback(this.options.pointLabels.callback, [ + value, + index2 + ], this); + return label || label === 0 ? label : ""; + }).filter((v, i) => this.chart.getDataVisibility(i)); + } + fit() { + const opts = this.options; + if (opts.display && opts.pointLabels.display) { + fitWithPointLabels(this); + } else { + this.setCenterPoint(0, 0, 0, 0); + } + } + setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) { + this.xCenter += Math.floor((leftMovement - rightMovement) / 2); + this.yCenter += Math.floor((topMovement - bottomMovement) / 2); + this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement)); + } + getIndexAngle(index2) { + const angleMultiplier = TAU / (this._pointLabels.length || 1); + const startAngle = this.options.startAngle || 0; + return _normalizeAngle(index2 * angleMultiplier + toRadians(startAngle)); + } + getDistanceFromCenterForValue(value) { + if (isNullOrUndef(value)) { + return NaN; + } + const scalingFactor = this.drawingArea / (this.max - this.min); + if (this.options.reverse) { + return (this.max - value) * scalingFactor; + } + return (value - this.min) * scalingFactor; + } + getValueForDistanceFromCenter(distance) { + if (isNullOrUndef(distance)) { + return NaN; + } + const scaledDistance = distance / (this.drawingArea / (this.max - this.min)); + return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance; + } + getPointLabelContext(index2) { + const pointLabels = this._pointLabels || []; + if (index2 >= 0 && index2 < pointLabels.length) { + const pointLabel = pointLabels[index2]; + return createPointLabelContext(this.getContext(), index2, pointLabel); + } + } + getPointPosition(index2, distanceFromCenter, additionalAngle = 0) { + const angle = this.getIndexAngle(index2) - HALF_PI + additionalAngle; + return { + x: Math.cos(angle) * distanceFromCenter + this.xCenter, + y: Math.sin(angle) * distanceFromCenter + this.yCenter, + angle + }; + } + getPointPositionForValue(index2, value) { + return this.getPointPosition(index2, this.getDistanceFromCenterForValue(value)); + } + getBasePosition(index2) { + return this.getPointPositionForValue(index2 || 0, this.getBaseValue()); + } + getPointLabelPosition(index2) { + const { left, top, right, bottom } = this._pointLabelItems[index2]; + return { + left, + top, + right, + bottom + }; + } + drawBackground() { + const { backgroundColor, grid: { circular } } = this.options; + if (backgroundColor) { + const ctx = this.ctx; + ctx.save(); + ctx.beginPath(); + pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length); + ctx.closePath(); + ctx.fillStyle = backgroundColor; + ctx.fill(); + ctx.restore(); + } + } + drawGrid() { + const ctx = this.ctx; + const opts = this.options; + const { angleLines, grid, border } = opts; + const labelCount = this._pointLabels.length; + let i, offset, position; + if (opts.pointLabels.display) { + drawPointLabels(this, labelCount); + } + if (grid.display) { + this.ticks.forEach((tick, index2) => { + if (index2 !== 0 || index2 === 0 && this.min < 0) { + offset = this.getDistanceFromCenterForValue(tick.value); + const context = this.getContext(index2); + const optsAtIndex = grid.setContext(context); + const optsAtIndexBorder = border.setContext(context); + drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder); + } + }); + } + if (angleLines.display) { + ctx.save(); + for (i = labelCount - 1; i >= 0; i--) { + const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i)); + const { color: color2, lineWidth } = optsAtIndex; + if (!lineWidth || !color2) { + continue; + } + ctx.lineWidth = lineWidth; + ctx.strokeStyle = color2; + ctx.setLineDash(optsAtIndex.borderDash); + ctx.lineDashOffset = optsAtIndex.borderDashOffset; + offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max); + position = this.getPointPosition(i, offset); + ctx.beginPath(); + ctx.moveTo(this.xCenter, this.yCenter); + ctx.lineTo(position.x, position.y); + ctx.stroke(); + } + ctx.restore(); + } + } + drawBorder() { + } + drawLabels() { + const ctx = this.ctx; + const opts = this.options; + const tickOpts = opts.ticks; + if (!tickOpts.display) { + return; + } + const startAngle = this.getIndexAngle(0); + let offset, width; + ctx.save(); + ctx.translate(this.xCenter, this.yCenter); + ctx.rotate(startAngle); + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + this.ticks.forEach((tick, index2) => { + if (index2 === 0 && this.min >= 0 && !opts.reverse) { + return; + } + const optsAtIndex = tickOpts.setContext(this.getContext(index2)); + const tickFont = toFont(optsAtIndex.font); + offset = this.getDistanceFromCenterForValue(this.ticks[index2].value); + if (optsAtIndex.showLabelBackdrop) { + ctx.font = tickFont.string; + width = ctx.measureText(tick.label).width; + ctx.fillStyle = optsAtIndex.backdropColor; + const padding = toPadding(optsAtIndex.backdropPadding); + ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height); + } + renderText(ctx, tick.label, 0, -offset, tickFont, { + color: optsAtIndex.color, + strokeColor: optsAtIndex.textStrokeColor, + strokeWidth: optsAtIndex.textStrokeWidth + }); + }); + ctx.restore(); + } + drawTitle() { + } + }; + __publicField(RadialLinearScale, "id", "radialLinear"); + __publicField(RadialLinearScale, "defaults", { + display: true, + animate: true, + position: "chartArea", + angleLines: { + display: true, + lineWidth: 1, + borderDash: [], + borderDashOffset: 0 + }, + grid: { + circular: false + }, + startAngle: 0, + ticks: { + showLabelBackdrop: true, + callback: Ticks.formatters.numeric + }, + pointLabels: { + backdropColor: void 0, + backdropPadding: 2, + display: true, + font: { + size: 10 + }, + callback(label) { + return label; + }, + padding: 5, + centerPointLabels: false + } + }); + __publicField(RadialLinearScale, "defaultRoutes", { + "angleLines.color": "borderColor", + "pointLabels.color": "color", + "ticks.color": "color" + }); + __publicField(RadialLinearScale, "descriptors", { + angleLines: { + _fallback: "grid" + } + }); + INTERVALS = { + millisecond: { + common: true, + size: 1, + steps: 1e3 + }, + second: { + common: true, + size: 1e3, + steps: 60 + }, + minute: { + common: true, + size: 6e4, + steps: 60 + }, + hour: { + common: true, + size: 36e5, + steps: 24 + }, + day: { + common: true, + size: 864e5, + steps: 30 + }, + week: { + common: false, + size: 6048e5, + steps: 4 + }, + month: { + common: true, + size: 2628e6, + steps: 12 + }, + quarter: { + common: false, + size: 7884e6, + steps: 4 + }, + year: { + common: true, + size: 3154e7 + } + }; + UNITS = /* @__PURE__ */ Object.keys(INTERVALS); + TimeScale = class extends Scale { + constructor(props) { + super(props); + this._cache = { + data: [], + labels: [], + all: [] + }; + this._unit = "day"; + this._majorUnit = void 0; + this._offsets = {}; + this._normalized = false; + this._parseOpts = void 0; + } + init(scaleOpts, opts = {}) { + const time = scaleOpts.time || (scaleOpts.time = {}); + const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date); + adapter.init(opts); + mergeIf(time.displayFormats, adapter.formats()); + this._parseOpts = { + parser: time.parser, + round: time.round, + isoWeekday: time.isoWeekday + }; + super.init(scaleOpts); + this._normalized = opts.normalized; + } + parse(raw, index2) { + if (raw === void 0) { + return null; + } + return parse(this, raw); + } + beforeLayout() { + super.beforeLayout(); + this._cache = { + data: [], + labels: [], + all: [] + }; + } + determineDataLimits() { + const options = this.options; + const adapter = this._adapter; + const unit = options.time.unit || "day"; + let { min, max, minDefined, maxDefined } = this.getUserBounds(); + function _applyBounds(bounds) { + if (!minDefined && !isNaN(bounds.min)) { + min = Math.min(min, bounds.min); + } + if (!maxDefined && !isNaN(bounds.max)) { + max = Math.max(max, bounds.max); + } + } + if (!minDefined || !maxDefined) { + _applyBounds(this._getLabelBounds()); + if (options.bounds !== "ticks" || options.ticks.source !== "labels") { + _applyBounds(this.getMinMax(false)); + } + } + min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit); + max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1; + this.min = Math.min(min, max - 1); + this.max = Math.max(min + 1, max); + } + _getLabelBounds() { + const arr = this.getLabelTimestamps(); + let min = Number.POSITIVE_INFINITY; + let max = Number.NEGATIVE_INFINITY; + if (arr.length) { + min = arr[0]; + max = arr[arr.length - 1]; + } + return { + min, + max + }; + } + buildTicks() { + const options = this.options; + const timeOpts = options.time; + const tickOpts = options.ticks; + const timestamps = tickOpts.source === "labels" ? this.getLabelTimestamps() : this._generate(); + if (options.bounds === "ticks" && timestamps.length) { + this.min = this._userMin || timestamps[0]; + this.max = this._userMax || timestamps[timestamps.length - 1]; + } + const min = this.min; + const max = this.max; + const ticks = _filterBetween(timestamps, min, max); + this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max)); + this._majorUnit = !tickOpts.major.enabled || this._unit === "year" ? void 0 : determineMajorUnit(this._unit); + this.initOffsets(timestamps); + if (options.reverse) { + ticks.reverse(); + } + return ticksFromTimestamps(this, ticks, this._majorUnit); + } + afterAutoSkip() { + if (this.options.offsetAfterAutoskip) { + this.initOffsets(this.ticks.map((tick) => +tick.value)); + } + } + initOffsets(timestamps = []) { + let start = 0; + let end = 0; + let first, last; + if (this.options.offset && timestamps.length) { + first = this.getDecimalForValue(timestamps[0]); + if (timestamps.length === 1) { + start = 1 - first; + } else { + start = (this.getDecimalForValue(timestamps[1]) - first) / 2; + } + last = this.getDecimalForValue(timestamps[timestamps.length - 1]); + if (timestamps.length === 1) { + end = last; + } else { + end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2; + } + } + const limit2 = timestamps.length < 3 ? 0.5 : 0.25; + start = _limitValue(start, 0, limit2); + end = _limitValue(end, 0, limit2); + this._offsets = { + start, + end, + factor: 1 / (start + 1 + end) + }; + } + _generate() { + const adapter = this._adapter; + const min = this.min; + const max = this.max; + const options = this.options; + const timeOpts = options.time; + const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min)); + const stepSize = valueOrDefault(options.ticks.stepSize, 1); + const weekday = minor === "week" ? timeOpts.isoWeekday : false; + const hasWeekday = isNumber(weekday) || weekday === true; + const ticks = {}; + let first = min; + let time, count; + if (hasWeekday) { + first = +adapter.startOf(first, "isoWeek", weekday); + } + first = +adapter.startOf(first, hasWeekday ? "day" : minor); + if (adapter.diff(max, min, minor) > 1e5 * stepSize) { + throw new Error(min + " and " + max + " are too far apart with stepSize of " + stepSize + " " + minor); + } + const timestamps = options.ticks.source === "data" && this.getDataTimestamps(); + for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) { + addTick(ticks, time, timestamps); + } + if (time === max || options.bounds === "ticks" || count === 1) { + addTick(ticks, time, timestamps); + } + return Object.keys(ticks).sort(sorter).map((x) => +x); + } + getLabelForValue(value) { + const adapter = this._adapter; + const timeOpts = this.options.time; + if (timeOpts.tooltipFormat) { + return adapter.format(value, timeOpts.tooltipFormat); + } + return adapter.format(value, timeOpts.displayFormats.datetime); + } + format(value, format) { + const options = this.options; + const formats = options.time.displayFormats; + const unit = this._unit; + const fmt = format || formats[unit]; + return this._adapter.format(value, fmt); + } + _tickFormatFunction(time, index2, ticks, format) { + const options = this.options; + const formatter = options.ticks.callback; + if (formatter) { + return callback(formatter, [ + time, + index2, + ticks + ], this); + } + const formats = options.time.displayFormats; + const unit = this._unit; + const majorUnit = this._majorUnit; + const minorFormat = unit && formats[unit]; + const majorFormat = majorUnit && formats[majorUnit]; + const tick = ticks[index2]; + const major = majorUnit && majorFormat && tick && tick.major; + return this._adapter.format(time, format || (major ? majorFormat : minorFormat)); + } + generateTickLabels(ticks) { + let i, ilen, tick; + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + tick = ticks[i]; + tick.label = this._tickFormatFunction(tick.value, i, ticks); + } + } + getDecimalForValue(value) { + return value === null ? NaN : (value - this.min) / (this.max - this.min); + } + getPixelForValue(value) { + const offsets = this._offsets; + const pos = this.getDecimalForValue(value); + return this.getPixelForDecimal((offsets.start + pos) * offsets.factor); + } + getValueForPixel(pixel) { + const offsets = this._offsets; + const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; + return this.min + pos * (this.max - this.min); + } + _getLabelSize(label) { + const ticksOpts = this.options.ticks; + const tickLabelWidth = this.ctx.measureText(label).width; + const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation); + const cosRotation = Math.cos(angle); + const sinRotation = Math.sin(angle); + const tickFontSize = this._resolveTickFontOptions(0).size; + return { + w: tickLabelWidth * cosRotation + tickFontSize * sinRotation, + h: tickLabelWidth * sinRotation + tickFontSize * cosRotation + }; + } + _getLabelCapacity(exampleTime) { + const timeOpts = this.options.time; + const displayFormats = timeOpts.displayFormats; + const format = displayFormats[timeOpts.unit] || displayFormats.millisecond; + const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [ + exampleTime + ], this._majorUnit), format); + const size = this._getLabelSize(exampleLabel); + const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1; + return capacity > 0 ? capacity : 1; + } + getDataTimestamps() { + let timestamps = this._cache.data || []; + let i, ilen; + if (timestamps.length) { + return timestamps; + } + const metas = this.getMatchingVisibleMetas(); + if (this._normalized && metas.length) { + return this._cache.data = metas[0].controller.getAllParsedValues(this); + } + for (i = 0, ilen = metas.length; i < ilen; ++i) { + timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this)); + } + return this._cache.data = this.normalize(timestamps); + } + getLabelTimestamps() { + const timestamps = this._cache.labels || []; + let i, ilen; + if (timestamps.length) { + return timestamps; + } + const labels = this.getLabels(); + for (i = 0, ilen = labels.length; i < ilen; ++i) { + timestamps.push(parse(this, labels[i])); + } + return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps); + } + normalize(values) { + return _arrayUnique(values.sort(sorter)); + } + }; + __publicField(TimeScale, "id", "time"); + __publicField(TimeScale, "defaults", { + bounds: "data", + adapters: {}, + time: { + parser: false, + unit: false, + round: false, + isoWeekday: false, + minUnit: "millisecond", + displayFormats: {} + }, + ticks: { + source: "auto", + callback: false, + major: { + enabled: false + } + } + }); + TimeSeriesScale = class extends TimeScale { + constructor(props) { + super(props); + this._table = []; + this._minPos = void 0; + this._tableRange = void 0; + } + initOffsets() { + const timestamps = this._getTimestampsForTable(); + const table = this._table = this.buildLookupTable(timestamps); + this._minPos = interpolate2(table, this.min); + this._tableRange = interpolate2(table, this.max) - this._minPos; + super.initOffsets(timestamps); + } + buildLookupTable(timestamps) { + const { min, max } = this; + const items = []; + const table = []; + let i, ilen, prev, curr, next; + for (i = 0, ilen = timestamps.length; i < ilen; ++i) { + curr = timestamps[i]; + if (curr >= min && curr <= max) { + items.push(curr); + } + } + if (items.length < 2) { + return [ + { + time: min, + pos: 0 + }, + { + time: max, + pos: 1 + } + ]; + } + for (i = 0, ilen = items.length; i < ilen; ++i) { + next = items[i + 1]; + prev = items[i - 1]; + curr = items[i]; + if (Math.round((next + prev) / 2) !== curr) { + table.push({ + time: curr, + pos: i / (ilen - 1) + }); + } + } + return table; + } + _generate() { + const min = this.min; + const max = this.max; + let timestamps = super.getDataTimestamps(); + if (!timestamps.includes(min) || !timestamps.length) { + timestamps.splice(0, 0, min); + } + if (!timestamps.includes(max) || timestamps.length === 1) { + timestamps.push(max); + } + return timestamps.sort((a, b) => a - b); + } + _getTimestampsForTable() { + let timestamps = this._cache.all || []; + if (timestamps.length) { + return timestamps; + } + const data = this.getDataTimestamps(); + const label = this.getLabelTimestamps(); + if (data.length && label.length) { + timestamps = this.normalize(data.concat(label)); + } else { + timestamps = data.length ? data : label; + } + timestamps = this._cache.all = timestamps; + return timestamps; + } + getDecimalForValue(value) { + return (interpolate2(this._table, value) - this._minPos) / this._tableRange; + } + getValueForPixel(pixel) { + const offsets = this._offsets; + const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; + return interpolate2(this._table, decimal * this._tableRange + this._minPos, true); + } + }; + __publicField(TimeSeriesScale, "id", "timeseries"); + __publicField(TimeSeriesScale, "defaults", TimeScale.defaults); + scales = /* @__PURE__ */ Object.freeze({ + __proto__: null, + CategoryScale, + LinearScale, + LogarithmicScale, + RadialLinearScale, + TimeScale, + TimeSeriesScale + }); + registerables = [ + controllers, + elements, + plugins, + scales + ]; + } + }); + + // node_modules/chart.js/auto/auto.js + var auto_exports = {}; + __export(auto_exports, { + Animation: () => Animation, + Animations: () => Animations, + ArcElement: () => ArcElement, + BarController: () => BarController, + BarElement: () => BarElement, + BasePlatform: () => BasePlatform, + BasicPlatform: () => BasicPlatform, + BubbleController: () => BubbleController, + CategoryScale: () => CategoryScale, + Chart: () => Chart, + Colors: () => plugin_colors, + DatasetController: () => DatasetController, + Decimation: () => plugin_decimation, + DomPlatform: () => DomPlatform, + DoughnutController: () => DoughnutController, + Element: () => Element2, + Filler: () => index, + Interaction: () => Interaction, + Legend: () => plugin_legend, + LineController: () => LineController, + LineElement: () => LineElement, + LinearScale: () => LinearScale, + LogarithmicScale: () => LogarithmicScale, + PieController: () => PieController, + PointElement: () => PointElement, + PolarAreaController: () => PolarAreaController, + RadarController: () => RadarController, + RadialLinearScale: () => RadialLinearScale, + Scale: () => Scale, + ScatterController: () => ScatterController, + SubTitle: () => plugin_subtitle, + Ticks: () => Ticks, + TimeScale: () => TimeScale, + TimeSeriesScale: () => TimeSeriesScale, + Title: () => plugin_title, + Tooltip: () => plugin_tooltip, + _adapters: () => adapters, + _detectPlatform: () => _detectPlatform, + animator: () => animator, + controllers: () => controllers, + default: () => auto_default, + defaults: () => defaults, + elements: () => elements, + layouts: () => layouts, + plugins: () => plugins, + registerables: () => registerables, + registry: () => registry, + scales: () => scales + }); + var auto_default; + var init_auto = __esm({ + "node_modules/chart.js/auto/auto.js"() { + init_chart(); + init_chart(); + Chart.register(...registerables); + auto_default = Chart; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/platform.js + function createMetadataLocator() { + const metadataLookup = /* @__PURE__ */ new WeakMap(); + return function(target) { + let metadata = metadataLookup.get(target); + if (metadata === void 0) { + let currentTarget = Reflect.getPrototypeOf(target); + while (metadata === void 0 && currentTarget !== null) { + metadata = metadataLookup.get(currentTarget); + currentTarget = Reflect.getPrototypeOf(currentTarget); + } + metadata = metadata === void 0 ? [] : metadata.slice(0); + metadataLookup.set(target, metadata); + } + return metadata; + }; + } + var $global, propConfig, FAST, emptyArray; + var init_platform = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/platform.js"() { + $global = (function() { + if (typeof globalThis !== "undefined") { + return globalThis; + } + if (typeof global !== "undefined") { + return global; + } + if (typeof self !== "undefined") { + return self; + } + if (typeof window !== "undefined") { + return window; + } + try { + return new Function("return this")(); + } catch (_a) { + return {}; + } + })(); + if ($global.trustedTypes === void 0) { + $global.trustedTypes = { createPolicy: (n, r) => r }; + } + propConfig = { + configurable: false, + enumerable: false, + writable: false + }; + if ($global.FAST === void 0) { + Reflect.defineProperty($global, "FAST", Object.assign({ value: /* @__PURE__ */ Object.create(null) }, propConfig)); + } + FAST = $global.FAST; + if (FAST.getById === void 0) { + const storage = /* @__PURE__ */ Object.create(null); + Reflect.defineProperty(FAST, "getById", Object.assign({ value(id, initialize) { + let found = storage[id]; + if (found === void 0) { + found = initialize ? storage[id] = initialize() : null; + } + return found; + } }, propConfig)); + } + emptyArray = Object.freeze([]); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/dom.js + var updateQueue, fastHTMLPolicy, htmlPolicy, marker, _interpolationStart, _interpolationEnd, DOM; + var init_dom = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/dom.js"() { + init_platform(); + updateQueue = $global.FAST.getById(1, () => { + const tasks = []; + const pendingErrors = []; + function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } + } + function tryRunTask(task) { + try { + task.call(); + } catch (error) { + pendingErrors.push(error); + setTimeout(throwFirstError, 0); + } + } + function process() { + const capacity = 1024; + let index2 = 0; + while (index2 < tasks.length) { + tryRunTask(tasks[index2]); + index2++; + if (index2 > capacity) { + for (let scan = 0, newLength = tasks.length - index2; scan < newLength; scan++) { + tasks[scan] = tasks[scan + index2]; + } + tasks.length -= index2; + index2 = 0; + } + } + tasks.length = 0; + } + function enqueue(callable) { + if (tasks.length < 1) { + $global.requestAnimationFrame(process); + } + tasks.push(callable); + } + return Object.freeze({ + enqueue, + process + }); + }); + fastHTMLPolicy = $global.trustedTypes.createPolicy("fast-html", { + createHTML: (html2) => html2 + }); + htmlPolicy = fastHTMLPolicy; + marker = `fast-${Math.random().toString(36).substring(2, 8)}`; + _interpolationStart = `${marker}{`; + _interpolationEnd = `}${marker}`; + DOM = Object.freeze({ + /** + * Indicates whether the DOM supports the adoptedStyleSheets feature. + */ + supportsAdoptedStyleSheets: Array.isArray(document.adoptedStyleSheets) && "replace" in CSSStyleSheet.prototype, + /** + * Sets the HTML trusted types policy used by the templating engine. + * @param policy - The policy to set for HTML. + * @remarks + * This API can only be called once, for security reasons. It should be + * called by the application developer at the start of their program. + */ + setHTMLPolicy(policy) { + if (htmlPolicy !== fastHTMLPolicy) { + throw new Error("The HTML policy can only be set once."); + } + htmlPolicy = policy; + }, + /** + * Turns a string into trusted HTML using the configured trusted types policy. + * @param html - The string to turn into trusted HTML. + * @remarks + * Used internally by the template engine when creating templates + * and setting innerHTML. + */ + createHTML(html2) { + return htmlPolicy.createHTML(html2); + }, + /** + * Determines if the provided node is a template marker used by the runtime. + * @param node - The node to test. + */ + isMarker(node) { + return node && node.nodeType === 8 && node.data.startsWith(marker); + }, + /** + * Given a marker node, extract the {@link HTMLDirective} index from the placeholder. + * @param node - The marker node to extract the index from. + */ + extractDirectiveIndexFromMarker(node) { + return parseInt(node.data.replace(`${marker}:`, "")); + }, + /** + * Creates a placeholder string suitable for marking out a location *within* + * an attribute value or HTML content. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by binding directives. + */ + createInterpolationPlaceholder(index2) { + return `${_interpolationStart}${index2}${_interpolationEnd}`; + }, + /** + * Creates a placeholder that manifests itself as an attribute on an + * element. + * @param attributeName - The name of the custom attribute. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by attribute directives such as `ref`, `slotted`, and `children`. + */ + createCustomAttributePlaceholder(attributeName, index2) { + return `${attributeName}="${this.createInterpolationPlaceholder(index2)}"`; + }, + /** + * Creates a placeholder that manifests itself as a marker within the DOM structure. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by structural directives such as `repeat`. + */ + createBlockPlaceholder(index2) { + return ``; + }, + /** + * Schedules DOM update work in the next async batch. + * @param callable - The callable function or object to queue. + */ + queueUpdate: updateQueue.enqueue, + /** + * Immediately processes all work previously scheduled + * through queueUpdate. + * @remarks + * This also forces nextUpdate promises + * to resolve. + */ + processUpdates: updateQueue.process, + /** + * Resolves with the next DOM update. + */ + nextUpdate() { + return new Promise(updateQueue.enqueue); + }, + /** + * Sets an attribute value on an element. + * @param element - The element to set the attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is `null` or `undefined`, the attribute is removed, otherwise + * it is set to the provided value using the standard `setAttribute` API. + */ + setAttribute(element, attributeName, value) { + if (value === null || value === void 0) { + element.removeAttribute(attributeName); + } else { + element.setAttribute(attributeName, value); + } + }, + /** + * Sets a boolean attribute value. + * @param element - The element to set the boolean attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is true, the attribute is added; otherwise it is removed. + */ + setBooleanAttribute(element, attributeName, value) { + value ? element.setAttribute(attributeName, "") : element.removeAttribute(attributeName); + }, + /** + * Removes all the child nodes of the provided parent node. + * @param parent - The node to remove the children from. + */ + removeChildNodes(parent) { + for (let child = parent.firstChild; child !== null; child = parent.firstChild) { + parent.removeChild(child); + } + }, + /** + * Creates a TreeWalker configured to walk a template fragment. + * @param fragment - The fragment to walk. + */ + createTemplateWalker(fragment) { + return document.createTreeWalker( + fragment, + 133, + // element, text, comment + null, + false + ); + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js + var SubscriberSet, PropertyChangeNotifier; + var init_notifier = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js"() { + SubscriberSet = class { + /** + * Creates an instance of SubscriberSet for the specified source. + * @param source - The object source that subscribers will receive notifications from. + * @param initialSubscriber - An initial subscriber to changes. + */ + constructor(source, initialSubscriber) { + this.sub1 = void 0; + this.sub2 = void 0; + this.spillover = void 0; + this.source = source; + this.sub1 = initialSubscriber; + } + /** + * Checks whether the provided subscriber has been added to this set. + * @param subscriber - The subscriber to test for inclusion in this set. + */ + has(subscriber) { + return this.spillover === void 0 ? this.sub1 === subscriber || this.sub2 === subscriber : this.spillover.indexOf(subscriber) !== -1; + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + */ + subscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.has(subscriber)) { + return; + } + if (this.sub1 === void 0) { + this.sub1 = subscriber; + return; + } + if (this.sub2 === void 0) { + this.sub2 = subscriber; + return; + } + this.spillover = [this.sub1, this.sub2, subscriber]; + this.sub1 = void 0; + this.sub2 = void 0; + } else { + const index2 = spillover.indexOf(subscriber); + if (index2 === -1) { + spillover.push(subscriber); + } + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + */ + unsubscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.sub1 === subscriber) { + this.sub1 = void 0; + } else if (this.sub2 === subscriber) { + this.sub2 = void 0; + } + } else { + const index2 = spillover.indexOf(subscriber); + if (index2 !== -1) { + spillover.splice(index2, 1); + } + } + } + /** + * Notifies all subscribers. + * @param args - Data passed along to subscribers during notification. + */ + notify(args) { + const spillover = this.spillover; + const source = this.source; + if (spillover === void 0) { + const sub1 = this.sub1; + const sub2 = this.sub2; + if (sub1 !== void 0) { + sub1.handleChange(source, args); + } + if (sub2 !== void 0) { + sub2.handleChange(source, args); + } + } else { + for (let i = 0, ii = spillover.length; i < ii; ++i) { + spillover[i].handleChange(source, args); + } + } + } + }; + PropertyChangeNotifier = class { + /** + * Creates an instance of PropertyChangeNotifier for the specified source. + * @param source - The object source that subscribers will receive notifications from. + */ + constructor(source) { + this.subscribers = {}; + this.sourceSubscribers = null; + this.source = source; + } + /** + * Notifies all subscribers, based on the specified property. + * @param propertyName - The property name, passed along to subscribers during notification. + */ + notify(propertyName) { + var _a; + const subscribers = this.subscribers[propertyName]; + if (subscribers !== void 0) { + subscribers.notify(propertyName); + } + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.notify(propertyName); + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + * @param propertyToWatch - The name of the property that the subscriber is interested in watching for changes. + */ + subscribe(subscriber, propertyToWatch) { + var _a; + if (propertyToWatch) { + let subscribers = this.subscribers[propertyToWatch]; + if (subscribers === void 0) { + this.subscribers[propertyToWatch] = subscribers = new SubscriberSet(this.source); + } + subscribers.subscribe(subscriber); + } else { + this.sourceSubscribers = (_a = this.sourceSubscribers) !== null && _a !== void 0 ? _a : new SubscriberSet(this.source); + this.sourceSubscribers.subscribe(subscriber); + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + * @param propertyToUnwatch - The name of the property that the subscriber is no longer interested in watching. + */ + unsubscribe(subscriber, propertyToUnwatch) { + var _a; + if (propertyToUnwatch) { + const subscribers = this.subscribers[propertyToUnwatch]; + if (subscribers !== void 0) { + subscribers.unsubscribe(subscriber); + } + } else { + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriber); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/observable.js + function observable(target, nameOrAccessor) { + Observable.defineProperty(target, nameOrAccessor); + } + function volatile(target, name, descriptor) { + return Object.assign({}, descriptor, { + get: function() { + Observable.trackVolatile(); + return descriptor.get.apply(this); + } + }); + } + var Observable, contextEvent, ExecutionContext, defaultExecutionContext; + var init_observable = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/observable.js"() { + init_dom(); + init_platform(); + init_notifier(); + Observable = FAST.getById(2, () => { + const volatileRegex = /(:|&&|\|\||if)/; + const notifierLookup = /* @__PURE__ */ new WeakMap(); + const queueUpdate = DOM.queueUpdate; + let watcher = void 0; + let createArrayObserver = (array) => { + throw new Error("Must call enableArrayObservation before observing arrays."); + }; + function getNotifier(source) { + let found = source.$fastController || notifierLookup.get(source); + if (found === void 0) { + if (Array.isArray(source)) { + found = createArrayObserver(source); + } else { + notifierLookup.set(source, found = new PropertyChangeNotifier(source)); + } + } + return found; + } + const getAccessors = createMetadataLocator(); + class DefaultObservableAccessor { + constructor(name) { + this.name = name; + this.field = `_${name}`; + this.callback = `${name}Changed`; + } + getValue(source) { + if (watcher !== void 0) { + watcher.watch(source, this.name); + } + return source[this.field]; + } + setValue(source, newValue) { + const field = this.field; + const oldValue = source[field]; + if (oldValue !== newValue) { + source[field] = newValue; + const callback2 = source[this.callback]; + if (typeof callback2 === "function") { + callback2.call(source, oldValue, newValue); + } + getNotifier(source).notify(this.name); + } + } + } + class BindingObserverImplementation extends SubscriberSet { + constructor(binding, initialSubscriber, isVolatileBinding = false) { + super(binding, initialSubscriber); + this.binding = binding; + this.isVolatileBinding = isVolatileBinding; + this.needsRefresh = true; + this.needsQueue = true; + this.first = this; + this.last = null; + this.propertySource = void 0; + this.propertyName = void 0; + this.notifier = void 0; + this.next = void 0; + } + observe(source, context) { + if (this.needsRefresh && this.last !== null) { + this.disconnect(); + } + const previousWatcher = watcher; + watcher = this.needsRefresh ? this : void 0; + this.needsRefresh = this.isVolatileBinding; + const result = this.binding(source, context); + watcher = previousWatcher; + return result; + } + disconnect() { + if (this.last !== null) { + let current = this.first; + while (current !== void 0) { + current.notifier.unsubscribe(this, current.propertyName); + current = current.next; + } + this.last = null; + this.needsRefresh = this.needsQueue = true; + } + } + watch(propertySource, propertyName) { + const prev = this.last; + const notifier = getNotifier(propertySource); + const current = prev === null ? this.first : {}; + current.propertySource = propertySource; + current.propertyName = propertyName; + current.notifier = notifier; + notifier.subscribe(this, propertyName); + if (prev !== null) { + if (!this.needsRefresh) { + let prevValue; + watcher = void 0; + prevValue = prev.propertySource[prev.propertyName]; + watcher = this; + if (propertySource === prevValue) { + this.needsRefresh = true; + } + } + prev.next = current; + } + this.last = current; + } + handleChange() { + if (this.needsQueue) { + this.needsQueue = false; + queueUpdate(this); + } + } + call() { + if (this.last !== null) { + this.needsQueue = true; + this.notify(this); + } + } + records() { + let next = this.first; + return { + next: () => { + const current = next; + if (current === void 0) { + return { value: void 0, done: true }; + } else { + next = next.next; + return { + value: current, + done: false + }; + } + }, + [Symbol.iterator]: function() { + return this; + } + }; + } + } + return Object.freeze({ + /** + * @internal + * @param factory - The factory used to create array observers. + */ + setArrayObserverFactory(factory) { + createArrayObserver = factory; + }, + /** + * Gets a notifier for an object or Array. + * @param source - The object or Array to get the notifier for. + */ + getNotifier, + /** + * Records a property change for a source object. + * @param source - The object to record the change against. + * @param propertyName - The property to track as changed. + */ + track(source, propertyName) { + if (watcher !== void 0) { + watcher.watch(source, propertyName); + } + }, + /** + * Notifies watchers that the currently executing property getter or function is volatile + * with respect to its observable dependencies. + */ + trackVolatile() { + if (watcher !== void 0) { + watcher.needsRefresh = true; + } + }, + /** + * Notifies subscribers of a source object of changes. + * @param source - the object to notify of changes. + * @param args - The change args to pass to subscribers. + */ + notify(source, args) { + getNotifier(source).notify(args); + }, + /** + * Defines an observable property on an object or prototype. + * @param target - The target object to define the observable on. + * @param nameOrAccessor - The name of the property to define as observable; + * or a custom accessor that specifies the property name and accessor implementation. + */ + defineProperty(target, nameOrAccessor) { + if (typeof nameOrAccessor === "string") { + nameOrAccessor = new DefaultObservableAccessor(nameOrAccessor); + } + getAccessors(target).push(nameOrAccessor); + Reflect.defineProperty(target, nameOrAccessor.name, { + enumerable: true, + get: function() { + return nameOrAccessor.getValue(this); + }, + set: function(newValue) { + nameOrAccessor.setValue(this, newValue); + } + }); + }, + /** + * Finds all the observable accessors defined on the target, + * including its prototype chain. + * @param target - The target object to search for accessor on. + */ + getAccessors, + /** + * Creates a {@link BindingObserver} that can watch the + * provided {@link Binding} for changes. + * @param binding - The binding to observe. + * @param initialSubscriber - An initial subscriber to changes in the binding value. + * @param isVolatileBinding - Indicates whether the binding's dependency list must be re-evaluated on every value evaluation. + */ + binding(binding, initialSubscriber, isVolatileBinding = this.isVolatileBinding(binding)) { + return new BindingObserverImplementation(binding, initialSubscriber, isVolatileBinding); + }, + /** + * Determines whether a binding expression is volatile and needs to have its dependency list re-evaluated + * on every evaluation of the value. + * @param binding - The binding to inspect. + */ + isVolatileBinding(binding) { + return volatileRegex.test(binding.toString()); + } + }); + }); + contextEvent = FAST.getById(3, () => { + let current = null; + return { + get() { + return current; + }, + set(event) { + current = event; + } + }; + }); + ExecutionContext = class { + constructor() { + this.index = 0; + this.length = 0; + this.parent = null; + this.parentContext = null; + } + /** + * The current event within an event handler. + */ + get event() { + return contextEvent.get(); + } + /** + * Indicates whether the current item within a repeat context + * has an even index. + */ + get isEven() { + return this.index % 2 === 0; + } + /** + * Indicates whether the current item within a repeat context + * has an odd index. + */ + get isOdd() { + return this.index % 2 !== 0; + } + /** + * Indicates whether the current item within a repeat context + * is the first item in the collection. + */ + get isFirst() { + return this.index === 0; + } + /** + * Indicates whether the current item within a repeat context + * is somewhere in the middle of the collection. + */ + get isInMiddle() { + return !this.isFirst && !this.isLast; + } + /** + * Indicates whether the current item within a repeat context + * is the last item in the collection. + */ + get isLast() { + return this.index === this.length - 1; + } + /** + * Sets the event for the current execution context. + * @param event - The event to set. + * @internal + */ + static setEvent(event) { + contextEvent.set(event); + } + }; + Observable.defineProperty(ExecutionContext.prototype, "index"); + Observable.defineProperty(ExecutionContext.prototype, "length"); + defaultExecutionContext = Object.seal(new ExecutionContext()); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js + var HTMLDirective, TargetedHTMLDirective, AttachedBehaviorHTMLDirective; + var init_html_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js"() { + init_dom(); + HTMLDirective = class { + constructor() { + this.targetIndex = 0; + } + }; + TargetedHTMLDirective = class extends HTMLDirective { + constructor() { + super(...arguments); + this.createPlaceholder = DOM.createInterpolationPlaceholder; + } + }; + AttachedBehaviorHTMLDirective = class extends HTMLDirective { + /** + * + * @param name - The name of the behavior; used as a custom attribute on the element. + * @param behavior - The behavior to instantiate and attach to the element. + * @param options - Options to pass to the behavior during creation. + */ + constructor(name, behavior, options) { + super(); + this.name = name; + this.behavior = behavior; + this.options = options; + } + /** + * Creates a placeholder string based on the directive's index within the template. + * @param index - The index of the directive within the template. + * @remarks + * Creates a custom attribute placeholder. + */ + createPlaceholder(index2) { + return DOM.createCustomAttributePlaceholder(this.name, index2); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + * @remarks + * Creates an instance of the `behavior` type this directive was constructed with + * and passes the target and options to that `behavior`'s constructor. + */ + createBehavior(target) { + return new this.behavior(target, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/binding.js + function normalBind(source, context) { + this.source = source; + this.context = context; + if (this.bindingObserver === null) { + this.bindingObserver = Observable.binding(this.binding, this, this.isBindingVolatile); + } + this.updateTarget(this.bindingObserver.observe(source, context)); + } + function triggerBind(source, context) { + this.source = source; + this.context = context; + this.target.addEventListener(this.targetName, this); + } + function normalUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + } + function contentUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.unbind(); + view.needsBindOnly = true; + } + } + function triggerUnbind() { + this.target.removeEventListener(this.targetName, this); + this.source = null; + this.context = null; + } + function updateAttributeTarget(value) { + DOM.setAttribute(this.target, this.targetName, value); + } + function updateBooleanAttributeTarget(value) { + DOM.setBooleanAttribute(this.target, this.targetName, value); + } + function updateContentTarget(value) { + if (value === null || value === void 0) { + value = ""; + } + if (value.create) { + this.target.textContent = ""; + let view = this.target.$fastView; + if (view === void 0) { + view = value.create(); + } else { + if (this.target.$fastTemplate !== value) { + if (view.isComposed) { + view.remove(); + view.unbind(); + } + view = value.create(); + } + } + if (!view.isComposed) { + view.isComposed = true; + view.bind(this.source, this.context); + view.insertBefore(this.target); + this.target.$fastView = view; + this.target.$fastTemplate = value; + } else if (view.needsBindOnly) { + view.needsBindOnly = false; + view.bind(this.source, this.context); + } + } else { + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.isComposed = false; + view.remove(); + if (view.needsBindOnly) { + view.needsBindOnly = false; + } else { + view.unbind(); + } + } + this.target.textContent = value; + } + } + function updatePropertyTarget(value) { + this.target[this.targetName] = value; + } + function updateClassTarget(value) { + const classVersions = this.classVersions || /* @__PURE__ */ Object.create(null); + const target = this.target; + let version2 = this.version || 0; + if (value !== null && value !== void 0 && value.length) { + const names2 = value.split(/\s+/); + for (let i = 0, ii = names2.length; i < ii; ++i) { + const currentName = names2[i]; + if (currentName === "") { + continue; + } + classVersions[currentName] = version2; + target.classList.add(currentName); + } + } + this.classVersions = classVersions; + this.version = version2 + 1; + if (version2 === 0) { + return; + } + version2 -= 1; + for (const name in classVersions) { + if (classVersions[name] === version2) { + target.classList.remove(name); + } + } + } + var HTMLBindingDirective, BindingBehavior; + var init_binding = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/binding.js"() { + init_dom(); + init_observable(); + init_html_directive(); + HTMLBindingDirective = class extends TargetedHTMLDirective { + /** + * Creates an instance of BindingDirective. + * @param binding - A binding that returns the data used to update the DOM. + */ + constructor(binding) { + super(); + this.binding = binding; + this.bind = normalBind; + this.unbind = normalUnbind; + this.updateTarget = updateAttributeTarget; + this.isBindingVolatile = Observable.isVolatileBinding(this.binding); + } + /** + * Gets/sets the name of the attribute or property that this + * binding is targeting. + */ + get targetName() { + return this.originalTargetName; + } + set targetName(value) { + this.originalTargetName = value; + if (value === void 0) { + return; + } + switch (value[0]) { + case ":": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updatePropertyTarget; + if (this.cleanedTargetName === "innerHTML") { + const binding = this.binding; + this.binding = (s, c) => DOM.createHTML(binding(s, c)); + } + break; + case "?": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updateBooleanAttributeTarget; + break; + case "@": + this.cleanedTargetName = value.substr(1); + this.bind = triggerBind; + this.unbind = triggerUnbind; + break; + default: + this.cleanedTargetName = value; + if (value === "class") { + this.updateTarget = updateClassTarget; + } + break; + } + } + /** + * Makes this binding target the content of an element rather than + * a particular attribute or property. + */ + targetAtContent() { + this.updateTarget = updateContentTarget; + this.unbind = contentUnbind; + } + /** + * Creates the runtime BindingBehavior instance based on the configuration + * information stored in the BindingDirective. + * @param target - The target node that the binding behavior should attach to. + */ + createBehavior(target) { + return new BindingBehavior(target, this.binding, this.isBindingVolatile, this.bind, this.unbind, this.updateTarget, this.cleanedTargetName); + } + }; + BindingBehavior = class { + /** + * Creates an instance of BindingBehavior. + * @param target - The target of the data updates. + * @param binding - The binding that returns the latest value for an update. + * @param isBindingVolatile - Indicates whether the binding has volatile dependencies. + * @param bind - The operation to perform during binding. + * @param unbind - The operation to perform during unbinding. + * @param updateTarget - The operation to perform when updating. + * @param targetName - The name of the target attribute or property to update. + */ + constructor(target, binding, isBindingVolatile, bind, unbind, updateTarget, targetName) { + this.source = null; + this.context = null; + this.bindingObserver = null; + this.target = target; + this.binding = binding; + this.isBindingVolatile = isBindingVolatile; + this.bind = bind; + this.unbind = unbind; + this.updateTarget = updateTarget; + this.targetName = targetName; + } + /** @internal */ + handleChange() { + this.updateTarget(this.bindingObserver.observe(this.source, this.context)); + } + /** @internal */ + handleEvent(event) { + ExecutionContext.setEvent(event); + const result = this.binding(this.source, this.context); + ExecutionContext.setEvent(null); + if (result !== true) { + event.preventDefault(); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js + function createAggregateBinding(parts) { + if (parts.length === 1) { + return parts[0]; + } + let targetName; + const partCount = parts.length; + const finalParts = parts.map((x) => { + if (typeof x === "string") { + return () => x; + } + targetName = x.targetName || targetName; + return x.binding; + }); + const binding = (scope, context) => { + let output = ""; + for (let i = 0; i < partCount; ++i) { + output += finalParts[i](scope, context); + } + return output; + }; + const directive = new HTMLBindingDirective(binding); + directive.targetName = targetName; + return directive; + } + function parseContent(context, value) { + const valueParts = value.split(_interpolationStart); + if (valueParts.length === 1) { + return null; + } + const bindingParts = []; + for (let i = 0, ii = valueParts.length; i < ii; ++i) { + const current = valueParts[i]; + const index2 = current.indexOf(_interpolationEnd); + let literal; + if (index2 === -1) { + literal = current; + } else { + const directiveIndex = parseInt(current.substring(0, index2)); + bindingParts.push(context.directives[directiveIndex]); + literal = current.substring(index2 + interpolationEndLength); + } + if (literal !== "") { + bindingParts.push(literal); + } + } + return bindingParts; + } + function compileAttributes(context, node, includeBasicValues = false) { + const attributes = node.attributes; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const attr2 = attributes[i]; + const attrValue = attr2.value; + const parseResult = parseContent(context, attrValue); + let result = null; + if (parseResult === null) { + if (includeBasicValues) { + result = new HTMLBindingDirective(() => attrValue); + result.targetName = attr2.name; + } + } else { + result = createAggregateBinding(parseResult); + } + if (result !== null) { + node.removeAttributeNode(attr2); + i--; + ii--; + context.addFactory(result); + } + } + } + function compileContent(context, node, walker) { + const parseResult = parseContent(context, node.textContent); + if (parseResult !== null) { + let lastNode = node; + for (let i = 0, ii = parseResult.length; i < ii; ++i) { + const currentPart = parseResult[i]; + const currentNode = i === 0 ? node : lastNode.parentNode.insertBefore(document.createTextNode(""), lastNode.nextSibling); + if (typeof currentPart === "string") { + currentNode.textContent = currentPart; + } else { + currentNode.textContent = " "; + context.captureContentBinding(currentPart); + } + lastNode = currentNode; + context.targetIndex++; + if (currentNode !== node) { + walker.nextNode(); + } + } + context.targetIndex--; + } + } + function compileTemplate(template, directives) { + const fragment = template.content; + document.adoptNode(fragment); + const context = CompilationContext.borrow(directives); + compileAttributes(context, template, true); + const hostBehaviorFactories = context.behaviorFactories; + context.reset(); + const walker = DOM.createTemplateWalker(fragment); + let node; + while (node = walker.nextNode()) { + context.targetIndex++; + switch (node.nodeType) { + case 1: + compileAttributes(context, node); + break; + case 3: + compileContent(context, node, walker); + break; + case 8: + if (DOM.isMarker(node)) { + context.addFactory(directives[DOM.extractDirectiveIndexFromMarker(node)]); + } + } + } + let targetOffset = 0; + if ( + // If the first node in a fragment is a marker, that means it's an unstable first node, + // because something like a when, repeat, etc. could add nodes before the marker. + // To mitigate this, we insert a stable first node. However, if we insert a node, + // that will alter the result of the TreeWalker. So, we also need to offset the target index. + DOM.isMarker(fragment.firstChild) || // Or if there is only one node and a directive, it means the template's content + // is *only* the directive. In that case, HTMLView.dispose() misses any nodes inserted by + // the directive. Inserting a new node ensures proper disposal of nodes added by the directive. + fragment.childNodes.length === 1 && directives.length + ) { + fragment.insertBefore(document.createComment(""), fragment.firstChild); + targetOffset = -1; + } + const viewBehaviorFactories = context.behaviorFactories; + context.release(); + return { + fragment, + viewBehaviorFactories, + hostBehaviorFactories, + targetOffset + }; + } + var sharedContext, CompilationContext, interpolationEndLength; + var init_compiler = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js"() { + init_dom(); + init_binding(); + sharedContext = null; + CompilationContext = class _CompilationContext { + addFactory(factory) { + factory.targetIndex = this.targetIndex; + this.behaviorFactories.push(factory); + } + captureContentBinding(directive) { + directive.targetAtContent(); + this.addFactory(directive); + } + reset() { + this.behaviorFactories = []; + this.targetIndex = -1; + } + release() { + sharedContext = this; + } + static borrow(directives) { + const shareable = sharedContext || new _CompilationContext(); + shareable.directives = directives; + shareable.reset(); + sharedContext = null; + return shareable; + } + }; + interpolationEndLength = _interpolationEnd.length; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/view.js + var range, HTMLView; + var init_view = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/view.js"() { + range = document.createRange(); + HTMLView = class { + /** + * Constructs an instance of HTMLView. + * @param fragment - The html fragment that contains the nodes for this view. + * @param behaviors - The behaviors to be applied to this view. + */ + constructor(fragment, behaviors) { + this.fragment = fragment; + this.behaviors = behaviors; + this.source = null; + this.context = null; + this.firstChild = fragment.firstChild; + this.lastChild = fragment.lastChild; + } + /** + * Appends the view's DOM nodes to the referenced node. + * @param node - The parent node to append the view's DOM nodes to. + */ + appendTo(node) { + node.appendChild(this.fragment); + } + /** + * Inserts the view's DOM nodes before the referenced node. + * @param node - The node to insert the view's DOM before. + */ + insertBefore(node) { + if (this.fragment.hasChildNodes()) { + node.parentNode.insertBefore(this.fragment, node); + } else { + const end = this.lastChild; + if (node.previousSibling === end) + return; + const parentNode = node.parentNode; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parentNode.insertBefore(current, node); + current = next; + } + parentNode.insertBefore(end, node); + } + } + /** + * Removes the view's DOM nodes. + * The nodes are not disposed and the view can later be re-inserted. + */ + remove() { + const fragment = this.fragment; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + fragment.appendChild(current); + current = next; + } + fragment.appendChild(end); + } + /** + * Removes the view and unbinds its behaviors, disposing of DOM nodes afterward. + * Once a view has been disposed, it cannot be inserted or bound again. + */ + dispose() { + const parent = this.firstChild.parentNode; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parent.removeChild(current); + current = next; + } + parent.removeChild(end); + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + } + /** + * Binds a view's behaviors to its binding source. + * @param source - The binding source for the view's binding behaviors. + * @param context - The execution context to run the behaviors within. + */ + bind(source, context) { + const behaviors = this.behaviors; + if (this.source === source) { + return; + } else if (this.source !== null) { + const oldSource = this.source; + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + const current = behaviors[i]; + current.unbind(oldSource); + current.bind(source, context); + } + } else { + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].bind(source, context); + } + } + } + /** + * Unbinds a view's behaviors from its binding source. + */ + unbind() { + if (this.source === null) { + return; + } + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + this.source = null; + } + /** + * Efficiently disposes of a contiguous range of synthetic view instances. + * @param views - A contiguous range of views to be disposed. + */ + static disposeContiguousBatch(views) { + if (views.length === 0) { + return; + } + range.setStartBefore(views[0].firstChild); + range.setEndAfter(views[views.length - 1].lastChild); + range.deleteContents(); + for (let i = 0, ii = views.length; i < ii; ++i) { + const view = views[i]; + const behaviors = view.behaviors; + const oldSource = view.source; + for (let j = 0, jj = behaviors.length; j < jj; ++j) { + behaviors[j].unbind(oldSource); + } + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/template.js + function html(strings, ...values) { + const directives = []; + let html2 = ""; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + const currentString = strings[i]; + let value = values[i]; + html2 += currentString; + if (value instanceof ViewTemplate) { + const template = value; + value = () => template; + } + if (typeof value === "function") { + value = new HTMLBindingDirective(value); + } + if (value instanceof TargetedHTMLDirective) { + const match = lastAttributeNameRegex.exec(currentString); + if (match !== null) { + value.targetName = match[2]; + } + } + if (value instanceof HTMLDirective) { + html2 += value.createPlaceholder(directives.length); + directives.push(value); + } else { + html2 += value; + } + } + html2 += strings[strings.length - 1]; + return new ViewTemplate(html2, directives); + } + var ViewTemplate, lastAttributeNameRegex; + var init_template = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/template.js"() { + init_dom(); + init_observable(); + init_compiler(); + init_view(); + init_html_directive(); + init_binding(); + ViewTemplate = class { + /** + * Creates an instance of ViewTemplate. + * @param html - The html representing what this template will instantiate, including placeholders for directives. + * @param directives - The directives that will be connected to placeholders in the html. + */ + constructor(html2, directives) { + this.behaviorCount = 0; + this.hasHostBehaviors = false; + this.fragment = null; + this.targetOffset = 0; + this.viewBehaviorFactories = null; + this.hostBehaviorFactories = null; + this.html = html2; + this.directives = directives; + } + /** + * Creates an HTMLView instance based on this template definition. + * @param hostBindingTarget - The element that host behaviors will be bound to. + */ + create(hostBindingTarget) { + if (this.fragment === null) { + let template; + const html2 = this.html; + if (typeof html2 === "string") { + template = document.createElement("template"); + template.innerHTML = DOM.createHTML(html2); + const fec = template.content.firstElementChild; + if (fec !== null && fec.tagName === "TEMPLATE") { + template = fec; + } + } else { + template = html2; + } + const result = compileTemplate(template, this.directives); + this.fragment = result.fragment; + this.viewBehaviorFactories = result.viewBehaviorFactories; + this.hostBehaviorFactories = result.hostBehaviorFactories; + this.targetOffset = result.targetOffset; + this.behaviorCount = this.viewBehaviorFactories.length + this.hostBehaviorFactories.length; + this.hasHostBehaviors = this.hostBehaviorFactories.length > 0; + } + const fragment = this.fragment.cloneNode(true); + const viewFactories = this.viewBehaviorFactories; + const behaviors = new Array(this.behaviorCount); + const walker = DOM.createTemplateWalker(fragment); + let behaviorIndex = 0; + let targetIndex = this.targetOffset; + let node = walker.nextNode(); + for (let ii = viewFactories.length; behaviorIndex < ii; ++behaviorIndex) { + const factory = viewFactories[behaviorIndex]; + const factoryIndex = factory.targetIndex; + while (node !== null) { + if (targetIndex === factoryIndex) { + behaviors[behaviorIndex] = factory.createBehavior(node); + break; + } else { + node = walker.nextNode(); + targetIndex++; + } + } + } + if (this.hasHostBehaviors) { + const hostFactories = this.hostBehaviorFactories; + for (let i = 0, ii = hostFactories.length; i < ii; ++i, ++behaviorIndex) { + behaviors[behaviorIndex] = hostFactories[i].createBehavior(hostBindingTarget); + } + } + return new HTMLView(fragment, behaviors); + } + /** + * Creates an HTMLView from this template, binds it to the source, and then appends it to the host. + * @param source - The data source to bind the template to. + * @param host - The Element where the template will be rendered. + * @param hostBindingTarget - An HTML element to target the host bindings at if different from the + * host that the template is being attached to. + */ + render(source, host, hostBindingTarget) { + if (typeof host === "string") { + host = document.getElementById(host); + } + if (hostBindingTarget === void 0) { + hostBindingTarget = host; + } + const view = this.create(hostBindingTarget); + view.bind(source, defaultExecutionContext); + view.appendTo(host); + return view; + } + }; + lastAttributeNameRegex = /* eslint-disable-next-line no-control-regex */ + /([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js + function reduceStyles(styles) { + return styles.map((x) => x instanceof ElementStyles ? reduceStyles(x.styles) : [x]).reduce((prev, curr) => prev.concat(curr), []); + } + function reduceBehaviors(styles) { + return styles.map((x) => x instanceof ElementStyles ? x.behaviors : null).reduce((prev, curr) => { + if (curr === null) { + return prev; + } + if (prev === null) { + prev = []; + } + return prev.concat(curr); + }, null); + } + function separateSheetsToPrepend(sheets) { + const prepend = []; + const append = []; + sheets.forEach((x) => (x[prependToAdoptedStyleSheetsSymbol] ? prepend : append).push(x)); + return { prepend, append }; + } + function getNextStyleClass() { + return `fast-style-class-${++styleClassId}`; + } + var ElementStyles, prependToAdoptedStyleSheetsSymbol, addAdoptedStyleSheets, removeAdoptedStyleSheets, AdoptedStyleSheetsStyles, styleClassId, StyleElementStyles; + var init_element_styles = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js"() { + init_dom(); + ElementStyles = class { + constructor() { + this.targets = /* @__PURE__ */ new WeakSet(); + } + /** @internal */ + addStylesTo(target) { + this.targets.add(target); + } + /** @internal */ + removeStylesFrom(target) { + this.targets.delete(target); + } + /** @internal */ + isAttachedTo(target) { + return this.targets.has(target); + } + /** + * Associates behaviors with this set of styles. + * @param behaviors - The behaviors to associate. + */ + withBehaviors(...behaviors) { + this.behaviors = this.behaviors === null ? behaviors : this.behaviors.concat(behaviors); + return this; + } + }; + ElementStyles.create = (() => { + if (DOM.supportsAdoptedStyleSheets) { + const styleSheetCache = /* @__PURE__ */ new Map(); + return (styles) => ( + // eslint-disable-next-line @typescript-eslint/no-use-before-define + new AdoptedStyleSheetsStyles(styles, styleSheetCache) + ); + } + return (styles) => new StyleElementStyles(styles); + })(); + prependToAdoptedStyleSheetsSymbol = /* @__PURE__ */ Symbol("prependToAdoptedStyleSheets"); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets = [...prepend, ...target.adoptedStyleSheets, ...append]; + }; + removeAdoptedStyleSheets = (target, sheets) => { + target.adoptedStyleSheets = target.adoptedStyleSheets.filter((x) => sheets.indexOf(x) === -1); + }; + if (DOM.supportsAdoptedStyleSheets) { + try { + document.adoptedStyleSheets.push(); + document.adoptedStyleSheets.splice(); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets.splice(0, 0, ...prepend); + target.adoptedStyleSheets.push(...append); + }; + removeAdoptedStyleSheets = (target, sheets) => { + for (const sheet of sheets) { + const index2 = target.adoptedStyleSheets.indexOf(sheet); + if (index2 !== -1) { + target.adoptedStyleSheets.splice(index2, 1); + } + } + }; + } catch (e) { + } + } + AdoptedStyleSheetsStyles = class extends ElementStyles { + constructor(styles, styleSheetCache) { + super(); + this.styles = styles; + this.styleSheetCache = styleSheetCache; + this._styleSheets = void 0; + this.behaviors = reduceBehaviors(styles); + } + get styleSheets() { + if (this._styleSheets === void 0) { + const styles = this.styles; + const styleSheetCache = this.styleSheetCache; + this._styleSheets = reduceStyles(styles).map((x) => { + if (x instanceof CSSStyleSheet) { + return x; + } + let sheet = styleSheetCache.get(x); + if (sheet === void 0) { + sheet = new CSSStyleSheet(); + sheet.replaceSync(x); + styleSheetCache.set(x, sheet); + } + return sheet; + }); + } + return this._styleSheets; + } + addStylesTo(target) { + addAdoptedStyleSheets(target, this.styleSheets); + super.addStylesTo(target); + } + removeStylesFrom(target) { + removeAdoptedStyleSheets(target, this.styleSheets); + super.removeStylesFrom(target); + } + }; + styleClassId = 0; + StyleElementStyles = class extends ElementStyles { + constructor(styles) { + super(); + this.styles = styles; + this.behaviors = null; + this.behaviors = reduceBehaviors(styles); + this.styleSheets = reduceStyles(styles); + this.styleClass = getNextStyleClass(); + } + addStylesTo(target) { + const styleSheets = this.styleSheets; + const styleClass = this.styleClass; + target = this.normalizeTarget(target); + for (let i = 0; i < styleSheets.length; i++) { + const element = document.createElement("style"); + element.innerHTML = styleSheets[i]; + element.className = styleClass; + target.append(element); + } + super.addStylesTo(target); + } + removeStylesFrom(target) { + target = this.normalizeTarget(target); + const styles = target.querySelectorAll(`.${this.styleClass}`); + for (let i = 0, ii = styles.length; i < ii; ++i) { + target.removeChild(styles[i]); + } + super.removeStylesFrom(target); + } + isAttachedTo(target) { + return super.isAttachedTo(this.normalizeTarget(target)); + } + normalizeTarget(target) { + return target === document ? document.body : target; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/attributes.js + function attr(configOrTarget, prop) { + let config; + function decorator($target, $prop) { + if (arguments.length > 1) { + config.property = $prop; + } + AttributeConfiguration.locate($target.constructor).push(config); + } + if (arguments.length > 1) { + config = {}; + decorator(configOrTarget, prop); + return; + } + config = configOrTarget === void 0 ? {} : configOrTarget; + return decorator; + } + var AttributeConfiguration, booleanConverter, nullableNumberConverter, AttributeDefinition; + var init_attributes = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/attributes.js"() { + init_observable(); + init_dom(); + init_platform(); + AttributeConfiguration = Object.freeze({ + /** + * Locates all attribute configurations associated with a type. + */ + locate: createMetadataLocator() + }); + booleanConverter = { + toView(value) { + return value ? "true" : "false"; + }, + fromView(value) { + if (value === null || value === void 0 || value === "false" || value === false || value === 0) { + return false; + } + return true; + } + }; + nullableNumberConverter = { + toView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number.toString(); + }, + fromView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number; + } + }; + AttributeDefinition = class _AttributeDefinition { + /** + * Creates an instance of AttributeDefinition. + * @param Owner - The class constructor that owns this attribute. + * @param name - The name of the property associated with the attribute. + * @param attribute - The name of the attribute in HTML. + * @param mode - The {@link AttributeMode} that describes the behavior of this attribute. + * @param converter - A {@link ValueConverter} that integrates with the property getter/setter + * to convert values to and from a DOM string. + */ + constructor(Owner, name, attribute = name.toLowerCase(), mode = "reflect", converter) { + this.guards = /* @__PURE__ */ new Set(); + this.Owner = Owner; + this.name = name; + this.attribute = attribute; + this.mode = mode; + this.converter = converter; + this.fieldName = `_${name}`; + this.callbackName = `${name}Changed`; + this.hasCallback = this.callbackName in Owner.prototype; + if (mode === "boolean" && converter === void 0) { + this.converter = booleanConverter; + } + } + /** + * Sets the value of the attribute/property on the source element. + * @param source - The source element to access. + * @param value - The value to set the attribute/property to. + */ + setValue(source, newValue) { + const oldValue = source[this.fieldName]; + const converter = this.converter; + if (converter !== void 0) { + newValue = converter.fromView(newValue); + } + if (oldValue !== newValue) { + source[this.fieldName] = newValue; + this.tryReflectToAttribute(source); + if (this.hasCallback) { + source[this.callbackName](oldValue, newValue); + } + source.$fastController.notify(this.name); + } + } + /** + * Gets the value of the attribute/property on the source element. + * @param source - The source element to access. + */ + getValue(source) { + Observable.track(source, this.name); + return source[this.fieldName]; + } + /** @internal */ + onAttributeChangedCallback(element, value) { + if (this.guards.has(element)) { + return; + } + this.guards.add(element); + this.setValue(element, value); + this.guards.delete(element); + } + tryReflectToAttribute(element) { + const mode = this.mode; + const guards = this.guards; + if (guards.has(element) || mode === "fromView") { + return; + } + DOM.queueUpdate(() => { + guards.add(element); + const latestValue = element[this.fieldName]; + switch (mode) { + case "reflect": + const converter = this.converter; + DOM.setAttribute(element, this.attribute, converter !== void 0 ? converter.toView(latestValue) : latestValue); + break; + case "boolean": + DOM.setBooleanAttribute(element, this.attribute, latestValue); + break; + } + guards.delete(element); + }); + } + /** + * Collects all attribute definitions associated with the owner. + * @param Owner - The class constructor to collect attribute for. + * @param attributeLists - Any existing attributes to collect and merge with those associated with the owner. + * @internal + */ + static collect(Owner, ...attributeLists) { + const attributes = []; + attributeLists.push(AttributeConfiguration.locate(Owner)); + for (let i = 0, ii = attributeLists.length; i < ii; ++i) { + const list = attributeLists[i]; + if (list === void 0) { + continue; + } + for (let j = 0, jj = list.length; j < jj; ++j) { + const config = list[j]; + if (typeof config === "string") { + attributes.push(new _AttributeDefinition(Owner, config)); + } else { + attributes.push(new _AttributeDefinition(Owner, config.property, config.attribute, config.mode, config.converter)); + } + } + } + return attributes; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js + var defaultShadowOptions, defaultElementOptions, fastRegistry, FASTElementDefinition; + var init_fast_definitions = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js"() { + init_platform(); + init_observable(); + init_element_styles(); + init_attributes(); + defaultShadowOptions = { mode: "open" }; + defaultElementOptions = {}; + fastRegistry = FAST.getById(4, () => { + const typeToDefinition = /* @__PURE__ */ new Map(); + return Object.freeze({ + register(definition) { + if (typeToDefinition.has(definition.type)) { + return false; + } + typeToDefinition.set(definition.type, definition); + return true; + }, + getByType(key) { + return typeToDefinition.get(key); + } + }); + }); + FASTElementDefinition = class { + /** + * Creates an instance of FASTElementDefinition. + * @param type - The type this definition is being created for. + * @param nameOrConfig - The name of the element to define or a config object + * that describes the element to define. + */ + constructor(type, nameOrConfig = type.definition) { + if (typeof nameOrConfig === "string") { + nameOrConfig = { name: nameOrConfig }; + } + this.type = type; + this.name = nameOrConfig.name; + this.template = nameOrConfig.template; + const attributes = AttributeDefinition.collect(type, nameOrConfig.attributes); + const observedAttributes = new Array(attributes.length); + const propertyLookup = {}; + const attributeLookup = {}; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const current = attributes[i]; + observedAttributes[i] = current.attribute; + propertyLookup[current.name] = current; + attributeLookup[current.attribute] = current; + } + this.attributes = attributes; + this.observedAttributes = observedAttributes; + this.propertyLookup = propertyLookup; + this.attributeLookup = attributeLookup; + this.shadowOptions = nameOrConfig.shadowOptions === void 0 ? defaultShadowOptions : nameOrConfig.shadowOptions === null ? void 0 : Object.assign(Object.assign({}, defaultShadowOptions), nameOrConfig.shadowOptions); + this.elementOptions = nameOrConfig.elementOptions === void 0 ? defaultElementOptions : Object.assign(Object.assign({}, defaultElementOptions), nameOrConfig.elementOptions); + this.styles = nameOrConfig.styles === void 0 ? void 0 : Array.isArray(nameOrConfig.styles) ? ElementStyles.create(nameOrConfig.styles) : nameOrConfig.styles instanceof ElementStyles ? nameOrConfig.styles : ElementStyles.create([nameOrConfig.styles]); + } + /** + * Indicates if this element has been defined in at least one registry. + */ + get isDefined() { + return !!fastRegistry.getByType(this.type); + } + /** + * Defines a custom element based on this definition. + * @param registry - The element registry to define the element in. + */ + define(registry2 = customElements) { + const type = this.type; + if (fastRegistry.register(this)) { + const attributes = this.attributes; + const proto = type.prototype; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + Observable.defineProperty(proto, attributes[i]); + } + Reflect.defineProperty(type, "observedAttributes", { + value: this.observedAttributes, + enumerable: true + }); + } + if (!registry2.get(this.name)) { + registry2.define(this.name, type, this.elementOptions); + } + return this; + } + }; + FASTElementDefinition.forType = fastRegistry.getByType; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/controller.js + function getShadowRoot(element) { + return element.shadowRoot || shadowRoots.get(element) || null; + } + var shadowRoots, defaultEventOptions, Controller; + var init_controller = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/controller.js"() { + init_dom(); + init_notifier(); + init_observable(); + init_fast_definitions(); + shadowRoots = /* @__PURE__ */ new WeakMap(); + defaultEventOptions = { + bubbles: true, + composed: true, + cancelable: true + }; + Controller = class _Controller extends PropertyChangeNotifier { + /** + * Creates a Controller to control the specified element. + * @param element - The element to be controlled by this controller. + * @param definition - The element definition metadata that instructs this + * controller in how to handle rendering and other platform integrations. + * @internal + */ + constructor(element, definition) { + super(element); + this.boundObservables = null; + this.behaviors = null; + this.needsInitialization = true; + this._template = null; + this._styles = null; + this._isConnected = false; + this.$fastController = this; + this.view = null; + this.element = element; + this.definition = definition; + const shadowOptions = definition.shadowOptions; + if (shadowOptions !== void 0) { + const shadowRoot = element.attachShadow(shadowOptions); + if (shadowOptions.mode === "closed") { + shadowRoots.set(element, shadowRoot); + } + } + const accessors = Observable.getAccessors(element); + if (accessors.length > 0) { + const boundObservables = this.boundObservables = /* @__PURE__ */ Object.create(null); + for (let i = 0, ii = accessors.length; i < ii; ++i) { + const propertyName = accessors[i].name; + const value = element[propertyName]; + if (value !== void 0) { + delete element[propertyName]; + boundObservables[propertyName] = value; + } + } + } + } + /** + * Indicates whether or not the custom element has been + * connected to the document. + */ + get isConnected() { + Observable.track(this, "isConnected"); + return this._isConnected; + } + setIsConnected(value) { + this._isConnected = value; + Observable.notify(this, "isConnected"); + } + /** + * Gets/sets the template used to render the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get template() { + return this._template; + } + set template(value) { + if (this._template === value) { + return; + } + this._template = value; + if (!this.needsInitialization) { + this.renderTemplate(value); + } + } + /** + * Gets/sets the primary styles used for the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get styles() { + return this._styles; + } + set styles(value) { + if (this._styles === value) { + return; + } + if (this._styles !== null) { + this.removeStyles(this._styles); + } + this._styles = value; + if (!this.needsInitialization && value !== null) { + this.addStyles(value); + } + } + /** + * Adds styles to this element. Providing an HTMLStyleElement will attach the element instance to the shadowRoot. + * @param styles - The styles to add. + */ + addStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.append(styles); + } else if (!styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.addStylesTo(target); + if (sourceBehaviors !== null) { + this.addBehaviors(sourceBehaviors); + } + } + } + /** + * Removes styles from this element. Providing an HTMLStyleElement will detach the element instance from the shadowRoot. + * @param styles - the styles to remove. + */ + removeStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.removeChild(styles); + } else if (styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.removeStylesFrom(target); + if (sourceBehaviors !== null) { + this.removeBehaviors(sourceBehaviors); + } + } + } + /** + * Adds behaviors to this element. + * @param behaviors - The behaviors to add. + */ + addBehaviors(behaviors) { + const targetBehaviors = this.behaviors || (this.behaviors = /* @__PURE__ */ new Map()); + const length = behaviors.length; + const behaviorsToBind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + targetBehaviors.set(behavior, targetBehaviors.get(behavior) + 1); + } else { + targetBehaviors.set(behavior, 1); + behaviorsToBind.push(behavior); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToBind.length; ++i) { + behaviorsToBind[i].bind(element, defaultExecutionContext); + } + } + } + /** + * Removes behaviors from this element. + * @param behaviors - The behaviors to remove. + * @param force - Forces unbinding of behaviors. + */ + removeBehaviors(behaviors, force = false) { + const targetBehaviors = this.behaviors; + if (targetBehaviors === null) { + return; + } + const length = behaviors.length; + const behaviorsToUnbind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + const count = targetBehaviors.get(behavior) - 1; + count === 0 || force ? targetBehaviors.delete(behavior) && behaviorsToUnbind.push(behavior) : targetBehaviors.set(behavior, count); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToUnbind.length; ++i) { + behaviorsToUnbind[i].unbind(element); + } + } + } + /** + * Runs connected lifecycle behavior on the associated element. + */ + onConnectedCallback() { + if (this._isConnected) { + return; + } + const element = this.element; + if (this.needsInitialization) { + this.finishInitialization(); + } else if (this.view !== null) { + this.view.bind(element, defaultExecutionContext); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + for (const [behavior] of behaviors) { + behavior.bind(element, defaultExecutionContext); + } + } + this.setIsConnected(true); + } + /** + * Runs disconnected lifecycle behavior on the associated element. + */ + onDisconnectedCallback() { + if (!this._isConnected) { + return; + } + this.setIsConnected(false); + const view = this.view; + if (view !== null) { + view.unbind(); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + const element = this.element; + for (const [behavior] of behaviors) { + behavior.unbind(element); + } + } + } + /** + * Runs the attribute changed callback for the associated element. + * @param name - The name of the attribute that changed. + * @param oldValue - The previous value of the attribute. + * @param newValue - The new value of the attribute. + */ + onAttributeChangedCallback(name, oldValue, newValue) { + const attrDef = this.definition.attributeLookup[name]; + if (attrDef !== void 0) { + attrDef.onAttributeChangedCallback(this.element, newValue); + } + } + /** + * Emits a custom HTML event. + * @param type - The type name of the event. + * @param detail - The event detail object to send with the event. + * @param options - The event options. By default bubbles and composed. + * @remarks + * Only emits events if connected. + */ + emit(type, detail, options) { + if (this._isConnected) { + return this.element.dispatchEvent(new CustomEvent(type, Object.assign(Object.assign({ detail }, defaultEventOptions), options))); + } + return false; + } + finishInitialization() { + const element = this.element; + const boundObservables = this.boundObservables; + if (boundObservables !== null) { + const propertyNames = Object.keys(boundObservables); + for (let i = 0, ii = propertyNames.length; i < ii; ++i) { + const propertyName = propertyNames[i]; + element[propertyName] = boundObservables[propertyName]; + } + this.boundObservables = null; + } + const definition = this.definition; + if (this._template === null) { + if (this.element.resolveTemplate) { + this._template = this.element.resolveTemplate(); + } else if (definition.template) { + this._template = definition.template || null; + } + } + if (this._template !== null) { + this.renderTemplate(this._template); + } + if (this._styles === null) { + if (this.element.resolveStyles) { + this._styles = this.element.resolveStyles(); + } else if (definition.styles) { + this._styles = definition.styles || null; + } + } + if (this._styles !== null) { + this.addStyles(this._styles); + } + this.needsInitialization = false; + } + renderTemplate(template) { + const element = this.element; + const host = getShadowRoot(element) || element; + if (this.view !== null) { + this.view.dispose(); + this.view = null; + } else if (!this.needsInitialization) { + DOM.removeChildNodes(host); + } + if (template) { + this.view = template.render(element, host, element); + } + } + /** + * Locates or creates a controller for the specified element. + * @param element - The element to return the controller for. + * @remarks + * The specified element must have a {@link FASTElementDefinition} + * registered either through the use of the {@link customElement} + * decorator or a call to `FASTElement.define`. + */ + static forCustomElement(element) { + const controller = element.$fastController; + if (controller !== void 0) { + return controller; + } + const definition = FASTElementDefinition.forType(element.constructor); + if (definition === void 0) { + throw new Error("Missing FASTElement definition."); + } + return element.$fastController = new _Controller(element, definition); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js + function createFASTElement(BaseType) { + return class extends BaseType { + constructor() { + super(); + Controller.forCustomElement(this); + } + $emit(type, detail, options) { + return this.$fastController.emit(type, detail, options); + } + connectedCallback() { + this.$fastController.onConnectedCallback(); + } + disconnectedCallback() { + this.$fastController.onDisconnectedCallback(); + } + attributeChangedCallback(name, oldValue, newValue) { + this.$fastController.onAttributeChangedCallback(name, oldValue, newValue); + } + }; + } + var FASTElement; + var init_fast_element = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js"() { + init_controller(); + init_fast_definitions(); + FASTElement = Object.assign(createFASTElement(HTMLElement), { + /** + * Creates a new FASTElement base class inherited from the + * provided base type. + * @param BaseType - The base element type to inherit from. + */ + from(BaseType) { + return createFASTElement(BaseType); + }, + /** + * Defines a platform custom element based on the provided type and definition. + * @param type - The custom element type to define. + * @param nameOrDef - The name of the element to define or a definition object + * that describes the element to define. + */ + define(type, nameOrDef) { + return new FASTElementDefinition(type, nameOrDef).define().type; + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js + var CSSDirective; + var init_css_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js"() { + CSSDirective = class { + /** + * Creates a CSS fragment to interpolate into the CSS document. + * @returns - the string to interpolate into CSS + */ + createCSS() { + return ""; + } + /** + * Creates a behavior to bind to the host element. + * @returns - the behavior to bind to the host element, or undefined. + */ + createBehavior() { + return void 0; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css.js + function collectStyles(strings, values) { + const styles = []; + let cssString = ""; + const behaviors = []; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + cssString += strings[i]; + let value = values[i]; + if (value instanceof CSSDirective) { + const behavior = value.createBehavior(); + value = value.createCSS(); + if (behavior) { + behaviors.push(behavior); + } + } + if (value instanceof ElementStyles || value instanceof CSSStyleSheet) { + if (cssString.trim() !== "") { + styles.push(cssString); + cssString = ""; + } + styles.push(value); + } else { + cssString += value; + } + } + cssString += strings[strings.length - 1]; + if (cssString.trim() !== "") { + styles.push(cssString); + } + return { + styles, + behaviors + }; + } + function css(strings, ...values) { + const { styles, behaviors } = collectStyles(strings, values); + const elementStyles = ElementStyles.create(styles); + if (behaviors.length) { + elementStyles.withBehaviors(...behaviors); + } + return elementStyles; + } + var init_css = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css.js"() { + init_css_directive(); + init_element_styles(); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js + function newSplice(index2, removed, addedCount) { + return { + index: index2, + removed, + addedCount + }; + } + function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) { + const rowCount = oldEnd - oldStart + 1; + const columnCount = currentEnd - currentStart + 1; + const distances = new Array(rowCount); + let north; + let west; + for (let i = 0; i < rowCount; ++i) { + distances[i] = new Array(columnCount); + distances[i][0] = i; + } + for (let j = 0; j < columnCount; ++j) { + distances[0][j] = j; + } + for (let i = 1; i < rowCount; ++i) { + for (let j = 1; j < columnCount; ++j) { + if (current[currentStart + j - 1] === old[oldStart + i - 1]) { + distances[i][j] = distances[i - 1][j - 1]; + } else { + north = distances[i - 1][j] + 1; + west = distances[i][j - 1] + 1; + distances[i][j] = north < west ? north : west; + } + } + } + return distances; + } + function spliceOperationsFromEditDistances(distances) { + let i = distances.length - 1; + let j = distances[0].length - 1; + let current = distances[i][j]; + const edits = []; + while (i > 0 || j > 0) { + if (i === 0) { + edits.push(EDIT_ADD); + j--; + continue; + } + if (j === 0) { + edits.push(EDIT_DELETE); + i--; + continue; + } + const northWest = distances[i - 1][j - 1]; + const west = distances[i - 1][j]; + const north = distances[i][j - 1]; + let min; + if (west < north) { + min = west < northWest ? west : northWest; + } else { + min = north < northWest ? north : northWest; + } + if (min === northWest) { + if (northWest === current) { + edits.push(EDIT_LEAVE); + } else { + edits.push(EDIT_UPDATE); + current = northWest; + } + i--; + j--; + } else if (min === west) { + edits.push(EDIT_DELETE); + i--; + current = west; + } else { + edits.push(EDIT_ADD); + j--; + current = north; + } + } + edits.reverse(); + return edits; + } + function sharedPrefix(current, old, searchLength) { + for (let i = 0; i < searchLength; ++i) { + if (current[i] !== old[i]) { + return i; + } + } + return searchLength; + } + function sharedSuffix(current, old, searchLength) { + let index1 = current.length; + let index2 = old.length; + let count = 0; + while (count < searchLength && current[--index1] === old[--index2]) { + count++; + } + return count; + } + function intersect(start1, end1, start2, end2) { + if (end1 < start2 || end2 < start1) { + return -1; + } + if (end1 === start2 || end2 === start1) { + return 0; + } + if (start1 < start2) { + if (end1 < end2) { + return end1 - start2; + } + return end2 - start2; + } + if (end2 < end1) { + return end2 - start1; + } + return end1 - start1; + } + function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) { + let prefixCount = 0; + let suffixCount = 0; + const minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart); + if (currentStart === 0 && oldStart === 0) { + prefixCount = sharedPrefix(current, old, minLength); + } + if (currentEnd === current.length && oldEnd === old.length) { + suffixCount = sharedSuffix(current, old, minLength - prefixCount); + } + currentStart += prefixCount; + oldStart += prefixCount; + currentEnd -= suffixCount; + oldEnd -= suffixCount; + if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) { + return emptyArray; + } + if (currentStart === currentEnd) { + const splice2 = newSplice(currentStart, [], 0); + while (oldStart < oldEnd) { + splice2.removed.push(old[oldStart++]); + } + return [splice2]; + } else if (oldStart === oldEnd) { + return [newSplice(currentStart, [], currentEnd - currentStart)]; + } + const ops = spliceOperationsFromEditDistances(calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd)); + const splices = []; + let splice = void 0; + let index2 = currentStart; + let oldIndex = oldStart; + for (let i = 0; i < ops.length; ++i) { + switch (ops[i]) { + case EDIT_LEAVE: + if (splice !== void 0) { + splices.push(splice); + splice = void 0; + } + index2++; + oldIndex++; + break; + case EDIT_UPDATE: + if (splice === void 0) { + splice = newSplice(index2, [], 0); + } + splice.addedCount++; + index2++; + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + case EDIT_ADD: + if (splice === void 0) { + splice = newSplice(index2, [], 0); + } + splice.addedCount++; + index2++; + break; + case EDIT_DELETE: + if (splice === void 0) { + splice = newSplice(index2, [], 0); + } + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + } + } + if (splice !== void 0) { + splices.push(splice); + } + return splices; + } + function mergeSplice(splices, index2, removed, addedCount) { + const splice = newSplice(index2, removed, addedCount); + let inserted = false; + let insertionOffset = 0; + for (let i = 0; i < splices.length; i++) { + const current = splices[i]; + current.index += insertionOffset; + if (inserted) { + continue; + } + const intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount); + if (intersectCount >= 0) { + splices.splice(i, 1); + i--; + insertionOffset -= current.addedCount - current.removed.length; + splice.addedCount += current.addedCount - intersectCount; + const deleteCount = splice.removed.length + current.removed.length - intersectCount; + if (!splice.addedCount && !deleteCount) { + inserted = true; + } else { + let currentRemoved = current.removed; + if (splice.index < current.index) { + const prepend = splice.removed.slice(0, current.index - splice.index); + $push.apply(prepend, currentRemoved); + currentRemoved = prepend; + } + if (splice.index + splice.removed.length > current.index + current.addedCount) { + const append = splice.removed.slice(current.index + current.addedCount - splice.index); + $push.apply(currentRemoved, append); + } + splice.removed = currentRemoved; + if (current.index < splice.index) { + splice.index = current.index; + } + } + } else if (splice.index < current.index) { + inserted = true; + splices.splice(i, 0, splice); + i++; + const offset = splice.addedCount - splice.removed.length; + current.index += offset; + insertionOffset += offset; + } + } + if (!inserted) { + splices.push(splice); + } + } + function createInitialSplices(changeRecords) { + const splices = []; + for (let i = 0, ii = changeRecords.length; i < ii; i++) { + const record = changeRecords[i]; + mergeSplice(splices, record.index, record.removed, record.addedCount); + } + return splices; + } + function projectArraySplices(array, changeRecords) { + let splices = []; + const initialSplices = createInitialSplices(changeRecords); + for (let i = 0, ii = initialSplices.length; i < ii; ++i) { + const splice = initialSplices[i]; + if (splice.addedCount === 1 && splice.removed.length === 1) { + if (splice.removed[0] !== array[splice.index]) { + splices.push(splice); + } + continue; + } + splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length)); + } + return splices; + } + var EDIT_LEAVE, EDIT_UPDATE, EDIT_ADD, EDIT_DELETE, $push; + var init_array_change_records = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js"() { + init_platform(); + EDIT_LEAVE = 0; + EDIT_UPDATE = 1; + EDIT_ADD = 2; + EDIT_DELETE = 3; + $push = Array.prototype.push; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js + function adjustIndex(changeRecord, array) { + let index2 = changeRecord.index; + const arrayLength = array.length; + if (index2 > arrayLength) { + index2 = arrayLength - changeRecord.addedCount; + } else if (index2 < 0) { + index2 = arrayLength + changeRecord.removed.length + index2 - changeRecord.addedCount; + } + if (index2 < 0) { + index2 = 0; + } + changeRecord.index = index2; + return changeRecord; + } + function enableArrayObservation() { + if (arrayObservationEnabled) { + return; + } + arrayObservationEnabled = true; + Observable.setArrayObserverFactory((collection) => { + return new ArrayObserver(collection); + }); + const proto = Array.prototype; + if (proto.$fastPatch) { + return; + } + Reflect.defineProperty(proto, "$fastPatch", { + value: 1, + enumerable: false + }); + const pop = proto.pop; + const push = proto.push; + const reverse = proto.reverse; + const shift = proto.shift; + const sort = proto.sort; + const splice = proto.splice; + const unshift = proto.unshift; + proto.pop = function() { + const notEmpty = this.length > 0; + const methodCallResult = pop.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(this.length, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.push = function() { + const methodCallResult = push.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(this.length - arguments.length, [], arguments.length), this)); + } + return methodCallResult; + }; + proto.reverse = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = reverse.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.shift = function() { + const notEmpty = this.length > 0; + const methodCallResult = shift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(0, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.sort = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = sort.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.splice = function() { + const methodCallResult = splice.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(+arguments[0], methodCallResult, arguments.length > 2 ? arguments.length - 2 : 0), this)); + } + return methodCallResult; + }; + proto.unshift = function() { + const methodCallResult = unshift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(0, [], arguments.length), this)); + } + return methodCallResult; + }; + } + var arrayObservationEnabled, ArrayObserver; + var init_array_observer = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js"() { + init_dom(); + init_array_change_records(); + init_notifier(); + init_observable(); + arrayObservationEnabled = false; + ArrayObserver = class extends SubscriberSet { + constructor(source) { + super(source); + this.oldCollection = void 0; + this.splices = void 0; + this.needsQueue = true; + this.call = this.flush; + Reflect.defineProperty(source, "$fastController", { + value: this, + enumerable: false + }); + } + subscribe(subscriber) { + this.flush(); + super.subscribe(subscriber); + } + addSplice(splice) { + if (this.splices === void 0) { + this.splices = [splice]; + } else { + this.splices.push(splice); + } + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + reset(oldCollection) { + this.oldCollection = oldCollection; + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + flush() { + const splices = this.splices; + const oldCollection = this.oldCollection; + if (splices === void 0 && oldCollection === void 0) { + return; + } + this.needsQueue = true; + this.splices = void 0; + this.oldCollection = void 0; + const finalSplices = oldCollection === void 0 ? projectArraySplices(this.source, splices) : calcSplices(this.source, 0, this.source.length, oldCollection, 0, oldCollection.length); + this.notify(finalSplices); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/ref.js + function ref(propertyName) { + return new AttachedBehaviorHTMLDirective("fast-ref", RefBehavior, propertyName); + } + var RefBehavior; + var init_ref = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/ref.js"() { + init_html_directive(); + RefBehavior = class { + /** + * Creates an instance of RefBehavior. + * @param target - The element to reference. + * @param propertyName - The name of the property to assign the reference to. + */ + constructor(target, propertyName) { + this.target = target; + this.propertyName = propertyName; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + source[this.propertyName] = this.target; + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + /* eslint-disable-next-line @typescript-eslint/no-empty-function */ + unbind() { + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/interfaces.js + var isFunction2; + var init_interfaces = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/interfaces.js"() { + isFunction2 = (object) => typeof object === "function"; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/when.js + function normalizeBinding(value) { + return value === void 0 ? noTemplate : isFunction2(value) ? value : () => value; + } + function when(binding, templateOrTemplateBinding, elseTemplateOrTemplateBinding) { + const dataBinding = isFunction2(binding) ? binding : () => binding; + const templateBinding = normalizeBinding(templateOrTemplateBinding); + const elseBinding = normalizeBinding(elseTemplateOrTemplateBinding); + return (source, context) => dataBinding(source, context) ? templateBinding(source, context) : elseBinding(source, context); + } + var noTemplate; + var init_when = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/when.js"() { + init_interfaces(); + noTemplate = () => null; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js + function bindWithoutPositioning(view, items, index2, context) { + view.bind(items[index2], context); + } + function bindWithPositioning(view, items, index2, context) { + const childContext = Object.create(context); + childContext.index = index2; + childContext.length = items.length; + view.bind(items[index2], childContext); + } + var defaultRepeatOptions, RepeatBehavior, RepeatDirective; + var init_repeat = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js"() { + init_dom(); + init_observable(); + init_array_observer(); + init_platform(); + init_html_directive(); + init_view(); + defaultRepeatOptions = Object.freeze({ + positioning: false, + recycle: true + }); + RepeatBehavior = class { + /** + * Creates an instance of RepeatBehavior. + * @param location - The location in the DOM to render the repeat. + * @param itemsBinding - The array to render. + * @param isItemsBindingVolatile - Indicates whether the items binding has volatile dependencies. + * @param templateBinding - The template to render for each item. + * @param isTemplateBindingVolatile - Indicates whether the template binding has volatile dependencies. + * @param options - Options used to turn on special repeat features. + */ + constructor(location, itemsBinding, isItemsBindingVolatile, templateBinding, isTemplateBindingVolatile, options) { + this.location = location; + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.source = null; + this.views = []; + this.items = null; + this.itemsObserver = null; + this.originalContext = void 0; + this.childContext = void 0; + this.bindView = bindWithoutPositioning; + this.itemsBindingObserver = Observable.binding(itemsBinding, this, isItemsBindingVolatile); + this.templateBindingObserver = Observable.binding(templateBinding, this, isTemplateBindingVolatile); + if (options.positioning) { + this.bindView = bindWithPositioning; + } + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source, context) { + this.source = source; + this.originalContext = context; + this.childContext = Object.create(context); + this.childContext.parent = source; + this.childContext.parentContext = this.originalContext; + this.items = this.itemsBindingObserver.observe(source, this.originalContext); + this.template = this.templateBindingObserver.observe(source, this.originalContext); + this.observeItems(true); + this.refreshAllViews(); + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.source = null; + this.items = null; + if (this.itemsObserver !== null) { + this.itemsObserver.unsubscribe(this); + } + this.unbindAllViews(); + this.itemsBindingObserver.disconnect(); + this.templateBindingObserver.disconnect(); + } + /** @internal */ + handleChange(source, args) { + if (source === this.itemsBinding) { + this.items = this.itemsBindingObserver.observe(this.source, this.originalContext); + this.observeItems(); + this.refreshAllViews(); + } else if (source === this.templateBinding) { + this.template = this.templateBindingObserver.observe(this.source, this.originalContext); + this.refreshAllViews(true); + } else { + this.updateViews(args); + } + } + observeItems(force = false) { + if (!this.items) { + this.items = emptyArray; + return; + } + const oldObserver = this.itemsObserver; + const newObserver = this.itemsObserver = Observable.getNotifier(this.items); + const hasNewObserver = oldObserver !== newObserver; + if (hasNewObserver && oldObserver !== null) { + oldObserver.unsubscribe(this); + } + if (hasNewObserver || force) { + newObserver.subscribe(this); + } + } + updateViews(splices) { + const childContext = this.childContext; + const views = this.views; + const bindView = this.bindView; + const items = this.items; + const template = this.template; + const recycle = this.options.recycle; + const leftoverViews = []; + let leftoverIndex = 0; + let availableViews = 0; + for (let i = 0, ii = splices.length; i < ii; ++i) { + const splice = splices[i]; + const removed = splice.removed; + let removeIndex = 0; + let addIndex = splice.index; + const end = addIndex + splice.addedCount; + const removedViews = views.splice(splice.index, removed.length); + const totalAvailableViews = availableViews = leftoverViews.length + removedViews.length; + for (; addIndex < end; ++addIndex) { + const neighbor = views[addIndex]; + const location = neighbor ? neighbor.firstChild : this.location; + let view; + if (recycle && availableViews > 0) { + if (removeIndex <= totalAvailableViews && removedViews.length > 0) { + view = removedViews[removeIndex]; + removeIndex++; + } else { + view = leftoverViews[leftoverIndex]; + leftoverIndex++; + } + availableViews--; + } else { + view = template.create(); + } + views.splice(addIndex, 0, view); + bindView(view, items, addIndex, childContext); + view.insertBefore(location); + } + if (removedViews[removeIndex]) { + leftoverViews.push(...removedViews.slice(removeIndex)); + } + } + for (let i = leftoverIndex, ii = leftoverViews.length; i < ii; ++i) { + leftoverViews[i].dispose(); + } + if (this.options.positioning) { + for (let i = 0, ii = views.length; i < ii; ++i) { + const currentContext = views[i].context; + currentContext.length = ii; + currentContext.index = i; + } + } + } + refreshAllViews(templateChanged = false) { + const items = this.items; + const childContext = this.childContext; + const template = this.template; + const location = this.location; + const bindView = this.bindView; + let itemsLength = items.length; + let views = this.views; + let viewsLength = views.length; + if (itemsLength === 0 || templateChanged || !this.options.recycle) { + HTMLView.disposeContiguousBatch(views); + viewsLength = 0; + } + if (viewsLength === 0) { + this.views = views = new Array(itemsLength); + for (let i = 0; i < itemsLength; ++i) { + const view = template.create(); + bindView(view, items, i, childContext); + views[i] = view; + view.insertBefore(location); + } + } else { + let i = 0; + for (; i < itemsLength; ++i) { + if (i < viewsLength) { + const view = views[i]; + bindView(view, items, i, childContext); + } else { + const view = template.create(); + bindView(view, items, i, childContext); + views.push(view); + view.insertBefore(location); + } + } + const removed = views.splice(i, viewsLength - i); + for (i = 0, itemsLength = removed.length; i < itemsLength; ++i) { + removed[i].dispose(); + } + } + } + unbindAllViews() { + const views = this.views; + for (let i = 0, ii = views.length; i < ii; ++i) { + views[i].unbind(); + } + } + }; + RepeatDirective = class extends HTMLDirective { + /** + * Creates an instance of RepeatDirective. + * @param itemsBinding - The binding that provides the array to render. + * @param templateBinding - The template binding used to obtain a template to render for each item in the array. + * @param options - Options used to turn on special repeat features. + */ + constructor(itemsBinding, templateBinding, options) { + super(); + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.createPlaceholder = DOM.createBlockPlaceholder; + enableArrayObservation(); + this.isItemsBindingVolatile = Observable.isVolatileBinding(itemsBinding); + this.isTemplateBindingVolatile = Observable.isVolatileBinding(templateBinding); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + */ + createBehavior(target) { + return new RepeatBehavior(target, this.itemsBinding, this.isItemsBindingVolatile, this.templateBinding, this.isTemplateBindingVolatile, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js + function elements2(selector) { + if (selector) { + return function(value, index2, array) { + return value.nodeType === 1 && value.matches(selector); + }; + } + return function(value, index2, array) { + return value.nodeType === 1; + }; + } + var NodeObservationBehavior; + var init_node_observation = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js"() { + init_observable(); + init_platform(); + NodeObservationBehavior = class { + /** + * Creates an instance of NodeObservationBehavior. + * @param target - The target to assign the nodes property on. + * @param options - The options to use in configuring node observation. + */ + constructor(target, options) { + this.target = target; + this.options = options; + this.source = null; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + const name = this.options.property; + this.shouldUpdate = Observable.getAccessors(source).some((x) => x.name === name); + this.source = source; + this.updateTarget(this.computeNodes()); + if (this.shouldUpdate) { + this.observe(); + } + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.updateTarget(emptyArray); + this.source = null; + if (this.shouldUpdate) { + this.disconnect(); + } + } + /** @internal */ + handleEvent() { + this.updateTarget(this.computeNodes()); + } + computeNodes() { + let nodes = this.getNodes(); + if (this.options.filter !== void 0) { + nodes = nodes.filter(this.options.filter); + } + return nodes; + } + updateTarget(value) { + this.source[this.options.property] = value; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js + function slotted(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { property: propertyOrOptions }; + } + return new AttachedBehaviorHTMLDirective("fast-slotted", SlottedBehavior, propertyOrOptions); + } + var SlottedBehavior; + var init_slotted = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js"() { + init_html_directive(); + init_node_observation(); + SlottedBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of SlottedBehavior. + * @param target - The slot element target to observe. + * @param options - The options to use when observing the slot. + */ + constructor(target, options) { + super(target, options); + } + /** + * Begins observation of the nodes. + */ + observe() { + this.target.addEventListener("slotchange", this); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.target.removeEventListener("slotchange", this); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + return this.target.assignedNodes(this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/children.js + function children(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { + property: propertyOrOptions + }; + } + return new AttachedBehaviorHTMLDirective("fast-children", ChildrenBehavior, propertyOrOptions); + } + var ChildrenBehavior; + var init_children = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/children.js"() { + init_html_directive(); + init_node_observation(); + ChildrenBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of ChildrenBehavior. + * @param target - The element target to observe children on. + * @param options - The options to use when observing the element children. + */ + constructor(target, options) { + super(target, options); + this.observer = null; + options.childList = true; + } + /** + * Begins observation of the nodes. + */ + observe() { + if (this.observer === null) { + this.observer = new MutationObserver(this.handleEvent.bind(this)); + } + this.observer.observe(this.target, this.options); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.observer.disconnect(); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + if ("subtree" in this.options) { + return Array.from(this.target.querySelectorAll(this.options.selector)); + } + return Array.from(this.target.childNodes); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/index.js + var init_esm = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/index.js"() { + init_platform(); + init_template(); + init_fast_element(); + init_fast_definitions(); + init_attributes(); + init_controller(); + init_compiler(); + init_element_styles(); + init_css(); + init_css_directive(); + init_view(); + init_observable(); + init_notifier(); + init_dom(); + init_binding(); + init_html_directive(); + init_ref(); + init_when(); + init_repeat(); + init_slotted(); + init_children(); + init_node_observation(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js + var StartEnd, endSlotTemplate, startSlotTemplate, endTemplate, startTemplate; + var init_start_end = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js"() { + init_esm(); + StartEnd = class { + handleStartContentChange() { + this.startContainer.classList.toggle("start", this.start.assignedNodes().length > 0); + } + handleEndContentChange() { + this.endContainer.classList.toggle("end", this.end.assignedNodes().length > 0); + } + }; + endSlotTemplate = (context, definition) => html` + definition.end ? "end" : void 0} + > + + ${definition.end || ""} + + +`; + startSlotTemplate = (context, definition) => html` + + + ${definition.start || ""} + + +`; + endTemplate = html` + + + +`; + startTemplate = html` + + + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js + var init_accordion_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js + function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es6 = __esm({ + "node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/di.js + function cloneArrayWithPossibleProps(source) { + const clone3 = source.slice(); + const keys = Object.keys(source); + const len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + clone3[key] = source[key]; + } + } + return clone3; + } + function getParamTypes(key) { + return (Type) => { + return Reflect.getOwnMetadata(key, Type); + }; + } + function createResolver(getter) { + return function(key) { + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor); + }; + return resolver; + }; + } + function createAllResolver(getter) { + return function(key, searchAncestors) { + searchAncestors = !!searchAncestors; + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor, searchAncestors); + }; + return resolver; + }; + } + function ignore(target, property, descriptor) { + DI.inject(ignore)(target, property, descriptor); + } + function createNewInstance(key, handler) { + return handler.getFactory(key).construct(handler); + } + function containerGetKey(d) { + return this.get(d); + } + function transformInstance(inst, transform) { + return transform(inst); + } + function isRegistry(obj) { + return typeof obj.register === "function"; + } + function isSelfRegistry(obj) { + return isRegistry(obj) && typeof obj.registerInRequestor === "boolean"; + } + function isRegisterInRequester(obj) { + return isSelfRegistry(obj) && obj.registerInRequestor; + } + function isClass(obj) { + return obj.prototype !== void 0; + } + function cacheCallbackResult(fun) { + return function(handler, requestor, resolver) { + if (cache.has(resolver)) { + return cache.get(resolver); + } + const t = fun(handler, requestor, resolver); + cache.set(resolver, t); + return t; + }; + } + function validateKey(key) { + if (key === null || key === void 0) { + throw new Error("key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?"); + } + } + function buildAllResponse(resolver, handler, requestor) { + if (resolver instanceof ResolverImpl && resolver.strategy === 4) { + const state = resolver.state; + let i = state.length; + const results = new Array(i); + while (i--) { + results[i] = state[i].resolve(handler, requestor); + } + return results; + } + return [resolver.resolve(handler, requestor)]; + } + function isObject2(value) { + return typeof value === "object" && value !== null || typeof value === "function"; + } + function isArrayIndex(value) { + switch (typeof value) { + case "number": + return value >= 0 && (value | 0) === value; + case "string": { + const result = isNumericLookup[value]; + if (result !== void 0) { + return result; + } + const length = value.length; + if (length === 0) { + return isNumericLookup[value] = false; + } + let ch = 0; + for (let i = 0; i < length; ++i) { + ch = value.charCodeAt(i); + if (i === 0 && ch === 48 && length > 1 || ch < 48 || ch > 57) { + return isNumericLookup[value] = false; + } + } + return isNumericLookup[value] = true; + } + default: + return false; + } + } + var metadataByTarget, ResolverBuilder, DefaultResolver, ContainerConfiguration, dependencyLookup, rootDOMContainer, DI, Container, inject, defaultSingletonOptions, all, lazy, optional, newInstanceForScope, newInstanceOf, ResolverImpl, FactoryImpl, containerResolver, InstrinsicTypeNames, DILocateParentEventType, factories, ContainerImpl, cache, Registration, defaultFriendlyName, isNativeFunction, isNumericLookup; + var init_di = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/di.js"() { + init_esm(); + metadataByTarget = /* @__PURE__ */ new Map(); + if (!("metadata" in Reflect)) { + Reflect.metadata = function(key, value) { + return function(target) { + Reflect.defineMetadata(key, value, target); + }; + }; + Reflect.defineMetadata = function(key, value, target) { + let metadata = metadataByTarget.get(target); + if (metadata === void 0) { + metadataByTarget.set(target, metadata = /* @__PURE__ */ new Map()); + } + metadata.set(key, value); + }; + Reflect.getOwnMetadata = function(key, target) { + const metadata = metadataByTarget.get(target); + if (metadata !== void 0) { + return metadata.get(key); + } + return void 0; + }; + } + ResolverBuilder = class { + /** + * + * @param container - The container to create resolvers for. + * @param key - The key to register resolvers under. + */ + constructor(container, key) { + this.container = container; + this.key = key; + } + /** + * Creates a resolver for an existing object instance. + * @param value - The instance to resolve. + * @returns The resolver. + */ + instance(value) { + return this.registerResolver(0, value); + } + /** + * Creates a resolver that enforces a singleton lifetime. + * @param value - The type to create and cache the singleton for. + * @returns The resolver. + */ + singleton(value) { + return this.registerResolver(1, value); + } + /** + * Creates a resolver that creates a new instance for every dependency request. + * @param value - The type to create instances of. + * @returns - The resolver. + */ + transient(value) { + return this.registerResolver(2, value); + } + /** + * Creates a resolver that invokes a callback function for every dependency resolution + * request, allowing custom logic to return the dependency. + * @param value - The callback to call during resolution. + * @returns The resolver. + */ + callback(value) { + return this.registerResolver(3, value); + } + /** + * Creates a resolver that invokes a callback function the first time that a dependency + * resolution is requested. The returned value is then cached and provided for all + * subsequent requests. + * @param value - The callback to call during the first resolution. + * @returns The resolver. + */ + cachedCallback(value) { + return this.registerResolver(3, cacheCallbackResult(value)); + } + /** + * Aliases the current key to a different key. + * @param destinationKey - The key to point the alias to. + * @returns The resolver. + */ + aliasTo(destinationKey) { + return this.registerResolver(5, destinationKey); + } + registerResolver(strategy, state) { + const { container, key } = this; + this.container = this.key = void 0; + return container.registerResolver(key, new ResolverImpl(key, strategy, state)); + } + }; + DefaultResolver = Object.freeze({ + /** + * Disables auto-registration and throws for all un-registered dependencies. + * @param key - The key to create the resolver for. + */ + none(key) { + throw Error(`${key.toString()} not registered, did you forget to add @singleton()?`); + }, + /** + * Provides default singleton resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + singleton(key) { + return new ResolverImpl(key, 1, key); + }, + /** + * Provides default transient resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + transient(key) { + return new ResolverImpl(key, 2, key); + } + }); + ContainerConfiguration = Object.freeze({ + /** + * The default configuration used when creating a DOM-disconnected container. + * @remarks + * The default creates a root container, with no parent container. It does not handle + * owner requests and it uses singleton resolution behavior for auto-registration. + */ + default: Object.freeze({ + parentLocator: () => null, + responsibleForOwnerRequests: false, + defaultResolver: DefaultResolver.singleton + }) + }); + dependencyLookup = /* @__PURE__ */ new Map(); + rootDOMContainer = null; + DI = Object.freeze({ + /** + * Creates a new dependency injection container. + * @param config - The configuration for the container. + * @returns A newly created dependency injection container. + */ + createContainer(config) { + return new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config)); + }, + /** + * Finds the dependency injection container responsible for providing dependencies + * to the specified node. + * @param node - The node to find the responsible container for. + * @returns The container responsible for providing dependencies to the node. + * @remarks + * This will be the same as the parent container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findResponsibleContainer(node) { + const owned = node.$$container$$; + if (owned && owned.responsibleForOwnerRequests) { + return owned; + } + return DI.findParentContainer(node); + }, + /** + * Find the dependency injection container up the DOM tree from this node. + * @param node - The node to find the parent container for. + * @returns The parent container of this node. + * @remarks + * This will be the same as the responsible container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findParentContainer(node) { + const event = new CustomEvent(DILocateParentEventType, { + bubbles: true, + composed: true, + cancelable: true, + detail: { container: void 0 } + }); + node.dispatchEvent(event); + return event.detail.container || DI.getOrCreateDOMContainer(); + }, + /** + * Returns a dependency injection container if one is explicitly owned by the specified + * node. If one is not owned, then a new container is created and assigned to the node. + * @param node - The node to find or create the container for. + * @param config - The configuration for the container if one needs to be created. + * @returns The located or created container. + * @remarks + * This API does not search for a responsible or parent container. It looks only for a container + * directly defined on the specified node and creates one at that location if one does not + * already exist. + */ + getOrCreateDOMContainer(node, config) { + if (!node) { + return rootDOMContainer || (rootDOMContainer = new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: () => null + }))); + } + return node.$$container$$ || new ContainerImpl(node, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: DI.findParentContainer + })); + }, + /** + * Gets the "design:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getDesignParamtypes: getParamTypes("design:paramtypes"), + /** + * Gets the "di:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getAnnotationParamtypes: getParamTypes("di:paramtypes"), + /** + * + * @param Type - Gets the "di:paramtypes" metadata for the specified type. If none is found, + * an empty metadata array is created and added. + * @returns The metadata array. + */ + getOrCreateAnnotationParamTypes(Type) { + let annotationParamtypes = this.getAnnotationParamtypes(Type); + if (annotationParamtypes === void 0) { + Reflect.defineMetadata("di:paramtypes", annotationParamtypes = [], Type); + } + return annotationParamtypes; + }, + /** + * Gets the dependency keys representing what is needed to instantiate the specified type. + * @param Type - The type to get the dependencies for. + * @returns An array of dependency keys. + */ + getDependencies(Type) { + let dependencies = dependencyLookup.get(Type); + if (dependencies === void 0) { + const inject2 = Type.inject; + if (inject2 === void 0) { + const designParamtypes = DI.getDesignParamtypes(Type); + const annotationParamtypes = DI.getAnnotationParamtypes(Type); + if (designParamtypes === void 0) { + if (annotationParamtypes === void 0) { + const Proto = Object.getPrototypeOf(Type); + if (typeof Proto === "function" && Proto !== Function.prototype) { + dependencies = cloneArrayWithPossibleProps(DI.getDependencies(Proto)); + } else { + dependencies = []; + } + } else { + dependencies = cloneArrayWithPossibleProps(annotationParamtypes); + } + } else if (annotationParamtypes === void 0) { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + } else { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + let len = annotationParamtypes.length; + let auAnnotationParamtype; + for (let i = 0; i < len; ++i) { + auAnnotationParamtype = annotationParamtypes[i]; + if (auAnnotationParamtype !== void 0) { + dependencies[i] = auAnnotationParamtype; + } + } + const keys = Object.keys(annotationParamtypes); + len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + dependencies[key] = annotationParamtypes[key]; + } + } + } + } else { + dependencies = cloneArrayWithPossibleProps(inject2); + } + dependencyLookup.set(Type, dependencies); + } + return dependencies; + }, + /** + * Defines a property on a web component class. The value of this property will + * be resolved from the dependency injection container responsible for the element + * instance, based on where it is connected in the DOM. + * @param target - The target to define the property on. + * @param propertyName - The name of the property to define. + * @param key - The dependency injection key. + * @param respectConnection - Indicates whether or not to update the property value if the + * hosting component is disconnected and then re-connected at a different location in the DOM. + * @remarks + * The respectConnection option is only applicable to elements that descend from FASTElement. + */ + defineProperty(target, propertyName, key, respectConnection = false) { + const diPropertyKey = `$di_${propertyName}`; + Reflect.defineProperty(target, propertyName, { + get: function() { + let value = this[diPropertyKey]; + if (value === void 0) { + const container = this instanceof HTMLElement ? DI.findResponsibleContainer(this) : DI.getOrCreateDOMContainer(); + value = container.get(key); + this[diPropertyKey] = value; + if (respectConnection && this instanceof FASTElement) { + const notifier = this.$fastController; + const handleChange = () => { + const newContainer = DI.findResponsibleContainer(this); + const newValue = newContainer.get(key); + const oldValue = this[diPropertyKey]; + if (newValue !== oldValue) { + this[diPropertyKey] = value; + notifier.notify(propertyName); + } + }; + notifier.subscribe({ handleChange }, "isConnected"); + } + } + return value; + } + }); + }, + /** + * Creates a dependency injection key. + * @param nameConfigOrCallback - A friendly name for the key or a lambda that configures a + * default resolution for the dependency. + * @param configuror - If a friendly name was provided for the first parameter, then an optional + * lambda that configures a default resolution for the dependency can be provided second. + * @returns The created key. + * @remarks + * The created key can be used as a property decorator or constructor parameter decorator, + * in addition to its standard use in an inject array or through direct container APIs. + */ + createInterface(nameConfigOrCallback, configuror) { + const configure = typeof nameConfigOrCallback === "function" ? nameConfigOrCallback : configuror; + const friendlyName = typeof nameConfigOrCallback === "string" ? nameConfigOrCallback : nameConfigOrCallback && "friendlyName" in nameConfigOrCallback ? nameConfigOrCallback.friendlyName || defaultFriendlyName : defaultFriendlyName; + const respectConnection = typeof nameConfigOrCallback === "string" ? false : nameConfigOrCallback && "respectConnection" in nameConfigOrCallback ? nameConfigOrCallback.respectConnection || false : false; + const Interface = function(target, property, index2) { + if (target == null || new.target !== void 0) { + throw new Error(`No registration for interface: '${Interface.friendlyName}'`); + } + if (property) { + DI.defineProperty(target, property, Interface, respectConnection); + } else { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + annotationParamtypes[index2] = Interface; + } + }; + Interface.$isInterface = true; + Interface.friendlyName = friendlyName == null ? "(anonymous)" : friendlyName; + if (configure != null) { + Interface.register = function(container, key) { + return configure(new ResolverBuilder(container, key !== null && key !== void 0 ? key : Interface)); + }; + } + Interface.toString = function toString() { + return `InterfaceSymbol<${Interface.friendlyName}>`; + }; + return Interface; + }, + /** + * A decorator that specifies what to inject into its target. + * @param dependencies - The dependencies to inject. + * @returns The decorator to be applied to the target class. + * @remarks + * The decorator can be used to decorate a class, listing all of the classes dependencies. + * Or it can be used to decorate a constructor paramter, indicating what to inject for that + * parameter. + * Or it can be used for a web component property, indicating what that property should resolve to. + */ + inject(...dependencies) { + return function(target, key, descriptor) { + if (typeof descriptor === "number") { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + const dep = dependencies[0]; + if (dep !== void 0) { + annotationParamtypes[descriptor] = dep; + } + } else if (key) { + DI.defineProperty(target, key, dependencies[0]); + } else { + const annotationParamtypes = descriptor ? DI.getOrCreateAnnotationParamTypes(descriptor.value) : DI.getOrCreateAnnotationParamTypes(target); + let dep; + for (let i = 0; i < dependencies.length; ++i) { + dep = dependencies[i]; + if (dep !== void 0) { + annotationParamtypes[i] = dep; + } + } + } + }; + }, + /** + * Registers the `target` class as a transient dependency; each time the dependency is resolved + * a new instance will be created. + * + * @param target - The class / constructor function to register as transient. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.transient(Foo); + * ``` + * + * @example + * Inline declaration + * + * ```ts + * const Foo = DI.transient(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + transient(target) { + target.register = function register(container) { + const registration = Registration.transient(target, target); + return registration.register(container); + }; + target.registerInRequestor = false; + return target; + }, + /** + * Registers the `target` class as a singleton dependency; the class will only be created once. Each + * consecutive time the dependency is resolved, the same instance will be returned. + * + * @param target - The class / constructor function to register as a singleton. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.singleton(Foo); + * ``` + * + * @example + * Inline declaration + * ```ts + * const Foo = DI.singleton(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + singleton(target, options = defaultSingletonOptions) { + target.register = function register(container) { + const registration = Registration.singleton(target, target); + return registration.register(container); + }; + target.registerInRequestor = options.scoped; + return target; + } + }); + Container = DI.createInterface("Container"); + inject = DI.inject; + defaultSingletonOptions = { scoped: false }; + all = createAllResolver((key, handler, requestor, searchAncestors) => requestor.getAll(key, searchAncestors)); + lazy = createResolver((key, handler, requestor) => { + return () => requestor.get(key); + }); + optional = createResolver((key, handler, requestor) => { + if (requestor.has(key, true)) { + return requestor.get(key); + } else { + return void 0; + } + }); + ignore.$isResolver = true; + ignore.resolve = () => void 0; + newInstanceForScope = createResolver((key, handler, requestor) => { + const instance = createNewInstance(key, handler); + const resolver = new ResolverImpl(key, 0, instance); + requestor.registerResolver(key, resolver); + return instance; + }); + newInstanceOf = createResolver((key, handler, _requestor) => createNewInstance(key, handler)); + ResolverImpl = class { + constructor(key, strategy, state) { + this.key = key; + this.strategy = strategy; + this.state = state; + this.resolving = false; + } + get $isResolver() { + return true; + } + register(container) { + return container.registerResolver(this.key, this); + } + resolve(handler, requestor) { + switch (this.strategy) { + case 0: + return this.state; + case 1: { + if (this.resolving) { + throw new Error(`Cyclic dependency found: ${this.state.name}`); + } + this.resolving = true; + this.state = handler.getFactory(this.state).construct(requestor); + this.strategy = 0; + this.resolving = false; + return this.state; + } + case 2: { + const factory = handler.getFactory(this.state); + if (factory === null) { + throw new Error(`Resolver for ${String(this.key)} returned a null factory`); + } + return factory.construct(requestor); + } + case 3: + return this.state(handler, requestor, this); + case 4: + return this.state[0].resolve(handler, requestor); + case 5: + return requestor.get(this.state); + default: + throw new Error(`Invalid resolver strategy specified: ${this.strategy}.`); + } + } + getFactory(container) { + var _a, _b, _c; + switch (this.strategy) { + case 1: + case 2: + return container.getFactory(this.state); + case 5: + return (_c = (_b = (_a = container.getResolver(this.state)) === null || _a === void 0 ? void 0 : _a.getFactory) === null || _b === void 0 ? void 0 : _b.call(_a, container)) !== null && _c !== void 0 ? _c : null; + default: + return null; + } + } + }; + FactoryImpl = class { + constructor(Type, dependencies) { + this.Type = Type; + this.dependencies = dependencies; + this.transformers = null; + } + construct(container, dynamicDependencies) { + let instance; + if (dynamicDependencies === void 0) { + instance = new this.Type(...this.dependencies.map(containerGetKey, container)); + } else { + instance = new this.Type(...this.dependencies.map(containerGetKey, container), ...dynamicDependencies); + } + if (this.transformers == null) { + return instance; + } + return this.transformers.reduce(transformInstance, instance); + } + registerTransformer(transformer) { + (this.transformers || (this.transformers = [])).push(transformer); + } + }; + containerResolver = { + $isResolver: true, + resolve(handler, requestor) { + return requestor; + } + }; + InstrinsicTypeNames = /* @__PURE__ */ new Set([ + "Array", + "ArrayBuffer", + "Boolean", + "DataView", + "Date", + "Error", + "EvalError", + "Float32Array", + "Float64Array", + "Function", + "Int8Array", + "Int16Array", + "Int32Array", + "Map", + "Number", + "Object", + "Promise", + "RangeError", + "ReferenceError", + "RegExp", + "Set", + "SharedArrayBuffer", + "String", + "SyntaxError", + "TypeError", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "URIError", + "WeakMap", + "WeakSet" + ]); + DILocateParentEventType = "__DI_LOCATE_PARENT__"; + factories = /* @__PURE__ */ new Map(); + ContainerImpl = class _ContainerImpl { + constructor(owner, config) { + this.owner = owner; + this.config = config; + this._parent = void 0; + this.registerDepth = 0; + this.context = null; + if (owner !== null) { + owner.$$container$$ = this; + } + this.resolvers = /* @__PURE__ */ new Map(); + this.resolvers.set(Container, containerResolver); + if (owner instanceof Node) { + owner.addEventListener(DILocateParentEventType, (e) => { + if (e.composedPath()[0] !== this.owner) { + e.detail.container = this; + e.stopImmediatePropagation(); + } + }); + } + } + get parent() { + if (this._parent === void 0) { + this._parent = this.config.parentLocator(this.owner); + } + return this._parent; + } + get depth() { + return this.parent === null ? 0 : this.parent.depth + 1; + } + get responsibleForOwnerRequests() { + return this.config.responsibleForOwnerRequests; + } + registerWithContext(context, ...params) { + this.context = context; + this.register(...params); + this.context = null; + return this; + } + register(...params) { + if (++this.registerDepth === 100) { + throw new Error("Unable to autoregister dependency"); + } + let current; + let keys; + let value; + let j; + let jj; + const context = this.context; + for (let i = 0, ii = params.length; i < ii; ++i) { + current = params[i]; + if (!isObject2(current)) { + continue; + } + if (isRegistry(current)) { + current.register(this, context); + } else if (isClass(current)) { + Registration.singleton(current, current).register(this); + } else { + keys = Object.keys(current); + j = 0; + jj = keys.length; + for (; j < jj; ++j) { + value = current[keys[j]]; + if (!isObject2(value)) { + continue; + } + if (isRegistry(value)) { + value.register(this, context); + } else { + this.register(value); + } + } + } + } + --this.registerDepth; + return this; + } + registerResolver(key, resolver) { + validateKey(key); + const resolvers = this.resolvers; + const result = resolvers.get(key); + if (result == null) { + resolvers.set(key, resolver); + } else if (result instanceof ResolverImpl && result.strategy === 4) { + result.state.push(resolver); + } else { + resolvers.set(key, new ResolverImpl(key, 4, [result, resolver])); + } + return resolver; + } + registerTransformer(key, transformer) { + const resolver = this.getResolver(key); + if (resolver == null) { + return false; + } + if (resolver.getFactory) { + const factory = resolver.getFactory(this); + if (factory == null) { + return false; + } + factory.registerTransformer(transformer); + return true; + } + return false; + } + getResolver(key, autoRegister = true) { + validateKey(key); + if (key.resolve !== void 0) { + return key; + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + return autoRegister ? this.jitRegister(key, handler) : null; + } + current = current.parent; + } else { + return resolver; + } + } + return null; + } + has(key, searchAncestors = false) { + return this.resolvers.has(key) ? true : searchAncestors && this.parent != null ? this.parent.has(key, true) : false; + } + get(key) { + validateKey(key); + if (key.$isResolver) { + return key.resolve(this, this); + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + resolver = this.jitRegister(key, handler); + return resolver.resolve(current, this); + } + current = current.parent; + } else { + return resolver.resolve(current, this); + } + } + throw new Error(`Unable to resolve key: ${String(key)}`); + } + getAll(key, searchAncestors = false) { + validateKey(key); + const requestor = this; + let current = requestor; + let resolver; + if (searchAncestors) { + let resolutions = emptyArray; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver != null) { + resolutions = resolutions.concat( + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + buildAllResponse(resolver, current, requestor) + ); + } + current = current.parent; + } + return resolutions; + } else { + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + current = current.parent; + if (current == null) { + return emptyArray; + } + } else { + return buildAllResponse(resolver, current, requestor); + } + } + } + return emptyArray; + } + getFactory(Type) { + let factory = factories.get(Type); + if (factory === void 0) { + if (isNativeFunction(Type)) { + throw new Error(`${Type.name} is a native function and therefore cannot be safely constructed by DI. If this is intentional, please use a callback or cachedCallback resolver.`); + } + factories.set(Type, factory = new FactoryImpl(Type, DI.getDependencies(Type))); + } + return factory; + } + registerFactory(key, factory) { + factories.set(key, factory); + } + createChild(config) { + return new _ContainerImpl(null, Object.assign({}, this.config, config, { parentLocator: () => this })); + } + jitRegister(keyAsValue, handler) { + if (typeof keyAsValue !== "function") { + throw new Error(`Attempted to jitRegister something that is not a constructor: '${keyAsValue}'. Did you forget to register this dependency?`); + } + if (InstrinsicTypeNames.has(keyAsValue.name)) { + throw new Error(`Attempted to jitRegister an intrinsic type: ${keyAsValue.name}. Did you forget to add @inject(Key)`); + } + if (isRegistry(keyAsValue)) { + const registrationResolver = keyAsValue.register(handler); + if (!(registrationResolver instanceof Object) || registrationResolver.resolve == null) { + const newResolver = handler.resolvers.get(keyAsValue); + if (newResolver != void 0) { + return newResolver; + } + throw new Error("A valid resolver was not returned from the static register method"); + } + return registrationResolver; + } else if (keyAsValue.$isInterface) { + throw new Error(`Attempted to jitRegister an interface: ${keyAsValue.friendlyName}`); + } else { + const resolver = this.config.defaultResolver(keyAsValue, handler); + handler.resolvers.set(keyAsValue, resolver); + return resolver; + } + } + }; + cache = /* @__PURE__ */ new WeakMap(); + Registration = Object.freeze({ + /** + * Allows you to pass an instance. + * Every time you request this {@link Key} you will get this instance back. + * + * @example + * ``` + * Registration.instance(Foo, new Foo())); + * ``` + * + * @param key - The key to register the instance under. + * @param value - The instance to return when the key is requested. + */ + instance(key, value) { + return new ResolverImpl(key, 0, value); + }, + /** + * Creates an instance from the class. + * Every time you request this {@link Key} you will get the same one back. + * + * @example + * ``` + * Registration.singleton(Foo, Foo); + * ``` + * + * @param key - The key to register the singleton under. + * @param value - The class to instantiate as a singleton when first requested. + */ + singleton(key, value) { + return new ResolverImpl(key, 1, value); + }, + /** + * Creates an instance from a class. + * Every time you request this {@link Key} you will get a new instance. + * + * @example + * ``` + * Registration.instance(Foo, Foo); + * ``` + * + * @param key - The key to register the instance type under. + * @param value - The class to instantiate each time the key is requested. + */ + transient(key, value) { + return new ResolverImpl(key, 2, value); + }, + /** + * Delegates to a callback function to provide the dependency. + * Every time you request this {@link Key} the callback will be invoked to provide + * the dependency. + * + * @example + * ``` + * Registration.callback(Foo, () => new Foo()); + * Registration.callback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + */ + callback(key, callback2) { + return new ResolverImpl(key, 3, callback2); + }, + /** + * Delegates to a callback function to provide the dependency and then caches the + * dependency for future requests. + * + * @example + * ``` + * Registration.cachedCallback(Foo, () => new Foo()); + * Registration.cachedCallback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + * @remarks + * If you pass the same Registration to another container, the same cached value will be used. + * Should all references to the resolver returned be removed, the cache will expire. + */ + cachedCallback(key, callback2) { + return new ResolverImpl(key, 3, cacheCallbackResult(callback2)); + }, + /** + * Creates an alternate {@link Key} to retrieve an instance by. + * + * @example + * ``` + * Register.singleton(Foo, Foo) + * Register.aliasTo(Foo, MyFoos); + * + * container.getAll(MyFoos) // contains an instance of Foo + * ``` + * + * @param originalKey - The original key that has been registered. + * @param aliasKey - The alias to the original key. + */ + aliasTo(originalKey, aliasKey) { + return new ResolverImpl(aliasKey, 5, originalKey); + } + }); + defaultFriendlyName = "(anonymous)"; + isNativeFunction = /* @__PURE__ */ (function() { + const lookup = /* @__PURE__ */ new WeakMap(); + let isNative = false; + let sourceText = ""; + let i = 0; + return function(fn) { + isNative = lookup.get(fn); + if (isNative === void 0) { + sourceText = fn.toString(); + i = sourceText.length; + isNative = // 29 is the length of 'function () { [native code] }' which is the smallest length of a native function string + i >= 29 && // 100 seems to be a safe upper bound of the max length of a native function. In Chrome and FF it's 56, in Edge it's 61. + i <= 100 && // This whole heuristic *could* be tricked by a comment. Do we need to care about that? + sourceText.charCodeAt(i - 1) === 125 && // } + // TODO: the spec is a little vague about the precise constraints, so we do need to test this across various browsers to make sure just one whitespace is a safe assumption. + sourceText.charCodeAt(i - 2) <= 32 && // whitespace + sourceText.charCodeAt(i - 3) === 93 && // ] + sourceText.charCodeAt(i - 4) === 101 && // e + sourceText.charCodeAt(i - 5) === 100 && // d + sourceText.charCodeAt(i - 6) === 111 && // o + sourceText.charCodeAt(i - 7) === 99 && // c + sourceText.charCodeAt(i - 8) === 32 && // + sourceText.charCodeAt(i - 9) === 101 && // e + sourceText.charCodeAt(i - 10) === 118 && // v + sourceText.charCodeAt(i - 11) === 105 && // i + sourceText.charCodeAt(i - 12) === 116 && // t + sourceText.charCodeAt(i - 13) === 97 && // a + sourceText.charCodeAt(i - 14) === 110 && // n + sourceText.charCodeAt(i - 15) === 88; + lookup.set(fn, isNative); + } + return isNative; + }; + })(); + isNumericLookup = {}; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js + function presentationKeyFromTag(tagName) { + return `${tagName.toLowerCase()}:presentation`; + } + var presentationRegistry, ComponentPresentation, DefaultComponentPresentation; + var init_component_presentation = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js"() { + init_esm(); + init_di(); + presentationRegistry = /* @__PURE__ */ new Map(); + ComponentPresentation = Object.freeze({ + /** + * Defines a component presentation for an element. + * @param tagName - The element name to define the presentation for. + * @param presentation - The presentation that will be applied to matching elements. + * @param container - The dependency injection container to register the configuration in. + * @public + */ + define(tagName, presentation, container) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === void 0) { + presentationRegistry.set(key, presentation); + } else { + presentationRegistry.set(key, false); + } + container.register(Registration.instance(key, presentation)); + }, + /** + * Finds a component presentation for the specified element name, + * searching the DOM hierarchy starting from the provided element. + * @param tagName - The name of the element to locate the presentation for. + * @param element - The element to begin the search from. + * @returns The component presentation or null if none is found. + * @public + */ + forTag(tagName, element) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === false) { + const container = DI.findResponsibleContainer(element); + return container.get(key); + } + return existing || null; + } + }); + DefaultComponentPresentation = class { + /** + * Creates an instance of DefaultComponentPresentation. + * @param template - The template to apply to the element. + * @param styles - The styles to apply to the element. + * @public + */ + constructor(template, styles) { + this.template = template || null; + this.styles = styles === void 0 ? null : Array.isArray(styles) ? ElementStyles.create(styles) : styles instanceof ElementStyles ? styles : ElementStyles.create([styles]); + } + /** + * Applies the presentation details to the specified element. + * @param element - The element to apply the presentation details to. + * @public + */ + applyTo(element) { + const controller = element.$fastController; + if (controller.template === null) { + controller.template = this.template; + } + if (controller.styles === null) { + controller.styles = this.styles; + } + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js + function resolveOption(option, context, definition) { + if (typeof option === "function") { + return option(context, definition); + } + return option; + } + var FoundationElement, FoundationElementRegistry; + var init_foundation_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js"() { + init_tslib_es6(); + init_esm(); + init_component_presentation(); + FoundationElement = class _FoundationElement extends FASTElement { + constructor() { + super(...arguments); + this._presentation = void 0; + } + /** + * A property which resolves the ComponentPresentation instance + * for the current component. + * @public + */ + get $presentation() { + if (this._presentation === void 0) { + this._presentation = ComponentPresentation.forTag(this.tagName, this); + } + return this._presentation; + } + templateChanged() { + if (this.template !== void 0) { + this.$fastController.template = this.template; + } + } + stylesChanged() { + if (this.styles !== void 0) { + this.$fastController.styles = this.styles; + } + } + /** + * The connected callback for this FASTElement. + * @remarks + * This method is invoked by the platform whenever this FoundationElement + * becomes connected to the document. + * @public + */ + connectedCallback() { + if (this.$presentation !== null) { + this.$presentation.applyTo(this); + } + super.connectedCallback(); + } + /** + * Defines an element registry function with a set of element definition defaults. + * @param elementDefinition - The definition of the element to create the registry + * function for. + * @public + */ + static compose(elementDefinition) { + return (overrideDefinition = {}) => new FoundationElementRegistry(this === _FoundationElement ? class extends _FoundationElement { + } : this, elementDefinition, overrideDefinition); + } + }; + __decorate([ + observable + ], FoundationElement.prototype, "template", void 0); + __decorate([ + observable + ], FoundationElement.prototype, "styles", void 0); + FoundationElementRegistry = class { + constructor(type, elementDefinition, overrideDefinition) { + this.type = type; + this.elementDefinition = elementDefinition; + this.overrideDefinition = overrideDefinition; + this.definition = Object.assign(Object.assign({}, this.elementDefinition), this.overrideDefinition); + } + register(container, context) { + const definition = this.definition; + const overrideDefinition = this.overrideDefinition; + const prefix = definition.prefix || context.elementPrefix; + const name = `${prefix}-${definition.baseName}`; + context.tryDefineElement({ + name, + type: this.type, + baseClass: this.elementDefinition.baseClass, + callback: (x) => { + const presentation = new DefaultComponentPresentation(resolveOption(definition.template, x, definition), resolveOption(definition.styles, x, definition)); + x.definePresentation(presentation); + let shadowOptions = resolveOption(definition.shadowOptions, x, definition); + if (x.shadowRootMode) { + if (shadowOptions) { + if (!overrideDefinition.shadowOptions) { + shadowOptions.mode = x.shadowRootMode; + } + } else if (shadowOptions !== null) { + shadowOptions = { mode: x.shadowRootMode }; + } + } + x.defineElement({ + elementOptions: resolveOption(definition.elementOptions, x, definition), + shadowOptions, + attributes: resolveOption(definition.attributes, x, definition) + }); + } + }); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js + function applyMixins(derivedCtor, ...baseCtors) { + const derivedAttributes = AttributeConfiguration.locate(derivedCtor); + baseCtors.forEach((baseCtor) => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => { + if (name !== "constructor") { + Object.defineProperty( + derivedCtor.prototype, + name, + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + Object.getOwnPropertyDescriptor(baseCtor.prototype, name) + ); + } + }); + const baseAttributes = AttributeConfiguration.locate(baseCtor); + baseAttributes.forEach((x) => derivedAttributes.push(x)); + }); + } + var init_apply_mixins = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js"() { + init_esm(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js + var AccordionItem; + var init_accordion_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_start_end(); + init_apply_mixins(); + AccordionItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.headinglevel = 2; + this.expanded = false; + this.clickHandler = (e) => { + this.expanded = !this.expanded; + this.change(); + }; + this.change = () => { + this.$emit("change"); + }; + } + }; + __decorate([ + attr({ + attribute: "heading-level", + mode: "fromView", + converter: nullableNumberConverter + }) + ], AccordionItem.prototype, "headinglevel", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], AccordionItem.prototype, "expanded", void 0); + __decorate([ + attr + ], AccordionItem.prototype, "id", void 0); + applyMixins(AccordionItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js + var init_accordion_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js"() { + init_accordion_item_template(); + init_accordion_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js + var init_accordion_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/aria.js + var Orientation; + var init_aria = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/aria.js"() { + Orientation = { + horizontal: "horizontal", + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/array.js + function findLastIndex(array, predicate) { + let k = array.length; + while (k--) { + if (predicate(array[k], k, array)) { + return k; + } + } + return -1; + } + var init_array = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/array.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/class-names.js + var init_class_names = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/class-names.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-dom.js + function canUseDOM() { + return !!(typeof window !== "undefined" && window.document && window.document.createElement); + } + var init_can_use_dom = __esm({ + "node_modules/exenv-es6/dist/can-use-dom.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-event-listeners.js + var init_can_use_event_listeners = __esm({ + "node_modules/exenv-es6/dist/can-use-event-listeners.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-viewport.js + var init_can_use_viewport = __esm({ + "node_modules/exenv-es6/dist/can-use-viewport.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-workers.js + var init_can_use_workers = __esm({ + "node_modules/exenv-es6/dist/can-use-workers.js"() { + } + }); + + // node_modules/exenv-es6/dist/index.js + var init_dist = __esm({ + "node_modules/exenv-es6/dist/index.js"() { + init_can_use_dom(); + init_can_use_event_listeners(); + init_can_use_viewport(); + init_can_use_workers(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/dom.js + function isHTMLElement(...args) { + return args.every((arg) => arg instanceof HTMLElement); + } + function getDisplayedNodes(rootNode, selector) { + if (!rootNode || !selector || !isHTMLElement(rootNode)) { + return; + } + const nodes = Array.from(rootNode.querySelectorAll(selector)); + return nodes.filter((node) => node.offsetParent !== null); + } + function getNonce() { + const node = document.querySelector('meta[property="csp-nonce"]'); + if (node) { + return node.getAttribute("content"); + } else { + return null; + } + } + function canUseFocusVisible() { + if (typeof _canUseFocusVisible === "boolean") { + return _canUseFocusVisible; + } + if (!canUseDOM()) { + _canUseFocusVisible = false; + return _canUseFocusVisible; + } + const styleElement = document.createElement("style"); + const styleNonce = getNonce(); + if (styleNonce !== null) { + styleElement.setAttribute("nonce", styleNonce); + } + document.head.appendChild(styleElement); + try { + styleElement.sheet.insertRule("foo:focus-visible {color:inherit}", 0); + _canUseFocusVisible = true; + } catch (e) { + _canUseFocusVisible = false; + } finally { + document.head.removeChild(styleElement); + } + return _canUseFocusVisible; + } + var _canUseFocusVisible; + var init_dom2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/dom.js"() { + init_dist(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/events.js + var eventFocus, eventFocusIn, eventFocusOut, eventKeyDown, eventResize, eventScroll; + var init_events = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/events.js"() { + eventFocus = "focus"; + eventFocusIn = "focusin"; + eventFocusOut = "focusout"; + eventKeyDown = "keydown"; + eventResize = "resize"; + eventScroll = "scroll"; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/html.js + var init_html = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/html.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/key-codes.js + var KeyCodes, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnter, keyEscape, keyHome, keyEnd, keyFunction2, keyPageDown, keyPageUp, keySpace, keyTab, keyBackspace, keyDelete, ArrowKeys; + var init_key_codes = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/key-codes.js"() { + (function(KeyCodes2) { + KeyCodes2[KeyCodes2["alt"] = 18] = "alt"; + KeyCodes2[KeyCodes2["arrowDown"] = 40] = "arrowDown"; + KeyCodes2[KeyCodes2["arrowLeft"] = 37] = "arrowLeft"; + KeyCodes2[KeyCodes2["arrowRight"] = 39] = "arrowRight"; + KeyCodes2[KeyCodes2["arrowUp"] = 38] = "arrowUp"; + KeyCodes2[KeyCodes2["back"] = 8] = "back"; + KeyCodes2[KeyCodes2["backSlash"] = 220] = "backSlash"; + KeyCodes2[KeyCodes2["break"] = 19] = "break"; + KeyCodes2[KeyCodes2["capsLock"] = 20] = "capsLock"; + KeyCodes2[KeyCodes2["closeBracket"] = 221] = "closeBracket"; + KeyCodes2[KeyCodes2["colon"] = 186] = "colon"; + KeyCodes2[KeyCodes2["colon2"] = 59] = "colon2"; + KeyCodes2[KeyCodes2["comma"] = 188] = "comma"; + KeyCodes2[KeyCodes2["ctrl"] = 17] = "ctrl"; + KeyCodes2[KeyCodes2["delete"] = 46] = "delete"; + KeyCodes2[KeyCodes2["end"] = 35] = "end"; + KeyCodes2[KeyCodes2["enter"] = 13] = "enter"; + KeyCodes2[KeyCodes2["equals"] = 187] = "equals"; + KeyCodes2[KeyCodes2["equals2"] = 61] = "equals2"; + KeyCodes2[KeyCodes2["equals3"] = 107] = "equals3"; + KeyCodes2[KeyCodes2["escape"] = 27] = "escape"; + KeyCodes2[KeyCodes2["forwardSlash"] = 191] = "forwardSlash"; + KeyCodes2[KeyCodes2["function1"] = 112] = "function1"; + KeyCodes2[KeyCodes2["function10"] = 121] = "function10"; + KeyCodes2[KeyCodes2["function11"] = 122] = "function11"; + KeyCodes2[KeyCodes2["function12"] = 123] = "function12"; + KeyCodes2[KeyCodes2["function2"] = 113] = "function2"; + KeyCodes2[KeyCodes2["function3"] = 114] = "function3"; + KeyCodes2[KeyCodes2["function4"] = 115] = "function4"; + KeyCodes2[KeyCodes2["function5"] = 116] = "function5"; + KeyCodes2[KeyCodes2["function6"] = 117] = "function6"; + KeyCodes2[KeyCodes2["function7"] = 118] = "function7"; + KeyCodes2[KeyCodes2["function8"] = 119] = "function8"; + KeyCodes2[KeyCodes2["function9"] = 120] = "function9"; + KeyCodes2[KeyCodes2["home"] = 36] = "home"; + KeyCodes2[KeyCodes2["insert"] = 45] = "insert"; + KeyCodes2[KeyCodes2["menu"] = 93] = "menu"; + KeyCodes2[KeyCodes2["minus"] = 189] = "minus"; + KeyCodes2[KeyCodes2["minus2"] = 109] = "minus2"; + KeyCodes2[KeyCodes2["numLock"] = 144] = "numLock"; + KeyCodes2[KeyCodes2["numPad0"] = 96] = "numPad0"; + KeyCodes2[KeyCodes2["numPad1"] = 97] = "numPad1"; + KeyCodes2[KeyCodes2["numPad2"] = 98] = "numPad2"; + KeyCodes2[KeyCodes2["numPad3"] = 99] = "numPad3"; + KeyCodes2[KeyCodes2["numPad4"] = 100] = "numPad4"; + KeyCodes2[KeyCodes2["numPad5"] = 101] = "numPad5"; + KeyCodes2[KeyCodes2["numPad6"] = 102] = "numPad6"; + KeyCodes2[KeyCodes2["numPad7"] = 103] = "numPad7"; + KeyCodes2[KeyCodes2["numPad8"] = 104] = "numPad8"; + KeyCodes2[KeyCodes2["numPad9"] = 105] = "numPad9"; + KeyCodes2[KeyCodes2["numPadDivide"] = 111] = "numPadDivide"; + KeyCodes2[KeyCodes2["numPadDot"] = 110] = "numPadDot"; + KeyCodes2[KeyCodes2["numPadMinus"] = 109] = "numPadMinus"; + KeyCodes2[KeyCodes2["numPadMultiply"] = 106] = "numPadMultiply"; + KeyCodes2[KeyCodes2["numPadPlus"] = 107] = "numPadPlus"; + KeyCodes2[KeyCodes2["openBracket"] = 219] = "openBracket"; + KeyCodes2[KeyCodes2["pageDown"] = 34] = "pageDown"; + KeyCodes2[KeyCodes2["pageUp"] = 33] = "pageUp"; + KeyCodes2[KeyCodes2["period"] = 190] = "period"; + KeyCodes2[KeyCodes2["print"] = 44] = "print"; + KeyCodes2[KeyCodes2["quote"] = 222] = "quote"; + KeyCodes2[KeyCodes2["scrollLock"] = 145] = "scrollLock"; + KeyCodes2[KeyCodes2["shift"] = 16] = "shift"; + KeyCodes2[KeyCodes2["space"] = 32] = "space"; + KeyCodes2[KeyCodes2["tab"] = 9] = "tab"; + KeyCodes2[KeyCodes2["tilde"] = 192] = "tilde"; + KeyCodes2[KeyCodes2["windowsLeft"] = 91] = "windowsLeft"; + KeyCodes2[KeyCodes2["windowsOpera"] = 219] = "windowsOpera"; + KeyCodes2[KeyCodes2["windowsRight"] = 92] = "windowsRight"; + })(KeyCodes || (KeyCodes = {})); + keyArrowDown = "ArrowDown"; + keyArrowLeft = "ArrowLeft"; + keyArrowRight = "ArrowRight"; + keyArrowUp = "ArrowUp"; + keyEnter = "Enter"; + keyEscape = "Escape"; + keyHome = "Home"; + keyEnd = "End"; + keyFunction2 = "F2"; + keyPageDown = "PageDown"; + keyPageUp = "PageUp"; + keySpace = " "; + keyTab = "Tab"; + keyBackspace = "Backspace"; + keyDelete = "Delete"; + ArrowKeys = { + ArrowDown: keyArrowDown, + ArrowLeft: keyArrowLeft, + ArrowRight: keyArrowRight, + ArrowUp: keyArrowUp + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/localization.js + var Direction; + var init_localization = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/localization.js"() { + (function(Direction2) { + Direction2["ltr"] = "ltr"; + Direction2["rtl"] = "rtl"; + })(Direction || (Direction = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/numbers.js + function wrapInBounds(min, max, value) { + if (value < min) { + return max; + } else if (value > max) { + return min; + } + return value; + } + function limit(min, max, value) { + return Math.min(Math.max(value, min), max); + } + function inRange2(value, min, max = 0) { + [min, max] = [min, max].sort((a, b) => a - b); + return min <= value && value < max; + } + var init_numbers = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/numbers.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/strings.js + function uniqueId(prefix = "") { + return `${prefix}${uniqueIdCounter++}`; + } + var uniqueIdCounter; + var init_strings = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/strings.js"() { + uniqueIdCounter = 0; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/query.js + var init_query = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/query.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js + var RtlScrollConverter; + var init_rtl_scroll_converter = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js"() { + init_dist(); + init_localization(); + RtlScrollConverter = class _RtlScrollConverter { + /** + * Gets the scrollLeft value of the provided element + */ + static getScrollLeft(scrolledElement, direction) { + if (direction === Direction.rtl) { + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + return scrolledElement.scrollLeft; + } + /** + * Sets the scrollLeft value of the provided element + */ + static setScrollLeft(scrolledElement, scrollValue, direction) { + if (direction === Direction.rtl) { + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, scrollValue); + return; + } + scrolledElement.scrollLeft = scrollValue; + } + /** + * The initial rtl scroll converter getter function, it calls the browser test to set the correct converter + * functions and then invokes the getter + */ + static initialGetRtlScrollConverter(scrolledElement) { + _RtlScrollConverter.initializeRtlScrollConverters(); + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + /** + * The "direct" rtl get scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft; + } + /** + * The "inverted" get scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedGetRtlScrollConverter(scrolledElement) { + return -Math.abs(scrolledElement.scrollLeft); + } + /** + * The "reverse" get scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft - (scrolledElement.scrollWidth - scrolledElement.clientWidth); + } + /** + * The initial rtl scroll converter setter function, it calls the browser test to set the correct converter + * functions and then invokes the setter + */ + static initialSetRtlScrollConverter(scrolledElement, newScrollValue) { + _RtlScrollConverter.initializeRtlScrollConverters(); + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, newScrollValue); + } + /** + * The "direct" rtl set scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = newScrollValue; + } + /** + * The "inverted" set scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = Math.abs(newScrollValue); + } + /** + * The "reverse" set scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseSetRtlScrollConverter(scrolledElement, newScrollValue) { + const maxScroll = scrolledElement.scrollWidth - scrolledElement.clientWidth; + scrolledElement.scrollLeft = maxScroll + newScrollValue; + } + /** + * detects the appropriate rtl scroll converter functions and assigns them + * should only run once + */ + static initializeRtlScrollConverters() { + if (!canUseDOM()) { + _RtlScrollConverter.applyDirectScrollConverters(); + return; + } + const testElement = _RtlScrollConverter.getTestElement(); + document.body.appendChild(testElement); + _RtlScrollConverter.checkForScrollType(testElement); + document.body.removeChild(testElement); + } + /** + * checks the provided test element to determine scroll type + * and apply appropriate converters + */ + static checkForScrollType(testElement) { + if (_RtlScrollConverter.isReverse(testElement)) { + _RtlScrollConverter.applyReverseScrollConverters(); + } else { + if (_RtlScrollConverter.isDirect(testElement)) { + _RtlScrollConverter.applyDirectScrollConverters(); + } else { + _RtlScrollConverter.applyInvertedScrollConverters(); + } + } + } + /** + * checks test element initial state for rtl "reverse" mode + */ + static isReverse(testElement) { + return testElement.scrollLeft > 0; + } + /** + * checks test element for rtl "direct" mode + */ + static isDirect(testElement) { + testElement.scrollLeft = -1; + return testElement.scrollLeft < 0; + } + /** + * apply direct scroll conververters + */ + static applyDirectScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.directSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.directGetRtlScrollConverter; + } + /** + * apply inverted scroll conververters + */ + static applyInvertedScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.invertedSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.invertedGetRtlScrollConverter; + } + /** + * apply reverse scroll conververters + */ + static applyReverseScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.reverseSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.reverseGetRtlScrollConverter; + } + /** + * generate a test element for rtl testing + */ + static getTestElement() { + const testElement = document.createElement("div"); + testElement.appendChild(document.createTextNode("ABCD")); + testElement.dir = "rtl"; + testElement.style.fontSize = "14px"; + testElement.style.width = "4px"; + testElement.style.height = "1px"; + testElement.style.position = "absolute"; + testElement.style.top = "-1000px"; + testElement.style.overflow = "scroll"; + return testElement; + } + }; + RtlScrollConverter.getRtlScrollLeftConverter = RtlScrollConverter.initialGetRtlScrollConverter; + RtlScrollConverter.setRtlScrollLeftConverter = RtlScrollConverter.initialSetRtlScrollConverter; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/system-colors.js + var SystemColors; + var init_system_colors = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/system-colors.js"() { + (function(SystemColors2) { + SystemColors2["Canvas"] = "Canvas"; + SystemColors2["CanvasText"] = "CanvasText"; + SystemColors2["LinkText"] = "LinkText"; + SystemColors2["VisitedText"] = "VisitedText"; + SystemColors2["ActiveText"] = "ActiveText"; + SystemColors2["ButtonFace"] = "ButtonFace"; + SystemColors2["ButtonText"] = "ButtonText"; + SystemColors2["Field"] = "Field"; + SystemColors2["FieldText"] = "FieldText"; + SystemColors2["Highlight"] = "Highlight"; + SystemColors2["HighlightText"] = "HighlightText"; + SystemColors2["GrayText"] = "GrayText"; + })(SystemColors || (SystemColors = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/index.js + var init_dist2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/index.js"() { + init_aria(); + init_array(); + init_class_names(); + init_dom2(); + init_events(); + init_html(); + init_key_codes(); + init_localization(); + init_numbers(); + init_strings(); + init_query(); + init_rtl_scroll_converter(); + init_system_colors(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js + var AccordionExpandMode, Accordion; + var init_accordion = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_accordion_item(); + AccordionExpandMode = { + /** + * Designates only a single {@link @microsoft/fast-foundation#(AccordionItem:class) } can be open a time. + */ + single: "single", + /** + * Designates multiple {@link @microsoft/fast-foundation#(AccordionItem:class) | AccordionItems} can be open simultaneously. + */ + multi: "multi" + }; + Accordion = class extends FoundationElement { + constructor() { + super(...arguments); + this.expandmode = AccordionExpandMode.multi; + this.activeItemIndex = 0; + this.change = () => { + this.$emit("change", this.activeid); + }; + this.setItems = () => { + var _a; + if (this.accordionItems.length === 0) { + return; + } + this.accordionIds = this.getItemIds(); + this.accordionItems.forEach((item, index2) => { + if (item instanceof AccordionItem) { + item.addEventListener("change", this.activeItemChange); + if (this.isSingleExpandMode()) { + this.activeItemIndex !== index2 ? item.expanded = false : item.expanded = true; + } + } + const itemId = this.accordionIds[index2]; + item.setAttribute("id", typeof itemId !== "string" ? `accordion-${index2 + 1}` : itemId); + this.activeid = this.accordionIds[this.activeItemIndex]; + item.addEventListener("keydown", this.handleItemKeyDown); + item.addEventListener("focus", this.handleItemFocus); + }); + if (this.isSingleExpandMode()) { + const expandedItem = (_a = this.findExpandedItem()) !== null && _a !== void 0 ? _a : this.accordionItems[0]; + expandedItem.setAttribute("aria-disabled", "true"); + } + }; + this.removeItemListeners = (oldValue) => { + oldValue.forEach((item, index2) => { + item.removeEventListener("change", this.activeItemChange); + item.removeEventListener("keydown", this.handleItemKeyDown); + item.removeEventListener("focus", this.handleItemFocus); + }); + }; + this.activeItemChange = (event) => { + if (event.defaultPrevented || event.target !== event.currentTarget) { + return; + } + event.preventDefault(); + const selectedItem = event.target; + this.activeid = selectedItem.getAttribute("id"); + if (this.isSingleExpandMode()) { + this.resetItems(); + selectedItem.expanded = true; + selectedItem.setAttribute("aria-disabled", "true"); + this.accordionItems.forEach((item) => { + if (!item.hasAttribute("disabled") && item.id !== this.activeid) { + item.removeAttribute("aria-disabled"); + } + }); + } + this.activeItemIndex = Array.from(this.accordionItems).indexOf(selectedItem); + this.change(); + }; + this.handleItemKeyDown = (event) => { + if (event.target !== event.currentTarget) { + return; + } + this.accordionIds = this.getItemIds(); + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjust(-1); + break; + case keyArrowDown: + event.preventDefault(); + this.adjust(1); + break; + case keyHome: + this.activeItemIndex = 0; + this.focusItem(); + break; + case keyEnd: + this.activeItemIndex = this.accordionItems.length - 1; + this.focusItem(); + break; + } + }; + this.handleItemFocus = (event) => { + if (event.target === event.currentTarget) { + const focusedItem = event.target; + const focusedIndex = this.activeItemIndex = Array.from(this.accordionItems).indexOf(focusedItem); + if (this.activeItemIndex !== focusedIndex && focusedIndex !== -1) { + this.activeItemIndex = focusedIndex; + this.activeid = this.accordionIds[this.activeItemIndex]; + } + } + }; + } + /** + * @internal + */ + accordionItemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.removeItemListeners(oldValue); + this.setItems(); + } + } + findExpandedItem() { + for (let item = 0; item < this.accordionItems.length; item++) { + if (this.accordionItems[item].getAttribute("expanded") === "true") { + return this.accordionItems[item]; + } + } + return null; + } + resetItems() { + this.accordionItems.forEach((item, index2) => { + item.expanded = false; + }); + } + getItemIds() { + return this.accordionItems.map((accordionItem) => { + return accordionItem.getAttribute("id"); + }); + } + isSingleExpandMode() { + return this.expandmode === AccordionExpandMode.single; + } + adjust(adjustment) { + this.activeItemIndex = wrapInBounds(0, this.accordionItems.length - 1, this.activeItemIndex + adjustment); + this.focusItem(); + } + focusItem() { + const element = this.accordionItems[this.activeItemIndex]; + if (element instanceof AccordionItem) { + element.expandbutton.focus(); + } + } + }; + __decorate([ + attr({ attribute: "expand-mode" }) + ], Accordion.prototype, "expandmode", void 0); + __decorate([ + observable + ], Accordion.prototype, "accordionItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js + var init_accordion2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js"() { + init_accordion_template(); + init_accordion(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js + var anchorTemplate; + var init_anchor_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js"() { + init_esm(); + init_start_end(); + anchorTemplate = (context, definition) => html` + + ${startSlotTemplate(context, definition)} + + + + ${endSlotTemplate(context, definition)} + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js + var ARIAGlobalStatesAndProperties; + var init_aria_global = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js"() { + init_tslib_es6(); + init_esm(); + ARIAGlobalStatesAndProperties = class { + }; + __decorate([ + attr({ attribute: "aria-atomic" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaAtomic", void 0); + __decorate([ + attr({ attribute: "aria-busy" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaBusy", void 0); + __decorate([ + attr({ attribute: "aria-controls" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaControls", void 0); + __decorate([ + attr({ attribute: "aria-current" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaCurrent", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-details" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDetails", void 0); + __decorate([ + attr({ attribute: "aria-disabled" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDisabled", void 0); + __decorate([ + attr({ attribute: "aria-errormessage" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaErrormessage", void 0); + __decorate([ + attr({ attribute: "aria-flowto" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaFlowto", void 0); + __decorate([ + attr({ attribute: "aria-haspopup" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHaspopup", void 0); + __decorate([ + attr({ attribute: "aria-hidden" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHidden", void 0); + __decorate([ + attr({ attribute: "aria-invalid" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaInvalid", void 0); + __decorate([ + attr({ attribute: "aria-keyshortcuts" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaKeyshortcuts", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabel", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-live" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLive", void 0); + __decorate([ + attr({ attribute: "aria-owns" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaOwns", void 0); + __decorate([ + attr({ attribute: "aria-relevant" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRelevant", void 0); + __decorate([ + attr({ attribute: "aria-roledescription" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRoledescription", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js + var init_patterns = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js"() { + init_aria_global(); + init_start_end(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js + var Anchor, DelegatesARIALink; + var init_anchor = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_patterns(); + init_apply_mixins(); + Anchor = class extends FoundationElement { + constructor() { + super(...arguments); + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + var _a2; + (_a2 = this.control) === null || _a2 === void 0 ? void 0 : _a2.focus(); + }; + } + }; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.handleUnsupportedDelegatesFocus(); + } + }; + __decorate([ + attr + ], Anchor.prototype, "download", void 0); + __decorate([ + attr + ], Anchor.prototype, "href", void 0); + __decorate([ + attr + ], Anchor.prototype, "hreflang", void 0); + __decorate([ + attr + ], Anchor.prototype, "ping", void 0); + __decorate([ + attr + ], Anchor.prototype, "referrerpolicy", void 0); + __decorate([ + attr + ], Anchor.prototype, "rel", void 0); + __decorate([ + attr + ], Anchor.prototype, "target", void 0); + __decorate([ + attr + ], Anchor.prototype, "type", void 0); + __decorate([ + observable + ], Anchor.prototype, "defaultSlottedContent", void 0); + DelegatesARIALink = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIALink.prototype, "ariaExpanded", void 0); + applyMixins(DelegatesARIALink, ARIAGlobalStatesAndProperties); + applyMixins(Anchor, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js + var init_anchor2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js"() { + init_anchor_template(); + init_anchor(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js + var init_anchored_region_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js + var getDirection; + var init_direction = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js"() { + init_dist2(); + getDirection = (rootNode) => { + const dirNode = rootNode.closest("[dir]"); + return dirNode !== null && dirNode.dir === "rtl" ? Direction.rtl : Direction.ltr; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js + var IntersectionService; + var init_intersection_service = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js"() { + init_esm(); + IntersectionService = class { + constructor() { + this.intersectionDetector = null; + this.observedElements = /* @__PURE__ */ new Map(); + this.requestPosition = (target, callback2) => { + var _a; + if (this.intersectionDetector === null) { + return; + } + if (this.observedElements.has(target)) { + (_a = this.observedElements.get(target)) === null || _a === void 0 ? void 0 : _a.push(callback2); + return; + } + this.observedElements.set(target, [callback2]); + this.intersectionDetector.observe(target); + }; + this.cancelRequestPosition = (target, callback2) => { + const callbacks = this.observedElements.get(target); + if (callbacks !== void 0) { + const callBackIndex = callbacks.indexOf(callback2); + if (callBackIndex !== -1) { + callbacks.splice(callBackIndex, 1); + } + } + }; + this.initializeIntersectionDetector = () => { + if (!$global.IntersectionObserver) { + return; + } + this.intersectionDetector = new IntersectionObserver(this.handleIntersection, { + root: null, + rootMargin: "0px", + threshold: [0, 1] + }); + }; + this.handleIntersection = (entries) => { + if (this.intersectionDetector === null) { + return; + } + const pendingCallbacks = []; + const pendingCallbackParams = []; + entries.forEach((entry) => { + var _a; + (_a = this.intersectionDetector) === null || _a === void 0 ? void 0 : _a.unobserve(entry.target); + const thisElementCallbacks = this.observedElements.get(entry.target); + if (thisElementCallbacks !== void 0) { + thisElementCallbacks.forEach((callback2) => { + let targetCallbackIndex = pendingCallbacks.indexOf(callback2); + if (targetCallbackIndex === -1) { + targetCallbackIndex = pendingCallbacks.length; + pendingCallbacks.push(callback2); + pendingCallbackParams.push([]); + } + pendingCallbackParams[targetCallbackIndex].push(entry); + }); + this.observedElements.delete(entry.target); + } + }); + pendingCallbacks.forEach((callback2, index2) => { + callback2(pendingCallbackParams[index2]); + }); + }; + this.initializeIntersectionDetector(); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js + var AnchoredRegion; + var init_anchored_region = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_direction(); + init_intersection_service(); + AnchoredRegion = class _AnchoredRegion extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.viewport = ""; + this.horizontalPositioningMode = "uncontrolled"; + this.horizontalDefaultPosition = "unset"; + this.horizontalViewportLock = false; + this.horizontalInset = false; + this.horizontalScaling = "content"; + this.verticalPositioningMode = "uncontrolled"; + this.verticalDefaultPosition = "unset"; + this.verticalViewportLock = false; + this.verticalInset = false; + this.verticalScaling = "content"; + this.fixedPlacement = false; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.initialLayoutComplete = false; + this.resizeDetector = null; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.pendingPositioningUpdate = false; + this.pendingReset = false; + this.currentDirection = Direction.ltr; + this.regionVisible = false; + this.forceUpdate = false; + this.updateThreshold = 0.5; + this.update = () => { + if (!this.pendingPositioningUpdate) { + this.requestPositionUpdates(); + } + }; + this.startObservers = () => { + this.stopObservers(); + if (this.anchorElement === null) { + return; + } + this.requestPositionUpdates(); + if (this.resizeDetector !== null) { + this.resizeDetector.observe(this.anchorElement); + this.resizeDetector.observe(this); + } + }; + this.requestPositionUpdates = () => { + if (this.anchorElement === null || this.pendingPositioningUpdate) { + return; + } + _AnchoredRegion.intersectionService.requestPosition(this, this.handleIntersection); + _AnchoredRegion.intersectionService.requestPosition(this.anchorElement, this.handleIntersection); + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.requestPosition(this.viewportElement, this.handleIntersection); + } + this.pendingPositioningUpdate = true; + }; + this.stopObservers = () => { + if (this.pendingPositioningUpdate) { + this.pendingPositioningUpdate = false; + _AnchoredRegion.intersectionService.cancelRequestPosition(this, this.handleIntersection); + if (this.anchorElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.anchorElement, this.handleIntersection); + } + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.viewportElement, this.handleIntersection); + } + } + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + } + }; + this.getViewport = () => { + if (typeof this.viewport !== "string" || this.viewport === "") { + return document.documentElement; + } + return document.getElementById(this.viewport); + }; + this.getAnchor = () => { + return document.getElementById(this.anchor); + }; + this.handleIntersection = (entries) => { + if (!this.pendingPositioningUpdate) { + return; + } + this.pendingPositioningUpdate = false; + if (!this.applyIntersectionEntries(entries)) { + return; + } + this.updateLayout(); + }; + this.applyIntersectionEntries = (entries) => { + const regionEntry = entries.find((x) => x.target === this); + const anchorEntry = entries.find((x) => x.target === this.anchorElement); + const viewportEntry = entries.find((x) => x.target === this.viewportElement); + if (regionEntry === void 0 || viewportEntry === void 0 || anchorEntry === void 0) { + return false; + } + if (!this.regionVisible || this.forceUpdate || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0 || this.isRectDifferent(this.anchorRect, anchorEntry.boundingClientRect) || this.isRectDifferent(this.viewportRect, viewportEntry.boundingClientRect) || this.isRectDifferent(this.regionRect, regionEntry.boundingClientRect)) { + this.regionRect = regionEntry.boundingClientRect; + this.anchorRect = anchorEntry.boundingClientRect; + if (this.viewportElement === document.documentElement) { + this.viewportRect = new DOMRectReadOnly(viewportEntry.boundingClientRect.x + document.documentElement.scrollLeft, viewportEntry.boundingClientRect.y + document.documentElement.scrollTop, viewportEntry.boundingClientRect.width, viewportEntry.boundingClientRect.height); + } else { + this.viewportRect = viewportEntry.boundingClientRect; + } + this.updateRegionOffset(); + this.forceUpdate = false; + return true; + } + return false; + }; + this.updateRegionOffset = () => { + if (this.anchorRect && this.regionRect) { + this.baseHorizontalOffset = this.baseHorizontalOffset + (this.anchorRect.left - this.regionRect.left) + (this.translateX - this.baseHorizontalOffset); + this.baseVerticalOffset = this.baseVerticalOffset + (this.anchorRect.top - this.regionRect.top) + (this.translateY - this.baseVerticalOffset); + } + }; + this.isRectDifferent = (rectA, rectB) => { + if (Math.abs(rectA.top - rectB.top) > this.updateThreshold || Math.abs(rectA.right - rectB.right) > this.updateThreshold || Math.abs(rectA.bottom - rectB.bottom) > this.updateThreshold || Math.abs(rectA.left - rectB.left) > this.updateThreshold) { + return true; + } + return false; + }; + this.handleResize = (entries) => { + this.update(); + }; + this.reset = () => { + if (!this.pendingReset) { + return; + } + this.pendingReset = false; + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + if (this.viewportElement === null) { + this.viewportElement = this.getViewport(); + } + this.currentDirection = getDirection(this); + this.startObservers(); + }; + this.updateLayout = () => { + let desiredVerticalPosition = void 0; + let desiredHorizontalPosition = void 0; + if (this.horizontalPositioningMode !== "uncontrolled") { + const horizontalOptions = this.getPositioningOptions(this.horizontalInset); + if (this.horizontalDefaultPosition === "center") { + desiredHorizontalPosition = "center"; + } else if (this.horizontalDefaultPosition !== "unset") { + let dirCorrectedHorizontalDefaultPosition = this.horizontalDefaultPosition; + if (dirCorrectedHorizontalDefaultPosition === "start" || dirCorrectedHorizontalDefaultPosition === "end") { + const newDirection = getDirection(this); + if (newDirection !== this.currentDirection) { + this.currentDirection = newDirection; + this.initialize(); + return; + } + if (this.currentDirection === Direction.ltr) { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "left" : "right"; + } else { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "right" : "left"; + } + } + switch (dirCorrectedHorizontalDefaultPosition) { + case "left": + desiredHorizontalPosition = this.horizontalInset ? "insetStart" : "start"; + break; + case "right": + desiredHorizontalPosition = this.horizontalInset ? "insetEnd" : "end"; + break; + } + } + const horizontalThreshold = this.horizontalThreshold !== void 0 ? this.horizontalThreshold : this.regionRect !== void 0 ? this.regionRect.width : 0; + const anchorLeft = this.anchorRect !== void 0 ? this.anchorRect.left : 0; + const anchorRight = this.anchorRect !== void 0 ? this.anchorRect.right : 0; + const anchorWidth = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + const viewportLeft = this.viewportRect !== void 0 ? this.viewportRect.left : 0; + const viewportRight = this.viewportRect !== void 0 ? this.viewportRect.right : 0; + if (desiredHorizontalPosition === void 0 || !(this.horizontalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredHorizontalPosition, anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) < horizontalThreshold) { + desiredHorizontalPosition = this.getAvailableSpace(horizontalOptions[0], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) > this.getAvailableSpace(horizontalOptions[1], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) ? horizontalOptions[0] : horizontalOptions[1]; + } + } + if (this.verticalPositioningMode !== "uncontrolled") { + const verticalOptions = this.getPositioningOptions(this.verticalInset); + if (this.verticalDefaultPosition === "center") { + desiredVerticalPosition = "center"; + } else if (this.verticalDefaultPosition !== "unset") { + switch (this.verticalDefaultPosition) { + case "top": + desiredVerticalPosition = this.verticalInset ? "insetStart" : "start"; + break; + case "bottom": + desiredVerticalPosition = this.verticalInset ? "insetEnd" : "end"; + break; + } + } + const verticalThreshold = this.verticalThreshold !== void 0 ? this.verticalThreshold : this.regionRect !== void 0 ? this.regionRect.height : 0; + const anchorTop = this.anchorRect !== void 0 ? this.anchorRect.top : 0; + const anchorBottom = this.anchorRect !== void 0 ? this.anchorRect.bottom : 0; + const anchorHeight = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + const viewportTop = this.viewportRect !== void 0 ? this.viewportRect.top : 0; + const viewportBottom = this.viewportRect !== void 0 ? this.viewportRect.bottom : 0; + if (desiredVerticalPosition === void 0 || !(this.verticalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredVerticalPosition, anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) < verticalThreshold) { + desiredVerticalPosition = this.getAvailableSpace(verticalOptions[0], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) > this.getAvailableSpace(verticalOptions[1], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) ? verticalOptions[0] : verticalOptions[1]; + } + } + const nextPositionerDimension = this.getNextRegionDimension(desiredHorizontalPosition, desiredVerticalPosition); + const positionChanged = this.horizontalPosition !== desiredHorizontalPosition || this.verticalPosition !== desiredVerticalPosition; + this.setHorizontalPosition(desiredHorizontalPosition, nextPositionerDimension); + this.setVerticalPosition(desiredVerticalPosition, nextPositionerDimension); + this.updateRegionStyle(); + if (!this.initialLayoutComplete) { + this.initialLayoutComplete = true; + this.requestPositionUpdates(); + return; + } + if (!this.regionVisible) { + this.regionVisible = true; + this.style.removeProperty("pointer-events"); + this.style.removeProperty("opacity"); + this.classList.toggle("loaded", true); + this.$emit("loaded", this, { bubbles: false }); + } + this.updatePositionClasses(); + if (positionChanged) { + this.$emit("positionchange", this, { bubbles: false }); + } + }; + this.updateRegionStyle = () => { + this.style.width = this.regionWidth; + this.style.height = this.regionHeight; + this.style.transform = `translate(${this.translateX}px, ${this.translateY}px)`; + }; + this.updatePositionClasses = () => { + this.classList.toggle("top", this.verticalPosition === "start"); + this.classList.toggle("bottom", this.verticalPosition === "end"); + this.classList.toggle("inset-top", this.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.verticalPosition === "insetEnd"); + this.classList.toggle("vertical-center", this.verticalPosition === "center"); + this.classList.toggle("left", this.horizontalPosition === "start"); + this.classList.toggle("right", this.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.horizontalPosition === "insetEnd"); + this.classList.toggle("horizontal-center", this.horizontalPosition === "center"); + }; + this.setHorizontalPosition = (desiredHorizontalPosition, nextPositionerDimension) => { + if (desiredHorizontalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionWidth = 0; + switch (this.horizontalScaling) { + case "anchor": + case "fill": + nextRegionWidth = this.horizontalViewportLock ? this.viewportRect.width : nextPositionerDimension.width; + this.regionWidth = `${nextRegionWidth}px`; + break; + case "content": + nextRegionWidth = this.regionRect.width; + this.regionWidth = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredHorizontalPosition) { + case "start": + this.translateX = this.baseHorizontalOffset - nextRegionWidth; + if (this.horizontalViewportLock && this.anchorRect.left > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.right); + } + break; + case "insetStart": + this.translateX = this.baseHorizontalOffset - nextRegionWidth + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.right); + } + break; + case "insetEnd": + this.translateX = this.baseHorizontalOffset; + if (this.horizontalViewportLock && this.anchorRect.left < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.left); + } + break; + case "end": + this.translateX = this.baseHorizontalOffset + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.left); + } + break; + case "center": + sizeDelta = (this.anchorRect.width - nextRegionWidth) / 2; + this.translateX = this.baseHorizontalOffset + sizeDelta; + if (this.horizontalViewportLock) { + const regionLeft = this.anchorRect.left + sizeDelta; + const regionRight = this.anchorRect.right - sizeDelta; + if (regionLeft < this.viewportRect.left && !(regionRight > this.viewportRect.right)) { + this.translateX = this.translateX - (regionLeft - this.viewportRect.left); + } else if (regionRight > this.viewportRect.right && !(regionLeft < this.viewportRect.left)) { + this.translateX = this.translateX - (regionRight - this.viewportRect.right); + } + } + break; + } + this.horizontalPosition = desiredHorizontalPosition; + }; + this.setVerticalPosition = (desiredVerticalPosition, nextPositionerDimension) => { + if (desiredVerticalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionHeight = 0; + switch (this.verticalScaling) { + case "anchor": + case "fill": + nextRegionHeight = this.verticalViewportLock ? this.viewportRect.height : nextPositionerDimension.height; + this.regionHeight = `${nextRegionHeight}px`; + break; + case "content": + nextRegionHeight = this.regionRect.height; + this.regionHeight = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredVerticalPosition) { + case "start": + this.translateY = this.baseVerticalOffset - nextRegionHeight; + if (this.verticalViewportLock && this.anchorRect.top > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.bottom); + } + break; + case "insetStart": + this.translateY = this.baseVerticalOffset - nextRegionHeight + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.bottom); + } + break; + case "insetEnd": + this.translateY = this.baseVerticalOffset; + if (this.verticalViewportLock && this.anchorRect.top < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.top); + } + break; + case "end": + this.translateY = this.baseVerticalOffset + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.top); + } + break; + case "center": + sizeDelta = (this.anchorRect.height - nextRegionHeight) / 2; + this.translateY = this.baseVerticalOffset + sizeDelta; + if (this.verticalViewportLock) { + const regionTop = this.anchorRect.top + sizeDelta; + const regionBottom = this.anchorRect.bottom - sizeDelta; + if (regionTop < this.viewportRect.top && !(regionBottom > this.viewportRect.bottom)) { + this.translateY = this.translateY - (regionTop - this.viewportRect.top); + } else if (regionBottom > this.viewportRect.bottom && !(regionTop < this.viewportRect.top)) { + this.translateY = this.translateY - (regionBottom - this.viewportRect.bottom); + } + } + } + this.verticalPosition = desiredVerticalPosition; + }; + this.getPositioningOptions = (inset) => { + if (inset) { + return ["insetStart", "insetEnd"]; + } + return ["start", "end"]; + }; + this.getAvailableSpace = (positionOption, anchorStart, anchorEnd, anchorSpan, viewportStart, viewportEnd) => { + const spaceStart = anchorStart - viewportStart; + const spaceEnd = viewportEnd - (anchorStart + anchorSpan); + switch (positionOption) { + case "start": + return spaceStart; + case "insetStart": + return spaceStart + anchorSpan; + case "insetEnd": + return spaceEnd + anchorSpan; + case "end": + return spaceEnd; + case "center": + return Math.min(spaceStart, spaceEnd) * 2 + anchorSpan; + } + }; + this.getNextRegionDimension = (desiredHorizontalPosition, desiredVerticalPosition) => { + const newRegionDimension = { + height: this.regionRect !== void 0 ? this.regionRect.height : 0, + width: this.regionRect !== void 0 ? this.regionRect.width : 0 + }; + if (desiredHorizontalPosition !== void 0 && this.horizontalScaling === "fill") { + newRegionDimension.width = this.getAvailableSpace(desiredHorizontalPosition, this.anchorRect !== void 0 ? this.anchorRect.left : 0, this.anchorRect !== void 0 ? this.anchorRect.right : 0, this.anchorRect !== void 0 ? this.anchorRect.width : 0, this.viewportRect !== void 0 ? this.viewportRect.left : 0, this.viewportRect !== void 0 ? this.viewportRect.right : 0); + } else if (this.horizontalScaling === "anchor") { + newRegionDimension.width = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + } + if (desiredVerticalPosition !== void 0 && this.verticalScaling === "fill") { + newRegionDimension.height = this.getAvailableSpace(desiredVerticalPosition, this.anchorRect !== void 0 ? this.anchorRect.top : 0, this.anchorRect !== void 0 ? this.anchorRect.bottom : 0, this.anchorRect !== void 0 ? this.anchorRect.height : 0, this.viewportRect !== void 0 ? this.viewportRect.top : 0, this.viewportRect !== void 0 ? this.viewportRect.bottom : 0); + } else if (this.verticalScaling === "anchor") { + newRegionDimension.height = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + } + return newRegionDimension; + }; + this.startAutoUpdateEventListeners = () => { + window.addEventListener(eventResize, this.update, { passive: true }); + window.addEventListener(eventScroll, this.update, { + passive: true, + capture: true + }); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.observe(this.viewportElement); + } + }; + this.stopAutoUpdateEventListeners = () => { + window.removeEventListener(eventResize, this.update); + window.removeEventListener(eventScroll, this.update); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.unobserve(this.viewportElement); + } + }; + } + anchorChanged() { + if (this.initialLayoutComplete) { + this.anchorElement = this.getAnchor(); + } + } + viewportChanged() { + if (this.initialLayoutComplete) { + this.viewportElement = this.getViewport(); + } + } + horizontalPositioningModeChanged() { + this.requestReset(); + } + horizontalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + horizontalViewportLockChanged() { + this.updateForAttributeChange(); + } + horizontalInsetChanged() { + this.updateForAttributeChange(); + } + horizontalThresholdChanged() { + this.updateForAttributeChange(); + } + horizontalScalingChanged() { + this.updateForAttributeChange(); + } + verticalPositioningModeChanged() { + this.requestReset(); + } + verticalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + verticalViewportLockChanged() { + this.updateForAttributeChange(); + } + verticalInsetChanged() { + this.updateForAttributeChange(); + } + verticalThresholdChanged() { + this.updateForAttributeChange(); + } + verticalScalingChanged() { + this.updateForAttributeChange(); + } + fixedPlacementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + autoUpdateModeChanged(prevMode, newMode) { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + if (prevMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + if (newMode === "auto") { + this.startAutoUpdateEventListeners(); + } + } + } + anchorElementChanged() { + this.requestReset(); + } + viewportElementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.autoUpdateMode === "auto") { + this.startAutoUpdateEventListeners(); + } + this.initialize(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + if (this.autoUpdateMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + this.stopObservers(); + this.disconnectResizeDetector(); + } + /** + * @internal + */ + adoptedCallback() { + this.initialize(); + } + /** + * destroys the instance's resize observer + */ + disconnectResizeDetector() { + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.handleResize); + } + /** + * react to attribute changes that don't require a reset + */ + updateForAttributeChange() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.forceUpdate = true; + this.update(); + } + } + /** + * fully initializes the component + */ + initialize() { + this.initializeResizeDetector(); + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + this.requestReset(); + } + /** + * Request a reset if there are currently no open requests + */ + requestReset() { + if (this.$fastController.isConnected && this.pendingReset === false) { + this.setInitialState(); + DOM.queueUpdate(() => this.reset()); + this.pendingReset = true; + } + } + /** + * sets the starting configuration for component internal values + */ + setInitialState() { + this.initialLayoutComplete = false; + this.regionVisible = false; + this.translateX = 0; + this.translateY = 0; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.viewportRect = void 0; + this.regionRect = void 0; + this.anchorRect = void 0; + this.verticalPosition = void 0; + this.horizontalPosition = void 0; + this.style.opacity = "0"; + this.style.pointerEvents = "none"; + this.forceUpdate = false; + this.style.position = this.fixedPlacement ? "fixed" : "absolute"; + this.updatePositionClasses(); + this.updateRegionStyle(); + } + }; + AnchoredRegion.intersectionService = new IntersectionService(); + __decorate([ + attr + ], AnchoredRegion.prototype, "anchor", void 0); + __decorate([ + attr + ], AnchoredRegion.prototype, "viewport", void 0); + __decorate([ + attr({ attribute: "horizontal-positioning-mode" }) + ], AnchoredRegion.prototype, "horizontalPositioningMode", void 0); + __decorate([ + attr({ attribute: "horizontal-default-position" }) + ], AnchoredRegion.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "horizontal-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalInset", void 0); + __decorate([ + attr({ attribute: "horizontal-threshold" }) + ], AnchoredRegion.prototype, "horizontalThreshold", void 0); + __decorate([ + attr({ attribute: "horizontal-scaling" }) + ], AnchoredRegion.prototype, "horizontalScaling", void 0); + __decorate([ + attr({ attribute: "vertical-positioning-mode" }) + ], AnchoredRegion.prototype, "verticalPositioningMode", void 0); + __decorate([ + attr({ attribute: "vertical-default-position" }) + ], AnchoredRegion.prototype, "verticalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalInset", void 0); + __decorate([ + attr({ attribute: "vertical-threshold" }) + ], AnchoredRegion.prototype, "verticalThreshold", void 0); + __decorate([ + attr({ attribute: "vertical-scaling" }) + ], AnchoredRegion.prototype, "verticalScaling", void 0); + __decorate([ + attr({ attribute: "fixed-placement", mode: "boolean" }) + ], AnchoredRegion.prototype, "fixedPlacement", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], AnchoredRegion.prototype, "autoUpdateMode", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "anchorElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "viewportElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "initialLayoutComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js + var horizontalAnchorOverlay, FlyoutPosTop, FlyoutPosBottom, FlyoutPosTallest, FlyoutPosTopFill, FlyoutPosBottomFill, FlyoutPosTallestFill; + var init_anchored_region_config = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js"() { + horizontalAnchorOverlay = { + horizontalDefaultPosition: "center", + horizontalPositioningMode: "locktodefault", + horizontalInset: false, + horizontalScaling: "anchor" + }; + FlyoutPosTop = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "top", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosBottom = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "bottom", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTallest = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalPositioningMode: "dynamic", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTopFill = Object.assign(Object.assign({}, FlyoutPosTop), { verticalScaling: "fill" }); + FlyoutPosBottomFill = Object.assign(Object.assign({}, FlyoutPosBottom), { verticalScaling: "fill" }); + FlyoutPosTallestFill = Object.assign(Object.assign({}, FlyoutPosTallest), { verticalScaling: "fill" }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js + var init_anchored_region2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js"() { + init_anchored_region_template(); + init_anchored_region(); + init_anchored_region_config(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js + var init_avatar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js + var Avatar; + var init_avatar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Avatar = class extends FoundationElement { + /** + * Internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.shape) { + this.shape = "circle"; + } + } + }; + __decorate([ + attr + ], Avatar.prototype, "fill", void 0); + __decorate([ + attr + ], Avatar.prototype, "color", void 0); + __decorate([ + attr + ], Avatar.prototype, "link", void 0); + __decorate([ + attr + ], Avatar.prototype, "shape", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js + var init_avatar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js"() { + init_avatar_template(); + init_avatar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js + var badgeTemplate; + var init_badge_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js"() { + init_esm(); + badgeTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js + var Badge; + var init_badge = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Badge = class extends FoundationElement { + constructor() { + super(...arguments); + this.generateBadgeStyle = () => { + if (!this.fill && !this.color) { + return; + } + const fill2 = `background-color: var(--badge-fill-${this.fill});`; + const color2 = `color: var(--badge-color-${this.color});`; + if (this.fill && !this.color) { + return fill2; + } else if (this.color && !this.fill) { + return color2; + } else { + return `${color2} ${fill2}`; + } + }; + } + }; + __decorate([ + attr({ attribute: "fill" }) + ], Badge.prototype, "fill", void 0); + __decorate([ + attr({ attribute: "color" }) + ], Badge.prototype, "color", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Badge.prototype, "circular", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js + var init_badge2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js"() { + init_badge_template(); + init_badge(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js + var init_breadcrumb_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js + var BreadcrumbItem; + var init_breadcrumb_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js"() { + init_tslib_es6(); + init_esm(); + init_anchor(); + init_patterns(); + init_apply_mixins(); + BreadcrumbItem = class extends Anchor { + constructor() { + super(...arguments); + this.separator = true; + } + }; + __decorate([ + observable + ], BreadcrumbItem.prototype, "separator", void 0); + applyMixins(BreadcrumbItem, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js + var init_breadcrumb_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js"() { + init_breadcrumb_item_template(); + init_breadcrumb_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js + var init_breadcrumb_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js + var Breadcrumb; + var init_breadcrumb = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js"() { + init_tslib_es6(); + init_esm(); + init_breadcrumb_item(); + init_foundation_element(); + Breadcrumb = class extends FoundationElement { + slottedBreadcrumbItemsChanged() { + if (this.$fastController.isConnected) { + if (this.slottedBreadcrumbItems === void 0 || this.slottedBreadcrumbItems.length === 0) { + return; + } + const lastNode = this.slottedBreadcrumbItems[this.slottedBreadcrumbItems.length - 1]; + this.slottedBreadcrumbItems.forEach((item) => { + const itemIsLastNode = item === lastNode; + this.setItemSeparator(item, itemIsLastNode); + this.setAriaCurrent(item, itemIsLastNode); + }); + } + } + setItemSeparator(item, isLastNode) { + if (item instanceof BreadcrumbItem) { + item.separator = !isLastNode; + } + } + /** + * Finds href on childnodes in the light DOM or shadow DOM. + * We look in the shadow DOM because we insert an anchor when breadcrumb-item has an href. + */ + findChildWithHref(node) { + var _a, _b; + if (node.childElementCount > 0) { + return node.querySelector("a[href]"); + } else if ((_a = node.shadowRoot) === null || _a === void 0 ? void 0 : _a.childElementCount) { + return (_b = node.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector("a[href]"); + } else + return null; + } + /** + * Sets ARIA Current for the current node + * If child node with an anchor tag and with href is found then set aria-current to correct value for the child node, + * otherwise apply aria-current to the host element, with an href + */ + setAriaCurrent(item, isLastNode) { + const childNodeWithHref = this.findChildWithHref(item); + if (childNodeWithHref === null && item.hasAttribute("href") && item instanceof BreadcrumbItem) { + isLastNode ? item.setAttribute("aria-current", "page") : item.removeAttribute("aria-current"); + } else if (childNodeWithHref !== null) { + isLastNode ? childNodeWithHref.setAttribute("aria-current", "page") : childNodeWithHref.removeAttribute("aria-current"); + } + } + }; + __decorate([ + observable + ], Breadcrumb.prototype, "slottedBreadcrumbItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js + var init_breadcrumb2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js"() { + init_breadcrumb_template(); + init_breadcrumb(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js + var buttonTemplate; + var init_button_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js"() { + init_esm(); + init_start_end(); + buttonTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js + function FormAssociated(BaseCtor) { + const C = class extends BaseCtor { + constructor(...args) { + super(...args); + this.dirtyValue = false; + this.disabled = false; + this.proxyEventsToBlock = ["change", "click"]; + this.proxyInitialized = false; + this.required = false; + this.initialValue = this.initialValue || ""; + if (!this.elementInternals) { + this.formResetCallback = this.formResetCallback.bind(this); + } + } + /** + * Must evaluate to true to enable elementInternals. + * Feature detects API support and resolve respectively + * + * @internal + */ + static get formAssociated() { + return supportsElementInternals; + } + /** + * Returns the validity state of the element + * + * @alpha + */ + get validity() { + return this.elementInternals ? this.elementInternals.validity : this.proxy.validity; + } + /** + * Retrieve a reference to the associated form. + * Returns null if not associated to any form. + * + * @alpha + */ + get form() { + return this.elementInternals ? this.elementInternals.form : this.proxy.form; + } + /** + * Retrieve the localized validation message, + * or custom validation message if set. + * + * @alpha + */ + get validationMessage() { + return this.elementInternals ? this.elementInternals.validationMessage : this.proxy.validationMessage; + } + /** + * Whether the element will be validated when the + * form is submitted + */ + get willValidate() { + return this.elementInternals ? this.elementInternals.willValidate : this.proxy.willValidate; + } + /** + * A reference to all associated label elements + */ + get labels() { + if (this.elementInternals) { + return Object.freeze(Array.from(this.elementInternals.labels)); + } else if (this.proxy instanceof HTMLElement && this.proxy.ownerDocument && this.id) { + const parentLabels = this.proxy.labels; + const forLabels = Array.from(this.proxy.getRootNode().querySelectorAll(`[for='${this.id}']`)); + const labels = parentLabels ? forLabels.concat(Array.from(parentLabels)) : forLabels; + return Object.freeze(labels); + } else { + return emptyArray; + } + } + /** + * Invoked when the `value` property changes + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `valueChanged` method + * They must be sure to invoke `super.valueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + valueChanged(previous, next) { + this.dirtyValue = true; + if (this.proxy instanceof HTMLElement) { + this.proxy.value = this.value; + } + this.currentValue = this.value; + this.setFormValue(this.value); + this.validate(); + } + currentValueChanged() { + this.value = this.currentValue; + } + /** + * Invoked when the `initialValue` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `initialValueChanged` method + * They must be sure to invoke `super.initialValueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + /** + * Invoked when the `disabled` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `disabledChanged` method + * They must be sure to invoke `super.disabledChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + disabledChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.disabled = this.disabled; + } + DOM.queueUpdate(() => this.classList.toggle("disabled", this.disabled)); + } + /** + * Invoked when the `name` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `nameChanged` method + * They must be sure to invoke `super.nameChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + nameChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.name = this.name; + } + } + /** + * Invoked when the `required` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `requiredChanged` method + * They must be sure to invoke `super.requiredChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + requiredChanged(prev, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.required = this.required; + } + DOM.queueUpdate(() => this.classList.toggle("required", this.required)); + this.validate(); + } + /** + * The element internals object. Will only exist + * in browsers supporting the attachInternals API + */ + get elementInternals() { + if (!supportsElementInternals) { + return null; + } + let internals = InternalsMap.get(this); + if (!internals) { + internals = this.attachInternals(); + InternalsMap.set(this, internals); + } + return internals; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("keypress", this._keypressHandler); + if (!this.value) { + this.value = this.initialValue; + this.dirtyValue = false; + } + if (!this.elementInternals) { + this.attachProxy(); + if (this.form) { + this.form.addEventListener("reset", this.formResetCallback); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.proxyEventsToBlock.forEach((name) => this.proxy.removeEventListener(name, this.stopPropagation)); + if (!this.elementInternals && this.form) { + this.form.removeEventListener("reset", this.formResetCallback); + } + } + /** + * Return the current validity of the element. + */ + checkValidity() { + return this.elementInternals ? this.elementInternals.checkValidity() : this.proxy.checkValidity(); + } + /** + * Return the current validity of the element. + * If false, fires an invalid event at the element. + */ + reportValidity() { + return this.elementInternals ? this.elementInternals.reportValidity() : this.proxy.reportValidity(); + } + /** + * Set the validity of the control. In cases when the elementInternals object is not + * available (and the proxy element is used to report validity), this function will + * do nothing unless a message is provided, at which point the setCustomValidity method + * of the proxy element will be invoked with the provided message. + * @param flags - Validity flags + * @param message - Optional message to supply + * @param anchor - Optional element used by UA to display an interactive validation UI + */ + setValidity(flags, message, anchor) { + if (this.elementInternals) { + this.elementInternals.setValidity(flags, message, anchor); + } else if (typeof message === "string") { + this.proxy.setCustomValidity(message); + } + } + /** + * Invoked when a connected component's form or fieldset has its disabled + * state changed. + * @param disabled - the disabled value of the form / fieldset + */ + formDisabledCallback(disabled) { + this.disabled = disabled; + } + formResetCallback() { + this.value = this.initialValue; + this.dirtyValue = false; + } + /** + * Attach the proxy element to the DOM + */ + attachProxy() { + var _a; + if (!this.proxyInitialized) { + this.proxyInitialized = true; + this.proxy.style.display = "none"; + this.proxyEventsToBlock.forEach((name) => this.proxy.addEventListener(name, this.stopPropagation)); + this.proxy.disabled = this.disabled; + this.proxy.required = this.required; + if (typeof this.name === "string") { + this.proxy.name = this.name; + } + if (typeof this.value === "string") { + this.proxy.value = this.value; + } + this.proxy.setAttribute("slot", proxySlotName); + this.proxySlot = document.createElement("slot"); + this.proxySlot.setAttribute("name", proxySlotName); + } + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(this.proxySlot); + this.appendChild(this.proxy); + } + /** + * Detach the proxy element from the DOM + */ + detachProxy() { + var _a; + this.removeChild(this.proxy); + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.removeChild(this.proxySlot); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate(anchor) { + if (this.proxy instanceof HTMLElement) { + this.setValidity(this.proxy.validity, this.proxy.validationMessage, anchor); + } + } + /** + * Associates the provided value (and optional state) with the parent form. + * @param value - The value to set + * @param state - The state object provided to during session restores and when autofilling. + */ + setFormValue(value, state) { + if (this.elementInternals) { + this.elementInternals.setFormValue(value, state || value); + } + } + _keypressHandler(e) { + switch (e.key) { + case keyEnter: + if (this.form instanceof HTMLFormElement) { + const defaultButton = this.form.querySelector("[type=submit]"); + defaultButton === null || defaultButton === void 0 ? void 0 : defaultButton.click(); + } + break; + } + } + /** + * Used to stop propagation of proxy element events + * @param e - Event object + */ + stopPropagation(e) { + e.stopPropagation(); + } + }; + attr({ mode: "boolean" })(C.prototype, "disabled"); + attr({ mode: "fromView", attribute: "value" })(C.prototype, "initialValue"); + attr({ attribute: "current-value" })(C.prototype, "currentValue"); + attr(C.prototype, "name"); + attr({ mode: "boolean" })(C.prototype, "required"); + observable(C.prototype, "value"); + return C; + } + function CheckableFormAssociated(BaseCtor) { + class C extends FormAssociated(BaseCtor) { + } + class D extends C { + constructor(...args) { + super(args); + this.dirtyChecked = false; + this.checkedAttribute = false; + this.checked = false; + this.dirtyChecked = false; + } + checkedAttributeChanged() { + this.defaultChecked = this.checkedAttribute; + } + /** + * @internal + */ + defaultCheckedChanged() { + if (!this.dirtyChecked) { + this.checked = this.defaultChecked; + this.dirtyChecked = false; + } + } + checkedChanged(prev, next) { + if (!this.dirtyChecked) { + this.dirtyChecked = true; + } + this.currentChecked = this.checked; + this.updateForm(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.checked = this.checked; + } + if (prev !== void 0) { + this.$emit("change"); + } + this.validate(); + } + currentCheckedChanged(prev, next) { + this.checked = this.currentChecked; + } + updateForm() { + const value = this.checked ? this.value : null; + this.setFormValue(value, value); + } + connectedCallback() { + super.connectedCallback(); + this.updateForm(); + } + formResetCallback() { + super.formResetCallback(); + this.checked = !!this.checkedAttribute; + this.dirtyChecked = false; + } + } + attr({ attribute: "checked", mode: "boolean" })(D.prototype, "checkedAttribute"); + attr({ attribute: "current-checked", converter: booleanConverter })(D.prototype, "currentChecked"); + observable(D.prototype, "defaultChecked"); + observable(D.prototype, "checked"); + return D; + } + var proxySlotName, ElementInternalsKey, supportsElementInternals, InternalsMap; + var init_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js"() { + init_esm(); + init_dist2(); + proxySlotName = "form-associated-proxy"; + ElementInternalsKey = "ElementInternals"; + supportsElementInternals = ElementInternalsKey in window && "setFormValue" in window[ElementInternalsKey].prototype; + InternalsMap = /* @__PURE__ */ new WeakMap(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js + var _Button, FormAssociatedButton; + var init_button_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Button = class extends FoundationElement { + }; + FormAssociatedButton = class extends FormAssociated(_Button) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.js + var Button, DelegatesARIAButton; + var init_button = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_button_form_associated(); + Button = class extends FormAssociatedButton { + constructor() { + super(...arguments); + this.handleClick = (e) => { + var _a; + if (this.disabled && ((_a = this.defaultSlottedContent) === null || _a === void 0 ? void 0 : _a.length) <= 1) { + e.stopPropagation(); + } + }; + this.handleSubmission = () => { + if (!this.form) { + return; + } + const attached = this.proxy.isConnected; + if (!attached) { + this.attachProxy(); + } + typeof this.form.requestSubmit === "function" ? this.form.requestSubmit(this.proxy) : this.proxy.click(); + if (!attached) { + this.detachProxy(); + } + }; + this.handleFormReset = () => { + var _a; + (_a = this.form) === null || _a === void 0 ? void 0 : _a.reset(); + }; + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + this.control.focus(); + }; + } + }; + } + formactionChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formAction = this.formaction; + } + } + formenctypeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formEnctype = this.formenctype; + } + } + formmethodChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formMethod = this.formmethod; + } + } + formnovalidateChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formNoValidate = this.formnovalidate; + } + } + formtargetChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formTarget = this.formtarget; + } + } + typeChanged(previous, next) { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + } + next === "submit" && this.addEventListener("click", this.handleSubmission); + previous === "submit" && this.removeEventListener("click", this.handleSubmission); + next === "reset" && this.addEventListener("click", this.handleFormReset); + previous === "reset" && this.removeEventListener("click", this.handleFormReset); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.handleUnsupportedDelegatesFocus(); + const elements3 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements3) { + elements3.forEach((span) => { + span.addEventListener("click", this.handleClick); + }); + } + } + /** + * @internal + */ + disconnectedCallback() { + var _a; + super.disconnectedCallback(); + const elements3 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements3) { + elements3.forEach((span) => { + span.removeEventListener("click", this.handleClick); + }); + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], Button.prototype, "formId", void 0); + __decorate([ + attr + ], Button.prototype, "formaction", void 0); + __decorate([ + attr + ], Button.prototype, "formenctype", void 0); + __decorate([ + attr + ], Button.prototype, "formmethod", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "formnovalidate", void 0); + __decorate([ + attr + ], Button.prototype, "formtarget", void 0); + __decorate([ + attr + ], Button.prototype, "type", void 0); + __decorate([ + observable + ], Button.prototype, "defaultSlottedContent", void 0); + DelegatesARIAButton = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIAButton.prototype, "ariaExpanded", void 0); + __decorate([ + attr({ attribute: "aria-pressed" }) + ], DelegatesARIAButton.prototype, "ariaPressed", void 0); + applyMixins(DelegatesARIAButton, ARIAGlobalStatesAndProperties); + applyMixins(Button, StartEnd, DelegatesARIAButton); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/index.js + var init_button2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/index.js"() { + init_button_template(); + init_button(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js + var DateFormatter; + var init_date_formatter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js"() { + DateFormatter = class { + constructor(config) { + this.dayFormat = "numeric"; + this.weekdayFormat = "long"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.date = /* @__PURE__ */ new Date(); + if (config) { + for (const key in config) { + const value = config[key]; + if (key === "date") { + this.date = this.getDateObject(value); + } else { + this[key] = value; + } + } + } + } + /** + * Helper function to make sure that the DateFormatter is working with an instance of Date + * @param date - The date as an object, string or Date insance + * @returns - A Date instance + * @public + */ + getDateObject(date) { + if (typeof date === "string") { + const dates = date.split(/[/-]/); + if (dates.length < 3) { + return /* @__PURE__ */ new Date(); + } + return new Date(parseInt(dates[2], 10), parseInt(dates[0], 10) - 1, parseInt(dates[1], 10)); + } else if ("day" in date && "month" in date && "year" in date) { + const { day, month, year } = date; + return new Date(year, month - 1, day); + } + return date; + } + /** + * + * @param date - a valide date as either a Date, string, objec or a DateFormatter + * @param format - The formatting for the string + * @param locale - locale data used for formatting + * @returns A localized string of the date provided + * @public + */ + getDate(date = this.date, format = { + weekday: this.weekdayFormat, + month: this.monthFormat, + day: this.dayFormat, + year: this.yearFormat + }, locale = this.locale) { + const dateObj = this.getDateObject(date); + if (!dateObj.getTime()) { + return ""; + } + const optionsWithTimeZone = Object.assign({ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }, format); + return new Intl.DateTimeFormat(locale, optionsWithTimeZone).format(dateObj); + } + /** + * + * @param day - Day to localize + * @param format - The formatting for the day + * @param locale - The locale data used for formatting + * @returns - A localized number for the day + * @public + */ + getDay(day = this.date.getDate(), format = this.dayFormat, locale = this.locale) { + return this.getDate({ month: 1, day, year: 2020 }, { day: format }, locale); + } + /** + * + * @param month - The month to localize + * @param format - The formatting for the month + * @param locale - The locale data used for formatting + * @returns - A localized name of the month + * @public + */ + getMonth(month = this.date.getMonth() + 1, format = this.monthFormat, locale = this.locale) { + return this.getDate({ month, day: 2, year: 2020 }, { month: format }, locale); + } + /** + * + * @param year - The year to localize + * @param format - The formatting for the year + * @param locale - The locale data used for formatting + * @returns - A localized string for the year + * @public + */ + getYear(year = this.date.getFullYear(), format = this.yearFormat, locale = this.locale) { + return this.getDate({ month: 2, day: 2, year }, { year: format }, locale); + } + /** + * + * @param weekday - The number of the weekday, defaults to Sunday + * @param format - The formatting for the weekday label + * @param locale - The locale data used for formatting + * @returns - A formatted weekday label + * @public + */ + getWeekday(weekday = 0, format = this.weekdayFormat, locale = this.locale) { + const date = `1-${weekday + 1}-2017`; + return this.getDate(date, { weekday: format }, locale); + } + /** + * + * @param format - The formatting for the weekdays + * @param locale - The locale data used for formatting + * @returns - An array of the weekday labels + * @public + */ + getWeekdays(format = this.weekdayFormat, locale = this.locale) { + return Array(7).fill(null).map((_, day) => this.getWeekday(day, format, locale)); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js + var Calendar; + var init_calendar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_date_formatter(); + Calendar = class extends FoundationElement { + constructor() { + super(...arguments); + this.dateFormatter = new DateFormatter(); + this.readonly = false; + this.locale = "en-US"; + this.month = (/* @__PURE__ */ new Date()).getMonth() + 1; + this.year = (/* @__PURE__ */ new Date()).getFullYear(); + this.dayFormat = "numeric"; + this.weekdayFormat = "short"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.minWeeks = 0; + this.disabledDates = ""; + this.selectedDates = ""; + this.oneDayInMs = 864e5; + } + localeChanged() { + this.dateFormatter.locale = this.locale; + } + dayFormatChanged() { + this.dateFormatter.dayFormat = this.dayFormat; + } + weekdayFormatChanged() { + this.dateFormatter.weekdayFormat = this.weekdayFormat; + } + monthFormatChanged() { + this.dateFormatter.monthFormat = this.monthFormat; + } + yearFormatChanged() { + this.dateFormatter.yearFormat = this.yearFormat; + } + /** + * Gets data needed to render about a calendar month as well as the previous and next months + * @param year - year of the calendar + * @param month - month of the calendar + * @returns - an object with data about the current and 2 surrounding months + * @public + */ + getMonthInfo(month = this.month, year = this.year) { + const getFirstDay = (date) => new Date(date.getFullYear(), date.getMonth(), 1).getDay(); + const getLength = (date) => { + const nextMonth2 = new Date(date.getFullYear(), date.getMonth() + 1, 1); + return new Date(nextMonth2.getTime() - this.oneDayInMs).getDate(); + }; + const thisMonth = new Date(year, month - 1); + const nextMonth = new Date(year, month); + const previousMonth = new Date(year, month - 2); + return { + length: getLength(thisMonth), + month, + start: getFirstDay(thisMonth), + year, + previous: { + length: getLength(previousMonth), + month: previousMonth.getMonth() + 1, + start: getFirstDay(previousMonth), + year: previousMonth.getFullYear() + }, + next: { + length: getLength(nextMonth), + month: nextMonth.getMonth() + 1, + start: getFirstDay(nextMonth), + year: nextMonth.getFullYear() + } + }; + } + /** + * A list of calendar days + * @param info - an object containing the information needed to render a calendar month + * @param minWeeks - minimum number of weeks to show + * @returns a list of days in a calendar month + * @public + */ + getDays(info = this.getMonthInfo(), minWeeks = this.minWeeks) { + minWeeks = minWeeks > 10 ? 10 : minWeeks; + const { start, length, previous, next } = info; + const days = []; + let dayCount = 1 - start; + while (dayCount < length + 1 || days.length < minWeeks || days[days.length - 1].length % 7 !== 0) { + const { month, year } = dayCount < 1 ? previous : dayCount > length ? next : info; + const day = dayCount < 1 ? previous.length + dayCount : dayCount > length ? dayCount - length : dayCount; + const dateString = `${month}-${day}-${year}`; + const disabled = this.dateInString(dateString, this.disabledDates); + const selected = this.dateInString(dateString, this.selectedDates); + const date = { + day, + month, + year, + disabled, + selected + }; + const target = days[days.length - 1]; + if (days.length === 0 || target.length % 7 === 0) { + days.push([date]); + } else { + target.push(date); + } + dayCount++; + } + return days; + } + /** + * A helper function that checks if a date exists in a list of dates + * @param date - A date objec that includes the day, month and year + * @param datesString - a comma separated list of dates + * @returns - Returns true if it found the date in the list of dates + * @public + */ + dateInString(date, datesString) { + const dates = datesString.split(",").map((str) => str.trim()); + date = typeof date === "string" ? date : `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`; + return dates.some((d) => d === date); + } + /** + * Creates a class string for the day container + * @param date - date of the calendar cell + * @returns - string of class names + * @public + */ + getDayClassNames(date, todayString) { + const { day, month, year, disabled, selected } = date; + const today = todayString === `${month}-${day}-${year}`; + const inactive = this.month !== month; + return [ + "day", + today && "today", + inactive && "inactive", + disabled && "disabled", + selected && "selected" + ].filter(Boolean).join(" "); + } + /** + * Returns a list of weekday labels + * @returns An array of weekday text and full text if abbreviated + * @public + */ + getWeekdayText() { + const weekdayText = this.dateFormatter.getWeekdays().map((text) => ({ text })); + if (this.weekdayFormat !== "long") { + const longText = this.dateFormatter.getWeekdays("long"); + weekdayText.forEach((weekday, index2) => { + weekday.abbr = longText[index2]; + }); + } + return weekdayText; + } + /** + * Emits the "date-select" event with the day, month and year. + * @param date - Date cell + * @public + */ + handleDateSelect(event, day) { + event.preventDefault; + this.$emit("dateselected", day); + } + /** + * Handles keyboard events on a cell + * @param event - Keyboard event + * @param date - Date of the cell selected + */ + handleKeydown(event, date) { + if (event.key === keyEnter) { + this.handleDateSelect(event, date); + } + return true; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Calendar.prototype, "readonly", void 0); + __decorate([ + attr + ], Calendar.prototype, "locale", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "month", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "year", void 0); + __decorate([ + attr({ attribute: "day-format", mode: "fromView" }) + ], Calendar.prototype, "dayFormat", void 0); + __decorate([ + attr({ attribute: "weekday-format", mode: "fromView" }) + ], Calendar.prototype, "weekdayFormat", void 0); + __decorate([ + attr({ attribute: "month-format", mode: "fromView" }) + ], Calendar.prototype, "monthFormat", void 0); + __decorate([ + attr({ attribute: "year-format", mode: "fromView" }) + ], Calendar.prototype, "yearFormat", void 0); + __decorate([ + attr({ attribute: "min-weeks", converter: nullableNumberConverter }) + ], Calendar.prototype, "minWeeks", void 0); + __decorate([ + attr({ attribute: "disabled-dates" }) + ], Calendar.prototype, "disabledDates", void 0); + __decorate([ + attr({ attribute: "selected-dates" }) + ], Calendar.prototype, "selectedDates", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js + var GenerateHeaderOptions, DataGridCellTypes, DataGridRowTypes; + var init_data_grid_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js"() { + GenerateHeaderOptions = { + none: "none", + default: "default", + sticky: "sticky" + }; + DataGridCellTypes = { + default: "default", + columnHeader: "columnheader", + rowHeader: "rowheader" + }; + DataGridRowTypes = { + default: "default", + header: "header", + stickyHeader: "sticky-header" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js + var DataGridRow; + var init_data_grid_row = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGridRow = class extends FoundationElement { + constructor() { + super(...arguments); + this.rowType = DataGridRowTypes.default; + this.rowData = null; + this.columnDefinitions = null; + this.isActiveRow = false; + this.cellsRepeatBehavior = null; + this.cellsPlaceholder = null; + this.focusColumnIndex = 0; + this.refocusOnLoad = false; + this.updateRowStyle = () => { + this.style.gridTemplateColumns = this.gridTemplateColumns; + }; + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowStyle(); + } + } + rowTypeChanged() { + if (this.$fastController.isConnected) { + this.updateItemTemplate(); + } + } + rowDataChanged() { + if (this.rowData !== null && this.isActiveRow) { + this.refocusOnLoad = true; + return; + } + } + cellItemTemplateChanged() { + this.updateItemTemplate(); + } + headerCellItemTemplateChanged() { + this.updateItemTemplate(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.cellsRepeatBehavior === null) { + this.cellsPlaceholder = document.createComment(""); + this.appendChild(this.cellsPlaceholder); + this.updateItemTemplate(); + this.cellsRepeatBehavior = new RepeatDirective((x) => x.columnDefinitions, (x) => x.activeCellItemTemplate, { positioning: true }).createBehavior(this.cellsPlaceholder); + this.$fastController.addBehaviors([this.cellsRepeatBehavior]); + } + this.addEventListener("cell-focused", this.handleCellFocus); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.updateRowStyle(); + if (this.refocusOnLoad) { + this.refocusOnLoad = false; + if (this.cellElements.length > this.focusColumnIndex) { + this.cellElements[this.focusColumnIndex].focus(); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("cell-focused", this.handleCellFocus); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + } + handleFocusout(e) { + if (!this.contains(e.target)) { + this.isActiveRow = false; + this.focusColumnIndex = 0; + } + } + handleCellFocus(e) { + this.isActiveRow = true; + this.focusColumnIndex = this.cellElements.indexOf(e.target); + this.$emit("row-focused", this); + } + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusColumnIndex = 0; + switch (e.key) { + case keyArrowLeft: + newFocusColumnIndex = Math.max(0, this.focusColumnIndex - 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyArrowRight: + newFocusColumnIndex = Math.min(this.cellElements.length - 1, this.focusColumnIndex + 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyHome: + if (!e.ctrlKey) { + this.cellElements[0].focus(); + e.preventDefault(); + } + break; + case keyEnd: + if (!e.ctrlKey) { + this.cellElements[this.cellElements.length - 1].focus(); + e.preventDefault(); + } + break; + } + } + updateItemTemplate() { + this.activeCellItemTemplate = this.rowType === DataGridRowTypes.default && this.cellItemTemplate !== void 0 ? this.cellItemTemplate : this.rowType === DataGridRowTypes.default && this.cellItemTemplate === void 0 ? this.defaultCellItemTemplate : this.headerCellItemTemplate !== void 0 ? this.headerCellItemTemplate : this.defaultHeaderCellItemTemplate; + } + }; + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGridRow.prototype, "gridTemplateColumns", void 0); + __decorate([ + attr({ attribute: "row-type" }) + ], DataGridRow.prototype, "rowType", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowIndex", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "isActiveRow", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "activeCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultHeaderCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js + function createRowItemTemplate(context) { + const rowTag = context.tagFor(DataGridRow); + return html` + <${rowTag} + :rowData="${(x) => x}" + :cellItemTemplate="${(x, c) => c.parent.cellItemTemplate}" + :headerCellItemTemplate="${(x, c) => c.parent.headerCellItemTemplate}" + > +`; + } + var dataGridTemplate; + var init_data_grid_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js"() { + init_esm(); + init_data_grid_row(); + dataGridTemplate = (context, definition) => { + const rowItemTemplate = createRowItemTemplate(context); + const rowTag = context.tagFor(DataGridRow); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js + var DataGrid; + var init_data_grid = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGrid = class _DataGrid extends FoundationElement { + constructor() { + super(); + this.noTabbing = false; + this.generateHeader = GenerateHeaderOptions.default; + this.rowsData = []; + this.columnDefinitions = null; + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + this.rowsPlaceholder = null; + this.generatedHeader = null; + this.isUpdatingFocus = false; + this.pendingFocusUpdate = false; + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = true; + this.generatedGridTemplateColumns = ""; + this.focusOnCell = (rowIndex, columnIndex, scrollIntoView) => { + if (this.rowElements.length === 0) { + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + return; + } + const focusRowIndex = Math.max(0, Math.min(this.rowElements.length - 1, rowIndex)); + const focusRow = this.rowElements[focusRowIndex]; + const cells = focusRow.querySelectorAll('[role="cell"], [role="gridcell"], [role="columnheader"], [role="rowheader"]'); + const focusColumnIndex = Math.max(0, Math.min(cells.length - 1, columnIndex)); + const focusTarget = cells[focusColumnIndex]; + if (scrollIntoView && this.scrollHeight !== this.clientHeight && (focusRowIndex < this.focusRowIndex && this.scrollTop > 0 || focusRowIndex > this.focusRowIndex && this.scrollTop < this.scrollHeight - this.clientHeight)) { + focusTarget.scrollIntoView({ block: "center", inline: "center" }); + } + focusTarget.focus(); + }; + this.onChildListChange = (mutations, observer) => { + if (mutations && mutations.length) { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((newNode) => { + if (newNode.nodeType === 1 && newNode.getAttribute("role") === "row") { + newNode.columnDefinitions = this.columnDefinitions; + } + }); + }); + this.queueRowIndexUpdate(); + } + }; + this.queueRowIndexUpdate = () => { + if (!this.rowindexUpdateQueued) { + this.rowindexUpdateQueued = true; + DOM.queueUpdate(this.updateRowIndexes); + } + }; + this.updateRowIndexes = () => { + let newGridTemplateColumns = this.gridTemplateColumns; + if (newGridTemplateColumns === void 0) { + if (this.generatedGridTemplateColumns === "" && this.rowElements.length > 0) { + const firstRow = this.rowElements[0]; + this.generatedGridTemplateColumns = new Array(firstRow.cellElements.length).fill("1fr").join(" "); + } + newGridTemplateColumns = this.generatedGridTemplateColumns; + } + this.rowElements.forEach((element, index2) => { + const thisRow = element; + thisRow.rowIndex = index2; + thisRow.gridTemplateColumns = newGridTemplateColumns; + if (this.columnDefinitionsStale) { + thisRow.columnDefinitions = this.columnDefinitions; + } + }); + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = false; + }; + } + /** + * generates a gridTemplateColumns based on columndata array + */ + static generateTemplateColumns(columnDefinitions) { + let templateColumns = ""; + columnDefinitions.forEach((column) => { + templateColumns = `${templateColumns}${templateColumns === "" ? "" : " "}${"1fr"}`; + }); + return templateColumns; + } + noTabbingChanged() { + if (this.$fastController.isConnected) { + if (this.noTabbing) { + this.setAttribute("tabIndex", "-1"); + } else { + this.setAttribute("tabIndex", this.contains(document.activeElement) || this === document.activeElement ? "-1" : "0"); + } + } + } + generateHeaderChanged() { + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowIndexes(); + } + } + rowsDataChanged() { + if (this.columnDefinitions === null && this.rowsData.length > 0) { + this.columnDefinitions = _DataGrid.generateColumns(this.rowsData[0]); + } + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + columnDefinitionsChanged() { + if (this.columnDefinitions === null) { + this.generatedGridTemplateColumns = ""; + return; + } + this.generatedGridTemplateColumns = _DataGrid.generateTemplateColumns(this.columnDefinitions); + if (this.$fastController.isConnected) { + this.columnDefinitionsStale = true; + this.queueRowIndexUpdate(); + } + } + headerCellItemTemplateChanged() { + if (this.$fastController.isConnected) { + if (this.generatedHeader !== null) { + this.generatedHeader.headerCellItemTemplate = this.headerCellItemTemplate; + } + } + } + focusRowIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + focusColumnIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.rowItemTemplate === void 0) { + this.rowItemTemplate = this.defaultRowItemTemplate; + } + this.rowsPlaceholder = document.createComment(""); + this.appendChild(this.rowsPlaceholder); + this.toggleGeneratedHeader(); + this.rowsRepeatBehavior = new RepeatDirective((x) => x.rowsData, (x) => x.rowItemTemplate, { positioning: true }).createBehavior(this.rowsPlaceholder); + this.$fastController.addBehaviors([this.rowsRepeatBehavior]); + this.addEventListener("row-focused", this.handleRowFocus); + this.addEventListener(eventFocus, this.handleFocus); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.addEventListener(eventFocusOut, this.handleFocusOut); + this.observer = new MutationObserver(this.onChildListChange); + this.observer.observe(this, { childList: true }); + if (this.noTabbing) { + this.setAttribute("tabindex", "-1"); + } + DOM.queueUpdate(this.queueRowIndexUpdate); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("row-focused", this.handleRowFocus); + this.removeEventListener(eventFocus, this.handleFocus); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.removeEventListener(eventFocusOut, this.handleFocusOut); + this.observer.disconnect(); + this.rowsPlaceholder = null; + this.generatedHeader = null; + } + /** + * @internal + */ + handleRowFocus(e) { + this.isUpdatingFocus = true; + const focusRow = e.target; + this.focusRowIndex = this.rowElements.indexOf(focusRow); + this.focusColumnIndex = focusRow.focusColumnIndex; + this.setAttribute("tabIndex", "-1"); + this.isUpdatingFocus = false; + } + /** + * @internal + */ + handleFocus(e) { + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + /** + * @internal + */ + handleFocusOut(e) { + if (e.relatedTarget === null || !this.contains(e.relatedTarget)) { + this.setAttribute("tabIndex", this.noTabbing ? "-1" : "0"); + } + } + /** + * @internal + */ + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusRowIndex; + const maxIndex = this.rowElements.length - 1; + const currentGridBottom = this.offsetHeight + this.scrollTop; + const lastRow = this.rowElements[maxIndex]; + switch (e.key) { + case keyArrowUp: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex - 1, this.focusColumnIndex, true); + break; + case keyArrowDown: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex + 1, this.focusColumnIndex, true); + break; + case keyPageUp: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex === 0) { + this.focusOnCell(0, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex - 1; + for (newFocusRowIndex; newFocusRowIndex >= 0; newFocusRowIndex--) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop < this.scrollTop) { + this.scrollTop = thisRow.offsetTop + thisRow.clientHeight - this.clientHeight; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyPageDown: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex >= maxIndex || lastRow.offsetTop + lastRow.offsetHeight <= currentGridBottom) { + this.focusOnCell(maxIndex, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex + 1; + for (newFocusRowIndex; newFocusRowIndex <= maxIndex; newFocusRowIndex++) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop + thisRow.offsetHeight > currentGridBottom) { + let stickyHeaderOffset = 0; + if (this.generateHeader === GenerateHeaderOptions.sticky && this.generatedHeader !== null) { + stickyHeaderOffset = this.generatedHeader.clientHeight; + } + this.scrollTop = thisRow.offsetTop - stickyHeaderOffset; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyHome: + if (e.ctrlKey) { + e.preventDefault(); + this.focusOnCell(0, 0, true); + } + break; + case keyEnd: + if (e.ctrlKey && this.columnDefinitions !== null) { + e.preventDefault(); + this.focusOnCell(this.rowElements.length - 1, this.columnDefinitions.length - 1, true); + } + break; + } + } + queueFocusUpdate() { + if (this.isUpdatingFocus && (this.contains(document.activeElement) || this === document.activeElement)) { + return; + } + if (this.pendingFocusUpdate === false) { + this.pendingFocusUpdate = true; + DOM.queueUpdate(() => this.updateFocus()); + } + } + updateFocus() { + this.pendingFocusUpdate = false; + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + toggleGeneratedHeader() { + if (this.generatedHeader !== null) { + this.removeChild(this.generatedHeader); + this.generatedHeader = null; + } + if (this.generateHeader !== GenerateHeaderOptions.none && this.rowsData.length > 0) { + const generatedHeaderElement = document.createElement(this.rowElementTag); + this.generatedHeader = generatedHeaderElement; + this.generatedHeader.columnDefinitions = this.columnDefinitions; + this.generatedHeader.gridTemplateColumns = this.gridTemplateColumns; + this.generatedHeader.rowType = this.generateHeader === GenerateHeaderOptions.sticky ? DataGridRowTypes.stickyHeader : DataGridRowTypes.header; + if (this.firstChild !== null || this.rowsPlaceholder !== null) { + this.insertBefore(generatedHeaderElement, this.firstChild !== null ? this.firstChild : this.rowsPlaceholder); + } + return; + } + } + }; + DataGrid.generateColumns = (row) => { + return Object.getOwnPropertyNames(row).map((property, index2) => { + return { + columnDataKey: property, + gridColumn: `${index2}` + }; + }); + }; + __decorate([ + attr({ attribute: "no-tabbing", mode: "boolean" }) + ], DataGrid.prototype, "noTabbing", void 0); + __decorate([ + attr({ attribute: "generate-header" }) + ], DataGrid.prototype, "generateHeader", void 0); + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGrid.prototype, "gridTemplateColumns", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowsData", void 0); + __decorate([ + observable + ], DataGrid.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusRowIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusColumnIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "defaultRowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElementTag", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js + var defaultCellContentsTemplate, defaultHeaderCellContentsTemplate, DataGridCell; + var init_data_grid_cell = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + defaultCellContentsTemplate = html` + +`; + defaultHeaderCellContentsTemplate = html` + +`; + DataGridCell = class extends FoundationElement { + constructor() { + super(...arguments); + this.cellType = DataGridCellTypes.default; + this.rowData = null; + this.columnDefinition = null; + this.isActiveCell = false; + this.customCellView = null; + this.updateCellStyle = () => { + this.style.gridColumn = this.gridColumn; + }; + } + cellTypeChanged() { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + gridColumnChanged() { + if (this.$fastController.isConnected) { + this.updateCellStyle(); + } + } + columnDefinitionChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.addEventListener(eventFocusIn, this.handleFocusin); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.style.gridColumn = `${((_a = this.columnDefinition) === null || _a === void 0 ? void 0 : _a.gridColumn) === void 0 ? 0 : this.columnDefinition.gridColumn}`; + this.updateCellView(); + this.updateCellStyle(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener(eventFocusIn, this.handleFocusin); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.disconnectCellView(); + } + handleFocusin(e) { + if (this.isActiveCell) { + return; + } + this.isActiveCell = true; + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition !== null && this.columnDefinition.headerCellInternalFocusQueue !== true && typeof this.columnDefinition.headerCellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + default: + if (this.columnDefinition !== null && this.columnDefinition.cellInternalFocusQueue !== true && typeof this.columnDefinition.cellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + } + this.$emit("cell-focused", this); + } + handleFocusout(e) { + if (this !== document.activeElement && !this.contains(document.activeElement)) { + this.isActiveCell = false; + } + } + handleKeydown(e) { + if (e.defaultPrevented || this.columnDefinition === null || this.cellType === DataGridCellTypes.default && this.columnDefinition.cellInternalFocusQueue !== true || this.cellType === DataGridCellTypes.columnHeader && this.columnDefinition.headerCellInternalFocusQueue !== true) { + return; + } + switch (e.key) { + case keyEnter: + case keyFunction2: + if (this.contains(document.activeElement) && document.activeElement !== this) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + default: + if (this.columnDefinition.cellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + } + break; + case keyEscape: + if (this.contains(document.activeElement) && document.activeElement !== this) { + this.focus(); + e.preventDefault(); + } + break; + } + } + updateCellView() { + this.disconnectCellView(); + if (this.columnDefinition === null) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellTemplate !== void 0) { + this.customCellView = this.columnDefinition.headerCellTemplate.render(this, this); + } else { + this.customCellView = defaultHeaderCellContentsTemplate.render(this, this); + } + break; + case void 0: + case DataGridCellTypes.rowHeader: + case DataGridCellTypes.default: + if (this.columnDefinition.cellTemplate !== void 0) { + this.customCellView = this.columnDefinition.cellTemplate.render(this, this); + } else { + this.customCellView = defaultCellContentsTemplate.render(this, this); + } + break; + } + } + disconnectCellView() { + if (this.customCellView !== null) { + this.customCellView.dispose(); + this.customCellView = null; + } + } + }; + __decorate([ + attr({ attribute: "cell-type" }) + ], DataGridCell.prototype, "cellType", void 0); + __decorate([ + attr({ attribute: "grid-column" }) + ], DataGridCell.prototype, "gridColumn", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "columnDefinition", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js + function createCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="${(x) => x.isRowHeader ? "rowheader" : void 0}" + grid-column="${(x, c) => c.index + 1}" + :rowData="${(x, c) => c.parent.rowData}" + :columnDefinition="${(x) => x}" + > +`; + } + function createHeaderCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="columnheader" + grid-column="${(x, c) => c.index + 1}" + :columnDefinition="${(x) => x}" + > +`; + } + var dataGridRowTemplate; + var init_data_grid_row_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js"() { + init_esm(); + init_data_grid_cell(); + dataGridRowTemplate = (context, definition) => { + const cellItemTemplate = createCellItemTemplate(context); + const headerCellItemTemplate = createHeaderCellItemTemplate(context); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js + var dataGridCellTemplate; + var init_data_grid_cell_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js"() { + init_esm(); + dataGridCellTemplate = (context, definition) => { + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js + var init_data_grid2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js"() { + init_data_grid_template(); + init_data_grid(); + init_data_grid_row_template(); + init_data_grid_row(); + init_data_grid_cell_template(); + init_data_grid_cell(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js + var CalendarTitleTemplate; + var init_calendar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js"() { + init_esm(); + CalendarTitleTemplate = html` +
+ + ${(x) => x.dateFormatter.getMonth(x.month)} + + ${(x) => x.dateFormatter.getYear(x.year)} +
+`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js + var init_calendar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js"() { + init_calendar(); + init_calendar_template(); + init_date_formatter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js + var init_card_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.js + var init_card = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/index.js + var init_card2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/index.js"() { + init_card_template(); + init_card(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js + var checkboxTemplate; + var init_checkbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js"() { + init_esm(); + checkboxTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js + var _Checkbox, FormAssociatedCheckbox; + var init_checkbox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Checkbox = class extends FoundationElement { + }; + FormAssociatedCheckbox = class extends CheckableFormAssociated(_Checkbox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js + var Checkbox; + var init_checkbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_checkbox_form_associated(); + Checkbox = class extends FormAssociatedCheckbox { + constructor() { + super(); + this.initialValue = "on"; + this.indeterminate = false; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keySpace: + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Checkbox.prototype, "readOnly", void 0); + __decorate([ + observable + ], Checkbox.prototype, "defaultSlottedNodes", void 0); + __decorate([ + observable + ], Checkbox.prototype, "indeterminate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js + var init_checkbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js"() { + init_checkbox_template(); + init_checkbox(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js + function isListboxOption(el2) { + return isHTMLElement(el2) && (el2.getAttribute("role") === "option" || el2 instanceof HTMLOptionElement); + } + var ListboxOption, DelegatesARIAListboxOption; + var init_listbox_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + ListboxOption = class extends FoundationElement { + constructor(text, value, defaultSelected, selected) { + super(); + this.defaultSelected = false; + this.dirtySelected = false; + this.selected = this.defaultSelected; + this.dirtyValue = false; + if (text) { + this.textContent = text; + } + if (value) { + this.initialValue = value; + } + if (defaultSelected) { + this.defaultSelected = defaultSelected; + } + if (selected) { + this.selected = selected; + } + this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected); + this.proxy.disabled = this.disabled; + } + /** + * Updates the ariaChecked property when the checked property changes. + * + * @param prev - the previous checked value + * @param next - the current checked value + * + * @public + */ + checkedChanged(prev, next) { + if (typeof next === "boolean") { + this.ariaChecked = next ? "true" : "false"; + return; + } + this.ariaChecked = null; + } + /** + * Updates the proxy's text content when the default slot changes. + * @param prev - the previous content value + * @param next - the current content value + * + * @internal + */ + contentChanged(prev, next) { + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.textContent = this.textContent; + } + this.$emit("contentchange", null, { bubbles: true }); + } + defaultSelectedChanged() { + if (!this.dirtySelected) { + this.selected = this.defaultSelected; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.defaultSelected; + } + } + } + disabledChanged(prev, next) { + this.ariaDisabled = this.disabled ? "true" : "false"; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.disabled = this.disabled; + } + } + selectedAttributeChanged() { + this.defaultSelected = this.selectedAttribute; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.defaultSelected = this.defaultSelected; + } + } + selectedChanged() { + this.ariaSelected = this.selected ? "true" : "false"; + if (!this.dirtySelected) { + this.dirtySelected = true; + } + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.selected; + } + } + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + get label() { + var _a; + return (_a = this.value) !== null && _a !== void 0 ? _a : this.text; + } + get text() { + var _a, _b; + return (_b = (_a = this.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, " ").trim()) !== null && _b !== void 0 ? _b : ""; + } + set value(next) { + const newValue = `${next !== null && next !== void 0 ? next : ""}`; + this._value = newValue; + this.dirtyValue = true; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.value = newValue; + } + Observable.notify(this, "value"); + } + get value() { + var _a; + Observable.track(this, "value"); + return (_a = this._value) !== null && _a !== void 0 ? _a : this.text; + } + get form() { + return this.proxy ? this.proxy.form : null; + } + }; + __decorate([ + observable + ], ListboxOption.prototype, "checked", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "content", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "defaultSelected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxOption.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "selected", mode: "boolean" }) + ], ListboxOption.prototype, "selectedAttribute", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "selected", void 0); + __decorate([ + attr({ attribute: "value", mode: "fromView" }) + ], ListboxOption.prototype, "initialValue", void 0); + DelegatesARIAListboxOption = class { + }; + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0); + applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties); + applyMixins(ListboxOption, StartEnd, DelegatesARIAListboxOption); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js + var Listbox, DelegatesARIAListbox; + var init_listbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_listbox_option(); + init_aria_global(); + init_apply_mixins(); + Listbox = class _Listbox extends FoundationElement { + constructor() { + super(...arguments); + this._options = []; + this.selectedIndex = -1; + this.selectedOptions = []; + this.shouldSkipFocus = false; + this.typeaheadBuffer = ""; + this.typeaheadExpired = true; + this.typeaheadTimeout = -1; + } + /** + * The first selected option. + * + * @internal + */ + get firstSelectedOption() { + var _a; + return (_a = this.selectedOptions[0]) !== null && _a !== void 0 ? _a : null; + } + /** + * Returns true if there is one or more selectable option. + * + * @internal + */ + get hasSelectableOptions() { + return this.options.length > 0 && !this.options.every((o) => o.disabled); + } + /** + * The number of options. + * + * @public + */ + get length() { + var _a, _b; + return (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; + } + /** + * The list of options. + * + * @public + */ + get options() { + Observable.track(this, "options"); + return this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Flag for the typeahead timeout expiration. + * + * @deprecated use `Listbox.typeaheadExpired` + * @internal + */ + get typeAheadExpired() { + return this.typeaheadExpired; + } + set typeAheadExpired(value) { + this.typeaheadExpired = value; + } + /** + * Handle click events for listbox options. + * + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && !captured.disabled) { + this.selectedIndex = this.options.indexOf(captured); + return true; + } + } + /** + * Ensures that the provided option is focused and scrolled into view. + * + * @param optionToFocus - The option to focus + * @internal + */ + focusAndScrollOptionIntoView(optionToFocus = this.firstSelectedOption) { + if (this.contains(document.activeElement) && optionToFocus !== null) { + optionToFocus.focus(); + requestAnimationFrame(() => { + optionToFocus.scrollIntoView({ block: "nearest" }); + }); + } + } + /** + * Handles `focusin` actions for the component. When the component receives focus, + * the list of selected options is refreshed and the first selected option is scrolled + * into view. + * + * @internal + */ + focusinHandler(e) { + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Returns the options which match the current typeahead buffer. + * + * @internal + */ + getTypeaheadMatches() { + const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); + const re = new RegExp(`^${pattern}`, "gi"); + return this.options.filter((o) => o.text.trim().match(re)); + } + /** + * Determines the index of the next option which is selectable, if any. + * + * @param prev - the previous selected index + * @param next - the next index to select + * + * @internal + */ + getSelectableIndex(prev = this.selectedIndex, next) { + const direction = prev > next ? -1 : prev < next ? 1 : 0; + const potentialDirection = prev + direction; + let nextSelectableOption = null; + switch (direction) { + case -1: { + nextSelectableOption = this.options.reduceRight((nextSelectableOption2, thisOption, index2) => !nextSelectableOption2 && !thisOption.disabled && index2 < potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + case 1: { + nextSelectableOption = this.options.reduce((nextSelectableOption2, thisOption, index2) => !nextSelectableOption2 && !thisOption.disabled && index2 > potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + } + return this.options.indexOf(nextSelectableOption); + } + /** + * Handles external changes to child options. + * + * @param source - the source object + * @param propertyName - the property + * + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "selected": { + if (_Listbox.slottedOptionFilter(source)) { + this.selectedIndex = this.options.indexOf(source); + } + this.setSelectedOptions(); + break; + } + } + } + /** + * Moves focus to an option whose label matches characters typed by the user. + * Consecutive keystrokes are batched into a buffer of search text used + * to match against the set of options. If `TYPE_AHEAD_TIMEOUT_MS` passes + * between consecutive keystrokes, the search restarts. + * + * @param key - the key to be evaluated + * + * @internal + */ + handleTypeAhead(key) { + if (this.typeaheadTimeout) { + window.clearTimeout(this.typeaheadTimeout); + } + this.typeaheadTimeout = window.setTimeout(() => this.typeaheadExpired = true, _Listbox.TYPE_AHEAD_TIMEOUT_MS); + if (key.length > 1) { + return; + } + this.typeaheadBuffer = `${this.typeaheadExpired ? "" : this.typeaheadBuffer}${key}`; + } + /** + * Handles `keydown` actions for listbox navigation and typeahead. + * + * @internal + */ + keydownHandler(e) { + if (this.disabled) { + return true; + } + this.shouldSkipFocus = false; + const key = e.key; + switch (key) { + // Select the first available option + case keyHome: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectFirstOption(); + } + break; + } + // Select the next selectable option + case keyArrowDown: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectNextOption(); + } + break; + } + // Select the previous selectable option + case keyArrowUp: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectPreviousOption(); + } + break; + } + // Select the last available option + case keyEnd: { + e.preventDefault(); + this.selectLastOption(); + break; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEnter: + case keyEscape: { + return true; + } + case keySpace: { + if (this.typeaheadExpired) { + return true; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @internal + */ + mousedownHandler(e) { + this.shouldSkipFocus = !this.contains(document.activeElement); + return true; + } + /** + * Switches between single-selection and multi-selection mode. + * + * @param prev - the previous value of the `multiple` attribute + * @param next - the next value of the `multiple` attribute + * + * @internal + */ + multipleChanged(prev, next) { + this.ariaMultiSelectable = next ? "true" : null; + } + /** + * Updates the list of selected options when the `selectedIndex` changes. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + var _a; + if (!this.hasSelectableOptions) { + this.selectedIndex = -1; + return; + } + if (((_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.disabled) && typeof prev === "number") { + const selectableIndex = this.getSelectableIndex(prev, next); + const newNext = selectableIndex > -1 ? selectableIndex : prev; + this.selectedIndex = newNext; + if (next === newNext) { + this.selectedIndexChanged(next, newNext); + } + return; + } + this.setSelectedOptions(); + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + const filteredNext = next.filter(_Listbox.slottedOptionFilter); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "selected"); + o.selected = filteredNext.includes(o); + notifier.subscribe(this, "selected"); + }); + } + /** + * Moves focus to the first selectable option. + * + * @public + */ + selectFirstOption() { + var _a, _b; + if (!this.disabled) { + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((o) => !o.disabled)) !== null && _b !== void 0 ? _b : -1; + } + } + /** + * Moves focus to the last selectable option. + * + * @internal + */ + selectLastOption() { + if (!this.disabled) { + this.selectedIndex = findLastIndex(this.options, (o) => !o.disabled); + } + } + /** + * Moves focus to the next selectable option. + * + * @internal + */ + selectNextOption() { + if (!this.disabled && this.selectedIndex < this.options.length - 1) { + this.selectedIndex += 1; + } + } + /** + * Moves focus to the previous selectable option. + * + * @internal + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex > 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Updates the selected index to match the first selected option. + * + * @internal + */ + setDefaultSelectedOption() { + var _a, _b; + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((el2) => el2.defaultSelected)) !== null && _b !== void 0 ? _b : -1; + } + /** + * Sets an option as selected and gives it focus. + * + * @public + */ + setSelectedOptions() { + var _a, _b, _c; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) { + this.selectedOptions = [this.options[this.selectedIndex]]; + this.ariaActiveDescendant = (_c = (_b = this.firstSelectedOption) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : ""; + this.focusAndScrollOptionIntoView(); + } + } + /** + * Updates the list of options and resets the selected option when the slotted option content changes. + * + * @param prev - the previous list of slotted options + * @param next - the current list of slotted options + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options = next.reduce((options, item) => { + if (isListboxOption(item)) { + options.push(item); + } + return options; + }, []); + const setSize = `${this.options.length}`; + this.options.forEach((option, index2) => { + if (!option.id) { + option.id = uniqueId("option-"); + } + option.ariaPosInSet = `${index2 + 1}`; + option.ariaSetSize = setSize; + }); + if (this.$fastController.isConnected) { + this.setSelectedOptions(); + this.setDefaultSelectedOption(); + } + } + /** + * Updates the filtered list of options when the typeahead buffer changes. + * + * @param prev - the previous typeahead buffer value + * @param next - the current typeahead buffer value + * + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + if (typeaheadMatches.length) { + const selectedIndex = this.options.indexOf(typeaheadMatches[0]); + if (selectedIndex > -1) { + this.selectedIndex = selectedIndex; + } + } + this.typeaheadExpired = false; + } + } + }; + Listbox.slottedOptionFilter = (n) => isListboxOption(n) && !n.hidden; + Listbox.TYPE_AHEAD_TIMEOUT_MS = 1e3; + __decorate([ + attr({ mode: "boolean" }) + ], Listbox.prototype, "disabled", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedIndex", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "slottedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "typeaheadBuffer", void 0); + DelegatesARIAListbox = class { + }; + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaActiveDescendant", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaDisabled", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaExpanded", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaMultiSelectable", void 0); + applyMixins(DelegatesARIAListbox, ARIAGlobalStatesAndProperties); + applyMixins(Listbox, DelegatesARIAListbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js + var SelectPosition; + var init_select_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js"() { + SelectPosition = { + above: "above", + below: "below" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js + var _Combobox, FormAssociatedCombobox; + var init_combobox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js"() { + init_form_associated(); + init_listbox(); + _Combobox = class extends Listbox { + }; + FormAssociatedCombobox = class extends FormAssociated(_Combobox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js + var ComboboxAutocomplete; + var init_combobox_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js"() { + ComboboxAutocomplete = { + inline: "inline", + list: "list", + both: "both", + none: "none" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js + var Combobox, DelegatesARIACombobox; + var init_combobox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_select_options(); + init_apply_mixins(); + init_combobox_form_associated(); + init_combobox_options(); + Combobox = class extends FormAssociatedCombobox { + constructor() { + super(...arguments); + this._value = ""; + this.filteredOptions = []; + this.filter = ""; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + this.open = false; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + super.formResetCallback(); + this.setDefaultSelectedOption(); + this.updateValue(); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + get isAutocompleteInline() { + return this.autocomplete === ComboboxAutocomplete.inline || this.isAutocompleteBoth; + } + get isAutocompleteList() { + return this.autocomplete === ComboboxAutocomplete.list || this.isAutocompleteBoth; + } + get isAutocompleteBoth() { + return this.autocomplete === ComboboxAutocomplete.both; + } + /** + * Sets focus and synchronize ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged() { + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The list of options. + * + * @public + * @remarks + * Overrides `Listbox.options`. + */ + get options() { + Observable.track(this, "options"); + return this.filteredOptions.length ? this.filteredOptions : this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Updates the placeholder on the proxy element. + * @internal + */ + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c; + const prev = `${this._value}`; + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el2) => el2.text.toLowerCase() === next.toLowerCase()); + const prevSelectedValue = (_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.text; + const nextSelectedValue = (_b = this.options[selectedIndex]) === null || _b === void 0 ? void 0 : _b.text; + this.selectedIndex = prevSelectedValue !== nextSelectedValue ? selectedIndex : this.selectedIndex; + next = ((_c = this.firstSelectedOption) === null || _c === void 0 ? void 0 : _c.text) || next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + } + } + /** + * Handle opening and closing the listbox when the combobox is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (this.disabled || (captured === null || captured === void 0 ? void 0 : captured.disabled)) { + return; + } + if (this.open) { + if (e.composedPath()[0] === this.control) { + return; + } + if (captured) { + this.selectedOptions = [captured]; + this.control.value = captured.text; + this.clearSelectionRange(); + this.updateValue(true); + } + } + this.open = !this.open; + if (this.open) { + this.control.focus(); + } + return true; + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + if (this.value) { + this.initialValue = this.value; + } + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Filter available options by text value. + * + * @public + */ + filterOptions() { + if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) { + this.filter = ""; + } + const filter = this.filter.toLowerCase(); + this.filteredOptions = this._options.filter((o) => o.text.toLowerCase().startsWith(this.filter.toLowerCase())); + if (this.isAutocompleteList) { + if (!this.filteredOptions.length && !filter) { + this.filteredOptions = this._options; + } + this._options.forEach((o) => { + o.hidden = !this.filteredOptions.includes(o); + }); + } + } + /** + * Focus the control and scroll the first selected option into view. + * + * @internal + * @remarks + * Overrides: `Listbox.focusAndScrollOptionIntoView` + */ + focusAndScrollOptionIntoView() { + if (this.contains(document.activeElement)) { + this.control.focus(); + if (this.firstSelectedOption) { + requestAnimationFrame(() => { + var _a; + (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: "nearest" }); + }); + } + } + } + /** + * Handle focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + this.syncValue(); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!this.options || !this.options.includes(focusTarget)) { + this.open = false; + } + } + /** + * Handle content changes on the control input. + * + * @param e - the input event + * @internal + */ + inputHandler(e) { + this.filter = this.control.value; + this.filterOptions(); + if (!this.isAutocompleteInline) { + this.selectedIndex = this.options.map((option) => option.text).indexOf(this.control.value); + } + if (e.inputType.includes("deleteContent") || !this.filter.length) { + return true; + } + if (this.isAutocompleteList && !this.open) { + this.open = true; + } + if (this.isAutocompleteInline) { + if (this.filteredOptions.length) { + this.selectedOptions = [this.filteredOptions[0]]; + this.selectedIndex = this.options.indexOf(this.firstSelectedOption); + this.setInlineSelection(); + } else { + this.selectedIndex = -1; + } + } + return; + } + /** + * Handle keydown actions for listbox navigation. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (e.ctrlKey || e.shiftKey) { + return true; + } + switch (key) { + case "Enter": { + this.syncValue(); + if (this.isAutocompleteInline) { + this.filter = this.value; + } + this.open = false; + this.clearSelectionRange(); + break; + } + case "Escape": { + if (!this.isAutocompleteInline) { + this.selectedIndex = -1; + } + if (this.open) { + this.open = false; + break; + } + this.value = ""; + this.control.value = ""; + this.filter = ""; + this.filterOptions(); + break; + } + case "Tab": { + this.setInputToSelection(); + if (!this.open) { + return true; + } + e.preventDefault(); + this.open = false; + break; + } + case "ArrowUp": + case "ArrowDown": { + this.filterOptions(); + if (!this.open) { + this.open = true; + break; + } + if (this.filteredOptions.length > 0) { + super.keydownHandler(e); + } + if (this.isAutocompleteInline) { + this.setInlineSelection(); + } + break; + } + default: { + return true; + } + } + } + /** + * Handle keyup actions for value input and text field manipulations. + * + * @param e - the keyboard event + * @internal + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + case "ArrowRight": + case "Backspace": + case "Delete": + case "Home": + case "End": { + this.filter = this.control.value; + this.selectedIndex = -1; + this.filterOptions(); + break; + } + } + } + /** + * Ensure that the selectedIndex is within the current allowable filtered range. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + if (this.$fastController.isConnected) { + next = limit(-1, this.options.length - 1, next); + if (next !== this.selectedIndex) { + this.selectedIndex = next; + return; + } + super.selectedIndexChanged(prev, next); + } + } + /** + * Move focus to the previous selectable option. + * + * @internal + * @remarks + * Overrides `Listbox.selectPreviousOption` + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex >= 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Set the default selected options at initialization or reset. + * + * @internal + * @remarks + * Overrides `Listbox.setDefaultSelectedOption` + */ + setDefaultSelectedOption() { + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el2) => el2.getAttribute("selected") !== null || el2.selected); + this.selectedIndex = selectedIndex; + if (!this.dirtyValue && this.firstSelectedOption) { + this.value = this.firstSelectedOption.text; + } + this.setSelectedOptions(); + } + } + /** + * Focus and set the content of the control based on the first selected option. + * + * @internal + */ + setInputToSelection() { + if (this.firstSelectedOption) { + this.control.value = this.firstSelectedOption.text; + this.control.focus(); + } + } + /** + * Focus, set and select the content of the control based on the first selected option. + * + * @internal + */ + setInlineSelection() { + if (this.firstSelectedOption) { + this.setInputToSelection(); + this.control.setSelectionRange(this.filter.length, this.control.value.length, "backward"); + } + } + /** + * Determines if a value update should involve emitting a change event, then updates the value. + * + * @internal + */ + syncValue() { + var _a; + const newValue = this.selectedIndex > -1 ? (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text : this.control.value; + this.updateValue(this.value !== newValue); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @param force - direction to force the listbox to display + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * Ensure that the entire list of options is used when setting the selected property. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + * @remarks + * Overrides: `Listbox.selectedOptionsChanged` + */ + selectedOptionsChanged(prev, next) { + if (this.$fastController.isConnected) { + this._options.forEach((o) => { + o.selected = next.includes(o); + }); + } + } + /** + * Synchronize the form-associated proxy and update the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + super.slottedOptionsChanged(prev, next); + this.updateValue(); + } + /** + * Sets the value and to match the first selected option. + * + * @param shouldEmit - if true, the change event will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a; + if (this.$fastController.isConnected) { + this.value = ((_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) || this.control.value; + this.control.value = this.value; + } + if (shouldEmit) { + this.$emit("change"); + } + } + /** + * @internal + */ + clearSelectionRange() { + const controlValueLength = this.control.value.length; + this.control.setSelectionRange(controlValueLength, controlValueLength); + } + }; + __decorate([ + attr({ attribute: "autocomplete", mode: "fromView" }) + ], Combobox.prototype, "autocomplete", void 0); + __decorate([ + observable + ], Combobox.prototype, "maxHeight", void 0); + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Combobox.prototype, "open", void 0); + __decorate([ + attr + ], Combobox.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Combobox.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Combobox.prototype, "position", void 0); + DelegatesARIACombobox = class { + }; + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaAutoComplete", void 0); + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIACombobox, DelegatesARIAListbox); + applyMixins(Combobox, StartEnd, DelegatesARIACombobox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js + var init_combobox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js + var init_combobox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js"() { + init_combobox(); + init_combobox_options(); + init_combobox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js + function composedParent(element) { + const parentNode = element.parentElement; + if (parentNode) { + return parentNode; + } else { + const rootNode = element.getRootNode(); + if (rootNode.host instanceof HTMLElement) { + return rootNode.host; + } + } + return null; + } + var init_composed_parent = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js + function composedContains(reference, test) { + let current = test; + while (current !== null) { + if (current === reference) { + return true; + } + current = composedParent(current); + } + return false; + } + var init_composed_contains = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js"() { + init_composed_parent(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js + function isFastElement(element) { + return element instanceof FASTElement; + } + var defaultElement, QueuedStyleSheetTarget, ConstructableStyleSheetTarget, DocumentStyleSheetTarget, HeadStyleElementStyleSheetTarget, StyleElementStyleSheetTarget, ElementStyleSheetTarget, RootStyleSheetTarget, propertyTargetCache, propertyTargetCtor, PropertyTargetManager; + var init_custom_property_manager = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js"() { + init_tslib_es6(); + init_esm(); + defaultElement = document.createElement("div"); + QueuedStyleSheetTarget = class { + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + ConstructableStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor(source) { + super(); + const sheet = new CSSStyleSheet(); + sheet[prependToAdoptedStyleSheetsSymbol] = true; + this.target = sheet.cssRules[sheet.insertRule(":host{}")].style; + source.$fastController.addStyles(ElementStyles.create([sheet])); + } + }; + DocumentStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + const sheet = new CSSStyleSheet(); + this.target = sheet.cssRules[sheet.insertRule(":root{}")].style; + document.adoptedStyleSheets = [ + ...document.adoptedStyleSheets, + sheet + ]; + } + }; + HeadStyleElementStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + this.style = document.createElement("style"); + document.head.appendChild(this.style); + const { sheet } = this.style; + if (sheet) { + const index2 = sheet.insertRule(":root{}", sheet.cssRules.length); + this.target = sheet.cssRules[index2].style; + } + } + }; + StyleElementStyleSheetTarget = class { + constructor(target) { + this.store = /* @__PURE__ */ new Map(); + this.target = null; + const controller = target.$fastController; + this.style = document.createElement("style"); + controller.addStyles(this.style); + Observable.getNotifier(controller).subscribe(this, "isConnected"); + this.handleChange(controller, "isConnected"); + } + targetChanged() { + if (this.target !== null) { + for (const [key, value] of this.store.entries()) { + this.target.setProperty(key, value); + } + } + } + setProperty(name, value) { + this.store.set(name, value); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.setProperty(name, value); + } + }); + } + removeProperty(name) { + this.store.delete(name); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.removeProperty(name); + } + }); + } + handleChange(source, key) { + const { sheet } = this.style; + if (sheet) { + const index2 = sheet.insertRule(":host{}", sheet.cssRules.length); + this.target = sheet.cssRules[index2].style; + } else { + this.target = null; + } + } + }; + __decorate([ + observable + ], StyleElementStyleSheetTarget.prototype, "target", void 0); + ElementStyleSheetTarget = class { + constructor(source) { + this.target = source.style; + } + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + RootStyleSheetTarget = class _RootStyleSheetTarget { + setProperty(name, value) { + _RootStyleSheetTarget.properties[name] = value; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).setProperty(name, value); + } + } + removeProperty(name) { + delete _RootStyleSheetTarget.properties[name]; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).removeProperty(name); + } + } + static registerRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (!roots.has(root)) { + roots.add(root); + const target = PropertyTargetManager.getOrCreate(this.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.setProperty(key, _RootStyleSheetTarget.properties[key]); + } + } + } + static unregisterRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (roots.has(root)) { + roots.delete(root); + const target = PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.removeProperty(key); + } + } + } + /** + * Returns the document when provided the default element, + * otherwise is a no-op + * @param root - the root to normalize + */ + static normalizeRoot(root) { + return root === defaultElement ? document : root; + } + }; + RootStyleSheetTarget.roots = /* @__PURE__ */ new Set(); + RootStyleSheetTarget.properties = {}; + propertyTargetCache = /* @__PURE__ */ new WeakMap(); + propertyTargetCtor = DOM.supportsAdoptedStyleSheets ? ConstructableStyleSheetTarget : StyleElementStyleSheetTarget; + PropertyTargetManager = Object.freeze({ + getOrCreate(source) { + if (propertyTargetCache.has(source)) { + return propertyTargetCache.get(source); + } + let target; + if (source === defaultElement) { + target = new RootStyleSheetTarget(); + } else if (source instanceof Document) { + target = DOM.supportsAdoptedStyleSheets ? new DocumentStyleSheetTarget() : new HeadStyleElementStyleSheetTarget(); + } else if (isFastElement(source)) { + target = new propertyTargetCtor(source); + } else { + target = new ElementStyleSheetTarget(source); + } + propertyTargetCache.set(source, target); + return target; + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js + function create(nameOrConfig) { + return DesignTokenImpl.from(nameOrConfig); + } + var DesignTokenImpl, CustomPropertyReflector, DesignTokenBindingObserver, Store, nodeCache, childToParent, DesignTokenNode, DesignToken; + var init_design_token = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js"() { + init_tslib_es6(); + init_esm(); + init_composed_parent(); + init_composed_contains(); + init_custom_property_manager(); + init_custom_property_manager(); + DesignTokenImpl = class _DesignTokenImpl extends CSSDirective { + constructor(configuration) { + super(); + this.subscribers = /* @__PURE__ */ new WeakMap(); + this._appliedTo = /* @__PURE__ */ new Set(); + this.name = configuration.name; + if (configuration.cssCustomPropertyName !== null) { + this.cssCustomProperty = `--${configuration.cssCustomPropertyName}`; + this.cssVar = `var(${this.cssCustomProperty})`; + } + this.id = _DesignTokenImpl.uniqueId(); + _DesignTokenImpl.tokensById.set(this.id, this); + } + get appliedTo() { + return [...this._appliedTo]; + } + static from(nameOrConfig) { + return new _DesignTokenImpl({ + name: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.name, + cssCustomPropertyName: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.cssCustomPropertyName === void 0 ? nameOrConfig.name : nameOrConfig.cssCustomPropertyName + }); + } + static isCSSDesignToken(token) { + return typeof token.cssCustomProperty === "string"; + } + static isDerivedDesignTokenValue(value) { + return typeof value === "function"; + } + /** + * Gets a token by ID. Returns undefined if the token was not found. + * @param id - The ID of the token + * @returns + */ + static getTokenById(id) { + return _DesignTokenImpl.tokensById.get(id); + } + getOrCreateSubscriberSet(target = this) { + return this.subscribers.get(target) || this.subscribers.set(target, /* @__PURE__ */ new Set()) && this.subscribers.get(target); + } + createCSS() { + return this.cssVar || ""; + } + getValueFor(element) { + const value = DesignTokenNode.getOrCreate(element).get(this); + if (value !== void 0) { + return value; + } + throw new Error(`Value could not be retrieved for token named "${this.name}". Ensure the value is set for ${element} or an ancestor of ${element}.`); + } + setValueFor(element, value) { + this._appliedTo.add(element); + if (value instanceof _DesignTokenImpl) { + value = this.alias(value); + } + DesignTokenNode.getOrCreate(element).set(this, value); + return this; + } + deleteValueFor(element) { + this._appliedTo.delete(element); + if (DesignTokenNode.existsFor(element)) { + DesignTokenNode.getOrCreate(element).delete(this); + } + return this; + } + withDefault(value) { + this.setValueFor(defaultElement, value); + return this; + } + subscribe(subscriber, target) { + const subscriberSet = this.getOrCreateSubscriberSet(target); + if (target && !DesignTokenNode.existsFor(target)) { + DesignTokenNode.getOrCreate(target); + } + if (!subscriberSet.has(subscriber)) { + subscriberSet.add(subscriber); + } + } + unsubscribe(subscriber, target) { + const list = this.subscribers.get(target || this); + if (list && list.has(subscriber)) { + list.delete(subscriber); + } + } + /** + * Notifies subscribers that the value for an element has changed. + * @param element - The element to emit a notification for + */ + notify(element) { + const record = Object.freeze({ token: this, target: element }); + if (this.subscribers.has(this)) { + this.subscribers.get(this).forEach((sub) => sub.handleChange(record)); + } + if (this.subscribers.has(element)) { + this.subscribers.get(element).forEach((sub) => sub.handleChange(record)); + } + } + /** + * Alias the token to the provided token. + * @param token - the token to alias to + */ + alias(token) { + return ((target) => token.getValueFor(target)); + } + }; + DesignTokenImpl.uniqueId = /* @__PURE__ */ (() => { + let id = 0; + return () => { + id++; + return id.toString(16); + }; + })(); + DesignTokenImpl.tokensById = /* @__PURE__ */ new Map(); + CustomPropertyReflector = class { + startReflection(token, target) { + token.subscribe(this, target); + this.handleChange({ token, target }); + } + stopReflection(token, target) { + token.unsubscribe(this, target); + this.remove(token, target); + } + handleChange(record) { + const { token, target } = record; + this.add(token, target); + } + add(token, target) { + PropertyTargetManager.getOrCreate(target).setProperty(token.cssCustomProperty, this.resolveCSSValue(DesignTokenNode.getOrCreate(target).get(token))); + } + remove(token, target) { + PropertyTargetManager.getOrCreate(target).removeProperty(token.cssCustomProperty); + } + resolveCSSValue(value) { + return value && typeof value.createCSS === "function" ? value.createCSS() : value; + } + }; + DesignTokenBindingObserver = class { + constructor(source, token, node) { + this.source = source; + this.token = token; + this.node = node; + this.dependencies = /* @__PURE__ */ new Set(); + this.observer = Observable.binding(source, this, false); + this.observer.handleChange = this.observer.call; + this.handleChange(); + } + disconnect() { + this.observer.disconnect(); + } + /** + * @internal + */ + handleChange() { + try { + this.node.store.set(this.token, this.observer.observe(this.node.target, defaultExecutionContext)); + } catch (e) { + console.error(e); + } + } + }; + Store = class { + constructor() { + this.values = /* @__PURE__ */ new Map(); + } + set(token, value) { + if (this.values.get(token) !== value) { + this.values.set(token, value); + Observable.getNotifier(this).notify(token.id); + } + } + get(token) { + Observable.track(this, token.id); + return this.values.get(token); + } + delete(token) { + this.values.delete(token); + Observable.getNotifier(this).notify(token.id); + } + all() { + return this.values.entries(); + } + }; + nodeCache = /* @__PURE__ */ new WeakMap(); + childToParent = /* @__PURE__ */ new WeakMap(); + DesignTokenNode = class _DesignTokenNode { + constructor(target) { + this.target = target; + this.store = new Store(); + this.children = []; + this.assignedValues = /* @__PURE__ */ new Map(); + this.reflecting = /* @__PURE__ */ new Set(); + this.bindingObservers = /* @__PURE__ */ new Map(); + this.tokenValueChangeHandler = { + handleChange: (source, arg) => { + const token = DesignTokenImpl.getTokenById(arg); + if (token) { + token.notify(this.target); + this.updateCSSTokenReflection(source, token); + } + } + }; + nodeCache.set(target, this); + Observable.getNotifier(this.store).subscribe(this.tokenValueChangeHandler); + if (target instanceof FASTElement) { + target.$fastController.addBehaviors([this]); + } else if (target.isConnected) { + this.bind(); + } + } + /** + * Returns a DesignTokenNode for an element. + * Creates a new instance if one does not already exist for a node, + * otherwise returns the cached instance + * + * @param target - The HTML element to retrieve a DesignTokenNode for + */ + static getOrCreate(target) { + return nodeCache.get(target) || new _DesignTokenNode(target); + } + /** + * Determines if a DesignTokenNode has been created for a target + * @param target - The element to test + */ + static existsFor(target) { + return nodeCache.has(target); + } + /** + * Searches for and return the nearest parent DesignTokenNode. + * Null is returned if no node is found or the node provided is for a default element. + */ + static findParent(node) { + if (!(defaultElement === node.target)) { + let parent = composedParent(node.target); + while (parent !== null) { + if (nodeCache.has(parent)) { + return nodeCache.get(parent); + } + parent = composedParent(parent); + } + return _DesignTokenNode.getOrCreate(defaultElement); + } + return null; + } + /** + * Finds the closest node with a value explicitly assigned for a token, otherwise null. + * @param token - The token to look for + * @param start - The node to start looking for value assignment + * @returns + */ + static findClosestAssignedNode(token, start) { + let current = start; + do { + if (current.has(token)) { + return current; + } + current = current.parent ? current.parent : current.target !== defaultElement ? _DesignTokenNode.getOrCreate(defaultElement) : null; + } while (current !== null); + return null; + } + /** + * The parent DesignTokenNode, or null. + */ + get parent() { + return childToParent.get(this) || null; + } + updateCSSTokenReflection(source, token) { + if (DesignTokenImpl.isCSSDesignToken(token)) { + const parent = this.parent; + const reflecting = this.isReflecting(token); + if (parent) { + const parentValue = parent.get(token); + const sourceValue = source.get(token); + if (parentValue !== sourceValue && !reflecting) { + this.reflectToCSS(token); + } else if (parentValue === sourceValue && reflecting) { + this.stopReflectToCSS(token); + } + } else if (!reflecting) { + this.reflectToCSS(token); + } + } + } + /** + * Checks if a token has been assigned an explicit value the node. + * @param token - the token to check. + */ + has(token) { + return this.assignedValues.has(token); + } + /** + * Gets the value of a token for a node + * @param token - The token to retrieve the value for + * @returns + */ + get(token) { + const value = this.store.get(token); + if (value !== void 0) { + return value; + } + const raw = this.getRaw(token); + if (raw !== void 0) { + this.hydrate(token, raw); + return this.get(token); + } + } + /** + * Retrieves the raw assigned value of a token from the nearest assigned node. + * @param token - The token to retrieve a raw value for + * @returns + */ + getRaw(token) { + var _a; + if (this.assignedValues.has(token)) { + return this.assignedValues.get(token); + } + return (_a = _DesignTokenNode.findClosestAssignedNode(token, this)) === null || _a === void 0 ? void 0 : _a.getRaw(token); + } + /** + * Sets a token to a value for a node + * @param token - The token to set + * @param value - The value to set the token to + */ + set(token, value) { + if (DesignTokenImpl.isDerivedDesignTokenValue(this.assignedValues.get(token))) { + this.tearDownBindingObserver(token); + } + this.assignedValues.set(token, value); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + this.setupBindingObserver(token, value); + } else { + this.store.set(token, value); + } + } + /** + * Deletes a token value for the node. + * @param token - The token to delete the value for + */ + delete(token) { + this.assignedValues.delete(token); + this.tearDownBindingObserver(token); + const upstream = this.getRaw(token); + if (upstream) { + this.hydrate(token, upstream); + } else { + this.store.delete(token); + } + } + /** + * Invoked when the DesignTokenNode.target is attached to the document + */ + bind() { + const parent = _DesignTokenNode.findParent(this); + if (parent) { + parent.appendChild(this); + } + for (const key of this.assignedValues.keys()) { + key.notify(this.target); + } + } + /** + * Invoked when the DesignTokenNode.target is detached from the document + */ + unbind() { + if (this.parent) { + const parent = childToParent.get(this); + parent.removeChild(this); + } + for (const token of this.bindingObservers.keys()) { + this.tearDownBindingObserver(token); + } + } + /** + * Appends a child to a parent DesignTokenNode. + * @param child - The child to append to the node + */ + appendChild(child) { + if (child.parent) { + childToParent.get(child).removeChild(child); + } + const reParent = this.children.filter((x) => child.contains(x)); + childToParent.set(child, this); + this.children.push(child); + reParent.forEach((x) => child.appendChild(x)); + Observable.getNotifier(this.store).subscribe(child); + for (const [token, value] of this.store.all()) { + child.hydrate(token, this.bindingObservers.has(token) ? this.getRaw(token) : value); + child.updateCSSTokenReflection(child.store, token); + } + } + /** + * Removes a child from a node. + * @param child - The child to remove. + */ + removeChild(child) { + const childIndex = this.children.indexOf(child); + if (childIndex !== -1) { + this.children.splice(childIndex, 1); + } + Observable.getNotifier(this.store).unsubscribe(child); + if (child.parent !== this) { + return false; + } + const deleted = childToParent.delete(child); + for (const [token] of this.store.all()) { + child.hydrate(token, child.getRaw(token)); + child.updateCSSTokenReflection(child.store, token); + } + return deleted; + } + /** + * Tests whether a provided node is contained by + * the calling node. + * @param test - The node to test + */ + contains(test) { + return composedContains(this.target, test.target); + } + /** + * Instructs the node to reflect a design token for the provided token. + * @param token - The design token to reflect + */ + reflectToCSS(token) { + if (!this.isReflecting(token)) { + this.reflecting.add(token); + _DesignTokenNode.cssCustomPropertyReflector.startReflection(token, this.target); + } + } + /** + * Stops reflecting a DesignToken to CSS + * @param token - The design token to stop reflecting + */ + stopReflectToCSS(token) { + if (this.isReflecting(token)) { + this.reflecting.delete(token); + _DesignTokenNode.cssCustomPropertyReflector.stopReflection(token, this.target); + } + } + /** + * Determines if a token is being reflected to CSS for a node. + * @param token - The token to check for reflection + * @returns + */ + isReflecting(token) { + return this.reflecting.has(token); + } + /** + * Handle changes to upstream tokens + * @param source - The parent DesignTokenNode + * @param property - The token ID that changed + */ + handleChange(source, property) { + const token = DesignTokenImpl.getTokenById(property); + if (!token) { + return; + } + this.hydrate(token, this.getRaw(token)); + this.updateCSSTokenReflection(this.store, token); + } + /** + * Hydrates a token with a DesignTokenValue, making retrieval available. + * @param token - The token to hydrate + * @param value - The value to hydrate + */ + hydrate(token, value) { + if (!this.has(token)) { + const observer = this.bindingObservers.get(token); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + if (observer) { + if (observer.source !== value) { + this.tearDownBindingObserver(token); + this.setupBindingObserver(token, value); + } + } else { + this.setupBindingObserver(token, value); + } + } else { + if (observer) { + this.tearDownBindingObserver(token); + } + this.store.set(token, value); + } + } + } + /** + * Sets up a binding observer for a derived token value that notifies token + * subscribers on change. + * + * @param token - The token to notify when the binding updates + * @param source - The binding source + */ + setupBindingObserver(token, source) { + const binding = new DesignTokenBindingObserver(source, token, this); + this.bindingObservers.set(token, binding); + return binding; + } + /** + * Tear down a binding observer for a token. + */ + tearDownBindingObserver(token) { + if (this.bindingObservers.has(token)) { + this.bindingObservers.get(token).disconnect(); + this.bindingObservers.delete(token); + return true; + } + return false; + } + }; + DesignTokenNode.cssCustomPropertyReflector = new CustomPropertyReflector(); + __decorate([ + observable + ], DesignTokenNode.prototype, "children", void 0); + DesignToken = Object.freeze({ + create, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been connected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * 3. The HTMLElement is not connected to the document when token values are set. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyConnection(element) { + if (!element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).bind(); + return true; + }, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been disconnected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyDisconnection(element) { + if (element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).unbind(); + return true; + }, + /** + * Registers and element or document as a DesignToken root. + * {@link CSSDesignToken | CSSDesignTokens} with default values assigned via + * {@link (DesignToken:interface).withDefault} will emit CSS custom properties to all + * registered roots. + * @param target - The root to register + */ + registerRoot(target = defaultElement) { + RootStyleSheetTarget.registerRoot(target); + }, + /** + * Unregister an element or document as a DesignToken root. + * @param target - The root to deregister + */ + unregisterRoot(target = defaultElement) { + RootStyleSheetTarget.unregisterRoot(target); + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js + function extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback) { + if (typeof params === "string") { + return { + name: params, + type: elementDefinitionType, + callback: elementDefinitionCallback + }; + } else { + return params; + } + } + var ElementDisambiguation, elementTypesByTag, elementTagsByType, rootDesignSystem, designSystemKey, DesignSystem, DefaultDesignSystem, ElementDefinitionEntry; + var init_design_system = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js"() { + init_esm(); + init_foundation_element(); + init_di(); + init_design_token(); + init_component_presentation(); + ElementDisambiguation = Object.freeze({ + /** + * Skip defining the element but still call the provided callback passed + * to DesignSystemRegistrationContext.tryDefineElement + */ + definitionCallbackOnly: null, + /** + * Ignore the duplicate element entirely. + */ + ignoreDuplicate: /* @__PURE__ */ Symbol() + }); + elementTypesByTag = /* @__PURE__ */ new Map(); + elementTagsByType = /* @__PURE__ */ new Map(); + rootDesignSystem = null; + designSystemKey = DI.createInterface((x) => x.cachedCallback((handler) => { + if (rootDesignSystem === null) { + rootDesignSystem = new DefaultDesignSystem(null, handler); + } + return rootDesignSystem; + })); + DesignSystem = Object.freeze({ + /** + * Returns the HTML element name that the type is defined as. + * @param type - The type to lookup. + * @public + */ + tagFor(type) { + return elementTagsByType.get(type); + }, + /** + * Searches the DOM hierarchy for the design system that is responsible + * for the provided element. + * @param element - The element to locate the design system for. + * @returns The located design system. + * @public + */ + responsibleFor(element) { + const owned = element.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.findResponsibleContainer(element); + return container.get(designSystemKey); + }, + /** + * Gets the DesignSystem if one is explicitly defined on the provided element; + * otherwise creates a design system defined directly on the element. + * @param element - The element to get or create a design system for. + * @returns The design system. + * @public + */ + getOrCreate(node) { + if (!node) { + if (rootDesignSystem === null) { + rootDesignSystem = DI.getOrCreateDOMContainer().get(designSystemKey); + } + return rootDesignSystem; + } + const owned = node.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.getOrCreateDOMContainer(node); + if (container.has(designSystemKey, false)) { + return container.get(designSystemKey); + } else { + const system = new DefaultDesignSystem(node, container); + container.register(Registration.instance(designSystemKey, system)); + return system; + } + } + }); + DefaultDesignSystem = class { + constructor(owner, container) { + this.owner = owner; + this.container = container; + this.designTokensInitialized = false; + this.prefix = "fast"; + this.shadowRootMode = void 0; + this.disambiguate = () => ElementDisambiguation.definitionCallbackOnly; + if (owner !== null) { + owner.$$designSystem$$ = this; + } + } + withPrefix(prefix) { + this.prefix = prefix; + return this; + } + withShadowRootMode(mode) { + this.shadowRootMode = mode; + return this; + } + withElementDisambiguation(callback2) { + this.disambiguate = callback2; + return this; + } + withDesignTokenRoot(root) { + this.designTokenRoot = root; + return this; + } + register(...registrations) { + const container = this.container; + const elementDefinitionEntries = []; + const disambiguate = this.disambiguate; + const shadowRootMode = this.shadowRootMode; + const context = { + elementPrefix: this.prefix, + tryDefineElement(params, elementDefinitionType, elementDefinitionCallback) { + const extractedParams = extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback); + const { name, callback: callback2, baseClass } = extractedParams; + let { type } = extractedParams; + let elementName = name; + let typeFoundByName = elementTypesByTag.get(elementName); + let needsDefine = true; + while (typeFoundByName) { + const result = disambiguate(elementName, type, typeFoundByName); + switch (result) { + case ElementDisambiguation.ignoreDuplicate: + return; + case ElementDisambiguation.definitionCallbackOnly: + needsDefine = false; + typeFoundByName = void 0; + break; + default: + elementName = result; + typeFoundByName = elementTypesByTag.get(elementName); + break; + } + } + if (needsDefine) { + if (elementTagsByType.has(type) || type === FoundationElement) { + type = class extends type { + }; + } + elementTypesByTag.set(elementName, type); + elementTagsByType.set(type, elementName); + if (baseClass) { + elementTagsByType.set(baseClass, elementName); + } + } + elementDefinitionEntries.push(new ElementDefinitionEntry(container, elementName, type, shadowRootMode, callback2, needsDefine)); + } + }; + if (!this.designTokensInitialized) { + this.designTokensInitialized = true; + if (this.designTokenRoot !== null) { + DesignToken.registerRoot(this.designTokenRoot); + } + } + container.registerWithContext(context, ...registrations); + for (const entry of elementDefinitionEntries) { + entry.callback(entry); + if (entry.willDefine && entry.definition !== null) { + entry.definition.define(); + } + } + return this; + } + }; + ElementDefinitionEntry = class { + constructor(container, name, type, shadowRootMode, callback2, willDefine) { + this.container = container; + this.name = name; + this.type = type; + this.shadowRootMode = shadowRootMode; + this.callback = callback2; + this.willDefine = willDefine; + this.definition = null; + } + definePresentation(presentation) { + ComponentPresentation.define(this.name, presentation, this.container); + } + defineElement(definition) { + this.definition = new FASTElementDefinition(this.type, Object.assign(Object.assign({}, definition), { name: this.name })); + } + tagFor(type) { + return DesignSystem.tagFor(type); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js + var init_registration_context = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js + var init_design_system2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js"() { + init_design_system(); + init_component_presentation(); + init_registration_context(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/index.js + var init_di2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/index.js"() { + init_di(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js + var init_dialog_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js"() { + } + }); + + // node_modules/tabbable/dist/index.esm.js + var candidateSelectors, candidateSelector, NoElement, matches, getRootNode, getTabindex, isInput, isHiddenInput, isDetailsWithSummary, getCheckedRadio, isTabbableRadio, isRadio, isNonTabbableRadio, isZeroArea, isHidden, isDisabledFromFieldset, isNodeMatchingSelectorFocusable, isNodeMatchingSelectorTabbable, isTabbable, focusableCandidateSelector, isFocusable; + var init_index_esm = __esm({ + "node_modules/tabbable/dist/index.esm.js"() { + candidateSelectors = ["input", "select", "textarea", "a[href]", "button", "[tabindex]:not(slot)", "audio[controls]", "video[controls]", '[contenteditable]:not([contenteditable="false"])', "details>summary:first-of-type", "details"]; + candidateSelector = /* @__PURE__ */ candidateSelectors.join(","); + NoElement = typeof Element === "undefined"; + matches = NoElement ? function() { + } : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; + getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) { + return element.getRootNode(); + } : function(element) { + return element.ownerDocument; + }; + getTabindex = function getTabindex2(node, isScope) { + if (node.tabIndex < 0) { + if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute("tabindex"), 10))) { + return 0; + } + } + return node.tabIndex; + }; + isInput = function isInput2(node) { + return node.tagName === "INPUT"; + }; + isHiddenInput = function isHiddenInput2(node) { + return isInput(node) && node.type === "hidden"; + }; + isDetailsWithSummary = function isDetailsWithSummary2(node) { + var r = node.tagName === "DETAILS" && Array.prototype.slice.apply(node.children).some(function(child) { + return child.tagName === "SUMMARY"; + }); + return r; + }; + getCheckedRadio = function getCheckedRadio2(nodes, form) { + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].checked && nodes[i].form === form) { + return nodes[i]; + } + } + }; + isTabbableRadio = function isTabbableRadio2(node) { + if (!node.name) { + return true; + } + var radioScope = node.form || getRootNode(node); + var queryRadios = function queryRadios2(name) { + return radioScope.querySelectorAll('input[type="radio"][name="' + name + '"]'); + }; + var radioSet; + if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && typeof window.CSS.escape === "function") { + radioSet = queryRadios(window.CSS.escape(node.name)); + } else { + try { + radioSet = queryRadios(node.name); + } catch (err) { + console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", err.message); + return false; + } + } + var checked = getCheckedRadio(radioSet, node.form); + return !checked || checked === node; + }; + isRadio = function isRadio2(node) { + return isInput(node) && node.type === "radio"; + }; + isNonTabbableRadio = function isNonTabbableRadio2(node) { + return isRadio(node) && !isTabbableRadio(node); + }; + isZeroArea = function isZeroArea2(node) { + var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height; + return width === 0 && height === 0; + }; + isHidden = function isHidden2(node, _ref) { + var displayCheck = _ref.displayCheck, getShadowRoot2 = _ref.getShadowRoot; + if (getComputedStyle(node).visibility === "hidden") { + return true; + } + var isDirectSummary = matches.call(node, "details>summary:first-of-type"); + var nodeUnderDetails = isDirectSummary ? node.parentElement : node; + if (matches.call(nodeUnderDetails, "details:not([open]) *")) { + return true; + } + var nodeRootHost = getRootNode(node).host; + var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node); + if (!displayCheck || displayCheck === "full") { + if (typeof getShadowRoot2 === "function") { + var originalNode = node; + while (node) { + var parentElement = node.parentElement; + var rootNode = getRootNode(node); + if (parentElement && !parentElement.shadowRoot && getShadowRoot2(parentElement) === true) { + return isZeroArea(node); + } else if (node.assignedSlot) { + node = node.assignedSlot; + } else if (!parentElement && rootNode !== node.ownerDocument) { + node = rootNode.host; + } else { + node = parentElement; + } + } + node = originalNode; + } + if (nodeIsAttached) { + return !node.getClientRects().length; + } + } else if (displayCheck === "non-zero-area") { + return isZeroArea(node); + } + return false; + }; + isDisabledFromFieldset = function isDisabledFromFieldset2(node) { + if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) { + var parentNode = node.parentElement; + while (parentNode) { + if (parentNode.tagName === "FIELDSET" && parentNode.disabled) { + for (var i = 0; i < parentNode.children.length; i++) { + var child = parentNode.children.item(i); + if (child.tagName === "LEGEND") { + return matches.call(parentNode, "fieldset[disabled] *") ? true : !child.contains(node); + } + } + return true; + } + parentNode = parentNode.parentElement; + } + } + return false; + }; + isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) { + if (node.disabled || isHiddenInput(node) || isHidden(node, options) || // For a details element with a summary, the summary element gets the focus + isDetailsWithSummary(node) || isDisabledFromFieldset(node)) { + return false; + } + return true; + }; + isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) { + if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) { + return false; + } + return true; + }; + isTabbable = function isTabbable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, candidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorTabbable(options, node); + }; + focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat("iframe").join(","); + isFocusable = function isFocusable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, focusableCandidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorFocusable(options, node); + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js + var Dialog; + var init_dialog = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + Dialog = class _Dialog extends FoundationElement { + constructor() { + super(...arguments); + this.modal = true; + this.hidden = false; + this.trapFocus = true; + this.trapFocusChanged = () => { + if (this.$fastController.isConnected) { + this.updateTrapFocus(); + } + }; + this.isTrappingFocus = false; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && !this.hidden) { + switch (e.key) { + case keyEscape: + this.dismiss(); + e.preventDefault(); + break; + case keyTab: + this.handleTabKeyDown(e); + break; + } + } + }; + this.handleDocumentFocus = (e) => { + if (!e.defaultPrevented && this.shouldForceFocus(e.target)) { + this.focusFirstElement(); + e.preventDefault(); + } + }; + this.handleTabKeyDown = (e) => { + if (!this.trapFocus || this.hidden) { + return; + } + const bounds = this.getTabQueueBounds(); + if (bounds.length === 0) { + return; + } + if (bounds.length === 1) { + bounds[0].focus(); + e.preventDefault(); + return; + } + if (e.shiftKey && e.target === bounds[0]) { + bounds[bounds.length - 1].focus(); + e.preventDefault(); + } else if (!e.shiftKey && e.target === bounds[bounds.length - 1]) { + bounds[0].focus(); + e.preventDefault(); + } + return; + }; + this.getTabQueueBounds = () => { + const bounds = []; + return _Dialog.reduceTabbableItems(bounds, this); + }; + this.focusFirstElement = () => { + const bounds = this.getTabQueueBounds(); + if (bounds.length > 0) { + bounds[0].focus(); + } else { + if (this.dialog instanceof HTMLElement) { + this.dialog.focus(); + } + } + }; + this.shouldForceFocus = (currentFocusElement) => { + return this.isTrappingFocus && !this.contains(currentFocusElement); + }; + this.shouldTrapFocus = () => { + return this.trapFocus && !this.hidden; + }; + this.updateTrapFocus = (shouldTrapFocusOverride) => { + const shouldTrapFocus = shouldTrapFocusOverride === void 0 ? this.shouldTrapFocus() : shouldTrapFocusOverride; + if (shouldTrapFocus && !this.isTrappingFocus) { + this.isTrappingFocus = true; + document.addEventListener("focusin", this.handleDocumentFocus); + DOM.queueUpdate(() => { + if (this.shouldForceFocus(document.activeElement)) { + this.focusFirstElement(); + } + }); + } else if (!shouldTrapFocus && this.isTrappingFocus) { + this.isTrappingFocus = false; + document.removeEventListener("focusin", this.handleDocumentFocus); + } + }; + } + /** + * @internal + */ + dismiss() { + this.$emit("dismiss"); + this.$emit("cancel"); + } + /** + * The method to show the dialog. + * + * @public + */ + show() { + this.hidden = false; + } + /** + * The method to hide the dialog. + * + * @public + */ + hide() { + this.hidden = true; + this.$emit("close"); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + document.addEventListener("keydown", this.handleDocumentKeydown); + this.notifier = Observable.getNotifier(this); + this.notifier.subscribe(this, "hidden"); + this.updateTrapFocus(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.updateTrapFocus(false); + this.notifier.unsubscribe(this, "hidden"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "hidden": + this.updateTrapFocus(); + break; + default: + break; + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceTabbableItems(elements3, element) { + if (element.getAttribute("tabindex") === "-1") { + return elements3; + } + if (isTabbable(element) || _Dialog.isFocusableFastElement(element) && _Dialog.hasTabbableShadow(element)) { + elements3.push(element); + return elements3; + } + if (element.childElementCount) { + return elements3.concat(Array.from(element.children).reduce(_Dialog.reduceTabbableItems, [])); + } + return elements3; + } + /** + * Test if element is focusable fast element + * + * @param element - The element to check + * + * @internal + */ + static isFocusableFastElement(element) { + var _a, _b; + return !!((_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus); + } + /** + * Test if the element has a focusable shadow + * + * @param element - The element to check + * + * @internal + */ + static hasTabbableShadow(element) { + var _a, _b; + return Array.from((_b = (_a = element.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll("*")) !== null && _b !== void 0 ? _b : []).some((x) => { + return isTabbable(x); + }); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "modal", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "hidden", void 0); + __decorate([ + attr({ attribute: "trap-focus", mode: "boolean" }) + ], Dialog.prototype, "trapFocus", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], Dialog.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], Dialog.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], Dialog.prototype, "ariaLabel", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js + var init_dialog2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js"() { + init_dialog_template(); + init_dialog(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js + var init_disclosure_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js + var Disclosure; + var init_disclosure = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Disclosure = class extends FoundationElement { + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.setup(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.details.removeEventListener("toggle", this.onToggle); + } + /** + * Show extra content. + */ + show() { + this.details.open = true; + } + /** + * Hide extra content. + */ + hide() { + this.details.open = false; + } + /** + * Toggle the current(expanded/collapsed) state. + */ + toggle() { + this.details.open = !this.details.open; + } + /** + * Register listener and set default disclosure mode + */ + setup() { + this.onToggle = this.onToggle.bind(this); + this.details.addEventListener("toggle", this.onToggle); + if (this.expanded) { + this.show(); + } + } + /** + * Update the aria attr and fire `toggle` event + */ + onToggle() { + this.expanded = this.details.open; + this.$emit("toggle"); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Disclosure.prototype, "expanded", void 0); + __decorate([ + attr + ], Disclosure.prototype, "title", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js + var init_disclosure2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js"() { + init_disclosure_template(); + init_disclosure(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js + var dividerTemplate; + var init_divider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js"() { + init_esm(); + dividerTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js + var DividerRole; + var init_divider_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js"() { + DividerRole = { + /** + * The divider semantically separates content + */ + separator: "separator", + /** + * The divider has no semantic value and is for visual presentation only. + */ + presentation: "presentation" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js + var Divider; + var init_divider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_divider_options(); + Divider = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = DividerRole.separator; + this.orientation = Orientation.horizontal; + } + }; + __decorate([ + attr + ], Divider.prototype, "role", void 0); + __decorate([ + attr + ], Divider.prototype, "orientation", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js + var init_divider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js"() { + init_divider_template(); + init_divider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js + var FlipperDirection; + var init_flipper_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js"() { + FlipperDirection = { + next: "next", + previous: "previous" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js + var init_flipper_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js + var Flipper; + var init_flipper = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_flipper_options(); + Flipper = class extends FoundationElement { + constructor() { + super(...arguments); + this.hiddenFromAT = true; + this.direction = FlipperDirection.next; + } + /** + * Simulate a click event when the flipper has focus and the user hits enter or space keys + * Blur focus if the user hits escape key + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + if (!this.hiddenFromAT) { + const key = e.key; + if (key === "Enter" || key === "Space") { + this.$emit("click", e); + } + if (key === "Escape") { + this.blur(); + } + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Flipper.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "aria-hidden", converter: booleanConverter }) + ], Flipper.prototype, "hiddenFromAT", void 0); + __decorate([ + attr + ], Flipper.prototype, "direction", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js + var init_flipper2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js"() { + init_flipper_template(); + init_flipper(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js + var init_form_associated2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js"() { + init_form_associated(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js + var init_foundation_element2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js"() { + init_foundation_element(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js + var listboxOptionTemplate; + var init_listbox_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js"() { + init_esm(); + init_start_end(); + listboxOptionTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js + var init_listbox_option2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js"() { + init_listbox_option(); + init_listbox_option_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js + var ListboxElement; + var init_listbox_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + ListboxElement = class extends Listbox { + constructor() { + super(...arguments); + this.activeIndex = -1; + this.rangeStartIndex = -1; + } + /** + * Returns the last checked option. + * + * @internal + */ + get activeOption() { + return this.options[this.activeIndex]; + } + /** + * Returns the list of checked options. + * + * @internal + */ + get checkedOptions() { + var _a; + return (_a = this.options) === null || _a === void 0 ? void 0 : _a.filter((o) => o.checked); + } + /** + * Returns the index of the first selected option. + * + * @internal + */ + get firstSelectedOptionIndex() { + return this.options.indexOf(this.firstSelectedOption); + } + /** + * Updates the `ariaActiveDescendant` property when the active index changes. + * + * @param prev - the previous active index + * @param next - the next active index + * + * @internal + */ + activeIndexChanged(prev, next) { + var _a, _b; + this.ariaActiveDescendant = (_b = (_a = this.options[next]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ""; + this.focusAndScrollOptionIntoView(); + } + /** + * Toggles the checked state for the currently active option. + * + * @remarks + * Multiple-selection mode only. + * + * @internal + */ + checkActiveIndex() { + if (!this.multiple) { + return; + } + const activeItem = this.activeOption; + if (activeItem) { + activeItem.checked = true; + } + } + /** + * Sets the active index to the first option and marks it as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkFirstOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex + 1; + } + this.options.forEach((o, i) => { + o.checked = inRange2(i, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and sets the matching option as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkLastOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange2(i, this.rangeStartIndex, this.options.length); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = this.options.length - 1; + this.checkActiveIndex(); + } + /** + * @override + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("focusout", this.focusoutHandler); + } + /** + * @override + * @internal + */ + disconnectedCallback() { + this.removeEventListener("focusout", this.focusoutHandler); + super.disconnectedCallback(); + } + /** + * Increments the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkNextOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange2(i, this.rangeStartIndex, this.activeIndex + 1); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex += this.activeIndex < this.options.length - 1 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkPreviousOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + if (this.checkedOptions.length === 1) { + this.rangeStartIndex += 1; + } + this.options.forEach((o, i) => { + o.checked = inRange2(i, this.activeIndex, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex -= this.activeIndex > 0 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Handles click events for listbox options. + * + * @param e - the event object + * + * @override + * @internal + */ + clickHandler(e) { + var _a; + if (!this.multiple) { + return super.clickHandler(e); + } + const captured = (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest(`[role=option]`); + if (!captured || captured.disabled) { + return; + } + this.uncheckAllOptions(); + this.activeIndex = this.options.indexOf(captured); + this.checkActiveIndex(); + this.toggleSelectedForAllCheckedOptions(); + return true; + } + /** + * @override + * @internal + */ + focusAndScrollOptionIntoView() { + super.focusAndScrollOptionIntoView(this.activeOption); + } + /** + * In multiple-selection mode: + * If any options are selected, the first selected option is checked when + * the listbox receives focus. If no options are selected, the first + * selectable option is checked. + * + * @override + * @internal + */ + focusinHandler(e) { + if (!this.multiple) { + return super.focusinHandler(e); + } + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.uncheckAllOptions(); + if (this.activeIndex === -1) { + this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0; + } + this.checkActiveIndex(); + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Unchecks all options when the listbox loses focus. + * + * @internal + */ + focusoutHandler(e) { + if (this.multiple) { + this.uncheckAllOptions(); + } + } + /** + * Handles keydown actions for listbox navigation and typeahead + * + * @override + * @internal + */ + keydownHandler(e) { + if (!this.multiple) { + return super.keydownHandler(e); + } + if (this.disabled) { + return true; + } + const { key, shiftKey } = e; + this.shouldSkipFocus = false; + switch (key) { + // Select the first available option + case keyHome: { + this.checkFirstOption(shiftKey); + return; + } + // Select the next selectable option + case keyArrowDown: { + this.checkNextOption(shiftKey); + return; + } + // Select the previous selectable option + case keyArrowUp: { + this.checkPreviousOption(shiftKey); + return; + } + // Select the last available option + case keyEnd: { + this.checkLastOption(shiftKey); + return; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEscape: { + this.uncheckAllOptions(); + this.checkActiveIndex(); + return true; + } + case keySpace: { + e.preventDefault(); + if (this.typeAheadExpired) { + this.toggleSelectedForAllCheckedOptions(); + return; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @override + * @internal + */ + mousedownHandler(e) { + if (e.offsetX >= 0 && e.offsetX <= this.scrollWidth) { + return super.mousedownHandler(e); + } + } + /** + * Switches between single-selection and multi-selection mode. + * + * @internal + */ + multipleChanged(prev, next) { + var _a; + this.ariaMultiSelectable = next ? "true" : null; + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + o.checked = next ? false : void 0; + }); + this.setSelectedOptions(); + } + /** + * Sets an option as selected and gives it focus. + * + * @override + * @public + */ + setSelectedOptions() { + if (!this.multiple) { + super.setSelectedOptions(); + return; + } + if (this.$fastController.isConnected && this.options) { + this.selectedOptions = this.options.filter((o) => o.selected); + this.focusAndScrollOptionIntoView(); + } + } + /** + * Ensures the size is a positive integer when the property is updated. + * + * @param prev - the previous size value + * @param next - the current size value + * + * @internal + */ + sizeChanged(prev, next) { + var _a; + const size = Math.max(0, parseInt((_a = next === null || next === void 0 ? void 0 : next.toFixed()) !== null && _a !== void 0 ? _a : "", 10)); + if (size !== next) { + DOM.queueUpdate(() => { + this.size = size; + }); + } + } + /** + * Toggles the selected state of the provided options. If any provided items + * are in an unselected state, all items are set to selected. If every + * provided item is selected, they are all unselected. + * + * @internal + */ + toggleSelectedForAllCheckedOptions() { + const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled); + const force = !enabledCheckedOptions.every((o) => o.selected); + enabledCheckedOptions.forEach((o) => o.selected = force); + this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]); + this.setSelectedOptions(); + } + /** + * @override + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (!this.multiple) { + super.typeaheadBufferChanged(prev, next); + return; + } + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + const activeIndex = this.options.indexOf(typeaheadMatches[0]); + if (activeIndex > -1) { + this.activeIndex = activeIndex; + this.uncheckAllOptions(); + this.checkActiveIndex(); + } + this.typeAheadExpired = false; + } + } + /** + * Unchecks all options. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - reset the rangeStartIndex + * + * @internal + */ + uncheckAllOptions(preserveChecked = false) { + this.options.forEach((o) => o.checked = this.multiple ? false : void 0); + if (!preserveChecked) { + this.rangeStartIndex = -1; + } + } + }; + __decorate([ + observable + ], ListboxElement.prototype, "activeIndex", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxElement.prototype, "multiple", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], ListboxElement.prototype, "size", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js + var init_listbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js + var init_listbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js"() { + init_listbox(); + init_listbox_element(); + init_listbox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js + var PickerMenu; + var init_picker_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js"() { + init_tslib_es6(); + init_dist2(); + init_esm(); + init_foundation_element(); + PickerMenu = class extends FoundationElement { + constructor() { + super(...arguments); + this.optionElements = []; + } + menuElementsChanged() { + this.updateOptions(); + } + headerElementsChanged() { + this.updateOptions(); + } + footerElementsChanged() { + this.updateOptions(); + } + updateOptions() { + this.optionElements.splice(0, this.optionElements.length); + this.addSlottedListItems(this.headerElements); + this.addSlottedListItems(this.menuElements); + this.addSlottedListItems(this.footerElements); + this.$emit("optionsupdated", { bubbles: false }); + } + addSlottedListItems(slotChildren) { + if (slotChildren === void 0) { + return; + } + slotChildren.forEach((child) => { + if (child.nodeType === 1 && child.getAttribute("role") === "listitem") { + child.id = child.id || uniqueId("option-"); + this.optionElements.push(child); + } + }); + } + }; + __decorate([ + observable + ], PickerMenu.prototype, "menuElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "headerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "footerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "suggestionsAvailableText", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js + var defaultContentsTemplate, PickerMenuOption; + var init_picker_menu_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + defaultContentsTemplate = html` + +`; + PickerMenuOption = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.disconnectView(); + } + handleClick(e) { + if (e.defaultPrevented) { + return false; + } + this.handleInvoked(); + return false; + } + handleInvoked() { + this.$emit("pickeroptioninvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerMenuOption.prototype, "value", void 0); + __decorate([ + observable + ], PickerMenuOption.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js + var init_picker_list = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js + var defaultContentsTemplate2, PickerListItem; + var init_picker_list_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + defaultContentsTemplate2 = html` + +`; + PickerListItem = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + this.disconnectView(); + super.disconnectedCallback(); + } + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + if (e.key === keyEnter) { + this.handleInvoke(); + return false; + } + return true; + } + handleClick(e) { + if (!e.defaultPrevented) { + this.handleInvoke(); + } + return false; + } + handleInvoke() { + this.$emit("pickeriteminvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate2.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerListItem.prototype, "value", void 0); + __decorate([ + observable + ], PickerListItem.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js + var init_picker_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js + var _Picker, FormAssociatedPicker; + var init_picker_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Picker = class extends FoundationElement { + }; + FormAssociatedPicker = class extends FormAssociated(_Picker) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js + var pickerInputTemplate, Picker; + var init_picker = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_anchored_region2(); + init_picker_menu_option(); + init_picker_list_item(); + init_picker_form_associated(); + pickerInputTemplate = html` + +`; + Picker = class extends FormAssociatedPicker { + constructor() { + super(...arguments); + this.selection = ""; + this.filterSelected = true; + this.filterQuery = true; + this.noSuggestionsText = "No suggestions available"; + this.suggestionsAvailableText = "Suggestions available"; + this.loadingText = "Loading suggestions"; + this.menuPlacement = "bottom-fill"; + this.showLoading = false; + this.optionsList = []; + this.filteredOptionsList = []; + this.flyoutOpen = false; + this.menuFocusIndex = -1; + this.showNoOptions = false; + this.selectedItems = []; + this.inputElementView = null; + this.handleTextInput = (e) => { + this.query = this.inputElement.value; + }; + this.handleInputClick = (e) => { + e.preventDefault(); + this.toggleFlyout(true); + }; + this.setRegionProps = () => { + if (!this.flyoutOpen) { + return; + } + if (this.region === null || this.region === void 0) { + DOM.queueUpdate(this.setRegionProps); + return; + } + this.region.anchorElement = this.inputElement; + }; + this.configLookup = { + top: FlyoutPosTop, + bottom: FlyoutPosBottom, + tallest: FlyoutPosTallest, + "top-fill": FlyoutPosTopFill, + "bottom-fill": FlyoutPosBottomFill, + "tallest-fill": FlyoutPosTallestFill + }; + } + selectionChanged() { + if (this.$fastController.isConnected) { + this.handleSelectionChange(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.value = this.selection; + this.validate(); + } + } + } + optionsChanged() { + this.optionsList = this.options.split(",").map((opt) => opt.trim()).filter((opt) => opt !== ""); + } + menuPlacementChanged() { + if (this.$fastController.isConnected) { + this.updateMenuConfig(); + } + } + showLoadingChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + listItemTemplateChanged() { + this.updateListItemTemplate(); + } + defaultListItemTemplateChanged() { + this.updateListItemTemplate(); + } + menuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + defaultMenuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + optionsListChanged() { + this.updateFilteredOptions(); + } + queryChanged() { + if (this.$fastController.isConnected) { + if (this.inputElement.value !== this.query) { + this.inputElement.value = this.query; + } + this.updateFilteredOptions(); + this.$emit("querychange", { bubbles: false }); + } + } + filteredOptionsListChanged() { + if (this.$fastController.isConnected) { + this.showNoOptions = this.filteredOptionsList.length === 0 && this.menuElement.querySelectorAll('[role="listitem"]').length === 0; + this.setFocusedOption(this.showNoOptions ? -1 : 0); + } + } + flyoutOpenChanged() { + if (this.flyoutOpen) { + DOM.queueUpdate(this.setRegionProps); + this.$emit("menuopening", { bubbles: false }); + } else { + this.$emit("menuclosing", { bubbles: false }); + } + } + showNoOptionsChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.listElement = document.createElement(this.selectedListTag); + this.appendChild(this.listElement); + this.itemsPlaceholderElement = document.createComment(""); + this.listElement.append(this.itemsPlaceholderElement); + this.inputElementView = pickerInputTemplate.render(this, this.listElement); + const match = this.menuTag.toUpperCase(); + this.menuElement = Array.from(this.children).find((element) => { + return element.tagName === match; + }); + if (this.menuElement === void 0) { + this.menuElement = document.createElement(this.menuTag); + this.appendChild(this.menuElement); + } + if (this.menuElement.id === "") { + this.menuElement.id = uniqueId("listbox-"); + } + this.menuId = this.menuElement.id; + this.optionsPlaceholder = document.createComment(""); + this.menuElement.append(this.optionsPlaceholder); + this.updateMenuConfig(); + DOM.queueUpdate(() => this.initialize()); + } + disconnectedCallback() { + super.disconnectedCallback(); + this.toggleFlyout(false); + this.inputElement.removeEventListener("input", this.handleTextInput); + this.inputElement.removeEventListener("click", this.handleInputClick); + if (this.inputElementView !== null) { + this.inputElementView.dispose(); + this.inputElementView = null; + } + } + /** + * Move focus to the input element + * @public + */ + focus() { + this.inputElement.focus(); + } + /** + * Initialize the component. This is delayed a frame to ensure children are connected as well. + */ + initialize() { + this.updateListItemTemplate(); + this.updateOptionTemplate(); + this.itemsRepeatBehavior = new RepeatDirective((x) => x.selectedItems, (x) => x.activeListItemTemplate, { positioning: true }).createBehavior(this.itemsPlaceholderElement); + this.inputElement.addEventListener("input", this.handleTextInput); + this.inputElement.addEventListener("click", this.handleInputClick); + this.$fastController.addBehaviors([this.itemsRepeatBehavior]); + this.menuElement.suggestionsAvailableText = this.suggestionsAvailableText; + this.menuElement.addEventListener("optionsupdated", this.handleMenuOptionsUpdated); + this.optionsRepeatBehavior = new RepeatDirective((x) => x.filteredOptionsList, (x) => x.activeMenuOptionTemplate, { positioning: true }).createBehavior(this.optionsPlaceholder); + this.$fastController.addBehaviors([this.optionsRepeatBehavior]); + this.handleSelectionChange(); + } + /** + * Toggles the menu flyout + */ + toggleFlyout(open) { + if (this.flyoutOpen === open) { + return; + } + if (open && document.activeElement === this.inputElement) { + this.flyoutOpen = open; + DOM.queueUpdate(() => { + if (this.menuElement !== void 0) { + this.setFocusedOption(0); + } else { + this.disableMenu(); + } + }); + return; + } + this.flyoutOpen = false; + this.disableMenu(); + return; + } + /** + * Handle the menu options updated event from the child menu + */ + handleMenuOptionsUpdated(e) { + e.preventDefault(); + if (this.flyoutOpen) { + this.setFocusedOption(0); + } + } + /** + * Handle key down events. + */ + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + // TODO: what should "home" and "end" keys do, exactly? + // + // case keyHome: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.setFocusedOption(0); + // } + // } + // return false; + // } + // case keyEnd: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.toggleFlyout(true); + // this.setFocusedOption(this.menuElement.optionElements.length - 1); + // } + // } + // return false; + // } + case keyArrowDown: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const nextFocusOptionIndex = this.flyoutOpen ? Math.min(this.menuFocusIndex + 1, this.menuElement.optionElements.length - 1) : 0; + this.setFocusedOption(nextFocusOptionIndex); + } + return false; + } + case keyArrowUp: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const previousFocusOptionIndex = this.flyoutOpen ? Math.max(this.menuFocusIndex - 1, 0) : 0; + this.setFocusedOption(previousFocusOptionIndex); + } + return false; + } + case keyEscape: { + this.toggleFlyout(false); + return false; + } + case keyEnter: { + if (this.menuFocusIndex !== -1 && this.menuElement.optionElements.length > this.menuFocusIndex) { + this.menuElement.optionElements[this.menuFocusIndex].click(); + } + return false; + } + case keyArrowRight: { + if (document.activeElement !== this.inputElement) { + this.incrementFocusedItem(1); + return false; + } + return true; + } + case keyArrowLeft: { + if (this.inputElement.selectionStart === 0) { + this.incrementFocusedItem(-1); + return false; + } + return true; + } + case keyDelete: + case keyBackspace: { + if (document.activeElement === null) { + return true; + } + if (document.activeElement === this.inputElement) { + if (this.inputElement.selectionStart === 0) { + this.selection = this.selectedItems.slice(0, this.selectedItems.length - 1).toString(); + this.toggleFlyout(false); + return false; + } + return true; + } + const selectedItems = Array.from(this.listElement.children); + const currentFocusedItemIndex = selectedItems.indexOf(document.activeElement); + if (currentFocusedItemIndex > -1) { + this.selection = this.selectedItems.splice(currentFocusedItemIndex, 1).toString(); + DOM.queueUpdate(() => { + selectedItems[Math.min(selectedItems.length, currentFocusedItemIndex)].focus(); + }); + return false; + } + return true; + } + } + this.toggleFlyout(true); + return true; + } + /** + * Handle focus in events. + */ + handleFocusIn(e) { + return false; + } + /** + * Handle focus out events. + */ + handleFocusOut(e) { + if (this.menuElement === void 0 || !this.menuElement.contains(e.relatedTarget)) { + this.toggleFlyout(false); + } + return false; + } + /** + * The list of selected items has changed + */ + handleSelectionChange() { + if (this.selectedItems.toString() === this.selection) { + return; + } + this.selectedItems = this.selection === "" ? [] : this.selection.split(","); + this.updateFilteredOptions(); + DOM.queueUpdate(() => { + this.checkMaxItems(); + }); + this.$emit("selectionchange", { bubbles: false }); + } + /** + * Anchored region is loaded, menu and options exist in the DOM. + */ + handleRegionLoaded(e) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + this.$emit("menuloaded", { bubbles: false }); + }); + } + /** + * Checks if the maximum number of items has been chosen and updates the ui. + */ + checkMaxItems() { + if (this.inputElement === void 0) { + return; + } + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + if (document.activeElement === this.inputElement) { + const selectedItemInstances = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + selectedItemInstances[selectedItemInstances.length - 1].focus(); + } + this.inputElement.hidden = true; + } else { + this.inputElement.hidden = false; + } + } + /** + * A list item has been invoked. + */ + handleItemInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerListItem) { + const listItems = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + const itemIndex = listItems.indexOf(e.target); + if (itemIndex !== -1) { + const newSelection = this.selectedItems.slice(); + newSelection.splice(itemIndex, 1); + this.selection = newSelection.toString(); + DOM.queueUpdate(() => this.incrementFocusedItem(0)); + } + return false; + } + return true; + } + /** + * A menu option has been invoked. + */ + handleOptionInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerMenuOption) { + if (e.target.value !== void 0) { + this.selection = `${this.selection}${this.selection === "" ? "" : ","}${e.target.value}`; + } + this.inputElement.value = ""; + this.query = ""; + this.inputElement.focus(); + this.toggleFlyout(false); + return false; + } + return true; + } + /** + * Increments the focused list item by the specified amount + */ + incrementFocusedItem(increment) { + if (this.selectedItems.length === 0) { + this.inputElement.focus(); + return; + } + const selectedItemsAsElements = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + if (document.activeElement !== null) { + let currentFocusedItemIndex = selectedItemsAsElements.indexOf(document.activeElement); + if (currentFocusedItemIndex === -1) { + currentFocusedItemIndex = selectedItemsAsElements.length; + } + const newFocusedItemIndex = Math.min(selectedItemsAsElements.length, Math.max(0, currentFocusedItemIndex + increment)); + if (newFocusedItemIndex === selectedItemsAsElements.length) { + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + selectedItemsAsElements[newFocusedItemIndex - 1].focus(); + } else { + this.inputElement.focus(); + } + } else { + selectedItemsAsElements[newFocusedItemIndex].focus(); + } + } + } + /** + * Disables the menu. Note that the menu can be open, just doens't have any valid options on display. + */ + disableMenu() { + var _a, _b, _c; + this.menuFocusIndex = -1; + this.menuFocusOptionId = void 0; + (_a = this.inputElement) === null || _a === void 0 ? void 0 : _a.removeAttribute("aria-activedescendant"); + (_b = this.inputElement) === null || _b === void 0 ? void 0 : _b.removeAttribute("aria-owns"); + (_c = this.inputElement) === null || _c === void 0 ? void 0 : _c.removeAttribute("aria-expanded"); + } + /** + * Sets the currently focused menu option by index + */ + setFocusedOption(optionIndex) { + if (!this.flyoutOpen || optionIndex === -1 || this.showNoOptions || this.showLoading) { + this.disableMenu(); + return; + } + if (this.menuElement.optionElements.length === 0) { + return; + } + this.menuElement.optionElements.forEach((element) => { + element.setAttribute("aria-selected", "false"); + }); + this.menuFocusIndex = optionIndex; + if (this.menuFocusIndex > this.menuElement.optionElements.length - 1) { + this.menuFocusIndex = this.menuElement.optionElements.length - 1; + } + this.menuFocusOptionId = this.menuElement.optionElements[this.menuFocusIndex].id; + this.inputElement.setAttribute("aria-owns", this.menuId); + this.inputElement.setAttribute("aria-expanded", "true"); + this.inputElement.setAttribute("aria-activedescendant", this.menuFocusOptionId); + const focusedOption = this.menuElement.optionElements[this.menuFocusIndex]; + focusedOption.setAttribute("aria-selected", "true"); + this.menuElement.scrollTo(0, focusedOption.offsetTop); + } + /** + * Updates the template used for the list item repeat behavior + */ + updateListItemTemplate() { + var _a; + this.activeListItemTemplate = (_a = this.listItemTemplate) !== null && _a !== void 0 ? _a : this.defaultListItemTemplate; + } + /** + * Updates the template used for the menu option repeat behavior + */ + updateOptionTemplate() { + var _a; + this.activeMenuOptionTemplate = (_a = this.menuOptionTemplate) !== null && _a !== void 0 ? _a : this.defaultMenuOptionTemplate; + } + /** + * Updates the filtered options array + */ + updateFilteredOptions() { + this.filteredOptionsList = this.optionsList.slice(0); + if (this.filterSelected) { + this.filteredOptionsList = this.filteredOptionsList.filter((el2) => this.selectedItems.indexOf(el2) === -1); + } + if (this.filterQuery && this.query !== "" && this.query !== void 0) { + this.filteredOptionsList = this.filteredOptionsList.filter((el2) => el2.indexOf(this.query) !== -1); + } + } + /** + * Updates the menu configuration + */ + updateMenuConfig() { + let newConfig = this.configLookup[this.menuPlacement]; + if (newConfig === null) { + newConfig = FlyoutPosBottomFill; + } + this.menuConfig = Object.assign(Object.assign({}, newConfig), { autoUpdateMode: "auto", fixedPlacement: true, horizontalViewportLock: false, verticalViewportLock: false }); + } + }; + __decorate([ + attr({ attribute: "selection" }) + ], Picker.prototype, "selection", void 0); + __decorate([ + attr({ attribute: "options" }) + ], Picker.prototype, "options", void 0); + __decorate([ + attr({ attribute: "filter-selected", mode: "boolean" }) + ], Picker.prototype, "filterSelected", void 0); + __decorate([ + attr({ attribute: "filter-query", mode: "boolean" }) + ], Picker.prototype, "filterQuery", void 0); + __decorate([ + attr({ attribute: "max-selected" }) + ], Picker.prototype, "maxSelected", void 0); + __decorate([ + attr({ attribute: "no-suggestions-text" }) + ], Picker.prototype, "noSuggestionsText", void 0); + __decorate([ + attr({ attribute: "suggestions-available-text" }) + ], Picker.prototype, "suggestionsAvailableText", void 0); + __decorate([ + attr({ attribute: "loading-text" }) + ], Picker.prototype, "loadingText", void 0); + __decorate([ + attr({ attribute: "label" }) + ], Picker.prototype, "label", void 0); + __decorate([ + attr({ attribute: "labelledby" }) + ], Picker.prototype, "labelledBy", void 0); + __decorate([ + attr({ attribute: "placeholder" }) + ], Picker.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "menu-placement" }) + ], Picker.prototype, "menuPlacement", void 0); + __decorate([ + observable + ], Picker.prototype, "showLoading", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "optionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "query", void 0); + __decorate([ + observable + ], Picker.prototype, "filteredOptionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "flyoutOpen", void 0); + __decorate([ + observable + ], Picker.prototype, "menuId", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedListTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusIndex", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusOptionId", void 0); + __decorate([ + observable + ], Picker.prototype, "showNoOptions", void 0); + __decorate([ + observable + ], Picker.prototype, "menuConfig", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js + var init_picker_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js + var init_picker_menu_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js + var init_picker_list_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js + var init_picker_list_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js + var init_picker2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js"() { + init_picker_template(); + init_picker(); + init_picker_menu_template(); + init_picker_menu(); + init_picker_menu_option_template(); + init_picker_menu_option(); + init_picker_list_template(); + init_picker_list(); + init_picker_list_item_template(); + init_picker_list_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js + var MenuItemRole, roleForMenuItem; + var init_menu_item_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js"() { + MenuItemRole = { + /** + * The menu item has a "menuitem" role + */ + menuitem: "menuitem", + /** + * The menu item has a "menuitemcheckbox" role + */ + menuitemcheckbox: "menuitemcheckbox", + /** + * The menu item has a "menuitemradio" role + */ + menuitemradio: "menuitemradio" + }; + roleForMenuItem = { + [MenuItemRole.menuitem]: "menuitem", + [MenuItemRole.menuitemcheckbox]: "menuitemcheckbox", + [MenuItemRole.menuitemradio]: "menuitemradio" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js + var MenuItem; + var init_menu_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_start_end(); + init_direction(); + init_apply_mixins(); + init_menu_item_options(); + MenuItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = MenuItemRole.menuitem; + this.hasSubmenu = false; + this.currentDirection = Direction.ltr; + this.focusSubmenuOnLoad = false; + this.handleMenuItemKeyDown = (e) => { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.invoke(); + return false; + case keyArrowRight: + this.expandAndFocus(); + return false; + case keyArrowLeft: + if (this.expanded) { + this.expanded = false; + this.focus(); + return false; + } + } + return true; + }; + this.handleMenuItemClick = (e) => { + if (e.defaultPrevented || this.disabled) { + return false; + } + this.invoke(); + return false; + }; + this.submenuLoaded = () => { + if (!this.focusSubmenuOnLoad) { + return; + } + this.focusSubmenuOnLoad = false; + if (this.hasSubmenu) { + this.submenu.focus(); + this.setAttribute("tabindex", "-1"); + } + }; + this.handleMouseOver = (e) => { + if (this.disabled || !this.hasSubmenu || this.expanded) { + return false; + } + this.expanded = true; + return false; + }; + this.handleMouseOut = (e) => { + if (!this.expanded || this.contains(document.activeElement)) { + return false; + } + this.expanded = false; + return false; + }; + this.expandAndFocus = () => { + if (!this.hasSubmenu) { + return; + } + this.focusSubmenuOnLoad = true; + this.expanded = true; + }; + this.invoke = () => { + if (this.disabled) { + return; + } + switch (this.role) { + case MenuItemRole.menuitemcheckbox: + this.checked = !this.checked; + break; + case MenuItemRole.menuitem: + this.updateSubmenu(); + if (this.hasSubmenu) { + this.expandAndFocus(); + } else { + this.$emit("change"); + } + break; + case MenuItemRole.menuitemradio: + if (!this.checked) { + this.checked = true; + } + break; + } + }; + this.updateSubmenu = () => { + this.submenu = this.domChildren().find((element) => { + return element.getAttribute("role") === "menu"; + }); + this.hasSubmenu = this.submenu === void 0 ? false : true; + }; + } + expandedChanged(oldValue) { + if (this.$fastController.isConnected) { + if (this.submenu === void 0) { + return; + } + if (this.expanded === false) { + this.submenu.collapseExpandedItem(); + } else { + this.currentDirection = getDirection(this); + } + this.$emit("expanded-change", this, { bubbles: false }); + } + } + checkedChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.$emit("change"); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.updateSubmenu(); + }); + if (!this.startColumnCount) { + this.startColumnCount = 1; + } + this.observer = new MutationObserver(this.updateSubmenu); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.submenu = void 0; + if (this.observer !== void 0) { + this.observer.disconnect(); + this.observer = void 0; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "disabled", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "expanded", void 0); + __decorate([ + observable + ], MenuItem.prototype, "startColumnCount", void 0); + __decorate([ + attr + ], MenuItem.prototype, "role", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "checked", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenuRegion", void 0); + __decorate([ + observable + ], MenuItem.prototype, "hasSubmenu", void 0); + __decorate([ + observable + ], MenuItem.prototype, "currentDirection", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenu", void 0); + applyMixins(MenuItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js + var init_menu_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js + var init_menu_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js"() { + init_menu_item_template(); + init_menu_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js + var init_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js + var Menu; + var init_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_menu_item2(); + init_foundation_element(); + Menu = class _Menu extends FoundationElement { + constructor() { + super(...arguments); + this.expandedItem = null; + this.focusIndex = -1; + this.isNestedMenu = () => { + return this.parentElement !== null && isHTMLElement(this.parentElement) && this.parentElement.getAttribute("role") === "menuitem"; + }; + this.handleFocusOut = (e) => { + if (!this.contains(e.relatedTarget) && this.menuItems !== void 0) { + this.collapseExpandedItem(); + const focusIndex = this.menuItems.findIndex(this.isFocusableElement); + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.menuItems[focusIndex].setAttribute("tabindex", "0"); + this.focusIndex = focusIndex; + } + }; + this.handleItemFocus = (e) => { + const targetItem = e.target; + if (this.menuItems !== void 0 && targetItem !== this.menuItems[this.focusIndex]) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.focusIndex = this.menuItems.indexOf(targetItem); + targetItem.setAttribute("tabindex", "0"); + } + }; + this.handleExpandedChanged = (e) => { + if (e.defaultPrevented || e.target === null || this.menuItems === void 0 || this.menuItems.indexOf(e.target) < 0) { + return; + } + e.preventDefault(); + const changedItem = e.target; + if (this.expandedItem !== null && changedItem === this.expandedItem && changedItem.expanded === false) { + this.expandedItem = null; + return; + } + if (changedItem.expanded) { + if (this.expandedItem !== null && this.expandedItem !== changedItem) { + this.expandedItem.expanded = false; + } + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.expandedItem = changedItem; + this.focusIndex = this.menuItems.indexOf(changedItem); + changedItem.setAttribute("tabindex", "0"); + } + }; + this.removeItemListeners = () => { + if (this.menuItems !== void 0) { + this.menuItems.forEach((item) => { + item.removeEventListener("expanded-change", this.handleExpandedChanged); + item.removeEventListener("focus", this.handleItemFocus); + }); + } + }; + this.setItems = () => { + const newItems = this.domChildren(); + this.removeItemListeners(); + this.menuItems = newItems; + const menuItems = this.menuItems.filter(this.isMenuItemElement); + if (menuItems.length) { + this.focusIndex = 0; + } + function elementIndent(el2) { + const role = el2.getAttribute("role"); + const startSlot = el2.querySelector("[slot=start]"); + if (role !== MenuItemRole.menuitem && startSlot === null) { + return 1; + } else if (role === MenuItemRole.menuitem && startSlot !== null) { + return 1; + } else if (role !== MenuItemRole.menuitem && startSlot !== null) { + return 2; + } else { + return 0; + } + } + const indent = menuItems.reduce((accum, current) => { + const elementValue = elementIndent(current); + return accum > elementValue ? accum : elementValue; + }, 0); + menuItems.forEach((item, index2) => { + item.setAttribute("tabindex", index2 === 0 ? "0" : "-1"); + item.addEventListener("expanded-change", this.handleExpandedChanged); + item.addEventListener("focus", this.handleItemFocus); + if (item instanceof MenuItem || "startColumnCount" in item) { + item.startColumnCount = indent; + } + }); + }; + this.changeHandler = (e) => { + if (this.menuItems === void 0) { + return; + } + const changedMenuItem = e.target; + const changeItemIndex = this.menuItems.indexOf(changedMenuItem); + if (changeItemIndex === -1) { + return; + } + if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked === true) { + for (let i = changeItemIndex - 1; i >= 0; --i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + const maxIndex = this.menuItems.length - 1; + for (let i = changeItemIndex + 1; i <= maxIndex; ++i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + } + }; + this.isMenuItemElement = (el2) => { + return isHTMLElement(el2) && _Menu.focusableElementRoles.hasOwnProperty(el2.getAttribute("role")); + }; + this.isFocusableElement = (el2) => { + return this.isMenuItemElement(el2); + }; + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.menuItems !== void 0) { + this.setItems(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.setItems(); + }); + this.addEventListener("change", this.changeHandler); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeItemListeners(); + this.menuItems = void 0; + this.removeEventListener("change", this.changeHandler); + } + /** + * Focuses the first item in the menu. + * + * @public + */ + focus() { + this.setFocus(0, 1); + } + /** + * Collapses any expanded menu items. + * + * @public + */ + collapseExpandedItem() { + if (this.expandedItem !== null) { + this.expandedItem.expanded = false; + this.expandedItem = null; + } + } + /** + * @internal + */ + handleMenuKeyDown(e) { + if (e.defaultPrevented || this.menuItems === void 0) { + return; + } + switch (e.key) { + case keyArrowDown: + this.setFocus(this.focusIndex + 1, 1); + return; + case keyArrowUp: + this.setFocus(this.focusIndex - 1, -1); + return; + case keyEnd: + this.setFocus(this.menuItems.length - 1, -1); + return; + case keyHome: + this.setFocus(0, 1); + return; + default: + return true; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + setFocus(focusIndex, adjustment) { + if (this.menuItems === void 0) { + return; + } + while (focusIndex >= 0 && focusIndex < this.menuItems.length) { + const child = this.menuItems[focusIndex]; + if (this.isFocusableElement(child)) { + if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + } + this.focusIndex = focusIndex; + child.setAttribute("tabindex", "0"); + child.focus(); + break; + } + focusIndex += adjustment; + } + } + }; + Menu.focusableElementRoles = roleForMenuItem; + __decorate([ + observable + ], Menu.prototype, "items", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js + var init_menu2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js"() { + init_menu_template(); + init_menu(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js + var init_number_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js + var _TextField, FormAssociatedTextField; + var init_text_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextField = class extends FoundationElement { + }; + FormAssociatedTextField = class extends FormAssociated(_TextField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js + var TextFieldType; + var init_text_field_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js"() { + TextFieldType = { + /** + * An email TextField + */ + email: "email", + /** + * A password TextField + */ + password: "password", + /** + * A telephone TextField + */ + tel: "tel", + /** + * A text TextField + */ + text: "text", + /** + * A URL TextField + */ + url: "url" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js + var TextField, DelegatesARIATextbox; + var init_text_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_text_field_form_associated(); + init_text_field_options(); + TextField = class extends FormAssociatedTextField { + constructor() { + super(...arguments); + this.type = TextFieldType.text; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + typeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + this.validate(); + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the text field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], TextField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "autofocus", void 0); + __decorate([ + attr + ], TextField.prototype, "placeholder", void 0); + __decorate([ + attr + ], TextField.prototype, "type", void 0); + __decorate([ + attr + ], TextField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "minlength", void 0); + __decorate([ + attr + ], TextField.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextField.prototype, "defaultSlottedNodes", void 0); + DelegatesARIATextbox = class { + }; + applyMixins(DelegatesARIATextbox, ARIAGlobalStatesAndProperties); + applyMixins(TextField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js + var _NumberField, FormAssociatedNumberField; + var init_number_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _NumberField = class extends FoundationElement { + }; + FormAssociatedNumberField = class extends FormAssociated(_NumberField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js + var NumberField; + var init_number_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_text_field(); + init_number_field_form_associated(); + NumberField = class extends FormAssociatedNumberField { + constructor() { + super(...arguments); + this.hideStep = false; + this.step = 1; + this.isUserInput = false; + } + /** + * Ensures that the max is greater than the min and that the value + * is less than the max + * @param previous - the previous max value + * @param next - updated max value + * + * @internal + */ + maxChanged(previous, next) { + var _a; + this.max = Math.max(next, (_a = this.min) !== null && _a !== void 0 ? _a : next); + const min = Math.min(this.min, this.max); + if (this.min !== void 0 && this.min !== min) { + this.min = min; + } + this.value = this.getValidValue(this.value); + } + /** + * Ensures that the min is less than the max and that the value + * is greater than the min + * @param previous - previous min value + * @param next - updated min value + * + * @internal + */ + minChanged(previous, next) { + var _a; + this.min = Math.min(next, (_a = this.max) !== null && _a !== void 0 ? _a : next); + const max = Math.max(this.min, this.max); + if (this.max !== void 0 && this.max !== max) { + this.max = max; + } + this.value = this.getValidValue(this.value); + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * Validates that the value is a number between the min and max + * @param previous - previous stored value + * @param next - value being updated + * @param updateControl - should the text field be updated with value, defaults to true + * @internal + */ + valueChanged(previous, next) { + this.value = this.getValidValue(next); + if (next !== this.value) { + return; + } + if (this.control && !this.isUserInput) { + this.control.value = this.value; + } + super.valueChanged(previous, this.value); + if (previous !== void 0 && !this.isUserInput) { + this.$emit("input"); + this.$emit("change"); + } + this.isUserInput = false; + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Sets the internal value to a valid number between the min and max properties + * @param value - user input + * + * @internal + */ + getValidValue(value) { + var _a, _b; + let validValue = parseFloat(parseFloat(value).toPrecision(12)); + if (isNaN(validValue)) { + validValue = ""; + } else { + validValue = Math.min(validValue, (_a = this.max) !== null && _a !== void 0 ? _a : validValue); + validValue = Math.max(validValue, (_b = this.min) !== null && _b !== void 0 ? _b : validValue).toString(); + } + return validValue; + } + /** + * Increments the value using the step value + * + * @public + */ + stepUp() { + const value = parseFloat(this.value); + const stepUpValue = !isNaN(value) ? value + this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? this.step : 0; + this.value = stepUpValue.toString(); + } + /** + * Decrements the value using the step value + * + * @public + */ + stepDown() { + const value = parseFloat(this.value); + const stepDownValue = !isNaN(value) ? value - this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? 0 - this.step : 0; + this.value = stepDownValue.toString(); + } + /** + * Sets up the initial state of the number field + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "number"); + this.validate(); + this.control.value = this.value; + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the number field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, ""); + this.isUserInput = true; + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** + * Handles the internal control's `keydown` event + * @internal + */ + handleKeyDown(e) { + const key = e.key; + switch (key) { + case keyArrowUp: + this.stepUp(); + return false; + case keyArrowDown: + this.stepDown(); + return false; + } + return true; + } + /** + * Handles populating the input field with a validated value when + * leaving the input field. + * @internal + */ + handleBlur() { + this.control.value = this.value; + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], NumberField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], NumberField.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "hide-step", mode: "boolean" }) + ], NumberField.prototype, "hideStep", void 0); + __decorate([ + attr + ], NumberField.prototype, "placeholder", void 0); + __decorate([ + attr + ], NumberField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "minlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "size", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "step", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "min", void 0); + __decorate([ + observable + ], NumberField.prototype, "defaultSlottedNodes", void 0); + applyMixins(NumberField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js + var init_number_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js"() { + init_number_field_template(); + init_number_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js + var progressSegments, progressRingTemplate; + var init_progress_ring_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js"() { + init_esm(); + progressSegments = 44; + progressRingTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js + var init_progress_ring = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js"() { + init_progress_ring_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js + var BaseProgress; + var init_base_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + BaseProgress = class extends FoundationElement { + constructor() { + super(...arguments); + this.percentComplete = 0; + } + valueChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + minChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + maxChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updatePercentComplete(); + } + updatePercentComplete() { + const min = typeof this.min === "number" ? this.min : 0; + const max = typeof this.max === "number" ? this.max : 100; + const value = typeof this.value === "number" ? this.value : 0; + const range2 = max - min; + this.percentComplete = range2 === 0 ? 0 : Math.fround((value - min) / range2 * 100); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "value", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "max", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], BaseProgress.prototype, "paused", void 0); + __decorate([ + observable + ], BaseProgress.prototype, "percentComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js + var init_progress_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js + var init_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js"() { + init_base_progress(); + init_progress_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js + var radioGroupTemplate; + var init_radio_group_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js"() { + init_esm(); + init_dist2(); + radioGroupTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js + var RadioGroup; + var init_radio_group = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + RadioGroup = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = Orientation.horizontal; + this.radioChangeHandler = (e) => { + const changedRadio = e.target; + if (changedRadio.checked) { + this.slottedRadioButtons.forEach((radio) => { + if (radio !== changedRadio) { + radio.checked = false; + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + } + }); + this.selectedRadio = changedRadio; + this.value = changedRadio.value; + changedRadio.setAttribute("tabindex", "0"); + this.focusedRadio = changedRadio; + } + e.stopPropagation(); + }; + this.moveToRadioByIndex = (group, index2) => { + const radio = group[index2]; + if (!this.isInsideToolbar) { + radio.setAttribute("tabindex", "0"); + if (radio.readOnly) { + this.slottedRadioButtons.forEach((nextRadio) => { + if (nextRadio !== radio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + radio.checked = true; + this.selectedRadio = radio; + } + } + this.focusedRadio = radio; + radio.focus(); + }; + this.moveRightOffGroup = () => { + var _a; + (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.moveLeftOffGroup = () => { + var _a; + (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.focusOutHandler = (e) => { + const group = this.slottedRadioButtons; + const radio = e.target; + const index2 = radio !== null ? group.indexOf(radio) : 0; + const focusedIndex = this.focusedRadio ? group.indexOf(this.focusedRadio) : -1; + if (focusedIndex === 0 && index2 === focusedIndex || focusedIndex === group.length - 1 && focusedIndex === index2) { + if (!this.selectedRadio) { + this.focusedRadio = group[0]; + this.focusedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.focusedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + this.focusedRadio = this.selectedRadio; + if (!this.isInsideFoundationToolbar) { + this.selectedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.selectedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } + } + } + return true; + }; + this.clickHandler = (e) => { + const radio = e.target; + if (radio) { + const group = this.slottedRadioButtons; + if (radio.checked || group.indexOf(radio) === 0) { + radio.setAttribute("tabindex", "0"); + this.selectedRadio = radio; + } else { + radio.setAttribute("tabindex", "-1"); + this.selectedRadio = null; + } + this.focusedRadio = radio; + } + e.preventDefault(); + }; + this.shouldMoveOffGroupToTheRight = (index2, group, key) => { + return index2 === group.length && this.isInsideToolbar && key === keyArrowRight; + }; + this.shouldMoveOffGroupToTheLeft = (group, key) => { + const index2 = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + return index2 < 0 && this.isInsideToolbar && key === keyArrowLeft; + }; + this.checkFocusedRadio = () => { + if (this.focusedRadio !== null && !this.focusedRadio.readOnly && !this.focusedRadio.checked) { + this.focusedRadio.checked = true; + this.focusedRadio.setAttribute("tabindex", "0"); + this.focusedRadio.focus(); + this.selectedRadio = this.focusedRadio; + } + }; + this.moveRight = (e) => { + const group = this.slottedRadioButtons; + let index2 = 0; + index2 = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1; + if (this.shouldMoveOffGroupToTheRight(index2, group, e.key)) { + this.moveRightOffGroup(); + return; + } else if (index2 === group.length) { + index2 = 0; + } + while (index2 < group.length && group.length > 1) { + if (!group[index2].disabled) { + this.moveToRadioByIndex(group, index2); + break; + } else if (this.focusedRadio && index2 === group.indexOf(this.focusedRadio)) { + break; + } else if (index2 + 1 >= group.length) { + if (this.isInsideToolbar) { + break; + } else { + index2 = 0; + } + } else { + index2 += 1; + } + } + }; + this.moveLeft = (e) => { + const group = this.slottedRadioButtons; + let index2 = 0; + index2 = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + index2 = index2 < 0 ? group.length - 1 : index2; + if (this.shouldMoveOffGroupToTheLeft(group, e.key)) { + this.moveLeftOffGroup(); + return; + } + while (index2 >= 0 && group.length > 1) { + if (!group[index2].disabled) { + this.moveToRadioByIndex(group, index2); + break; + } else if (this.focusedRadio && index2 === group.indexOf(this.focusedRadio)) { + break; + } else if (index2 - 1 < 0) { + index2 = group.length - 1; + } else { + index2 -= 1; + } + } + }; + this.keydownHandler = (e) => { + const key = e.key; + if (key in ArrowKeys && this.isInsideFoundationToolbar) { + return true; + } + switch (key) { + case keyEnter: { + this.checkFocusedRadio(); + break; + } + case keyArrowRight: + case keyArrowDown: { + if (this.direction === Direction.ltr) { + this.moveRight(e); + } else { + this.moveLeft(e); + } + break; + } + case keyArrowLeft: + case keyArrowUp: { + if (this.direction === Direction.ltr) { + this.moveLeft(e); + } else { + this.moveRight(e); + } + break; + } + default: { + return true; + } + } + }; + } + readOnlyChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.readOnly) { + radio.readOnly = true; + } else { + radio.readOnly = false; + } + }); + } + } + disabledChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.disabled) { + radio.disabled = true; + } else { + radio.disabled = false; + } + }); + } + } + nameChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + radio.setAttribute("name", this.name); + }); + } + } + valueChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + if (radio.value === this.value) { + radio.checked = true; + this.selectedRadio = radio; + } + }); + } + this.$emit("change"); + } + slottedRadioButtonsChanged(oldValue, newValue) { + if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) { + this.setupRadioButtons(); + } + } + get parentToolbar() { + return this.closest('[role="toolbar"]'); + } + get isInsideToolbar() { + var _a; + return (_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false; + } + get isInsideFoundationToolbar() { + var _a; + return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + this.setupRadioButtons(); + } + disconnectedCallback() { + this.slottedRadioButtons.forEach((radio) => { + radio.removeEventListener("change", this.radioChangeHandler); + }); + } + setupRadioButtons() { + const checkedRadios = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0; + if (numberOfCheckedRadios > 1) { + const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1]; + lastCheckedRadio.checked = true; + } + let foundMatchingVal = false; + this.slottedRadioButtons.forEach((radio) => { + if (this.name !== void 0) { + radio.setAttribute("name", this.name); + } + if (this.disabled) { + radio.disabled = true; + } + if (this.readOnly) { + radio.readOnly = true; + } + if (this.value && this.value === radio.value) { + this.selectedRadio = radio; + this.focusedRadio = radio; + radio.checked = true; + radio.setAttribute("tabindex", "0"); + foundMatchingVal = true; + } else { + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + radio.checked = false; + } + radio.addEventListener("change", this.radioChangeHandler); + }); + if (this.value === void 0 && this.slottedRadioButtons.length > 0) { + const checkedRadios2 = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios2 = checkedRadios2 !== null ? checkedRadios2.length : 0; + if (numberOfCheckedRadios2 > 0 && !foundMatchingVal) { + const lastCheckedRadio = checkedRadios2[numberOfCheckedRadios2 - 1]; + lastCheckedRadio.checked = true; + this.focusedRadio = lastCheckedRadio; + lastCheckedRadio.setAttribute("tabindex", "0"); + } else { + this.slottedRadioButtons[0].setAttribute("tabindex", "0"); + this.focusedRadio = this.slottedRadioButtons[0]; + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], RadioGroup.prototype, "readOnly", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], RadioGroup.prototype, "disabled", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "name", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "value", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "orientation", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "childItems", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "slottedRadioButtons", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js + var init_radio_group2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js"() { + init_radio_group_template(); + init_radio_group(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js + var radioTemplate; + var init_radio_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js"() { + init_esm(); + radioTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js + var _Radio, FormAssociatedRadio; + var init_radio_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Radio = class extends FoundationElement { + }; + FormAssociatedRadio = class extends CheckableFormAssociated(_Radio) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js + var Radio; + var init_radio = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_radio_form_associated(); + Radio = class extends FormAssociatedRadio { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + switch (e.key) { + case keySpace: + if (!this.checked && !this.readOnly) { + this.checked = true; + } + return; + } + return true; + }; + this.proxy.setAttribute("type", "radio"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * @internal + */ + defaultCheckedChanged() { + var _a; + if (this.$fastController.isConnected && !this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_a = this.defaultChecked) !== null && _a !== void 0 ? _a : false; + this.dirtyChecked = false; + } + } + } + /** + * @internal + */ + connectedCallback() { + var _a, _b; + super.connectedCallback(); + this.validate(); + if (((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("role")) !== "radiogroup" && this.getAttribute("tabindex") === null) { + if (!this.disabled) { + this.setAttribute("tabindex", "0"); + } + } + if (this.checkedAttribute) { + if (!this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_b = this.defaultChecked) !== null && _b !== void 0 ? _b : false; + this.dirtyChecked = false; + } + } + } + } + isInsideRadioGroup() { + const parent = this.closest("[role=radiogroup]"); + return parent !== null; + } + /** + * @internal + */ + clickHandler(e) { + if (!this.disabled && !this.readOnly && !this.checked) { + this.checked = true; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Radio.prototype, "readOnly", void 0); + __decorate([ + observable + ], Radio.prototype, "name", void 0); + __decorate([ + observable + ], Radio.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js + var init_radio2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js"() { + init_radio_template(); + init_radio(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js + var HorizontalScroll; + var init_horizontal_scroll = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + HorizontalScroll = class extends FoundationElement { + constructor() { + super(...arguments); + this.framesPerSecond = 60; + this.updatingItems = false; + this.speed = 600; + this.easing = "ease-in-out"; + this.flippersHiddenFromAT = false; + this.scrolling = false; + this.resizeDetector = null; + } + /** + * The calculated duration for a frame. + * + * @internal + */ + get frameTime() { + return 1e3 / this.framesPerSecond; + } + /** + * Firing scrollstart and scrollend events + * @internal + */ + scrollingChanged(prev, next) { + if (this.scrollContainer) { + const event = this.scrolling == true ? "scrollstart" : "scrollend"; + this.$emit(event, this.scrollContainer.scrollLeft); + } + } + /** + * In RTL mode + * @internal + */ + get isRtl() { + return this.scrollItems.length > 1 && this.scrollItems[0].offsetLeft > this.scrollItems[1].offsetLeft; + } + connectedCallback() { + super.connectedCallback(); + this.initializeResizeDetector(); + } + disconnectedCallback() { + this.disconnectResizeDetector(); + super.disconnectedCallback(); + } + /** + * Updates scroll stops and flippers when scroll items change + * @param previous - current scroll items + * @param next - new updated scroll items + * @public + */ + scrollItemsChanged(previous, next) { + if (next && !this.updatingItems) { + DOM.queueUpdate(() => this.setStops()); + } + } + /** + * destroys the instance's resize observer + * @internal + */ + disconnectResizeDetector() { + if (this.resizeDetector) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + * @internal + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.resized.bind(this)); + this.resizeDetector.observe(this); + } + /** + * Looks for slots and uses child nodes instead + * @internal + */ + updateScrollStops() { + this.updatingItems = true; + const updatedItems = this.scrollItems.reduce((scrollItems, scrollItem) => { + if (scrollItem instanceof HTMLSlotElement) { + return scrollItems.concat(scrollItem.assignedElements()); + } + scrollItems.push(scrollItem); + return scrollItems; + }, []); + this.scrollItems = updatedItems; + this.updatingItems = false; + } + /** + * Finds all of the scroll stops between elements + * @internal + */ + setStops() { + this.updateScrollStops(); + const { scrollContainer: container } = this; + const { scrollLeft } = container; + const { width: containerWidth, left: containerLeft } = container.getBoundingClientRect(); + this.width = containerWidth; + let lastStop = 0; + let stops = this.scrollItems.map((item, index2) => { + const { left, width } = item.getBoundingClientRect(); + const leftPosition = Math.round(left + scrollLeft - containerLeft); + const right = Math.round(leftPosition + width); + if (this.isRtl) { + return -right; + } + lastStop = right; + return index2 === 0 ? 0 : leftPosition; + }).concat(lastStop); + stops = this.fixScrollMisalign(stops); + stops.sort((a, b) => Math.abs(a) - Math.abs(b)); + this.scrollStops = stops; + this.setFlippers(); + } + /** + * Checks to see if the stops are returning values + * otherwise it will try to reinitialize them + * + * @returns boolean indicating that current scrollStops are valid non-zero values + * @internal + */ + validateStops(reinit = true) { + const hasStops = () => !!this.scrollStops.find((stop) => stop > 0); + if (!hasStops() && reinit) { + this.setStops(); + } + return hasStops(); + } + /** + * + */ + fixScrollMisalign(stops) { + if (this.isRtl && stops.some((stop) => stop > 0)) { + stops.sort((a, b) => b - a); + const offset = stops[0]; + stops = stops.map((stop) => stop - offset); + } + return stops; + } + /** + * Sets the controls view if enabled + * @internal + */ + setFlippers() { + var _a, _b; + const position = this.scrollContainer.scrollLeft; + (_a = this.previousFlipperContainer) === null || _a === void 0 ? void 0 : _a.classList.toggle("disabled", position === 0); + if (this.scrollStops) { + const lastStop = Math.abs(this.scrollStops[this.scrollStops.length - 1]); + (_b = this.nextFlipperContainer) === null || _b === void 0 ? void 0 : _b.classList.toggle("disabled", this.validateStops(false) && Math.abs(position) + this.width >= lastStop); + } + } + /** + * Function that can scroll an item into view. + * @param item - An item index, a scroll item or a child of one of the scroll items + * @param padding - Padding of the viewport where the active item shouldn't be + * @param rightPadding - Optional right padding. Uses the padding if not defined + * + * @public + */ + scrollInView(item, padding = 0, rightPadding) { + var _a; + if (typeof item !== "number" && item) { + item = this.scrollItems.findIndex((scrollItem) => scrollItem === item || scrollItem.contains(item)); + } + if (item !== void 0) { + rightPadding = rightPadding !== null && rightPadding !== void 0 ? rightPadding : padding; + const { scrollContainer: container, scrollStops, scrollItems: items } = this; + const { scrollLeft } = this.scrollContainer; + const { width: containerWidth } = container.getBoundingClientRect(); + const itemStart = scrollStops[item]; + const { width } = items[item].getBoundingClientRect(); + const itemEnd = itemStart + width; + const isBefore = scrollLeft + padding > itemStart; + if (isBefore || scrollLeft + containerWidth - rightPadding < itemEnd) { + const stops = [...scrollStops].sort((a, b) => isBefore ? b - a : a - b); + const scrollTo = (_a = stops.find((position) => isBefore ? position + padding < itemStart : position + containerWidth - (rightPadding !== null && rightPadding !== void 0 ? rightPadding : 0) > itemEnd)) !== null && _a !== void 0 ? _a : 0; + this.scrollToPosition(scrollTo); + } + } + } + /** + * Lets the user arrow left and right through the horizontal scroll + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + this.scrollToPrevious(); + break; + case "ArrowRight": + this.scrollToNext(); + break; + } + } + /** + * Scrolls items to the left + * @public + */ + scrollToPrevious() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop, index2) => stop >= scrollPosition && (this.isRtl || index2 === this.scrollStops.length - 1 || this.scrollStops[index2 + 1] > scrollPosition)); + const right = Math.abs(this.scrollStops[current + 1]); + let nextIndex = this.scrollStops.findIndex((stop) => Math.abs(stop) + this.width > right); + if (nextIndex >= current || nextIndex === -1) { + nextIndex = current > 0 ? current - 1 : 0; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Scrolls items to the right + * @public + */ + scrollToNext() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop) => Math.abs(stop) >= Math.abs(scrollPosition)); + const outOfView = this.scrollStops.findIndex((stop) => Math.abs(scrollPosition) + this.width <= Math.abs(stop)); + let nextIndex = current; + if (outOfView > current + 2) { + nextIndex = outOfView - 2; + } else if (current < this.scrollStops.length - 2) { + nextIndex = current + 1; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Handles scrolling with easing + * @param position - starting position + * @param newPosition - position to scroll to + * @public + */ + scrollToPosition(newPosition, position = this.scrollContainer.scrollLeft) { + var _a; + if (this.scrolling) { + return; + } + this.scrolling = true; + const seconds = (_a = this.duration) !== null && _a !== void 0 ? _a : `${Math.abs(newPosition - position) / this.speed}s`; + this.content.style.setProperty("transition-duration", seconds); + const computedDuration = parseFloat(getComputedStyle(this.content).getPropertyValue("transition-duration")); + const transitionendHandler = (e) => { + if (e && e.target !== e.currentTarget) { + return; + } + this.content.style.setProperty("transition-duration", "0s"); + this.content.style.removeProperty("transform"); + this.scrollContainer.style.setProperty("scroll-behavior", "auto"); + this.scrollContainer.scrollLeft = newPosition; + this.setFlippers(); + this.content.removeEventListener("transitionend", transitionendHandler); + this.scrolling = false; + }; + if (computedDuration === 0) { + transitionendHandler(); + return; + } + this.content.addEventListener("transitionend", transitionendHandler); + const maxScrollValue = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth; + let transitionStop = this.scrollContainer.scrollLeft - Math.min(newPosition, maxScrollValue); + if (this.isRtl) { + transitionStop = this.scrollContainer.scrollLeft + Math.min(Math.abs(newPosition), maxScrollValue); + } + this.content.style.setProperty("transition-property", "transform"); + this.content.style.setProperty("transition-timing-function", this.easing); + this.content.style.setProperty("transform", `translateX(${transitionStop}px)`); + } + /** + * Monitors resize event on the horizontal-scroll element + * @public + */ + resized() { + if (this.resizeTimeout) { + this.resizeTimeout = clearTimeout(this.resizeTimeout); + } + this.resizeTimeout = setTimeout(() => { + this.width = this.scrollContainer.offsetWidth; + this.setFlippers(); + }, this.frameTime); + } + /** + * Monitors scrolled event on the content container + * @public + */ + scrolled() { + if (this.scrollTimeout) { + this.scrollTimeout = clearTimeout(this.scrollTimeout); + } + this.scrollTimeout = setTimeout(() => { + this.setFlippers(); + }, this.frameTime); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], HorizontalScroll.prototype, "speed", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "duration", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "easing", void 0); + __decorate([ + attr({ attribute: "flippers-hidden-from-at", converter: booleanConverter }) + ], HorizontalScroll.prototype, "flippersHiddenFromAT", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrolling", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrollItems", void 0); + __decorate([ + attr({ attribute: "view" }) + ], HorizontalScroll.prototype, "view", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js + var init_horizontal_scroll_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js + var init_horizontal_scroll2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js"() { + init_horizontal_scroll(); + init_horizontal_scroll_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js + function whitespaceFilter(value, index2, array) { + return value.nodeType !== Node.TEXT_NODE ? true : typeof value.nodeValue === "string" && !!value.nodeValue.trim().length; + } + var init_whitespace_filter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js + var init_search_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js + var _Search, FormAssociatedSearch; + var init_search_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Search = class extends FoundationElement { + }; + FormAssociatedSearch = class extends FormAssociated(_Search) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.js + var Search, DelegatesARIASearch; + var init_search = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_search_form_associated(); + Search = class extends FormAssociatedSearch { + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Handles the control's clear value event + * @public + */ + handleClearInput() { + this.value = ""; + this.control.focus(); + this.handleChange(); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Search.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "autofocus", void 0); + __decorate([ + attr + ], Search.prototype, "placeholder", void 0); + __decorate([ + attr + ], Search.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "minlength", void 0); + __decorate([ + attr + ], Search.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "spellcheck", void 0); + __decorate([ + observable + ], Search.prototype, "defaultSlottedNodes", void 0); + DelegatesARIASearch = class { + }; + applyMixins(DelegatesARIASearch, ARIAGlobalStatesAndProperties); + applyMixins(Search, StartEnd, DelegatesARIASearch); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/index.js + var init_search2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/index.js"() { + init_search_template(); + init_search(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js + var _Select, FormAssociatedSelect; + var init_select_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js"() { + init_listbox_element(); + init_form_associated(); + _Select = class extends ListboxElement { + }; + FormAssociatedSelect = class extends FormAssociated(_Select) { + constructor() { + super(...arguments); + this.proxy = document.createElement("select"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.js + var Select, DelegatesARIASelect; + var init_select = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_apply_mixins(); + init_select_form_associated(); + init_select_options(); + Select = class extends FormAssociatedSelect { + constructor() { + super(...arguments); + this.open = false; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + } + /** + * Sets focus and synchronizes ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged(prev, next) { + if (!this.collapsible) { + return; + } + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + this.indexWhenOpened = this.selectedIndex; + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The component is collapsible when in single-selection mode with no size attribute. + * + * @internal + */ + get collapsible() { + return !(this.multiple || typeof this.size === "number"); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c, _d, _e, _f, _g; + const prev = `${this._value}`; + if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.length) { + const selectedIndex = this._options.findIndex((el2) => el2.value === next); + const prevSelectedValue = (_c = (_b = this._options[this.selectedIndex]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null; + const nextSelectedValue = (_e = (_d = this._options[selectedIndex]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : null; + if (selectedIndex === -1 || prevSelectedValue !== nextSelectedValue) { + next = ""; + this.selectedIndex = selectedIndex; + } + next = (_g = (_f = this.firstSelectedOption) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + this.updateDisplayValue(); + } + } + /** + * Sets the value and display value to match the first selected option. + * + * @param shouldEmit - if true, the input and change events will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a, _b; + if (this.$fastController.isConnected) { + this.value = (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : ""; + } + if (shouldEmit) { + this.$emit("input"); + this.$emit("change", this, { + bubbles: true, + composed: void 0 + }); + } + } + /** + * Updates the proxy value when the selected index changes. + * + * @param prev - the previous selected index + * @param next - the next selected index + * + * @internal + */ + selectedIndexChanged(prev, next) { + super.selectedIndexChanged(prev, next); + this.updateValue(); + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * The value displayed on the button. + * + * @public + */ + get displayValue() { + var _a, _b; + Observable.track(this, "displayValue"); + return (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : ""; + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + this.setProxyOptions(); + super.setDefaultSelectedOption(); + if (this.selectedIndex === -1) { + this.selectedIndex = 0; + } + } + /** + * Handle opening and closing the listbox when the select is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + if (this.disabled) { + return; + } + if (this.open) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && captured.disabled) { + return; + } + } + super.clickHandler(e); + this.open = this.collapsible && !this.open; + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + return true; + } + /** + * Handles focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + var _a; + super.focusoutHandler(e); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.includes(focusTarget))) { + this.open = false; + if (this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + } + } + /** + * Updates the value when an option's value changes. + * + * @param source - the source object + * @param propertyName - the property to evaluate + * + * @internal + * @override + */ + handleChange(source, propertyName) { + super.handleChange(source, propertyName); + if (propertyName === "value") { + this.updateValue(); + } + } + /** + * Synchronize the form-associated proxy and updates the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "value"); + }); + super.slottedOptionsChanged(prev, next); + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.subscribe(this, "value"); + }); + this.setProxyOptions(); + this.updateValue(); + } + /** + * Prevents focus when size is set and a scrollbar is clicked. + * + * @param e - the mouse event object + * + * @override + * @internal + */ + mousedownHandler(e) { + var _a; + if (e.offsetX >= 0 && e.offsetX <= ((_a = this.listbox) === null || _a === void 0 ? void 0 : _a.scrollWidth)) { + return super.mousedownHandler(e); + } + return this.collapsible; + } + /** + * Sets the multiple property on the proxy element. + * + * @param prev - the previous multiple value + * @param next - the current multiple value + */ + multipleChanged(prev, next) { + super.multipleChanged(prev, next); + if (this.proxy) { + this.proxy.multiple = next; + } + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @override + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + super.selectedOptionsChanged(prev, next); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o, i) => { + var _a2; + const proxyOption = (_a2 = this.proxy) === null || _a2 === void 0 ? void 0 : _a2.options.item(i); + if (proxyOption) { + proxyOption.selected = o.selected; + } + }); + } + /** + * Sets the selected index to match the first option with the selected attribute, or + * the first selectable option. + * + * @override + * @internal + */ + setDefaultSelectedOption() { + var _a; + const options = (_a = this.options) !== null && _a !== void 0 ? _a : Array.from(this.children).filter(Listbox.slottedOptionFilter); + const selectedIndex = options === null || options === void 0 ? void 0 : options.findIndex((el2) => el2.hasAttribute("selected") || el2.selected || el2.value === this.value); + if (selectedIndex !== -1) { + this.selectedIndex = selectedIndex; + return; + } + this.selectedIndex = 0; + } + /** + * Resets and fills the proxy to match the component's options. + * + * @internal + */ + setProxyOptions() { + if (this.proxy instanceof HTMLSelectElement && this.options) { + this.proxy.options.length = 0; + this.options.forEach((option) => { + const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null); + if (proxyOption) { + this.proxy.options.add(proxyOption); + } + }); + } + } + /** + * Handle keyboard interaction for the select. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + super.keydownHandler(e); + const key = e.key || e.key.charCodeAt(0); + switch (key) { + case keySpace: { + e.preventDefault(); + if (this.collapsible && this.typeAheadExpired) { + this.open = !this.open; + } + break; + } + case keyHome: + case keyEnd: { + e.preventDefault(); + break; + } + case keyEnter: { + e.preventDefault(); + this.open = !this.open; + break; + } + case keyEscape: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + break; + } + case keyTab: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + return true; + } + } + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + this.indexWhenOpened = this.selectedIndex; + } + return !(key === keyArrowDown || key === keyArrowUp); + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + this.addEventListener("contentchange", this.updateDisplayValue); + } + disconnectedCallback() { + this.removeEventListener("contentchange", this.updateDisplayValue); + super.disconnectedCallback(); + } + /** + * Updates the proxy's size property when the size attribute changes. + * + * @param prev - the previous size + * @param next - the current size + * + * @override + * @internal + */ + sizeChanged(prev, next) { + super.sizeChanged(prev, next); + if (this.proxy) { + this.proxy.size = next; + } + } + /** + * + * @internal + */ + updateDisplayValue() { + if (this.collapsible) { + Observable.notify(this, "displayValue"); + } + } + }; + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Select.prototype, "open", void 0); + __decorate([ + volatile + ], Select.prototype, "collapsible", null); + __decorate([ + observable + ], Select.prototype, "control", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Select.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Select.prototype, "position", void 0); + __decorate([ + observable + ], Select.prototype, "maxHeight", void 0); + DelegatesARIASelect = class { + }; + __decorate([ + observable + ], DelegatesARIASelect.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIASelect, DelegatesARIAListbox); + applyMixins(Select, StartEnd, DelegatesARIASelect); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js + var selectTemplate; + var init_select_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js"() { + init_esm(); + init_listbox(); + init_start_end(); + selectTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/index.js + var init_select2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/index.js"() { + init_select(); + init_select_options(); + init_select_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js + var init_skeleton_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js + var Skeleton; + var init_skeleton = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Skeleton = class extends FoundationElement { + constructor() { + super(...arguments); + this.shape = "rect"; + } + }; + __decorate([ + attr + ], Skeleton.prototype, "fill", void 0); + __decorate([ + attr + ], Skeleton.prototype, "shape", void 0); + __decorate([ + attr + ], Skeleton.prototype, "pattern", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Skeleton.prototype, "shimmer", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js + var init_skeleton2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js"() { + init_skeleton_template(); + init_skeleton(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js + var init_slider_label_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js + function convertPixelToPercent(pixelPos, minPosition, maxPosition, direction) { + let pct = limit(0, 1, (pixelPos - minPosition) / (maxPosition - minPosition)); + if (direction === Direction.rtl) { + pct = 1 - pct; + } + return pct; + } + var init_slider_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js"() { + init_dist2(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js + var defaultConfig, SliderLabel; + var init_slider_label = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_slider_utilities(); + init_foundation_element(); + defaultConfig = { + min: 0, + max: 0, + direction: Direction.ltr, + orientation: Orientation.horizontal, + disabled: false + }; + SliderLabel = class extends FoundationElement { + constructor() { + super(...arguments); + this.hideMark = false; + this.sliderDirection = Direction.ltr; + this.getSliderConfiguration = () => { + if (!this.isSliderConfig(this.parentNode)) { + this.sliderDirection = defaultConfig.direction || Direction.ltr; + this.sliderOrientation = defaultConfig.orientation || Orientation.horizontal; + this.sliderMaxPosition = defaultConfig.max; + this.sliderMinPosition = defaultConfig.min; + } else { + const parentSlider = this.parentNode; + const { min, max, direction, orientation, disabled } = parentSlider; + if (disabled !== void 0) { + this.disabled = disabled; + } + this.sliderDirection = direction || Direction.ltr; + this.sliderOrientation = orientation || Orientation.horizontal; + this.sliderMaxPosition = max; + this.sliderMinPosition = min; + } + }; + this.positionAsStyle = () => { + const direction = this.sliderDirection ? this.sliderDirection : Direction.ltr; + const pct = convertPixelToPercent(Number(this.position), Number(this.sliderMinPosition), Number(this.sliderMaxPosition)); + let rightNum = Math.round((1 - pct) * 100); + let leftNum = Math.round(pct * 100); + if (Number.isNaN(leftNum) && Number.isNaN(rightNum)) { + rightNum = 50; + leftNum = 50; + } + if (this.sliderOrientation === Orientation.horizontal) { + return direction === Direction.rtl ? `right: ${leftNum}%; left: ${rightNum}%;` : `left: ${leftNum}%; right: ${rightNum}%;`; + } else { + return `top: ${leftNum}%; bottom: ${rightNum}%;`; + } + }; + } + positionChanged() { + this.positionStyle = this.positionAsStyle(); + } + /** + * @internal + */ + sliderOrientationChanged() { + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.getSliderConfiguration(); + this.positionStyle = this.positionAsStyle(); + this.notifier = Observable.getNotifier(this.parentNode); + this.notifier.subscribe(this, "orientation"); + this.notifier.subscribe(this, "direction"); + this.notifier.subscribe(this, "max"); + this.notifier.subscribe(this, "min"); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.notifier.unsubscribe(this, "orientation"); + this.notifier.unsubscribe(this, "direction"); + this.notifier.unsubscribe(this, "max"); + this.notifier.unsubscribe(this, "min"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "direction": + this.sliderDirection = source.direction; + break; + case "orientation": + this.sliderOrientation = source.orientation; + break; + case "max": + this.sliderMaxPosition = source.max; + break; + case "min": + this.sliderMinPosition = source.min; + break; + default: + break; + } + this.positionStyle = this.positionAsStyle(); + } + isSliderConfig(node) { + return node.max !== void 0 && node.min !== void 0; + } + }; + __decorate([ + observable + ], SliderLabel.prototype, "positionStyle", void 0); + __decorate([ + attr + ], SliderLabel.prototype, "position", void 0); + __decorate([ + attr({ attribute: "hide-mark", mode: "boolean" }) + ], SliderLabel.prototype, "hideMark", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], SliderLabel.prototype, "disabled", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderOrientation", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMinPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMaxPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js + var init_slider_label2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js"() { + init_slider_label_template(); + init_slider_label(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js + var init_slider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js + var _Slider, FormAssociatedSlider; + var init_slider_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Slider = class extends FoundationElement { + }; + FormAssociatedSlider = class extends FormAssociated(_Slider) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js + var SliderMode, Slider; + var init_slider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_slider_utilities(); + init_slider_form_associated(); + SliderMode = { + singleValue: "single-value" + }; + Slider = class extends FormAssociatedSlider { + constructor() { + super(...arguments); + this.direction = Direction.ltr; + this.isDragging = false; + this.trackWidth = 0; + this.trackMinWidth = 0; + this.trackHeight = 0; + this.trackLeft = 0; + this.trackMinHeight = 0; + this.valueTextFormatter = () => null; + this.min = 0; + this.max = 10; + this.step = 1; + this.orientation = Orientation.horizontal; + this.mode = SliderMode.singleValue; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + if (e.key === keyHome) { + e.preventDefault(); + this.value = `${this.min}`; + } else if (e.key === keyEnd) { + e.preventDefault(); + this.value = `${this.max}`; + } else if (!e.shiftKey) { + switch (e.key) { + case keyArrowRight: + case keyArrowUp: + e.preventDefault(); + this.increment(); + break; + case keyArrowLeft: + case keyArrowDown: + e.preventDefault(); + this.decrement(); + break; + } + } + }; + this.setupTrackConstraints = () => { + const clientRect = this.track.getBoundingClientRect(); + this.trackWidth = this.track.clientWidth; + this.trackMinWidth = this.track.clientLeft; + this.trackHeight = clientRect.bottom; + this.trackMinHeight = clientRect.top; + this.trackLeft = this.getBoundingClientRect().left; + if (this.trackWidth === 0) { + this.trackWidth = 1; + } + }; + this.setupListeners = (remove = false) => { + const eventAction = `${remove ? "remove" : "add"}EventListener`; + this[eventAction]("keydown", this.keypressHandler); + this[eventAction]("mousedown", this.handleMouseDown); + this.thumb[eventAction]("mousedown", this.handleThumbMouseDown, { + passive: true + }); + this.thumb[eventAction]("touchstart", this.handleThumbMouseDown, { + passive: true + }); + if (remove) { + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + } + }; + this.initialValue = ""; + this.handleThumbMouseDown = (event) => { + if (event) { + if (this.readOnly || this.disabled || event.defaultPrevented) { + return; + } + event.target.focus(); + } + const eventAction = `${event !== null ? "add" : "remove"}EventListener`; + window[eventAction]("mouseup", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchmove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchend", this.handleWindowMouseUp); + this.isDragging = event !== null; + }; + this.handleMouseMove = (e) => { + if (this.readOnly || this.disabled || e.defaultPrevented) { + return; + } + const sourceEvent = window.TouchEvent && e instanceof TouchEvent ? e.touches[0] : e; + const eventValue = this.orientation === Orientation.horizontal ? sourceEvent.pageX - document.documentElement.scrollLeft - this.trackLeft : sourceEvent.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(eventValue)}`; + }; + this.calculateNewValue = (rawValue) => { + const newPosition = convertPixelToPercent(rawValue, this.orientation === Orientation.horizontal ? this.trackMinWidth : this.trackMinHeight, this.orientation === Orientation.horizontal ? this.trackWidth : this.trackHeight, this.direction); + const newValue = (this.max - this.min) * newPosition + this.min; + return this.convertToConstrainedValue(newValue); + }; + this.handleWindowMouseUp = (event) => { + this.stopDragging(); + }; + this.stopDragging = () => { + this.isDragging = false; + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + }; + this.handleMouseDown = (e) => { + const eventAction = `${e !== null ? "add" : "remove"}EventListener`; + if (e === null || !this.disabled && !this.readOnly) { + window[eventAction]("mouseup", this.handleWindowMouseUp); + window.document[eventAction]("mouseleave", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove); + if (e) { + e.preventDefault(); + this.setupTrackConstraints(); + e.target.focus(); + const controlValue = this.orientation === Orientation.horizontal ? e.pageX - document.documentElement.scrollLeft - this.trackLeft : e.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(controlValue)}`; + } + } + }; + this.convertToConstrainedValue = (value) => { + if (isNaN(value)) { + value = this.min; + } + let constrainedValue = value - this.min; + const roundedConstrainedValue = Math.round(constrainedValue / this.step); + const remainderValue = constrainedValue - roundedConstrainedValue * (this.stepMultiplier * this.step) / this.stepMultiplier; + constrainedValue = remainderValue >= Number(this.step) / 2 ? constrainedValue - remainderValue + Number(this.step) : constrainedValue - remainderValue; + return constrainedValue + this.min; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * @internal + */ + valueChanged(previous, next) { + super.valueChanged(previous, next); + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + this.$emit("change"); + } + minChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.min = `${this.min}`; + } + this.validate(); + } + maxChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.max = `${this.max}`; + } + this.validate(); + } + stepChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.step = `${this.step}`; + } + this.updateStepMultiplier(); + this.validate(); + } + orientationChanged() { + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "range"); + this.direction = getDirection(this); + this.updateStepMultiplier(); + this.setupTrackConstraints(); + this.setupListeners(); + this.setupDefaultValue(); + this.setThumbPositionForOrientation(this.direction); + } + /** + * @internal + */ + disconnectedCallback() { + this.setupListeners(true); + } + /** + * Increment the value by the step + * + * @public + */ + increment() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) + Number(this.step) : Number(this.value) - Number(this.step); + const incrementedVal = this.convertToConstrainedValue(newVal); + const incrementedValString = incrementedVal < Number(this.max) ? `${incrementedVal}` : `${this.max}`; + this.value = incrementedValString; + } + /** + * Decrement the value by the step + * + * @public + */ + decrement() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) - Number(this.step) : Number(this.value) + Number(this.step); + const decrementedVal = this.convertToConstrainedValue(newVal); + const decrementedValString = decrementedVal > Number(this.min) ? `${decrementedVal}` : `${this.min}`; + this.value = decrementedValString; + } + /** + * Places the thumb based on the current value + * + * @public + * @param direction - writing mode + */ + setThumbPositionForOrientation(direction) { + const newPct = convertPixelToPercent(Number(this.value), Number(this.min), Number(this.max), direction); + const percentage = (1 - newPct) * 100; + if (this.orientation === Orientation.horizontal) { + this.position = this.isDragging ? `right: ${percentage}%; transition: none;` : `right: ${percentage}%; transition: all 0.2s ease;`; + } else { + this.position = this.isDragging ? `bottom: ${percentage}%; transition: none;` : `bottom: ${percentage}%; transition: all 0.2s ease;`; + } + } + /** + * Update the step multiplier used to ensure rounding errors from steps that + * are not whole numbers + */ + updateStepMultiplier() { + const stepString = this.step + ""; + const decimalPlacesOfStep = !!(this.step % 1) ? stepString.length - stepString.indexOf(".") - 1 : 0; + this.stepMultiplier = Math.pow(10, decimalPlacesOfStep); + } + get midpoint() { + return `${this.convertToConstrainedValue((this.max + this.min) / 2)}`; + } + setupDefaultValue() { + if (typeof this.value === "string") { + if (this.value.length === 0) { + this.initialValue = this.midpoint; + } else { + const value = parseFloat(this.value); + if (!Number.isNaN(value) && (value < this.min || value > this.max)) { + this.value = this.midpoint; + } + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Slider.prototype, "readOnly", void 0); + __decorate([ + observable + ], Slider.prototype, "direction", void 0); + __decorate([ + observable + ], Slider.prototype, "isDragging", void 0); + __decorate([ + observable + ], Slider.prototype, "position", void 0); + __decorate([ + observable + ], Slider.prototype, "trackWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "trackLeft", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "valueTextFormatter", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "step", void 0); + __decorate([ + attr + ], Slider.prototype, "orientation", void 0); + __decorate([ + attr + ], Slider.prototype, "mode", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js + var init_slider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js"() { + init_slider_template(); + init_slider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js + var init_switch_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js + var _Switch, FormAssociatedSwitch; + var init_switch_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Switch = class extends FoundationElement { + }; + FormAssociatedSwitch = class extends CheckableFormAssociated(_Switch) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js + var Switch; + var init_switch = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_switch_form_associated(); + Switch = class extends FormAssociatedSwitch { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + this.readOnly ? this.classList.add("readonly") : this.classList.remove("readonly"); + } + /** + * @internal + */ + checkedChanged(prev, next) { + super.checkedChanged(prev, next); + this.checked ? this.classList.add("checked") : this.classList.remove("checked"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Switch.prototype, "readOnly", void 0); + __decorate([ + observable + ], Switch.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js + var init_switch2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js"() { + init_switch_template(); + init_switch(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js + var tabPanelTemplate; + var init_tab_panel_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js"() { + init_esm(); + tabPanelTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js + var TabPanel; + var init_tab_panel = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js"() { + init_foundation_element(); + TabPanel = class extends FoundationElement { + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js + var init_tab_panel2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js"() { + init_tab_panel_template(); + init_tab_panel(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js + var tabTemplate; + var init_tab_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js"() { + init_esm(); + tabTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js + var Tab; + var init_tab = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Tab = class extends FoundationElement { + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tab.prototype, "disabled", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js + var init_tab2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js"() { + init_tab_template(); + init_tab(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js + var tabsTemplate; + var init_tabs_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js"() { + init_esm(); + init_start_end(); + tabsTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js + var TabsOrientation, Tabs; + var init_tabs = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TabsOrientation = { + vertical: "vertical", + horizontal: "horizontal" + }; + Tabs = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = TabsOrientation.horizontal; + this.activeindicator = true; + this.showActiveIndicator = true; + this.prevActiveTabIndex = 0; + this.activeTabIndex = 0; + this.ticking = false; + this.change = () => { + this.$emit("change", this.activetab); + }; + this.isDisabledElement = (el2) => { + return el2.getAttribute("aria-disabled") === "true"; + }; + this.isHiddenElement = (el2) => { + return el2.hasAttribute("hidden"); + }; + this.isFocusableElement = (el2) => { + return !this.isDisabledElement(el2) && !this.isHiddenElement(el2); + }; + this.setTabs = () => { + const gridHorizontalProperty = "gridColumn"; + const gridVerticalProperty = "gridRow"; + const gridProperty = this.isHorizontal() ? gridHorizontalProperty : gridVerticalProperty; + this.activeTabIndex = this.getActiveIndex(); + this.showActiveIndicator = false; + this.tabs.forEach((tab, index2) => { + if (tab.slot === "tab") { + const isActiveTab = this.activeTabIndex === index2 && this.isFocusableElement(tab); + if (this.activeindicator && this.isFocusableElement(tab)) { + this.showActiveIndicator = true; + } + const tabId = this.tabIds[index2]; + const tabpanelId = this.tabpanelIds[index2]; + tab.setAttribute("id", tabId); + tab.setAttribute("aria-selected", isActiveTab ? "true" : "false"); + tab.setAttribute("aria-controls", tabpanelId); + tab.addEventListener("click", this.handleTabClick); + tab.addEventListener("keydown", this.handleTabKeyDown); + tab.setAttribute("tabindex", isActiveTab ? "0" : "-1"); + if (isActiveTab) { + this.activetab = tab; + this.activeid = tabId; + } + } + tab.style[gridHorizontalProperty] = ""; + tab.style[gridVerticalProperty] = ""; + tab.style[gridProperty] = `${index2 + 1}`; + !this.isHorizontal() ? tab.classList.add("vertical") : tab.classList.remove("vertical"); + }); + }; + this.setTabPanels = () => { + this.tabpanels.forEach((tabpanel, index2) => { + const tabId = this.tabIds[index2]; + const tabpanelId = this.tabpanelIds[index2]; + tabpanel.setAttribute("id", tabpanelId); + tabpanel.setAttribute("aria-labelledby", tabId); + this.activeTabIndex !== index2 ? tabpanel.setAttribute("hidden", "") : tabpanel.removeAttribute("hidden"); + }); + }; + this.handleTabClick = (event) => { + const selectedTab = event.currentTarget; + if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) { + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = this.tabs.indexOf(selectedTab); + this.setComponent(); + } + }; + this.handleTabKeyDown = (event) => { + if (this.isHorizontal()) { + switch (event.key) { + case keyArrowLeft: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowRight: + event.preventDefault(); + this.adjustForward(event); + break; + } + } else { + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowDown: + event.preventDefault(); + this.adjustForward(event); + break; + } + } + switch (event.key) { + case keyHome: + event.preventDefault(); + this.adjust(-this.activeTabIndex); + break; + case keyEnd: + event.preventDefault(); + this.adjust(this.tabs.length - this.activeTabIndex - 1); + break; + } + }; + this.adjustForward = (e) => { + const group = this.tabs; + let index2 = 0; + index2 = this.activetab ? group.indexOf(this.activetab) + 1 : 1; + if (index2 === group.length) { + index2 = 0; + } + while (index2 < group.length && group.length > 1) { + if (this.isFocusableElement(group[index2])) { + this.moveToTabByIndex(group, index2); + break; + } else if (this.activetab && index2 === group.indexOf(this.activetab)) { + break; + } else if (index2 + 1 >= group.length) { + index2 = 0; + } else { + index2 += 1; + } + } + }; + this.adjustBackward = (e) => { + const group = this.tabs; + let index2 = 0; + index2 = this.activetab ? group.indexOf(this.activetab) - 1 : 0; + index2 = index2 < 0 ? group.length - 1 : index2; + while (index2 >= 0 && group.length > 1) { + if (this.isFocusableElement(group[index2])) { + this.moveToTabByIndex(group, index2); + break; + } else if (index2 - 1 < 0) { + index2 = group.length - 1; + } else { + index2 -= 1; + } + } + }; + this.moveToTabByIndex = (group, index2) => { + const tab = group[index2]; + this.activetab = tab; + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = index2; + tab.focus(); + this.setComponent(); + }; + } + /** + * @internal + */ + orientationChanged() { + if (this.$fastController.isConnected) { + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + activeidChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabsChanged() { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabpanelsChanged() { + if (this.$fastController.isConnected && this.tabpanels.length <= this.tabs.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + getActiveIndex() { + const id = this.activeid; + if (id !== void 0) { + return this.tabIds.indexOf(this.activeid) === -1 ? 0 : this.tabIds.indexOf(this.activeid); + } else { + return 0; + } + } + getTabIds() { + return this.tabs.map((tab) => { + var _a; + return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`; + }); + } + getTabPanelIds() { + return this.tabpanels.map((tabPanel) => { + var _a; + return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`; + }); + } + setComponent() { + if (this.activeTabIndex !== this.prevActiveTabIndex) { + this.activeid = this.tabIds[this.activeTabIndex]; + this.focusTab(); + this.change(); + } + } + isHorizontal() { + return this.orientation === TabsOrientation.horizontal; + } + handleActiveIndicatorPosition() { + if (this.showActiveIndicator && this.activeindicator && this.activeTabIndex !== this.prevActiveTabIndex) { + if (this.ticking) { + this.ticking = false; + } else { + this.ticking = true; + this.animateActiveIndicator(); + } + } + } + animateActiveIndicator() { + this.ticking = true; + const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow"; + const translateProperty = this.isHorizontal() ? "translateX" : "translateY"; + const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop"; + const prev = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + const next = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`; + const dif = next - prev; + this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`; + this.activeIndicatorRef.classList.add("activeIndicatorTransition"); + this.activeIndicatorRef.addEventListener("transitionend", () => { + this.ticking = false; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`; + this.activeIndicatorRef.classList.remove("activeIndicatorTransition"); + }); + } + /** + * The adjust method for FASTTabs + * @public + * @remarks + * This method allows the active index to be adjusted by numerical increments + */ + adjust(adjustment) { + const focusableTabs = this.tabs.filter((t) => this.isFocusableElement(t)); + const currentActiveTabIndex = focusableTabs.indexOf(this.activetab); + const nextTabIndex = limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment); + const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]); + if (nextIndex > -1) { + this.moveToTabByIndex(this.tabs, nextIndex); + } + } + focusTab() { + this.tabs[this.activeTabIndex].focus(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.activeTabIndex = this.getActiveIndex(); + } + }; + __decorate([ + attr + ], Tabs.prototype, "orientation", void 0); + __decorate([ + attr + ], Tabs.prototype, "activeid", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabs", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabpanels", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Tabs.prototype, "activeindicator", void 0); + __decorate([ + observable + ], Tabs.prototype, "activeIndicatorRef", void 0); + __decorate([ + observable + ], Tabs.prototype, "showActiveIndicator", void 0); + applyMixins(Tabs, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js + var init_tabs2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js"() { + init_tabs_template(); + init_tabs(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js + var _TextArea, FormAssociatedTextArea; + var init_text_area_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextArea = class extends FoundationElement { + }; + FormAssociatedTextArea = class extends FormAssociated(_TextArea) { + constructor() { + super(...arguments); + this.proxy = document.createElement("textarea"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js + var TextAreaResize; + var init_text_area_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js"() { + TextAreaResize = { + /** + * No resize. + */ + none: "none", + /** + * Resize vertically and horizontally. + */ + both: "both", + /** + * Resize horizontally. + */ + horizontal: "horizontal", + /** + * Resize vertically. + */ + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js + var TextArea; + var init_text_area = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js"() { + init_tslib_es6(); + init_esm(); + init_text_field(); + init_apply_mixins(); + init_text_area_form_associated(); + init_text_area_options(); + TextArea = class extends FormAssociatedTextArea { + constructor() { + super(...arguments); + this.resize = TextAreaResize.none; + this.cols = 20; + this.handleTextInput = () => { + this.value = this.control.value; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.readOnly = this.readOnly; + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.autofocus = this.autofocus; + } + } + listChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.setAttribute("list", this.list); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.maxLength = this.maxlength; + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.minLength = this.minlength; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * Selects all the text in the text area + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "readOnly", void 0); + __decorate([ + attr + ], TextArea.prototype, "resize", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], TextArea.prototype, "formId", void 0); + __decorate([ + attr + ], TextArea.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "minlength", void 0); + __decorate([ + attr + ], TextArea.prototype, "name", void 0); + __decorate([ + attr + ], TextArea.prototype, "placeholder", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "cols", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "rows", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextArea.prototype, "defaultSlottedNodes", void 0); + applyMixins(TextArea, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js + var textAreaTemplate; + var init_text_area_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js"() { + init_esm(); + init_text_area(); + textAreaTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js + var init_text_area2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js"() { + init_text_area_template(); + init_text_area(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js + var textFieldTemplate; + var init_text_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js"() { + init_esm(); + init_start_end(); + init_whitespace_filter(); + textFieldTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js + var init_text_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js"() { + init_text_field_template(); + init_text_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js + var init_toolbar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js + function getRootActiveElement(element) { + const rootNode = element.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.activeElement; + } + return document.activeElement; + } + var init_root_active_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js + var ToolbarArrowKeyMap, Toolbar, DelegatesARIAToolbar; + var init_toolbar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + init_direction(); + init_root_active_element(); + ToolbarArrowKeyMap = Object.freeze({ + [ArrowKeys.ArrowUp]: { + [Orientation.vertical]: -1 + }, + [ArrowKeys.ArrowDown]: { + [Orientation.vertical]: 1 + }, + [ArrowKeys.ArrowLeft]: { + [Orientation.horizontal]: { + [Direction.ltr]: -1, + [Direction.rtl]: 1 + } + }, + [ArrowKeys.ArrowRight]: { + [Orientation.horizontal]: { + [Direction.ltr]: 1, + [Direction.rtl]: -1 + } + } + }); + Toolbar = class _Toolbar extends FoundationElement { + constructor() { + super(...arguments); + this._activeIndex = 0; + this.direction = Direction.ltr; + this.orientation = Orientation.horizontal; + } + /** + * The index of the currently focused element, clamped between 0 and the last element. + * + * @internal + */ + get activeIndex() { + Observable.track(this, "activeIndex"); + return this._activeIndex; + } + set activeIndex(value) { + if (this.$fastController.isConnected) { + this._activeIndex = limit(0, this.focusableElements.length - 1, value); + Observable.notify(this, "activeIndex"); + } + } + slottedItemsChanged() { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * Set the activeIndex when a focusable element in the toolbar is clicked. + * + * @internal + */ + mouseDownHandler(e) { + var _a; + const activeIndex = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a.findIndex((x) => x.contains(e.target)); + if (activeIndex > -1 && this.activeIndex !== activeIndex) { + this.setFocusedElement(activeIndex); + } + return true; + } + childItemsChanged(prev, next) { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + } + /** + * When the toolbar receives focus, set the currently active element as focused. + * + * @internal + */ + focusinHandler(e) { + const relatedTarget = e.relatedTarget; + if (!relatedTarget || this.contains(relatedTarget)) { + return; + } + this.setFocusedElement(); + } + /** + * Determines a value that can be used to iterate a list with the arrow keys. + * + * @param this - An element with an orientation and direction + * @param key - The event key value + * @internal + */ + getDirectionalIncrementer(key) { + var _a, _b, _c, _d, _e; + return (_e = (_c = (_b = (_a = ToolbarArrowKeyMap[key]) === null || _a === void 0 ? void 0 : _a[this.orientation]) === null || _b === void 0 ? void 0 : _b[this.direction]) !== null && _c !== void 0 ? _c : (_d = ToolbarArrowKeyMap[key]) === null || _d === void 0 ? void 0 : _d[this.orientation]) !== null && _e !== void 0 ? _e : 0; + } + /** + * Handle keyboard events for the toolbar. + * + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (!(key in ArrowKeys) || e.defaultPrevented || e.shiftKey) { + return true; + } + const incrementer = this.getDirectionalIncrementer(key); + if (!incrementer) { + return !e.target.closest("[role=radiogroup]"); + } + const nextIndex = this.activeIndex + incrementer; + if (this.focusableElements[nextIndex]) { + e.preventDefault(); + } + this.setFocusedElement(nextIndex); + return true; + } + /** + * get all the slotted elements + * @internal + */ + get allSlottedItems() { + return [ + ...this.start.assignedElements(), + ...this.slottedItems, + ...this.end.assignedElements() + ]; + } + /** + * Prepare the slotted elements which can be focusable. + * + * @internal + */ + reduceFocusableElements() { + var _a; + const previousFocusedElement = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a[this.activeIndex]; + this.focusableElements = this.allSlottedItems.reduce(_Toolbar.reduceFocusableItems, []); + const adjustedActiveIndex = this.focusableElements.indexOf(previousFocusedElement); + this.activeIndex = Math.max(0, adjustedActiveIndex); + this.setFocusableElements(); + } + /** + * Set the activeIndex and focus the corresponding control. + * + * @param activeIndex - The new index to set + * @internal + */ + setFocusedElement(activeIndex = this.activeIndex) { + this.activeIndex = activeIndex; + this.setFocusableElements(); + if (this.focusableElements[this.activeIndex] && // Don't focus the toolbar element if some event handlers moved + // the focus on another element in the page. + this.contains(getRootActiveElement(this))) { + this.focusableElements[this.activeIndex].focus(); + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceFocusableItems(elements3, element) { + var _a, _b, _c, _d; + const isRoleRadio = element.getAttribute("role") === "radio"; + const isFocusableFastElement = (_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus; + const hasFocusableShadow = Array.from((_d = (_c = element.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll("*")) !== null && _d !== void 0 ? _d : []).some((x) => isFocusable(x)); + if (!element.hasAttribute("disabled") && !element.hasAttribute("hidden") && (isFocusable(element) || isRoleRadio || isFocusableFastElement || hasFocusableShadow)) { + elements3.push(element); + return elements3; + } + if (element.childElementCount) { + return elements3.concat(Array.from(element.children).reduce(_Toolbar.reduceFocusableItems, [])); + } + return elements3; + } + /** + * @internal + */ + setFocusableElements() { + if (this.$fastController.isConnected && this.focusableElements.length > 0) { + this.focusableElements.forEach((element, index2) => { + element.tabIndex = this.activeIndex === index2 ? 0 : -1; + }); + } + } + }; + __decorate([ + observable + ], Toolbar.prototype, "direction", void 0); + __decorate([ + attr + ], Toolbar.prototype, "orientation", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedItems", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedLabel", void 0); + __decorate([ + observable + ], Toolbar.prototype, "childItems", void 0); + DelegatesARIAToolbar = class { + }; + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], DelegatesARIAToolbar.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], DelegatesARIAToolbar.prototype, "ariaLabel", void 0); + applyMixins(DelegatesARIAToolbar, ARIAGlobalStatesAndProperties); + applyMixins(Toolbar, StartEnd, DelegatesARIAToolbar); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js + var init_toolbar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js"() { + init_toolbar_template(); + init_toolbar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js + var init_tooltip_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js + var TooltipPosition; + var init_tooltip_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js"() { + TooltipPosition = { + /** + * The tooltip is positioned above the element + */ + top: "top", + /** + * The tooltip is positioned to the right of the element + */ + right: "right", + /** + * The tooltip is positioned below the element + */ + bottom: "bottom", + /** + * The tooltip is positioned to the left of the element + */ + left: "left", + /** + * The tooltip is positioned before the element + */ + start: "start", + /** + * The tooltip is positioned after the element + */ + end: "end", + /** + * The tooltip is positioned above the element and to the left + */ + topLeft: "top-left", + /** + * The tooltip is positioned above the element and to the right + */ + topRight: "top-right", + /** + * The tooltip is positioned below the element and to the left + */ + bottomLeft: "bottom-left", + /** + * The tooltip is positioned below the element and to the right + */ + bottomRight: "bottom-right", + /** + * The tooltip is positioned above the element and to the left + */ + topStart: "top-start", + /** + * The tooltip is positioned above the element and to the right + */ + topEnd: "top-end", + /** + * The tooltip is positioned below the element and to the left + */ + bottomStart: "bottom-start", + /** + * The tooltip is positioned below the element and to the right + */ + bottomEnd: "bottom-end" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js + var Tooltip2; + var init_tooltip = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + init_tooltip_options(); + Tooltip2 = class extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.delay = 300; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.horizontalInset = "false"; + this.verticalInset = "false"; + this.horizontalScaling = "content"; + this.verticalScaling = "content"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = void 0; + this.tooltipVisible = false; + this.currentDirection = Direction.ltr; + this.showDelayTimer = null; + this.hideDelayTimer = null; + this.isAnchorHoveredFocused = false; + this.isRegionHovered = false; + this.handlePositionChange = (ev) => { + this.classList.toggle("top", this.region.verticalPosition === "start"); + this.classList.toggle("bottom", this.region.verticalPosition === "end"); + this.classList.toggle("inset-top", this.region.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.region.verticalPosition === "insetEnd"); + this.classList.toggle("center-vertical", this.region.verticalPosition === "center"); + this.classList.toggle("left", this.region.horizontalPosition === "start"); + this.classList.toggle("right", this.region.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.region.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.region.horizontalPosition === "insetEnd"); + this.classList.toggle("center-horizontal", this.region.horizontalPosition === "center"); + }; + this.handleRegionMouseOver = (ev) => { + this.isRegionHovered = true; + }; + this.handleRegionMouseOut = (ev) => { + this.isRegionHovered = false; + this.startHideDelayTimer(); + }; + this.handleAnchorMouseOver = (ev) => { + if (this.tooltipVisible) { + this.isAnchorHoveredFocused = true; + return; + } + this.startShowDelayTimer(); + }; + this.handleAnchorMouseOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.handleAnchorFocusIn = (ev) => { + this.startShowDelayTimer(); + }; + this.handleAnchorFocusOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.startHideDelayTimer = () => { + this.clearHideDelayTimer(); + if (!this.tooltipVisible) { + return; + } + this.hideDelayTimer = window.setTimeout(() => { + this.updateTooltipVisibility(); + }, 60); + }; + this.clearHideDelayTimer = () => { + if (this.hideDelayTimer !== null) { + clearTimeout(this.hideDelayTimer); + this.hideDelayTimer = null; + } + }; + this.startShowDelayTimer = () => { + if (this.isAnchorHoveredFocused) { + return; + } + if (this.delay > 1) { + if (this.showDelayTimer === null) + this.showDelayTimer = window.setTimeout(() => { + this.startHover(); + }, this.delay); + return; + } + this.startHover(); + }; + this.startHover = () => { + this.isAnchorHoveredFocused = true; + this.updateTooltipVisibility(); + }; + this.clearShowDelayTimer = () => { + if (this.showDelayTimer !== null) { + clearTimeout(this.showDelayTimer); + this.showDelayTimer = null; + } + }; + this.getAnchor = () => { + const rootNode = this.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.getElementById(this.anchor); + } + return document.getElementById(this.anchor); + }; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && this.tooltipVisible) { + switch (e.key) { + case keyEscape: + this.isAnchorHoveredFocused = false; + this.updateTooltipVisibility(); + this.$emit("dismiss"); + break; + } + } + }; + this.updateTooltipVisibility = () => { + if (this.visible === false) { + this.hideTooltip(); + } else if (this.visible === true) { + this.showTooltip(); + return; + } else { + if (this.isAnchorHoveredFocused || this.isRegionHovered) { + this.showTooltip(); + return; + } + this.hideTooltip(); + } + }; + this.showTooltip = () => { + if (this.tooltipVisible) { + return; + } + this.currentDirection = getDirection(this); + this.tooltipVisible = true; + document.addEventListener("keydown", this.handleDocumentKeydown); + DOM.queueUpdate(this.setRegionProps); + }; + this.hideTooltip = () => { + if (!this.tooltipVisible) { + return; + } + this.clearHideDelayTimer(); + if (this.region !== null && this.region !== void 0) { + this.region.removeEventListener("positionchange", this.handlePositionChange); + this.region.viewportElement = null; + this.region.anchorElement = null; + this.region.removeEventListener("mouseover", this.handleRegionMouseOver); + this.region.removeEventListener("mouseout", this.handleRegionMouseOut); + } + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.tooltipVisible = false; + }; + this.setRegionProps = () => { + if (!this.tooltipVisible) { + return; + } + this.region.viewportElement = this.viewportElement; + this.region.anchorElement = this.anchorElement; + this.region.addEventListener("positionchange", this.handlePositionChange); + this.region.addEventListener("mouseover", this.handleRegionMouseOver, { + passive: true + }); + this.region.addEventListener("mouseout", this.handleRegionMouseOut, { + passive: true + }); + }; + } + visibleChanged() { + if (this.$fastController.isConnected) { + this.updateTooltipVisibility(); + this.updateLayout(); + } + } + anchorChanged() { + if (this.$fastController.isConnected) { + this.anchorElement = this.getAnchor(); + } + } + positionChanged() { + if (this.$fastController.isConnected) { + this.updateLayout(); + } + } + anchorElementChanged(oldValue) { + if (this.$fastController.isConnected) { + if (oldValue !== null && oldValue !== void 0) { + oldValue.removeEventListener("mouseover", this.handleAnchorMouseOver); + oldValue.removeEventListener("mouseout", this.handleAnchorMouseOut); + oldValue.removeEventListener("focusin", this.handleAnchorFocusIn); + oldValue.removeEventListener("focusout", this.handleAnchorFocusOut); + } + if (this.anchorElement !== null && this.anchorElement !== void 0) { + this.anchorElement.addEventListener("mouseover", this.handleAnchorMouseOver, { passive: true }); + this.anchorElement.addEventListener("mouseout", this.handleAnchorMouseOut, { passive: true }); + this.anchorElement.addEventListener("focusin", this.handleAnchorFocusIn, { + passive: true + }); + this.anchorElement.addEventListener("focusout", this.handleAnchorFocusOut, { passive: true }); + const anchorId = this.anchorElement.id; + if (this.anchorElement.parentElement !== null) { + this.anchorElement.parentElement.querySelectorAll(":hover").forEach((element) => { + if (element.id === anchorId) { + this.startShowDelayTimer(); + } + }); + } + } + if (this.region !== null && this.region !== void 0 && this.tooltipVisible) { + this.region.anchorElement = this.anchorElement; + } + this.updateLayout(); + } + } + viewportElementChanged() { + if (this.region !== null && this.region !== void 0) { + this.region.viewportElement = this.viewportElement; + } + this.updateLayout(); + } + connectedCallback() { + super.connectedCallback(); + this.anchorElement = this.getAnchor(); + this.updateTooltipVisibility(); + } + disconnectedCallback() { + this.hideTooltip(); + this.clearShowDelayTimer(); + this.clearHideDelayTimer(); + super.disconnectedCallback(); + } + /** + * updated the properties being passed to the anchored region + */ + updateLayout() { + this.verticalPositioningMode = "locktodefault"; + this.horizontalPositioningMode = "locktodefault"; + switch (this.position) { + case TooltipPosition.top: + case TooltipPosition.bottom: + this.verticalDefaultPosition = this.position; + this.horizontalDefaultPosition = "center"; + break; + case TooltipPosition.right: + case TooltipPosition.left: + case TooltipPosition.start: + case TooltipPosition.end: + this.verticalDefaultPosition = "center"; + this.horizontalDefaultPosition = this.position; + break; + case TooltipPosition.topLeft: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.topRight: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.bottomLeft: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.bottomRight: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.topStart: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.topEnd: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "end"; + break; + case TooltipPosition.bottomStart: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.bottomEnd: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "end"; + break; + default: + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = "center"; + break; + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tooltip2.prototype, "visible", void 0); + __decorate([ + attr + ], Tooltip2.prototype, "anchor", void 0); + __decorate([ + attr + ], Tooltip2.prototype, "delay", void 0); + __decorate([ + attr + ], Tooltip2.prototype, "position", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], Tooltip2.prototype, "autoUpdateMode", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock" }) + ], Tooltip2.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock" }) + ], Tooltip2.prototype, "verticalViewportLock", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "anchorElement", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "viewportElement", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "verticalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "horizontalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "horizontalInset", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "verticalInset", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "horizontalScaling", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "verticalScaling", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "verticalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "tooltipVisible", void 0); + __decorate([ + observable + ], Tooltip2.prototype, "currentDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js + var init_tooltip2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js"() { + init_tooltip_template(); + init_tooltip(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js + var init_tree_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js + function isTreeItemElement(el2) { + return isHTMLElement(el2) && el2.getAttribute("role") === "treeitem"; + } + var TreeItem; + var init_tree_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TreeItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.expanded = false; + this.focusable = false; + this.isNestedItem = () => { + return isTreeItemElement(this.parentElement); + }; + this.handleExpandCollapseButtonClick = (e) => { + if (!this.disabled && !e.defaultPrevented) { + this.expanded = !this.expanded; + } + }; + this.handleFocus = (e) => { + this.setAttribute("tabindex", "0"); + }; + this.handleBlur = (e) => { + this.setAttribute("tabindex", "-1"); + }; + } + expandedChanged() { + if (this.$fastController.isConnected) { + this.$emit("expanded-change", this); + } + } + selectedChanged() { + if (this.$fastController.isConnected) { + this.$emit("selected-change", this); + } + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.items.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = true; + } + }); + } + } + /** + * Places document focus on a tree item + * + * @public + * @param el - the element to focus + */ + static focusItem(el2) { + el2.focusable = true; + el2.focus(); + } + /** + * Gets number of children + * + * @internal + */ + childItemLength() { + const treeChildren = this.childItems.filter((item) => { + return isTreeItemElement(item); + }); + return treeChildren ? treeChildren.length : 0; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "expanded", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "selected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "disabled", void 0); + __decorate([ + observable + ], TreeItem.prototype, "focusable", void 0); + __decorate([ + observable + ], TreeItem.prototype, "childItems", void 0); + __decorate([ + observable + ], TreeItem.prototype, "items", void 0); + __decorate([ + observable + ], TreeItem.prototype, "nested", void 0); + __decorate([ + observable + ], TreeItem.prototype, "renderCollapsedChildren", void 0); + applyMixins(TreeItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js + var init_tree_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js"() { + init_tree_item_template(); + init_tree_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js + var init_tree_view_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js + var TreeView; + var init_tree_view = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_tree_item(); + init_foundation_element(); + TreeView = class extends FoundationElement { + constructor() { + super(...arguments); + this.currentFocused = null; + this.handleFocus = (e) => { + if (this.slottedTreeItems.length < 1) { + return; + } + if (e.target === this) { + if (this.currentFocused === null) { + this.currentFocused = this.getValidFocusableItem(); + } + if (this.currentFocused !== null) { + TreeItem.focusItem(this.currentFocused); + } + return; + } + if (this.contains(e.target)) { + this.setAttribute("tabindex", "-1"); + this.currentFocused = e.target; + } + }; + this.handleBlur = (e) => { + if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) { + this.setAttribute("tabindex", "0"); + } + }; + this.handleKeyDown = (e) => { + if (e.defaultPrevented) { + return; + } + if (this.slottedTreeItems.length < 1) { + return true; + } + const treeItems = this.getVisibleNodes(); + switch (e.key) { + case keyHome: + if (treeItems.length) { + TreeItem.focusItem(treeItems[0]); + } + return; + case keyEnd: + if (treeItems.length) { + TreeItem.focusItem(treeItems[treeItems.length - 1]); + } + return; + case keyArrowLeft: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) { + item.expanded = false; + } else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) { + TreeItem.focusItem(item.parentElement); + } + } + return false; + case keyArrowRight: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) { + item.expanded = true; + } else if (item instanceof TreeItem && item.childItemLength() > 0) { + this.focusNextNode(1, e.target); + } + } + return; + case keyArrowDown: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(1, e.target); + } + return; + case keyArrowUp: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(-1, e.target); + } + return; + case keyEnter: + this.handleClick(e); + return; + } + return true; + }; + this.handleSelectedChange = (e) => { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (item.selected) { + if (this.currentSelected && this.currentSelected !== item) { + this.currentSelected.selected = false; + } + this.currentSelected = item; + } else if (!item.selected && this.currentSelected === item) { + this.currentSelected = null; + } + return; + }; + this.setItems = () => { + const selectedItem = this.treeView.querySelector("[aria-selected='true']"); + this.currentSelected = selectedItem; + if (this.currentFocused === null || !this.contains(this.currentFocused)) { + this.currentFocused = this.getValidFocusableItem(); + } + this.nested = this.checkForNestedItems(); + const treeItems = this.getVisibleNodes(); + treeItems.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = this.nested; + } + }); + }; + this.isFocusableElement = (el2) => { + return isTreeItemElement(el2); + }; + this.isSelectedElement = (el2) => { + return el2.selected; + }; + } + slottedTreeItemsChanged() { + if (this.$fastController.isConnected) { + this.setItems(); + } + } + connectedCallback() { + super.connectedCallback(); + this.setAttribute("tabindex", "0"); + DOM.queueUpdate(() => { + this.setItems(); + }); + } + /** + * Handles click events bubbling up + * + * @internal + */ + handleClick(e) { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (!item.disabled) { + item.selected = !item.selected; + } + return; + } + /** + * Move focus to a tree item based on its offset from the provided item + */ + focusNextNode(delta, item) { + const visibleNodes = this.getVisibleNodes(); + if (!visibleNodes) { + return; + } + const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta]; + if (isHTMLElement(focusItem)) { + TreeItem.focusItem(focusItem); + } + } + /** + * checks if there are any nested tree items + */ + getValidFocusableItem() { + const treeItems = this.getVisibleNodes(); + let focusIndex = treeItems.findIndex(this.isSelectedElement); + if (focusIndex === -1) { + focusIndex = treeItems.findIndex(this.isFocusableElement); + } + if (focusIndex !== -1) { + return treeItems[focusIndex]; + } + return null; + } + /** + * checks if there are any nested tree items + */ + checkForNestedItems() { + return this.slottedTreeItems.some((node) => { + return isTreeItemElement(node) && node.querySelector("[role='treeitem']"); + }); + } + getVisibleNodes() { + return getDisplayedNodes(this, "[role='treeitem']") || []; + } + }; + __decorate([ + attr({ attribute: "render-collapsed-nodes" }) + ], TreeView.prototype, "renderCollapsedNodes", void 0); + __decorate([ + observable + ], TreeView.prototype, "currentSelected", void 0); + __decorate([ + observable + ], TreeView.prototype, "slottedTreeItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js + var init_tree_view2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js"() { + init_tree_view_template(); + init_tree_view(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js + var MatchMediaBehavior, MatchMediaStyleSheetBehavior, forcedColorsStylesheetBehavior, darkModeStylesheetBehavior, lightModeStylesheetBehavior; + var init_match_media_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js"() { + MatchMediaBehavior = class { + /** + * + * @param query - The media query to operate from. + */ + constructor(query) { + this.listenerCache = /* @__PURE__ */ new WeakMap(); + this.query = query; + } + /** + * Binds the behavior to the element. + * @param source - The element for which the behavior is bound. + */ + bind(source) { + const { query } = this; + const listener = this.constructListener(source); + listener.bind(query)(); + query.addListener(listener); + this.listenerCache.set(source, listener); + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + */ + unbind(source) { + const listener = this.listenerCache.get(source); + if (listener) { + this.query.removeListener(listener); + this.listenerCache.delete(source); + } + } + }; + MatchMediaStyleSheetBehavior = class _MatchMediaStyleSheetBehavior extends MatchMediaBehavior { + /** + * Constructs a {@link MatchMediaStyleSheetBehavior} instance. + * @param query - The media query to operate from. + * @param styles - The styles to coordinate with the query. + */ + constructor(query, styles) { + super(query); + this.styles = styles; + } + /** + * Defines a function to construct {@link MatchMediaStyleSheetBehavior | MatchMediaStyleSheetBehaviors} for + * a provided query. + * @param query - The media query to operate from. + * + * @public + * @example + * + * ```ts + * import { css } from "@microsoft/fast-element"; + * import { MatchMediaStyleSheetBehavior } from "@microsoft/fast-foundation"; + * + * const landscapeBehavior = MatchMediaStyleSheetBehavior.with( + * window.matchMedia("(orientation: landscape)") + * ); + * const styles = css` + * :host { + * width: 200px; + * height: 400px; + * } + * ` + * .withBehaviors(landscapeBehavior(css` + * :host { + * width: 400px; + * height: 200px; + * } + * `)) + * ``` + */ + static with(query) { + return (styles) => { + return new _MatchMediaStyleSheetBehavior(query, styles); + }; + } + /** + * Constructs a match-media listener for a provided element. + * @param source - the element for which to attach or detach styles. + * @internal + */ + constructListener(source) { + let attached = false; + const styles = this.styles; + return function listener() { + const { matches: matches2 } = this; + if (matches2 && !attached) { + source.$fastController.addStyles(styles); + attached = matches2; + } else if (!matches2 && attached) { + source.$fastController.removeStyles(styles); + attached = matches2; + } + }; + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + * @internal + */ + unbind(source) { + super.unbind(source); + source.$fastController.removeStyles(this.styles); + } + }; + forcedColorsStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(forced-colors)")); + darkModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: dark)")); + lightModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: light)")); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js + var init_property_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js + var disabledCursor; + var init_disabled = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js"() { + disabledCursor = "not-allowed"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js + function display(displayValue) { + return `${hidden}:host{display:${displayValue}}`; + } + var hidden; + var init_display = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js"() { + hidden = `:host([hidden]){display:none}`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js + var focusVisible; + var init_focus = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js"() { + init_dist2(); + focusVisible = canUseFocusVisible() ? "focus-visible" : "focus"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js + var init_style = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js"() { + init_disabled(); + init_display(); + init_focus(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js + var init_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js"() { + init_apply_mixins(); + init_composed_parent(); + init_match_media_stylesheet_behavior(); + init_property_stylesheet_behavior(); + init_style(); + init_direction(); + init_whitespace_filter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/index.js + var init_esm2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/index.js"() { + init_accordion_item2(); + init_accordion2(); + init_anchor2(); + init_anchored_region2(); + init_avatar2(); + init_badge2(); + init_breadcrumb_item2(); + init_breadcrumb2(); + init_button2(); + init_calendar2(); + init_card2(); + init_checkbox2(); + init_combobox2(); + init_data_grid2(); + init_design_system2(); + init_design_token(); + init_di2(); + init_dialog2(); + init_disclosure2(); + init_divider2(); + init_flipper2(); + init_form_associated2(); + init_foundation_element2(); + init_listbox_option2(); + init_listbox2(); + init_picker2(); + init_menu_item2(); + init_menu2(); + init_number_field2(); + init_patterns(); + init_progress_ring(); + init_progress(); + init_radio_group2(); + init_radio2(); + init_horizontal_scroll2(); + init_search2(); + init_select2(); + init_skeleton2(); + init_slider_label2(); + init_slider2(); + init_switch2(); + init_tab_panel2(); + init_tab2(); + init_tabs2(); + init_text_area2(); + init_text_field2(); + init_toolbar2(); + init_tooltip2(); + init_tree_item2(); + init_tree_view2(); + init_utilities(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js + function provideVSCodeDesignSystem(element) { + return DesignSystem.getOrCreate(element).withPrefix("vscode"); + } + var init_vscode_design_system = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js"() { + init_esm2(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js + function initThemeChangeListener(tokenMappings2) { + window.addEventListener("load", () => { + const observer = new MutationObserver(() => { + applyCurrentTheme(tokenMappings2); + }); + observer.observe(document.body, { + attributes: true, + attributeFilter: ["class"] + }); + applyCurrentTheme(tokenMappings2); + }); + } + function applyCurrentTheme(tokenMappings2) { + const styles = getComputedStyle(document.body); + const body = document.querySelector("body"); + if (body) { + const themeKind = body.getAttribute("data-vscode-theme-kind"); + for (const [vscodeTokenName, toolkitToken] of tokenMappings2) { + let value = styles.getPropertyValue(vscodeTokenName).toString(); + if (themeKind === "vscode-high-contrast") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + value = "transparent"; + } + if (toolkitToken.name === "button-icon-hover-background") { + value = "transparent"; + } + } else if (themeKind === "vscode-high-contrast-light") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + switch (toolkitToken.name) { + case "button-primary-hover-background": + value = "#0F4A85"; + break; + case "button-secondary-hover-background": + value = "transparent"; + break; + case "button-icon-hover-background": + value = "transparent"; + break; + } + } + } else { + if (toolkitToken.name === "contrast-active-border") { + value = "transparent"; + } + } + toolkitToken.setValueFor(body, value); + } + } + } + var init_applyTheme = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js + function create2(name, vscodeThemeVar) { + const designToken = DesignToken.create(name); + if (vscodeThemeVar) { + if (vscodeThemeVar.includes("--fake-vscode-token")) { + const uniqueId2 = "id" + Math.random().toString(16).slice(2); + vscodeThemeVar = `${vscodeThemeVar}-${uniqueId2}`; + } + tokenMappings.set(vscodeThemeVar, designToken); + } + if (!isThemeListenerInitialized) { + initThemeChangeListener(tokenMappings); + isThemeListenerInitialized = true; + } + return designToken; + } + var tokenMappings, isThemeListenerInitialized; + var init_create = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js"() { + init_esm2(); + init_applyTheme(); + tokenMappings = /* @__PURE__ */ new Map(); + isThemeListenerInitialized = false; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js + var background, borderWidth, contrastActiveBorder, contrastBorder, cornerRadius, cornerRadiusRound, designUnit, disabledOpacity, focusBorder, fontFamily, fontWeight, foreground, inputHeight, inputMinWidth, typeRampBaseFontSize, typeRampBaseLineHeight, typeRampMinus1FontSize, typeRampMinus1LineHeight, typeRampMinus2FontSize, typeRampMinus2LineHeight, typeRampPlus1FontSize, typeRampPlus1LineHeight, scrollbarWidth, scrollbarHeight, scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, badgeBackground, badgeForeground, buttonBorder, buttonIconBackground, buttonIconCornerRadius, buttonIconFocusBorderOffset, buttonIconHoverBackground, buttonIconPadding, buttonPrimaryBackground, buttonPrimaryForeground, buttonPrimaryHoverBackground, buttonSecondaryBackground, buttonSecondaryForeground, buttonSecondaryHoverBackground, buttonPaddingHorizontal, buttonPaddingVertical, checkboxBackground, checkboxBorder, checkboxCornerRadius, checkboxForeground, listActiveSelectionBackground, listActiveSelectionForeground, listHoverBackground, dividerBackground, dropdownBackground, dropdownBorder, dropdownForeground, dropdownListMaxHeight, inputBackground, inputForeground, inputPlaceholderForeground, linkActiveForeground, linkForeground, progressBackground, panelTabActiveBorder, panelTabActiveForeground, panelTabForeground, panelViewBackground, panelViewBorder, tagCornerRadius; + var init_design_tokens = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js"() { + init_create(); + background = create2("background", "--vscode-editor-background").withDefault("#1e1e1e"); + borderWidth = create2("border-width").withDefault(1); + contrastActiveBorder = create2("contrast-active-border", "--vscode-contrastActiveBorder").withDefault("#f38518"); + contrastBorder = create2("contrast-border", "--vscode-contrastBorder").withDefault("#6fc3df"); + cornerRadius = create2("corner-radius").withDefault(0); + cornerRadiusRound = create2("corner-radius-round").withDefault(2); + designUnit = create2("design-unit").withDefault(4); + disabledOpacity = create2("disabled-opacity").withDefault(0.4); + focusBorder = create2("focus-border", "--vscode-focusBorder").withDefault("#007fd4"); + fontFamily = create2("font-family", "--vscode-font-family").withDefault("-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol"); + fontWeight = create2("font-weight", "--vscode-font-weight").withDefault("400"); + foreground = create2("foreground", "--vscode-foreground").withDefault("#cccccc"); + inputHeight = create2("input-height").withDefault("26"); + inputMinWidth = create2("input-min-width").withDefault("100px"); + typeRampBaseFontSize = create2("type-ramp-base-font-size", "--vscode-font-size").withDefault("13px"); + typeRampBaseLineHeight = create2("type-ramp-base-line-height").withDefault("normal"); + typeRampMinus1FontSize = create2("type-ramp-minus1-font-size").withDefault("11px"); + typeRampMinus1LineHeight = create2("type-ramp-minus1-line-height").withDefault("16px"); + typeRampMinus2FontSize = create2("type-ramp-minus2-font-size").withDefault("9px"); + typeRampMinus2LineHeight = create2("type-ramp-minus2-line-height").withDefault("16px"); + typeRampPlus1FontSize = create2("type-ramp-plus1-font-size").withDefault("16px"); + typeRampPlus1LineHeight = create2("type-ramp-plus1-line-height").withDefault("24px"); + scrollbarWidth = create2("scrollbarWidth").withDefault("10px"); + scrollbarHeight = create2("scrollbarHeight").withDefault("10px"); + scrollbarSliderBackground = create2("scrollbar-slider-background", "--vscode-scrollbarSlider-background").withDefault("#79797966"); + scrollbarSliderHoverBackground = create2("scrollbar-slider-hover-background", "--vscode-scrollbarSlider-hoverBackground").withDefault("#646464b3"); + scrollbarSliderActiveBackground = create2("scrollbar-slider-active-background", "--vscode-scrollbarSlider-activeBackground").withDefault("#bfbfbf66"); + badgeBackground = create2("badge-background", "--vscode-badge-background").withDefault("#4d4d4d"); + badgeForeground = create2("badge-foreground", "--vscode-badge-foreground").withDefault("#ffffff"); + buttonBorder = create2("button-border", "--vscode-button-border").withDefault("transparent"); + buttonIconBackground = create2("button-icon-background").withDefault("transparent"); + buttonIconCornerRadius = create2("button-icon-corner-radius").withDefault("5px"); + buttonIconFocusBorderOffset = create2("button-icon-outline-offset").withDefault(0); + buttonIconHoverBackground = create2("button-icon-hover-background", "--fake-vscode-token").withDefault("rgba(90, 93, 94, 0.31)"); + buttonIconPadding = create2("button-icon-padding").withDefault("3px"); + buttonPrimaryBackground = create2("button-primary-background", "--vscode-button-background").withDefault("#0e639c"); + buttonPrimaryForeground = create2("button-primary-foreground", "--vscode-button-foreground").withDefault("#ffffff"); + buttonPrimaryHoverBackground = create2("button-primary-hover-background", "--vscode-button-hoverBackground").withDefault("#1177bb"); + buttonSecondaryBackground = create2("button-secondary-background", "--vscode-button-secondaryBackground").withDefault("#3a3d41"); + buttonSecondaryForeground = create2("button-secondary-foreground", "--vscode-button-secondaryForeground").withDefault("#ffffff"); + buttonSecondaryHoverBackground = create2("button-secondary-hover-background", "--vscode-button-secondaryHoverBackground").withDefault("#45494e"); + buttonPaddingHorizontal = create2("button-padding-horizontal").withDefault("11px"); + buttonPaddingVertical = create2("button-padding-vertical").withDefault("4px"); + checkboxBackground = create2("checkbox-background", "--vscode-checkbox-background").withDefault("#3c3c3c"); + checkboxBorder = create2("checkbox-border", "--vscode-checkbox-border").withDefault("#3c3c3c"); + checkboxCornerRadius = create2("checkbox-corner-radius").withDefault(3); + checkboxForeground = create2("checkbox-foreground", "--vscode-checkbox-foreground").withDefault("#f0f0f0"); + listActiveSelectionBackground = create2("list-active-selection-background", "--vscode-list-activeSelectionBackground").withDefault("#094771"); + listActiveSelectionForeground = create2("list-active-selection-foreground", "--vscode-list-activeSelectionForeground").withDefault("#ffffff"); + listHoverBackground = create2("list-hover-background", "--vscode-list-hoverBackground").withDefault("#2a2d2e"); + dividerBackground = create2("divider-background", "--vscode-settings-dropdownListBorder").withDefault("#454545"); + dropdownBackground = create2("dropdown-background", "--vscode-dropdown-background").withDefault("#3c3c3c"); + dropdownBorder = create2("dropdown-border", "--vscode-dropdown-border").withDefault("#3c3c3c"); + dropdownForeground = create2("dropdown-foreground", "--vscode-dropdown-foreground").withDefault("#f0f0f0"); + dropdownListMaxHeight = create2("dropdown-list-max-height").withDefault("200px"); + inputBackground = create2("input-background", "--vscode-input-background").withDefault("#3c3c3c"); + inputForeground = create2("input-foreground", "--vscode-input-foreground").withDefault("#cccccc"); + inputPlaceholderForeground = create2("input-placeholder-foreground", "--vscode-input-placeholderForeground").withDefault("#cccccc"); + linkActiveForeground = create2("link-active-foreground", "--vscode-textLink-activeForeground").withDefault("#3794ff"); + linkForeground = create2("link-foreground", "--vscode-textLink-foreground").withDefault("#3794ff"); + progressBackground = create2("progress-background", "--vscode-progressBar-background").withDefault("#0e70c0"); + panelTabActiveBorder = create2("panel-tab-active-border", "--vscode-panelTitle-activeBorder").withDefault("#e7e7e7"); + panelTabActiveForeground = create2("panel-tab-active-foreground", "--vscode-panelTitle-activeForeground").withDefault("#e7e7e7"); + panelTabForeground = create2("panel-tab-foreground", "--vscode-panelTitle-inactiveForeground").withDefault("#e7e7e799"); + panelViewBackground = create2("panel-view-background", "--vscode-panel-background").withDefault("#1e1e1e"); + panelViewBorder = create2("panel-view-border", "--vscode-panel-border").withDefault("#80808059"); + tagCornerRadius = create2("tag-corner-radius").withDefault("2px"); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js + var badgeStyles; + var init_badge_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + badgeStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + text-align: center; + } + .control { + align-items: center; + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: 11px; + box-sizing: border-box; + color: ${badgeForeground}; + display: flex; + height: calc(${designUnit} * 4px); + justify-content: center; + min-width: calc(${designUnit} * 4px + 2px); + min-height: calc(${designUnit} * 4px + 2px); + padding: 3px 6px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js + var Badge2, vsCodeBadge; + var init_badge3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js"() { + init_esm2(); + init_badge_styles(); + Badge2 = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.circular) { + this.circular = true; + } + } + }; + vsCodeBadge = Badge2.compose({ + baseName: "badge", + template: badgeTemplate, + styles: badgeStyles + }); + } + }); + + // node_modules/tslib/tslib.es6.mjs + function __decorate2(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es62 = __esm({ + "node_modules/tslib/tslib.es6.mjs"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js + var BaseButtonStyles, PrimaryButtonStyles, SecondaryButtonStyles, IconButtonStyles, buttonStyles; + var init_button_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + BaseButtonStyles = css` + ${display("inline-flex")} :host { + outline: none; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${buttonPrimaryForeground}; + background: ${buttonPrimaryBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + fill: currentColor; + cursor: pointer; + } + .control { + background: transparent; + height: inherit; + flex-grow: 1; + box-sizing: border-box; + display: inline-flex; + justify-content: center; + align-items: center; + padding: ${buttonPaddingVertical} ${buttonPaddingHorizontal}; + white-space: wrap; + outline: none; + text-decoration: none; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + color: inherit; + border-radius: inherit; + fill: inherit; + cursor: inherit; + font-family: inherit; + } + :host(:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host(:active) { + background: ${buttonPrimaryBackground}; + } + .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + .control::-moz-focus-inner { + border: 0; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + background: ${buttonPrimaryBackground}; + cursor: ${disabledCursor}; + } + .content { + display: flex; + } + .start { + display: flex; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-end: 8px; + } +`; + PrimaryButtonStyles = css` + :host([appearance='primary']) { + background: ${buttonPrimaryBackground}; + color: ${buttonPrimaryForeground}; + } + :host([appearance='primary']:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host([appearance='primary']:active) .control:active { + background: ${buttonPrimaryBackground}; + } + :host([appearance='primary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='primary'][disabled]) { + background: ${buttonPrimaryBackground}; + } +`; + SecondaryButtonStyles = css` + :host([appearance='secondary']) { + background: ${buttonSecondaryBackground}; + color: ${buttonSecondaryForeground}; + } + :host([appearance='secondary']:hover) { + background: ${buttonSecondaryHoverBackground}; + } + :host([appearance='secondary']:active) .control:active { + background: ${buttonSecondaryBackground}; + } + :host([appearance='secondary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='secondary'][disabled]) { + background: ${buttonSecondaryBackground}; + } +`; + IconButtonStyles = css` + :host([appearance='icon']) { + background: ${buttonIconBackground}; + border-radius: ${buttonIconCornerRadius}; + color: ${foreground}; + } + :host([appearance='icon']:hover) { + background: ${buttonIconHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } + :host([appearance='icon']) .control { + padding: ${buttonIconPadding}; + border: none; + } + :host([appearance='icon']:active) .control:active { + background: ${buttonIconHoverBackground}; + } + :host([appearance='icon']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: ${buttonIconFocusBorderOffset}; + } + :host([appearance='icon'][disabled]) { + background: ${buttonIconBackground}; + } +`; + buttonStyles = (context, definition) => css` + ${BaseButtonStyles} + ${PrimaryButtonStyles} + ${SecondaryButtonStyles} + ${IconButtonStyles} +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/index.js + var Button2, vsCodeButton; + var init_button3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/index.js"() { + init_tslib_es62(); + init_esm(); + init_esm2(); + init_button_styles(); + Button2 = class extends Button { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.appearance) { + const appearanceValue = this.getAttribute("appearance"); + this.appearance = appearanceValue; + } + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "appearance" && newVal === "icon") { + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.ariaLabel = "Icon Button"; + } + } + if (attrName === "aria-label") { + this.ariaLabel = newVal; + } + if (attrName === "disabled") { + this.disabled = newVal !== null; + } + } + }; + __decorate2([ + attr + ], Button2.prototype, "appearance", void 0); + vsCodeButton = Button2.compose({ + baseName: "button", + template: buttonTemplate, + styles: buttonStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js + var checkboxStyles; + var init_checkbox_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + checkboxStyles = (context, defintiion) => css` + ${display("inline-flex")} :host { + align-items: center; + outline: none; + margin: calc(${designUnit} * 1px) 0; + user-select: none; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control { + position: relative; + width: calc(${designUnit} * 4px + 2px); + height: calc(${designUnit} * 4px + 2px); + box-sizing: border-box; + border-radius: calc(${checkboxCornerRadius} * 1px); + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + background: ${checkboxBackground}; + outline: none; + cursor: pointer; + } + .label { + font-family: ${fontFamily}; + color: ${foreground}; + padding-inline-start: calc(${designUnit} * 2px + 2px); + margin-inline-end: calc(${designUnit} * 2px + 2px); + cursor: pointer; + } + .label__hidden { + display: none; + visibility: hidden; + } + .checked-indicator { + width: 100%; + height: 100%; + display: block; + fill: ${foreground}; + opacity: 0; + pointer-events: none; + } + .indeterminate-indicator { + border-radius: 2px; + background: ${foreground}; + position: absolute; + top: 50%; + left: 50%; + width: 50%; + height: 50%; + transform: translate(-50%, -50%); + opacity: 0; + } + :host(:enabled) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:enabled) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host(.disabled) .label, + :host(.readonly) .label, + :host(.readonly) .control, + :host(.disabled) .control { + cursor: ${disabledCursor}; + } + :host(.checked:not(.indeterminate)) .checked-indicator, + :host(.indeterminate) .indeterminate-indicator { + opacity: 1; + } + :host(.disabled) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js + var Checkbox2, vsCodeCheckbox; + var init_checkbox3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js"() { + init_esm2(); + init_checkbox_styles(); + Checkbox2 = class extends Checkbox { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Checkbox"); + } + } + }; + vsCodeCheckbox = Checkbox2.compose({ + baseName: "checkbox", + template: checkboxTemplate, + styles: checkboxStyles, + checkedIndicator: ` + + + + `, + indeterminateIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js + var dataGridStyles; + var init_data_grid_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js"() { + init_esm(); + dataGridStyles = (context, definition) => css` + :host { + display: flex; + position: relative; + flex-direction: column; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js + var dataGridRowStyles; + var init_data_grid_row_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js"() { + init_esm(); + init_design_tokens(); + dataGridRowStyles = (context, definition) => css` + :host { + display: grid; + padding: calc((${designUnit} / 4) * 1px) 0; + box-sizing: border-box; + width: 100%; + background: transparent; + } + :host(.header) { + } + :host(.sticky-header) { + background: ${background}; + position: sticky; + top: 0; + } + :host(:hover) { + background: ${listHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js + var dataGridCellStyles; + var init_data_grid_cell_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dataGridCellStyles = (context, definition) => css` + :host { + padding: calc(${designUnit} * 1px) calc(${designUnit} * 3px); + color: ${foreground}; + opacity: 1; + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + font-weight: 400; + border: solid calc(${borderWidth} * 1px) transparent; + border-radius: calc(${cornerRadius} * 1px); + white-space: wrap; + overflow-wrap: anywhere; + } + :host(.column-header) { + font-weight: 600; + } + :host(:${focusVisible}), + :host(:focus), + :host(:active) { + background: ${listActiveSelectionBackground}; + border: solid calc(${borderWidth} * 1px) ${focusBorder}; + color: ${listActiveSelectionForeground}; + outline: none; + } + :host(:${focusVisible}) ::slotted(*), + :host(:focus) ::slotted(*), + :host(:active) ::slotted(*) { + color: ${listActiveSelectionForeground} !important; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js + var DataGrid2, vsCodeDataGrid, DataGridRow2, vsCodeDataGridRow, DataGridCell2, vsCodeDataGridCell; + var init_data_grid3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js"() { + init_esm2(); + init_data_grid_styles(); + init_data_grid_row_styles(); + init_data_grid_cell_styles(); + DataGrid2 = class extends DataGrid { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Data Grid"); + } + } + }; + vsCodeDataGrid = DataGrid2.compose({ + baseName: "data-grid", + baseClass: DataGrid, + template: dataGridTemplate, + styles: dataGridStyles + }); + DataGridRow2 = class extends DataGridRow { + }; + vsCodeDataGridRow = DataGridRow2.compose({ + baseName: "data-grid-row", + baseClass: DataGridRow, + template: dataGridRowTemplate, + styles: dataGridRowStyles + }); + DataGridCell2 = class extends DataGridCell { + }; + vsCodeDataGridCell = DataGridCell2.compose({ + baseName: "data-grid-cell", + baseClass: DataGridCell, + template: dataGridCellTemplate, + styles: dataGridCellStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js + var dividerStyles; + var init_divider_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dividerStyles = (context, definition) => css` + ${display("block")} :host { + border: none; + border-top: calc(${borderWidth} * 1px) solid ${dividerBackground}; + box-sizing: content-box; + height: 0; + margin: calc(${designUnit} * 1px) 0; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js + var Divider2, vsCodeDivider; + var init_divider3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js"() { + init_esm2(); + init_divider_styles(); + Divider2 = class extends Divider { + }; + vsCodeDivider = Divider2.compose({ + baseName: "divider", + template: dividerTemplate, + styles: dividerStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js + var dropdownStyles; + var init_dropdown_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dropdownStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: ${dropdownBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + color: ${foreground}; + contain: contents; + font-family: ${fontFamily}; + height: calc(${inputHeight} * 1px); + position: relative; + user-select: none; + min-width: ${inputMinWidth}; + outline: none; + vertical-align: top; + } + .control { + align-items: center; + box-sizing: border-box; + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + cursor: pointer; + display: flex; + font-family: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + min-height: 100%; + padding: 2px 6px 2px 8px; + width: 100%; + } + .listbox { + background: ${dropdownBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + display: inline-flex; + flex-direction: column; + left: 0; + max-height: ${dropdownListMaxHeight}; + padding: 0; + overflow-y: auto; + position: absolute; + width: 100%; + z-index: 1; + } + .listbox[hidden] { + display: none; + } + :host(:${focusVisible}) .control { + border-color: ${focusBorder}; + } + :host(:not([disabled]):hover) { + background: ${dropdownBackground}; + border-color: ${dropdownBorder}; + } + :host(:${focusVisible}) ::slotted([aria-selected="true"][role="option"]:not([disabled])) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + cursor: ${disabledCursor}; + user-select: none; + } + :host([disabled]:hover) { + background: ${dropdownBackground}; + color: ${foreground}; + fill: currentcolor; + } + :host(:not([disabled])) .control:active { + border-color: ${focusBorder}; + } + :host(:empty) .listbox { + display: none; + } + :host([open]) .control { + border-color: ${focusBorder}; + } + :host([open][position='above']) .listbox { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + :host([open][position='below']) .listbox { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + :host([open][position='above']) .listbox { + bottom: calc(${inputHeight} * 1px); + } + :host([open][position='below']) .listbox { + top: calc(${inputHeight} * 1px); + } + .selected-value { + flex: 1 1 auto; + font-family: inherit; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + } + .indicator { + flex: 0 0 auto; + margin-inline-start: 1em; + } + slot[name='listbox'] { + display: none; + width: 100%; + } + :host([open]) slot[name='listbox'] { + display: flex; + position: absolute; + } + .end { + margin-inline-start: auto; + } + .start, + .end, + .indicator, + .select-indicator, + ::slotted(svg), + ::slotted(span) { + fill: currentcolor; + height: 1em; + min-height: calc(${designUnit} * 4px); + min-width: calc(${designUnit} * 4px); + width: 1em; + } + ::slotted([role='option']), + ::slotted(option) { + flex: 0 0 auto; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js + var Dropdown, vsCodeDropdown; + var init_dropdown = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js"() { + init_esm2(); + init_dropdown_styles(); + Dropdown = class extends Select { + }; + vsCodeDropdown = Dropdown.compose({ + baseName: "dropdown", + template: selectTemplate, + styles: dropdownStyles, + indicator: ` + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js + var linkStyles; + var init_link_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + linkStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: transparent; + box-sizing: border-box; + color: ${linkForeground}; + cursor: pointer; + fill: currentcolor; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + outline: none; + } + .control { + background: transparent; + border: calc(${borderWidth} * 1px) solid transparent; + border-radius: calc(${cornerRadius} * 1px); + box-sizing: border-box; + color: inherit; + cursor: inherit; + fill: inherit; + font-family: inherit; + height: inherit; + padding: 0; + outline: none; + text-decoration: none; + word-break: break-word; + } + .control::-moz-focus-inner { + border: 0; + } + :host(:hover) { + color: ${linkActiveForeground}; + } + :host(:hover) .content { + text-decoration: underline; + } + :host(:active) { + background: transparent; + color: ${linkActiveForeground}; + } + :host(:${focusVisible}) .control, + :host(:focus) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/index.js + var Link, vsCodeLink; + var init_link = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/index.js"() { + init_esm2(); + init_link_styles(); + Link = class extends Anchor { + }; + vsCodeLink = Link.compose({ + baseName: "link", + template: anchorTemplate, + styles: linkStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js + var optionStyles; + var init_option_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + optionStyles = (context, definition) => css` + ${display("inline-flex")} :host { + font-family: var(--body-font); + border-radius: ${cornerRadius}; + border: calc(${borderWidth} * 1px) solid transparent; + box-sizing: border-box; + color: ${foreground}; + cursor: pointer; + fill: currentcolor; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: 0; + outline: none; + overflow: hidden; + padding: 0 calc((${designUnit} / 2) * 1px) + calc((${designUnit} / 4) * 1px); + user-select: none; + white-space: nowrap; + } + :host(:${focusVisible}) { + border-color: ${focusBorder}; + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([aria-selected='true']) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:active) { + background: ${listActiveSelectionBackground}; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):hover) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):active) { + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]:hover) { + background-color: inherit; + } + .content { + grid-column-start: 2; + justify-self: start; + overflow: hidden; + text-overflow: ellipsis; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/index.js + var Option2, vsCodeOption; + var init_option = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/index.js"() { + init_esm2(); + init_option_styles(); + Option2 = class extends ListboxOption { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Option"); + } + } + }; + vsCodeOption = Option2.compose({ + baseName: "option", + template: listboxOptionTemplate, + styles: optionStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js + var panelsStyles; + var init_panels_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelsStyles = (context, definition) => css` + ${display("grid")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${foreground}; + grid-template-columns: auto 1fr auto; + grid-template-rows: auto 1fr; + overflow-x: auto; + } + .tablist { + display: grid; + grid-template-rows: auto auto; + grid-template-columns: auto; + column-gap: calc(${designUnit} * 8px); + position: relative; + width: max-content; + align-self: end; + padding: calc(${designUnit} * 1px) calc(${designUnit} * 1px) 0; + box-sizing: border-box; + } + .start, + .end { + align-self: center; + } + .activeIndicator { + grid-row: 2; + grid-column: 1; + width: 100%; + height: calc((${designUnit} / 4) * 1px); + justify-self: center; + background: ${panelTabActiveForeground}; + margin: 0; + border-radius: calc(${cornerRadius} * 1px); + } + .activeIndicatorTransition { + transition: transform 0.01s linear; + } + .tabpanel { + grid-row: 2; + grid-column-start: 1; + grid-column-end: 4; + position: relative; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js + var panelTabStyles; + var init_panel_tab_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelTabStyles = (context, definition) => css` + ${display("inline-flex")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + height: calc(${designUnit} * 7px); + padding: calc(${designUnit} * 1px) 0; + color: ${panelTabForeground}; + fill: currentcolor; + border-radius: calc(${cornerRadius} * 1px); + border: solid calc(${borderWidth} * 1px) transparent; + align-items: center; + justify-content: center; + grid-row: 1; + cursor: pointer; + } + :host(:hover) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:active) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:hover) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:active) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:${focusVisible}) { + outline: none; + border: solid calc(${borderWidth} * 1px) ${panelTabActiveBorder}; + } + :host(:focus) { + outline: none; + } + ::slotted(vscode-badge) { + margin-inline-start: calc(${designUnit} * 2px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js + var panelViewStyles; + var init_panel_view_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelViewStyles = (context, definition) => css` + ${display("flex")} :host { + color: inherit; + background-color: transparent; + border: solid calc(${borderWidth} * 1px) transparent; + box-sizing: border-box; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: 10px calc((${designUnit} + 2) * 1px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js + var Panels, vsCodePanels, PanelTab, vsCodePanelTab, PanelView, vsCodePanelView; + var init_panels = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js"() { + init_esm2(); + init_panels_styles(); + init_panel_tab_styles(); + init_panel_view_styles(); + Panels = class extends Tabs { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.orientation) { + this.orientation = TabsOrientation.horizontal; + } + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Panels"); + } + } + }; + vsCodePanels = Panels.compose({ + baseName: "panels", + template: tabsTemplate, + styles: panelsStyles + }); + PanelTab = class extends Tab { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.disabled) { + this.disabled = false; + } + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } + } + }; + vsCodePanelTab = PanelTab.compose({ + baseName: "panel-tab", + template: tabTemplate, + styles: panelTabStyles + }); + PanelView = class extends TabPanel { + }; + vsCodePanelView = PanelView.compose({ + baseName: "panel-view", + template: tabPanelTemplate, + styles: panelViewStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js + var progressRingStyles; + var init_progress_ring_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + progressRingStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: center; + outline: none; + height: calc(${designUnit} * 7px); + width: calc(${designUnit} * 7px); + margin: 0; + } + .progress { + height: 100%; + width: 100%; + } + .background { + fill: none; + stroke: transparent; + stroke-width: calc(${designUnit} / 2 * 1px); + } + .indeterminate-indicator-1 { + fill: none; + stroke: ${progressBackground}; + stroke-width: calc(${designUnit} / 2 * 1px); + stroke-linecap: square; + transform-origin: 50% 50%; + transform: rotate(-90deg); + transition: all 0.2s ease-in-out; + animation: spin-infinite 2s linear infinite; + } + @keyframes spin-infinite { + 0% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(0deg); + } + 50% { + stroke-dasharray: 21.99px 21.99px; + transform: rotate(450deg); + } + 100% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(1080deg); + } + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js + var ProgressRing, vsCodeProgressRing; + var init_progress_ring2 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js"() { + init_esm2(); + init_progress_ring_styles(); + ProgressRing = class extends BaseProgress { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.paused) { + this.paused = false; + } + this.setAttribute("aria-label", "Loading"); + this.setAttribute("aria-live", "assertive"); + this.setAttribute("role", "alert"); + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "value") { + this.removeAttribute("value"); + } + } + }; + vsCodeProgressRing = ProgressRing.compose({ + baseName: "progress-ring", + template: progressRingTemplate, + styles: progressRingStyles, + indeterminateIndicator: ` + + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js + var radioGroupStyles; + var init_radio_group_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioGroupStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: flex-start; + margin: calc(${designUnit} * 1px) 0; + flex-direction: column; + } + .positioning-region { + display: flex; + flex-wrap: wrap; + } + :host([orientation='vertical']) .positioning-region { + flex-direction: column; + } + :host([orientation='horizontal']) .positioning-region { + flex-direction: row; + } + ::slotted([slot='label']) { + color: ${foreground}; + font-size: ${typeRampBaseFontSize}; + margin: calc(${designUnit} * 1px) 0; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js + var RadioGroup2, vsCodeRadioGroup; + var init_radio_group3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js"() { + init_dist2(); + init_esm2(); + init_radio_group_styles(); + RadioGroup2 = class extends RadioGroup { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const label = this.querySelector("label"); + if (label) { + const id = "radio-group-" + Math.random().toString(16).slice(2); + label.setAttribute("id", id); + this.setAttribute("aria-labelledby", id); + } + } + }; + vsCodeRadioGroup = RadioGroup2.compose({ + baseName: "radio-group", + template: radioGroupTemplate, + styles: radioGroupStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js + var radioStyles; + var init_radio_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioStyles = (context, definition) => css` + ${display("inline-flex")} :host { + align-items: center; + flex-direction: row; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: calc(${designUnit} * 1px) 0; + outline: none; + position: relative; + transition: all 0.2s ease-in-out; + user-select: none; + } + .control { + background: ${checkboxBackground}; + border-radius: 999px; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + box-sizing: border-box; + cursor: pointer; + height: calc(${designUnit} * 4px); + position: relative; + outline: none; + width: calc(${designUnit} * 4px); + } + .label { + color: ${foreground}; + cursor: pointer; + font-family: ${fontFamily}; + margin-inline-end: calc(${designUnit} * 2px + 2px); + padding-inline-start: calc(${designUnit} * 2px + 2px); + } + .label__hidden { + display: none; + visibility: hidden; + } + .control, + .checked-indicator { + flex-shrink: 0; + } + .checked-indicator { + background: ${foreground}; + border-radius: 999px; + display: inline-block; + inset: calc(${designUnit} * 1px); + opacity: 0; + pointer-events: none; + position: absolute; + } + :host(:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:not([disabled])) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked='true']) .control { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:active { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked="true"]:${focusVisible}:not([disabled])) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([aria-checked='true']) .checked-indicator { + opacity: 1; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js + var Radio2, vsCodeRadio; + var init_radio3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js"() { + init_esm2(); + init_radio_styles(); + Radio2 = class extends Radio { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Radio"); + } + } + }; + vsCodeRadio = Radio2.compose({ + baseName: "radio", + template: radioTemplate, + styles: radioStyles, + checkedIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js + var tagStyles; + var init_tag_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + tagStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + } + .control { + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: ${tagCornerRadius}; + color: ${badgeForeground}; + padding: calc(${designUnit} * 0.5px) calc(${designUnit} * 1px); + text-transform: uppercase; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js + var Tag, vsCodeTag; + var init_tag = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js"() { + init_esm2(); + init_tag_styles(); + Tag = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.circular) { + this.circular = false; + } + } + }; + vsCodeTag = Tag.compose({ + baseName: "tag", + template: badgeTemplate, + styles: tagStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js + var textAreaStyles; + var init_text_area_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textAreaStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .control { + box-sizing: border-box; + position: relative; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + font: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: calc(${designUnit} * 2px + 1px); + width: 100%; + min-width: ${inputMinWidth}; + resize: none; + } + .control:hover:enabled { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + .control:active:enabled { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .control::-webkit-scrollbar { + width: ${scrollbarWidth}; + height: ${scrollbarHeight}; + } + .control::-webkit-scrollbar-corner { + background: ${inputBackground}; + } + .control::-webkit-scrollbar-thumb { + background: ${scrollbarSliderBackground}; + } + .control::-webkit-scrollbar-thumb:hover { + background: ${scrollbarSliderHoverBackground}; + } + .control::-webkit-scrollbar-thumb:active { + background: ${scrollbarSliderActiveBackground}; + } + :host(:focus-within:not([disabled])) .control { + border-color: ${focusBorder}; + } + :host([resize='both']) .control { + resize: both; + } + :host([resize='horizontal']) .control { + resize: horizontal; + } + :host([resize='vertical']) .control { + resize: vertical; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js + var TextArea2, vsCodeTextArea; + var init_text_area3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js"() { + init_esm2(); + init_text_area_styles(); + TextArea2 = class extends TextArea { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text area"); + } + } + }; + vsCodeTextArea = TextArea2.compose({ + baseName: "text-area", + template: textAreaTemplate, + styles: textAreaStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js + var textFieldStyles; + var init_text_field_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textFieldStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .root { + box-sizing: border-box; + position: relative; + display: flex; + flex-direction: row; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + height: calc(${inputHeight} * 1px); + min-width: ${inputMinWidth}; + } + .control { + -webkit-appearance: none; + font: inherit; + background: transparent; + border: 0; + color: inherit; + height: calc(100% - (${designUnit} * 1px)); + width: 100%; + margin-top: auto; + margin-bottom: auto; + border: none; + padding: 0 calc(${designUnit} * 2px + 1px); + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + .start, + .end { + display: flex; + margin: auto; + fill: currentcolor; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-start: calc(${designUnit} * 2px); + } + .end { + margin-inline-end: calc(${designUnit} * 2px); + } + :host(:hover:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + :host(:active:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + :host(:focus-within:not([disabled])) .root { + border-color: ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js + var TextField2, vsCodeTextField; + var init_text_field3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js"() { + init_esm2(); + init_text_field_styles(); + TextField2 = class extends TextField { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text field"); + } + } + }; + vsCodeTextField = TextField2.compose({ + baseName: "text-field", + template: textFieldTemplate, + styles: textFieldStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js + var allComponents; + var init_custom_elements = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js"() { + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + allComponents = { + vsCodeBadge, + vsCodeButton, + vsCodeCheckbox, + vsCodeDataGrid, + vsCodeDataGridCell, + vsCodeDataGridRow, + vsCodeDivider, + vsCodeDropdown, + vsCodeLink, + vsCodeOption, + vsCodePanels, + vsCodePanelTab, + vsCodePanelView, + vsCodeProgressRing, + vsCodeRadioGroup, + vsCodeRadio, + vsCodeTag, + vsCodeTextArea, + vsCodeTextField, + register(container, ...rest) { + if (!container) { + return; + } + for (const key in this) { + if (key === "register") { + continue; + } + this[key]().register(container, ...rest); + } + } + }; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/index.js + var dist_exports = {}; + __export(dist_exports, { + Badge: () => Badge2, + Button: () => Button2, + Checkbox: () => Checkbox2, + DataGrid: () => DataGrid2, + DataGridCell: () => DataGridCell2, + DataGridCellTypes: () => DataGridCellTypes, + DataGridRow: () => DataGridRow2, + DataGridRowTypes: () => DataGridRowTypes, + Divider: () => Divider2, + DividerRole: () => DividerRole, + Dropdown: () => Dropdown, + DropdownPosition: () => SelectPosition, + GenerateHeaderOptions: () => GenerateHeaderOptions, + Link: () => Link, + Option: () => Option2, + PanelTab: () => PanelTab, + PanelView: () => PanelView, + Panels: () => Panels, + ProgressRing: () => ProgressRing, + Radio: () => Radio2, + RadioGroup: () => RadioGroup2, + RadioGroupOrientation: () => Orientation, + Tag: () => Tag, + TextArea: () => TextArea2, + TextAreaResize: () => TextAreaResize, + TextField: () => TextField2, + TextFieldType: () => TextFieldType, + allComponents: () => allComponents, + provideVSCodeDesignSystem: () => provideVSCodeDesignSystem, + vsCodeBadge: () => vsCodeBadge, + vsCodeButton: () => vsCodeButton, + vsCodeCheckbox: () => vsCodeCheckbox, + vsCodeDataGrid: () => vsCodeDataGrid, + vsCodeDataGridCell: () => vsCodeDataGridCell, + vsCodeDataGridRow: () => vsCodeDataGridRow, + vsCodeDivider: () => vsCodeDivider, + vsCodeDropdown: () => vsCodeDropdown, + vsCodeLink: () => vsCodeLink, + vsCodeOption: () => vsCodeOption, + vsCodePanelTab: () => vsCodePanelTab, + vsCodePanelView: () => vsCodePanelView, + vsCodePanels: () => vsCodePanels, + vsCodeProgressRing: () => vsCodeProgressRing, + vsCodeRadio: () => vsCodeRadio, + vsCodeRadioGroup: () => vsCodeRadioGroup, + vsCodeTag: () => vsCodeTag, + vsCodeTextArea: () => vsCodeTextArea, + vsCodeTextField: () => vsCodeTextField + }); + var init_dist3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/index.js"() { + init_vscode_design_system(); + init_custom_elements(); + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + } + }); + + // src/webview/shared/domUtils.ts + function el(tag, className, text) { + const node = document.createElement(tag); + if (className) { + node.className = className; + } + if (text !== void 0) { + node.textContent = text; + } + return node; + } + function createButton(configOrId, label, appearance) { + const button = document.createElement("vscode-button"); + if (typeof configOrId === "string") { + button.id = configOrId; + button.textContent = label || ""; + if (appearance) { + button.setAttribute("appearance", appearance); + } + } else { + const config = configOrId; + button.id = config.id; + button.textContent = config.label; + if (config.appearance) { + button.setAttribute("appearance", config.appearance); + } + } + return button; + } + + // src/webview/shared/buttonConfig.ts + var BUTTONS = { + "btn-refresh": { + id: "btn-refresh", + label: "\u{1F504} Refresh", + appearance: "primary" + }, + "btn-details": { + id: "btn-details", + label: "\u{1F916} Details" + }, + "btn-chart": { + id: "btn-chart", + label: "\u{1F4C8} Chart" + }, + "btn-usage": { + id: "btn-usage", + label: "\u{1F4CA} Usage Analysis" + }, + "btn-diagnostics": { + id: "btn-diagnostics", + label: "\u{1F50D} Diagnostics" + }, + "btn-maturity": { + id: "btn-maturity", + label: "\u{1F3AF} Fluency Score" + }, + "btn-dashboard": { + id: "btn-dashboard", + label: "\u{1F4CA} Team Dashboard" + }, + "btn-level-viewer": { + id: "btn-level-viewer", + label: "\u{1F50D} Level Viewer" + }, + "btn-environmental": { + id: "btn-environmental", + label: "\u{1F33F} Environmental Impact" + } + }; + + // src/webview/shared/theme.css + var theme_default = '/**\n * Shared theme variables for all webview panels\n * Uses VS Code theme tokens for automatic light/dark theme support\n */\n\n:root {\n /* VS Code base colors */\n --bg-primary: var(--vscode-editor-background);\n --bg-secondary: var(--vscode-sideBar-background);\n --bg-tertiary: var(--vscode-editorWidget-background);\n --text-primary: var(--vscode-editor-foreground);\n --text-secondary: var(--vscode-descriptionForeground);\n --text-muted: var(--vscode-disabledForeground);\n --border-color: var(--vscode-panel-border);\n --border-subtle: var(--vscode-widget-border);\n \n /* Button colors */\n --button-bg: var(--vscode-button-background);\n --button-fg: var(--vscode-button-foreground);\n --button-hover-bg: var(--vscode-button-hoverBackground);\n --button-secondary-bg: var(--vscode-button-secondaryBackground);\n --button-secondary-fg: var(--vscode-button-secondaryForeground);\n --button-secondary-hover-bg: var(--vscode-button-secondaryHoverBackground);\n \n /* Input colors */\n --input-bg: var(--vscode-input-background);\n --input-fg: var(--vscode-input-foreground);\n --input-border: var(--vscode-input-border);\n \n /* List/card colors */\n --list-hover-bg: var(--vscode-list-hoverBackground);\n --list-active-bg: var(--vscode-list-activeSelectionBackground);\n --list-active-fg: var(--vscode-list-activeSelectionForeground);\n --list-inactive-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Alternating row colors for better readability */\n --row-alternate-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Badge colors */\n --badge-bg: var(--vscode-badge-background);\n --badge-fg: var(--vscode-badge-foreground);\n \n /* Focus colors */\n --focus-border: var(--vscode-focusBorder);\n \n /* Link colors */\n --link-color: var(--vscode-textLink-foreground);\n --link-hover-color: var(--vscode-textLink-activeForeground);\n \n /* Status colors */\n --error-fg: var(--vscode-errorForeground);\n --warning-fg: var(--vscode-editorWarning-foreground);\n --success-fg: var(--vscode-terminal-ansiGreen);\n \n /* Shadow for cards */\n --shadow-color: rgb(0, 0, 0, 0.16);\n --shadow-hover-color: rgb(0, 0, 0, 0.24);\n}\n\n/* Light theme adjustments */\nbody[data-vscode-theme-kind="vscode-light"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --shadow-color: rgb(0, 0, 0, 0.08);\n --shadow-hover-color: rgb(0, 0, 0, 0.12);\n}\n\n/* High contrast mode adjustments */\nbody[data-vscode-theme-kind="vscode-high-contrast"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --border-color: var(--vscode-contrastBorder);\n --border-subtle: var(--vscode-contrastBorder);\n}\n'; + + // src/webview/chart/styles.css + var styles_default = "body {\n margin: 0;\n background: var(--bg-primary);\n color: var(--text-primary);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.container {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 32px;\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n padding-bottom: 4px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.header-icon {\n font-size: 20px;\n}\n\n.header-title {\n font-size: 16px;\n font-weight: 700;\n color: var(--text-primary);\n text-align: left;\n}\n\n.button-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.section {\n background: var(--bg-secondary);\n border: 1px solid var(--border-color);\n border-radius: 10px;\n padding: 16px;\n box-shadow: 0 4px 10px var(--shadow-color);\n text-align: center;\n}\n\n.section h3 {\n margin: 0 0 10px;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--text-primary);\n letter-spacing: 0.2px;\n text-align: left;\n}\n\n.cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 10px;\n text-align: center;\n}\n\n.cards + .cards {\n margin-top: 16px;\n}\n\n.card {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-subtle);\n border-radius: 8px;\n padding: 12px;\n box-shadow: 0 2px 6px var(--shadow-color);\n text-align: center;\n}\n\n.card-label {\n color: var(--text-secondary);\n font-size: 11px;\n margin-bottom: 6px;\n}\n\n.card-value {\n color: var(--text-primary);\n font-size: 18px;\n font-weight: 700;\n}\n\n.card-sub {\n color: var(--text-muted);\n font-size: 11px;\n margin-top: 2px;\n}\n\n.chart-shell {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-subtle);\n border-radius: 10px;\n padding: 12px;\n box-shadow: 0 2px 8px var(--shadow-color);\n text-align: center;\n}\n\n.chart-controls {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 8px;\n justify-content: center;\n}\n\n.toggle {\n background: var(--button-secondary-bg);\n border: 1px solid var(--border-subtle);\n color: var(--text-primary);\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.toggle.active {\n background: var(--button-bg);\n border-color: var(--button-bg);\n color: var(--button-fg);\n}\n\n.toggle:hover {\n background: var(--button-secondary-hover-bg);\n}\n\n.toggle.active:hover {\n background: var(--button-hover-bg);\n}\n\n.canvas-wrap {\n position: relative;\n height: 420px;\n}\n\n.footer {\n color: var(--text-muted);\n font-size: 11px;\n margin-top: 6px;\n text-align: center;\n}\n\n.footer em {\n color: var(--text-secondary);\n}\n"; + + // src/webview/chart/main.ts + var vscode = acquireVsCodeApi(); + var initialData = window.__INITIAL_CHART__; + var chart; + var Chart2; + async function loadChartModule() { + if (Chart2) { + return; + } + const mod = await Promise.resolve().then(() => (init_auto(), auto_exports)); + Chart2 = mod.default; + } + var currentView = "total"; + var pendingView = null; + function renderLayout(data) { + const root = document.getElementById("root"); + if (!root) { + return; + } + root.replaceChildren(); + const themeStyle = document.createElement("style"); + themeStyle.textContent = theme_default; + const style = document.createElement("style"); + style.textContent = styles_default; + const container = el("div", "container"); + const header = el("div", "header"); + const headerLeft = el("div", "header-left"); + const icon = el("span", "header-icon", "\u{1F4C8}"); + const title = el("span", "header-title", "Token Usage - Last 30 Days"); + headerLeft.append(icon, title); + const buttons = el("div", "button-row"); + buttons.append( + createButton(BUTTONS["btn-refresh"]), + createButton(BUTTONS["btn-details"]), + createButton(BUTTONS["btn-usage"]), + createButton(BUTTONS["btn-environmental"]), + createButton(BUTTONS["btn-diagnostics"]), + createButton(BUTTONS["btn-maturity"]) + ); + if (data.backendConfigured) { + buttons.append(createButton(BUTTONS["btn-dashboard"])); + } + header.append(headerLeft, buttons); + const summarySection = el("div", "section"); + summarySection.append(el("h3", "", "\u{1F4CA} Summary")); + const cards = el("div", "cards"); + cards.append( + buildCard("Total Days", data.dailyCount.toLocaleString()), + buildCard("Total Tokens", data.totalTokens.toLocaleString()), + buildCard("Avg Tokens / Day", data.avgTokensPerDay.toLocaleString()), + buildCard("Total Sessions", data.totalSessions.toLocaleString()) + ); + summarySection.append(cards); + const editorCards = buildEditorCards(data.editorTotalsMap); + if (editorCards) { + summarySection.append(editorCards); + } + const chartSection = el("div", "section"); + chartSection.append(el("h3", "", "\u{1F4CA} Charts")); + const chartShell = el("div", "chart-shell"); + const toggles = el("div", "chart-controls"); + const totalBtn = el("button", "toggle active", "Total Tokens"); + totalBtn.id = "view-total"; + const modelBtn = el("button", "toggle", "By Model"); + modelBtn.id = "view-model"; + const editorBtn = el("button", "toggle", "By Editor"); + editorBtn.id = "view-editor"; + const repoBtn = el("button", "toggle", "By Repository"); + repoBtn.id = "view-repository"; + toggles.append(totalBtn, modelBtn, editorBtn, repoBtn); + const canvasWrap = el("div", "canvas-wrap"); + const canvas = document.createElement("canvas"); + canvas.id = "token-chart"; + canvasWrap.append(canvas); + chartShell.append(toggles, canvasWrap); + chartSection.append(chartShell); + const footer = el("div", "footer", `Day-by-day token usage for the last 30 days +Last updated: ${new Date(data.lastUpdated).toLocaleString()} +Updates automatically every 5 minutes.`); + container.append(header, summarySection, chartSection, footer); + root.append(themeStyle, style, container); + wireInteractions(data); + void setupChart(canvas, data); + } + function buildCard(label, value) { + const card = el("div", "card"); + card.append(el("div", "card-label", label), el("div", "card-value", value)); + return card; + } + function buildEditorCards(editorTotals) { + const entries = Object.entries(editorTotals); + if (!entries.length) { + return null; + } + const wrap = el("div", "cards"); + entries.forEach(([editor, tokens]) => { + wrap.append(buildCard(editor, tokens.toLocaleString())); + }); + return wrap; + } + function wireInteractions(data) { + const refresh = document.getElementById("btn-refresh"); + refresh?.addEventListener("click", () => vscode.postMessage({ command: "refresh" })); + const details = document.getElementById("btn-details"); + details?.addEventListener("click", () => vscode.postMessage({ command: "showDetails" })); + const usage = document.getElementById("btn-usage"); + usage?.addEventListener("click", () => vscode.postMessage({ command: "showUsageAnalysis" })); + const diagnostics = document.getElementById("btn-diagnostics"); + diagnostics?.addEventListener("click", () => vscode.postMessage({ command: "showDiagnostics" })); + const maturity = document.getElementById("btn-maturity"); + maturity?.addEventListener("click", () => vscode.postMessage({ command: "showMaturity" })); + const dashboard = document.getElementById("btn-dashboard"); + dashboard?.addEventListener("click", () => vscode.postMessage({ command: "showDashboard" })); + const environmental = document.getElementById("btn-environmental"); + environmental?.addEventListener("click", () => vscode.postMessage({ command: "showEnvironmental" })); + const viewButtons = [ + { id: "view-total", view: "total" }, + { id: "view-model", view: "model" }, + { id: "view-editor", view: "editor" }, + { id: "view-repository", view: "repository" } + ]; + viewButtons.forEach(({ id, view }) => { + const btn = document.getElementById(id); + btn?.addEventListener("click", () => { + void switchView(view, data); + }); + }); + } + async function setupChart(canvas, data) { + const ctx = canvas.getContext("2d"); + if (!ctx) { + return; + } + await loadChartModule(); + if (!Chart2) { + return; + } + chart = new Chart2(ctx, createConfig("total", data)); + if (pendingView !== null && pendingView !== "total") { + const viewToRestore = pendingView; + currentView = "total"; + await switchView(viewToRestore, data); + } + pendingView = null; + } + async function switchView(view, data) { + if (currentView === view) { + return; + } + currentView = view; + setActive(view); + if (!chart) { + return; + } + const canvas = chart.canvas; + chart.destroy(); + if (!canvas) { + return; + } + const ctx = canvas.getContext("2d"); + if (!ctx) { + return; + } + await loadChartModule(); + if (!Chart2) { + return; + } + chart = new Chart2(ctx, createConfig(view, data)); + } + function setActive(view) { + ["view-total", "view-model", "view-editor", "view-repository"].forEach((id) => { + const btn = document.getElementById(id); + if (!btn) { + return; + } + btn.classList.toggle("active", id === `view-${view}`); + }); + } + function createConfig(view, data) { + const styles = getComputedStyle(document.body); + const textColor = styles.getPropertyValue("--text-primary") || "#e0e0e0"; + const mutedColor = styles.getPropertyValue("--text-muted") || "#999999"; + const borderColor = styles.getPropertyValue("--border-subtle") || "#3a3a40"; + const bgColor = styles.getPropertyValue("--bg-tertiary") || "#1e1e1e"; + const gridColor = "rgba(128, 128, 128, 0.15)"; + const baseOptions = { + responsive: true, + maintainAspectRatio: false, + interaction: { mode: "index", intersect: false }, + plugins: { + legend: { position: "top", labels: { color: textColor, font: { size: 12 } } }, + tooltip: { + backgroundColor: bgColor, + titleColor: textColor, + bodyColor: textColor, + borderColor, + borderWidth: 1, + padding: 10, + displayColors: true + } + }, + scales: { + x: { grid: { color: gridColor }, ticks: { color: textColor, font: { size: 11 } } } + } + }; + if (view === "total") { + return { + type: "bar", + data: { + labels: data.labels, + datasets: [ + { + label: "Tokens", + data: data.tokensData, + backgroundColor: "rgba(54, 162, 235, 0.6)", + borderColor: "rgba(54, 162, 235, 1)", + borderWidth: 1, + yAxisID: "y" + }, + { + label: "Sessions", + data: data.sessionsData, + backgroundColor: "rgba(255, 99, 132, 0.6)", + borderColor: "rgba(255, 99, 132, 1)", + borderWidth: 1, + type: "line", + yAxisID: "y1" + } + ] + }, + options: { + ...baseOptions, + scales: { + ...baseOptions.scales, + y: { + type: "linear", + display: true, + position: "left", + grid: { color: gridColor }, + ticks: { color: textColor, font: { size: 11 }, callback: (value) => Number(value).toLocaleString() }, + title: { display: true, text: "Tokens", color: textColor, font: { size: 12, weight: "bold" } } + }, + y1: { + type: "linear", + display: true, + position: "right", + grid: { drawOnChartArea: false }, + ticks: { color: textColor, font: { size: 11 } }, + title: { display: true, text: "Sessions", color: textColor, font: { size: 12, weight: "bold" } } + } + } + } + }; + } + const datasets = view === "model" ? data.modelDatasets : view === "repository" ? data.repositoryDatasets : data.editorDatasets; + const sessionsDataset = { + label: "Sessions", + data: data.sessionsData, + backgroundColor: "rgba(255, 99, 132, 0.6)", + borderColor: "rgba(255, 99, 132, 1)", + borderWidth: 2, + type: "line", + yAxisID: "y1", + stack: void 0 + // Don't stack the line + }; + return { + type: "bar", + data: { labels: data.labels, datasets: [...datasets, sessionsDataset] }, + options: { + ...baseOptions, + plugins: { + ...baseOptions.plugins, + legend: { position: "top", labels: { color: textColor, font: { size: 11 } } } + }, + scales: { + ...baseOptions.scales, + y: { + stacked: true, + grid: { color: gridColor }, + ticks: { color: textColor, font: { size: 11 }, callback: (value) => Number(value).toLocaleString() }, + title: { display: true, text: "Tokens", color: textColor, font: { size: 12, weight: "bold" } } + }, + x: { stacked: true, grid: { color: gridColor }, ticks: { color: textColor, font: { size: 11 } } }, + y1: { + type: "linear", + display: true, + position: "right", + grid: { drawOnChartArea: false }, + ticks: { color: textColor, font: { size: 11 } }, + title: { display: true, text: "Sessions", color: textColor, font: { size: 12, weight: "bold" } } + } + } + } + }; + } + async function bootstrap() { + const { provideVSCodeDesignSystem: provideVSCodeDesignSystem2, vsCodeButton: vsCodeButton2 } = await Promise.resolve().then(() => (init_dist3(), dist_exports)); + provideVSCodeDesignSystem2().register(vsCodeButton2()); + if (!initialData) { + const root = document.getElementById("root"); + if (root) { + root.textContent = "No data available."; + } + return; + } + renderLayout(initialData); + } + void bootstrap(); + window.addEventListener("message", (event) => { + const message = event.data; + if (message.command === "updateChartData") { + pendingView = currentView; + renderLayout(message.data); + } + }); +})(); +/*! Bundled license information: + +@kurkle/color/dist/color.esm.js: + (*! + * @kurkle/color v0.3.4 + * https://github.com/kurkle/color#readme + * (c) 2024 Jukka Kurkela + * Released under the MIT License + *) + +chart.js/dist/chunks/helpers.dataset.js: +chart.js/dist/chart.js: + (*! + * Chart.js v4.5.1 + * https://www.chartjs.org + * (c) 2025 Chart.js Contributors + * Released under the MIT License + *) + +tslib/tslib.es6.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) + +tabbable/dist/index.esm.js: + (*! + * tabbable 5.3.3 + * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE + *) +*/ +//# sourceMappingURL=chart.js.map diff --git a/visualstudio-extension/src/CopilotTokenTracker/webview/details.js b/visualstudio-extension/src/CopilotTokenTracker/webview/details.js new file mode 100644 index 00000000..7448bf06 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/webview/details.js @@ -0,0 +1,20839 @@ +"use strict"; +(() => { + var __defProp = Object.defineProperty; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; + var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); + }; + + // node_modules/@microsoft/fast-element/dist/esm/platform.js + function createMetadataLocator() { + const metadataLookup = /* @__PURE__ */ new WeakMap(); + return function(target) { + let metadata = metadataLookup.get(target); + if (metadata === void 0) { + let currentTarget = Reflect.getPrototypeOf(target); + while (metadata === void 0 && currentTarget !== null) { + metadata = metadataLookup.get(currentTarget); + currentTarget = Reflect.getPrototypeOf(currentTarget); + } + metadata = metadata === void 0 ? [] : metadata.slice(0); + metadataLookup.set(target, metadata); + } + return metadata; + }; + } + var $global, propConfig, FAST, emptyArray; + var init_platform = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/platform.js"() { + $global = (function() { + if (typeof globalThis !== "undefined") { + return globalThis; + } + if (typeof global !== "undefined") { + return global; + } + if (typeof self !== "undefined") { + return self; + } + if (typeof window !== "undefined") { + return window; + } + try { + return new Function("return this")(); + } catch (_a) { + return {}; + } + })(); + if ($global.trustedTypes === void 0) { + $global.trustedTypes = { createPolicy: (n, r) => r }; + } + propConfig = { + configurable: false, + enumerable: false, + writable: false + }; + if ($global.FAST === void 0) { + Reflect.defineProperty($global, "FAST", Object.assign({ value: /* @__PURE__ */ Object.create(null) }, propConfig)); + } + FAST = $global.FAST; + if (FAST.getById === void 0) { + const storage = /* @__PURE__ */ Object.create(null); + Reflect.defineProperty(FAST, "getById", Object.assign({ value(id, initialize) { + let found = storage[id]; + if (found === void 0) { + found = initialize ? storage[id] = initialize() : null; + } + return found; + } }, propConfig)); + } + emptyArray = Object.freeze([]); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/dom.js + var updateQueue, fastHTMLPolicy, htmlPolicy, marker, _interpolationStart, _interpolationEnd, DOM; + var init_dom = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/dom.js"() { + init_platform(); + updateQueue = $global.FAST.getById(1, () => { + const tasks = []; + const pendingErrors = []; + function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } + } + function tryRunTask(task) { + try { + task.call(); + } catch (error) { + pendingErrors.push(error); + setTimeout(throwFirstError, 0); + } + } + function process() { + const capacity = 1024; + let index = 0; + while (index < tasks.length) { + tryRunTask(tasks[index]); + index++; + if (index > capacity) { + for (let scan = 0, newLength = tasks.length - index; scan < newLength; scan++) { + tasks[scan] = tasks[scan + index]; + } + tasks.length -= index; + index = 0; + } + } + tasks.length = 0; + } + function enqueue(callable) { + if (tasks.length < 1) { + $global.requestAnimationFrame(process); + } + tasks.push(callable); + } + return Object.freeze({ + enqueue, + process + }); + }); + fastHTMLPolicy = $global.trustedTypes.createPolicy("fast-html", { + createHTML: (html2) => html2 + }); + htmlPolicy = fastHTMLPolicy; + marker = `fast-${Math.random().toString(36).substring(2, 8)}`; + _interpolationStart = `${marker}{`; + _interpolationEnd = `}${marker}`; + DOM = Object.freeze({ + /** + * Indicates whether the DOM supports the adoptedStyleSheets feature. + */ + supportsAdoptedStyleSheets: Array.isArray(document.adoptedStyleSheets) && "replace" in CSSStyleSheet.prototype, + /** + * Sets the HTML trusted types policy used by the templating engine. + * @param policy - The policy to set for HTML. + * @remarks + * This API can only be called once, for security reasons. It should be + * called by the application developer at the start of their program. + */ + setHTMLPolicy(policy) { + if (htmlPolicy !== fastHTMLPolicy) { + throw new Error("The HTML policy can only be set once."); + } + htmlPolicy = policy; + }, + /** + * Turns a string into trusted HTML using the configured trusted types policy. + * @param html - The string to turn into trusted HTML. + * @remarks + * Used internally by the template engine when creating templates + * and setting innerHTML. + */ + createHTML(html2) { + return htmlPolicy.createHTML(html2); + }, + /** + * Determines if the provided node is a template marker used by the runtime. + * @param node - The node to test. + */ + isMarker(node) { + return node && node.nodeType === 8 && node.data.startsWith(marker); + }, + /** + * Given a marker node, extract the {@link HTMLDirective} index from the placeholder. + * @param node - The marker node to extract the index from. + */ + extractDirectiveIndexFromMarker(node) { + return parseInt(node.data.replace(`${marker}:`, "")); + }, + /** + * Creates a placeholder string suitable for marking out a location *within* + * an attribute value or HTML content. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by binding directives. + */ + createInterpolationPlaceholder(index) { + return `${_interpolationStart}${index}${_interpolationEnd}`; + }, + /** + * Creates a placeholder that manifests itself as an attribute on an + * element. + * @param attributeName - The name of the custom attribute. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by attribute directives such as `ref`, `slotted`, and `children`. + */ + createCustomAttributePlaceholder(attributeName, index) { + return `${attributeName}="${this.createInterpolationPlaceholder(index)}"`; + }, + /** + * Creates a placeholder that manifests itself as a marker within the DOM structure. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by structural directives such as `repeat`. + */ + createBlockPlaceholder(index) { + return ``; + }, + /** + * Schedules DOM update work in the next async batch. + * @param callable - The callable function or object to queue. + */ + queueUpdate: updateQueue.enqueue, + /** + * Immediately processes all work previously scheduled + * through queueUpdate. + * @remarks + * This also forces nextUpdate promises + * to resolve. + */ + processUpdates: updateQueue.process, + /** + * Resolves with the next DOM update. + */ + nextUpdate() { + return new Promise(updateQueue.enqueue); + }, + /** + * Sets an attribute value on an element. + * @param element - The element to set the attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is `null` or `undefined`, the attribute is removed, otherwise + * it is set to the provided value using the standard `setAttribute` API. + */ + setAttribute(element, attributeName, value) { + if (value === null || value === void 0) { + element.removeAttribute(attributeName); + } else { + element.setAttribute(attributeName, value); + } + }, + /** + * Sets a boolean attribute value. + * @param element - The element to set the boolean attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is true, the attribute is added; otherwise it is removed. + */ + setBooleanAttribute(element, attributeName, value) { + value ? element.setAttribute(attributeName, "") : element.removeAttribute(attributeName); + }, + /** + * Removes all the child nodes of the provided parent node. + * @param parent - The node to remove the children from. + */ + removeChildNodes(parent) { + for (let child = parent.firstChild; child !== null; child = parent.firstChild) { + parent.removeChild(child); + } + }, + /** + * Creates a TreeWalker configured to walk a template fragment. + * @param fragment - The fragment to walk. + */ + createTemplateWalker(fragment) { + return document.createTreeWalker( + fragment, + 133, + // element, text, comment + null, + false + ); + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js + var SubscriberSet, PropertyChangeNotifier; + var init_notifier = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js"() { + SubscriberSet = class { + /** + * Creates an instance of SubscriberSet for the specified source. + * @param source - The object source that subscribers will receive notifications from. + * @param initialSubscriber - An initial subscriber to changes. + */ + constructor(source, initialSubscriber) { + this.sub1 = void 0; + this.sub2 = void 0; + this.spillover = void 0; + this.source = source; + this.sub1 = initialSubscriber; + } + /** + * Checks whether the provided subscriber has been added to this set. + * @param subscriber - The subscriber to test for inclusion in this set. + */ + has(subscriber) { + return this.spillover === void 0 ? this.sub1 === subscriber || this.sub2 === subscriber : this.spillover.indexOf(subscriber) !== -1; + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + */ + subscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.has(subscriber)) { + return; + } + if (this.sub1 === void 0) { + this.sub1 = subscriber; + return; + } + if (this.sub2 === void 0) { + this.sub2 = subscriber; + return; + } + this.spillover = [this.sub1, this.sub2, subscriber]; + this.sub1 = void 0; + this.sub2 = void 0; + } else { + const index = spillover.indexOf(subscriber); + if (index === -1) { + spillover.push(subscriber); + } + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + */ + unsubscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.sub1 === subscriber) { + this.sub1 = void 0; + } else if (this.sub2 === subscriber) { + this.sub2 = void 0; + } + } else { + const index = spillover.indexOf(subscriber); + if (index !== -1) { + spillover.splice(index, 1); + } + } + } + /** + * Notifies all subscribers. + * @param args - Data passed along to subscribers during notification. + */ + notify(args) { + const spillover = this.spillover; + const source = this.source; + if (spillover === void 0) { + const sub1 = this.sub1; + const sub2 = this.sub2; + if (sub1 !== void 0) { + sub1.handleChange(source, args); + } + if (sub2 !== void 0) { + sub2.handleChange(source, args); + } + } else { + for (let i = 0, ii = spillover.length; i < ii; ++i) { + spillover[i].handleChange(source, args); + } + } + } + }; + PropertyChangeNotifier = class { + /** + * Creates an instance of PropertyChangeNotifier for the specified source. + * @param source - The object source that subscribers will receive notifications from. + */ + constructor(source) { + this.subscribers = {}; + this.sourceSubscribers = null; + this.source = source; + } + /** + * Notifies all subscribers, based on the specified property. + * @param propertyName - The property name, passed along to subscribers during notification. + */ + notify(propertyName) { + var _a; + const subscribers = this.subscribers[propertyName]; + if (subscribers !== void 0) { + subscribers.notify(propertyName); + } + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.notify(propertyName); + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + * @param propertyToWatch - The name of the property that the subscriber is interested in watching for changes. + */ + subscribe(subscriber, propertyToWatch) { + var _a; + if (propertyToWatch) { + let subscribers = this.subscribers[propertyToWatch]; + if (subscribers === void 0) { + this.subscribers[propertyToWatch] = subscribers = new SubscriberSet(this.source); + } + subscribers.subscribe(subscriber); + } else { + this.sourceSubscribers = (_a = this.sourceSubscribers) !== null && _a !== void 0 ? _a : new SubscriberSet(this.source); + this.sourceSubscribers.subscribe(subscriber); + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + * @param propertyToUnwatch - The name of the property that the subscriber is no longer interested in watching. + */ + unsubscribe(subscriber, propertyToUnwatch) { + var _a; + if (propertyToUnwatch) { + const subscribers = this.subscribers[propertyToUnwatch]; + if (subscribers !== void 0) { + subscribers.unsubscribe(subscriber); + } + } else { + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriber); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/observable.js + function observable(target, nameOrAccessor) { + Observable.defineProperty(target, nameOrAccessor); + } + function volatile(target, name, descriptor) { + return Object.assign({}, descriptor, { + get: function() { + Observable.trackVolatile(); + return descriptor.get.apply(this); + } + }); + } + var Observable, contextEvent, ExecutionContext, defaultExecutionContext; + var init_observable = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/observable.js"() { + init_dom(); + init_platform(); + init_notifier(); + Observable = FAST.getById(2, () => { + const volatileRegex = /(:|&&|\|\||if)/; + const notifierLookup = /* @__PURE__ */ new WeakMap(); + const queueUpdate = DOM.queueUpdate; + let watcher = void 0; + let createArrayObserver = (array) => { + throw new Error("Must call enableArrayObservation before observing arrays."); + }; + function getNotifier(source) { + let found = source.$fastController || notifierLookup.get(source); + if (found === void 0) { + if (Array.isArray(source)) { + found = createArrayObserver(source); + } else { + notifierLookup.set(source, found = new PropertyChangeNotifier(source)); + } + } + return found; + } + const getAccessors = createMetadataLocator(); + class DefaultObservableAccessor { + constructor(name) { + this.name = name; + this.field = `_${name}`; + this.callback = `${name}Changed`; + } + getValue(source) { + if (watcher !== void 0) { + watcher.watch(source, this.name); + } + return source[this.field]; + } + setValue(source, newValue) { + const field = this.field; + const oldValue = source[field]; + if (oldValue !== newValue) { + source[field] = newValue; + const callback = source[this.callback]; + if (typeof callback === "function") { + callback.call(source, oldValue, newValue); + } + getNotifier(source).notify(this.name); + } + } + } + class BindingObserverImplementation extends SubscriberSet { + constructor(binding, initialSubscriber, isVolatileBinding = false) { + super(binding, initialSubscriber); + this.binding = binding; + this.isVolatileBinding = isVolatileBinding; + this.needsRefresh = true; + this.needsQueue = true; + this.first = this; + this.last = null; + this.propertySource = void 0; + this.propertyName = void 0; + this.notifier = void 0; + this.next = void 0; + } + observe(source, context) { + if (this.needsRefresh && this.last !== null) { + this.disconnect(); + } + const previousWatcher = watcher; + watcher = this.needsRefresh ? this : void 0; + this.needsRefresh = this.isVolatileBinding; + const result = this.binding(source, context); + watcher = previousWatcher; + return result; + } + disconnect() { + if (this.last !== null) { + let current = this.first; + while (current !== void 0) { + current.notifier.unsubscribe(this, current.propertyName); + current = current.next; + } + this.last = null; + this.needsRefresh = this.needsQueue = true; + } + } + watch(propertySource, propertyName) { + const prev = this.last; + const notifier = getNotifier(propertySource); + const current = prev === null ? this.first : {}; + current.propertySource = propertySource; + current.propertyName = propertyName; + current.notifier = notifier; + notifier.subscribe(this, propertyName); + if (prev !== null) { + if (!this.needsRefresh) { + let prevValue; + watcher = void 0; + prevValue = prev.propertySource[prev.propertyName]; + watcher = this; + if (propertySource === prevValue) { + this.needsRefresh = true; + } + } + prev.next = current; + } + this.last = current; + } + handleChange() { + if (this.needsQueue) { + this.needsQueue = false; + queueUpdate(this); + } + } + call() { + if (this.last !== null) { + this.needsQueue = true; + this.notify(this); + } + } + records() { + let next = this.first; + return { + next: () => { + const current = next; + if (current === void 0) { + return { value: void 0, done: true }; + } else { + next = next.next; + return { + value: current, + done: false + }; + } + }, + [Symbol.iterator]: function() { + return this; + } + }; + } + } + return Object.freeze({ + /** + * @internal + * @param factory - The factory used to create array observers. + */ + setArrayObserverFactory(factory) { + createArrayObserver = factory; + }, + /** + * Gets a notifier for an object or Array. + * @param source - The object or Array to get the notifier for. + */ + getNotifier, + /** + * Records a property change for a source object. + * @param source - The object to record the change against. + * @param propertyName - The property to track as changed. + */ + track(source, propertyName) { + if (watcher !== void 0) { + watcher.watch(source, propertyName); + } + }, + /** + * Notifies watchers that the currently executing property getter or function is volatile + * with respect to its observable dependencies. + */ + trackVolatile() { + if (watcher !== void 0) { + watcher.needsRefresh = true; + } + }, + /** + * Notifies subscribers of a source object of changes. + * @param source - the object to notify of changes. + * @param args - The change args to pass to subscribers. + */ + notify(source, args) { + getNotifier(source).notify(args); + }, + /** + * Defines an observable property on an object or prototype. + * @param target - The target object to define the observable on. + * @param nameOrAccessor - The name of the property to define as observable; + * or a custom accessor that specifies the property name and accessor implementation. + */ + defineProperty(target, nameOrAccessor) { + if (typeof nameOrAccessor === "string") { + nameOrAccessor = new DefaultObservableAccessor(nameOrAccessor); + } + getAccessors(target).push(nameOrAccessor); + Reflect.defineProperty(target, nameOrAccessor.name, { + enumerable: true, + get: function() { + return nameOrAccessor.getValue(this); + }, + set: function(newValue) { + nameOrAccessor.setValue(this, newValue); + } + }); + }, + /** + * Finds all the observable accessors defined on the target, + * including its prototype chain. + * @param target - The target object to search for accessor on. + */ + getAccessors, + /** + * Creates a {@link BindingObserver} that can watch the + * provided {@link Binding} for changes. + * @param binding - The binding to observe. + * @param initialSubscriber - An initial subscriber to changes in the binding value. + * @param isVolatileBinding - Indicates whether the binding's dependency list must be re-evaluated on every value evaluation. + */ + binding(binding, initialSubscriber, isVolatileBinding = this.isVolatileBinding(binding)) { + return new BindingObserverImplementation(binding, initialSubscriber, isVolatileBinding); + }, + /** + * Determines whether a binding expression is volatile and needs to have its dependency list re-evaluated + * on every evaluation of the value. + * @param binding - The binding to inspect. + */ + isVolatileBinding(binding) { + return volatileRegex.test(binding.toString()); + } + }); + }); + contextEvent = FAST.getById(3, () => { + let current = null; + return { + get() { + return current; + }, + set(event) { + current = event; + } + }; + }); + ExecutionContext = class { + constructor() { + this.index = 0; + this.length = 0; + this.parent = null; + this.parentContext = null; + } + /** + * The current event within an event handler. + */ + get event() { + return contextEvent.get(); + } + /** + * Indicates whether the current item within a repeat context + * has an even index. + */ + get isEven() { + return this.index % 2 === 0; + } + /** + * Indicates whether the current item within a repeat context + * has an odd index. + */ + get isOdd() { + return this.index % 2 !== 0; + } + /** + * Indicates whether the current item within a repeat context + * is the first item in the collection. + */ + get isFirst() { + return this.index === 0; + } + /** + * Indicates whether the current item within a repeat context + * is somewhere in the middle of the collection. + */ + get isInMiddle() { + return !this.isFirst && !this.isLast; + } + /** + * Indicates whether the current item within a repeat context + * is the last item in the collection. + */ + get isLast() { + return this.index === this.length - 1; + } + /** + * Sets the event for the current execution context. + * @param event - The event to set. + * @internal + */ + static setEvent(event) { + contextEvent.set(event); + } + }; + Observable.defineProperty(ExecutionContext.prototype, "index"); + Observable.defineProperty(ExecutionContext.prototype, "length"); + defaultExecutionContext = Object.seal(new ExecutionContext()); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js + var HTMLDirective, TargetedHTMLDirective, AttachedBehaviorHTMLDirective; + var init_html_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js"() { + init_dom(); + HTMLDirective = class { + constructor() { + this.targetIndex = 0; + } + }; + TargetedHTMLDirective = class extends HTMLDirective { + constructor() { + super(...arguments); + this.createPlaceholder = DOM.createInterpolationPlaceholder; + } + }; + AttachedBehaviorHTMLDirective = class extends HTMLDirective { + /** + * + * @param name - The name of the behavior; used as a custom attribute on the element. + * @param behavior - The behavior to instantiate and attach to the element. + * @param options - Options to pass to the behavior during creation. + */ + constructor(name, behavior, options) { + super(); + this.name = name; + this.behavior = behavior; + this.options = options; + } + /** + * Creates a placeholder string based on the directive's index within the template. + * @param index - The index of the directive within the template. + * @remarks + * Creates a custom attribute placeholder. + */ + createPlaceholder(index) { + return DOM.createCustomAttributePlaceholder(this.name, index); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + * @remarks + * Creates an instance of the `behavior` type this directive was constructed with + * and passes the target and options to that `behavior`'s constructor. + */ + createBehavior(target) { + return new this.behavior(target, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/binding.js + function normalBind(source, context) { + this.source = source; + this.context = context; + if (this.bindingObserver === null) { + this.bindingObserver = Observable.binding(this.binding, this, this.isBindingVolatile); + } + this.updateTarget(this.bindingObserver.observe(source, context)); + } + function triggerBind(source, context) { + this.source = source; + this.context = context; + this.target.addEventListener(this.targetName, this); + } + function normalUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + } + function contentUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.unbind(); + view.needsBindOnly = true; + } + } + function triggerUnbind() { + this.target.removeEventListener(this.targetName, this); + this.source = null; + this.context = null; + } + function updateAttributeTarget(value) { + DOM.setAttribute(this.target, this.targetName, value); + } + function updateBooleanAttributeTarget(value) { + DOM.setBooleanAttribute(this.target, this.targetName, value); + } + function updateContentTarget(value) { + if (value === null || value === void 0) { + value = ""; + } + if (value.create) { + this.target.textContent = ""; + let view = this.target.$fastView; + if (view === void 0) { + view = value.create(); + } else { + if (this.target.$fastTemplate !== value) { + if (view.isComposed) { + view.remove(); + view.unbind(); + } + view = value.create(); + } + } + if (!view.isComposed) { + view.isComposed = true; + view.bind(this.source, this.context); + view.insertBefore(this.target); + this.target.$fastView = view; + this.target.$fastTemplate = value; + } else if (view.needsBindOnly) { + view.needsBindOnly = false; + view.bind(this.source, this.context); + } + } else { + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.isComposed = false; + view.remove(); + if (view.needsBindOnly) { + view.needsBindOnly = false; + } else { + view.unbind(); + } + } + this.target.textContent = value; + } + } + function updatePropertyTarget(value) { + this.target[this.targetName] = value; + } + function updateClassTarget(value) { + const classVersions = this.classVersions || /* @__PURE__ */ Object.create(null); + const target = this.target; + let version = this.version || 0; + if (value !== null && value !== void 0 && value.length) { + const names = value.split(/\s+/); + for (let i = 0, ii = names.length; i < ii; ++i) { + const currentName = names[i]; + if (currentName === "") { + continue; + } + classVersions[currentName] = version; + target.classList.add(currentName); + } + } + this.classVersions = classVersions; + this.version = version + 1; + if (version === 0) { + return; + } + version -= 1; + for (const name in classVersions) { + if (classVersions[name] === version) { + target.classList.remove(name); + } + } + } + var HTMLBindingDirective, BindingBehavior; + var init_binding = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/binding.js"() { + init_dom(); + init_observable(); + init_html_directive(); + HTMLBindingDirective = class extends TargetedHTMLDirective { + /** + * Creates an instance of BindingDirective. + * @param binding - A binding that returns the data used to update the DOM. + */ + constructor(binding) { + super(); + this.binding = binding; + this.bind = normalBind; + this.unbind = normalUnbind; + this.updateTarget = updateAttributeTarget; + this.isBindingVolatile = Observable.isVolatileBinding(this.binding); + } + /** + * Gets/sets the name of the attribute or property that this + * binding is targeting. + */ + get targetName() { + return this.originalTargetName; + } + set targetName(value) { + this.originalTargetName = value; + if (value === void 0) { + return; + } + switch (value[0]) { + case ":": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updatePropertyTarget; + if (this.cleanedTargetName === "innerHTML") { + const binding = this.binding; + this.binding = (s, c) => DOM.createHTML(binding(s, c)); + } + break; + case "?": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updateBooleanAttributeTarget; + break; + case "@": + this.cleanedTargetName = value.substr(1); + this.bind = triggerBind; + this.unbind = triggerUnbind; + break; + default: + this.cleanedTargetName = value; + if (value === "class") { + this.updateTarget = updateClassTarget; + } + break; + } + } + /** + * Makes this binding target the content of an element rather than + * a particular attribute or property. + */ + targetAtContent() { + this.updateTarget = updateContentTarget; + this.unbind = contentUnbind; + } + /** + * Creates the runtime BindingBehavior instance based on the configuration + * information stored in the BindingDirective. + * @param target - The target node that the binding behavior should attach to. + */ + createBehavior(target) { + return new BindingBehavior(target, this.binding, this.isBindingVolatile, this.bind, this.unbind, this.updateTarget, this.cleanedTargetName); + } + }; + BindingBehavior = class { + /** + * Creates an instance of BindingBehavior. + * @param target - The target of the data updates. + * @param binding - The binding that returns the latest value for an update. + * @param isBindingVolatile - Indicates whether the binding has volatile dependencies. + * @param bind - The operation to perform during binding. + * @param unbind - The operation to perform during unbinding. + * @param updateTarget - The operation to perform when updating. + * @param targetName - The name of the target attribute or property to update. + */ + constructor(target, binding, isBindingVolatile, bind, unbind, updateTarget, targetName) { + this.source = null; + this.context = null; + this.bindingObserver = null; + this.target = target; + this.binding = binding; + this.isBindingVolatile = isBindingVolatile; + this.bind = bind; + this.unbind = unbind; + this.updateTarget = updateTarget; + this.targetName = targetName; + } + /** @internal */ + handleChange() { + this.updateTarget(this.bindingObserver.observe(this.source, this.context)); + } + /** @internal */ + handleEvent(event) { + ExecutionContext.setEvent(event); + const result = this.binding(this.source, this.context); + ExecutionContext.setEvent(null); + if (result !== true) { + event.preventDefault(); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js + function createAggregateBinding(parts) { + if (parts.length === 1) { + return parts[0]; + } + let targetName; + const partCount = parts.length; + const finalParts = parts.map((x) => { + if (typeof x === "string") { + return () => x; + } + targetName = x.targetName || targetName; + return x.binding; + }); + const binding = (scope, context) => { + let output = ""; + for (let i = 0; i < partCount; ++i) { + output += finalParts[i](scope, context); + } + return output; + }; + const directive = new HTMLBindingDirective(binding); + directive.targetName = targetName; + return directive; + } + function parseContent(context, value) { + const valueParts = value.split(_interpolationStart); + if (valueParts.length === 1) { + return null; + } + const bindingParts = []; + for (let i = 0, ii = valueParts.length; i < ii; ++i) { + const current = valueParts[i]; + const index = current.indexOf(_interpolationEnd); + let literal; + if (index === -1) { + literal = current; + } else { + const directiveIndex = parseInt(current.substring(0, index)); + bindingParts.push(context.directives[directiveIndex]); + literal = current.substring(index + interpolationEndLength); + } + if (literal !== "") { + bindingParts.push(literal); + } + } + return bindingParts; + } + function compileAttributes(context, node, includeBasicValues = false) { + const attributes = node.attributes; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const attr2 = attributes[i]; + const attrValue = attr2.value; + const parseResult = parseContent(context, attrValue); + let result = null; + if (parseResult === null) { + if (includeBasicValues) { + result = new HTMLBindingDirective(() => attrValue); + result.targetName = attr2.name; + } + } else { + result = createAggregateBinding(parseResult); + } + if (result !== null) { + node.removeAttributeNode(attr2); + i--; + ii--; + context.addFactory(result); + } + } + } + function compileContent(context, node, walker) { + const parseResult = parseContent(context, node.textContent); + if (parseResult !== null) { + let lastNode = node; + for (let i = 0, ii = parseResult.length; i < ii; ++i) { + const currentPart = parseResult[i]; + const currentNode = i === 0 ? node : lastNode.parentNode.insertBefore(document.createTextNode(""), lastNode.nextSibling); + if (typeof currentPart === "string") { + currentNode.textContent = currentPart; + } else { + currentNode.textContent = " "; + context.captureContentBinding(currentPart); + } + lastNode = currentNode; + context.targetIndex++; + if (currentNode !== node) { + walker.nextNode(); + } + } + context.targetIndex--; + } + } + function compileTemplate(template, directives) { + const fragment = template.content; + document.adoptNode(fragment); + const context = CompilationContext.borrow(directives); + compileAttributes(context, template, true); + const hostBehaviorFactories = context.behaviorFactories; + context.reset(); + const walker = DOM.createTemplateWalker(fragment); + let node; + while (node = walker.nextNode()) { + context.targetIndex++; + switch (node.nodeType) { + case 1: + compileAttributes(context, node); + break; + case 3: + compileContent(context, node, walker); + break; + case 8: + if (DOM.isMarker(node)) { + context.addFactory(directives[DOM.extractDirectiveIndexFromMarker(node)]); + } + } + } + let targetOffset = 0; + if ( + // If the first node in a fragment is a marker, that means it's an unstable first node, + // because something like a when, repeat, etc. could add nodes before the marker. + // To mitigate this, we insert a stable first node. However, if we insert a node, + // that will alter the result of the TreeWalker. So, we also need to offset the target index. + DOM.isMarker(fragment.firstChild) || // Or if there is only one node and a directive, it means the template's content + // is *only* the directive. In that case, HTMLView.dispose() misses any nodes inserted by + // the directive. Inserting a new node ensures proper disposal of nodes added by the directive. + fragment.childNodes.length === 1 && directives.length + ) { + fragment.insertBefore(document.createComment(""), fragment.firstChild); + targetOffset = -1; + } + const viewBehaviorFactories = context.behaviorFactories; + context.release(); + return { + fragment, + viewBehaviorFactories, + hostBehaviorFactories, + targetOffset + }; + } + var sharedContext, CompilationContext, interpolationEndLength; + var init_compiler = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js"() { + init_dom(); + init_binding(); + sharedContext = null; + CompilationContext = class _CompilationContext { + addFactory(factory) { + factory.targetIndex = this.targetIndex; + this.behaviorFactories.push(factory); + } + captureContentBinding(directive) { + directive.targetAtContent(); + this.addFactory(directive); + } + reset() { + this.behaviorFactories = []; + this.targetIndex = -1; + } + release() { + sharedContext = this; + } + static borrow(directives) { + const shareable = sharedContext || new _CompilationContext(); + shareable.directives = directives; + shareable.reset(); + sharedContext = null; + return shareable; + } + }; + interpolationEndLength = _interpolationEnd.length; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/view.js + var range, HTMLView; + var init_view = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/view.js"() { + range = document.createRange(); + HTMLView = class { + /** + * Constructs an instance of HTMLView. + * @param fragment - The html fragment that contains the nodes for this view. + * @param behaviors - The behaviors to be applied to this view. + */ + constructor(fragment, behaviors) { + this.fragment = fragment; + this.behaviors = behaviors; + this.source = null; + this.context = null; + this.firstChild = fragment.firstChild; + this.lastChild = fragment.lastChild; + } + /** + * Appends the view's DOM nodes to the referenced node. + * @param node - The parent node to append the view's DOM nodes to. + */ + appendTo(node) { + node.appendChild(this.fragment); + } + /** + * Inserts the view's DOM nodes before the referenced node. + * @param node - The node to insert the view's DOM before. + */ + insertBefore(node) { + if (this.fragment.hasChildNodes()) { + node.parentNode.insertBefore(this.fragment, node); + } else { + const end = this.lastChild; + if (node.previousSibling === end) + return; + const parentNode = node.parentNode; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parentNode.insertBefore(current, node); + current = next; + } + parentNode.insertBefore(end, node); + } + } + /** + * Removes the view's DOM nodes. + * The nodes are not disposed and the view can later be re-inserted. + */ + remove() { + const fragment = this.fragment; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + fragment.appendChild(current); + current = next; + } + fragment.appendChild(end); + } + /** + * Removes the view and unbinds its behaviors, disposing of DOM nodes afterward. + * Once a view has been disposed, it cannot be inserted or bound again. + */ + dispose() { + const parent = this.firstChild.parentNode; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parent.removeChild(current); + current = next; + } + parent.removeChild(end); + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + } + /** + * Binds a view's behaviors to its binding source. + * @param source - The binding source for the view's binding behaviors. + * @param context - The execution context to run the behaviors within. + */ + bind(source, context) { + const behaviors = this.behaviors; + if (this.source === source) { + return; + } else if (this.source !== null) { + const oldSource = this.source; + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + const current = behaviors[i]; + current.unbind(oldSource); + current.bind(source, context); + } + } else { + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].bind(source, context); + } + } + } + /** + * Unbinds a view's behaviors from its binding source. + */ + unbind() { + if (this.source === null) { + return; + } + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + this.source = null; + } + /** + * Efficiently disposes of a contiguous range of synthetic view instances. + * @param views - A contiguous range of views to be disposed. + */ + static disposeContiguousBatch(views) { + if (views.length === 0) { + return; + } + range.setStartBefore(views[0].firstChild); + range.setEndAfter(views[views.length - 1].lastChild); + range.deleteContents(); + for (let i = 0, ii = views.length; i < ii; ++i) { + const view = views[i]; + const behaviors = view.behaviors; + const oldSource = view.source; + for (let j = 0, jj = behaviors.length; j < jj; ++j) { + behaviors[j].unbind(oldSource); + } + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/template.js + function html(strings, ...values) { + const directives = []; + let html2 = ""; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + const currentString = strings[i]; + let value = values[i]; + html2 += currentString; + if (value instanceof ViewTemplate) { + const template = value; + value = () => template; + } + if (typeof value === "function") { + value = new HTMLBindingDirective(value); + } + if (value instanceof TargetedHTMLDirective) { + const match = lastAttributeNameRegex.exec(currentString); + if (match !== null) { + value.targetName = match[2]; + } + } + if (value instanceof HTMLDirective) { + html2 += value.createPlaceholder(directives.length); + directives.push(value); + } else { + html2 += value; + } + } + html2 += strings[strings.length - 1]; + return new ViewTemplate(html2, directives); + } + var ViewTemplate, lastAttributeNameRegex; + var init_template = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/template.js"() { + init_dom(); + init_observable(); + init_compiler(); + init_view(); + init_html_directive(); + init_binding(); + ViewTemplate = class { + /** + * Creates an instance of ViewTemplate. + * @param html - The html representing what this template will instantiate, including placeholders for directives. + * @param directives - The directives that will be connected to placeholders in the html. + */ + constructor(html2, directives) { + this.behaviorCount = 0; + this.hasHostBehaviors = false; + this.fragment = null; + this.targetOffset = 0; + this.viewBehaviorFactories = null; + this.hostBehaviorFactories = null; + this.html = html2; + this.directives = directives; + } + /** + * Creates an HTMLView instance based on this template definition. + * @param hostBindingTarget - The element that host behaviors will be bound to. + */ + create(hostBindingTarget) { + if (this.fragment === null) { + let template; + const html2 = this.html; + if (typeof html2 === "string") { + template = document.createElement("template"); + template.innerHTML = DOM.createHTML(html2); + const fec = template.content.firstElementChild; + if (fec !== null && fec.tagName === "TEMPLATE") { + template = fec; + } + } else { + template = html2; + } + const result = compileTemplate(template, this.directives); + this.fragment = result.fragment; + this.viewBehaviorFactories = result.viewBehaviorFactories; + this.hostBehaviorFactories = result.hostBehaviorFactories; + this.targetOffset = result.targetOffset; + this.behaviorCount = this.viewBehaviorFactories.length + this.hostBehaviorFactories.length; + this.hasHostBehaviors = this.hostBehaviorFactories.length > 0; + } + const fragment = this.fragment.cloneNode(true); + const viewFactories = this.viewBehaviorFactories; + const behaviors = new Array(this.behaviorCount); + const walker = DOM.createTemplateWalker(fragment); + let behaviorIndex = 0; + let targetIndex = this.targetOffset; + let node = walker.nextNode(); + for (let ii = viewFactories.length; behaviorIndex < ii; ++behaviorIndex) { + const factory = viewFactories[behaviorIndex]; + const factoryIndex = factory.targetIndex; + while (node !== null) { + if (targetIndex === factoryIndex) { + behaviors[behaviorIndex] = factory.createBehavior(node); + break; + } else { + node = walker.nextNode(); + targetIndex++; + } + } + } + if (this.hasHostBehaviors) { + const hostFactories = this.hostBehaviorFactories; + for (let i = 0, ii = hostFactories.length; i < ii; ++i, ++behaviorIndex) { + behaviors[behaviorIndex] = hostFactories[i].createBehavior(hostBindingTarget); + } + } + return new HTMLView(fragment, behaviors); + } + /** + * Creates an HTMLView from this template, binds it to the source, and then appends it to the host. + * @param source - The data source to bind the template to. + * @param host - The Element where the template will be rendered. + * @param hostBindingTarget - An HTML element to target the host bindings at if different from the + * host that the template is being attached to. + */ + render(source, host, hostBindingTarget) { + if (typeof host === "string") { + host = document.getElementById(host); + } + if (hostBindingTarget === void 0) { + hostBindingTarget = host; + } + const view = this.create(hostBindingTarget); + view.bind(source, defaultExecutionContext); + view.appendTo(host); + return view; + } + }; + lastAttributeNameRegex = /* eslint-disable-next-line no-control-regex */ + /([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js + function reduceStyles(styles) { + return styles.map((x) => x instanceof ElementStyles ? reduceStyles(x.styles) : [x]).reduce((prev, curr) => prev.concat(curr), []); + } + function reduceBehaviors(styles) { + return styles.map((x) => x instanceof ElementStyles ? x.behaviors : null).reduce((prev, curr) => { + if (curr === null) { + return prev; + } + if (prev === null) { + prev = []; + } + return prev.concat(curr); + }, null); + } + function separateSheetsToPrepend(sheets) { + const prepend = []; + const append = []; + sheets.forEach((x) => (x[prependToAdoptedStyleSheetsSymbol] ? prepend : append).push(x)); + return { prepend, append }; + } + function getNextStyleClass() { + return `fast-style-class-${++styleClassId}`; + } + var ElementStyles, prependToAdoptedStyleSheetsSymbol, addAdoptedStyleSheets, removeAdoptedStyleSheets, AdoptedStyleSheetsStyles, styleClassId, StyleElementStyles; + var init_element_styles = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js"() { + init_dom(); + ElementStyles = class { + constructor() { + this.targets = /* @__PURE__ */ new WeakSet(); + } + /** @internal */ + addStylesTo(target) { + this.targets.add(target); + } + /** @internal */ + removeStylesFrom(target) { + this.targets.delete(target); + } + /** @internal */ + isAttachedTo(target) { + return this.targets.has(target); + } + /** + * Associates behaviors with this set of styles. + * @param behaviors - The behaviors to associate. + */ + withBehaviors(...behaviors) { + this.behaviors = this.behaviors === null ? behaviors : this.behaviors.concat(behaviors); + return this; + } + }; + ElementStyles.create = (() => { + if (DOM.supportsAdoptedStyleSheets) { + const styleSheetCache = /* @__PURE__ */ new Map(); + return (styles) => ( + // eslint-disable-next-line @typescript-eslint/no-use-before-define + new AdoptedStyleSheetsStyles(styles, styleSheetCache) + ); + } + return (styles) => new StyleElementStyles(styles); + })(); + prependToAdoptedStyleSheetsSymbol = /* @__PURE__ */ Symbol("prependToAdoptedStyleSheets"); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets = [...prepend, ...target.adoptedStyleSheets, ...append]; + }; + removeAdoptedStyleSheets = (target, sheets) => { + target.adoptedStyleSheets = target.adoptedStyleSheets.filter((x) => sheets.indexOf(x) === -1); + }; + if (DOM.supportsAdoptedStyleSheets) { + try { + document.adoptedStyleSheets.push(); + document.adoptedStyleSheets.splice(); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets.splice(0, 0, ...prepend); + target.adoptedStyleSheets.push(...append); + }; + removeAdoptedStyleSheets = (target, sheets) => { + for (const sheet of sheets) { + const index = target.adoptedStyleSheets.indexOf(sheet); + if (index !== -1) { + target.adoptedStyleSheets.splice(index, 1); + } + } + }; + } catch (e) { + } + } + AdoptedStyleSheetsStyles = class extends ElementStyles { + constructor(styles, styleSheetCache) { + super(); + this.styles = styles; + this.styleSheetCache = styleSheetCache; + this._styleSheets = void 0; + this.behaviors = reduceBehaviors(styles); + } + get styleSheets() { + if (this._styleSheets === void 0) { + const styles = this.styles; + const styleSheetCache = this.styleSheetCache; + this._styleSheets = reduceStyles(styles).map((x) => { + if (x instanceof CSSStyleSheet) { + return x; + } + let sheet = styleSheetCache.get(x); + if (sheet === void 0) { + sheet = new CSSStyleSheet(); + sheet.replaceSync(x); + styleSheetCache.set(x, sheet); + } + return sheet; + }); + } + return this._styleSheets; + } + addStylesTo(target) { + addAdoptedStyleSheets(target, this.styleSheets); + super.addStylesTo(target); + } + removeStylesFrom(target) { + removeAdoptedStyleSheets(target, this.styleSheets); + super.removeStylesFrom(target); + } + }; + styleClassId = 0; + StyleElementStyles = class extends ElementStyles { + constructor(styles) { + super(); + this.styles = styles; + this.behaviors = null; + this.behaviors = reduceBehaviors(styles); + this.styleSheets = reduceStyles(styles); + this.styleClass = getNextStyleClass(); + } + addStylesTo(target) { + const styleSheets = this.styleSheets; + const styleClass = this.styleClass; + target = this.normalizeTarget(target); + for (let i = 0; i < styleSheets.length; i++) { + const element = document.createElement("style"); + element.innerHTML = styleSheets[i]; + element.className = styleClass; + target.append(element); + } + super.addStylesTo(target); + } + removeStylesFrom(target) { + target = this.normalizeTarget(target); + const styles = target.querySelectorAll(`.${this.styleClass}`); + for (let i = 0, ii = styles.length; i < ii; ++i) { + target.removeChild(styles[i]); + } + super.removeStylesFrom(target); + } + isAttachedTo(target) { + return super.isAttachedTo(this.normalizeTarget(target)); + } + normalizeTarget(target) { + return target === document ? document.body : target; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/attributes.js + function attr(configOrTarget, prop) { + let config; + function decorator($target, $prop) { + if (arguments.length > 1) { + config.property = $prop; + } + AttributeConfiguration.locate($target.constructor).push(config); + } + if (arguments.length > 1) { + config = {}; + decorator(configOrTarget, prop); + return; + } + config = configOrTarget === void 0 ? {} : configOrTarget; + return decorator; + } + var AttributeConfiguration, booleanConverter, nullableNumberConverter, AttributeDefinition; + var init_attributes = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/attributes.js"() { + init_observable(); + init_dom(); + init_platform(); + AttributeConfiguration = Object.freeze({ + /** + * Locates all attribute configurations associated with a type. + */ + locate: createMetadataLocator() + }); + booleanConverter = { + toView(value) { + return value ? "true" : "false"; + }, + fromView(value) { + if (value === null || value === void 0 || value === "false" || value === false || value === 0) { + return false; + } + return true; + } + }; + nullableNumberConverter = { + toView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number.toString(); + }, + fromView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number; + } + }; + AttributeDefinition = class _AttributeDefinition { + /** + * Creates an instance of AttributeDefinition. + * @param Owner - The class constructor that owns this attribute. + * @param name - The name of the property associated with the attribute. + * @param attribute - The name of the attribute in HTML. + * @param mode - The {@link AttributeMode} that describes the behavior of this attribute. + * @param converter - A {@link ValueConverter} that integrates with the property getter/setter + * to convert values to and from a DOM string. + */ + constructor(Owner, name, attribute = name.toLowerCase(), mode = "reflect", converter) { + this.guards = /* @__PURE__ */ new Set(); + this.Owner = Owner; + this.name = name; + this.attribute = attribute; + this.mode = mode; + this.converter = converter; + this.fieldName = `_${name}`; + this.callbackName = `${name}Changed`; + this.hasCallback = this.callbackName in Owner.prototype; + if (mode === "boolean" && converter === void 0) { + this.converter = booleanConverter; + } + } + /** + * Sets the value of the attribute/property on the source element. + * @param source - The source element to access. + * @param value - The value to set the attribute/property to. + */ + setValue(source, newValue) { + const oldValue = source[this.fieldName]; + const converter = this.converter; + if (converter !== void 0) { + newValue = converter.fromView(newValue); + } + if (oldValue !== newValue) { + source[this.fieldName] = newValue; + this.tryReflectToAttribute(source); + if (this.hasCallback) { + source[this.callbackName](oldValue, newValue); + } + source.$fastController.notify(this.name); + } + } + /** + * Gets the value of the attribute/property on the source element. + * @param source - The source element to access. + */ + getValue(source) { + Observable.track(source, this.name); + return source[this.fieldName]; + } + /** @internal */ + onAttributeChangedCallback(element, value) { + if (this.guards.has(element)) { + return; + } + this.guards.add(element); + this.setValue(element, value); + this.guards.delete(element); + } + tryReflectToAttribute(element) { + const mode = this.mode; + const guards = this.guards; + if (guards.has(element) || mode === "fromView") { + return; + } + DOM.queueUpdate(() => { + guards.add(element); + const latestValue = element[this.fieldName]; + switch (mode) { + case "reflect": + const converter = this.converter; + DOM.setAttribute(element, this.attribute, converter !== void 0 ? converter.toView(latestValue) : latestValue); + break; + case "boolean": + DOM.setBooleanAttribute(element, this.attribute, latestValue); + break; + } + guards.delete(element); + }); + } + /** + * Collects all attribute definitions associated with the owner. + * @param Owner - The class constructor to collect attribute for. + * @param attributeLists - Any existing attributes to collect and merge with those associated with the owner. + * @internal + */ + static collect(Owner, ...attributeLists) { + const attributes = []; + attributeLists.push(AttributeConfiguration.locate(Owner)); + for (let i = 0, ii = attributeLists.length; i < ii; ++i) { + const list = attributeLists[i]; + if (list === void 0) { + continue; + } + for (let j = 0, jj = list.length; j < jj; ++j) { + const config = list[j]; + if (typeof config === "string") { + attributes.push(new _AttributeDefinition(Owner, config)); + } else { + attributes.push(new _AttributeDefinition(Owner, config.property, config.attribute, config.mode, config.converter)); + } + } + } + return attributes; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js + var defaultShadowOptions, defaultElementOptions, fastRegistry, FASTElementDefinition; + var init_fast_definitions = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js"() { + init_platform(); + init_observable(); + init_element_styles(); + init_attributes(); + defaultShadowOptions = { mode: "open" }; + defaultElementOptions = {}; + fastRegistry = FAST.getById(4, () => { + const typeToDefinition = /* @__PURE__ */ new Map(); + return Object.freeze({ + register(definition) { + if (typeToDefinition.has(definition.type)) { + return false; + } + typeToDefinition.set(definition.type, definition); + return true; + }, + getByType(key) { + return typeToDefinition.get(key); + } + }); + }); + FASTElementDefinition = class { + /** + * Creates an instance of FASTElementDefinition. + * @param type - The type this definition is being created for. + * @param nameOrConfig - The name of the element to define or a config object + * that describes the element to define. + */ + constructor(type, nameOrConfig = type.definition) { + if (typeof nameOrConfig === "string") { + nameOrConfig = { name: nameOrConfig }; + } + this.type = type; + this.name = nameOrConfig.name; + this.template = nameOrConfig.template; + const attributes = AttributeDefinition.collect(type, nameOrConfig.attributes); + const observedAttributes = new Array(attributes.length); + const propertyLookup = {}; + const attributeLookup = {}; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const current = attributes[i]; + observedAttributes[i] = current.attribute; + propertyLookup[current.name] = current; + attributeLookup[current.attribute] = current; + } + this.attributes = attributes; + this.observedAttributes = observedAttributes; + this.propertyLookup = propertyLookup; + this.attributeLookup = attributeLookup; + this.shadowOptions = nameOrConfig.shadowOptions === void 0 ? defaultShadowOptions : nameOrConfig.shadowOptions === null ? void 0 : Object.assign(Object.assign({}, defaultShadowOptions), nameOrConfig.shadowOptions); + this.elementOptions = nameOrConfig.elementOptions === void 0 ? defaultElementOptions : Object.assign(Object.assign({}, defaultElementOptions), nameOrConfig.elementOptions); + this.styles = nameOrConfig.styles === void 0 ? void 0 : Array.isArray(nameOrConfig.styles) ? ElementStyles.create(nameOrConfig.styles) : nameOrConfig.styles instanceof ElementStyles ? nameOrConfig.styles : ElementStyles.create([nameOrConfig.styles]); + } + /** + * Indicates if this element has been defined in at least one registry. + */ + get isDefined() { + return !!fastRegistry.getByType(this.type); + } + /** + * Defines a custom element based on this definition. + * @param registry - The element registry to define the element in. + */ + define(registry = customElements) { + const type = this.type; + if (fastRegistry.register(this)) { + const attributes = this.attributes; + const proto = type.prototype; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + Observable.defineProperty(proto, attributes[i]); + } + Reflect.defineProperty(type, "observedAttributes", { + value: this.observedAttributes, + enumerable: true + }); + } + if (!registry.get(this.name)) { + registry.define(this.name, type, this.elementOptions); + } + return this; + } + }; + FASTElementDefinition.forType = fastRegistry.getByType; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/controller.js + function getShadowRoot(element) { + return element.shadowRoot || shadowRoots.get(element) || null; + } + var shadowRoots, defaultEventOptions, Controller; + var init_controller = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/controller.js"() { + init_dom(); + init_notifier(); + init_observable(); + init_fast_definitions(); + shadowRoots = /* @__PURE__ */ new WeakMap(); + defaultEventOptions = { + bubbles: true, + composed: true, + cancelable: true + }; + Controller = class _Controller extends PropertyChangeNotifier { + /** + * Creates a Controller to control the specified element. + * @param element - The element to be controlled by this controller. + * @param definition - The element definition metadata that instructs this + * controller in how to handle rendering and other platform integrations. + * @internal + */ + constructor(element, definition) { + super(element); + this.boundObservables = null; + this.behaviors = null; + this.needsInitialization = true; + this._template = null; + this._styles = null; + this._isConnected = false; + this.$fastController = this; + this.view = null; + this.element = element; + this.definition = definition; + const shadowOptions = definition.shadowOptions; + if (shadowOptions !== void 0) { + const shadowRoot = element.attachShadow(shadowOptions); + if (shadowOptions.mode === "closed") { + shadowRoots.set(element, shadowRoot); + } + } + const accessors = Observable.getAccessors(element); + if (accessors.length > 0) { + const boundObservables = this.boundObservables = /* @__PURE__ */ Object.create(null); + for (let i = 0, ii = accessors.length; i < ii; ++i) { + const propertyName = accessors[i].name; + const value = element[propertyName]; + if (value !== void 0) { + delete element[propertyName]; + boundObservables[propertyName] = value; + } + } + } + } + /** + * Indicates whether or not the custom element has been + * connected to the document. + */ + get isConnected() { + Observable.track(this, "isConnected"); + return this._isConnected; + } + setIsConnected(value) { + this._isConnected = value; + Observable.notify(this, "isConnected"); + } + /** + * Gets/sets the template used to render the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get template() { + return this._template; + } + set template(value) { + if (this._template === value) { + return; + } + this._template = value; + if (!this.needsInitialization) { + this.renderTemplate(value); + } + } + /** + * Gets/sets the primary styles used for the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get styles() { + return this._styles; + } + set styles(value) { + if (this._styles === value) { + return; + } + if (this._styles !== null) { + this.removeStyles(this._styles); + } + this._styles = value; + if (!this.needsInitialization && value !== null) { + this.addStyles(value); + } + } + /** + * Adds styles to this element. Providing an HTMLStyleElement will attach the element instance to the shadowRoot. + * @param styles - The styles to add. + */ + addStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.append(styles); + } else if (!styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.addStylesTo(target); + if (sourceBehaviors !== null) { + this.addBehaviors(sourceBehaviors); + } + } + } + /** + * Removes styles from this element. Providing an HTMLStyleElement will detach the element instance from the shadowRoot. + * @param styles - the styles to remove. + */ + removeStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.removeChild(styles); + } else if (styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.removeStylesFrom(target); + if (sourceBehaviors !== null) { + this.removeBehaviors(sourceBehaviors); + } + } + } + /** + * Adds behaviors to this element. + * @param behaviors - The behaviors to add. + */ + addBehaviors(behaviors) { + const targetBehaviors = this.behaviors || (this.behaviors = /* @__PURE__ */ new Map()); + const length = behaviors.length; + const behaviorsToBind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + targetBehaviors.set(behavior, targetBehaviors.get(behavior) + 1); + } else { + targetBehaviors.set(behavior, 1); + behaviorsToBind.push(behavior); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToBind.length; ++i) { + behaviorsToBind[i].bind(element, defaultExecutionContext); + } + } + } + /** + * Removes behaviors from this element. + * @param behaviors - The behaviors to remove. + * @param force - Forces unbinding of behaviors. + */ + removeBehaviors(behaviors, force = false) { + const targetBehaviors = this.behaviors; + if (targetBehaviors === null) { + return; + } + const length = behaviors.length; + const behaviorsToUnbind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + const count = targetBehaviors.get(behavior) - 1; + count === 0 || force ? targetBehaviors.delete(behavior) && behaviorsToUnbind.push(behavior) : targetBehaviors.set(behavior, count); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToUnbind.length; ++i) { + behaviorsToUnbind[i].unbind(element); + } + } + } + /** + * Runs connected lifecycle behavior on the associated element. + */ + onConnectedCallback() { + if (this._isConnected) { + return; + } + const element = this.element; + if (this.needsInitialization) { + this.finishInitialization(); + } else if (this.view !== null) { + this.view.bind(element, defaultExecutionContext); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + for (const [behavior] of behaviors) { + behavior.bind(element, defaultExecutionContext); + } + } + this.setIsConnected(true); + } + /** + * Runs disconnected lifecycle behavior on the associated element. + */ + onDisconnectedCallback() { + if (!this._isConnected) { + return; + } + this.setIsConnected(false); + const view = this.view; + if (view !== null) { + view.unbind(); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + const element = this.element; + for (const [behavior] of behaviors) { + behavior.unbind(element); + } + } + } + /** + * Runs the attribute changed callback for the associated element. + * @param name - The name of the attribute that changed. + * @param oldValue - The previous value of the attribute. + * @param newValue - The new value of the attribute. + */ + onAttributeChangedCallback(name, oldValue, newValue) { + const attrDef = this.definition.attributeLookup[name]; + if (attrDef !== void 0) { + attrDef.onAttributeChangedCallback(this.element, newValue); + } + } + /** + * Emits a custom HTML event. + * @param type - The type name of the event. + * @param detail - The event detail object to send with the event. + * @param options - The event options. By default bubbles and composed. + * @remarks + * Only emits events if connected. + */ + emit(type, detail, options) { + if (this._isConnected) { + return this.element.dispatchEvent(new CustomEvent(type, Object.assign(Object.assign({ detail }, defaultEventOptions), options))); + } + return false; + } + finishInitialization() { + const element = this.element; + const boundObservables = this.boundObservables; + if (boundObservables !== null) { + const propertyNames = Object.keys(boundObservables); + for (let i = 0, ii = propertyNames.length; i < ii; ++i) { + const propertyName = propertyNames[i]; + element[propertyName] = boundObservables[propertyName]; + } + this.boundObservables = null; + } + const definition = this.definition; + if (this._template === null) { + if (this.element.resolveTemplate) { + this._template = this.element.resolveTemplate(); + } else if (definition.template) { + this._template = definition.template || null; + } + } + if (this._template !== null) { + this.renderTemplate(this._template); + } + if (this._styles === null) { + if (this.element.resolveStyles) { + this._styles = this.element.resolveStyles(); + } else if (definition.styles) { + this._styles = definition.styles || null; + } + } + if (this._styles !== null) { + this.addStyles(this._styles); + } + this.needsInitialization = false; + } + renderTemplate(template) { + const element = this.element; + const host = getShadowRoot(element) || element; + if (this.view !== null) { + this.view.dispose(); + this.view = null; + } else if (!this.needsInitialization) { + DOM.removeChildNodes(host); + } + if (template) { + this.view = template.render(element, host, element); + } + } + /** + * Locates or creates a controller for the specified element. + * @param element - The element to return the controller for. + * @remarks + * The specified element must have a {@link FASTElementDefinition} + * registered either through the use of the {@link customElement} + * decorator or a call to `FASTElement.define`. + */ + static forCustomElement(element) { + const controller = element.$fastController; + if (controller !== void 0) { + return controller; + } + const definition = FASTElementDefinition.forType(element.constructor); + if (definition === void 0) { + throw new Error("Missing FASTElement definition."); + } + return element.$fastController = new _Controller(element, definition); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js + function createFASTElement(BaseType) { + return class extends BaseType { + constructor() { + super(); + Controller.forCustomElement(this); + } + $emit(type, detail, options) { + return this.$fastController.emit(type, detail, options); + } + connectedCallback() { + this.$fastController.onConnectedCallback(); + } + disconnectedCallback() { + this.$fastController.onDisconnectedCallback(); + } + attributeChangedCallback(name, oldValue, newValue) { + this.$fastController.onAttributeChangedCallback(name, oldValue, newValue); + } + }; + } + var FASTElement; + var init_fast_element = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js"() { + init_controller(); + init_fast_definitions(); + FASTElement = Object.assign(createFASTElement(HTMLElement), { + /** + * Creates a new FASTElement base class inherited from the + * provided base type. + * @param BaseType - The base element type to inherit from. + */ + from(BaseType) { + return createFASTElement(BaseType); + }, + /** + * Defines a platform custom element based on the provided type and definition. + * @param type - The custom element type to define. + * @param nameOrDef - The name of the element to define or a definition object + * that describes the element to define. + */ + define(type, nameOrDef) { + return new FASTElementDefinition(type, nameOrDef).define().type; + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js + var CSSDirective; + var init_css_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js"() { + CSSDirective = class { + /** + * Creates a CSS fragment to interpolate into the CSS document. + * @returns - the string to interpolate into CSS + */ + createCSS() { + return ""; + } + /** + * Creates a behavior to bind to the host element. + * @returns - the behavior to bind to the host element, or undefined. + */ + createBehavior() { + return void 0; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css.js + function collectStyles(strings, values) { + const styles = []; + let cssString = ""; + const behaviors = []; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + cssString += strings[i]; + let value = values[i]; + if (value instanceof CSSDirective) { + const behavior = value.createBehavior(); + value = value.createCSS(); + if (behavior) { + behaviors.push(behavior); + } + } + if (value instanceof ElementStyles || value instanceof CSSStyleSheet) { + if (cssString.trim() !== "") { + styles.push(cssString); + cssString = ""; + } + styles.push(value); + } else { + cssString += value; + } + } + cssString += strings[strings.length - 1]; + if (cssString.trim() !== "") { + styles.push(cssString); + } + return { + styles, + behaviors + }; + } + function css(strings, ...values) { + const { styles, behaviors } = collectStyles(strings, values); + const elementStyles = ElementStyles.create(styles); + if (behaviors.length) { + elementStyles.withBehaviors(...behaviors); + } + return elementStyles; + } + var init_css = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css.js"() { + init_css_directive(); + init_element_styles(); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js + function newSplice(index, removed, addedCount) { + return { + index, + removed, + addedCount + }; + } + function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) { + const rowCount = oldEnd - oldStart + 1; + const columnCount = currentEnd - currentStart + 1; + const distances = new Array(rowCount); + let north; + let west; + for (let i = 0; i < rowCount; ++i) { + distances[i] = new Array(columnCount); + distances[i][0] = i; + } + for (let j = 0; j < columnCount; ++j) { + distances[0][j] = j; + } + for (let i = 1; i < rowCount; ++i) { + for (let j = 1; j < columnCount; ++j) { + if (current[currentStart + j - 1] === old[oldStart + i - 1]) { + distances[i][j] = distances[i - 1][j - 1]; + } else { + north = distances[i - 1][j] + 1; + west = distances[i][j - 1] + 1; + distances[i][j] = north < west ? north : west; + } + } + } + return distances; + } + function spliceOperationsFromEditDistances(distances) { + let i = distances.length - 1; + let j = distances[0].length - 1; + let current = distances[i][j]; + const edits = []; + while (i > 0 || j > 0) { + if (i === 0) { + edits.push(EDIT_ADD); + j--; + continue; + } + if (j === 0) { + edits.push(EDIT_DELETE); + i--; + continue; + } + const northWest = distances[i - 1][j - 1]; + const west = distances[i - 1][j]; + const north = distances[i][j - 1]; + let min; + if (west < north) { + min = west < northWest ? west : northWest; + } else { + min = north < northWest ? north : northWest; + } + if (min === northWest) { + if (northWest === current) { + edits.push(EDIT_LEAVE); + } else { + edits.push(EDIT_UPDATE); + current = northWest; + } + i--; + j--; + } else if (min === west) { + edits.push(EDIT_DELETE); + i--; + current = west; + } else { + edits.push(EDIT_ADD); + j--; + current = north; + } + } + edits.reverse(); + return edits; + } + function sharedPrefix(current, old, searchLength) { + for (let i = 0; i < searchLength; ++i) { + if (current[i] !== old[i]) { + return i; + } + } + return searchLength; + } + function sharedSuffix(current, old, searchLength) { + let index1 = current.length; + let index2 = old.length; + let count = 0; + while (count < searchLength && current[--index1] === old[--index2]) { + count++; + } + return count; + } + function intersect(start1, end1, start2, end2) { + if (end1 < start2 || end2 < start1) { + return -1; + } + if (end1 === start2 || end2 === start1) { + return 0; + } + if (start1 < start2) { + if (end1 < end2) { + return end1 - start2; + } + return end2 - start2; + } + if (end2 < end1) { + return end2 - start1; + } + return end1 - start1; + } + function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) { + let prefixCount = 0; + let suffixCount = 0; + const minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart); + if (currentStart === 0 && oldStart === 0) { + prefixCount = sharedPrefix(current, old, minLength); + } + if (currentEnd === current.length && oldEnd === old.length) { + suffixCount = sharedSuffix(current, old, minLength - prefixCount); + } + currentStart += prefixCount; + oldStart += prefixCount; + currentEnd -= suffixCount; + oldEnd -= suffixCount; + if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) { + return emptyArray; + } + if (currentStart === currentEnd) { + const splice2 = newSplice(currentStart, [], 0); + while (oldStart < oldEnd) { + splice2.removed.push(old[oldStart++]); + } + return [splice2]; + } else if (oldStart === oldEnd) { + return [newSplice(currentStart, [], currentEnd - currentStart)]; + } + const ops = spliceOperationsFromEditDistances(calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd)); + const splices = []; + let splice = void 0; + let index = currentStart; + let oldIndex = oldStart; + for (let i = 0; i < ops.length; ++i) { + switch (ops[i]) { + case EDIT_LEAVE: + if (splice !== void 0) { + splices.push(splice); + splice = void 0; + } + index++; + oldIndex++; + break; + case EDIT_UPDATE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + case EDIT_ADD: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + break; + case EDIT_DELETE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + } + } + if (splice !== void 0) { + splices.push(splice); + } + return splices; + } + function mergeSplice(splices, index, removed, addedCount) { + const splice = newSplice(index, removed, addedCount); + let inserted = false; + let insertionOffset = 0; + for (let i = 0; i < splices.length; i++) { + const current = splices[i]; + current.index += insertionOffset; + if (inserted) { + continue; + } + const intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount); + if (intersectCount >= 0) { + splices.splice(i, 1); + i--; + insertionOffset -= current.addedCount - current.removed.length; + splice.addedCount += current.addedCount - intersectCount; + const deleteCount = splice.removed.length + current.removed.length - intersectCount; + if (!splice.addedCount && !deleteCount) { + inserted = true; + } else { + let currentRemoved = current.removed; + if (splice.index < current.index) { + const prepend = splice.removed.slice(0, current.index - splice.index); + $push.apply(prepend, currentRemoved); + currentRemoved = prepend; + } + if (splice.index + splice.removed.length > current.index + current.addedCount) { + const append = splice.removed.slice(current.index + current.addedCount - splice.index); + $push.apply(currentRemoved, append); + } + splice.removed = currentRemoved; + if (current.index < splice.index) { + splice.index = current.index; + } + } + } else if (splice.index < current.index) { + inserted = true; + splices.splice(i, 0, splice); + i++; + const offset = splice.addedCount - splice.removed.length; + current.index += offset; + insertionOffset += offset; + } + } + if (!inserted) { + splices.push(splice); + } + } + function createInitialSplices(changeRecords) { + const splices = []; + for (let i = 0, ii = changeRecords.length; i < ii; i++) { + const record = changeRecords[i]; + mergeSplice(splices, record.index, record.removed, record.addedCount); + } + return splices; + } + function projectArraySplices(array, changeRecords) { + let splices = []; + const initialSplices = createInitialSplices(changeRecords); + for (let i = 0, ii = initialSplices.length; i < ii; ++i) { + const splice = initialSplices[i]; + if (splice.addedCount === 1 && splice.removed.length === 1) { + if (splice.removed[0] !== array[splice.index]) { + splices.push(splice); + } + continue; + } + splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length)); + } + return splices; + } + var EDIT_LEAVE, EDIT_UPDATE, EDIT_ADD, EDIT_DELETE, $push; + var init_array_change_records = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js"() { + init_platform(); + EDIT_LEAVE = 0; + EDIT_UPDATE = 1; + EDIT_ADD = 2; + EDIT_DELETE = 3; + $push = Array.prototype.push; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js + function adjustIndex(changeRecord, array) { + let index = changeRecord.index; + const arrayLength = array.length; + if (index > arrayLength) { + index = arrayLength - changeRecord.addedCount; + } else if (index < 0) { + index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount; + } + if (index < 0) { + index = 0; + } + changeRecord.index = index; + return changeRecord; + } + function enableArrayObservation() { + if (arrayObservationEnabled) { + return; + } + arrayObservationEnabled = true; + Observable.setArrayObserverFactory((collection) => { + return new ArrayObserver(collection); + }); + const proto = Array.prototype; + if (proto.$fastPatch) { + return; + } + Reflect.defineProperty(proto, "$fastPatch", { + value: 1, + enumerable: false + }); + const pop = proto.pop; + const push = proto.push; + const reverse = proto.reverse; + const shift = proto.shift; + const sort = proto.sort; + const splice = proto.splice; + const unshift = proto.unshift; + proto.pop = function() { + const notEmpty = this.length > 0; + const methodCallResult = pop.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(this.length, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.push = function() { + const methodCallResult = push.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(this.length - arguments.length, [], arguments.length), this)); + } + return methodCallResult; + }; + proto.reverse = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = reverse.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.shift = function() { + const notEmpty = this.length > 0; + const methodCallResult = shift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(0, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.sort = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = sort.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.splice = function() { + const methodCallResult = splice.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(+arguments[0], methodCallResult, arguments.length > 2 ? arguments.length - 2 : 0), this)); + } + return methodCallResult; + }; + proto.unshift = function() { + const methodCallResult = unshift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(0, [], arguments.length), this)); + } + return methodCallResult; + }; + } + var arrayObservationEnabled, ArrayObserver; + var init_array_observer = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js"() { + init_dom(); + init_array_change_records(); + init_notifier(); + init_observable(); + arrayObservationEnabled = false; + ArrayObserver = class extends SubscriberSet { + constructor(source) { + super(source); + this.oldCollection = void 0; + this.splices = void 0; + this.needsQueue = true; + this.call = this.flush; + Reflect.defineProperty(source, "$fastController", { + value: this, + enumerable: false + }); + } + subscribe(subscriber) { + this.flush(); + super.subscribe(subscriber); + } + addSplice(splice) { + if (this.splices === void 0) { + this.splices = [splice]; + } else { + this.splices.push(splice); + } + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + reset(oldCollection) { + this.oldCollection = oldCollection; + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + flush() { + const splices = this.splices; + const oldCollection = this.oldCollection; + if (splices === void 0 && oldCollection === void 0) { + return; + } + this.needsQueue = true; + this.splices = void 0; + this.oldCollection = void 0; + const finalSplices = oldCollection === void 0 ? projectArraySplices(this.source, splices) : calcSplices(this.source, 0, this.source.length, oldCollection, 0, oldCollection.length); + this.notify(finalSplices); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/ref.js + function ref(propertyName) { + return new AttachedBehaviorHTMLDirective("fast-ref", RefBehavior, propertyName); + } + var RefBehavior; + var init_ref = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/ref.js"() { + init_html_directive(); + RefBehavior = class { + /** + * Creates an instance of RefBehavior. + * @param target - The element to reference. + * @param propertyName - The name of the property to assign the reference to. + */ + constructor(target, propertyName) { + this.target = target; + this.propertyName = propertyName; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + source[this.propertyName] = this.target; + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + /* eslint-disable-next-line @typescript-eslint/no-empty-function */ + unbind() { + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/interfaces.js + var isFunction; + var init_interfaces = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/interfaces.js"() { + isFunction = (object) => typeof object === "function"; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/when.js + function normalizeBinding(value) { + return value === void 0 ? noTemplate : isFunction(value) ? value : () => value; + } + function when(binding, templateOrTemplateBinding, elseTemplateOrTemplateBinding) { + const dataBinding = isFunction(binding) ? binding : () => binding; + const templateBinding = normalizeBinding(templateOrTemplateBinding); + const elseBinding = normalizeBinding(elseTemplateOrTemplateBinding); + return (source, context) => dataBinding(source, context) ? templateBinding(source, context) : elseBinding(source, context); + } + var noTemplate; + var init_when = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/when.js"() { + init_interfaces(); + noTemplate = () => null; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js + function bindWithoutPositioning(view, items, index, context) { + view.bind(items[index], context); + } + function bindWithPositioning(view, items, index, context) { + const childContext = Object.create(context); + childContext.index = index; + childContext.length = items.length; + view.bind(items[index], childContext); + } + var defaultRepeatOptions, RepeatBehavior, RepeatDirective; + var init_repeat = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js"() { + init_dom(); + init_observable(); + init_array_observer(); + init_platform(); + init_html_directive(); + init_view(); + defaultRepeatOptions = Object.freeze({ + positioning: false, + recycle: true + }); + RepeatBehavior = class { + /** + * Creates an instance of RepeatBehavior. + * @param location - The location in the DOM to render the repeat. + * @param itemsBinding - The array to render. + * @param isItemsBindingVolatile - Indicates whether the items binding has volatile dependencies. + * @param templateBinding - The template to render for each item. + * @param isTemplateBindingVolatile - Indicates whether the template binding has volatile dependencies. + * @param options - Options used to turn on special repeat features. + */ + constructor(location, itemsBinding, isItemsBindingVolatile, templateBinding, isTemplateBindingVolatile, options) { + this.location = location; + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.source = null; + this.views = []; + this.items = null; + this.itemsObserver = null; + this.originalContext = void 0; + this.childContext = void 0; + this.bindView = bindWithoutPositioning; + this.itemsBindingObserver = Observable.binding(itemsBinding, this, isItemsBindingVolatile); + this.templateBindingObserver = Observable.binding(templateBinding, this, isTemplateBindingVolatile); + if (options.positioning) { + this.bindView = bindWithPositioning; + } + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source, context) { + this.source = source; + this.originalContext = context; + this.childContext = Object.create(context); + this.childContext.parent = source; + this.childContext.parentContext = this.originalContext; + this.items = this.itemsBindingObserver.observe(source, this.originalContext); + this.template = this.templateBindingObserver.observe(source, this.originalContext); + this.observeItems(true); + this.refreshAllViews(); + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.source = null; + this.items = null; + if (this.itemsObserver !== null) { + this.itemsObserver.unsubscribe(this); + } + this.unbindAllViews(); + this.itemsBindingObserver.disconnect(); + this.templateBindingObserver.disconnect(); + } + /** @internal */ + handleChange(source, args) { + if (source === this.itemsBinding) { + this.items = this.itemsBindingObserver.observe(this.source, this.originalContext); + this.observeItems(); + this.refreshAllViews(); + } else if (source === this.templateBinding) { + this.template = this.templateBindingObserver.observe(this.source, this.originalContext); + this.refreshAllViews(true); + } else { + this.updateViews(args); + } + } + observeItems(force = false) { + if (!this.items) { + this.items = emptyArray; + return; + } + const oldObserver = this.itemsObserver; + const newObserver = this.itemsObserver = Observable.getNotifier(this.items); + const hasNewObserver = oldObserver !== newObserver; + if (hasNewObserver && oldObserver !== null) { + oldObserver.unsubscribe(this); + } + if (hasNewObserver || force) { + newObserver.subscribe(this); + } + } + updateViews(splices) { + const childContext = this.childContext; + const views = this.views; + const bindView = this.bindView; + const items = this.items; + const template = this.template; + const recycle = this.options.recycle; + const leftoverViews = []; + let leftoverIndex = 0; + let availableViews = 0; + for (let i = 0, ii = splices.length; i < ii; ++i) { + const splice = splices[i]; + const removed = splice.removed; + let removeIndex = 0; + let addIndex = splice.index; + const end = addIndex + splice.addedCount; + const removedViews = views.splice(splice.index, removed.length); + const totalAvailableViews = availableViews = leftoverViews.length + removedViews.length; + for (; addIndex < end; ++addIndex) { + const neighbor = views[addIndex]; + const location = neighbor ? neighbor.firstChild : this.location; + let view; + if (recycle && availableViews > 0) { + if (removeIndex <= totalAvailableViews && removedViews.length > 0) { + view = removedViews[removeIndex]; + removeIndex++; + } else { + view = leftoverViews[leftoverIndex]; + leftoverIndex++; + } + availableViews--; + } else { + view = template.create(); + } + views.splice(addIndex, 0, view); + bindView(view, items, addIndex, childContext); + view.insertBefore(location); + } + if (removedViews[removeIndex]) { + leftoverViews.push(...removedViews.slice(removeIndex)); + } + } + for (let i = leftoverIndex, ii = leftoverViews.length; i < ii; ++i) { + leftoverViews[i].dispose(); + } + if (this.options.positioning) { + for (let i = 0, ii = views.length; i < ii; ++i) { + const currentContext = views[i].context; + currentContext.length = ii; + currentContext.index = i; + } + } + } + refreshAllViews(templateChanged = false) { + const items = this.items; + const childContext = this.childContext; + const template = this.template; + const location = this.location; + const bindView = this.bindView; + let itemsLength = items.length; + let views = this.views; + let viewsLength = views.length; + if (itemsLength === 0 || templateChanged || !this.options.recycle) { + HTMLView.disposeContiguousBatch(views); + viewsLength = 0; + } + if (viewsLength === 0) { + this.views = views = new Array(itemsLength); + for (let i = 0; i < itemsLength; ++i) { + const view = template.create(); + bindView(view, items, i, childContext); + views[i] = view; + view.insertBefore(location); + } + } else { + let i = 0; + for (; i < itemsLength; ++i) { + if (i < viewsLength) { + const view = views[i]; + bindView(view, items, i, childContext); + } else { + const view = template.create(); + bindView(view, items, i, childContext); + views.push(view); + view.insertBefore(location); + } + } + const removed = views.splice(i, viewsLength - i); + for (i = 0, itemsLength = removed.length; i < itemsLength; ++i) { + removed[i].dispose(); + } + } + } + unbindAllViews() { + const views = this.views; + for (let i = 0, ii = views.length; i < ii; ++i) { + views[i].unbind(); + } + } + }; + RepeatDirective = class extends HTMLDirective { + /** + * Creates an instance of RepeatDirective. + * @param itemsBinding - The binding that provides the array to render. + * @param templateBinding - The template binding used to obtain a template to render for each item in the array. + * @param options - Options used to turn on special repeat features. + */ + constructor(itemsBinding, templateBinding, options) { + super(); + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.createPlaceholder = DOM.createBlockPlaceholder; + enableArrayObservation(); + this.isItemsBindingVolatile = Observable.isVolatileBinding(itemsBinding); + this.isTemplateBindingVolatile = Observable.isVolatileBinding(templateBinding); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + */ + createBehavior(target) { + return new RepeatBehavior(target, this.itemsBinding, this.isItemsBindingVolatile, this.templateBinding, this.isTemplateBindingVolatile, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js + function elements(selector) { + if (selector) { + return function(value, index, array) { + return value.nodeType === 1 && value.matches(selector); + }; + } + return function(value, index, array) { + return value.nodeType === 1; + }; + } + var NodeObservationBehavior; + var init_node_observation = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js"() { + init_observable(); + init_platform(); + NodeObservationBehavior = class { + /** + * Creates an instance of NodeObservationBehavior. + * @param target - The target to assign the nodes property on. + * @param options - The options to use in configuring node observation. + */ + constructor(target, options) { + this.target = target; + this.options = options; + this.source = null; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + const name = this.options.property; + this.shouldUpdate = Observable.getAccessors(source).some((x) => x.name === name); + this.source = source; + this.updateTarget(this.computeNodes()); + if (this.shouldUpdate) { + this.observe(); + } + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.updateTarget(emptyArray); + this.source = null; + if (this.shouldUpdate) { + this.disconnect(); + } + } + /** @internal */ + handleEvent() { + this.updateTarget(this.computeNodes()); + } + computeNodes() { + let nodes = this.getNodes(); + if (this.options.filter !== void 0) { + nodes = nodes.filter(this.options.filter); + } + return nodes; + } + updateTarget(value) { + this.source[this.options.property] = value; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js + function slotted(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { property: propertyOrOptions }; + } + return new AttachedBehaviorHTMLDirective("fast-slotted", SlottedBehavior, propertyOrOptions); + } + var SlottedBehavior; + var init_slotted = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js"() { + init_html_directive(); + init_node_observation(); + SlottedBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of SlottedBehavior. + * @param target - The slot element target to observe. + * @param options - The options to use when observing the slot. + */ + constructor(target, options) { + super(target, options); + } + /** + * Begins observation of the nodes. + */ + observe() { + this.target.addEventListener("slotchange", this); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.target.removeEventListener("slotchange", this); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + return this.target.assignedNodes(this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/children.js + function children(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { + property: propertyOrOptions + }; + } + return new AttachedBehaviorHTMLDirective("fast-children", ChildrenBehavior, propertyOrOptions); + } + var ChildrenBehavior; + var init_children = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/children.js"() { + init_html_directive(); + init_node_observation(); + ChildrenBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of ChildrenBehavior. + * @param target - The element target to observe children on. + * @param options - The options to use when observing the element children. + */ + constructor(target, options) { + super(target, options); + this.observer = null; + options.childList = true; + } + /** + * Begins observation of the nodes. + */ + observe() { + if (this.observer === null) { + this.observer = new MutationObserver(this.handleEvent.bind(this)); + } + this.observer.observe(this.target, this.options); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.observer.disconnect(); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + if ("subtree" in this.options) { + return Array.from(this.target.querySelectorAll(this.options.selector)); + } + return Array.from(this.target.childNodes); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/index.js + var init_esm = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/index.js"() { + init_platform(); + init_template(); + init_fast_element(); + init_fast_definitions(); + init_attributes(); + init_controller(); + init_compiler(); + init_element_styles(); + init_css(); + init_css_directive(); + init_view(); + init_observable(); + init_notifier(); + init_dom(); + init_binding(); + init_html_directive(); + init_ref(); + init_when(); + init_repeat(); + init_slotted(); + init_children(); + init_node_observation(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js + var StartEnd, endSlotTemplate, startSlotTemplate, endTemplate, startTemplate; + var init_start_end = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js"() { + init_esm(); + StartEnd = class { + handleStartContentChange() { + this.startContainer.classList.toggle("start", this.start.assignedNodes().length > 0); + } + handleEndContentChange() { + this.endContainer.classList.toggle("end", this.end.assignedNodes().length > 0); + } + }; + endSlotTemplate = (context, definition) => html` + definition.end ? "end" : void 0} + > + + ${definition.end || ""} + + +`; + startSlotTemplate = (context, definition) => html` + + + ${definition.start || ""} + + +`; + endTemplate = html` + + + +`; + startTemplate = html` + + + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js + var init_accordion_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js + function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es6 = __esm({ + "node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/di.js + function cloneArrayWithPossibleProps(source) { + const clone = source.slice(); + const keys = Object.keys(source); + const len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + clone[key] = source[key]; + } + } + return clone; + } + function getParamTypes(key) { + return (Type) => { + return Reflect.getOwnMetadata(key, Type); + }; + } + function createResolver(getter) { + return function(key) { + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor); + }; + return resolver; + }; + } + function createAllResolver(getter) { + return function(key, searchAncestors) { + searchAncestors = !!searchAncestors; + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor, searchAncestors); + }; + return resolver; + }; + } + function ignore(target, property, descriptor) { + DI.inject(ignore)(target, property, descriptor); + } + function createNewInstance(key, handler) { + return handler.getFactory(key).construct(handler); + } + function containerGetKey(d) { + return this.get(d); + } + function transformInstance(inst, transform) { + return transform(inst); + } + function isRegistry(obj) { + return typeof obj.register === "function"; + } + function isSelfRegistry(obj) { + return isRegistry(obj) && typeof obj.registerInRequestor === "boolean"; + } + function isRegisterInRequester(obj) { + return isSelfRegistry(obj) && obj.registerInRequestor; + } + function isClass(obj) { + return obj.prototype !== void 0; + } + function cacheCallbackResult(fun) { + return function(handler, requestor, resolver) { + if (cache.has(resolver)) { + return cache.get(resolver); + } + const t = fun(handler, requestor, resolver); + cache.set(resolver, t); + return t; + }; + } + function validateKey(key) { + if (key === null || key === void 0) { + throw new Error("key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?"); + } + } + function buildAllResponse(resolver, handler, requestor) { + if (resolver instanceof ResolverImpl && resolver.strategy === 4) { + const state = resolver.state; + let i = state.length; + const results = new Array(i); + while (i--) { + results[i] = state[i].resolve(handler, requestor); + } + return results; + } + return [resolver.resolve(handler, requestor)]; + } + function isObject(value) { + return typeof value === "object" && value !== null || typeof value === "function"; + } + function isArrayIndex(value) { + switch (typeof value) { + case "number": + return value >= 0 && (value | 0) === value; + case "string": { + const result = isNumericLookup[value]; + if (result !== void 0) { + return result; + } + const length = value.length; + if (length === 0) { + return isNumericLookup[value] = false; + } + let ch = 0; + for (let i = 0; i < length; ++i) { + ch = value.charCodeAt(i); + if (i === 0 && ch === 48 && length > 1 || ch < 48 || ch > 57) { + return isNumericLookup[value] = false; + } + } + return isNumericLookup[value] = true; + } + default: + return false; + } + } + var metadataByTarget, ResolverBuilder, DefaultResolver, ContainerConfiguration, dependencyLookup, rootDOMContainer, DI, Container, inject, defaultSingletonOptions, all, lazy, optional, newInstanceForScope, newInstanceOf, ResolverImpl, FactoryImpl, containerResolver, InstrinsicTypeNames, DILocateParentEventType, factories, ContainerImpl, cache, Registration, defaultFriendlyName, isNativeFunction, isNumericLookup; + var init_di = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/di.js"() { + init_esm(); + metadataByTarget = /* @__PURE__ */ new Map(); + if (!("metadata" in Reflect)) { + Reflect.metadata = function(key, value) { + return function(target) { + Reflect.defineMetadata(key, value, target); + }; + }; + Reflect.defineMetadata = function(key, value, target) { + let metadata = metadataByTarget.get(target); + if (metadata === void 0) { + metadataByTarget.set(target, metadata = /* @__PURE__ */ new Map()); + } + metadata.set(key, value); + }; + Reflect.getOwnMetadata = function(key, target) { + const metadata = metadataByTarget.get(target); + if (metadata !== void 0) { + return metadata.get(key); + } + return void 0; + }; + } + ResolverBuilder = class { + /** + * + * @param container - The container to create resolvers for. + * @param key - The key to register resolvers under. + */ + constructor(container, key) { + this.container = container; + this.key = key; + } + /** + * Creates a resolver for an existing object instance. + * @param value - The instance to resolve. + * @returns The resolver. + */ + instance(value) { + return this.registerResolver(0, value); + } + /** + * Creates a resolver that enforces a singleton lifetime. + * @param value - The type to create and cache the singleton for. + * @returns The resolver. + */ + singleton(value) { + return this.registerResolver(1, value); + } + /** + * Creates a resolver that creates a new instance for every dependency request. + * @param value - The type to create instances of. + * @returns - The resolver. + */ + transient(value) { + return this.registerResolver(2, value); + } + /** + * Creates a resolver that invokes a callback function for every dependency resolution + * request, allowing custom logic to return the dependency. + * @param value - The callback to call during resolution. + * @returns The resolver. + */ + callback(value) { + return this.registerResolver(3, value); + } + /** + * Creates a resolver that invokes a callback function the first time that a dependency + * resolution is requested. The returned value is then cached and provided for all + * subsequent requests. + * @param value - The callback to call during the first resolution. + * @returns The resolver. + */ + cachedCallback(value) { + return this.registerResolver(3, cacheCallbackResult(value)); + } + /** + * Aliases the current key to a different key. + * @param destinationKey - The key to point the alias to. + * @returns The resolver. + */ + aliasTo(destinationKey) { + return this.registerResolver(5, destinationKey); + } + registerResolver(strategy, state) { + const { container, key } = this; + this.container = this.key = void 0; + return container.registerResolver(key, new ResolverImpl(key, strategy, state)); + } + }; + DefaultResolver = Object.freeze({ + /** + * Disables auto-registration and throws for all un-registered dependencies. + * @param key - The key to create the resolver for. + */ + none(key) { + throw Error(`${key.toString()} not registered, did you forget to add @singleton()?`); + }, + /** + * Provides default singleton resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + singleton(key) { + return new ResolverImpl(key, 1, key); + }, + /** + * Provides default transient resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + transient(key) { + return new ResolverImpl(key, 2, key); + } + }); + ContainerConfiguration = Object.freeze({ + /** + * The default configuration used when creating a DOM-disconnected container. + * @remarks + * The default creates a root container, with no parent container. It does not handle + * owner requests and it uses singleton resolution behavior for auto-registration. + */ + default: Object.freeze({ + parentLocator: () => null, + responsibleForOwnerRequests: false, + defaultResolver: DefaultResolver.singleton + }) + }); + dependencyLookup = /* @__PURE__ */ new Map(); + rootDOMContainer = null; + DI = Object.freeze({ + /** + * Creates a new dependency injection container. + * @param config - The configuration for the container. + * @returns A newly created dependency injection container. + */ + createContainer(config) { + return new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config)); + }, + /** + * Finds the dependency injection container responsible for providing dependencies + * to the specified node. + * @param node - The node to find the responsible container for. + * @returns The container responsible for providing dependencies to the node. + * @remarks + * This will be the same as the parent container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findResponsibleContainer(node) { + const owned = node.$$container$$; + if (owned && owned.responsibleForOwnerRequests) { + return owned; + } + return DI.findParentContainer(node); + }, + /** + * Find the dependency injection container up the DOM tree from this node. + * @param node - The node to find the parent container for. + * @returns The parent container of this node. + * @remarks + * This will be the same as the responsible container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findParentContainer(node) { + const event = new CustomEvent(DILocateParentEventType, { + bubbles: true, + composed: true, + cancelable: true, + detail: { container: void 0 } + }); + node.dispatchEvent(event); + return event.detail.container || DI.getOrCreateDOMContainer(); + }, + /** + * Returns a dependency injection container if one is explicitly owned by the specified + * node. If one is not owned, then a new container is created and assigned to the node. + * @param node - The node to find or create the container for. + * @param config - The configuration for the container if one needs to be created. + * @returns The located or created container. + * @remarks + * This API does not search for a responsible or parent container. It looks only for a container + * directly defined on the specified node and creates one at that location if one does not + * already exist. + */ + getOrCreateDOMContainer(node, config) { + if (!node) { + return rootDOMContainer || (rootDOMContainer = new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: () => null + }))); + } + return node.$$container$$ || new ContainerImpl(node, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: DI.findParentContainer + })); + }, + /** + * Gets the "design:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getDesignParamtypes: getParamTypes("design:paramtypes"), + /** + * Gets the "di:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getAnnotationParamtypes: getParamTypes("di:paramtypes"), + /** + * + * @param Type - Gets the "di:paramtypes" metadata for the specified type. If none is found, + * an empty metadata array is created and added. + * @returns The metadata array. + */ + getOrCreateAnnotationParamTypes(Type) { + let annotationParamtypes = this.getAnnotationParamtypes(Type); + if (annotationParamtypes === void 0) { + Reflect.defineMetadata("di:paramtypes", annotationParamtypes = [], Type); + } + return annotationParamtypes; + }, + /** + * Gets the dependency keys representing what is needed to instantiate the specified type. + * @param Type - The type to get the dependencies for. + * @returns An array of dependency keys. + */ + getDependencies(Type) { + let dependencies = dependencyLookup.get(Type); + if (dependencies === void 0) { + const inject2 = Type.inject; + if (inject2 === void 0) { + const designParamtypes = DI.getDesignParamtypes(Type); + const annotationParamtypes = DI.getAnnotationParamtypes(Type); + if (designParamtypes === void 0) { + if (annotationParamtypes === void 0) { + const Proto = Object.getPrototypeOf(Type); + if (typeof Proto === "function" && Proto !== Function.prototype) { + dependencies = cloneArrayWithPossibleProps(DI.getDependencies(Proto)); + } else { + dependencies = []; + } + } else { + dependencies = cloneArrayWithPossibleProps(annotationParamtypes); + } + } else if (annotationParamtypes === void 0) { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + } else { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + let len = annotationParamtypes.length; + let auAnnotationParamtype; + for (let i = 0; i < len; ++i) { + auAnnotationParamtype = annotationParamtypes[i]; + if (auAnnotationParamtype !== void 0) { + dependencies[i] = auAnnotationParamtype; + } + } + const keys = Object.keys(annotationParamtypes); + len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + dependencies[key] = annotationParamtypes[key]; + } + } + } + } else { + dependencies = cloneArrayWithPossibleProps(inject2); + } + dependencyLookup.set(Type, dependencies); + } + return dependencies; + }, + /** + * Defines a property on a web component class. The value of this property will + * be resolved from the dependency injection container responsible for the element + * instance, based on where it is connected in the DOM. + * @param target - The target to define the property on. + * @param propertyName - The name of the property to define. + * @param key - The dependency injection key. + * @param respectConnection - Indicates whether or not to update the property value if the + * hosting component is disconnected and then re-connected at a different location in the DOM. + * @remarks + * The respectConnection option is only applicable to elements that descend from FASTElement. + */ + defineProperty(target, propertyName, key, respectConnection = false) { + const diPropertyKey = `$di_${propertyName}`; + Reflect.defineProperty(target, propertyName, { + get: function() { + let value = this[diPropertyKey]; + if (value === void 0) { + const container = this instanceof HTMLElement ? DI.findResponsibleContainer(this) : DI.getOrCreateDOMContainer(); + value = container.get(key); + this[diPropertyKey] = value; + if (respectConnection && this instanceof FASTElement) { + const notifier = this.$fastController; + const handleChange = () => { + const newContainer = DI.findResponsibleContainer(this); + const newValue = newContainer.get(key); + const oldValue = this[diPropertyKey]; + if (newValue !== oldValue) { + this[diPropertyKey] = value; + notifier.notify(propertyName); + } + }; + notifier.subscribe({ handleChange }, "isConnected"); + } + } + return value; + } + }); + }, + /** + * Creates a dependency injection key. + * @param nameConfigOrCallback - A friendly name for the key or a lambda that configures a + * default resolution for the dependency. + * @param configuror - If a friendly name was provided for the first parameter, then an optional + * lambda that configures a default resolution for the dependency can be provided second. + * @returns The created key. + * @remarks + * The created key can be used as a property decorator or constructor parameter decorator, + * in addition to its standard use in an inject array or through direct container APIs. + */ + createInterface(nameConfigOrCallback, configuror) { + const configure = typeof nameConfigOrCallback === "function" ? nameConfigOrCallback : configuror; + const friendlyName = typeof nameConfigOrCallback === "string" ? nameConfigOrCallback : nameConfigOrCallback && "friendlyName" in nameConfigOrCallback ? nameConfigOrCallback.friendlyName || defaultFriendlyName : defaultFriendlyName; + const respectConnection = typeof nameConfigOrCallback === "string" ? false : nameConfigOrCallback && "respectConnection" in nameConfigOrCallback ? nameConfigOrCallback.respectConnection || false : false; + const Interface = function(target, property, index) { + if (target == null || new.target !== void 0) { + throw new Error(`No registration for interface: '${Interface.friendlyName}'`); + } + if (property) { + DI.defineProperty(target, property, Interface, respectConnection); + } else { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + annotationParamtypes[index] = Interface; + } + }; + Interface.$isInterface = true; + Interface.friendlyName = friendlyName == null ? "(anonymous)" : friendlyName; + if (configure != null) { + Interface.register = function(container, key) { + return configure(new ResolverBuilder(container, key !== null && key !== void 0 ? key : Interface)); + }; + } + Interface.toString = function toString() { + return `InterfaceSymbol<${Interface.friendlyName}>`; + }; + return Interface; + }, + /** + * A decorator that specifies what to inject into its target. + * @param dependencies - The dependencies to inject. + * @returns The decorator to be applied to the target class. + * @remarks + * The decorator can be used to decorate a class, listing all of the classes dependencies. + * Or it can be used to decorate a constructor paramter, indicating what to inject for that + * parameter. + * Or it can be used for a web component property, indicating what that property should resolve to. + */ + inject(...dependencies) { + return function(target, key, descriptor) { + if (typeof descriptor === "number") { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + const dep = dependencies[0]; + if (dep !== void 0) { + annotationParamtypes[descriptor] = dep; + } + } else if (key) { + DI.defineProperty(target, key, dependencies[0]); + } else { + const annotationParamtypes = descriptor ? DI.getOrCreateAnnotationParamTypes(descriptor.value) : DI.getOrCreateAnnotationParamTypes(target); + let dep; + for (let i = 0; i < dependencies.length; ++i) { + dep = dependencies[i]; + if (dep !== void 0) { + annotationParamtypes[i] = dep; + } + } + } + }; + }, + /** + * Registers the `target` class as a transient dependency; each time the dependency is resolved + * a new instance will be created. + * + * @param target - The class / constructor function to register as transient. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.transient(Foo); + * ``` + * + * @example + * Inline declaration + * + * ```ts + * const Foo = DI.transient(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + transient(target) { + target.register = function register(container) { + const registration = Registration.transient(target, target); + return registration.register(container); + }; + target.registerInRequestor = false; + return target; + }, + /** + * Registers the `target` class as a singleton dependency; the class will only be created once. Each + * consecutive time the dependency is resolved, the same instance will be returned. + * + * @param target - The class / constructor function to register as a singleton. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.singleton(Foo); + * ``` + * + * @example + * Inline declaration + * ```ts + * const Foo = DI.singleton(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + singleton(target, options = defaultSingletonOptions) { + target.register = function register(container) { + const registration = Registration.singleton(target, target); + return registration.register(container); + }; + target.registerInRequestor = options.scoped; + return target; + } + }); + Container = DI.createInterface("Container"); + inject = DI.inject; + defaultSingletonOptions = { scoped: false }; + all = createAllResolver((key, handler, requestor, searchAncestors) => requestor.getAll(key, searchAncestors)); + lazy = createResolver((key, handler, requestor) => { + return () => requestor.get(key); + }); + optional = createResolver((key, handler, requestor) => { + if (requestor.has(key, true)) { + return requestor.get(key); + } else { + return void 0; + } + }); + ignore.$isResolver = true; + ignore.resolve = () => void 0; + newInstanceForScope = createResolver((key, handler, requestor) => { + const instance = createNewInstance(key, handler); + const resolver = new ResolverImpl(key, 0, instance); + requestor.registerResolver(key, resolver); + return instance; + }); + newInstanceOf = createResolver((key, handler, _requestor) => createNewInstance(key, handler)); + ResolverImpl = class { + constructor(key, strategy, state) { + this.key = key; + this.strategy = strategy; + this.state = state; + this.resolving = false; + } + get $isResolver() { + return true; + } + register(container) { + return container.registerResolver(this.key, this); + } + resolve(handler, requestor) { + switch (this.strategy) { + case 0: + return this.state; + case 1: { + if (this.resolving) { + throw new Error(`Cyclic dependency found: ${this.state.name}`); + } + this.resolving = true; + this.state = handler.getFactory(this.state).construct(requestor); + this.strategy = 0; + this.resolving = false; + return this.state; + } + case 2: { + const factory = handler.getFactory(this.state); + if (factory === null) { + throw new Error(`Resolver for ${String(this.key)} returned a null factory`); + } + return factory.construct(requestor); + } + case 3: + return this.state(handler, requestor, this); + case 4: + return this.state[0].resolve(handler, requestor); + case 5: + return requestor.get(this.state); + default: + throw new Error(`Invalid resolver strategy specified: ${this.strategy}.`); + } + } + getFactory(container) { + var _a, _b, _c; + switch (this.strategy) { + case 1: + case 2: + return container.getFactory(this.state); + case 5: + return (_c = (_b = (_a = container.getResolver(this.state)) === null || _a === void 0 ? void 0 : _a.getFactory) === null || _b === void 0 ? void 0 : _b.call(_a, container)) !== null && _c !== void 0 ? _c : null; + default: + return null; + } + } + }; + FactoryImpl = class { + constructor(Type, dependencies) { + this.Type = Type; + this.dependencies = dependencies; + this.transformers = null; + } + construct(container, dynamicDependencies) { + let instance; + if (dynamicDependencies === void 0) { + instance = new this.Type(...this.dependencies.map(containerGetKey, container)); + } else { + instance = new this.Type(...this.dependencies.map(containerGetKey, container), ...dynamicDependencies); + } + if (this.transformers == null) { + return instance; + } + return this.transformers.reduce(transformInstance, instance); + } + registerTransformer(transformer) { + (this.transformers || (this.transformers = [])).push(transformer); + } + }; + containerResolver = { + $isResolver: true, + resolve(handler, requestor) { + return requestor; + } + }; + InstrinsicTypeNames = /* @__PURE__ */ new Set([ + "Array", + "ArrayBuffer", + "Boolean", + "DataView", + "Date", + "Error", + "EvalError", + "Float32Array", + "Float64Array", + "Function", + "Int8Array", + "Int16Array", + "Int32Array", + "Map", + "Number", + "Object", + "Promise", + "RangeError", + "ReferenceError", + "RegExp", + "Set", + "SharedArrayBuffer", + "String", + "SyntaxError", + "TypeError", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "URIError", + "WeakMap", + "WeakSet" + ]); + DILocateParentEventType = "__DI_LOCATE_PARENT__"; + factories = /* @__PURE__ */ new Map(); + ContainerImpl = class _ContainerImpl { + constructor(owner, config) { + this.owner = owner; + this.config = config; + this._parent = void 0; + this.registerDepth = 0; + this.context = null; + if (owner !== null) { + owner.$$container$$ = this; + } + this.resolvers = /* @__PURE__ */ new Map(); + this.resolvers.set(Container, containerResolver); + if (owner instanceof Node) { + owner.addEventListener(DILocateParentEventType, (e) => { + if (e.composedPath()[0] !== this.owner) { + e.detail.container = this; + e.stopImmediatePropagation(); + } + }); + } + } + get parent() { + if (this._parent === void 0) { + this._parent = this.config.parentLocator(this.owner); + } + return this._parent; + } + get depth() { + return this.parent === null ? 0 : this.parent.depth + 1; + } + get responsibleForOwnerRequests() { + return this.config.responsibleForOwnerRequests; + } + registerWithContext(context, ...params) { + this.context = context; + this.register(...params); + this.context = null; + return this; + } + register(...params) { + if (++this.registerDepth === 100) { + throw new Error("Unable to autoregister dependency"); + } + let current; + let keys; + let value; + let j; + let jj; + const context = this.context; + for (let i = 0, ii = params.length; i < ii; ++i) { + current = params[i]; + if (!isObject(current)) { + continue; + } + if (isRegistry(current)) { + current.register(this, context); + } else if (isClass(current)) { + Registration.singleton(current, current).register(this); + } else { + keys = Object.keys(current); + j = 0; + jj = keys.length; + for (; j < jj; ++j) { + value = current[keys[j]]; + if (!isObject(value)) { + continue; + } + if (isRegistry(value)) { + value.register(this, context); + } else { + this.register(value); + } + } + } + } + --this.registerDepth; + return this; + } + registerResolver(key, resolver) { + validateKey(key); + const resolvers = this.resolvers; + const result = resolvers.get(key); + if (result == null) { + resolvers.set(key, resolver); + } else if (result instanceof ResolverImpl && result.strategy === 4) { + result.state.push(resolver); + } else { + resolvers.set(key, new ResolverImpl(key, 4, [result, resolver])); + } + return resolver; + } + registerTransformer(key, transformer) { + const resolver = this.getResolver(key); + if (resolver == null) { + return false; + } + if (resolver.getFactory) { + const factory = resolver.getFactory(this); + if (factory == null) { + return false; + } + factory.registerTransformer(transformer); + return true; + } + return false; + } + getResolver(key, autoRegister = true) { + validateKey(key); + if (key.resolve !== void 0) { + return key; + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + return autoRegister ? this.jitRegister(key, handler) : null; + } + current = current.parent; + } else { + return resolver; + } + } + return null; + } + has(key, searchAncestors = false) { + return this.resolvers.has(key) ? true : searchAncestors && this.parent != null ? this.parent.has(key, true) : false; + } + get(key) { + validateKey(key); + if (key.$isResolver) { + return key.resolve(this, this); + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + resolver = this.jitRegister(key, handler); + return resolver.resolve(current, this); + } + current = current.parent; + } else { + return resolver.resolve(current, this); + } + } + throw new Error(`Unable to resolve key: ${String(key)}`); + } + getAll(key, searchAncestors = false) { + validateKey(key); + const requestor = this; + let current = requestor; + let resolver; + if (searchAncestors) { + let resolutions = emptyArray; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver != null) { + resolutions = resolutions.concat( + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + buildAllResponse(resolver, current, requestor) + ); + } + current = current.parent; + } + return resolutions; + } else { + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + current = current.parent; + if (current == null) { + return emptyArray; + } + } else { + return buildAllResponse(resolver, current, requestor); + } + } + } + return emptyArray; + } + getFactory(Type) { + let factory = factories.get(Type); + if (factory === void 0) { + if (isNativeFunction(Type)) { + throw new Error(`${Type.name} is a native function and therefore cannot be safely constructed by DI. If this is intentional, please use a callback or cachedCallback resolver.`); + } + factories.set(Type, factory = new FactoryImpl(Type, DI.getDependencies(Type))); + } + return factory; + } + registerFactory(key, factory) { + factories.set(key, factory); + } + createChild(config) { + return new _ContainerImpl(null, Object.assign({}, this.config, config, { parentLocator: () => this })); + } + jitRegister(keyAsValue, handler) { + if (typeof keyAsValue !== "function") { + throw new Error(`Attempted to jitRegister something that is not a constructor: '${keyAsValue}'. Did you forget to register this dependency?`); + } + if (InstrinsicTypeNames.has(keyAsValue.name)) { + throw new Error(`Attempted to jitRegister an intrinsic type: ${keyAsValue.name}. Did you forget to add @inject(Key)`); + } + if (isRegistry(keyAsValue)) { + const registrationResolver = keyAsValue.register(handler); + if (!(registrationResolver instanceof Object) || registrationResolver.resolve == null) { + const newResolver = handler.resolvers.get(keyAsValue); + if (newResolver != void 0) { + return newResolver; + } + throw new Error("A valid resolver was not returned from the static register method"); + } + return registrationResolver; + } else if (keyAsValue.$isInterface) { + throw new Error(`Attempted to jitRegister an interface: ${keyAsValue.friendlyName}`); + } else { + const resolver = this.config.defaultResolver(keyAsValue, handler); + handler.resolvers.set(keyAsValue, resolver); + return resolver; + } + } + }; + cache = /* @__PURE__ */ new WeakMap(); + Registration = Object.freeze({ + /** + * Allows you to pass an instance. + * Every time you request this {@link Key} you will get this instance back. + * + * @example + * ``` + * Registration.instance(Foo, new Foo())); + * ``` + * + * @param key - The key to register the instance under. + * @param value - The instance to return when the key is requested. + */ + instance(key, value) { + return new ResolverImpl(key, 0, value); + }, + /** + * Creates an instance from the class. + * Every time you request this {@link Key} you will get the same one back. + * + * @example + * ``` + * Registration.singleton(Foo, Foo); + * ``` + * + * @param key - The key to register the singleton under. + * @param value - The class to instantiate as a singleton when first requested. + */ + singleton(key, value) { + return new ResolverImpl(key, 1, value); + }, + /** + * Creates an instance from a class. + * Every time you request this {@link Key} you will get a new instance. + * + * @example + * ``` + * Registration.instance(Foo, Foo); + * ``` + * + * @param key - The key to register the instance type under. + * @param value - The class to instantiate each time the key is requested. + */ + transient(key, value) { + return new ResolverImpl(key, 2, value); + }, + /** + * Delegates to a callback function to provide the dependency. + * Every time you request this {@link Key} the callback will be invoked to provide + * the dependency. + * + * @example + * ``` + * Registration.callback(Foo, () => new Foo()); + * Registration.callback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + */ + callback(key, callback) { + return new ResolverImpl(key, 3, callback); + }, + /** + * Delegates to a callback function to provide the dependency and then caches the + * dependency for future requests. + * + * @example + * ``` + * Registration.cachedCallback(Foo, () => new Foo()); + * Registration.cachedCallback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + * @remarks + * If you pass the same Registration to another container, the same cached value will be used. + * Should all references to the resolver returned be removed, the cache will expire. + */ + cachedCallback(key, callback) { + return new ResolverImpl(key, 3, cacheCallbackResult(callback)); + }, + /** + * Creates an alternate {@link Key} to retrieve an instance by. + * + * @example + * ``` + * Register.singleton(Foo, Foo) + * Register.aliasTo(Foo, MyFoos); + * + * container.getAll(MyFoos) // contains an instance of Foo + * ``` + * + * @param originalKey - The original key that has been registered. + * @param aliasKey - The alias to the original key. + */ + aliasTo(originalKey, aliasKey) { + return new ResolverImpl(aliasKey, 5, originalKey); + } + }); + defaultFriendlyName = "(anonymous)"; + isNativeFunction = /* @__PURE__ */ (function() { + const lookup = /* @__PURE__ */ new WeakMap(); + let isNative = false; + let sourceText = ""; + let i = 0; + return function(fn) { + isNative = lookup.get(fn); + if (isNative === void 0) { + sourceText = fn.toString(); + i = sourceText.length; + isNative = // 29 is the length of 'function () { [native code] }' which is the smallest length of a native function string + i >= 29 && // 100 seems to be a safe upper bound of the max length of a native function. In Chrome and FF it's 56, in Edge it's 61. + i <= 100 && // This whole heuristic *could* be tricked by a comment. Do we need to care about that? + sourceText.charCodeAt(i - 1) === 125 && // } + // TODO: the spec is a little vague about the precise constraints, so we do need to test this across various browsers to make sure just one whitespace is a safe assumption. + sourceText.charCodeAt(i - 2) <= 32 && // whitespace + sourceText.charCodeAt(i - 3) === 93 && // ] + sourceText.charCodeAt(i - 4) === 101 && // e + sourceText.charCodeAt(i - 5) === 100 && // d + sourceText.charCodeAt(i - 6) === 111 && // o + sourceText.charCodeAt(i - 7) === 99 && // c + sourceText.charCodeAt(i - 8) === 32 && // + sourceText.charCodeAt(i - 9) === 101 && // e + sourceText.charCodeAt(i - 10) === 118 && // v + sourceText.charCodeAt(i - 11) === 105 && // i + sourceText.charCodeAt(i - 12) === 116 && // t + sourceText.charCodeAt(i - 13) === 97 && // a + sourceText.charCodeAt(i - 14) === 110 && // n + sourceText.charCodeAt(i - 15) === 88; + lookup.set(fn, isNative); + } + return isNative; + }; + })(); + isNumericLookup = {}; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js + function presentationKeyFromTag(tagName) { + return `${tagName.toLowerCase()}:presentation`; + } + var presentationRegistry, ComponentPresentation, DefaultComponentPresentation; + var init_component_presentation = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js"() { + init_esm(); + init_di(); + presentationRegistry = /* @__PURE__ */ new Map(); + ComponentPresentation = Object.freeze({ + /** + * Defines a component presentation for an element. + * @param tagName - The element name to define the presentation for. + * @param presentation - The presentation that will be applied to matching elements. + * @param container - The dependency injection container to register the configuration in. + * @public + */ + define(tagName, presentation, container) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === void 0) { + presentationRegistry.set(key, presentation); + } else { + presentationRegistry.set(key, false); + } + container.register(Registration.instance(key, presentation)); + }, + /** + * Finds a component presentation for the specified element name, + * searching the DOM hierarchy starting from the provided element. + * @param tagName - The name of the element to locate the presentation for. + * @param element - The element to begin the search from. + * @returns The component presentation or null if none is found. + * @public + */ + forTag(tagName, element) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === false) { + const container = DI.findResponsibleContainer(element); + return container.get(key); + } + return existing || null; + } + }); + DefaultComponentPresentation = class { + /** + * Creates an instance of DefaultComponentPresentation. + * @param template - The template to apply to the element. + * @param styles - The styles to apply to the element. + * @public + */ + constructor(template, styles) { + this.template = template || null; + this.styles = styles === void 0 ? null : Array.isArray(styles) ? ElementStyles.create(styles) : styles instanceof ElementStyles ? styles : ElementStyles.create([styles]); + } + /** + * Applies the presentation details to the specified element. + * @param element - The element to apply the presentation details to. + * @public + */ + applyTo(element) { + const controller = element.$fastController; + if (controller.template === null) { + controller.template = this.template; + } + if (controller.styles === null) { + controller.styles = this.styles; + } + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js + function resolveOption(option, context, definition) { + if (typeof option === "function") { + return option(context, definition); + } + return option; + } + var FoundationElement, FoundationElementRegistry; + var init_foundation_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js"() { + init_tslib_es6(); + init_esm(); + init_component_presentation(); + FoundationElement = class _FoundationElement extends FASTElement { + constructor() { + super(...arguments); + this._presentation = void 0; + } + /** + * A property which resolves the ComponentPresentation instance + * for the current component. + * @public + */ + get $presentation() { + if (this._presentation === void 0) { + this._presentation = ComponentPresentation.forTag(this.tagName, this); + } + return this._presentation; + } + templateChanged() { + if (this.template !== void 0) { + this.$fastController.template = this.template; + } + } + stylesChanged() { + if (this.styles !== void 0) { + this.$fastController.styles = this.styles; + } + } + /** + * The connected callback for this FASTElement. + * @remarks + * This method is invoked by the platform whenever this FoundationElement + * becomes connected to the document. + * @public + */ + connectedCallback() { + if (this.$presentation !== null) { + this.$presentation.applyTo(this); + } + super.connectedCallback(); + } + /** + * Defines an element registry function with a set of element definition defaults. + * @param elementDefinition - The definition of the element to create the registry + * function for. + * @public + */ + static compose(elementDefinition) { + return (overrideDefinition = {}) => new FoundationElementRegistry(this === _FoundationElement ? class extends _FoundationElement { + } : this, elementDefinition, overrideDefinition); + } + }; + __decorate([ + observable + ], FoundationElement.prototype, "template", void 0); + __decorate([ + observable + ], FoundationElement.prototype, "styles", void 0); + FoundationElementRegistry = class { + constructor(type, elementDefinition, overrideDefinition) { + this.type = type; + this.elementDefinition = elementDefinition; + this.overrideDefinition = overrideDefinition; + this.definition = Object.assign(Object.assign({}, this.elementDefinition), this.overrideDefinition); + } + register(container, context) { + const definition = this.definition; + const overrideDefinition = this.overrideDefinition; + const prefix = definition.prefix || context.elementPrefix; + const name = `${prefix}-${definition.baseName}`; + context.tryDefineElement({ + name, + type: this.type, + baseClass: this.elementDefinition.baseClass, + callback: (x) => { + const presentation = new DefaultComponentPresentation(resolveOption(definition.template, x, definition), resolveOption(definition.styles, x, definition)); + x.definePresentation(presentation); + let shadowOptions = resolveOption(definition.shadowOptions, x, definition); + if (x.shadowRootMode) { + if (shadowOptions) { + if (!overrideDefinition.shadowOptions) { + shadowOptions.mode = x.shadowRootMode; + } + } else if (shadowOptions !== null) { + shadowOptions = { mode: x.shadowRootMode }; + } + } + x.defineElement({ + elementOptions: resolveOption(definition.elementOptions, x, definition), + shadowOptions, + attributes: resolveOption(definition.attributes, x, definition) + }); + } + }); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js + function applyMixins(derivedCtor, ...baseCtors) { + const derivedAttributes = AttributeConfiguration.locate(derivedCtor); + baseCtors.forEach((baseCtor) => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => { + if (name !== "constructor") { + Object.defineProperty( + derivedCtor.prototype, + name, + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + Object.getOwnPropertyDescriptor(baseCtor.prototype, name) + ); + } + }); + const baseAttributes = AttributeConfiguration.locate(baseCtor); + baseAttributes.forEach((x) => derivedAttributes.push(x)); + }); + } + var init_apply_mixins = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js"() { + init_esm(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js + var AccordionItem; + var init_accordion_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_start_end(); + init_apply_mixins(); + AccordionItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.headinglevel = 2; + this.expanded = false; + this.clickHandler = (e) => { + this.expanded = !this.expanded; + this.change(); + }; + this.change = () => { + this.$emit("change"); + }; + } + }; + __decorate([ + attr({ + attribute: "heading-level", + mode: "fromView", + converter: nullableNumberConverter + }) + ], AccordionItem.prototype, "headinglevel", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], AccordionItem.prototype, "expanded", void 0); + __decorate([ + attr + ], AccordionItem.prototype, "id", void 0); + applyMixins(AccordionItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js + var init_accordion_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js"() { + init_accordion_item_template(); + init_accordion_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js + var init_accordion_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/aria.js + var Orientation; + var init_aria = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/aria.js"() { + Orientation = { + horizontal: "horizontal", + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/array.js + function findLastIndex(array, predicate) { + let k = array.length; + while (k--) { + if (predicate(array[k], k, array)) { + return k; + } + } + return -1; + } + var init_array = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/array.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/class-names.js + var init_class_names = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/class-names.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-dom.js + function canUseDOM() { + return !!(typeof window !== "undefined" && window.document && window.document.createElement); + } + var init_can_use_dom = __esm({ + "node_modules/exenv-es6/dist/can-use-dom.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-event-listeners.js + var init_can_use_event_listeners = __esm({ + "node_modules/exenv-es6/dist/can-use-event-listeners.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-viewport.js + var init_can_use_viewport = __esm({ + "node_modules/exenv-es6/dist/can-use-viewport.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-workers.js + var init_can_use_workers = __esm({ + "node_modules/exenv-es6/dist/can-use-workers.js"() { + } + }); + + // node_modules/exenv-es6/dist/index.js + var init_dist = __esm({ + "node_modules/exenv-es6/dist/index.js"() { + init_can_use_dom(); + init_can_use_event_listeners(); + init_can_use_viewport(); + init_can_use_workers(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/dom.js + function isHTMLElement(...args) { + return args.every((arg) => arg instanceof HTMLElement); + } + function getDisplayedNodes(rootNode, selector) { + if (!rootNode || !selector || !isHTMLElement(rootNode)) { + return; + } + const nodes = Array.from(rootNode.querySelectorAll(selector)); + return nodes.filter((node) => node.offsetParent !== null); + } + function getNonce() { + const node = document.querySelector('meta[property="csp-nonce"]'); + if (node) { + return node.getAttribute("content"); + } else { + return null; + } + } + function canUseFocusVisible() { + if (typeof _canUseFocusVisible === "boolean") { + return _canUseFocusVisible; + } + if (!canUseDOM()) { + _canUseFocusVisible = false; + return _canUseFocusVisible; + } + const styleElement = document.createElement("style"); + const styleNonce = getNonce(); + if (styleNonce !== null) { + styleElement.setAttribute("nonce", styleNonce); + } + document.head.appendChild(styleElement); + try { + styleElement.sheet.insertRule("foo:focus-visible {color:inherit}", 0); + _canUseFocusVisible = true; + } catch (e) { + _canUseFocusVisible = false; + } finally { + document.head.removeChild(styleElement); + } + return _canUseFocusVisible; + } + var _canUseFocusVisible; + var init_dom2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/dom.js"() { + init_dist(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/events.js + var eventFocus, eventFocusIn, eventFocusOut, eventKeyDown, eventResize, eventScroll; + var init_events = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/events.js"() { + eventFocus = "focus"; + eventFocusIn = "focusin"; + eventFocusOut = "focusout"; + eventKeyDown = "keydown"; + eventResize = "resize"; + eventScroll = "scroll"; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/html.js + var init_html = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/html.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/key-codes.js + var KeyCodes, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnter, keyEscape, keyHome, keyEnd, keyFunction2, keyPageDown, keyPageUp, keySpace, keyTab, keyBackspace, keyDelete, ArrowKeys; + var init_key_codes = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/key-codes.js"() { + (function(KeyCodes2) { + KeyCodes2[KeyCodes2["alt"] = 18] = "alt"; + KeyCodes2[KeyCodes2["arrowDown"] = 40] = "arrowDown"; + KeyCodes2[KeyCodes2["arrowLeft"] = 37] = "arrowLeft"; + KeyCodes2[KeyCodes2["arrowRight"] = 39] = "arrowRight"; + KeyCodes2[KeyCodes2["arrowUp"] = 38] = "arrowUp"; + KeyCodes2[KeyCodes2["back"] = 8] = "back"; + KeyCodes2[KeyCodes2["backSlash"] = 220] = "backSlash"; + KeyCodes2[KeyCodes2["break"] = 19] = "break"; + KeyCodes2[KeyCodes2["capsLock"] = 20] = "capsLock"; + KeyCodes2[KeyCodes2["closeBracket"] = 221] = "closeBracket"; + KeyCodes2[KeyCodes2["colon"] = 186] = "colon"; + KeyCodes2[KeyCodes2["colon2"] = 59] = "colon2"; + KeyCodes2[KeyCodes2["comma"] = 188] = "comma"; + KeyCodes2[KeyCodes2["ctrl"] = 17] = "ctrl"; + KeyCodes2[KeyCodes2["delete"] = 46] = "delete"; + KeyCodes2[KeyCodes2["end"] = 35] = "end"; + KeyCodes2[KeyCodes2["enter"] = 13] = "enter"; + KeyCodes2[KeyCodes2["equals"] = 187] = "equals"; + KeyCodes2[KeyCodes2["equals2"] = 61] = "equals2"; + KeyCodes2[KeyCodes2["equals3"] = 107] = "equals3"; + KeyCodes2[KeyCodes2["escape"] = 27] = "escape"; + KeyCodes2[KeyCodes2["forwardSlash"] = 191] = "forwardSlash"; + KeyCodes2[KeyCodes2["function1"] = 112] = "function1"; + KeyCodes2[KeyCodes2["function10"] = 121] = "function10"; + KeyCodes2[KeyCodes2["function11"] = 122] = "function11"; + KeyCodes2[KeyCodes2["function12"] = 123] = "function12"; + KeyCodes2[KeyCodes2["function2"] = 113] = "function2"; + KeyCodes2[KeyCodes2["function3"] = 114] = "function3"; + KeyCodes2[KeyCodes2["function4"] = 115] = "function4"; + KeyCodes2[KeyCodes2["function5"] = 116] = "function5"; + KeyCodes2[KeyCodes2["function6"] = 117] = "function6"; + KeyCodes2[KeyCodes2["function7"] = 118] = "function7"; + KeyCodes2[KeyCodes2["function8"] = 119] = "function8"; + KeyCodes2[KeyCodes2["function9"] = 120] = "function9"; + KeyCodes2[KeyCodes2["home"] = 36] = "home"; + KeyCodes2[KeyCodes2["insert"] = 45] = "insert"; + KeyCodes2[KeyCodes2["menu"] = 93] = "menu"; + KeyCodes2[KeyCodes2["minus"] = 189] = "minus"; + KeyCodes2[KeyCodes2["minus2"] = 109] = "minus2"; + KeyCodes2[KeyCodes2["numLock"] = 144] = "numLock"; + KeyCodes2[KeyCodes2["numPad0"] = 96] = "numPad0"; + KeyCodes2[KeyCodes2["numPad1"] = 97] = "numPad1"; + KeyCodes2[KeyCodes2["numPad2"] = 98] = "numPad2"; + KeyCodes2[KeyCodes2["numPad3"] = 99] = "numPad3"; + KeyCodes2[KeyCodes2["numPad4"] = 100] = "numPad4"; + KeyCodes2[KeyCodes2["numPad5"] = 101] = "numPad5"; + KeyCodes2[KeyCodes2["numPad6"] = 102] = "numPad6"; + KeyCodes2[KeyCodes2["numPad7"] = 103] = "numPad7"; + KeyCodes2[KeyCodes2["numPad8"] = 104] = "numPad8"; + KeyCodes2[KeyCodes2["numPad9"] = 105] = "numPad9"; + KeyCodes2[KeyCodes2["numPadDivide"] = 111] = "numPadDivide"; + KeyCodes2[KeyCodes2["numPadDot"] = 110] = "numPadDot"; + KeyCodes2[KeyCodes2["numPadMinus"] = 109] = "numPadMinus"; + KeyCodes2[KeyCodes2["numPadMultiply"] = 106] = "numPadMultiply"; + KeyCodes2[KeyCodes2["numPadPlus"] = 107] = "numPadPlus"; + KeyCodes2[KeyCodes2["openBracket"] = 219] = "openBracket"; + KeyCodes2[KeyCodes2["pageDown"] = 34] = "pageDown"; + KeyCodes2[KeyCodes2["pageUp"] = 33] = "pageUp"; + KeyCodes2[KeyCodes2["period"] = 190] = "period"; + KeyCodes2[KeyCodes2["print"] = 44] = "print"; + KeyCodes2[KeyCodes2["quote"] = 222] = "quote"; + KeyCodes2[KeyCodes2["scrollLock"] = 145] = "scrollLock"; + KeyCodes2[KeyCodes2["shift"] = 16] = "shift"; + KeyCodes2[KeyCodes2["space"] = 32] = "space"; + KeyCodes2[KeyCodes2["tab"] = 9] = "tab"; + KeyCodes2[KeyCodes2["tilde"] = 192] = "tilde"; + KeyCodes2[KeyCodes2["windowsLeft"] = 91] = "windowsLeft"; + KeyCodes2[KeyCodes2["windowsOpera"] = 219] = "windowsOpera"; + KeyCodes2[KeyCodes2["windowsRight"] = 92] = "windowsRight"; + })(KeyCodes || (KeyCodes = {})); + keyArrowDown = "ArrowDown"; + keyArrowLeft = "ArrowLeft"; + keyArrowRight = "ArrowRight"; + keyArrowUp = "ArrowUp"; + keyEnter = "Enter"; + keyEscape = "Escape"; + keyHome = "Home"; + keyEnd = "End"; + keyFunction2 = "F2"; + keyPageDown = "PageDown"; + keyPageUp = "PageUp"; + keySpace = " "; + keyTab = "Tab"; + keyBackspace = "Backspace"; + keyDelete = "Delete"; + ArrowKeys = { + ArrowDown: keyArrowDown, + ArrowLeft: keyArrowLeft, + ArrowRight: keyArrowRight, + ArrowUp: keyArrowUp + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/localization.js + var Direction; + var init_localization = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/localization.js"() { + (function(Direction2) { + Direction2["ltr"] = "ltr"; + Direction2["rtl"] = "rtl"; + })(Direction || (Direction = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/numbers.js + function wrapInBounds(min, max, value) { + if (value < min) { + return max; + } else if (value > max) { + return min; + } + return value; + } + function limit(min, max, value) { + return Math.min(Math.max(value, min), max); + } + function inRange(value, min, max = 0) { + [min, max] = [min, max].sort((a, b) => a - b); + return min <= value && value < max; + } + var init_numbers = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/numbers.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/strings.js + function uniqueId(prefix = "") { + return `${prefix}${uniqueIdCounter++}`; + } + var uniqueIdCounter; + var init_strings = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/strings.js"() { + uniqueIdCounter = 0; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/query.js + var init_query = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/query.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js + var RtlScrollConverter; + var init_rtl_scroll_converter = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js"() { + init_dist(); + init_localization(); + RtlScrollConverter = class _RtlScrollConverter { + /** + * Gets the scrollLeft value of the provided element + */ + static getScrollLeft(scrolledElement, direction) { + if (direction === Direction.rtl) { + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + return scrolledElement.scrollLeft; + } + /** + * Sets the scrollLeft value of the provided element + */ + static setScrollLeft(scrolledElement, scrollValue, direction) { + if (direction === Direction.rtl) { + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, scrollValue); + return; + } + scrolledElement.scrollLeft = scrollValue; + } + /** + * The initial rtl scroll converter getter function, it calls the browser test to set the correct converter + * functions and then invokes the getter + */ + static initialGetRtlScrollConverter(scrolledElement) { + _RtlScrollConverter.initializeRtlScrollConverters(); + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + /** + * The "direct" rtl get scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft; + } + /** + * The "inverted" get scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedGetRtlScrollConverter(scrolledElement) { + return -Math.abs(scrolledElement.scrollLeft); + } + /** + * The "reverse" get scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft - (scrolledElement.scrollWidth - scrolledElement.clientWidth); + } + /** + * The initial rtl scroll converter setter function, it calls the browser test to set the correct converter + * functions and then invokes the setter + */ + static initialSetRtlScrollConverter(scrolledElement, newScrollValue) { + _RtlScrollConverter.initializeRtlScrollConverters(); + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, newScrollValue); + } + /** + * The "direct" rtl set scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = newScrollValue; + } + /** + * The "inverted" set scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = Math.abs(newScrollValue); + } + /** + * The "reverse" set scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseSetRtlScrollConverter(scrolledElement, newScrollValue) { + const maxScroll = scrolledElement.scrollWidth - scrolledElement.clientWidth; + scrolledElement.scrollLeft = maxScroll + newScrollValue; + } + /** + * detects the appropriate rtl scroll converter functions and assigns them + * should only run once + */ + static initializeRtlScrollConverters() { + if (!canUseDOM()) { + _RtlScrollConverter.applyDirectScrollConverters(); + return; + } + const testElement = _RtlScrollConverter.getTestElement(); + document.body.appendChild(testElement); + _RtlScrollConverter.checkForScrollType(testElement); + document.body.removeChild(testElement); + } + /** + * checks the provided test element to determine scroll type + * and apply appropriate converters + */ + static checkForScrollType(testElement) { + if (_RtlScrollConverter.isReverse(testElement)) { + _RtlScrollConverter.applyReverseScrollConverters(); + } else { + if (_RtlScrollConverter.isDirect(testElement)) { + _RtlScrollConverter.applyDirectScrollConverters(); + } else { + _RtlScrollConverter.applyInvertedScrollConverters(); + } + } + } + /** + * checks test element initial state for rtl "reverse" mode + */ + static isReverse(testElement) { + return testElement.scrollLeft > 0; + } + /** + * checks test element for rtl "direct" mode + */ + static isDirect(testElement) { + testElement.scrollLeft = -1; + return testElement.scrollLeft < 0; + } + /** + * apply direct scroll conververters + */ + static applyDirectScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.directSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.directGetRtlScrollConverter; + } + /** + * apply inverted scroll conververters + */ + static applyInvertedScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.invertedSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.invertedGetRtlScrollConverter; + } + /** + * apply reverse scroll conververters + */ + static applyReverseScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.reverseSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.reverseGetRtlScrollConverter; + } + /** + * generate a test element for rtl testing + */ + static getTestElement() { + const testElement = document.createElement("div"); + testElement.appendChild(document.createTextNode("ABCD")); + testElement.dir = "rtl"; + testElement.style.fontSize = "14px"; + testElement.style.width = "4px"; + testElement.style.height = "1px"; + testElement.style.position = "absolute"; + testElement.style.top = "-1000px"; + testElement.style.overflow = "scroll"; + return testElement; + } + }; + RtlScrollConverter.getRtlScrollLeftConverter = RtlScrollConverter.initialGetRtlScrollConverter; + RtlScrollConverter.setRtlScrollLeftConverter = RtlScrollConverter.initialSetRtlScrollConverter; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/system-colors.js + var SystemColors; + var init_system_colors = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/system-colors.js"() { + (function(SystemColors2) { + SystemColors2["Canvas"] = "Canvas"; + SystemColors2["CanvasText"] = "CanvasText"; + SystemColors2["LinkText"] = "LinkText"; + SystemColors2["VisitedText"] = "VisitedText"; + SystemColors2["ActiveText"] = "ActiveText"; + SystemColors2["ButtonFace"] = "ButtonFace"; + SystemColors2["ButtonText"] = "ButtonText"; + SystemColors2["Field"] = "Field"; + SystemColors2["FieldText"] = "FieldText"; + SystemColors2["Highlight"] = "Highlight"; + SystemColors2["HighlightText"] = "HighlightText"; + SystemColors2["GrayText"] = "GrayText"; + })(SystemColors || (SystemColors = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/index.js + var init_dist2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/index.js"() { + init_aria(); + init_array(); + init_class_names(); + init_dom2(); + init_events(); + init_html(); + init_key_codes(); + init_localization(); + init_numbers(); + init_strings(); + init_query(); + init_rtl_scroll_converter(); + init_system_colors(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js + var AccordionExpandMode, Accordion; + var init_accordion = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_accordion_item(); + AccordionExpandMode = { + /** + * Designates only a single {@link @microsoft/fast-foundation#(AccordionItem:class) } can be open a time. + */ + single: "single", + /** + * Designates multiple {@link @microsoft/fast-foundation#(AccordionItem:class) | AccordionItems} can be open simultaneously. + */ + multi: "multi" + }; + Accordion = class extends FoundationElement { + constructor() { + super(...arguments); + this.expandmode = AccordionExpandMode.multi; + this.activeItemIndex = 0; + this.change = () => { + this.$emit("change", this.activeid); + }; + this.setItems = () => { + var _a; + if (this.accordionItems.length === 0) { + return; + } + this.accordionIds = this.getItemIds(); + this.accordionItems.forEach((item, index) => { + if (item instanceof AccordionItem) { + item.addEventListener("change", this.activeItemChange); + if (this.isSingleExpandMode()) { + this.activeItemIndex !== index ? item.expanded = false : item.expanded = true; + } + } + const itemId = this.accordionIds[index]; + item.setAttribute("id", typeof itemId !== "string" ? `accordion-${index + 1}` : itemId); + this.activeid = this.accordionIds[this.activeItemIndex]; + item.addEventListener("keydown", this.handleItemKeyDown); + item.addEventListener("focus", this.handleItemFocus); + }); + if (this.isSingleExpandMode()) { + const expandedItem = (_a = this.findExpandedItem()) !== null && _a !== void 0 ? _a : this.accordionItems[0]; + expandedItem.setAttribute("aria-disabled", "true"); + } + }; + this.removeItemListeners = (oldValue) => { + oldValue.forEach((item, index) => { + item.removeEventListener("change", this.activeItemChange); + item.removeEventListener("keydown", this.handleItemKeyDown); + item.removeEventListener("focus", this.handleItemFocus); + }); + }; + this.activeItemChange = (event) => { + if (event.defaultPrevented || event.target !== event.currentTarget) { + return; + } + event.preventDefault(); + const selectedItem = event.target; + this.activeid = selectedItem.getAttribute("id"); + if (this.isSingleExpandMode()) { + this.resetItems(); + selectedItem.expanded = true; + selectedItem.setAttribute("aria-disabled", "true"); + this.accordionItems.forEach((item) => { + if (!item.hasAttribute("disabled") && item.id !== this.activeid) { + item.removeAttribute("aria-disabled"); + } + }); + } + this.activeItemIndex = Array.from(this.accordionItems).indexOf(selectedItem); + this.change(); + }; + this.handleItemKeyDown = (event) => { + if (event.target !== event.currentTarget) { + return; + } + this.accordionIds = this.getItemIds(); + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjust(-1); + break; + case keyArrowDown: + event.preventDefault(); + this.adjust(1); + break; + case keyHome: + this.activeItemIndex = 0; + this.focusItem(); + break; + case keyEnd: + this.activeItemIndex = this.accordionItems.length - 1; + this.focusItem(); + break; + } + }; + this.handleItemFocus = (event) => { + if (event.target === event.currentTarget) { + const focusedItem = event.target; + const focusedIndex = this.activeItemIndex = Array.from(this.accordionItems).indexOf(focusedItem); + if (this.activeItemIndex !== focusedIndex && focusedIndex !== -1) { + this.activeItemIndex = focusedIndex; + this.activeid = this.accordionIds[this.activeItemIndex]; + } + } + }; + } + /** + * @internal + */ + accordionItemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.removeItemListeners(oldValue); + this.setItems(); + } + } + findExpandedItem() { + for (let item = 0; item < this.accordionItems.length; item++) { + if (this.accordionItems[item].getAttribute("expanded") === "true") { + return this.accordionItems[item]; + } + } + return null; + } + resetItems() { + this.accordionItems.forEach((item, index) => { + item.expanded = false; + }); + } + getItemIds() { + return this.accordionItems.map((accordionItem) => { + return accordionItem.getAttribute("id"); + }); + } + isSingleExpandMode() { + return this.expandmode === AccordionExpandMode.single; + } + adjust(adjustment) { + this.activeItemIndex = wrapInBounds(0, this.accordionItems.length - 1, this.activeItemIndex + adjustment); + this.focusItem(); + } + focusItem() { + const element = this.accordionItems[this.activeItemIndex]; + if (element instanceof AccordionItem) { + element.expandbutton.focus(); + } + } + }; + __decorate([ + attr({ attribute: "expand-mode" }) + ], Accordion.prototype, "expandmode", void 0); + __decorate([ + observable + ], Accordion.prototype, "accordionItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js + var init_accordion2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js"() { + init_accordion_template(); + init_accordion(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js + var anchorTemplate; + var init_anchor_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js"() { + init_esm(); + init_start_end(); + anchorTemplate = (context, definition) => html` + + ${startSlotTemplate(context, definition)} + + + + ${endSlotTemplate(context, definition)} + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js + var ARIAGlobalStatesAndProperties; + var init_aria_global = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js"() { + init_tslib_es6(); + init_esm(); + ARIAGlobalStatesAndProperties = class { + }; + __decorate([ + attr({ attribute: "aria-atomic" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaAtomic", void 0); + __decorate([ + attr({ attribute: "aria-busy" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaBusy", void 0); + __decorate([ + attr({ attribute: "aria-controls" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaControls", void 0); + __decorate([ + attr({ attribute: "aria-current" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaCurrent", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-details" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDetails", void 0); + __decorate([ + attr({ attribute: "aria-disabled" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDisabled", void 0); + __decorate([ + attr({ attribute: "aria-errormessage" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaErrormessage", void 0); + __decorate([ + attr({ attribute: "aria-flowto" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaFlowto", void 0); + __decorate([ + attr({ attribute: "aria-haspopup" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHaspopup", void 0); + __decorate([ + attr({ attribute: "aria-hidden" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHidden", void 0); + __decorate([ + attr({ attribute: "aria-invalid" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaInvalid", void 0); + __decorate([ + attr({ attribute: "aria-keyshortcuts" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaKeyshortcuts", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabel", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-live" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLive", void 0); + __decorate([ + attr({ attribute: "aria-owns" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaOwns", void 0); + __decorate([ + attr({ attribute: "aria-relevant" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRelevant", void 0); + __decorate([ + attr({ attribute: "aria-roledescription" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRoledescription", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js + var init_patterns = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js"() { + init_aria_global(); + init_start_end(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js + var Anchor, DelegatesARIALink; + var init_anchor = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_patterns(); + init_apply_mixins(); + Anchor = class extends FoundationElement { + constructor() { + super(...arguments); + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + var _a2; + (_a2 = this.control) === null || _a2 === void 0 ? void 0 : _a2.focus(); + }; + } + }; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.handleUnsupportedDelegatesFocus(); + } + }; + __decorate([ + attr + ], Anchor.prototype, "download", void 0); + __decorate([ + attr + ], Anchor.prototype, "href", void 0); + __decorate([ + attr + ], Anchor.prototype, "hreflang", void 0); + __decorate([ + attr + ], Anchor.prototype, "ping", void 0); + __decorate([ + attr + ], Anchor.prototype, "referrerpolicy", void 0); + __decorate([ + attr + ], Anchor.prototype, "rel", void 0); + __decorate([ + attr + ], Anchor.prototype, "target", void 0); + __decorate([ + attr + ], Anchor.prototype, "type", void 0); + __decorate([ + observable + ], Anchor.prototype, "defaultSlottedContent", void 0); + DelegatesARIALink = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIALink.prototype, "ariaExpanded", void 0); + applyMixins(DelegatesARIALink, ARIAGlobalStatesAndProperties); + applyMixins(Anchor, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js + var init_anchor2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js"() { + init_anchor_template(); + init_anchor(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js + var init_anchored_region_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js + var getDirection; + var init_direction = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js"() { + init_dist2(); + getDirection = (rootNode) => { + const dirNode = rootNode.closest("[dir]"); + return dirNode !== null && dirNode.dir === "rtl" ? Direction.rtl : Direction.ltr; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js + var IntersectionService; + var init_intersection_service = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js"() { + init_esm(); + IntersectionService = class { + constructor() { + this.intersectionDetector = null; + this.observedElements = /* @__PURE__ */ new Map(); + this.requestPosition = (target, callback) => { + var _a; + if (this.intersectionDetector === null) { + return; + } + if (this.observedElements.has(target)) { + (_a = this.observedElements.get(target)) === null || _a === void 0 ? void 0 : _a.push(callback); + return; + } + this.observedElements.set(target, [callback]); + this.intersectionDetector.observe(target); + }; + this.cancelRequestPosition = (target, callback) => { + const callbacks = this.observedElements.get(target); + if (callbacks !== void 0) { + const callBackIndex = callbacks.indexOf(callback); + if (callBackIndex !== -1) { + callbacks.splice(callBackIndex, 1); + } + } + }; + this.initializeIntersectionDetector = () => { + if (!$global.IntersectionObserver) { + return; + } + this.intersectionDetector = new IntersectionObserver(this.handleIntersection, { + root: null, + rootMargin: "0px", + threshold: [0, 1] + }); + }; + this.handleIntersection = (entries) => { + if (this.intersectionDetector === null) { + return; + } + const pendingCallbacks = []; + const pendingCallbackParams = []; + entries.forEach((entry) => { + var _a; + (_a = this.intersectionDetector) === null || _a === void 0 ? void 0 : _a.unobserve(entry.target); + const thisElementCallbacks = this.observedElements.get(entry.target); + if (thisElementCallbacks !== void 0) { + thisElementCallbacks.forEach((callback) => { + let targetCallbackIndex = pendingCallbacks.indexOf(callback); + if (targetCallbackIndex === -1) { + targetCallbackIndex = pendingCallbacks.length; + pendingCallbacks.push(callback); + pendingCallbackParams.push([]); + } + pendingCallbackParams[targetCallbackIndex].push(entry); + }); + this.observedElements.delete(entry.target); + } + }); + pendingCallbacks.forEach((callback, index) => { + callback(pendingCallbackParams[index]); + }); + }; + this.initializeIntersectionDetector(); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js + var AnchoredRegion; + var init_anchored_region = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_direction(); + init_intersection_service(); + AnchoredRegion = class _AnchoredRegion extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.viewport = ""; + this.horizontalPositioningMode = "uncontrolled"; + this.horizontalDefaultPosition = "unset"; + this.horizontalViewportLock = false; + this.horizontalInset = false; + this.horizontalScaling = "content"; + this.verticalPositioningMode = "uncontrolled"; + this.verticalDefaultPosition = "unset"; + this.verticalViewportLock = false; + this.verticalInset = false; + this.verticalScaling = "content"; + this.fixedPlacement = false; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.initialLayoutComplete = false; + this.resizeDetector = null; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.pendingPositioningUpdate = false; + this.pendingReset = false; + this.currentDirection = Direction.ltr; + this.regionVisible = false; + this.forceUpdate = false; + this.updateThreshold = 0.5; + this.update = () => { + if (!this.pendingPositioningUpdate) { + this.requestPositionUpdates(); + } + }; + this.startObservers = () => { + this.stopObservers(); + if (this.anchorElement === null) { + return; + } + this.requestPositionUpdates(); + if (this.resizeDetector !== null) { + this.resizeDetector.observe(this.anchorElement); + this.resizeDetector.observe(this); + } + }; + this.requestPositionUpdates = () => { + if (this.anchorElement === null || this.pendingPositioningUpdate) { + return; + } + _AnchoredRegion.intersectionService.requestPosition(this, this.handleIntersection); + _AnchoredRegion.intersectionService.requestPosition(this.anchorElement, this.handleIntersection); + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.requestPosition(this.viewportElement, this.handleIntersection); + } + this.pendingPositioningUpdate = true; + }; + this.stopObservers = () => { + if (this.pendingPositioningUpdate) { + this.pendingPositioningUpdate = false; + _AnchoredRegion.intersectionService.cancelRequestPosition(this, this.handleIntersection); + if (this.anchorElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.anchorElement, this.handleIntersection); + } + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.viewportElement, this.handleIntersection); + } + } + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + } + }; + this.getViewport = () => { + if (typeof this.viewport !== "string" || this.viewport === "") { + return document.documentElement; + } + return document.getElementById(this.viewport); + }; + this.getAnchor = () => { + return document.getElementById(this.anchor); + }; + this.handleIntersection = (entries) => { + if (!this.pendingPositioningUpdate) { + return; + } + this.pendingPositioningUpdate = false; + if (!this.applyIntersectionEntries(entries)) { + return; + } + this.updateLayout(); + }; + this.applyIntersectionEntries = (entries) => { + const regionEntry = entries.find((x) => x.target === this); + const anchorEntry = entries.find((x) => x.target === this.anchorElement); + const viewportEntry = entries.find((x) => x.target === this.viewportElement); + if (regionEntry === void 0 || viewportEntry === void 0 || anchorEntry === void 0) { + return false; + } + if (!this.regionVisible || this.forceUpdate || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0 || this.isRectDifferent(this.anchorRect, anchorEntry.boundingClientRect) || this.isRectDifferent(this.viewportRect, viewportEntry.boundingClientRect) || this.isRectDifferent(this.regionRect, regionEntry.boundingClientRect)) { + this.regionRect = regionEntry.boundingClientRect; + this.anchorRect = anchorEntry.boundingClientRect; + if (this.viewportElement === document.documentElement) { + this.viewportRect = new DOMRectReadOnly(viewportEntry.boundingClientRect.x + document.documentElement.scrollLeft, viewportEntry.boundingClientRect.y + document.documentElement.scrollTop, viewportEntry.boundingClientRect.width, viewportEntry.boundingClientRect.height); + } else { + this.viewportRect = viewportEntry.boundingClientRect; + } + this.updateRegionOffset(); + this.forceUpdate = false; + return true; + } + return false; + }; + this.updateRegionOffset = () => { + if (this.anchorRect && this.regionRect) { + this.baseHorizontalOffset = this.baseHorizontalOffset + (this.anchorRect.left - this.regionRect.left) + (this.translateX - this.baseHorizontalOffset); + this.baseVerticalOffset = this.baseVerticalOffset + (this.anchorRect.top - this.regionRect.top) + (this.translateY - this.baseVerticalOffset); + } + }; + this.isRectDifferent = (rectA, rectB) => { + if (Math.abs(rectA.top - rectB.top) > this.updateThreshold || Math.abs(rectA.right - rectB.right) > this.updateThreshold || Math.abs(rectA.bottom - rectB.bottom) > this.updateThreshold || Math.abs(rectA.left - rectB.left) > this.updateThreshold) { + return true; + } + return false; + }; + this.handleResize = (entries) => { + this.update(); + }; + this.reset = () => { + if (!this.pendingReset) { + return; + } + this.pendingReset = false; + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + if (this.viewportElement === null) { + this.viewportElement = this.getViewport(); + } + this.currentDirection = getDirection(this); + this.startObservers(); + }; + this.updateLayout = () => { + let desiredVerticalPosition = void 0; + let desiredHorizontalPosition = void 0; + if (this.horizontalPositioningMode !== "uncontrolled") { + const horizontalOptions = this.getPositioningOptions(this.horizontalInset); + if (this.horizontalDefaultPosition === "center") { + desiredHorizontalPosition = "center"; + } else if (this.horizontalDefaultPosition !== "unset") { + let dirCorrectedHorizontalDefaultPosition = this.horizontalDefaultPosition; + if (dirCorrectedHorizontalDefaultPosition === "start" || dirCorrectedHorizontalDefaultPosition === "end") { + const newDirection = getDirection(this); + if (newDirection !== this.currentDirection) { + this.currentDirection = newDirection; + this.initialize(); + return; + } + if (this.currentDirection === Direction.ltr) { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "left" : "right"; + } else { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "right" : "left"; + } + } + switch (dirCorrectedHorizontalDefaultPosition) { + case "left": + desiredHorizontalPosition = this.horizontalInset ? "insetStart" : "start"; + break; + case "right": + desiredHorizontalPosition = this.horizontalInset ? "insetEnd" : "end"; + break; + } + } + const horizontalThreshold = this.horizontalThreshold !== void 0 ? this.horizontalThreshold : this.regionRect !== void 0 ? this.regionRect.width : 0; + const anchorLeft = this.anchorRect !== void 0 ? this.anchorRect.left : 0; + const anchorRight = this.anchorRect !== void 0 ? this.anchorRect.right : 0; + const anchorWidth = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + const viewportLeft = this.viewportRect !== void 0 ? this.viewportRect.left : 0; + const viewportRight = this.viewportRect !== void 0 ? this.viewportRect.right : 0; + if (desiredHorizontalPosition === void 0 || !(this.horizontalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredHorizontalPosition, anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) < horizontalThreshold) { + desiredHorizontalPosition = this.getAvailableSpace(horizontalOptions[0], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) > this.getAvailableSpace(horizontalOptions[1], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) ? horizontalOptions[0] : horizontalOptions[1]; + } + } + if (this.verticalPositioningMode !== "uncontrolled") { + const verticalOptions = this.getPositioningOptions(this.verticalInset); + if (this.verticalDefaultPosition === "center") { + desiredVerticalPosition = "center"; + } else if (this.verticalDefaultPosition !== "unset") { + switch (this.verticalDefaultPosition) { + case "top": + desiredVerticalPosition = this.verticalInset ? "insetStart" : "start"; + break; + case "bottom": + desiredVerticalPosition = this.verticalInset ? "insetEnd" : "end"; + break; + } + } + const verticalThreshold = this.verticalThreshold !== void 0 ? this.verticalThreshold : this.regionRect !== void 0 ? this.regionRect.height : 0; + const anchorTop = this.anchorRect !== void 0 ? this.anchorRect.top : 0; + const anchorBottom = this.anchorRect !== void 0 ? this.anchorRect.bottom : 0; + const anchorHeight = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + const viewportTop = this.viewportRect !== void 0 ? this.viewportRect.top : 0; + const viewportBottom = this.viewportRect !== void 0 ? this.viewportRect.bottom : 0; + if (desiredVerticalPosition === void 0 || !(this.verticalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredVerticalPosition, anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) < verticalThreshold) { + desiredVerticalPosition = this.getAvailableSpace(verticalOptions[0], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) > this.getAvailableSpace(verticalOptions[1], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) ? verticalOptions[0] : verticalOptions[1]; + } + } + const nextPositionerDimension = this.getNextRegionDimension(desiredHorizontalPosition, desiredVerticalPosition); + const positionChanged = this.horizontalPosition !== desiredHorizontalPosition || this.verticalPosition !== desiredVerticalPosition; + this.setHorizontalPosition(desiredHorizontalPosition, nextPositionerDimension); + this.setVerticalPosition(desiredVerticalPosition, nextPositionerDimension); + this.updateRegionStyle(); + if (!this.initialLayoutComplete) { + this.initialLayoutComplete = true; + this.requestPositionUpdates(); + return; + } + if (!this.regionVisible) { + this.regionVisible = true; + this.style.removeProperty("pointer-events"); + this.style.removeProperty("opacity"); + this.classList.toggle("loaded", true); + this.$emit("loaded", this, { bubbles: false }); + } + this.updatePositionClasses(); + if (positionChanged) { + this.$emit("positionchange", this, { bubbles: false }); + } + }; + this.updateRegionStyle = () => { + this.style.width = this.regionWidth; + this.style.height = this.regionHeight; + this.style.transform = `translate(${this.translateX}px, ${this.translateY}px)`; + }; + this.updatePositionClasses = () => { + this.classList.toggle("top", this.verticalPosition === "start"); + this.classList.toggle("bottom", this.verticalPosition === "end"); + this.classList.toggle("inset-top", this.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.verticalPosition === "insetEnd"); + this.classList.toggle("vertical-center", this.verticalPosition === "center"); + this.classList.toggle("left", this.horizontalPosition === "start"); + this.classList.toggle("right", this.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.horizontalPosition === "insetEnd"); + this.classList.toggle("horizontal-center", this.horizontalPosition === "center"); + }; + this.setHorizontalPosition = (desiredHorizontalPosition, nextPositionerDimension) => { + if (desiredHorizontalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionWidth = 0; + switch (this.horizontalScaling) { + case "anchor": + case "fill": + nextRegionWidth = this.horizontalViewportLock ? this.viewportRect.width : nextPositionerDimension.width; + this.regionWidth = `${nextRegionWidth}px`; + break; + case "content": + nextRegionWidth = this.regionRect.width; + this.regionWidth = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredHorizontalPosition) { + case "start": + this.translateX = this.baseHorizontalOffset - nextRegionWidth; + if (this.horizontalViewportLock && this.anchorRect.left > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.right); + } + break; + case "insetStart": + this.translateX = this.baseHorizontalOffset - nextRegionWidth + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.right); + } + break; + case "insetEnd": + this.translateX = this.baseHorizontalOffset; + if (this.horizontalViewportLock && this.anchorRect.left < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.left); + } + break; + case "end": + this.translateX = this.baseHorizontalOffset + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.left); + } + break; + case "center": + sizeDelta = (this.anchorRect.width - nextRegionWidth) / 2; + this.translateX = this.baseHorizontalOffset + sizeDelta; + if (this.horizontalViewportLock) { + const regionLeft = this.anchorRect.left + sizeDelta; + const regionRight = this.anchorRect.right - sizeDelta; + if (regionLeft < this.viewportRect.left && !(regionRight > this.viewportRect.right)) { + this.translateX = this.translateX - (regionLeft - this.viewportRect.left); + } else if (regionRight > this.viewportRect.right && !(regionLeft < this.viewportRect.left)) { + this.translateX = this.translateX - (regionRight - this.viewportRect.right); + } + } + break; + } + this.horizontalPosition = desiredHorizontalPosition; + }; + this.setVerticalPosition = (desiredVerticalPosition, nextPositionerDimension) => { + if (desiredVerticalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionHeight = 0; + switch (this.verticalScaling) { + case "anchor": + case "fill": + nextRegionHeight = this.verticalViewportLock ? this.viewportRect.height : nextPositionerDimension.height; + this.regionHeight = `${nextRegionHeight}px`; + break; + case "content": + nextRegionHeight = this.regionRect.height; + this.regionHeight = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredVerticalPosition) { + case "start": + this.translateY = this.baseVerticalOffset - nextRegionHeight; + if (this.verticalViewportLock && this.anchorRect.top > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.bottom); + } + break; + case "insetStart": + this.translateY = this.baseVerticalOffset - nextRegionHeight + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.bottom); + } + break; + case "insetEnd": + this.translateY = this.baseVerticalOffset; + if (this.verticalViewportLock && this.anchorRect.top < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.top); + } + break; + case "end": + this.translateY = this.baseVerticalOffset + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.top); + } + break; + case "center": + sizeDelta = (this.anchorRect.height - nextRegionHeight) / 2; + this.translateY = this.baseVerticalOffset + sizeDelta; + if (this.verticalViewportLock) { + const regionTop = this.anchorRect.top + sizeDelta; + const regionBottom = this.anchorRect.bottom - sizeDelta; + if (regionTop < this.viewportRect.top && !(regionBottom > this.viewportRect.bottom)) { + this.translateY = this.translateY - (regionTop - this.viewportRect.top); + } else if (regionBottom > this.viewportRect.bottom && !(regionTop < this.viewportRect.top)) { + this.translateY = this.translateY - (regionBottom - this.viewportRect.bottom); + } + } + } + this.verticalPosition = desiredVerticalPosition; + }; + this.getPositioningOptions = (inset) => { + if (inset) { + return ["insetStart", "insetEnd"]; + } + return ["start", "end"]; + }; + this.getAvailableSpace = (positionOption, anchorStart, anchorEnd, anchorSpan, viewportStart, viewportEnd) => { + const spaceStart = anchorStart - viewportStart; + const spaceEnd = viewportEnd - (anchorStart + anchorSpan); + switch (positionOption) { + case "start": + return spaceStart; + case "insetStart": + return spaceStart + anchorSpan; + case "insetEnd": + return spaceEnd + anchorSpan; + case "end": + return spaceEnd; + case "center": + return Math.min(spaceStart, spaceEnd) * 2 + anchorSpan; + } + }; + this.getNextRegionDimension = (desiredHorizontalPosition, desiredVerticalPosition) => { + const newRegionDimension = { + height: this.regionRect !== void 0 ? this.regionRect.height : 0, + width: this.regionRect !== void 0 ? this.regionRect.width : 0 + }; + if (desiredHorizontalPosition !== void 0 && this.horizontalScaling === "fill") { + newRegionDimension.width = this.getAvailableSpace(desiredHorizontalPosition, this.anchorRect !== void 0 ? this.anchorRect.left : 0, this.anchorRect !== void 0 ? this.anchorRect.right : 0, this.anchorRect !== void 0 ? this.anchorRect.width : 0, this.viewportRect !== void 0 ? this.viewportRect.left : 0, this.viewportRect !== void 0 ? this.viewportRect.right : 0); + } else if (this.horizontalScaling === "anchor") { + newRegionDimension.width = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + } + if (desiredVerticalPosition !== void 0 && this.verticalScaling === "fill") { + newRegionDimension.height = this.getAvailableSpace(desiredVerticalPosition, this.anchorRect !== void 0 ? this.anchorRect.top : 0, this.anchorRect !== void 0 ? this.anchorRect.bottom : 0, this.anchorRect !== void 0 ? this.anchorRect.height : 0, this.viewportRect !== void 0 ? this.viewportRect.top : 0, this.viewportRect !== void 0 ? this.viewportRect.bottom : 0); + } else if (this.verticalScaling === "anchor") { + newRegionDimension.height = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + } + return newRegionDimension; + }; + this.startAutoUpdateEventListeners = () => { + window.addEventListener(eventResize, this.update, { passive: true }); + window.addEventListener(eventScroll, this.update, { + passive: true, + capture: true + }); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.observe(this.viewportElement); + } + }; + this.stopAutoUpdateEventListeners = () => { + window.removeEventListener(eventResize, this.update); + window.removeEventListener(eventScroll, this.update); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.unobserve(this.viewportElement); + } + }; + } + anchorChanged() { + if (this.initialLayoutComplete) { + this.anchorElement = this.getAnchor(); + } + } + viewportChanged() { + if (this.initialLayoutComplete) { + this.viewportElement = this.getViewport(); + } + } + horizontalPositioningModeChanged() { + this.requestReset(); + } + horizontalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + horizontalViewportLockChanged() { + this.updateForAttributeChange(); + } + horizontalInsetChanged() { + this.updateForAttributeChange(); + } + horizontalThresholdChanged() { + this.updateForAttributeChange(); + } + horizontalScalingChanged() { + this.updateForAttributeChange(); + } + verticalPositioningModeChanged() { + this.requestReset(); + } + verticalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + verticalViewportLockChanged() { + this.updateForAttributeChange(); + } + verticalInsetChanged() { + this.updateForAttributeChange(); + } + verticalThresholdChanged() { + this.updateForAttributeChange(); + } + verticalScalingChanged() { + this.updateForAttributeChange(); + } + fixedPlacementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + autoUpdateModeChanged(prevMode, newMode) { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + if (prevMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + if (newMode === "auto") { + this.startAutoUpdateEventListeners(); + } + } + } + anchorElementChanged() { + this.requestReset(); + } + viewportElementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.autoUpdateMode === "auto") { + this.startAutoUpdateEventListeners(); + } + this.initialize(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + if (this.autoUpdateMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + this.stopObservers(); + this.disconnectResizeDetector(); + } + /** + * @internal + */ + adoptedCallback() { + this.initialize(); + } + /** + * destroys the instance's resize observer + */ + disconnectResizeDetector() { + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.handleResize); + } + /** + * react to attribute changes that don't require a reset + */ + updateForAttributeChange() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.forceUpdate = true; + this.update(); + } + } + /** + * fully initializes the component + */ + initialize() { + this.initializeResizeDetector(); + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + this.requestReset(); + } + /** + * Request a reset if there are currently no open requests + */ + requestReset() { + if (this.$fastController.isConnected && this.pendingReset === false) { + this.setInitialState(); + DOM.queueUpdate(() => this.reset()); + this.pendingReset = true; + } + } + /** + * sets the starting configuration for component internal values + */ + setInitialState() { + this.initialLayoutComplete = false; + this.regionVisible = false; + this.translateX = 0; + this.translateY = 0; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.viewportRect = void 0; + this.regionRect = void 0; + this.anchorRect = void 0; + this.verticalPosition = void 0; + this.horizontalPosition = void 0; + this.style.opacity = "0"; + this.style.pointerEvents = "none"; + this.forceUpdate = false; + this.style.position = this.fixedPlacement ? "fixed" : "absolute"; + this.updatePositionClasses(); + this.updateRegionStyle(); + } + }; + AnchoredRegion.intersectionService = new IntersectionService(); + __decorate([ + attr + ], AnchoredRegion.prototype, "anchor", void 0); + __decorate([ + attr + ], AnchoredRegion.prototype, "viewport", void 0); + __decorate([ + attr({ attribute: "horizontal-positioning-mode" }) + ], AnchoredRegion.prototype, "horizontalPositioningMode", void 0); + __decorate([ + attr({ attribute: "horizontal-default-position" }) + ], AnchoredRegion.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "horizontal-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalInset", void 0); + __decorate([ + attr({ attribute: "horizontal-threshold" }) + ], AnchoredRegion.prototype, "horizontalThreshold", void 0); + __decorate([ + attr({ attribute: "horizontal-scaling" }) + ], AnchoredRegion.prototype, "horizontalScaling", void 0); + __decorate([ + attr({ attribute: "vertical-positioning-mode" }) + ], AnchoredRegion.prototype, "verticalPositioningMode", void 0); + __decorate([ + attr({ attribute: "vertical-default-position" }) + ], AnchoredRegion.prototype, "verticalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalInset", void 0); + __decorate([ + attr({ attribute: "vertical-threshold" }) + ], AnchoredRegion.prototype, "verticalThreshold", void 0); + __decorate([ + attr({ attribute: "vertical-scaling" }) + ], AnchoredRegion.prototype, "verticalScaling", void 0); + __decorate([ + attr({ attribute: "fixed-placement", mode: "boolean" }) + ], AnchoredRegion.prototype, "fixedPlacement", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], AnchoredRegion.prototype, "autoUpdateMode", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "anchorElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "viewportElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "initialLayoutComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js + var horizontalAnchorOverlay, FlyoutPosTop, FlyoutPosBottom, FlyoutPosTallest, FlyoutPosTopFill, FlyoutPosBottomFill, FlyoutPosTallestFill; + var init_anchored_region_config = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js"() { + horizontalAnchorOverlay = { + horizontalDefaultPosition: "center", + horizontalPositioningMode: "locktodefault", + horizontalInset: false, + horizontalScaling: "anchor" + }; + FlyoutPosTop = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "top", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosBottom = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "bottom", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTallest = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalPositioningMode: "dynamic", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTopFill = Object.assign(Object.assign({}, FlyoutPosTop), { verticalScaling: "fill" }); + FlyoutPosBottomFill = Object.assign(Object.assign({}, FlyoutPosBottom), { verticalScaling: "fill" }); + FlyoutPosTallestFill = Object.assign(Object.assign({}, FlyoutPosTallest), { verticalScaling: "fill" }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js + var init_anchored_region2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js"() { + init_anchored_region_template(); + init_anchored_region(); + init_anchored_region_config(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js + var init_avatar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js + var Avatar; + var init_avatar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Avatar = class extends FoundationElement { + /** + * Internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.shape) { + this.shape = "circle"; + } + } + }; + __decorate([ + attr + ], Avatar.prototype, "fill", void 0); + __decorate([ + attr + ], Avatar.prototype, "color", void 0); + __decorate([ + attr + ], Avatar.prototype, "link", void 0); + __decorate([ + attr + ], Avatar.prototype, "shape", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js + var init_avatar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js"() { + init_avatar_template(); + init_avatar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js + var badgeTemplate; + var init_badge_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js"() { + init_esm(); + badgeTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js + var Badge; + var init_badge = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Badge = class extends FoundationElement { + constructor() { + super(...arguments); + this.generateBadgeStyle = () => { + if (!this.fill && !this.color) { + return; + } + const fill = `background-color: var(--badge-fill-${this.fill});`; + const color = `color: var(--badge-color-${this.color});`; + if (this.fill && !this.color) { + return fill; + } else if (this.color && !this.fill) { + return color; + } else { + return `${color} ${fill}`; + } + }; + } + }; + __decorate([ + attr({ attribute: "fill" }) + ], Badge.prototype, "fill", void 0); + __decorate([ + attr({ attribute: "color" }) + ], Badge.prototype, "color", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Badge.prototype, "circular", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js + var init_badge2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js"() { + init_badge_template(); + init_badge(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js + var init_breadcrumb_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js + var BreadcrumbItem; + var init_breadcrumb_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js"() { + init_tslib_es6(); + init_esm(); + init_anchor(); + init_patterns(); + init_apply_mixins(); + BreadcrumbItem = class extends Anchor { + constructor() { + super(...arguments); + this.separator = true; + } + }; + __decorate([ + observable + ], BreadcrumbItem.prototype, "separator", void 0); + applyMixins(BreadcrumbItem, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js + var init_breadcrumb_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js"() { + init_breadcrumb_item_template(); + init_breadcrumb_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js + var init_breadcrumb_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js + var Breadcrumb; + var init_breadcrumb = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js"() { + init_tslib_es6(); + init_esm(); + init_breadcrumb_item(); + init_foundation_element(); + Breadcrumb = class extends FoundationElement { + slottedBreadcrumbItemsChanged() { + if (this.$fastController.isConnected) { + if (this.slottedBreadcrumbItems === void 0 || this.slottedBreadcrumbItems.length === 0) { + return; + } + const lastNode = this.slottedBreadcrumbItems[this.slottedBreadcrumbItems.length - 1]; + this.slottedBreadcrumbItems.forEach((item) => { + const itemIsLastNode = item === lastNode; + this.setItemSeparator(item, itemIsLastNode); + this.setAriaCurrent(item, itemIsLastNode); + }); + } + } + setItemSeparator(item, isLastNode) { + if (item instanceof BreadcrumbItem) { + item.separator = !isLastNode; + } + } + /** + * Finds href on childnodes in the light DOM or shadow DOM. + * We look in the shadow DOM because we insert an anchor when breadcrumb-item has an href. + */ + findChildWithHref(node) { + var _a, _b; + if (node.childElementCount > 0) { + return node.querySelector("a[href]"); + } else if ((_a = node.shadowRoot) === null || _a === void 0 ? void 0 : _a.childElementCount) { + return (_b = node.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector("a[href]"); + } else + return null; + } + /** + * Sets ARIA Current for the current node + * If child node with an anchor tag and with href is found then set aria-current to correct value for the child node, + * otherwise apply aria-current to the host element, with an href + */ + setAriaCurrent(item, isLastNode) { + const childNodeWithHref = this.findChildWithHref(item); + if (childNodeWithHref === null && item.hasAttribute("href") && item instanceof BreadcrumbItem) { + isLastNode ? item.setAttribute("aria-current", "page") : item.removeAttribute("aria-current"); + } else if (childNodeWithHref !== null) { + isLastNode ? childNodeWithHref.setAttribute("aria-current", "page") : childNodeWithHref.removeAttribute("aria-current"); + } + } + }; + __decorate([ + observable + ], Breadcrumb.prototype, "slottedBreadcrumbItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js + var init_breadcrumb2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js"() { + init_breadcrumb_template(); + init_breadcrumb(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js + var buttonTemplate; + var init_button_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js"() { + init_esm(); + init_start_end(); + buttonTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js + function FormAssociated(BaseCtor) { + const C = class extends BaseCtor { + constructor(...args) { + super(...args); + this.dirtyValue = false; + this.disabled = false; + this.proxyEventsToBlock = ["change", "click"]; + this.proxyInitialized = false; + this.required = false; + this.initialValue = this.initialValue || ""; + if (!this.elementInternals) { + this.formResetCallback = this.formResetCallback.bind(this); + } + } + /** + * Must evaluate to true to enable elementInternals. + * Feature detects API support and resolve respectively + * + * @internal + */ + static get formAssociated() { + return supportsElementInternals; + } + /** + * Returns the validity state of the element + * + * @alpha + */ + get validity() { + return this.elementInternals ? this.elementInternals.validity : this.proxy.validity; + } + /** + * Retrieve a reference to the associated form. + * Returns null if not associated to any form. + * + * @alpha + */ + get form() { + return this.elementInternals ? this.elementInternals.form : this.proxy.form; + } + /** + * Retrieve the localized validation message, + * or custom validation message if set. + * + * @alpha + */ + get validationMessage() { + return this.elementInternals ? this.elementInternals.validationMessage : this.proxy.validationMessage; + } + /** + * Whether the element will be validated when the + * form is submitted + */ + get willValidate() { + return this.elementInternals ? this.elementInternals.willValidate : this.proxy.willValidate; + } + /** + * A reference to all associated label elements + */ + get labels() { + if (this.elementInternals) { + return Object.freeze(Array.from(this.elementInternals.labels)); + } else if (this.proxy instanceof HTMLElement && this.proxy.ownerDocument && this.id) { + const parentLabels = this.proxy.labels; + const forLabels = Array.from(this.proxy.getRootNode().querySelectorAll(`[for='${this.id}']`)); + const labels = parentLabels ? forLabels.concat(Array.from(parentLabels)) : forLabels; + return Object.freeze(labels); + } else { + return emptyArray; + } + } + /** + * Invoked when the `value` property changes + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `valueChanged` method + * They must be sure to invoke `super.valueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + valueChanged(previous, next) { + this.dirtyValue = true; + if (this.proxy instanceof HTMLElement) { + this.proxy.value = this.value; + } + this.currentValue = this.value; + this.setFormValue(this.value); + this.validate(); + } + currentValueChanged() { + this.value = this.currentValue; + } + /** + * Invoked when the `initialValue` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `initialValueChanged` method + * They must be sure to invoke `super.initialValueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + /** + * Invoked when the `disabled` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `disabledChanged` method + * They must be sure to invoke `super.disabledChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + disabledChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.disabled = this.disabled; + } + DOM.queueUpdate(() => this.classList.toggle("disabled", this.disabled)); + } + /** + * Invoked when the `name` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `nameChanged` method + * They must be sure to invoke `super.nameChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + nameChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.name = this.name; + } + } + /** + * Invoked when the `required` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `requiredChanged` method + * They must be sure to invoke `super.requiredChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + requiredChanged(prev, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.required = this.required; + } + DOM.queueUpdate(() => this.classList.toggle("required", this.required)); + this.validate(); + } + /** + * The element internals object. Will only exist + * in browsers supporting the attachInternals API + */ + get elementInternals() { + if (!supportsElementInternals) { + return null; + } + let internals = InternalsMap.get(this); + if (!internals) { + internals = this.attachInternals(); + InternalsMap.set(this, internals); + } + return internals; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("keypress", this._keypressHandler); + if (!this.value) { + this.value = this.initialValue; + this.dirtyValue = false; + } + if (!this.elementInternals) { + this.attachProxy(); + if (this.form) { + this.form.addEventListener("reset", this.formResetCallback); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.proxyEventsToBlock.forEach((name) => this.proxy.removeEventListener(name, this.stopPropagation)); + if (!this.elementInternals && this.form) { + this.form.removeEventListener("reset", this.formResetCallback); + } + } + /** + * Return the current validity of the element. + */ + checkValidity() { + return this.elementInternals ? this.elementInternals.checkValidity() : this.proxy.checkValidity(); + } + /** + * Return the current validity of the element. + * If false, fires an invalid event at the element. + */ + reportValidity() { + return this.elementInternals ? this.elementInternals.reportValidity() : this.proxy.reportValidity(); + } + /** + * Set the validity of the control. In cases when the elementInternals object is not + * available (and the proxy element is used to report validity), this function will + * do nothing unless a message is provided, at which point the setCustomValidity method + * of the proxy element will be invoked with the provided message. + * @param flags - Validity flags + * @param message - Optional message to supply + * @param anchor - Optional element used by UA to display an interactive validation UI + */ + setValidity(flags, message, anchor) { + if (this.elementInternals) { + this.elementInternals.setValidity(flags, message, anchor); + } else if (typeof message === "string") { + this.proxy.setCustomValidity(message); + } + } + /** + * Invoked when a connected component's form or fieldset has its disabled + * state changed. + * @param disabled - the disabled value of the form / fieldset + */ + formDisabledCallback(disabled) { + this.disabled = disabled; + } + formResetCallback() { + this.value = this.initialValue; + this.dirtyValue = false; + } + /** + * Attach the proxy element to the DOM + */ + attachProxy() { + var _a; + if (!this.proxyInitialized) { + this.proxyInitialized = true; + this.proxy.style.display = "none"; + this.proxyEventsToBlock.forEach((name) => this.proxy.addEventListener(name, this.stopPropagation)); + this.proxy.disabled = this.disabled; + this.proxy.required = this.required; + if (typeof this.name === "string") { + this.proxy.name = this.name; + } + if (typeof this.value === "string") { + this.proxy.value = this.value; + } + this.proxy.setAttribute("slot", proxySlotName); + this.proxySlot = document.createElement("slot"); + this.proxySlot.setAttribute("name", proxySlotName); + } + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(this.proxySlot); + this.appendChild(this.proxy); + } + /** + * Detach the proxy element from the DOM + */ + detachProxy() { + var _a; + this.removeChild(this.proxy); + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.removeChild(this.proxySlot); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate(anchor) { + if (this.proxy instanceof HTMLElement) { + this.setValidity(this.proxy.validity, this.proxy.validationMessage, anchor); + } + } + /** + * Associates the provided value (and optional state) with the parent form. + * @param value - The value to set + * @param state - The state object provided to during session restores and when autofilling. + */ + setFormValue(value, state) { + if (this.elementInternals) { + this.elementInternals.setFormValue(value, state || value); + } + } + _keypressHandler(e) { + switch (e.key) { + case keyEnter: + if (this.form instanceof HTMLFormElement) { + const defaultButton = this.form.querySelector("[type=submit]"); + defaultButton === null || defaultButton === void 0 ? void 0 : defaultButton.click(); + } + break; + } + } + /** + * Used to stop propagation of proxy element events + * @param e - Event object + */ + stopPropagation(e) { + e.stopPropagation(); + } + }; + attr({ mode: "boolean" })(C.prototype, "disabled"); + attr({ mode: "fromView", attribute: "value" })(C.prototype, "initialValue"); + attr({ attribute: "current-value" })(C.prototype, "currentValue"); + attr(C.prototype, "name"); + attr({ mode: "boolean" })(C.prototype, "required"); + observable(C.prototype, "value"); + return C; + } + function CheckableFormAssociated(BaseCtor) { + class C extends FormAssociated(BaseCtor) { + } + class D extends C { + constructor(...args) { + super(args); + this.dirtyChecked = false; + this.checkedAttribute = false; + this.checked = false; + this.dirtyChecked = false; + } + checkedAttributeChanged() { + this.defaultChecked = this.checkedAttribute; + } + /** + * @internal + */ + defaultCheckedChanged() { + if (!this.dirtyChecked) { + this.checked = this.defaultChecked; + this.dirtyChecked = false; + } + } + checkedChanged(prev, next) { + if (!this.dirtyChecked) { + this.dirtyChecked = true; + } + this.currentChecked = this.checked; + this.updateForm(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.checked = this.checked; + } + if (prev !== void 0) { + this.$emit("change"); + } + this.validate(); + } + currentCheckedChanged(prev, next) { + this.checked = this.currentChecked; + } + updateForm() { + const value = this.checked ? this.value : null; + this.setFormValue(value, value); + } + connectedCallback() { + super.connectedCallback(); + this.updateForm(); + } + formResetCallback() { + super.formResetCallback(); + this.checked = !!this.checkedAttribute; + this.dirtyChecked = false; + } + } + attr({ attribute: "checked", mode: "boolean" })(D.prototype, "checkedAttribute"); + attr({ attribute: "current-checked", converter: booleanConverter })(D.prototype, "currentChecked"); + observable(D.prototype, "defaultChecked"); + observable(D.prototype, "checked"); + return D; + } + var proxySlotName, ElementInternalsKey, supportsElementInternals, InternalsMap; + var init_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js"() { + init_esm(); + init_dist2(); + proxySlotName = "form-associated-proxy"; + ElementInternalsKey = "ElementInternals"; + supportsElementInternals = ElementInternalsKey in window && "setFormValue" in window[ElementInternalsKey].prototype; + InternalsMap = /* @__PURE__ */ new WeakMap(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js + var _Button, FormAssociatedButton; + var init_button_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Button = class extends FoundationElement { + }; + FormAssociatedButton = class extends FormAssociated(_Button) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.js + var Button, DelegatesARIAButton; + var init_button = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_button_form_associated(); + Button = class extends FormAssociatedButton { + constructor() { + super(...arguments); + this.handleClick = (e) => { + var _a; + if (this.disabled && ((_a = this.defaultSlottedContent) === null || _a === void 0 ? void 0 : _a.length) <= 1) { + e.stopPropagation(); + } + }; + this.handleSubmission = () => { + if (!this.form) { + return; + } + const attached = this.proxy.isConnected; + if (!attached) { + this.attachProxy(); + } + typeof this.form.requestSubmit === "function" ? this.form.requestSubmit(this.proxy) : this.proxy.click(); + if (!attached) { + this.detachProxy(); + } + }; + this.handleFormReset = () => { + var _a; + (_a = this.form) === null || _a === void 0 ? void 0 : _a.reset(); + }; + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + this.control.focus(); + }; + } + }; + } + formactionChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formAction = this.formaction; + } + } + formenctypeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formEnctype = this.formenctype; + } + } + formmethodChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formMethod = this.formmethod; + } + } + formnovalidateChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formNoValidate = this.formnovalidate; + } + } + formtargetChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formTarget = this.formtarget; + } + } + typeChanged(previous, next) { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + } + next === "submit" && this.addEventListener("click", this.handleSubmission); + previous === "submit" && this.removeEventListener("click", this.handleSubmission); + next === "reset" && this.addEventListener("click", this.handleFormReset); + previous === "reset" && this.removeEventListener("click", this.handleFormReset); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.handleUnsupportedDelegatesFocus(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.addEventListener("click", this.handleClick); + }); + } + } + /** + * @internal + */ + disconnectedCallback() { + var _a; + super.disconnectedCallback(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.removeEventListener("click", this.handleClick); + }); + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], Button.prototype, "formId", void 0); + __decorate([ + attr + ], Button.prototype, "formaction", void 0); + __decorate([ + attr + ], Button.prototype, "formenctype", void 0); + __decorate([ + attr + ], Button.prototype, "formmethod", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "formnovalidate", void 0); + __decorate([ + attr + ], Button.prototype, "formtarget", void 0); + __decorate([ + attr + ], Button.prototype, "type", void 0); + __decorate([ + observable + ], Button.prototype, "defaultSlottedContent", void 0); + DelegatesARIAButton = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIAButton.prototype, "ariaExpanded", void 0); + __decorate([ + attr({ attribute: "aria-pressed" }) + ], DelegatesARIAButton.prototype, "ariaPressed", void 0); + applyMixins(DelegatesARIAButton, ARIAGlobalStatesAndProperties); + applyMixins(Button, StartEnd, DelegatesARIAButton); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/index.js + var init_button2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/index.js"() { + init_button_template(); + init_button(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js + var DateFormatter; + var init_date_formatter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js"() { + DateFormatter = class { + constructor(config) { + this.dayFormat = "numeric"; + this.weekdayFormat = "long"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.date = /* @__PURE__ */ new Date(); + if (config) { + for (const key in config) { + const value = config[key]; + if (key === "date") { + this.date = this.getDateObject(value); + } else { + this[key] = value; + } + } + } + } + /** + * Helper function to make sure that the DateFormatter is working with an instance of Date + * @param date - The date as an object, string or Date insance + * @returns - A Date instance + * @public + */ + getDateObject(date) { + if (typeof date === "string") { + const dates = date.split(/[/-]/); + if (dates.length < 3) { + return /* @__PURE__ */ new Date(); + } + return new Date(parseInt(dates[2], 10), parseInt(dates[0], 10) - 1, parseInt(dates[1], 10)); + } else if ("day" in date && "month" in date && "year" in date) { + const { day, month, year } = date; + return new Date(year, month - 1, day); + } + return date; + } + /** + * + * @param date - a valide date as either a Date, string, objec or a DateFormatter + * @param format - The formatting for the string + * @param locale - locale data used for formatting + * @returns A localized string of the date provided + * @public + */ + getDate(date = this.date, format = { + weekday: this.weekdayFormat, + month: this.monthFormat, + day: this.dayFormat, + year: this.yearFormat + }, locale = this.locale) { + const dateObj = this.getDateObject(date); + if (!dateObj.getTime()) { + return ""; + } + const optionsWithTimeZone = Object.assign({ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }, format); + return new Intl.DateTimeFormat(locale, optionsWithTimeZone).format(dateObj); + } + /** + * + * @param day - Day to localize + * @param format - The formatting for the day + * @param locale - The locale data used for formatting + * @returns - A localized number for the day + * @public + */ + getDay(day = this.date.getDate(), format = this.dayFormat, locale = this.locale) { + return this.getDate({ month: 1, day, year: 2020 }, { day: format }, locale); + } + /** + * + * @param month - The month to localize + * @param format - The formatting for the month + * @param locale - The locale data used for formatting + * @returns - A localized name of the month + * @public + */ + getMonth(month = this.date.getMonth() + 1, format = this.monthFormat, locale = this.locale) { + return this.getDate({ month, day: 2, year: 2020 }, { month: format }, locale); + } + /** + * + * @param year - The year to localize + * @param format - The formatting for the year + * @param locale - The locale data used for formatting + * @returns - A localized string for the year + * @public + */ + getYear(year = this.date.getFullYear(), format = this.yearFormat, locale = this.locale) { + return this.getDate({ month: 2, day: 2, year }, { year: format }, locale); + } + /** + * + * @param weekday - The number of the weekday, defaults to Sunday + * @param format - The formatting for the weekday label + * @param locale - The locale data used for formatting + * @returns - A formatted weekday label + * @public + */ + getWeekday(weekday = 0, format = this.weekdayFormat, locale = this.locale) { + const date = `1-${weekday + 1}-2017`; + return this.getDate(date, { weekday: format }, locale); + } + /** + * + * @param format - The formatting for the weekdays + * @param locale - The locale data used for formatting + * @returns - An array of the weekday labels + * @public + */ + getWeekdays(format = this.weekdayFormat, locale = this.locale) { + return Array(7).fill(null).map((_, day) => this.getWeekday(day, format, locale)); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js + var Calendar; + var init_calendar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_date_formatter(); + Calendar = class extends FoundationElement { + constructor() { + super(...arguments); + this.dateFormatter = new DateFormatter(); + this.readonly = false; + this.locale = "en-US"; + this.month = (/* @__PURE__ */ new Date()).getMonth() + 1; + this.year = (/* @__PURE__ */ new Date()).getFullYear(); + this.dayFormat = "numeric"; + this.weekdayFormat = "short"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.minWeeks = 0; + this.disabledDates = ""; + this.selectedDates = ""; + this.oneDayInMs = 864e5; + } + localeChanged() { + this.dateFormatter.locale = this.locale; + } + dayFormatChanged() { + this.dateFormatter.dayFormat = this.dayFormat; + } + weekdayFormatChanged() { + this.dateFormatter.weekdayFormat = this.weekdayFormat; + } + monthFormatChanged() { + this.dateFormatter.monthFormat = this.monthFormat; + } + yearFormatChanged() { + this.dateFormatter.yearFormat = this.yearFormat; + } + /** + * Gets data needed to render about a calendar month as well as the previous and next months + * @param year - year of the calendar + * @param month - month of the calendar + * @returns - an object with data about the current and 2 surrounding months + * @public + */ + getMonthInfo(month = this.month, year = this.year) { + const getFirstDay = (date) => new Date(date.getFullYear(), date.getMonth(), 1).getDay(); + const getLength = (date) => { + const nextMonth2 = new Date(date.getFullYear(), date.getMonth() + 1, 1); + return new Date(nextMonth2.getTime() - this.oneDayInMs).getDate(); + }; + const thisMonth = new Date(year, month - 1); + const nextMonth = new Date(year, month); + const previousMonth = new Date(year, month - 2); + return { + length: getLength(thisMonth), + month, + start: getFirstDay(thisMonth), + year, + previous: { + length: getLength(previousMonth), + month: previousMonth.getMonth() + 1, + start: getFirstDay(previousMonth), + year: previousMonth.getFullYear() + }, + next: { + length: getLength(nextMonth), + month: nextMonth.getMonth() + 1, + start: getFirstDay(nextMonth), + year: nextMonth.getFullYear() + } + }; + } + /** + * A list of calendar days + * @param info - an object containing the information needed to render a calendar month + * @param minWeeks - minimum number of weeks to show + * @returns a list of days in a calendar month + * @public + */ + getDays(info = this.getMonthInfo(), minWeeks = this.minWeeks) { + minWeeks = minWeeks > 10 ? 10 : minWeeks; + const { start, length, previous, next } = info; + const days = []; + let dayCount = 1 - start; + while (dayCount < length + 1 || days.length < minWeeks || days[days.length - 1].length % 7 !== 0) { + const { month, year } = dayCount < 1 ? previous : dayCount > length ? next : info; + const day = dayCount < 1 ? previous.length + dayCount : dayCount > length ? dayCount - length : dayCount; + const dateString = `${month}-${day}-${year}`; + const disabled = this.dateInString(dateString, this.disabledDates); + const selected = this.dateInString(dateString, this.selectedDates); + const date = { + day, + month, + year, + disabled, + selected + }; + const target = days[days.length - 1]; + if (days.length === 0 || target.length % 7 === 0) { + days.push([date]); + } else { + target.push(date); + } + dayCount++; + } + return days; + } + /** + * A helper function that checks if a date exists in a list of dates + * @param date - A date objec that includes the day, month and year + * @param datesString - a comma separated list of dates + * @returns - Returns true if it found the date in the list of dates + * @public + */ + dateInString(date, datesString) { + const dates = datesString.split(",").map((str) => str.trim()); + date = typeof date === "string" ? date : `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`; + return dates.some((d) => d === date); + } + /** + * Creates a class string for the day container + * @param date - date of the calendar cell + * @returns - string of class names + * @public + */ + getDayClassNames(date, todayString) { + const { day, month, year, disabled, selected } = date; + const today = todayString === `${month}-${day}-${year}`; + const inactive = this.month !== month; + return [ + "day", + today && "today", + inactive && "inactive", + disabled && "disabled", + selected && "selected" + ].filter(Boolean).join(" "); + } + /** + * Returns a list of weekday labels + * @returns An array of weekday text and full text if abbreviated + * @public + */ + getWeekdayText() { + const weekdayText = this.dateFormatter.getWeekdays().map((text) => ({ text })); + if (this.weekdayFormat !== "long") { + const longText = this.dateFormatter.getWeekdays("long"); + weekdayText.forEach((weekday, index) => { + weekday.abbr = longText[index]; + }); + } + return weekdayText; + } + /** + * Emits the "date-select" event with the day, month and year. + * @param date - Date cell + * @public + */ + handleDateSelect(event, day) { + event.preventDefault; + this.$emit("dateselected", day); + } + /** + * Handles keyboard events on a cell + * @param event - Keyboard event + * @param date - Date of the cell selected + */ + handleKeydown(event, date) { + if (event.key === keyEnter) { + this.handleDateSelect(event, date); + } + return true; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Calendar.prototype, "readonly", void 0); + __decorate([ + attr + ], Calendar.prototype, "locale", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "month", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "year", void 0); + __decorate([ + attr({ attribute: "day-format", mode: "fromView" }) + ], Calendar.prototype, "dayFormat", void 0); + __decorate([ + attr({ attribute: "weekday-format", mode: "fromView" }) + ], Calendar.prototype, "weekdayFormat", void 0); + __decorate([ + attr({ attribute: "month-format", mode: "fromView" }) + ], Calendar.prototype, "monthFormat", void 0); + __decorate([ + attr({ attribute: "year-format", mode: "fromView" }) + ], Calendar.prototype, "yearFormat", void 0); + __decorate([ + attr({ attribute: "min-weeks", converter: nullableNumberConverter }) + ], Calendar.prototype, "minWeeks", void 0); + __decorate([ + attr({ attribute: "disabled-dates" }) + ], Calendar.prototype, "disabledDates", void 0); + __decorate([ + attr({ attribute: "selected-dates" }) + ], Calendar.prototype, "selectedDates", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js + var GenerateHeaderOptions, DataGridCellTypes, DataGridRowTypes; + var init_data_grid_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js"() { + GenerateHeaderOptions = { + none: "none", + default: "default", + sticky: "sticky" + }; + DataGridCellTypes = { + default: "default", + columnHeader: "columnheader", + rowHeader: "rowheader" + }; + DataGridRowTypes = { + default: "default", + header: "header", + stickyHeader: "sticky-header" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js + var DataGridRow; + var init_data_grid_row = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGridRow = class extends FoundationElement { + constructor() { + super(...arguments); + this.rowType = DataGridRowTypes.default; + this.rowData = null; + this.columnDefinitions = null; + this.isActiveRow = false; + this.cellsRepeatBehavior = null; + this.cellsPlaceholder = null; + this.focusColumnIndex = 0; + this.refocusOnLoad = false; + this.updateRowStyle = () => { + this.style.gridTemplateColumns = this.gridTemplateColumns; + }; + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowStyle(); + } + } + rowTypeChanged() { + if (this.$fastController.isConnected) { + this.updateItemTemplate(); + } + } + rowDataChanged() { + if (this.rowData !== null && this.isActiveRow) { + this.refocusOnLoad = true; + return; + } + } + cellItemTemplateChanged() { + this.updateItemTemplate(); + } + headerCellItemTemplateChanged() { + this.updateItemTemplate(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.cellsRepeatBehavior === null) { + this.cellsPlaceholder = document.createComment(""); + this.appendChild(this.cellsPlaceholder); + this.updateItemTemplate(); + this.cellsRepeatBehavior = new RepeatDirective((x) => x.columnDefinitions, (x) => x.activeCellItemTemplate, { positioning: true }).createBehavior(this.cellsPlaceholder); + this.$fastController.addBehaviors([this.cellsRepeatBehavior]); + } + this.addEventListener("cell-focused", this.handleCellFocus); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.updateRowStyle(); + if (this.refocusOnLoad) { + this.refocusOnLoad = false; + if (this.cellElements.length > this.focusColumnIndex) { + this.cellElements[this.focusColumnIndex].focus(); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("cell-focused", this.handleCellFocus); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + } + handleFocusout(e) { + if (!this.contains(e.target)) { + this.isActiveRow = false; + this.focusColumnIndex = 0; + } + } + handleCellFocus(e) { + this.isActiveRow = true; + this.focusColumnIndex = this.cellElements.indexOf(e.target); + this.$emit("row-focused", this); + } + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusColumnIndex = 0; + switch (e.key) { + case keyArrowLeft: + newFocusColumnIndex = Math.max(0, this.focusColumnIndex - 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyArrowRight: + newFocusColumnIndex = Math.min(this.cellElements.length - 1, this.focusColumnIndex + 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyHome: + if (!e.ctrlKey) { + this.cellElements[0].focus(); + e.preventDefault(); + } + break; + case keyEnd: + if (!e.ctrlKey) { + this.cellElements[this.cellElements.length - 1].focus(); + e.preventDefault(); + } + break; + } + } + updateItemTemplate() { + this.activeCellItemTemplate = this.rowType === DataGridRowTypes.default && this.cellItemTemplate !== void 0 ? this.cellItemTemplate : this.rowType === DataGridRowTypes.default && this.cellItemTemplate === void 0 ? this.defaultCellItemTemplate : this.headerCellItemTemplate !== void 0 ? this.headerCellItemTemplate : this.defaultHeaderCellItemTemplate; + } + }; + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGridRow.prototype, "gridTemplateColumns", void 0); + __decorate([ + attr({ attribute: "row-type" }) + ], DataGridRow.prototype, "rowType", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowIndex", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "isActiveRow", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "activeCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultHeaderCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js + function createRowItemTemplate(context) { + const rowTag = context.tagFor(DataGridRow); + return html` + <${rowTag} + :rowData="${(x) => x}" + :cellItemTemplate="${(x, c) => c.parent.cellItemTemplate}" + :headerCellItemTemplate="${(x, c) => c.parent.headerCellItemTemplate}" + > +`; + } + var dataGridTemplate; + var init_data_grid_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js"() { + init_esm(); + init_data_grid_row(); + dataGridTemplate = (context, definition) => { + const rowItemTemplate = createRowItemTemplate(context); + const rowTag = context.tagFor(DataGridRow); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js + var DataGrid; + var init_data_grid = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGrid = class _DataGrid extends FoundationElement { + constructor() { + super(); + this.noTabbing = false; + this.generateHeader = GenerateHeaderOptions.default; + this.rowsData = []; + this.columnDefinitions = null; + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + this.rowsPlaceholder = null; + this.generatedHeader = null; + this.isUpdatingFocus = false; + this.pendingFocusUpdate = false; + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = true; + this.generatedGridTemplateColumns = ""; + this.focusOnCell = (rowIndex, columnIndex, scrollIntoView) => { + if (this.rowElements.length === 0) { + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + return; + } + const focusRowIndex = Math.max(0, Math.min(this.rowElements.length - 1, rowIndex)); + const focusRow = this.rowElements[focusRowIndex]; + const cells = focusRow.querySelectorAll('[role="cell"], [role="gridcell"], [role="columnheader"], [role="rowheader"]'); + const focusColumnIndex = Math.max(0, Math.min(cells.length - 1, columnIndex)); + const focusTarget = cells[focusColumnIndex]; + if (scrollIntoView && this.scrollHeight !== this.clientHeight && (focusRowIndex < this.focusRowIndex && this.scrollTop > 0 || focusRowIndex > this.focusRowIndex && this.scrollTop < this.scrollHeight - this.clientHeight)) { + focusTarget.scrollIntoView({ block: "center", inline: "center" }); + } + focusTarget.focus(); + }; + this.onChildListChange = (mutations, observer) => { + if (mutations && mutations.length) { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((newNode) => { + if (newNode.nodeType === 1 && newNode.getAttribute("role") === "row") { + newNode.columnDefinitions = this.columnDefinitions; + } + }); + }); + this.queueRowIndexUpdate(); + } + }; + this.queueRowIndexUpdate = () => { + if (!this.rowindexUpdateQueued) { + this.rowindexUpdateQueued = true; + DOM.queueUpdate(this.updateRowIndexes); + } + }; + this.updateRowIndexes = () => { + let newGridTemplateColumns = this.gridTemplateColumns; + if (newGridTemplateColumns === void 0) { + if (this.generatedGridTemplateColumns === "" && this.rowElements.length > 0) { + const firstRow = this.rowElements[0]; + this.generatedGridTemplateColumns = new Array(firstRow.cellElements.length).fill("1fr").join(" "); + } + newGridTemplateColumns = this.generatedGridTemplateColumns; + } + this.rowElements.forEach((element, index) => { + const thisRow = element; + thisRow.rowIndex = index; + thisRow.gridTemplateColumns = newGridTemplateColumns; + if (this.columnDefinitionsStale) { + thisRow.columnDefinitions = this.columnDefinitions; + } + }); + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = false; + }; + } + /** + * generates a gridTemplateColumns based on columndata array + */ + static generateTemplateColumns(columnDefinitions) { + let templateColumns = ""; + columnDefinitions.forEach((column) => { + templateColumns = `${templateColumns}${templateColumns === "" ? "" : " "}${"1fr"}`; + }); + return templateColumns; + } + noTabbingChanged() { + if (this.$fastController.isConnected) { + if (this.noTabbing) { + this.setAttribute("tabIndex", "-1"); + } else { + this.setAttribute("tabIndex", this.contains(document.activeElement) || this === document.activeElement ? "-1" : "0"); + } + } + } + generateHeaderChanged() { + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowIndexes(); + } + } + rowsDataChanged() { + if (this.columnDefinitions === null && this.rowsData.length > 0) { + this.columnDefinitions = _DataGrid.generateColumns(this.rowsData[0]); + } + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + columnDefinitionsChanged() { + if (this.columnDefinitions === null) { + this.generatedGridTemplateColumns = ""; + return; + } + this.generatedGridTemplateColumns = _DataGrid.generateTemplateColumns(this.columnDefinitions); + if (this.$fastController.isConnected) { + this.columnDefinitionsStale = true; + this.queueRowIndexUpdate(); + } + } + headerCellItemTemplateChanged() { + if (this.$fastController.isConnected) { + if (this.generatedHeader !== null) { + this.generatedHeader.headerCellItemTemplate = this.headerCellItemTemplate; + } + } + } + focusRowIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + focusColumnIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.rowItemTemplate === void 0) { + this.rowItemTemplate = this.defaultRowItemTemplate; + } + this.rowsPlaceholder = document.createComment(""); + this.appendChild(this.rowsPlaceholder); + this.toggleGeneratedHeader(); + this.rowsRepeatBehavior = new RepeatDirective((x) => x.rowsData, (x) => x.rowItemTemplate, { positioning: true }).createBehavior(this.rowsPlaceholder); + this.$fastController.addBehaviors([this.rowsRepeatBehavior]); + this.addEventListener("row-focused", this.handleRowFocus); + this.addEventListener(eventFocus, this.handleFocus); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.addEventListener(eventFocusOut, this.handleFocusOut); + this.observer = new MutationObserver(this.onChildListChange); + this.observer.observe(this, { childList: true }); + if (this.noTabbing) { + this.setAttribute("tabindex", "-1"); + } + DOM.queueUpdate(this.queueRowIndexUpdate); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("row-focused", this.handleRowFocus); + this.removeEventListener(eventFocus, this.handleFocus); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.removeEventListener(eventFocusOut, this.handleFocusOut); + this.observer.disconnect(); + this.rowsPlaceholder = null; + this.generatedHeader = null; + } + /** + * @internal + */ + handleRowFocus(e) { + this.isUpdatingFocus = true; + const focusRow = e.target; + this.focusRowIndex = this.rowElements.indexOf(focusRow); + this.focusColumnIndex = focusRow.focusColumnIndex; + this.setAttribute("tabIndex", "-1"); + this.isUpdatingFocus = false; + } + /** + * @internal + */ + handleFocus(e) { + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + /** + * @internal + */ + handleFocusOut(e) { + if (e.relatedTarget === null || !this.contains(e.relatedTarget)) { + this.setAttribute("tabIndex", this.noTabbing ? "-1" : "0"); + } + } + /** + * @internal + */ + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusRowIndex; + const maxIndex = this.rowElements.length - 1; + const currentGridBottom = this.offsetHeight + this.scrollTop; + const lastRow = this.rowElements[maxIndex]; + switch (e.key) { + case keyArrowUp: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex - 1, this.focusColumnIndex, true); + break; + case keyArrowDown: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex + 1, this.focusColumnIndex, true); + break; + case keyPageUp: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex === 0) { + this.focusOnCell(0, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex - 1; + for (newFocusRowIndex; newFocusRowIndex >= 0; newFocusRowIndex--) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop < this.scrollTop) { + this.scrollTop = thisRow.offsetTop + thisRow.clientHeight - this.clientHeight; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyPageDown: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex >= maxIndex || lastRow.offsetTop + lastRow.offsetHeight <= currentGridBottom) { + this.focusOnCell(maxIndex, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex + 1; + for (newFocusRowIndex; newFocusRowIndex <= maxIndex; newFocusRowIndex++) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop + thisRow.offsetHeight > currentGridBottom) { + let stickyHeaderOffset = 0; + if (this.generateHeader === GenerateHeaderOptions.sticky && this.generatedHeader !== null) { + stickyHeaderOffset = this.generatedHeader.clientHeight; + } + this.scrollTop = thisRow.offsetTop - stickyHeaderOffset; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyHome: + if (e.ctrlKey) { + e.preventDefault(); + this.focusOnCell(0, 0, true); + } + break; + case keyEnd: + if (e.ctrlKey && this.columnDefinitions !== null) { + e.preventDefault(); + this.focusOnCell(this.rowElements.length - 1, this.columnDefinitions.length - 1, true); + } + break; + } + } + queueFocusUpdate() { + if (this.isUpdatingFocus && (this.contains(document.activeElement) || this === document.activeElement)) { + return; + } + if (this.pendingFocusUpdate === false) { + this.pendingFocusUpdate = true; + DOM.queueUpdate(() => this.updateFocus()); + } + } + updateFocus() { + this.pendingFocusUpdate = false; + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + toggleGeneratedHeader() { + if (this.generatedHeader !== null) { + this.removeChild(this.generatedHeader); + this.generatedHeader = null; + } + if (this.generateHeader !== GenerateHeaderOptions.none && this.rowsData.length > 0) { + const generatedHeaderElement = document.createElement(this.rowElementTag); + this.generatedHeader = generatedHeaderElement; + this.generatedHeader.columnDefinitions = this.columnDefinitions; + this.generatedHeader.gridTemplateColumns = this.gridTemplateColumns; + this.generatedHeader.rowType = this.generateHeader === GenerateHeaderOptions.sticky ? DataGridRowTypes.stickyHeader : DataGridRowTypes.header; + if (this.firstChild !== null || this.rowsPlaceholder !== null) { + this.insertBefore(generatedHeaderElement, this.firstChild !== null ? this.firstChild : this.rowsPlaceholder); + } + return; + } + } + }; + DataGrid.generateColumns = (row) => { + return Object.getOwnPropertyNames(row).map((property, index) => { + return { + columnDataKey: property, + gridColumn: `${index}` + }; + }); + }; + __decorate([ + attr({ attribute: "no-tabbing", mode: "boolean" }) + ], DataGrid.prototype, "noTabbing", void 0); + __decorate([ + attr({ attribute: "generate-header" }) + ], DataGrid.prototype, "generateHeader", void 0); + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGrid.prototype, "gridTemplateColumns", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowsData", void 0); + __decorate([ + observable + ], DataGrid.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusRowIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusColumnIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "defaultRowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElementTag", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js + var defaultCellContentsTemplate, defaultHeaderCellContentsTemplate, DataGridCell; + var init_data_grid_cell = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + defaultCellContentsTemplate = html` + +`; + defaultHeaderCellContentsTemplate = html` + +`; + DataGridCell = class extends FoundationElement { + constructor() { + super(...arguments); + this.cellType = DataGridCellTypes.default; + this.rowData = null; + this.columnDefinition = null; + this.isActiveCell = false; + this.customCellView = null; + this.updateCellStyle = () => { + this.style.gridColumn = this.gridColumn; + }; + } + cellTypeChanged() { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + gridColumnChanged() { + if (this.$fastController.isConnected) { + this.updateCellStyle(); + } + } + columnDefinitionChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.addEventListener(eventFocusIn, this.handleFocusin); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.style.gridColumn = `${((_a = this.columnDefinition) === null || _a === void 0 ? void 0 : _a.gridColumn) === void 0 ? 0 : this.columnDefinition.gridColumn}`; + this.updateCellView(); + this.updateCellStyle(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener(eventFocusIn, this.handleFocusin); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.disconnectCellView(); + } + handleFocusin(e) { + if (this.isActiveCell) { + return; + } + this.isActiveCell = true; + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition !== null && this.columnDefinition.headerCellInternalFocusQueue !== true && typeof this.columnDefinition.headerCellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + default: + if (this.columnDefinition !== null && this.columnDefinition.cellInternalFocusQueue !== true && typeof this.columnDefinition.cellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + } + this.$emit("cell-focused", this); + } + handleFocusout(e) { + if (this !== document.activeElement && !this.contains(document.activeElement)) { + this.isActiveCell = false; + } + } + handleKeydown(e) { + if (e.defaultPrevented || this.columnDefinition === null || this.cellType === DataGridCellTypes.default && this.columnDefinition.cellInternalFocusQueue !== true || this.cellType === DataGridCellTypes.columnHeader && this.columnDefinition.headerCellInternalFocusQueue !== true) { + return; + } + switch (e.key) { + case keyEnter: + case keyFunction2: + if (this.contains(document.activeElement) && document.activeElement !== this) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + default: + if (this.columnDefinition.cellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + } + break; + case keyEscape: + if (this.contains(document.activeElement) && document.activeElement !== this) { + this.focus(); + e.preventDefault(); + } + break; + } + } + updateCellView() { + this.disconnectCellView(); + if (this.columnDefinition === null) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellTemplate !== void 0) { + this.customCellView = this.columnDefinition.headerCellTemplate.render(this, this); + } else { + this.customCellView = defaultHeaderCellContentsTemplate.render(this, this); + } + break; + case void 0: + case DataGridCellTypes.rowHeader: + case DataGridCellTypes.default: + if (this.columnDefinition.cellTemplate !== void 0) { + this.customCellView = this.columnDefinition.cellTemplate.render(this, this); + } else { + this.customCellView = defaultCellContentsTemplate.render(this, this); + } + break; + } + } + disconnectCellView() { + if (this.customCellView !== null) { + this.customCellView.dispose(); + this.customCellView = null; + } + } + }; + __decorate([ + attr({ attribute: "cell-type" }) + ], DataGridCell.prototype, "cellType", void 0); + __decorate([ + attr({ attribute: "grid-column" }) + ], DataGridCell.prototype, "gridColumn", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "columnDefinition", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js + function createCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="${(x) => x.isRowHeader ? "rowheader" : void 0}" + grid-column="${(x, c) => c.index + 1}" + :rowData="${(x, c) => c.parent.rowData}" + :columnDefinition="${(x) => x}" + > +`; + } + function createHeaderCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="columnheader" + grid-column="${(x, c) => c.index + 1}" + :columnDefinition="${(x) => x}" + > +`; + } + var dataGridRowTemplate; + var init_data_grid_row_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js"() { + init_esm(); + init_data_grid_cell(); + dataGridRowTemplate = (context, definition) => { + const cellItemTemplate = createCellItemTemplate(context); + const headerCellItemTemplate = createHeaderCellItemTemplate(context); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js + var dataGridCellTemplate; + var init_data_grid_cell_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js"() { + init_esm(); + dataGridCellTemplate = (context, definition) => { + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js + var init_data_grid2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js"() { + init_data_grid_template(); + init_data_grid(); + init_data_grid_row_template(); + init_data_grid_row(); + init_data_grid_cell_template(); + init_data_grid_cell(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js + var CalendarTitleTemplate; + var init_calendar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js"() { + init_esm(); + CalendarTitleTemplate = html` +
+ + ${(x) => x.dateFormatter.getMonth(x.month)} + + ${(x) => x.dateFormatter.getYear(x.year)} +
+`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js + var init_calendar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js"() { + init_calendar(); + init_calendar_template(); + init_date_formatter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js + var init_card_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.js + var init_card = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/index.js + var init_card2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/index.js"() { + init_card_template(); + init_card(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js + var checkboxTemplate; + var init_checkbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js"() { + init_esm(); + checkboxTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js + var _Checkbox, FormAssociatedCheckbox; + var init_checkbox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Checkbox = class extends FoundationElement { + }; + FormAssociatedCheckbox = class extends CheckableFormAssociated(_Checkbox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js + var Checkbox; + var init_checkbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_checkbox_form_associated(); + Checkbox = class extends FormAssociatedCheckbox { + constructor() { + super(); + this.initialValue = "on"; + this.indeterminate = false; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keySpace: + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Checkbox.prototype, "readOnly", void 0); + __decorate([ + observable + ], Checkbox.prototype, "defaultSlottedNodes", void 0); + __decorate([ + observable + ], Checkbox.prototype, "indeterminate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js + var init_checkbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js"() { + init_checkbox_template(); + init_checkbox(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js + function isListboxOption(el2) { + return isHTMLElement(el2) && (el2.getAttribute("role") === "option" || el2 instanceof HTMLOptionElement); + } + var ListboxOption, DelegatesARIAListboxOption; + var init_listbox_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + ListboxOption = class extends FoundationElement { + constructor(text, value, defaultSelected, selected) { + super(); + this.defaultSelected = false; + this.dirtySelected = false; + this.selected = this.defaultSelected; + this.dirtyValue = false; + if (text) { + this.textContent = text; + } + if (value) { + this.initialValue = value; + } + if (defaultSelected) { + this.defaultSelected = defaultSelected; + } + if (selected) { + this.selected = selected; + } + this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected); + this.proxy.disabled = this.disabled; + } + /** + * Updates the ariaChecked property when the checked property changes. + * + * @param prev - the previous checked value + * @param next - the current checked value + * + * @public + */ + checkedChanged(prev, next) { + if (typeof next === "boolean") { + this.ariaChecked = next ? "true" : "false"; + return; + } + this.ariaChecked = null; + } + /** + * Updates the proxy's text content when the default slot changes. + * @param prev - the previous content value + * @param next - the current content value + * + * @internal + */ + contentChanged(prev, next) { + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.textContent = this.textContent; + } + this.$emit("contentchange", null, { bubbles: true }); + } + defaultSelectedChanged() { + if (!this.dirtySelected) { + this.selected = this.defaultSelected; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.defaultSelected; + } + } + } + disabledChanged(prev, next) { + this.ariaDisabled = this.disabled ? "true" : "false"; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.disabled = this.disabled; + } + } + selectedAttributeChanged() { + this.defaultSelected = this.selectedAttribute; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.defaultSelected = this.defaultSelected; + } + } + selectedChanged() { + this.ariaSelected = this.selected ? "true" : "false"; + if (!this.dirtySelected) { + this.dirtySelected = true; + } + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.selected; + } + } + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + get label() { + var _a; + return (_a = this.value) !== null && _a !== void 0 ? _a : this.text; + } + get text() { + var _a, _b; + return (_b = (_a = this.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, " ").trim()) !== null && _b !== void 0 ? _b : ""; + } + set value(next) { + const newValue = `${next !== null && next !== void 0 ? next : ""}`; + this._value = newValue; + this.dirtyValue = true; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.value = newValue; + } + Observable.notify(this, "value"); + } + get value() { + var _a; + Observable.track(this, "value"); + return (_a = this._value) !== null && _a !== void 0 ? _a : this.text; + } + get form() { + return this.proxy ? this.proxy.form : null; + } + }; + __decorate([ + observable + ], ListboxOption.prototype, "checked", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "content", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "defaultSelected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxOption.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "selected", mode: "boolean" }) + ], ListboxOption.prototype, "selectedAttribute", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "selected", void 0); + __decorate([ + attr({ attribute: "value", mode: "fromView" }) + ], ListboxOption.prototype, "initialValue", void 0); + DelegatesARIAListboxOption = class { + }; + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0); + applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties); + applyMixins(ListboxOption, StartEnd, DelegatesARIAListboxOption); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js + var Listbox, DelegatesARIAListbox; + var init_listbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_listbox_option(); + init_aria_global(); + init_apply_mixins(); + Listbox = class _Listbox extends FoundationElement { + constructor() { + super(...arguments); + this._options = []; + this.selectedIndex = -1; + this.selectedOptions = []; + this.shouldSkipFocus = false; + this.typeaheadBuffer = ""; + this.typeaheadExpired = true; + this.typeaheadTimeout = -1; + } + /** + * The first selected option. + * + * @internal + */ + get firstSelectedOption() { + var _a; + return (_a = this.selectedOptions[0]) !== null && _a !== void 0 ? _a : null; + } + /** + * Returns true if there is one or more selectable option. + * + * @internal + */ + get hasSelectableOptions() { + return this.options.length > 0 && !this.options.every((o) => o.disabled); + } + /** + * The number of options. + * + * @public + */ + get length() { + var _a, _b; + return (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; + } + /** + * The list of options. + * + * @public + */ + get options() { + Observable.track(this, "options"); + return this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Flag for the typeahead timeout expiration. + * + * @deprecated use `Listbox.typeaheadExpired` + * @internal + */ + get typeAheadExpired() { + return this.typeaheadExpired; + } + set typeAheadExpired(value) { + this.typeaheadExpired = value; + } + /** + * Handle click events for listbox options. + * + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && !captured.disabled) { + this.selectedIndex = this.options.indexOf(captured); + return true; + } + } + /** + * Ensures that the provided option is focused and scrolled into view. + * + * @param optionToFocus - The option to focus + * @internal + */ + focusAndScrollOptionIntoView(optionToFocus = this.firstSelectedOption) { + if (this.contains(document.activeElement) && optionToFocus !== null) { + optionToFocus.focus(); + requestAnimationFrame(() => { + optionToFocus.scrollIntoView({ block: "nearest" }); + }); + } + } + /** + * Handles `focusin` actions for the component. When the component receives focus, + * the list of selected options is refreshed and the first selected option is scrolled + * into view. + * + * @internal + */ + focusinHandler(e) { + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Returns the options which match the current typeahead buffer. + * + * @internal + */ + getTypeaheadMatches() { + const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); + const re = new RegExp(`^${pattern}`, "gi"); + return this.options.filter((o) => o.text.trim().match(re)); + } + /** + * Determines the index of the next option which is selectable, if any. + * + * @param prev - the previous selected index + * @param next - the next index to select + * + * @internal + */ + getSelectableIndex(prev = this.selectedIndex, next) { + const direction = prev > next ? -1 : prev < next ? 1 : 0; + const potentialDirection = prev + direction; + let nextSelectableOption = null; + switch (direction) { + case -1: { + nextSelectableOption = this.options.reduceRight((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index < potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + case 1: { + nextSelectableOption = this.options.reduce((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index > potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + } + return this.options.indexOf(nextSelectableOption); + } + /** + * Handles external changes to child options. + * + * @param source - the source object + * @param propertyName - the property + * + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "selected": { + if (_Listbox.slottedOptionFilter(source)) { + this.selectedIndex = this.options.indexOf(source); + } + this.setSelectedOptions(); + break; + } + } + } + /** + * Moves focus to an option whose label matches characters typed by the user. + * Consecutive keystrokes are batched into a buffer of search text used + * to match against the set of options. If `TYPE_AHEAD_TIMEOUT_MS` passes + * between consecutive keystrokes, the search restarts. + * + * @param key - the key to be evaluated + * + * @internal + */ + handleTypeAhead(key) { + if (this.typeaheadTimeout) { + window.clearTimeout(this.typeaheadTimeout); + } + this.typeaheadTimeout = window.setTimeout(() => this.typeaheadExpired = true, _Listbox.TYPE_AHEAD_TIMEOUT_MS); + if (key.length > 1) { + return; + } + this.typeaheadBuffer = `${this.typeaheadExpired ? "" : this.typeaheadBuffer}${key}`; + } + /** + * Handles `keydown` actions for listbox navigation and typeahead. + * + * @internal + */ + keydownHandler(e) { + if (this.disabled) { + return true; + } + this.shouldSkipFocus = false; + const key = e.key; + switch (key) { + // Select the first available option + case keyHome: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectFirstOption(); + } + break; + } + // Select the next selectable option + case keyArrowDown: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectNextOption(); + } + break; + } + // Select the previous selectable option + case keyArrowUp: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectPreviousOption(); + } + break; + } + // Select the last available option + case keyEnd: { + e.preventDefault(); + this.selectLastOption(); + break; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEnter: + case keyEscape: { + return true; + } + case keySpace: { + if (this.typeaheadExpired) { + return true; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @internal + */ + mousedownHandler(e) { + this.shouldSkipFocus = !this.contains(document.activeElement); + return true; + } + /** + * Switches between single-selection and multi-selection mode. + * + * @param prev - the previous value of the `multiple` attribute + * @param next - the next value of the `multiple` attribute + * + * @internal + */ + multipleChanged(prev, next) { + this.ariaMultiSelectable = next ? "true" : null; + } + /** + * Updates the list of selected options when the `selectedIndex` changes. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + var _a; + if (!this.hasSelectableOptions) { + this.selectedIndex = -1; + return; + } + if (((_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.disabled) && typeof prev === "number") { + const selectableIndex = this.getSelectableIndex(prev, next); + const newNext = selectableIndex > -1 ? selectableIndex : prev; + this.selectedIndex = newNext; + if (next === newNext) { + this.selectedIndexChanged(next, newNext); + } + return; + } + this.setSelectedOptions(); + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + const filteredNext = next.filter(_Listbox.slottedOptionFilter); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "selected"); + o.selected = filteredNext.includes(o); + notifier.subscribe(this, "selected"); + }); + } + /** + * Moves focus to the first selectable option. + * + * @public + */ + selectFirstOption() { + var _a, _b; + if (!this.disabled) { + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((o) => !o.disabled)) !== null && _b !== void 0 ? _b : -1; + } + } + /** + * Moves focus to the last selectable option. + * + * @internal + */ + selectLastOption() { + if (!this.disabled) { + this.selectedIndex = findLastIndex(this.options, (o) => !o.disabled); + } + } + /** + * Moves focus to the next selectable option. + * + * @internal + */ + selectNextOption() { + if (!this.disabled && this.selectedIndex < this.options.length - 1) { + this.selectedIndex += 1; + } + } + /** + * Moves focus to the previous selectable option. + * + * @internal + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex > 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Updates the selected index to match the first selected option. + * + * @internal + */ + setDefaultSelectedOption() { + var _a, _b; + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((el2) => el2.defaultSelected)) !== null && _b !== void 0 ? _b : -1; + } + /** + * Sets an option as selected and gives it focus. + * + * @public + */ + setSelectedOptions() { + var _a, _b, _c; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) { + this.selectedOptions = [this.options[this.selectedIndex]]; + this.ariaActiveDescendant = (_c = (_b = this.firstSelectedOption) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : ""; + this.focusAndScrollOptionIntoView(); + } + } + /** + * Updates the list of options and resets the selected option when the slotted option content changes. + * + * @param prev - the previous list of slotted options + * @param next - the current list of slotted options + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options = next.reduce((options, item) => { + if (isListboxOption(item)) { + options.push(item); + } + return options; + }, []); + const setSize = `${this.options.length}`; + this.options.forEach((option, index) => { + if (!option.id) { + option.id = uniqueId("option-"); + } + option.ariaPosInSet = `${index + 1}`; + option.ariaSetSize = setSize; + }); + if (this.$fastController.isConnected) { + this.setSelectedOptions(); + this.setDefaultSelectedOption(); + } + } + /** + * Updates the filtered list of options when the typeahead buffer changes. + * + * @param prev - the previous typeahead buffer value + * @param next - the current typeahead buffer value + * + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + if (typeaheadMatches.length) { + const selectedIndex = this.options.indexOf(typeaheadMatches[0]); + if (selectedIndex > -1) { + this.selectedIndex = selectedIndex; + } + } + this.typeaheadExpired = false; + } + } + }; + Listbox.slottedOptionFilter = (n) => isListboxOption(n) && !n.hidden; + Listbox.TYPE_AHEAD_TIMEOUT_MS = 1e3; + __decorate([ + attr({ mode: "boolean" }) + ], Listbox.prototype, "disabled", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedIndex", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "slottedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "typeaheadBuffer", void 0); + DelegatesARIAListbox = class { + }; + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaActiveDescendant", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaDisabled", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaExpanded", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaMultiSelectable", void 0); + applyMixins(DelegatesARIAListbox, ARIAGlobalStatesAndProperties); + applyMixins(Listbox, DelegatesARIAListbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js + var SelectPosition; + var init_select_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js"() { + SelectPosition = { + above: "above", + below: "below" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js + var _Combobox, FormAssociatedCombobox; + var init_combobox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js"() { + init_form_associated(); + init_listbox(); + _Combobox = class extends Listbox { + }; + FormAssociatedCombobox = class extends FormAssociated(_Combobox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js + var ComboboxAutocomplete; + var init_combobox_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js"() { + ComboboxAutocomplete = { + inline: "inline", + list: "list", + both: "both", + none: "none" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js + var Combobox, DelegatesARIACombobox; + var init_combobox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_select_options(); + init_apply_mixins(); + init_combobox_form_associated(); + init_combobox_options(); + Combobox = class extends FormAssociatedCombobox { + constructor() { + super(...arguments); + this._value = ""; + this.filteredOptions = []; + this.filter = ""; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + this.open = false; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + super.formResetCallback(); + this.setDefaultSelectedOption(); + this.updateValue(); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + get isAutocompleteInline() { + return this.autocomplete === ComboboxAutocomplete.inline || this.isAutocompleteBoth; + } + get isAutocompleteList() { + return this.autocomplete === ComboboxAutocomplete.list || this.isAutocompleteBoth; + } + get isAutocompleteBoth() { + return this.autocomplete === ComboboxAutocomplete.both; + } + /** + * Sets focus and synchronize ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged() { + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The list of options. + * + * @public + * @remarks + * Overrides `Listbox.options`. + */ + get options() { + Observable.track(this, "options"); + return this.filteredOptions.length ? this.filteredOptions : this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Updates the placeholder on the proxy element. + * @internal + */ + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c; + const prev = `${this._value}`; + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el2) => el2.text.toLowerCase() === next.toLowerCase()); + const prevSelectedValue = (_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.text; + const nextSelectedValue = (_b = this.options[selectedIndex]) === null || _b === void 0 ? void 0 : _b.text; + this.selectedIndex = prevSelectedValue !== nextSelectedValue ? selectedIndex : this.selectedIndex; + next = ((_c = this.firstSelectedOption) === null || _c === void 0 ? void 0 : _c.text) || next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + } + } + /** + * Handle opening and closing the listbox when the combobox is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (this.disabled || (captured === null || captured === void 0 ? void 0 : captured.disabled)) { + return; + } + if (this.open) { + if (e.composedPath()[0] === this.control) { + return; + } + if (captured) { + this.selectedOptions = [captured]; + this.control.value = captured.text; + this.clearSelectionRange(); + this.updateValue(true); + } + } + this.open = !this.open; + if (this.open) { + this.control.focus(); + } + return true; + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + if (this.value) { + this.initialValue = this.value; + } + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Filter available options by text value. + * + * @public + */ + filterOptions() { + if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) { + this.filter = ""; + } + const filter = this.filter.toLowerCase(); + this.filteredOptions = this._options.filter((o) => o.text.toLowerCase().startsWith(this.filter.toLowerCase())); + if (this.isAutocompleteList) { + if (!this.filteredOptions.length && !filter) { + this.filteredOptions = this._options; + } + this._options.forEach((o) => { + o.hidden = !this.filteredOptions.includes(o); + }); + } + } + /** + * Focus the control and scroll the first selected option into view. + * + * @internal + * @remarks + * Overrides: `Listbox.focusAndScrollOptionIntoView` + */ + focusAndScrollOptionIntoView() { + if (this.contains(document.activeElement)) { + this.control.focus(); + if (this.firstSelectedOption) { + requestAnimationFrame(() => { + var _a; + (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: "nearest" }); + }); + } + } + } + /** + * Handle focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + this.syncValue(); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!this.options || !this.options.includes(focusTarget)) { + this.open = false; + } + } + /** + * Handle content changes on the control input. + * + * @param e - the input event + * @internal + */ + inputHandler(e) { + this.filter = this.control.value; + this.filterOptions(); + if (!this.isAutocompleteInline) { + this.selectedIndex = this.options.map((option) => option.text).indexOf(this.control.value); + } + if (e.inputType.includes("deleteContent") || !this.filter.length) { + return true; + } + if (this.isAutocompleteList && !this.open) { + this.open = true; + } + if (this.isAutocompleteInline) { + if (this.filteredOptions.length) { + this.selectedOptions = [this.filteredOptions[0]]; + this.selectedIndex = this.options.indexOf(this.firstSelectedOption); + this.setInlineSelection(); + } else { + this.selectedIndex = -1; + } + } + return; + } + /** + * Handle keydown actions for listbox navigation. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (e.ctrlKey || e.shiftKey) { + return true; + } + switch (key) { + case "Enter": { + this.syncValue(); + if (this.isAutocompleteInline) { + this.filter = this.value; + } + this.open = false; + this.clearSelectionRange(); + break; + } + case "Escape": { + if (!this.isAutocompleteInline) { + this.selectedIndex = -1; + } + if (this.open) { + this.open = false; + break; + } + this.value = ""; + this.control.value = ""; + this.filter = ""; + this.filterOptions(); + break; + } + case "Tab": { + this.setInputToSelection(); + if (!this.open) { + return true; + } + e.preventDefault(); + this.open = false; + break; + } + case "ArrowUp": + case "ArrowDown": { + this.filterOptions(); + if (!this.open) { + this.open = true; + break; + } + if (this.filteredOptions.length > 0) { + super.keydownHandler(e); + } + if (this.isAutocompleteInline) { + this.setInlineSelection(); + } + break; + } + default: { + return true; + } + } + } + /** + * Handle keyup actions for value input and text field manipulations. + * + * @param e - the keyboard event + * @internal + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + case "ArrowRight": + case "Backspace": + case "Delete": + case "Home": + case "End": { + this.filter = this.control.value; + this.selectedIndex = -1; + this.filterOptions(); + break; + } + } + } + /** + * Ensure that the selectedIndex is within the current allowable filtered range. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + if (this.$fastController.isConnected) { + next = limit(-1, this.options.length - 1, next); + if (next !== this.selectedIndex) { + this.selectedIndex = next; + return; + } + super.selectedIndexChanged(prev, next); + } + } + /** + * Move focus to the previous selectable option. + * + * @internal + * @remarks + * Overrides `Listbox.selectPreviousOption` + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex >= 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Set the default selected options at initialization or reset. + * + * @internal + * @remarks + * Overrides `Listbox.setDefaultSelectedOption` + */ + setDefaultSelectedOption() { + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el2) => el2.getAttribute("selected") !== null || el2.selected); + this.selectedIndex = selectedIndex; + if (!this.dirtyValue && this.firstSelectedOption) { + this.value = this.firstSelectedOption.text; + } + this.setSelectedOptions(); + } + } + /** + * Focus and set the content of the control based on the first selected option. + * + * @internal + */ + setInputToSelection() { + if (this.firstSelectedOption) { + this.control.value = this.firstSelectedOption.text; + this.control.focus(); + } + } + /** + * Focus, set and select the content of the control based on the first selected option. + * + * @internal + */ + setInlineSelection() { + if (this.firstSelectedOption) { + this.setInputToSelection(); + this.control.setSelectionRange(this.filter.length, this.control.value.length, "backward"); + } + } + /** + * Determines if a value update should involve emitting a change event, then updates the value. + * + * @internal + */ + syncValue() { + var _a; + const newValue = this.selectedIndex > -1 ? (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text : this.control.value; + this.updateValue(this.value !== newValue); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @param force - direction to force the listbox to display + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * Ensure that the entire list of options is used when setting the selected property. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + * @remarks + * Overrides: `Listbox.selectedOptionsChanged` + */ + selectedOptionsChanged(prev, next) { + if (this.$fastController.isConnected) { + this._options.forEach((o) => { + o.selected = next.includes(o); + }); + } + } + /** + * Synchronize the form-associated proxy and update the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + super.slottedOptionsChanged(prev, next); + this.updateValue(); + } + /** + * Sets the value and to match the first selected option. + * + * @param shouldEmit - if true, the change event will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a; + if (this.$fastController.isConnected) { + this.value = ((_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) || this.control.value; + this.control.value = this.value; + } + if (shouldEmit) { + this.$emit("change"); + } + } + /** + * @internal + */ + clearSelectionRange() { + const controlValueLength = this.control.value.length; + this.control.setSelectionRange(controlValueLength, controlValueLength); + } + }; + __decorate([ + attr({ attribute: "autocomplete", mode: "fromView" }) + ], Combobox.prototype, "autocomplete", void 0); + __decorate([ + observable + ], Combobox.prototype, "maxHeight", void 0); + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Combobox.prototype, "open", void 0); + __decorate([ + attr + ], Combobox.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Combobox.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Combobox.prototype, "position", void 0); + DelegatesARIACombobox = class { + }; + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaAutoComplete", void 0); + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIACombobox, DelegatesARIAListbox); + applyMixins(Combobox, StartEnd, DelegatesARIACombobox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js + var init_combobox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js + var init_combobox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js"() { + init_combobox(); + init_combobox_options(); + init_combobox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js + function composedParent(element) { + const parentNode = element.parentElement; + if (parentNode) { + return parentNode; + } else { + const rootNode = element.getRootNode(); + if (rootNode.host instanceof HTMLElement) { + return rootNode.host; + } + } + return null; + } + var init_composed_parent = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js + function composedContains(reference, test) { + let current = test; + while (current !== null) { + if (current === reference) { + return true; + } + current = composedParent(current); + } + return false; + } + var init_composed_contains = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js"() { + init_composed_parent(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js + function isFastElement(element) { + return element instanceof FASTElement; + } + var defaultElement, QueuedStyleSheetTarget, ConstructableStyleSheetTarget, DocumentStyleSheetTarget, HeadStyleElementStyleSheetTarget, StyleElementStyleSheetTarget, ElementStyleSheetTarget, RootStyleSheetTarget, propertyTargetCache, propertyTargetCtor, PropertyTargetManager; + var init_custom_property_manager = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js"() { + init_tslib_es6(); + init_esm(); + defaultElement = document.createElement("div"); + QueuedStyleSheetTarget = class { + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + ConstructableStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor(source) { + super(); + const sheet = new CSSStyleSheet(); + sheet[prependToAdoptedStyleSheetsSymbol] = true; + this.target = sheet.cssRules[sheet.insertRule(":host{}")].style; + source.$fastController.addStyles(ElementStyles.create([sheet])); + } + }; + DocumentStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + const sheet = new CSSStyleSheet(); + this.target = sheet.cssRules[sheet.insertRule(":root{}")].style; + document.adoptedStyleSheets = [ + ...document.adoptedStyleSheets, + sheet + ]; + } + }; + HeadStyleElementStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + this.style = document.createElement("style"); + document.head.appendChild(this.style); + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":root{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } + } + }; + StyleElementStyleSheetTarget = class { + constructor(target) { + this.store = /* @__PURE__ */ new Map(); + this.target = null; + const controller = target.$fastController; + this.style = document.createElement("style"); + controller.addStyles(this.style); + Observable.getNotifier(controller).subscribe(this, "isConnected"); + this.handleChange(controller, "isConnected"); + } + targetChanged() { + if (this.target !== null) { + for (const [key, value] of this.store.entries()) { + this.target.setProperty(key, value); + } + } + } + setProperty(name, value) { + this.store.set(name, value); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.setProperty(name, value); + } + }); + } + removeProperty(name) { + this.store.delete(name); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.removeProperty(name); + } + }); + } + handleChange(source, key) { + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":host{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } else { + this.target = null; + } + } + }; + __decorate([ + observable + ], StyleElementStyleSheetTarget.prototype, "target", void 0); + ElementStyleSheetTarget = class { + constructor(source) { + this.target = source.style; + } + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + RootStyleSheetTarget = class _RootStyleSheetTarget { + setProperty(name, value) { + _RootStyleSheetTarget.properties[name] = value; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).setProperty(name, value); + } + } + removeProperty(name) { + delete _RootStyleSheetTarget.properties[name]; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).removeProperty(name); + } + } + static registerRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (!roots.has(root)) { + roots.add(root); + const target = PropertyTargetManager.getOrCreate(this.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.setProperty(key, _RootStyleSheetTarget.properties[key]); + } + } + } + static unregisterRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (roots.has(root)) { + roots.delete(root); + const target = PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.removeProperty(key); + } + } + } + /** + * Returns the document when provided the default element, + * otherwise is a no-op + * @param root - the root to normalize + */ + static normalizeRoot(root) { + return root === defaultElement ? document : root; + } + }; + RootStyleSheetTarget.roots = /* @__PURE__ */ new Set(); + RootStyleSheetTarget.properties = {}; + propertyTargetCache = /* @__PURE__ */ new WeakMap(); + propertyTargetCtor = DOM.supportsAdoptedStyleSheets ? ConstructableStyleSheetTarget : StyleElementStyleSheetTarget; + PropertyTargetManager = Object.freeze({ + getOrCreate(source) { + if (propertyTargetCache.has(source)) { + return propertyTargetCache.get(source); + } + let target; + if (source === defaultElement) { + target = new RootStyleSheetTarget(); + } else if (source instanceof Document) { + target = DOM.supportsAdoptedStyleSheets ? new DocumentStyleSheetTarget() : new HeadStyleElementStyleSheetTarget(); + } else if (isFastElement(source)) { + target = new propertyTargetCtor(source); + } else { + target = new ElementStyleSheetTarget(source); + } + propertyTargetCache.set(source, target); + return target; + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js + function create(nameOrConfig) { + return DesignTokenImpl.from(nameOrConfig); + } + var DesignTokenImpl, CustomPropertyReflector, DesignTokenBindingObserver, Store, nodeCache, childToParent, DesignTokenNode, DesignToken; + var init_design_token = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js"() { + init_tslib_es6(); + init_esm(); + init_composed_parent(); + init_composed_contains(); + init_custom_property_manager(); + init_custom_property_manager(); + DesignTokenImpl = class _DesignTokenImpl extends CSSDirective { + constructor(configuration) { + super(); + this.subscribers = /* @__PURE__ */ new WeakMap(); + this._appliedTo = /* @__PURE__ */ new Set(); + this.name = configuration.name; + if (configuration.cssCustomPropertyName !== null) { + this.cssCustomProperty = `--${configuration.cssCustomPropertyName}`; + this.cssVar = `var(${this.cssCustomProperty})`; + } + this.id = _DesignTokenImpl.uniqueId(); + _DesignTokenImpl.tokensById.set(this.id, this); + } + get appliedTo() { + return [...this._appliedTo]; + } + static from(nameOrConfig) { + return new _DesignTokenImpl({ + name: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.name, + cssCustomPropertyName: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.cssCustomPropertyName === void 0 ? nameOrConfig.name : nameOrConfig.cssCustomPropertyName + }); + } + static isCSSDesignToken(token) { + return typeof token.cssCustomProperty === "string"; + } + static isDerivedDesignTokenValue(value) { + return typeof value === "function"; + } + /** + * Gets a token by ID. Returns undefined if the token was not found. + * @param id - The ID of the token + * @returns + */ + static getTokenById(id) { + return _DesignTokenImpl.tokensById.get(id); + } + getOrCreateSubscriberSet(target = this) { + return this.subscribers.get(target) || this.subscribers.set(target, /* @__PURE__ */ new Set()) && this.subscribers.get(target); + } + createCSS() { + return this.cssVar || ""; + } + getValueFor(element) { + const value = DesignTokenNode.getOrCreate(element).get(this); + if (value !== void 0) { + return value; + } + throw new Error(`Value could not be retrieved for token named "${this.name}". Ensure the value is set for ${element} or an ancestor of ${element}.`); + } + setValueFor(element, value) { + this._appliedTo.add(element); + if (value instanceof _DesignTokenImpl) { + value = this.alias(value); + } + DesignTokenNode.getOrCreate(element).set(this, value); + return this; + } + deleteValueFor(element) { + this._appliedTo.delete(element); + if (DesignTokenNode.existsFor(element)) { + DesignTokenNode.getOrCreate(element).delete(this); + } + return this; + } + withDefault(value) { + this.setValueFor(defaultElement, value); + return this; + } + subscribe(subscriber, target) { + const subscriberSet = this.getOrCreateSubscriberSet(target); + if (target && !DesignTokenNode.existsFor(target)) { + DesignTokenNode.getOrCreate(target); + } + if (!subscriberSet.has(subscriber)) { + subscriberSet.add(subscriber); + } + } + unsubscribe(subscriber, target) { + const list = this.subscribers.get(target || this); + if (list && list.has(subscriber)) { + list.delete(subscriber); + } + } + /** + * Notifies subscribers that the value for an element has changed. + * @param element - The element to emit a notification for + */ + notify(element) { + const record = Object.freeze({ token: this, target: element }); + if (this.subscribers.has(this)) { + this.subscribers.get(this).forEach((sub) => sub.handleChange(record)); + } + if (this.subscribers.has(element)) { + this.subscribers.get(element).forEach((sub) => sub.handleChange(record)); + } + } + /** + * Alias the token to the provided token. + * @param token - the token to alias to + */ + alias(token) { + return ((target) => token.getValueFor(target)); + } + }; + DesignTokenImpl.uniqueId = /* @__PURE__ */ (() => { + let id = 0; + return () => { + id++; + return id.toString(16); + }; + })(); + DesignTokenImpl.tokensById = /* @__PURE__ */ new Map(); + CustomPropertyReflector = class { + startReflection(token, target) { + token.subscribe(this, target); + this.handleChange({ token, target }); + } + stopReflection(token, target) { + token.unsubscribe(this, target); + this.remove(token, target); + } + handleChange(record) { + const { token, target } = record; + this.add(token, target); + } + add(token, target) { + PropertyTargetManager.getOrCreate(target).setProperty(token.cssCustomProperty, this.resolveCSSValue(DesignTokenNode.getOrCreate(target).get(token))); + } + remove(token, target) { + PropertyTargetManager.getOrCreate(target).removeProperty(token.cssCustomProperty); + } + resolveCSSValue(value) { + return value && typeof value.createCSS === "function" ? value.createCSS() : value; + } + }; + DesignTokenBindingObserver = class { + constructor(source, token, node) { + this.source = source; + this.token = token; + this.node = node; + this.dependencies = /* @__PURE__ */ new Set(); + this.observer = Observable.binding(source, this, false); + this.observer.handleChange = this.observer.call; + this.handleChange(); + } + disconnect() { + this.observer.disconnect(); + } + /** + * @internal + */ + handleChange() { + try { + this.node.store.set(this.token, this.observer.observe(this.node.target, defaultExecutionContext)); + } catch (e) { + console.error(e); + } + } + }; + Store = class { + constructor() { + this.values = /* @__PURE__ */ new Map(); + } + set(token, value) { + if (this.values.get(token) !== value) { + this.values.set(token, value); + Observable.getNotifier(this).notify(token.id); + } + } + get(token) { + Observable.track(this, token.id); + return this.values.get(token); + } + delete(token) { + this.values.delete(token); + Observable.getNotifier(this).notify(token.id); + } + all() { + return this.values.entries(); + } + }; + nodeCache = /* @__PURE__ */ new WeakMap(); + childToParent = /* @__PURE__ */ new WeakMap(); + DesignTokenNode = class _DesignTokenNode { + constructor(target) { + this.target = target; + this.store = new Store(); + this.children = []; + this.assignedValues = /* @__PURE__ */ new Map(); + this.reflecting = /* @__PURE__ */ new Set(); + this.bindingObservers = /* @__PURE__ */ new Map(); + this.tokenValueChangeHandler = { + handleChange: (source, arg) => { + const token = DesignTokenImpl.getTokenById(arg); + if (token) { + token.notify(this.target); + this.updateCSSTokenReflection(source, token); + } + } + }; + nodeCache.set(target, this); + Observable.getNotifier(this.store).subscribe(this.tokenValueChangeHandler); + if (target instanceof FASTElement) { + target.$fastController.addBehaviors([this]); + } else if (target.isConnected) { + this.bind(); + } + } + /** + * Returns a DesignTokenNode for an element. + * Creates a new instance if one does not already exist for a node, + * otherwise returns the cached instance + * + * @param target - The HTML element to retrieve a DesignTokenNode for + */ + static getOrCreate(target) { + return nodeCache.get(target) || new _DesignTokenNode(target); + } + /** + * Determines if a DesignTokenNode has been created for a target + * @param target - The element to test + */ + static existsFor(target) { + return nodeCache.has(target); + } + /** + * Searches for and return the nearest parent DesignTokenNode. + * Null is returned if no node is found or the node provided is for a default element. + */ + static findParent(node) { + if (!(defaultElement === node.target)) { + let parent = composedParent(node.target); + while (parent !== null) { + if (nodeCache.has(parent)) { + return nodeCache.get(parent); + } + parent = composedParent(parent); + } + return _DesignTokenNode.getOrCreate(defaultElement); + } + return null; + } + /** + * Finds the closest node with a value explicitly assigned for a token, otherwise null. + * @param token - The token to look for + * @param start - The node to start looking for value assignment + * @returns + */ + static findClosestAssignedNode(token, start) { + let current = start; + do { + if (current.has(token)) { + return current; + } + current = current.parent ? current.parent : current.target !== defaultElement ? _DesignTokenNode.getOrCreate(defaultElement) : null; + } while (current !== null); + return null; + } + /** + * The parent DesignTokenNode, or null. + */ + get parent() { + return childToParent.get(this) || null; + } + updateCSSTokenReflection(source, token) { + if (DesignTokenImpl.isCSSDesignToken(token)) { + const parent = this.parent; + const reflecting = this.isReflecting(token); + if (parent) { + const parentValue = parent.get(token); + const sourceValue = source.get(token); + if (parentValue !== sourceValue && !reflecting) { + this.reflectToCSS(token); + } else if (parentValue === sourceValue && reflecting) { + this.stopReflectToCSS(token); + } + } else if (!reflecting) { + this.reflectToCSS(token); + } + } + } + /** + * Checks if a token has been assigned an explicit value the node. + * @param token - the token to check. + */ + has(token) { + return this.assignedValues.has(token); + } + /** + * Gets the value of a token for a node + * @param token - The token to retrieve the value for + * @returns + */ + get(token) { + const value = this.store.get(token); + if (value !== void 0) { + return value; + } + const raw = this.getRaw(token); + if (raw !== void 0) { + this.hydrate(token, raw); + return this.get(token); + } + } + /** + * Retrieves the raw assigned value of a token from the nearest assigned node. + * @param token - The token to retrieve a raw value for + * @returns + */ + getRaw(token) { + var _a; + if (this.assignedValues.has(token)) { + return this.assignedValues.get(token); + } + return (_a = _DesignTokenNode.findClosestAssignedNode(token, this)) === null || _a === void 0 ? void 0 : _a.getRaw(token); + } + /** + * Sets a token to a value for a node + * @param token - The token to set + * @param value - The value to set the token to + */ + set(token, value) { + if (DesignTokenImpl.isDerivedDesignTokenValue(this.assignedValues.get(token))) { + this.tearDownBindingObserver(token); + } + this.assignedValues.set(token, value); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + this.setupBindingObserver(token, value); + } else { + this.store.set(token, value); + } + } + /** + * Deletes a token value for the node. + * @param token - The token to delete the value for + */ + delete(token) { + this.assignedValues.delete(token); + this.tearDownBindingObserver(token); + const upstream = this.getRaw(token); + if (upstream) { + this.hydrate(token, upstream); + } else { + this.store.delete(token); + } + } + /** + * Invoked when the DesignTokenNode.target is attached to the document + */ + bind() { + const parent = _DesignTokenNode.findParent(this); + if (parent) { + parent.appendChild(this); + } + for (const key of this.assignedValues.keys()) { + key.notify(this.target); + } + } + /** + * Invoked when the DesignTokenNode.target is detached from the document + */ + unbind() { + if (this.parent) { + const parent = childToParent.get(this); + parent.removeChild(this); + } + for (const token of this.bindingObservers.keys()) { + this.tearDownBindingObserver(token); + } + } + /** + * Appends a child to a parent DesignTokenNode. + * @param child - The child to append to the node + */ + appendChild(child) { + if (child.parent) { + childToParent.get(child).removeChild(child); + } + const reParent = this.children.filter((x) => child.contains(x)); + childToParent.set(child, this); + this.children.push(child); + reParent.forEach((x) => child.appendChild(x)); + Observable.getNotifier(this.store).subscribe(child); + for (const [token, value] of this.store.all()) { + child.hydrate(token, this.bindingObservers.has(token) ? this.getRaw(token) : value); + child.updateCSSTokenReflection(child.store, token); + } + } + /** + * Removes a child from a node. + * @param child - The child to remove. + */ + removeChild(child) { + const childIndex = this.children.indexOf(child); + if (childIndex !== -1) { + this.children.splice(childIndex, 1); + } + Observable.getNotifier(this.store).unsubscribe(child); + if (child.parent !== this) { + return false; + } + const deleted = childToParent.delete(child); + for (const [token] of this.store.all()) { + child.hydrate(token, child.getRaw(token)); + child.updateCSSTokenReflection(child.store, token); + } + return deleted; + } + /** + * Tests whether a provided node is contained by + * the calling node. + * @param test - The node to test + */ + contains(test) { + return composedContains(this.target, test.target); + } + /** + * Instructs the node to reflect a design token for the provided token. + * @param token - The design token to reflect + */ + reflectToCSS(token) { + if (!this.isReflecting(token)) { + this.reflecting.add(token); + _DesignTokenNode.cssCustomPropertyReflector.startReflection(token, this.target); + } + } + /** + * Stops reflecting a DesignToken to CSS + * @param token - The design token to stop reflecting + */ + stopReflectToCSS(token) { + if (this.isReflecting(token)) { + this.reflecting.delete(token); + _DesignTokenNode.cssCustomPropertyReflector.stopReflection(token, this.target); + } + } + /** + * Determines if a token is being reflected to CSS for a node. + * @param token - The token to check for reflection + * @returns + */ + isReflecting(token) { + return this.reflecting.has(token); + } + /** + * Handle changes to upstream tokens + * @param source - The parent DesignTokenNode + * @param property - The token ID that changed + */ + handleChange(source, property) { + const token = DesignTokenImpl.getTokenById(property); + if (!token) { + return; + } + this.hydrate(token, this.getRaw(token)); + this.updateCSSTokenReflection(this.store, token); + } + /** + * Hydrates a token with a DesignTokenValue, making retrieval available. + * @param token - The token to hydrate + * @param value - The value to hydrate + */ + hydrate(token, value) { + if (!this.has(token)) { + const observer = this.bindingObservers.get(token); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + if (observer) { + if (observer.source !== value) { + this.tearDownBindingObserver(token); + this.setupBindingObserver(token, value); + } + } else { + this.setupBindingObserver(token, value); + } + } else { + if (observer) { + this.tearDownBindingObserver(token); + } + this.store.set(token, value); + } + } + } + /** + * Sets up a binding observer for a derived token value that notifies token + * subscribers on change. + * + * @param token - The token to notify when the binding updates + * @param source - The binding source + */ + setupBindingObserver(token, source) { + const binding = new DesignTokenBindingObserver(source, token, this); + this.bindingObservers.set(token, binding); + return binding; + } + /** + * Tear down a binding observer for a token. + */ + tearDownBindingObserver(token) { + if (this.bindingObservers.has(token)) { + this.bindingObservers.get(token).disconnect(); + this.bindingObservers.delete(token); + return true; + } + return false; + } + }; + DesignTokenNode.cssCustomPropertyReflector = new CustomPropertyReflector(); + __decorate([ + observable + ], DesignTokenNode.prototype, "children", void 0); + DesignToken = Object.freeze({ + create, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been connected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * 3. The HTMLElement is not connected to the document when token values are set. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyConnection(element) { + if (!element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).bind(); + return true; + }, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been disconnected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyDisconnection(element) { + if (element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).unbind(); + return true; + }, + /** + * Registers and element or document as a DesignToken root. + * {@link CSSDesignToken | CSSDesignTokens} with default values assigned via + * {@link (DesignToken:interface).withDefault} will emit CSS custom properties to all + * registered roots. + * @param target - The root to register + */ + registerRoot(target = defaultElement) { + RootStyleSheetTarget.registerRoot(target); + }, + /** + * Unregister an element or document as a DesignToken root. + * @param target - The root to deregister + */ + unregisterRoot(target = defaultElement) { + RootStyleSheetTarget.unregisterRoot(target); + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js + function extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback) { + if (typeof params === "string") { + return { + name: params, + type: elementDefinitionType, + callback: elementDefinitionCallback + }; + } else { + return params; + } + } + var ElementDisambiguation, elementTypesByTag, elementTagsByType, rootDesignSystem, designSystemKey, DesignSystem, DefaultDesignSystem, ElementDefinitionEntry; + var init_design_system = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js"() { + init_esm(); + init_foundation_element(); + init_di(); + init_design_token(); + init_component_presentation(); + ElementDisambiguation = Object.freeze({ + /** + * Skip defining the element but still call the provided callback passed + * to DesignSystemRegistrationContext.tryDefineElement + */ + definitionCallbackOnly: null, + /** + * Ignore the duplicate element entirely. + */ + ignoreDuplicate: /* @__PURE__ */ Symbol() + }); + elementTypesByTag = /* @__PURE__ */ new Map(); + elementTagsByType = /* @__PURE__ */ new Map(); + rootDesignSystem = null; + designSystemKey = DI.createInterface((x) => x.cachedCallback((handler) => { + if (rootDesignSystem === null) { + rootDesignSystem = new DefaultDesignSystem(null, handler); + } + return rootDesignSystem; + })); + DesignSystem = Object.freeze({ + /** + * Returns the HTML element name that the type is defined as. + * @param type - The type to lookup. + * @public + */ + tagFor(type) { + return elementTagsByType.get(type); + }, + /** + * Searches the DOM hierarchy for the design system that is responsible + * for the provided element. + * @param element - The element to locate the design system for. + * @returns The located design system. + * @public + */ + responsibleFor(element) { + const owned = element.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.findResponsibleContainer(element); + return container.get(designSystemKey); + }, + /** + * Gets the DesignSystem if one is explicitly defined on the provided element; + * otherwise creates a design system defined directly on the element. + * @param element - The element to get or create a design system for. + * @returns The design system. + * @public + */ + getOrCreate(node) { + if (!node) { + if (rootDesignSystem === null) { + rootDesignSystem = DI.getOrCreateDOMContainer().get(designSystemKey); + } + return rootDesignSystem; + } + const owned = node.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.getOrCreateDOMContainer(node); + if (container.has(designSystemKey, false)) { + return container.get(designSystemKey); + } else { + const system = new DefaultDesignSystem(node, container); + container.register(Registration.instance(designSystemKey, system)); + return system; + } + } + }); + DefaultDesignSystem = class { + constructor(owner, container) { + this.owner = owner; + this.container = container; + this.designTokensInitialized = false; + this.prefix = "fast"; + this.shadowRootMode = void 0; + this.disambiguate = () => ElementDisambiguation.definitionCallbackOnly; + if (owner !== null) { + owner.$$designSystem$$ = this; + } + } + withPrefix(prefix) { + this.prefix = prefix; + return this; + } + withShadowRootMode(mode) { + this.shadowRootMode = mode; + return this; + } + withElementDisambiguation(callback) { + this.disambiguate = callback; + return this; + } + withDesignTokenRoot(root) { + this.designTokenRoot = root; + return this; + } + register(...registrations) { + const container = this.container; + const elementDefinitionEntries = []; + const disambiguate = this.disambiguate; + const shadowRootMode = this.shadowRootMode; + const context = { + elementPrefix: this.prefix, + tryDefineElement(params, elementDefinitionType, elementDefinitionCallback) { + const extractedParams = extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback); + const { name, callback, baseClass } = extractedParams; + let { type } = extractedParams; + let elementName = name; + let typeFoundByName = elementTypesByTag.get(elementName); + let needsDefine = true; + while (typeFoundByName) { + const result = disambiguate(elementName, type, typeFoundByName); + switch (result) { + case ElementDisambiguation.ignoreDuplicate: + return; + case ElementDisambiguation.definitionCallbackOnly: + needsDefine = false; + typeFoundByName = void 0; + break; + default: + elementName = result; + typeFoundByName = elementTypesByTag.get(elementName); + break; + } + } + if (needsDefine) { + if (elementTagsByType.has(type) || type === FoundationElement) { + type = class extends type { + }; + } + elementTypesByTag.set(elementName, type); + elementTagsByType.set(type, elementName); + if (baseClass) { + elementTagsByType.set(baseClass, elementName); + } + } + elementDefinitionEntries.push(new ElementDefinitionEntry(container, elementName, type, shadowRootMode, callback, needsDefine)); + } + }; + if (!this.designTokensInitialized) { + this.designTokensInitialized = true; + if (this.designTokenRoot !== null) { + DesignToken.registerRoot(this.designTokenRoot); + } + } + container.registerWithContext(context, ...registrations); + for (const entry of elementDefinitionEntries) { + entry.callback(entry); + if (entry.willDefine && entry.definition !== null) { + entry.definition.define(); + } + } + return this; + } + }; + ElementDefinitionEntry = class { + constructor(container, name, type, shadowRootMode, callback, willDefine) { + this.container = container; + this.name = name; + this.type = type; + this.shadowRootMode = shadowRootMode; + this.callback = callback; + this.willDefine = willDefine; + this.definition = null; + } + definePresentation(presentation) { + ComponentPresentation.define(this.name, presentation, this.container); + } + defineElement(definition) { + this.definition = new FASTElementDefinition(this.type, Object.assign(Object.assign({}, definition), { name: this.name })); + } + tagFor(type) { + return DesignSystem.tagFor(type); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js + var init_registration_context = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js + var init_design_system2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js"() { + init_design_system(); + init_component_presentation(); + init_registration_context(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/index.js + var init_di2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/index.js"() { + init_di(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js + var init_dialog_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js"() { + } + }); + + // node_modules/tabbable/dist/index.esm.js + var candidateSelectors, candidateSelector, NoElement, matches, getRootNode, getTabindex, isInput, isHiddenInput, isDetailsWithSummary, getCheckedRadio, isTabbableRadio, isRadio, isNonTabbableRadio, isZeroArea, isHidden, isDisabledFromFieldset, isNodeMatchingSelectorFocusable, isNodeMatchingSelectorTabbable, isTabbable, focusableCandidateSelector, isFocusable; + var init_index_esm = __esm({ + "node_modules/tabbable/dist/index.esm.js"() { + candidateSelectors = ["input", "select", "textarea", "a[href]", "button", "[tabindex]:not(slot)", "audio[controls]", "video[controls]", '[contenteditable]:not([contenteditable="false"])', "details>summary:first-of-type", "details"]; + candidateSelector = /* @__PURE__ */ candidateSelectors.join(","); + NoElement = typeof Element === "undefined"; + matches = NoElement ? function() { + } : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; + getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) { + return element.getRootNode(); + } : function(element) { + return element.ownerDocument; + }; + getTabindex = function getTabindex2(node, isScope) { + if (node.tabIndex < 0) { + if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute("tabindex"), 10))) { + return 0; + } + } + return node.tabIndex; + }; + isInput = function isInput2(node) { + return node.tagName === "INPUT"; + }; + isHiddenInput = function isHiddenInput2(node) { + return isInput(node) && node.type === "hidden"; + }; + isDetailsWithSummary = function isDetailsWithSummary2(node) { + var r = node.tagName === "DETAILS" && Array.prototype.slice.apply(node.children).some(function(child) { + return child.tagName === "SUMMARY"; + }); + return r; + }; + getCheckedRadio = function getCheckedRadio2(nodes, form) { + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].checked && nodes[i].form === form) { + return nodes[i]; + } + } + }; + isTabbableRadio = function isTabbableRadio2(node) { + if (!node.name) { + return true; + } + var radioScope = node.form || getRootNode(node); + var queryRadios = function queryRadios2(name) { + return radioScope.querySelectorAll('input[type="radio"][name="' + name + '"]'); + }; + var radioSet; + if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && typeof window.CSS.escape === "function") { + radioSet = queryRadios(window.CSS.escape(node.name)); + } else { + try { + radioSet = queryRadios(node.name); + } catch (err) { + console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", err.message); + return false; + } + } + var checked = getCheckedRadio(radioSet, node.form); + return !checked || checked === node; + }; + isRadio = function isRadio2(node) { + return isInput(node) && node.type === "radio"; + }; + isNonTabbableRadio = function isNonTabbableRadio2(node) { + return isRadio(node) && !isTabbableRadio(node); + }; + isZeroArea = function isZeroArea2(node) { + var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height; + return width === 0 && height === 0; + }; + isHidden = function isHidden2(node, _ref) { + var displayCheck = _ref.displayCheck, getShadowRoot2 = _ref.getShadowRoot; + if (getComputedStyle(node).visibility === "hidden") { + return true; + } + var isDirectSummary = matches.call(node, "details>summary:first-of-type"); + var nodeUnderDetails = isDirectSummary ? node.parentElement : node; + if (matches.call(nodeUnderDetails, "details:not([open]) *")) { + return true; + } + var nodeRootHost = getRootNode(node).host; + var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node); + if (!displayCheck || displayCheck === "full") { + if (typeof getShadowRoot2 === "function") { + var originalNode = node; + while (node) { + var parentElement = node.parentElement; + var rootNode = getRootNode(node); + if (parentElement && !parentElement.shadowRoot && getShadowRoot2(parentElement) === true) { + return isZeroArea(node); + } else if (node.assignedSlot) { + node = node.assignedSlot; + } else if (!parentElement && rootNode !== node.ownerDocument) { + node = rootNode.host; + } else { + node = parentElement; + } + } + node = originalNode; + } + if (nodeIsAttached) { + return !node.getClientRects().length; + } + } else if (displayCheck === "non-zero-area") { + return isZeroArea(node); + } + return false; + }; + isDisabledFromFieldset = function isDisabledFromFieldset2(node) { + if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) { + var parentNode = node.parentElement; + while (parentNode) { + if (parentNode.tagName === "FIELDSET" && parentNode.disabled) { + for (var i = 0; i < parentNode.children.length; i++) { + var child = parentNode.children.item(i); + if (child.tagName === "LEGEND") { + return matches.call(parentNode, "fieldset[disabled] *") ? true : !child.contains(node); + } + } + return true; + } + parentNode = parentNode.parentElement; + } + } + return false; + }; + isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) { + if (node.disabled || isHiddenInput(node) || isHidden(node, options) || // For a details element with a summary, the summary element gets the focus + isDetailsWithSummary(node) || isDisabledFromFieldset(node)) { + return false; + } + return true; + }; + isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) { + if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) { + return false; + } + return true; + }; + isTabbable = function isTabbable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, candidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorTabbable(options, node); + }; + focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat("iframe").join(","); + isFocusable = function isFocusable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, focusableCandidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorFocusable(options, node); + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js + var Dialog; + var init_dialog = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + Dialog = class _Dialog extends FoundationElement { + constructor() { + super(...arguments); + this.modal = true; + this.hidden = false; + this.trapFocus = true; + this.trapFocusChanged = () => { + if (this.$fastController.isConnected) { + this.updateTrapFocus(); + } + }; + this.isTrappingFocus = false; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && !this.hidden) { + switch (e.key) { + case keyEscape: + this.dismiss(); + e.preventDefault(); + break; + case keyTab: + this.handleTabKeyDown(e); + break; + } + } + }; + this.handleDocumentFocus = (e) => { + if (!e.defaultPrevented && this.shouldForceFocus(e.target)) { + this.focusFirstElement(); + e.preventDefault(); + } + }; + this.handleTabKeyDown = (e) => { + if (!this.trapFocus || this.hidden) { + return; + } + const bounds = this.getTabQueueBounds(); + if (bounds.length === 0) { + return; + } + if (bounds.length === 1) { + bounds[0].focus(); + e.preventDefault(); + return; + } + if (e.shiftKey && e.target === bounds[0]) { + bounds[bounds.length - 1].focus(); + e.preventDefault(); + } else if (!e.shiftKey && e.target === bounds[bounds.length - 1]) { + bounds[0].focus(); + e.preventDefault(); + } + return; + }; + this.getTabQueueBounds = () => { + const bounds = []; + return _Dialog.reduceTabbableItems(bounds, this); + }; + this.focusFirstElement = () => { + const bounds = this.getTabQueueBounds(); + if (bounds.length > 0) { + bounds[0].focus(); + } else { + if (this.dialog instanceof HTMLElement) { + this.dialog.focus(); + } + } + }; + this.shouldForceFocus = (currentFocusElement) => { + return this.isTrappingFocus && !this.contains(currentFocusElement); + }; + this.shouldTrapFocus = () => { + return this.trapFocus && !this.hidden; + }; + this.updateTrapFocus = (shouldTrapFocusOverride) => { + const shouldTrapFocus = shouldTrapFocusOverride === void 0 ? this.shouldTrapFocus() : shouldTrapFocusOverride; + if (shouldTrapFocus && !this.isTrappingFocus) { + this.isTrappingFocus = true; + document.addEventListener("focusin", this.handleDocumentFocus); + DOM.queueUpdate(() => { + if (this.shouldForceFocus(document.activeElement)) { + this.focusFirstElement(); + } + }); + } else if (!shouldTrapFocus && this.isTrappingFocus) { + this.isTrappingFocus = false; + document.removeEventListener("focusin", this.handleDocumentFocus); + } + }; + } + /** + * @internal + */ + dismiss() { + this.$emit("dismiss"); + this.$emit("cancel"); + } + /** + * The method to show the dialog. + * + * @public + */ + show() { + this.hidden = false; + } + /** + * The method to hide the dialog. + * + * @public + */ + hide() { + this.hidden = true; + this.$emit("close"); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + document.addEventListener("keydown", this.handleDocumentKeydown); + this.notifier = Observable.getNotifier(this); + this.notifier.subscribe(this, "hidden"); + this.updateTrapFocus(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.updateTrapFocus(false); + this.notifier.unsubscribe(this, "hidden"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "hidden": + this.updateTrapFocus(); + break; + default: + break; + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceTabbableItems(elements2, element) { + if (element.getAttribute("tabindex") === "-1") { + return elements2; + } + if (isTabbable(element) || _Dialog.isFocusableFastElement(element) && _Dialog.hasTabbableShadow(element)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Dialog.reduceTabbableItems, [])); + } + return elements2; + } + /** + * Test if element is focusable fast element + * + * @param element - The element to check + * + * @internal + */ + static isFocusableFastElement(element) { + var _a, _b; + return !!((_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus); + } + /** + * Test if the element has a focusable shadow + * + * @param element - The element to check + * + * @internal + */ + static hasTabbableShadow(element) { + var _a, _b; + return Array.from((_b = (_a = element.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll("*")) !== null && _b !== void 0 ? _b : []).some((x) => { + return isTabbable(x); + }); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "modal", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "hidden", void 0); + __decorate([ + attr({ attribute: "trap-focus", mode: "boolean" }) + ], Dialog.prototype, "trapFocus", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], Dialog.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], Dialog.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], Dialog.prototype, "ariaLabel", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js + var init_dialog2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js"() { + init_dialog_template(); + init_dialog(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js + var init_disclosure_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js + var Disclosure; + var init_disclosure = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Disclosure = class extends FoundationElement { + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.setup(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.details.removeEventListener("toggle", this.onToggle); + } + /** + * Show extra content. + */ + show() { + this.details.open = true; + } + /** + * Hide extra content. + */ + hide() { + this.details.open = false; + } + /** + * Toggle the current(expanded/collapsed) state. + */ + toggle() { + this.details.open = !this.details.open; + } + /** + * Register listener and set default disclosure mode + */ + setup() { + this.onToggle = this.onToggle.bind(this); + this.details.addEventListener("toggle", this.onToggle); + if (this.expanded) { + this.show(); + } + } + /** + * Update the aria attr and fire `toggle` event + */ + onToggle() { + this.expanded = this.details.open; + this.$emit("toggle"); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Disclosure.prototype, "expanded", void 0); + __decorate([ + attr + ], Disclosure.prototype, "title", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js + var init_disclosure2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js"() { + init_disclosure_template(); + init_disclosure(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js + var dividerTemplate; + var init_divider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js"() { + init_esm(); + dividerTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js + var DividerRole; + var init_divider_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js"() { + DividerRole = { + /** + * The divider semantically separates content + */ + separator: "separator", + /** + * The divider has no semantic value and is for visual presentation only. + */ + presentation: "presentation" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js + var Divider; + var init_divider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_divider_options(); + Divider = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = DividerRole.separator; + this.orientation = Orientation.horizontal; + } + }; + __decorate([ + attr + ], Divider.prototype, "role", void 0); + __decorate([ + attr + ], Divider.prototype, "orientation", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js + var init_divider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js"() { + init_divider_template(); + init_divider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js + var FlipperDirection; + var init_flipper_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js"() { + FlipperDirection = { + next: "next", + previous: "previous" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js + var init_flipper_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js + var Flipper; + var init_flipper = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_flipper_options(); + Flipper = class extends FoundationElement { + constructor() { + super(...arguments); + this.hiddenFromAT = true; + this.direction = FlipperDirection.next; + } + /** + * Simulate a click event when the flipper has focus and the user hits enter or space keys + * Blur focus if the user hits escape key + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + if (!this.hiddenFromAT) { + const key = e.key; + if (key === "Enter" || key === "Space") { + this.$emit("click", e); + } + if (key === "Escape") { + this.blur(); + } + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Flipper.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "aria-hidden", converter: booleanConverter }) + ], Flipper.prototype, "hiddenFromAT", void 0); + __decorate([ + attr + ], Flipper.prototype, "direction", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js + var init_flipper2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js"() { + init_flipper_template(); + init_flipper(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js + var init_form_associated2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js"() { + init_form_associated(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js + var init_foundation_element2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js"() { + init_foundation_element(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js + var listboxOptionTemplate; + var init_listbox_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js"() { + init_esm(); + init_start_end(); + listboxOptionTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js + var init_listbox_option2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js"() { + init_listbox_option(); + init_listbox_option_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js + var ListboxElement; + var init_listbox_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + ListboxElement = class extends Listbox { + constructor() { + super(...arguments); + this.activeIndex = -1; + this.rangeStartIndex = -1; + } + /** + * Returns the last checked option. + * + * @internal + */ + get activeOption() { + return this.options[this.activeIndex]; + } + /** + * Returns the list of checked options. + * + * @internal + */ + get checkedOptions() { + var _a; + return (_a = this.options) === null || _a === void 0 ? void 0 : _a.filter((o) => o.checked); + } + /** + * Returns the index of the first selected option. + * + * @internal + */ + get firstSelectedOptionIndex() { + return this.options.indexOf(this.firstSelectedOption); + } + /** + * Updates the `ariaActiveDescendant` property when the active index changes. + * + * @param prev - the previous active index + * @param next - the next active index + * + * @internal + */ + activeIndexChanged(prev, next) { + var _a, _b; + this.ariaActiveDescendant = (_b = (_a = this.options[next]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ""; + this.focusAndScrollOptionIntoView(); + } + /** + * Toggles the checked state for the currently active option. + * + * @remarks + * Multiple-selection mode only. + * + * @internal + */ + checkActiveIndex() { + if (!this.multiple) { + return; + } + const activeItem = this.activeOption; + if (activeItem) { + activeItem.checked = true; + } + } + /** + * Sets the active index to the first option and marks it as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkFirstOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex + 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and sets the matching option as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkLastOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.options.length); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = this.options.length - 1; + this.checkActiveIndex(); + } + /** + * @override + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("focusout", this.focusoutHandler); + } + /** + * @override + * @internal + */ + disconnectedCallback() { + this.removeEventListener("focusout", this.focusoutHandler); + super.disconnectedCallback(); + } + /** + * Increments the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkNextOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.activeIndex + 1); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex += this.activeIndex < this.options.length - 1 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkPreviousOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + if (this.checkedOptions.length === 1) { + this.rangeStartIndex += 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.activeIndex, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex -= this.activeIndex > 0 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Handles click events for listbox options. + * + * @param e - the event object + * + * @override + * @internal + */ + clickHandler(e) { + var _a; + if (!this.multiple) { + return super.clickHandler(e); + } + const captured = (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest(`[role=option]`); + if (!captured || captured.disabled) { + return; + } + this.uncheckAllOptions(); + this.activeIndex = this.options.indexOf(captured); + this.checkActiveIndex(); + this.toggleSelectedForAllCheckedOptions(); + return true; + } + /** + * @override + * @internal + */ + focusAndScrollOptionIntoView() { + super.focusAndScrollOptionIntoView(this.activeOption); + } + /** + * In multiple-selection mode: + * If any options are selected, the first selected option is checked when + * the listbox receives focus. If no options are selected, the first + * selectable option is checked. + * + * @override + * @internal + */ + focusinHandler(e) { + if (!this.multiple) { + return super.focusinHandler(e); + } + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.uncheckAllOptions(); + if (this.activeIndex === -1) { + this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0; + } + this.checkActiveIndex(); + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Unchecks all options when the listbox loses focus. + * + * @internal + */ + focusoutHandler(e) { + if (this.multiple) { + this.uncheckAllOptions(); + } + } + /** + * Handles keydown actions for listbox navigation and typeahead + * + * @override + * @internal + */ + keydownHandler(e) { + if (!this.multiple) { + return super.keydownHandler(e); + } + if (this.disabled) { + return true; + } + const { key, shiftKey } = e; + this.shouldSkipFocus = false; + switch (key) { + // Select the first available option + case keyHome: { + this.checkFirstOption(shiftKey); + return; + } + // Select the next selectable option + case keyArrowDown: { + this.checkNextOption(shiftKey); + return; + } + // Select the previous selectable option + case keyArrowUp: { + this.checkPreviousOption(shiftKey); + return; + } + // Select the last available option + case keyEnd: { + this.checkLastOption(shiftKey); + return; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEscape: { + this.uncheckAllOptions(); + this.checkActiveIndex(); + return true; + } + case keySpace: { + e.preventDefault(); + if (this.typeAheadExpired) { + this.toggleSelectedForAllCheckedOptions(); + return; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @override + * @internal + */ + mousedownHandler(e) { + if (e.offsetX >= 0 && e.offsetX <= this.scrollWidth) { + return super.mousedownHandler(e); + } + } + /** + * Switches between single-selection and multi-selection mode. + * + * @internal + */ + multipleChanged(prev, next) { + var _a; + this.ariaMultiSelectable = next ? "true" : null; + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + o.checked = next ? false : void 0; + }); + this.setSelectedOptions(); + } + /** + * Sets an option as selected and gives it focus. + * + * @override + * @public + */ + setSelectedOptions() { + if (!this.multiple) { + super.setSelectedOptions(); + return; + } + if (this.$fastController.isConnected && this.options) { + this.selectedOptions = this.options.filter((o) => o.selected); + this.focusAndScrollOptionIntoView(); + } + } + /** + * Ensures the size is a positive integer when the property is updated. + * + * @param prev - the previous size value + * @param next - the current size value + * + * @internal + */ + sizeChanged(prev, next) { + var _a; + const size = Math.max(0, parseInt((_a = next === null || next === void 0 ? void 0 : next.toFixed()) !== null && _a !== void 0 ? _a : "", 10)); + if (size !== next) { + DOM.queueUpdate(() => { + this.size = size; + }); + } + } + /** + * Toggles the selected state of the provided options. If any provided items + * are in an unselected state, all items are set to selected. If every + * provided item is selected, they are all unselected. + * + * @internal + */ + toggleSelectedForAllCheckedOptions() { + const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled); + const force = !enabledCheckedOptions.every((o) => o.selected); + enabledCheckedOptions.forEach((o) => o.selected = force); + this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]); + this.setSelectedOptions(); + } + /** + * @override + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (!this.multiple) { + super.typeaheadBufferChanged(prev, next); + return; + } + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + const activeIndex = this.options.indexOf(typeaheadMatches[0]); + if (activeIndex > -1) { + this.activeIndex = activeIndex; + this.uncheckAllOptions(); + this.checkActiveIndex(); + } + this.typeAheadExpired = false; + } + } + /** + * Unchecks all options. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - reset the rangeStartIndex + * + * @internal + */ + uncheckAllOptions(preserveChecked = false) { + this.options.forEach((o) => o.checked = this.multiple ? false : void 0); + if (!preserveChecked) { + this.rangeStartIndex = -1; + } + } + }; + __decorate([ + observable + ], ListboxElement.prototype, "activeIndex", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxElement.prototype, "multiple", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], ListboxElement.prototype, "size", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js + var init_listbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js + var init_listbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js"() { + init_listbox(); + init_listbox_element(); + init_listbox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js + var PickerMenu; + var init_picker_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js"() { + init_tslib_es6(); + init_dist2(); + init_esm(); + init_foundation_element(); + PickerMenu = class extends FoundationElement { + constructor() { + super(...arguments); + this.optionElements = []; + } + menuElementsChanged() { + this.updateOptions(); + } + headerElementsChanged() { + this.updateOptions(); + } + footerElementsChanged() { + this.updateOptions(); + } + updateOptions() { + this.optionElements.splice(0, this.optionElements.length); + this.addSlottedListItems(this.headerElements); + this.addSlottedListItems(this.menuElements); + this.addSlottedListItems(this.footerElements); + this.$emit("optionsupdated", { bubbles: false }); + } + addSlottedListItems(slotChildren) { + if (slotChildren === void 0) { + return; + } + slotChildren.forEach((child) => { + if (child.nodeType === 1 && child.getAttribute("role") === "listitem") { + child.id = child.id || uniqueId("option-"); + this.optionElements.push(child); + } + }); + } + }; + __decorate([ + observable + ], PickerMenu.prototype, "menuElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "headerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "footerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "suggestionsAvailableText", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js + var defaultContentsTemplate, PickerMenuOption; + var init_picker_menu_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + defaultContentsTemplate = html` + +`; + PickerMenuOption = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.disconnectView(); + } + handleClick(e) { + if (e.defaultPrevented) { + return false; + } + this.handleInvoked(); + return false; + } + handleInvoked() { + this.$emit("pickeroptioninvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerMenuOption.prototype, "value", void 0); + __decorate([ + observable + ], PickerMenuOption.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js + var init_picker_list = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js + var defaultContentsTemplate2, PickerListItem; + var init_picker_list_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + defaultContentsTemplate2 = html` + +`; + PickerListItem = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + this.disconnectView(); + super.disconnectedCallback(); + } + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + if (e.key === keyEnter) { + this.handleInvoke(); + return false; + } + return true; + } + handleClick(e) { + if (!e.defaultPrevented) { + this.handleInvoke(); + } + return false; + } + handleInvoke() { + this.$emit("pickeriteminvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate2.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerListItem.prototype, "value", void 0); + __decorate([ + observable + ], PickerListItem.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js + var init_picker_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js + var _Picker, FormAssociatedPicker; + var init_picker_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Picker = class extends FoundationElement { + }; + FormAssociatedPicker = class extends FormAssociated(_Picker) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js + var pickerInputTemplate, Picker; + var init_picker = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_anchored_region2(); + init_picker_menu_option(); + init_picker_list_item(); + init_picker_form_associated(); + pickerInputTemplate = html` + +`; + Picker = class extends FormAssociatedPicker { + constructor() { + super(...arguments); + this.selection = ""; + this.filterSelected = true; + this.filterQuery = true; + this.noSuggestionsText = "No suggestions available"; + this.suggestionsAvailableText = "Suggestions available"; + this.loadingText = "Loading suggestions"; + this.menuPlacement = "bottom-fill"; + this.showLoading = false; + this.optionsList = []; + this.filteredOptionsList = []; + this.flyoutOpen = false; + this.menuFocusIndex = -1; + this.showNoOptions = false; + this.selectedItems = []; + this.inputElementView = null; + this.handleTextInput = (e) => { + this.query = this.inputElement.value; + }; + this.handleInputClick = (e) => { + e.preventDefault(); + this.toggleFlyout(true); + }; + this.setRegionProps = () => { + if (!this.flyoutOpen) { + return; + } + if (this.region === null || this.region === void 0) { + DOM.queueUpdate(this.setRegionProps); + return; + } + this.region.anchorElement = this.inputElement; + }; + this.configLookup = { + top: FlyoutPosTop, + bottom: FlyoutPosBottom, + tallest: FlyoutPosTallest, + "top-fill": FlyoutPosTopFill, + "bottom-fill": FlyoutPosBottomFill, + "tallest-fill": FlyoutPosTallestFill + }; + } + selectionChanged() { + if (this.$fastController.isConnected) { + this.handleSelectionChange(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.value = this.selection; + this.validate(); + } + } + } + optionsChanged() { + this.optionsList = this.options.split(",").map((opt) => opt.trim()).filter((opt) => opt !== ""); + } + menuPlacementChanged() { + if (this.$fastController.isConnected) { + this.updateMenuConfig(); + } + } + showLoadingChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + listItemTemplateChanged() { + this.updateListItemTemplate(); + } + defaultListItemTemplateChanged() { + this.updateListItemTemplate(); + } + menuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + defaultMenuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + optionsListChanged() { + this.updateFilteredOptions(); + } + queryChanged() { + if (this.$fastController.isConnected) { + if (this.inputElement.value !== this.query) { + this.inputElement.value = this.query; + } + this.updateFilteredOptions(); + this.$emit("querychange", { bubbles: false }); + } + } + filteredOptionsListChanged() { + if (this.$fastController.isConnected) { + this.showNoOptions = this.filteredOptionsList.length === 0 && this.menuElement.querySelectorAll('[role="listitem"]').length === 0; + this.setFocusedOption(this.showNoOptions ? -1 : 0); + } + } + flyoutOpenChanged() { + if (this.flyoutOpen) { + DOM.queueUpdate(this.setRegionProps); + this.$emit("menuopening", { bubbles: false }); + } else { + this.$emit("menuclosing", { bubbles: false }); + } + } + showNoOptionsChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.listElement = document.createElement(this.selectedListTag); + this.appendChild(this.listElement); + this.itemsPlaceholderElement = document.createComment(""); + this.listElement.append(this.itemsPlaceholderElement); + this.inputElementView = pickerInputTemplate.render(this, this.listElement); + const match = this.menuTag.toUpperCase(); + this.menuElement = Array.from(this.children).find((element) => { + return element.tagName === match; + }); + if (this.menuElement === void 0) { + this.menuElement = document.createElement(this.menuTag); + this.appendChild(this.menuElement); + } + if (this.menuElement.id === "") { + this.menuElement.id = uniqueId("listbox-"); + } + this.menuId = this.menuElement.id; + this.optionsPlaceholder = document.createComment(""); + this.menuElement.append(this.optionsPlaceholder); + this.updateMenuConfig(); + DOM.queueUpdate(() => this.initialize()); + } + disconnectedCallback() { + super.disconnectedCallback(); + this.toggleFlyout(false); + this.inputElement.removeEventListener("input", this.handleTextInput); + this.inputElement.removeEventListener("click", this.handleInputClick); + if (this.inputElementView !== null) { + this.inputElementView.dispose(); + this.inputElementView = null; + } + } + /** + * Move focus to the input element + * @public + */ + focus() { + this.inputElement.focus(); + } + /** + * Initialize the component. This is delayed a frame to ensure children are connected as well. + */ + initialize() { + this.updateListItemTemplate(); + this.updateOptionTemplate(); + this.itemsRepeatBehavior = new RepeatDirective((x) => x.selectedItems, (x) => x.activeListItemTemplate, { positioning: true }).createBehavior(this.itemsPlaceholderElement); + this.inputElement.addEventListener("input", this.handleTextInput); + this.inputElement.addEventListener("click", this.handleInputClick); + this.$fastController.addBehaviors([this.itemsRepeatBehavior]); + this.menuElement.suggestionsAvailableText = this.suggestionsAvailableText; + this.menuElement.addEventListener("optionsupdated", this.handleMenuOptionsUpdated); + this.optionsRepeatBehavior = new RepeatDirective((x) => x.filteredOptionsList, (x) => x.activeMenuOptionTemplate, { positioning: true }).createBehavior(this.optionsPlaceholder); + this.$fastController.addBehaviors([this.optionsRepeatBehavior]); + this.handleSelectionChange(); + } + /** + * Toggles the menu flyout + */ + toggleFlyout(open) { + if (this.flyoutOpen === open) { + return; + } + if (open && document.activeElement === this.inputElement) { + this.flyoutOpen = open; + DOM.queueUpdate(() => { + if (this.menuElement !== void 0) { + this.setFocusedOption(0); + } else { + this.disableMenu(); + } + }); + return; + } + this.flyoutOpen = false; + this.disableMenu(); + return; + } + /** + * Handle the menu options updated event from the child menu + */ + handleMenuOptionsUpdated(e) { + e.preventDefault(); + if (this.flyoutOpen) { + this.setFocusedOption(0); + } + } + /** + * Handle key down events. + */ + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + // TODO: what should "home" and "end" keys do, exactly? + // + // case keyHome: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.setFocusedOption(0); + // } + // } + // return false; + // } + // case keyEnd: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.toggleFlyout(true); + // this.setFocusedOption(this.menuElement.optionElements.length - 1); + // } + // } + // return false; + // } + case keyArrowDown: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const nextFocusOptionIndex = this.flyoutOpen ? Math.min(this.menuFocusIndex + 1, this.menuElement.optionElements.length - 1) : 0; + this.setFocusedOption(nextFocusOptionIndex); + } + return false; + } + case keyArrowUp: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const previousFocusOptionIndex = this.flyoutOpen ? Math.max(this.menuFocusIndex - 1, 0) : 0; + this.setFocusedOption(previousFocusOptionIndex); + } + return false; + } + case keyEscape: { + this.toggleFlyout(false); + return false; + } + case keyEnter: { + if (this.menuFocusIndex !== -1 && this.menuElement.optionElements.length > this.menuFocusIndex) { + this.menuElement.optionElements[this.menuFocusIndex].click(); + } + return false; + } + case keyArrowRight: { + if (document.activeElement !== this.inputElement) { + this.incrementFocusedItem(1); + return false; + } + return true; + } + case keyArrowLeft: { + if (this.inputElement.selectionStart === 0) { + this.incrementFocusedItem(-1); + return false; + } + return true; + } + case keyDelete: + case keyBackspace: { + if (document.activeElement === null) { + return true; + } + if (document.activeElement === this.inputElement) { + if (this.inputElement.selectionStart === 0) { + this.selection = this.selectedItems.slice(0, this.selectedItems.length - 1).toString(); + this.toggleFlyout(false); + return false; + } + return true; + } + const selectedItems = Array.from(this.listElement.children); + const currentFocusedItemIndex = selectedItems.indexOf(document.activeElement); + if (currentFocusedItemIndex > -1) { + this.selection = this.selectedItems.splice(currentFocusedItemIndex, 1).toString(); + DOM.queueUpdate(() => { + selectedItems[Math.min(selectedItems.length, currentFocusedItemIndex)].focus(); + }); + return false; + } + return true; + } + } + this.toggleFlyout(true); + return true; + } + /** + * Handle focus in events. + */ + handleFocusIn(e) { + return false; + } + /** + * Handle focus out events. + */ + handleFocusOut(e) { + if (this.menuElement === void 0 || !this.menuElement.contains(e.relatedTarget)) { + this.toggleFlyout(false); + } + return false; + } + /** + * The list of selected items has changed + */ + handleSelectionChange() { + if (this.selectedItems.toString() === this.selection) { + return; + } + this.selectedItems = this.selection === "" ? [] : this.selection.split(","); + this.updateFilteredOptions(); + DOM.queueUpdate(() => { + this.checkMaxItems(); + }); + this.$emit("selectionchange", { bubbles: false }); + } + /** + * Anchored region is loaded, menu and options exist in the DOM. + */ + handleRegionLoaded(e) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + this.$emit("menuloaded", { bubbles: false }); + }); + } + /** + * Checks if the maximum number of items has been chosen and updates the ui. + */ + checkMaxItems() { + if (this.inputElement === void 0) { + return; + } + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + if (document.activeElement === this.inputElement) { + const selectedItemInstances = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + selectedItemInstances[selectedItemInstances.length - 1].focus(); + } + this.inputElement.hidden = true; + } else { + this.inputElement.hidden = false; + } + } + /** + * A list item has been invoked. + */ + handleItemInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerListItem) { + const listItems = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + const itemIndex = listItems.indexOf(e.target); + if (itemIndex !== -1) { + const newSelection = this.selectedItems.slice(); + newSelection.splice(itemIndex, 1); + this.selection = newSelection.toString(); + DOM.queueUpdate(() => this.incrementFocusedItem(0)); + } + return false; + } + return true; + } + /** + * A menu option has been invoked. + */ + handleOptionInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerMenuOption) { + if (e.target.value !== void 0) { + this.selection = `${this.selection}${this.selection === "" ? "" : ","}${e.target.value}`; + } + this.inputElement.value = ""; + this.query = ""; + this.inputElement.focus(); + this.toggleFlyout(false); + return false; + } + return true; + } + /** + * Increments the focused list item by the specified amount + */ + incrementFocusedItem(increment) { + if (this.selectedItems.length === 0) { + this.inputElement.focus(); + return; + } + const selectedItemsAsElements = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + if (document.activeElement !== null) { + let currentFocusedItemIndex = selectedItemsAsElements.indexOf(document.activeElement); + if (currentFocusedItemIndex === -1) { + currentFocusedItemIndex = selectedItemsAsElements.length; + } + const newFocusedItemIndex = Math.min(selectedItemsAsElements.length, Math.max(0, currentFocusedItemIndex + increment)); + if (newFocusedItemIndex === selectedItemsAsElements.length) { + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + selectedItemsAsElements[newFocusedItemIndex - 1].focus(); + } else { + this.inputElement.focus(); + } + } else { + selectedItemsAsElements[newFocusedItemIndex].focus(); + } + } + } + /** + * Disables the menu. Note that the menu can be open, just doens't have any valid options on display. + */ + disableMenu() { + var _a, _b, _c; + this.menuFocusIndex = -1; + this.menuFocusOptionId = void 0; + (_a = this.inputElement) === null || _a === void 0 ? void 0 : _a.removeAttribute("aria-activedescendant"); + (_b = this.inputElement) === null || _b === void 0 ? void 0 : _b.removeAttribute("aria-owns"); + (_c = this.inputElement) === null || _c === void 0 ? void 0 : _c.removeAttribute("aria-expanded"); + } + /** + * Sets the currently focused menu option by index + */ + setFocusedOption(optionIndex) { + if (!this.flyoutOpen || optionIndex === -1 || this.showNoOptions || this.showLoading) { + this.disableMenu(); + return; + } + if (this.menuElement.optionElements.length === 0) { + return; + } + this.menuElement.optionElements.forEach((element) => { + element.setAttribute("aria-selected", "false"); + }); + this.menuFocusIndex = optionIndex; + if (this.menuFocusIndex > this.menuElement.optionElements.length - 1) { + this.menuFocusIndex = this.menuElement.optionElements.length - 1; + } + this.menuFocusOptionId = this.menuElement.optionElements[this.menuFocusIndex].id; + this.inputElement.setAttribute("aria-owns", this.menuId); + this.inputElement.setAttribute("aria-expanded", "true"); + this.inputElement.setAttribute("aria-activedescendant", this.menuFocusOptionId); + const focusedOption = this.menuElement.optionElements[this.menuFocusIndex]; + focusedOption.setAttribute("aria-selected", "true"); + this.menuElement.scrollTo(0, focusedOption.offsetTop); + } + /** + * Updates the template used for the list item repeat behavior + */ + updateListItemTemplate() { + var _a; + this.activeListItemTemplate = (_a = this.listItemTemplate) !== null && _a !== void 0 ? _a : this.defaultListItemTemplate; + } + /** + * Updates the template used for the menu option repeat behavior + */ + updateOptionTemplate() { + var _a; + this.activeMenuOptionTemplate = (_a = this.menuOptionTemplate) !== null && _a !== void 0 ? _a : this.defaultMenuOptionTemplate; + } + /** + * Updates the filtered options array + */ + updateFilteredOptions() { + this.filteredOptionsList = this.optionsList.slice(0); + if (this.filterSelected) { + this.filteredOptionsList = this.filteredOptionsList.filter((el2) => this.selectedItems.indexOf(el2) === -1); + } + if (this.filterQuery && this.query !== "" && this.query !== void 0) { + this.filteredOptionsList = this.filteredOptionsList.filter((el2) => el2.indexOf(this.query) !== -1); + } + } + /** + * Updates the menu configuration + */ + updateMenuConfig() { + let newConfig = this.configLookup[this.menuPlacement]; + if (newConfig === null) { + newConfig = FlyoutPosBottomFill; + } + this.menuConfig = Object.assign(Object.assign({}, newConfig), { autoUpdateMode: "auto", fixedPlacement: true, horizontalViewportLock: false, verticalViewportLock: false }); + } + }; + __decorate([ + attr({ attribute: "selection" }) + ], Picker.prototype, "selection", void 0); + __decorate([ + attr({ attribute: "options" }) + ], Picker.prototype, "options", void 0); + __decorate([ + attr({ attribute: "filter-selected", mode: "boolean" }) + ], Picker.prototype, "filterSelected", void 0); + __decorate([ + attr({ attribute: "filter-query", mode: "boolean" }) + ], Picker.prototype, "filterQuery", void 0); + __decorate([ + attr({ attribute: "max-selected" }) + ], Picker.prototype, "maxSelected", void 0); + __decorate([ + attr({ attribute: "no-suggestions-text" }) + ], Picker.prototype, "noSuggestionsText", void 0); + __decorate([ + attr({ attribute: "suggestions-available-text" }) + ], Picker.prototype, "suggestionsAvailableText", void 0); + __decorate([ + attr({ attribute: "loading-text" }) + ], Picker.prototype, "loadingText", void 0); + __decorate([ + attr({ attribute: "label" }) + ], Picker.prototype, "label", void 0); + __decorate([ + attr({ attribute: "labelledby" }) + ], Picker.prototype, "labelledBy", void 0); + __decorate([ + attr({ attribute: "placeholder" }) + ], Picker.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "menu-placement" }) + ], Picker.prototype, "menuPlacement", void 0); + __decorate([ + observable + ], Picker.prototype, "showLoading", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "optionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "query", void 0); + __decorate([ + observable + ], Picker.prototype, "filteredOptionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "flyoutOpen", void 0); + __decorate([ + observable + ], Picker.prototype, "menuId", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedListTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusIndex", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusOptionId", void 0); + __decorate([ + observable + ], Picker.prototype, "showNoOptions", void 0); + __decorate([ + observable + ], Picker.prototype, "menuConfig", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js + var init_picker_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js + var init_picker_menu_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js + var init_picker_list_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js + var init_picker_list_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js + var init_picker2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js"() { + init_picker_template(); + init_picker(); + init_picker_menu_template(); + init_picker_menu(); + init_picker_menu_option_template(); + init_picker_menu_option(); + init_picker_list_template(); + init_picker_list(); + init_picker_list_item_template(); + init_picker_list_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js + var MenuItemRole, roleForMenuItem; + var init_menu_item_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js"() { + MenuItemRole = { + /** + * The menu item has a "menuitem" role + */ + menuitem: "menuitem", + /** + * The menu item has a "menuitemcheckbox" role + */ + menuitemcheckbox: "menuitemcheckbox", + /** + * The menu item has a "menuitemradio" role + */ + menuitemradio: "menuitemradio" + }; + roleForMenuItem = { + [MenuItemRole.menuitem]: "menuitem", + [MenuItemRole.menuitemcheckbox]: "menuitemcheckbox", + [MenuItemRole.menuitemradio]: "menuitemradio" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js + var MenuItem; + var init_menu_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_start_end(); + init_direction(); + init_apply_mixins(); + init_menu_item_options(); + MenuItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = MenuItemRole.menuitem; + this.hasSubmenu = false; + this.currentDirection = Direction.ltr; + this.focusSubmenuOnLoad = false; + this.handleMenuItemKeyDown = (e) => { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.invoke(); + return false; + case keyArrowRight: + this.expandAndFocus(); + return false; + case keyArrowLeft: + if (this.expanded) { + this.expanded = false; + this.focus(); + return false; + } + } + return true; + }; + this.handleMenuItemClick = (e) => { + if (e.defaultPrevented || this.disabled) { + return false; + } + this.invoke(); + return false; + }; + this.submenuLoaded = () => { + if (!this.focusSubmenuOnLoad) { + return; + } + this.focusSubmenuOnLoad = false; + if (this.hasSubmenu) { + this.submenu.focus(); + this.setAttribute("tabindex", "-1"); + } + }; + this.handleMouseOver = (e) => { + if (this.disabled || !this.hasSubmenu || this.expanded) { + return false; + } + this.expanded = true; + return false; + }; + this.handleMouseOut = (e) => { + if (!this.expanded || this.contains(document.activeElement)) { + return false; + } + this.expanded = false; + return false; + }; + this.expandAndFocus = () => { + if (!this.hasSubmenu) { + return; + } + this.focusSubmenuOnLoad = true; + this.expanded = true; + }; + this.invoke = () => { + if (this.disabled) { + return; + } + switch (this.role) { + case MenuItemRole.menuitemcheckbox: + this.checked = !this.checked; + break; + case MenuItemRole.menuitem: + this.updateSubmenu(); + if (this.hasSubmenu) { + this.expandAndFocus(); + } else { + this.$emit("change"); + } + break; + case MenuItemRole.menuitemradio: + if (!this.checked) { + this.checked = true; + } + break; + } + }; + this.updateSubmenu = () => { + this.submenu = this.domChildren().find((element) => { + return element.getAttribute("role") === "menu"; + }); + this.hasSubmenu = this.submenu === void 0 ? false : true; + }; + } + expandedChanged(oldValue) { + if (this.$fastController.isConnected) { + if (this.submenu === void 0) { + return; + } + if (this.expanded === false) { + this.submenu.collapseExpandedItem(); + } else { + this.currentDirection = getDirection(this); + } + this.$emit("expanded-change", this, { bubbles: false }); + } + } + checkedChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.$emit("change"); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.updateSubmenu(); + }); + if (!this.startColumnCount) { + this.startColumnCount = 1; + } + this.observer = new MutationObserver(this.updateSubmenu); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.submenu = void 0; + if (this.observer !== void 0) { + this.observer.disconnect(); + this.observer = void 0; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "disabled", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "expanded", void 0); + __decorate([ + observable + ], MenuItem.prototype, "startColumnCount", void 0); + __decorate([ + attr + ], MenuItem.prototype, "role", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "checked", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenuRegion", void 0); + __decorate([ + observable + ], MenuItem.prototype, "hasSubmenu", void 0); + __decorate([ + observable + ], MenuItem.prototype, "currentDirection", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenu", void 0); + applyMixins(MenuItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js + var init_menu_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js + var init_menu_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js"() { + init_menu_item_template(); + init_menu_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js + var init_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js + var Menu; + var init_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_menu_item2(); + init_foundation_element(); + Menu = class _Menu extends FoundationElement { + constructor() { + super(...arguments); + this.expandedItem = null; + this.focusIndex = -1; + this.isNestedMenu = () => { + return this.parentElement !== null && isHTMLElement(this.parentElement) && this.parentElement.getAttribute("role") === "menuitem"; + }; + this.handleFocusOut = (e) => { + if (!this.contains(e.relatedTarget) && this.menuItems !== void 0) { + this.collapseExpandedItem(); + const focusIndex = this.menuItems.findIndex(this.isFocusableElement); + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.menuItems[focusIndex].setAttribute("tabindex", "0"); + this.focusIndex = focusIndex; + } + }; + this.handleItemFocus = (e) => { + const targetItem = e.target; + if (this.menuItems !== void 0 && targetItem !== this.menuItems[this.focusIndex]) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.focusIndex = this.menuItems.indexOf(targetItem); + targetItem.setAttribute("tabindex", "0"); + } + }; + this.handleExpandedChanged = (e) => { + if (e.defaultPrevented || e.target === null || this.menuItems === void 0 || this.menuItems.indexOf(e.target) < 0) { + return; + } + e.preventDefault(); + const changedItem = e.target; + if (this.expandedItem !== null && changedItem === this.expandedItem && changedItem.expanded === false) { + this.expandedItem = null; + return; + } + if (changedItem.expanded) { + if (this.expandedItem !== null && this.expandedItem !== changedItem) { + this.expandedItem.expanded = false; + } + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.expandedItem = changedItem; + this.focusIndex = this.menuItems.indexOf(changedItem); + changedItem.setAttribute("tabindex", "0"); + } + }; + this.removeItemListeners = () => { + if (this.menuItems !== void 0) { + this.menuItems.forEach((item) => { + item.removeEventListener("expanded-change", this.handleExpandedChanged); + item.removeEventListener("focus", this.handleItemFocus); + }); + } + }; + this.setItems = () => { + const newItems = this.domChildren(); + this.removeItemListeners(); + this.menuItems = newItems; + const menuItems = this.menuItems.filter(this.isMenuItemElement); + if (menuItems.length) { + this.focusIndex = 0; + } + function elementIndent(el2) { + const role = el2.getAttribute("role"); + const startSlot = el2.querySelector("[slot=start]"); + if (role !== MenuItemRole.menuitem && startSlot === null) { + return 1; + } else if (role === MenuItemRole.menuitem && startSlot !== null) { + return 1; + } else if (role !== MenuItemRole.menuitem && startSlot !== null) { + return 2; + } else { + return 0; + } + } + const indent = menuItems.reduce((accum, current) => { + const elementValue = elementIndent(current); + return accum > elementValue ? accum : elementValue; + }, 0); + menuItems.forEach((item, index) => { + item.setAttribute("tabindex", index === 0 ? "0" : "-1"); + item.addEventListener("expanded-change", this.handleExpandedChanged); + item.addEventListener("focus", this.handleItemFocus); + if (item instanceof MenuItem || "startColumnCount" in item) { + item.startColumnCount = indent; + } + }); + }; + this.changeHandler = (e) => { + if (this.menuItems === void 0) { + return; + } + const changedMenuItem = e.target; + const changeItemIndex = this.menuItems.indexOf(changedMenuItem); + if (changeItemIndex === -1) { + return; + } + if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked === true) { + for (let i = changeItemIndex - 1; i >= 0; --i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + const maxIndex = this.menuItems.length - 1; + for (let i = changeItemIndex + 1; i <= maxIndex; ++i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + } + }; + this.isMenuItemElement = (el2) => { + return isHTMLElement(el2) && _Menu.focusableElementRoles.hasOwnProperty(el2.getAttribute("role")); + }; + this.isFocusableElement = (el2) => { + return this.isMenuItemElement(el2); + }; + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.menuItems !== void 0) { + this.setItems(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.setItems(); + }); + this.addEventListener("change", this.changeHandler); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeItemListeners(); + this.menuItems = void 0; + this.removeEventListener("change", this.changeHandler); + } + /** + * Focuses the first item in the menu. + * + * @public + */ + focus() { + this.setFocus(0, 1); + } + /** + * Collapses any expanded menu items. + * + * @public + */ + collapseExpandedItem() { + if (this.expandedItem !== null) { + this.expandedItem.expanded = false; + this.expandedItem = null; + } + } + /** + * @internal + */ + handleMenuKeyDown(e) { + if (e.defaultPrevented || this.menuItems === void 0) { + return; + } + switch (e.key) { + case keyArrowDown: + this.setFocus(this.focusIndex + 1, 1); + return; + case keyArrowUp: + this.setFocus(this.focusIndex - 1, -1); + return; + case keyEnd: + this.setFocus(this.menuItems.length - 1, -1); + return; + case keyHome: + this.setFocus(0, 1); + return; + default: + return true; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + setFocus(focusIndex, adjustment) { + if (this.menuItems === void 0) { + return; + } + while (focusIndex >= 0 && focusIndex < this.menuItems.length) { + const child = this.menuItems[focusIndex]; + if (this.isFocusableElement(child)) { + if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + } + this.focusIndex = focusIndex; + child.setAttribute("tabindex", "0"); + child.focus(); + break; + } + focusIndex += adjustment; + } + } + }; + Menu.focusableElementRoles = roleForMenuItem; + __decorate([ + observable + ], Menu.prototype, "items", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js + var init_menu2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js"() { + init_menu_template(); + init_menu(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js + var init_number_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js + var _TextField, FormAssociatedTextField; + var init_text_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextField = class extends FoundationElement { + }; + FormAssociatedTextField = class extends FormAssociated(_TextField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js + var TextFieldType; + var init_text_field_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js"() { + TextFieldType = { + /** + * An email TextField + */ + email: "email", + /** + * A password TextField + */ + password: "password", + /** + * A telephone TextField + */ + tel: "tel", + /** + * A text TextField + */ + text: "text", + /** + * A URL TextField + */ + url: "url" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js + var TextField, DelegatesARIATextbox; + var init_text_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_text_field_form_associated(); + init_text_field_options(); + TextField = class extends FormAssociatedTextField { + constructor() { + super(...arguments); + this.type = TextFieldType.text; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + typeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + this.validate(); + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the text field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], TextField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "autofocus", void 0); + __decorate([ + attr + ], TextField.prototype, "placeholder", void 0); + __decorate([ + attr + ], TextField.prototype, "type", void 0); + __decorate([ + attr + ], TextField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "minlength", void 0); + __decorate([ + attr + ], TextField.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextField.prototype, "defaultSlottedNodes", void 0); + DelegatesARIATextbox = class { + }; + applyMixins(DelegatesARIATextbox, ARIAGlobalStatesAndProperties); + applyMixins(TextField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js + var _NumberField, FormAssociatedNumberField; + var init_number_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _NumberField = class extends FoundationElement { + }; + FormAssociatedNumberField = class extends FormAssociated(_NumberField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js + var NumberField; + var init_number_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_text_field(); + init_number_field_form_associated(); + NumberField = class extends FormAssociatedNumberField { + constructor() { + super(...arguments); + this.hideStep = false; + this.step = 1; + this.isUserInput = false; + } + /** + * Ensures that the max is greater than the min and that the value + * is less than the max + * @param previous - the previous max value + * @param next - updated max value + * + * @internal + */ + maxChanged(previous, next) { + var _a; + this.max = Math.max(next, (_a = this.min) !== null && _a !== void 0 ? _a : next); + const min = Math.min(this.min, this.max); + if (this.min !== void 0 && this.min !== min) { + this.min = min; + } + this.value = this.getValidValue(this.value); + } + /** + * Ensures that the min is less than the max and that the value + * is greater than the min + * @param previous - previous min value + * @param next - updated min value + * + * @internal + */ + minChanged(previous, next) { + var _a; + this.min = Math.min(next, (_a = this.max) !== null && _a !== void 0 ? _a : next); + const max = Math.max(this.min, this.max); + if (this.max !== void 0 && this.max !== max) { + this.max = max; + } + this.value = this.getValidValue(this.value); + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * Validates that the value is a number between the min and max + * @param previous - previous stored value + * @param next - value being updated + * @param updateControl - should the text field be updated with value, defaults to true + * @internal + */ + valueChanged(previous, next) { + this.value = this.getValidValue(next); + if (next !== this.value) { + return; + } + if (this.control && !this.isUserInput) { + this.control.value = this.value; + } + super.valueChanged(previous, this.value); + if (previous !== void 0 && !this.isUserInput) { + this.$emit("input"); + this.$emit("change"); + } + this.isUserInput = false; + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Sets the internal value to a valid number between the min and max properties + * @param value - user input + * + * @internal + */ + getValidValue(value) { + var _a, _b; + let validValue = parseFloat(parseFloat(value).toPrecision(12)); + if (isNaN(validValue)) { + validValue = ""; + } else { + validValue = Math.min(validValue, (_a = this.max) !== null && _a !== void 0 ? _a : validValue); + validValue = Math.max(validValue, (_b = this.min) !== null && _b !== void 0 ? _b : validValue).toString(); + } + return validValue; + } + /** + * Increments the value using the step value + * + * @public + */ + stepUp() { + const value = parseFloat(this.value); + const stepUpValue = !isNaN(value) ? value + this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? this.step : 0; + this.value = stepUpValue.toString(); + } + /** + * Decrements the value using the step value + * + * @public + */ + stepDown() { + const value = parseFloat(this.value); + const stepDownValue = !isNaN(value) ? value - this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? 0 - this.step : 0; + this.value = stepDownValue.toString(); + } + /** + * Sets up the initial state of the number field + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "number"); + this.validate(); + this.control.value = this.value; + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the number field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, ""); + this.isUserInput = true; + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** + * Handles the internal control's `keydown` event + * @internal + */ + handleKeyDown(e) { + const key = e.key; + switch (key) { + case keyArrowUp: + this.stepUp(); + return false; + case keyArrowDown: + this.stepDown(); + return false; + } + return true; + } + /** + * Handles populating the input field with a validated value when + * leaving the input field. + * @internal + */ + handleBlur() { + this.control.value = this.value; + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], NumberField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], NumberField.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "hide-step", mode: "boolean" }) + ], NumberField.prototype, "hideStep", void 0); + __decorate([ + attr + ], NumberField.prototype, "placeholder", void 0); + __decorate([ + attr + ], NumberField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "minlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "size", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "step", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "min", void 0); + __decorate([ + observable + ], NumberField.prototype, "defaultSlottedNodes", void 0); + applyMixins(NumberField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js + var init_number_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js"() { + init_number_field_template(); + init_number_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js + var progressSegments, progressRingTemplate; + var init_progress_ring_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js"() { + init_esm(); + progressSegments = 44; + progressRingTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js + var init_progress_ring = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js"() { + init_progress_ring_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js + var BaseProgress; + var init_base_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + BaseProgress = class extends FoundationElement { + constructor() { + super(...arguments); + this.percentComplete = 0; + } + valueChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + minChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + maxChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updatePercentComplete(); + } + updatePercentComplete() { + const min = typeof this.min === "number" ? this.min : 0; + const max = typeof this.max === "number" ? this.max : 100; + const value = typeof this.value === "number" ? this.value : 0; + const range2 = max - min; + this.percentComplete = range2 === 0 ? 0 : Math.fround((value - min) / range2 * 100); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "value", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "max", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], BaseProgress.prototype, "paused", void 0); + __decorate([ + observable + ], BaseProgress.prototype, "percentComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js + var init_progress_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js + var init_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js"() { + init_base_progress(); + init_progress_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js + var radioGroupTemplate; + var init_radio_group_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js"() { + init_esm(); + init_dist2(); + radioGroupTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js + var RadioGroup; + var init_radio_group = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + RadioGroup = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = Orientation.horizontal; + this.radioChangeHandler = (e) => { + const changedRadio = e.target; + if (changedRadio.checked) { + this.slottedRadioButtons.forEach((radio) => { + if (radio !== changedRadio) { + radio.checked = false; + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + } + }); + this.selectedRadio = changedRadio; + this.value = changedRadio.value; + changedRadio.setAttribute("tabindex", "0"); + this.focusedRadio = changedRadio; + } + e.stopPropagation(); + }; + this.moveToRadioByIndex = (group, index) => { + const radio = group[index]; + if (!this.isInsideToolbar) { + radio.setAttribute("tabindex", "0"); + if (radio.readOnly) { + this.slottedRadioButtons.forEach((nextRadio) => { + if (nextRadio !== radio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + radio.checked = true; + this.selectedRadio = radio; + } + } + this.focusedRadio = radio; + radio.focus(); + }; + this.moveRightOffGroup = () => { + var _a; + (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.moveLeftOffGroup = () => { + var _a; + (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.focusOutHandler = (e) => { + const group = this.slottedRadioButtons; + const radio = e.target; + const index = radio !== null ? group.indexOf(radio) : 0; + const focusedIndex = this.focusedRadio ? group.indexOf(this.focusedRadio) : -1; + if (focusedIndex === 0 && index === focusedIndex || focusedIndex === group.length - 1 && focusedIndex === index) { + if (!this.selectedRadio) { + this.focusedRadio = group[0]; + this.focusedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.focusedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + this.focusedRadio = this.selectedRadio; + if (!this.isInsideFoundationToolbar) { + this.selectedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.selectedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } + } + } + return true; + }; + this.clickHandler = (e) => { + const radio = e.target; + if (radio) { + const group = this.slottedRadioButtons; + if (radio.checked || group.indexOf(radio) === 0) { + radio.setAttribute("tabindex", "0"); + this.selectedRadio = radio; + } else { + radio.setAttribute("tabindex", "-1"); + this.selectedRadio = null; + } + this.focusedRadio = radio; + } + e.preventDefault(); + }; + this.shouldMoveOffGroupToTheRight = (index, group, key) => { + return index === group.length && this.isInsideToolbar && key === keyArrowRight; + }; + this.shouldMoveOffGroupToTheLeft = (group, key) => { + const index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + return index < 0 && this.isInsideToolbar && key === keyArrowLeft; + }; + this.checkFocusedRadio = () => { + if (this.focusedRadio !== null && !this.focusedRadio.readOnly && !this.focusedRadio.checked) { + this.focusedRadio.checked = true; + this.focusedRadio.setAttribute("tabindex", "0"); + this.focusedRadio.focus(); + this.selectedRadio = this.focusedRadio; + } + }; + this.moveRight = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1; + if (this.shouldMoveOffGroupToTheRight(index, group, e.key)) { + this.moveRightOffGroup(); + return; + } else if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index + 1 >= group.length) { + if (this.isInsideToolbar) { + break; + } else { + index = 0; + } + } else { + index += 1; + } + } + }; + this.moveLeft = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + if (this.shouldMoveOffGroupToTheLeft(group, e.key)) { + this.moveLeftOffGroup(); + return; + } + while (index >= 0 && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.keydownHandler = (e) => { + const key = e.key; + if (key in ArrowKeys && this.isInsideFoundationToolbar) { + return true; + } + switch (key) { + case keyEnter: { + this.checkFocusedRadio(); + break; + } + case keyArrowRight: + case keyArrowDown: { + if (this.direction === Direction.ltr) { + this.moveRight(e); + } else { + this.moveLeft(e); + } + break; + } + case keyArrowLeft: + case keyArrowUp: { + if (this.direction === Direction.ltr) { + this.moveLeft(e); + } else { + this.moveRight(e); + } + break; + } + default: { + return true; + } + } + }; + } + readOnlyChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.readOnly) { + radio.readOnly = true; + } else { + radio.readOnly = false; + } + }); + } + } + disabledChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.disabled) { + radio.disabled = true; + } else { + radio.disabled = false; + } + }); + } + } + nameChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + radio.setAttribute("name", this.name); + }); + } + } + valueChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + if (radio.value === this.value) { + radio.checked = true; + this.selectedRadio = radio; + } + }); + } + this.$emit("change"); + } + slottedRadioButtonsChanged(oldValue, newValue) { + if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) { + this.setupRadioButtons(); + } + } + get parentToolbar() { + return this.closest('[role="toolbar"]'); + } + get isInsideToolbar() { + var _a; + return (_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false; + } + get isInsideFoundationToolbar() { + var _a; + return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + this.setupRadioButtons(); + } + disconnectedCallback() { + this.slottedRadioButtons.forEach((radio) => { + radio.removeEventListener("change", this.radioChangeHandler); + }); + } + setupRadioButtons() { + const checkedRadios = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0; + if (numberOfCheckedRadios > 1) { + const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1]; + lastCheckedRadio.checked = true; + } + let foundMatchingVal = false; + this.slottedRadioButtons.forEach((radio) => { + if (this.name !== void 0) { + radio.setAttribute("name", this.name); + } + if (this.disabled) { + radio.disabled = true; + } + if (this.readOnly) { + radio.readOnly = true; + } + if (this.value && this.value === radio.value) { + this.selectedRadio = radio; + this.focusedRadio = radio; + radio.checked = true; + radio.setAttribute("tabindex", "0"); + foundMatchingVal = true; + } else { + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + radio.checked = false; + } + radio.addEventListener("change", this.radioChangeHandler); + }); + if (this.value === void 0 && this.slottedRadioButtons.length > 0) { + const checkedRadios2 = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios2 = checkedRadios2 !== null ? checkedRadios2.length : 0; + if (numberOfCheckedRadios2 > 0 && !foundMatchingVal) { + const lastCheckedRadio = checkedRadios2[numberOfCheckedRadios2 - 1]; + lastCheckedRadio.checked = true; + this.focusedRadio = lastCheckedRadio; + lastCheckedRadio.setAttribute("tabindex", "0"); + } else { + this.slottedRadioButtons[0].setAttribute("tabindex", "0"); + this.focusedRadio = this.slottedRadioButtons[0]; + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], RadioGroup.prototype, "readOnly", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], RadioGroup.prototype, "disabled", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "name", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "value", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "orientation", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "childItems", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "slottedRadioButtons", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js + var init_radio_group2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js"() { + init_radio_group_template(); + init_radio_group(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js + var radioTemplate; + var init_radio_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js"() { + init_esm(); + radioTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js + var _Radio, FormAssociatedRadio; + var init_radio_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Radio = class extends FoundationElement { + }; + FormAssociatedRadio = class extends CheckableFormAssociated(_Radio) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js + var Radio; + var init_radio = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_radio_form_associated(); + Radio = class extends FormAssociatedRadio { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + switch (e.key) { + case keySpace: + if (!this.checked && !this.readOnly) { + this.checked = true; + } + return; + } + return true; + }; + this.proxy.setAttribute("type", "radio"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * @internal + */ + defaultCheckedChanged() { + var _a; + if (this.$fastController.isConnected && !this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_a = this.defaultChecked) !== null && _a !== void 0 ? _a : false; + this.dirtyChecked = false; + } + } + } + /** + * @internal + */ + connectedCallback() { + var _a, _b; + super.connectedCallback(); + this.validate(); + if (((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("role")) !== "radiogroup" && this.getAttribute("tabindex") === null) { + if (!this.disabled) { + this.setAttribute("tabindex", "0"); + } + } + if (this.checkedAttribute) { + if (!this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_b = this.defaultChecked) !== null && _b !== void 0 ? _b : false; + this.dirtyChecked = false; + } + } + } + } + isInsideRadioGroup() { + const parent = this.closest("[role=radiogroup]"); + return parent !== null; + } + /** + * @internal + */ + clickHandler(e) { + if (!this.disabled && !this.readOnly && !this.checked) { + this.checked = true; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Radio.prototype, "readOnly", void 0); + __decorate([ + observable + ], Radio.prototype, "name", void 0); + __decorate([ + observable + ], Radio.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js + var init_radio2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js"() { + init_radio_template(); + init_radio(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js + var HorizontalScroll; + var init_horizontal_scroll = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + HorizontalScroll = class extends FoundationElement { + constructor() { + super(...arguments); + this.framesPerSecond = 60; + this.updatingItems = false; + this.speed = 600; + this.easing = "ease-in-out"; + this.flippersHiddenFromAT = false; + this.scrolling = false; + this.resizeDetector = null; + } + /** + * The calculated duration for a frame. + * + * @internal + */ + get frameTime() { + return 1e3 / this.framesPerSecond; + } + /** + * Firing scrollstart and scrollend events + * @internal + */ + scrollingChanged(prev, next) { + if (this.scrollContainer) { + const event = this.scrolling == true ? "scrollstart" : "scrollend"; + this.$emit(event, this.scrollContainer.scrollLeft); + } + } + /** + * In RTL mode + * @internal + */ + get isRtl() { + return this.scrollItems.length > 1 && this.scrollItems[0].offsetLeft > this.scrollItems[1].offsetLeft; + } + connectedCallback() { + super.connectedCallback(); + this.initializeResizeDetector(); + } + disconnectedCallback() { + this.disconnectResizeDetector(); + super.disconnectedCallback(); + } + /** + * Updates scroll stops and flippers when scroll items change + * @param previous - current scroll items + * @param next - new updated scroll items + * @public + */ + scrollItemsChanged(previous, next) { + if (next && !this.updatingItems) { + DOM.queueUpdate(() => this.setStops()); + } + } + /** + * destroys the instance's resize observer + * @internal + */ + disconnectResizeDetector() { + if (this.resizeDetector) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + * @internal + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.resized.bind(this)); + this.resizeDetector.observe(this); + } + /** + * Looks for slots and uses child nodes instead + * @internal + */ + updateScrollStops() { + this.updatingItems = true; + const updatedItems = this.scrollItems.reduce((scrollItems, scrollItem) => { + if (scrollItem instanceof HTMLSlotElement) { + return scrollItems.concat(scrollItem.assignedElements()); + } + scrollItems.push(scrollItem); + return scrollItems; + }, []); + this.scrollItems = updatedItems; + this.updatingItems = false; + } + /** + * Finds all of the scroll stops between elements + * @internal + */ + setStops() { + this.updateScrollStops(); + const { scrollContainer: container } = this; + const { scrollLeft } = container; + const { width: containerWidth, left: containerLeft } = container.getBoundingClientRect(); + this.width = containerWidth; + let lastStop = 0; + let stops = this.scrollItems.map((item, index) => { + const { left, width } = item.getBoundingClientRect(); + const leftPosition = Math.round(left + scrollLeft - containerLeft); + const right = Math.round(leftPosition + width); + if (this.isRtl) { + return -right; + } + lastStop = right; + return index === 0 ? 0 : leftPosition; + }).concat(lastStop); + stops = this.fixScrollMisalign(stops); + stops.sort((a, b) => Math.abs(a) - Math.abs(b)); + this.scrollStops = stops; + this.setFlippers(); + } + /** + * Checks to see if the stops are returning values + * otherwise it will try to reinitialize them + * + * @returns boolean indicating that current scrollStops are valid non-zero values + * @internal + */ + validateStops(reinit = true) { + const hasStops = () => !!this.scrollStops.find((stop) => stop > 0); + if (!hasStops() && reinit) { + this.setStops(); + } + return hasStops(); + } + /** + * + */ + fixScrollMisalign(stops) { + if (this.isRtl && stops.some((stop) => stop > 0)) { + stops.sort((a, b) => b - a); + const offset = stops[0]; + stops = stops.map((stop) => stop - offset); + } + return stops; + } + /** + * Sets the controls view if enabled + * @internal + */ + setFlippers() { + var _a, _b; + const position = this.scrollContainer.scrollLeft; + (_a = this.previousFlipperContainer) === null || _a === void 0 ? void 0 : _a.classList.toggle("disabled", position === 0); + if (this.scrollStops) { + const lastStop = Math.abs(this.scrollStops[this.scrollStops.length - 1]); + (_b = this.nextFlipperContainer) === null || _b === void 0 ? void 0 : _b.classList.toggle("disabled", this.validateStops(false) && Math.abs(position) + this.width >= lastStop); + } + } + /** + * Function that can scroll an item into view. + * @param item - An item index, a scroll item or a child of one of the scroll items + * @param padding - Padding of the viewport where the active item shouldn't be + * @param rightPadding - Optional right padding. Uses the padding if not defined + * + * @public + */ + scrollInView(item, padding = 0, rightPadding) { + var _a; + if (typeof item !== "number" && item) { + item = this.scrollItems.findIndex((scrollItem) => scrollItem === item || scrollItem.contains(item)); + } + if (item !== void 0) { + rightPadding = rightPadding !== null && rightPadding !== void 0 ? rightPadding : padding; + const { scrollContainer: container, scrollStops, scrollItems: items } = this; + const { scrollLeft } = this.scrollContainer; + const { width: containerWidth } = container.getBoundingClientRect(); + const itemStart = scrollStops[item]; + const { width } = items[item].getBoundingClientRect(); + const itemEnd = itemStart + width; + const isBefore = scrollLeft + padding > itemStart; + if (isBefore || scrollLeft + containerWidth - rightPadding < itemEnd) { + const stops = [...scrollStops].sort((a, b) => isBefore ? b - a : a - b); + const scrollTo = (_a = stops.find((position) => isBefore ? position + padding < itemStart : position + containerWidth - (rightPadding !== null && rightPadding !== void 0 ? rightPadding : 0) > itemEnd)) !== null && _a !== void 0 ? _a : 0; + this.scrollToPosition(scrollTo); + } + } + } + /** + * Lets the user arrow left and right through the horizontal scroll + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + this.scrollToPrevious(); + break; + case "ArrowRight": + this.scrollToNext(); + break; + } + } + /** + * Scrolls items to the left + * @public + */ + scrollToPrevious() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop, index) => stop >= scrollPosition && (this.isRtl || index === this.scrollStops.length - 1 || this.scrollStops[index + 1] > scrollPosition)); + const right = Math.abs(this.scrollStops[current + 1]); + let nextIndex = this.scrollStops.findIndex((stop) => Math.abs(stop) + this.width > right); + if (nextIndex >= current || nextIndex === -1) { + nextIndex = current > 0 ? current - 1 : 0; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Scrolls items to the right + * @public + */ + scrollToNext() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop) => Math.abs(stop) >= Math.abs(scrollPosition)); + const outOfView = this.scrollStops.findIndex((stop) => Math.abs(scrollPosition) + this.width <= Math.abs(stop)); + let nextIndex = current; + if (outOfView > current + 2) { + nextIndex = outOfView - 2; + } else if (current < this.scrollStops.length - 2) { + nextIndex = current + 1; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Handles scrolling with easing + * @param position - starting position + * @param newPosition - position to scroll to + * @public + */ + scrollToPosition(newPosition, position = this.scrollContainer.scrollLeft) { + var _a; + if (this.scrolling) { + return; + } + this.scrolling = true; + const seconds = (_a = this.duration) !== null && _a !== void 0 ? _a : `${Math.abs(newPosition - position) / this.speed}s`; + this.content.style.setProperty("transition-duration", seconds); + const computedDuration = parseFloat(getComputedStyle(this.content).getPropertyValue("transition-duration")); + const transitionendHandler = (e) => { + if (e && e.target !== e.currentTarget) { + return; + } + this.content.style.setProperty("transition-duration", "0s"); + this.content.style.removeProperty("transform"); + this.scrollContainer.style.setProperty("scroll-behavior", "auto"); + this.scrollContainer.scrollLeft = newPosition; + this.setFlippers(); + this.content.removeEventListener("transitionend", transitionendHandler); + this.scrolling = false; + }; + if (computedDuration === 0) { + transitionendHandler(); + return; + } + this.content.addEventListener("transitionend", transitionendHandler); + const maxScrollValue = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth; + let transitionStop = this.scrollContainer.scrollLeft - Math.min(newPosition, maxScrollValue); + if (this.isRtl) { + transitionStop = this.scrollContainer.scrollLeft + Math.min(Math.abs(newPosition), maxScrollValue); + } + this.content.style.setProperty("transition-property", "transform"); + this.content.style.setProperty("transition-timing-function", this.easing); + this.content.style.setProperty("transform", `translateX(${transitionStop}px)`); + } + /** + * Monitors resize event on the horizontal-scroll element + * @public + */ + resized() { + if (this.resizeTimeout) { + this.resizeTimeout = clearTimeout(this.resizeTimeout); + } + this.resizeTimeout = setTimeout(() => { + this.width = this.scrollContainer.offsetWidth; + this.setFlippers(); + }, this.frameTime); + } + /** + * Monitors scrolled event on the content container + * @public + */ + scrolled() { + if (this.scrollTimeout) { + this.scrollTimeout = clearTimeout(this.scrollTimeout); + } + this.scrollTimeout = setTimeout(() => { + this.setFlippers(); + }, this.frameTime); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], HorizontalScroll.prototype, "speed", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "duration", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "easing", void 0); + __decorate([ + attr({ attribute: "flippers-hidden-from-at", converter: booleanConverter }) + ], HorizontalScroll.prototype, "flippersHiddenFromAT", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrolling", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrollItems", void 0); + __decorate([ + attr({ attribute: "view" }) + ], HorizontalScroll.prototype, "view", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js + var init_horizontal_scroll_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js + var init_horizontal_scroll2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js"() { + init_horizontal_scroll(); + init_horizontal_scroll_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js + function whitespaceFilter(value, index, array) { + return value.nodeType !== Node.TEXT_NODE ? true : typeof value.nodeValue === "string" && !!value.nodeValue.trim().length; + } + var init_whitespace_filter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js + var init_search_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js + var _Search, FormAssociatedSearch; + var init_search_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Search = class extends FoundationElement { + }; + FormAssociatedSearch = class extends FormAssociated(_Search) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.js + var Search, DelegatesARIASearch; + var init_search = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_search_form_associated(); + Search = class extends FormAssociatedSearch { + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Handles the control's clear value event + * @public + */ + handleClearInput() { + this.value = ""; + this.control.focus(); + this.handleChange(); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Search.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "autofocus", void 0); + __decorate([ + attr + ], Search.prototype, "placeholder", void 0); + __decorate([ + attr + ], Search.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "minlength", void 0); + __decorate([ + attr + ], Search.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "spellcheck", void 0); + __decorate([ + observable + ], Search.prototype, "defaultSlottedNodes", void 0); + DelegatesARIASearch = class { + }; + applyMixins(DelegatesARIASearch, ARIAGlobalStatesAndProperties); + applyMixins(Search, StartEnd, DelegatesARIASearch); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/index.js + var init_search2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/index.js"() { + init_search_template(); + init_search(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js + var _Select, FormAssociatedSelect; + var init_select_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js"() { + init_listbox_element(); + init_form_associated(); + _Select = class extends ListboxElement { + }; + FormAssociatedSelect = class extends FormAssociated(_Select) { + constructor() { + super(...arguments); + this.proxy = document.createElement("select"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.js + var Select, DelegatesARIASelect; + var init_select = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_apply_mixins(); + init_select_form_associated(); + init_select_options(); + Select = class extends FormAssociatedSelect { + constructor() { + super(...arguments); + this.open = false; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + } + /** + * Sets focus and synchronizes ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged(prev, next) { + if (!this.collapsible) { + return; + } + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + this.indexWhenOpened = this.selectedIndex; + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The component is collapsible when in single-selection mode with no size attribute. + * + * @internal + */ + get collapsible() { + return !(this.multiple || typeof this.size === "number"); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c, _d, _e, _f, _g; + const prev = `${this._value}`; + if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.length) { + const selectedIndex = this._options.findIndex((el2) => el2.value === next); + const prevSelectedValue = (_c = (_b = this._options[this.selectedIndex]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null; + const nextSelectedValue = (_e = (_d = this._options[selectedIndex]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : null; + if (selectedIndex === -1 || prevSelectedValue !== nextSelectedValue) { + next = ""; + this.selectedIndex = selectedIndex; + } + next = (_g = (_f = this.firstSelectedOption) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + this.updateDisplayValue(); + } + } + /** + * Sets the value and display value to match the first selected option. + * + * @param shouldEmit - if true, the input and change events will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a, _b; + if (this.$fastController.isConnected) { + this.value = (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : ""; + } + if (shouldEmit) { + this.$emit("input"); + this.$emit("change", this, { + bubbles: true, + composed: void 0 + }); + } + } + /** + * Updates the proxy value when the selected index changes. + * + * @param prev - the previous selected index + * @param next - the next selected index + * + * @internal + */ + selectedIndexChanged(prev, next) { + super.selectedIndexChanged(prev, next); + this.updateValue(); + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * The value displayed on the button. + * + * @public + */ + get displayValue() { + var _a, _b; + Observable.track(this, "displayValue"); + return (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : ""; + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + this.setProxyOptions(); + super.setDefaultSelectedOption(); + if (this.selectedIndex === -1) { + this.selectedIndex = 0; + } + } + /** + * Handle opening and closing the listbox when the select is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + if (this.disabled) { + return; + } + if (this.open) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && captured.disabled) { + return; + } + } + super.clickHandler(e); + this.open = this.collapsible && !this.open; + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + return true; + } + /** + * Handles focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + var _a; + super.focusoutHandler(e); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.includes(focusTarget))) { + this.open = false; + if (this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + } + } + /** + * Updates the value when an option's value changes. + * + * @param source - the source object + * @param propertyName - the property to evaluate + * + * @internal + * @override + */ + handleChange(source, propertyName) { + super.handleChange(source, propertyName); + if (propertyName === "value") { + this.updateValue(); + } + } + /** + * Synchronize the form-associated proxy and updates the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "value"); + }); + super.slottedOptionsChanged(prev, next); + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.subscribe(this, "value"); + }); + this.setProxyOptions(); + this.updateValue(); + } + /** + * Prevents focus when size is set and a scrollbar is clicked. + * + * @param e - the mouse event object + * + * @override + * @internal + */ + mousedownHandler(e) { + var _a; + if (e.offsetX >= 0 && e.offsetX <= ((_a = this.listbox) === null || _a === void 0 ? void 0 : _a.scrollWidth)) { + return super.mousedownHandler(e); + } + return this.collapsible; + } + /** + * Sets the multiple property on the proxy element. + * + * @param prev - the previous multiple value + * @param next - the current multiple value + */ + multipleChanged(prev, next) { + super.multipleChanged(prev, next); + if (this.proxy) { + this.proxy.multiple = next; + } + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @override + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + super.selectedOptionsChanged(prev, next); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o, i) => { + var _a2; + const proxyOption = (_a2 = this.proxy) === null || _a2 === void 0 ? void 0 : _a2.options.item(i); + if (proxyOption) { + proxyOption.selected = o.selected; + } + }); + } + /** + * Sets the selected index to match the first option with the selected attribute, or + * the first selectable option. + * + * @override + * @internal + */ + setDefaultSelectedOption() { + var _a; + const options = (_a = this.options) !== null && _a !== void 0 ? _a : Array.from(this.children).filter(Listbox.slottedOptionFilter); + const selectedIndex = options === null || options === void 0 ? void 0 : options.findIndex((el2) => el2.hasAttribute("selected") || el2.selected || el2.value === this.value); + if (selectedIndex !== -1) { + this.selectedIndex = selectedIndex; + return; + } + this.selectedIndex = 0; + } + /** + * Resets and fills the proxy to match the component's options. + * + * @internal + */ + setProxyOptions() { + if (this.proxy instanceof HTMLSelectElement && this.options) { + this.proxy.options.length = 0; + this.options.forEach((option) => { + const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null); + if (proxyOption) { + this.proxy.options.add(proxyOption); + } + }); + } + } + /** + * Handle keyboard interaction for the select. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + super.keydownHandler(e); + const key = e.key || e.key.charCodeAt(0); + switch (key) { + case keySpace: { + e.preventDefault(); + if (this.collapsible && this.typeAheadExpired) { + this.open = !this.open; + } + break; + } + case keyHome: + case keyEnd: { + e.preventDefault(); + break; + } + case keyEnter: { + e.preventDefault(); + this.open = !this.open; + break; + } + case keyEscape: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + break; + } + case keyTab: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + return true; + } + } + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + this.indexWhenOpened = this.selectedIndex; + } + return !(key === keyArrowDown || key === keyArrowUp); + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + this.addEventListener("contentchange", this.updateDisplayValue); + } + disconnectedCallback() { + this.removeEventListener("contentchange", this.updateDisplayValue); + super.disconnectedCallback(); + } + /** + * Updates the proxy's size property when the size attribute changes. + * + * @param prev - the previous size + * @param next - the current size + * + * @override + * @internal + */ + sizeChanged(prev, next) { + super.sizeChanged(prev, next); + if (this.proxy) { + this.proxy.size = next; + } + } + /** + * + * @internal + */ + updateDisplayValue() { + if (this.collapsible) { + Observable.notify(this, "displayValue"); + } + } + }; + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Select.prototype, "open", void 0); + __decorate([ + volatile + ], Select.prototype, "collapsible", null); + __decorate([ + observable + ], Select.prototype, "control", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Select.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Select.prototype, "position", void 0); + __decorate([ + observable + ], Select.prototype, "maxHeight", void 0); + DelegatesARIASelect = class { + }; + __decorate([ + observable + ], DelegatesARIASelect.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIASelect, DelegatesARIAListbox); + applyMixins(Select, StartEnd, DelegatesARIASelect); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js + var selectTemplate; + var init_select_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js"() { + init_esm(); + init_listbox(); + init_start_end(); + selectTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/index.js + var init_select2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/index.js"() { + init_select(); + init_select_options(); + init_select_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js + var init_skeleton_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js + var Skeleton; + var init_skeleton = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Skeleton = class extends FoundationElement { + constructor() { + super(...arguments); + this.shape = "rect"; + } + }; + __decorate([ + attr + ], Skeleton.prototype, "fill", void 0); + __decorate([ + attr + ], Skeleton.prototype, "shape", void 0); + __decorate([ + attr + ], Skeleton.prototype, "pattern", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Skeleton.prototype, "shimmer", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js + var init_skeleton2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js"() { + init_skeleton_template(); + init_skeleton(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js + var init_slider_label_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js + function convertPixelToPercent(pixelPos, minPosition, maxPosition, direction) { + let pct = limit(0, 1, (pixelPos - minPosition) / (maxPosition - minPosition)); + if (direction === Direction.rtl) { + pct = 1 - pct; + } + return pct; + } + var init_slider_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js"() { + init_dist2(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js + var defaultConfig, SliderLabel; + var init_slider_label = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_slider_utilities(); + init_foundation_element(); + defaultConfig = { + min: 0, + max: 0, + direction: Direction.ltr, + orientation: Orientation.horizontal, + disabled: false + }; + SliderLabel = class extends FoundationElement { + constructor() { + super(...arguments); + this.hideMark = false; + this.sliderDirection = Direction.ltr; + this.getSliderConfiguration = () => { + if (!this.isSliderConfig(this.parentNode)) { + this.sliderDirection = defaultConfig.direction || Direction.ltr; + this.sliderOrientation = defaultConfig.orientation || Orientation.horizontal; + this.sliderMaxPosition = defaultConfig.max; + this.sliderMinPosition = defaultConfig.min; + } else { + const parentSlider = this.parentNode; + const { min, max, direction, orientation, disabled } = parentSlider; + if (disabled !== void 0) { + this.disabled = disabled; + } + this.sliderDirection = direction || Direction.ltr; + this.sliderOrientation = orientation || Orientation.horizontal; + this.sliderMaxPosition = max; + this.sliderMinPosition = min; + } + }; + this.positionAsStyle = () => { + const direction = this.sliderDirection ? this.sliderDirection : Direction.ltr; + const pct = convertPixelToPercent(Number(this.position), Number(this.sliderMinPosition), Number(this.sliderMaxPosition)); + let rightNum = Math.round((1 - pct) * 100); + let leftNum = Math.round(pct * 100); + if (Number.isNaN(leftNum) && Number.isNaN(rightNum)) { + rightNum = 50; + leftNum = 50; + } + if (this.sliderOrientation === Orientation.horizontal) { + return direction === Direction.rtl ? `right: ${leftNum}%; left: ${rightNum}%;` : `left: ${leftNum}%; right: ${rightNum}%;`; + } else { + return `top: ${leftNum}%; bottom: ${rightNum}%;`; + } + }; + } + positionChanged() { + this.positionStyle = this.positionAsStyle(); + } + /** + * @internal + */ + sliderOrientationChanged() { + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.getSliderConfiguration(); + this.positionStyle = this.positionAsStyle(); + this.notifier = Observable.getNotifier(this.parentNode); + this.notifier.subscribe(this, "orientation"); + this.notifier.subscribe(this, "direction"); + this.notifier.subscribe(this, "max"); + this.notifier.subscribe(this, "min"); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.notifier.unsubscribe(this, "orientation"); + this.notifier.unsubscribe(this, "direction"); + this.notifier.unsubscribe(this, "max"); + this.notifier.unsubscribe(this, "min"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "direction": + this.sliderDirection = source.direction; + break; + case "orientation": + this.sliderOrientation = source.orientation; + break; + case "max": + this.sliderMaxPosition = source.max; + break; + case "min": + this.sliderMinPosition = source.min; + break; + default: + break; + } + this.positionStyle = this.positionAsStyle(); + } + isSliderConfig(node) { + return node.max !== void 0 && node.min !== void 0; + } + }; + __decorate([ + observable + ], SliderLabel.prototype, "positionStyle", void 0); + __decorate([ + attr + ], SliderLabel.prototype, "position", void 0); + __decorate([ + attr({ attribute: "hide-mark", mode: "boolean" }) + ], SliderLabel.prototype, "hideMark", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], SliderLabel.prototype, "disabled", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderOrientation", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMinPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMaxPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js + var init_slider_label2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js"() { + init_slider_label_template(); + init_slider_label(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js + var init_slider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js + var _Slider, FormAssociatedSlider; + var init_slider_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Slider = class extends FoundationElement { + }; + FormAssociatedSlider = class extends FormAssociated(_Slider) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js + var SliderMode, Slider; + var init_slider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_slider_utilities(); + init_slider_form_associated(); + SliderMode = { + singleValue: "single-value" + }; + Slider = class extends FormAssociatedSlider { + constructor() { + super(...arguments); + this.direction = Direction.ltr; + this.isDragging = false; + this.trackWidth = 0; + this.trackMinWidth = 0; + this.trackHeight = 0; + this.trackLeft = 0; + this.trackMinHeight = 0; + this.valueTextFormatter = () => null; + this.min = 0; + this.max = 10; + this.step = 1; + this.orientation = Orientation.horizontal; + this.mode = SliderMode.singleValue; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + if (e.key === keyHome) { + e.preventDefault(); + this.value = `${this.min}`; + } else if (e.key === keyEnd) { + e.preventDefault(); + this.value = `${this.max}`; + } else if (!e.shiftKey) { + switch (e.key) { + case keyArrowRight: + case keyArrowUp: + e.preventDefault(); + this.increment(); + break; + case keyArrowLeft: + case keyArrowDown: + e.preventDefault(); + this.decrement(); + break; + } + } + }; + this.setupTrackConstraints = () => { + const clientRect = this.track.getBoundingClientRect(); + this.trackWidth = this.track.clientWidth; + this.trackMinWidth = this.track.clientLeft; + this.trackHeight = clientRect.bottom; + this.trackMinHeight = clientRect.top; + this.trackLeft = this.getBoundingClientRect().left; + if (this.trackWidth === 0) { + this.trackWidth = 1; + } + }; + this.setupListeners = (remove = false) => { + const eventAction = `${remove ? "remove" : "add"}EventListener`; + this[eventAction]("keydown", this.keypressHandler); + this[eventAction]("mousedown", this.handleMouseDown); + this.thumb[eventAction]("mousedown", this.handleThumbMouseDown, { + passive: true + }); + this.thumb[eventAction]("touchstart", this.handleThumbMouseDown, { + passive: true + }); + if (remove) { + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + } + }; + this.initialValue = ""; + this.handleThumbMouseDown = (event) => { + if (event) { + if (this.readOnly || this.disabled || event.defaultPrevented) { + return; + } + event.target.focus(); + } + const eventAction = `${event !== null ? "add" : "remove"}EventListener`; + window[eventAction]("mouseup", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchmove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchend", this.handleWindowMouseUp); + this.isDragging = event !== null; + }; + this.handleMouseMove = (e) => { + if (this.readOnly || this.disabled || e.defaultPrevented) { + return; + } + const sourceEvent = window.TouchEvent && e instanceof TouchEvent ? e.touches[0] : e; + const eventValue = this.orientation === Orientation.horizontal ? sourceEvent.pageX - document.documentElement.scrollLeft - this.trackLeft : sourceEvent.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(eventValue)}`; + }; + this.calculateNewValue = (rawValue) => { + const newPosition = convertPixelToPercent(rawValue, this.orientation === Orientation.horizontal ? this.trackMinWidth : this.trackMinHeight, this.orientation === Orientation.horizontal ? this.trackWidth : this.trackHeight, this.direction); + const newValue = (this.max - this.min) * newPosition + this.min; + return this.convertToConstrainedValue(newValue); + }; + this.handleWindowMouseUp = (event) => { + this.stopDragging(); + }; + this.stopDragging = () => { + this.isDragging = false; + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + }; + this.handleMouseDown = (e) => { + const eventAction = `${e !== null ? "add" : "remove"}EventListener`; + if (e === null || !this.disabled && !this.readOnly) { + window[eventAction]("mouseup", this.handleWindowMouseUp); + window.document[eventAction]("mouseleave", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove); + if (e) { + e.preventDefault(); + this.setupTrackConstraints(); + e.target.focus(); + const controlValue = this.orientation === Orientation.horizontal ? e.pageX - document.documentElement.scrollLeft - this.trackLeft : e.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(controlValue)}`; + } + } + }; + this.convertToConstrainedValue = (value) => { + if (isNaN(value)) { + value = this.min; + } + let constrainedValue = value - this.min; + const roundedConstrainedValue = Math.round(constrainedValue / this.step); + const remainderValue = constrainedValue - roundedConstrainedValue * (this.stepMultiplier * this.step) / this.stepMultiplier; + constrainedValue = remainderValue >= Number(this.step) / 2 ? constrainedValue - remainderValue + Number(this.step) : constrainedValue - remainderValue; + return constrainedValue + this.min; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * @internal + */ + valueChanged(previous, next) { + super.valueChanged(previous, next); + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + this.$emit("change"); + } + minChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.min = `${this.min}`; + } + this.validate(); + } + maxChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.max = `${this.max}`; + } + this.validate(); + } + stepChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.step = `${this.step}`; + } + this.updateStepMultiplier(); + this.validate(); + } + orientationChanged() { + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "range"); + this.direction = getDirection(this); + this.updateStepMultiplier(); + this.setupTrackConstraints(); + this.setupListeners(); + this.setupDefaultValue(); + this.setThumbPositionForOrientation(this.direction); + } + /** + * @internal + */ + disconnectedCallback() { + this.setupListeners(true); + } + /** + * Increment the value by the step + * + * @public + */ + increment() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) + Number(this.step) : Number(this.value) - Number(this.step); + const incrementedVal = this.convertToConstrainedValue(newVal); + const incrementedValString = incrementedVal < Number(this.max) ? `${incrementedVal}` : `${this.max}`; + this.value = incrementedValString; + } + /** + * Decrement the value by the step + * + * @public + */ + decrement() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) - Number(this.step) : Number(this.value) + Number(this.step); + const decrementedVal = this.convertToConstrainedValue(newVal); + const decrementedValString = decrementedVal > Number(this.min) ? `${decrementedVal}` : `${this.min}`; + this.value = decrementedValString; + } + /** + * Places the thumb based on the current value + * + * @public + * @param direction - writing mode + */ + setThumbPositionForOrientation(direction) { + const newPct = convertPixelToPercent(Number(this.value), Number(this.min), Number(this.max), direction); + const percentage = (1 - newPct) * 100; + if (this.orientation === Orientation.horizontal) { + this.position = this.isDragging ? `right: ${percentage}%; transition: none;` : `right: ${percentage}%; transition: all 0.2s ease;`; + } else { + this.position = this.isDragging ? `bottom: ${percentage}%; transition: none;` : `bottom: ${percentage}%; transition: all 0.2s ease;`; + } + } + /** + * Update the step multiplier used to ensure rounding errors from steps that + * are not whole numbers + */ + updateStepMultiplier() { + const stepString = this.step + ""; + const decimalPlacesOfStep = !!(this.step % 1) ? stepString.length - stepString.indexOf(".") - 1 : 0; + this.stepMultiplier = Math.pow(10, decimalPlacesOfStep); + } + get midpoint() { + return `${this.convertToConstrainedValue((this.max + this.min) / 2)}`; + } + setupDefaultValue() { + if (typeof this.value === "string") { + if (this.value.length === 0) { + this.initialValue = this.midpoint; + } else { + const value = parseFloat(this.value); + if (!Number.isNaN(value) && (value < this.min || value > this.max)) { + this.value = this.midpoint; + } + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Slider.prototype, "readOnly", void 0); + __decorate([ + observable + ], Slider.prototype, "direction", void 0); + __decorate([ + observable + ], Slider.prototype, "isDragging", void 0); + __decorate([ + observable + ], Slider.prototype, "position", void 0); + __decorate([ + observable + ], Slider.prototype, "trackWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "trackLeft", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "valueTextFormatter", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "step", void 0); + __decorate([ + attr + ], Slider.prototype, "orientation", void 0); + __decorate([ + attr + ], Slider.prototype, "mode", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js + var init_slider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js"() { + init_slider_template(); + init_slider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js + var init_switch_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js + var _Switch, FormAssociatedSwitch; + var init_switch_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Switch = class extends FoundationElement { + }; + FormAssociatedSwitch = class extends CheckableFormAssociated(_Switch) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js + var Switch; + var init_switch = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_switch_form_associated(); + Switch = class extends FormAssociatedSwitch { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + this.readOnly ? this.classList.add("readonly") : this.classList.remove("readonly"); + } + /** + * @internal + */ + checkedChanged(prev, next) { + super.checkedChanged(prev, next); + this.checked ? this.classList.add("checked") : this.classList.remove("checked"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Switch.prototype, "readOnly", void 0); + __decorate([ + observable + ], Switch.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js + var init_switch2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js"() { + init_switch_template(); + init_switch(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js + var tabPanelTemplate; + var init_tab_panel_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js"() { + init_esm(); + tabPanelTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js + var TabPanel; + var init_tab_panel = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js"() { + init_foundation_element(); + TabPanel = class extends FoundationElement { + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js + var init_tab_panel2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js"() { + init_tab_panel_template(); + init_tab_panel(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js + var tabTemplate; + var init_tab_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js"() { + init_esm(); + tabTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js + var Tab; + var init_tab = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Tab = class extends FoundationElement { + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tab.prototype, "disabled", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js + var init_tab2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js"() { + init_tab_template(); + init_tab(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js + var tabsTemplate; + var init_tabs_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js"() { + init_esm(); + init_start_end(); + tabsTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js + var TabsOrientation, Tabs; + var init_tabs = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TabsOrientation = { + vertical: "vertical", + horizontal: "horizontal" + }; + Tabs = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = TabsOrientation.horizontal; + this.activeindicator = true; + this.showActiveIndicator = true; + this.prevActiveTabIndex = 0; + this.activeTabIndex = 0; + this.ticking = false; + this.change = () => { + this.$emit("change", this.activetab); + }; + this.isDisabledElement = (el2) => { + return el2.getAttribute("aria-disabled") === "true"; + }; + this.isHiddenElement = (el2) => { + return el2.hasAttribute("hidden"); + }; + this.isFocusableElement = (el2) => { + return !this.isDisabledElement(el2) && !this.isHiddenElement(el2); + }; + this.setTabs = () => { + const gridHorizontalProperty = "gridColumn"; + const gridVerticalProperty = "gridRow"; + const gridProperty = this.isHorizontal() ? gridHorizontalProperty : gridVerticalProperty; + this.activeTabIndex = this.getActiveIndex(); + this.showActiveIndicator = false; + this.tabs.forEach((tab, index) => { + if (tab.slot === "tab") { + const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab); + if (this.activeindicator && this.isFocusableElement(tab)) { + this.showActiveIndicator = true; + } + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tab.setAttribute("id", tabId); + tab.setAttribute("aria-selected", isActiveTab ? "true" : "false"); + tab.setAttribute("aria-controls", tabpanelId); + tab.addEventListener("click", this.handleTabClick); + tab.addEventListener("keydown", this.handleTabKeyDown); + tab.setAttribute("tabindex", isActiveTab ? "0" : "-1"); + if (isActiveTab) { + this.activetab = tab; + this.activeid = tabId; + } + } + tab.style[gridHorizontalProperty] = ""; + tab.style[gridVerticalProperty] = ""; + tab.style[gridProperty] = `${index + 1}`; + !this.isHorizontal() ? tab.classList.add("vertical") : tab.classList.remove("vertical"); + }); + }; + this.setTabPanels = () => { + this.tabpanels.forEach((tabpanel, index) => { + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tabpanel.setAttribute("id", tabpanelId); + tabpanel.setAttribute("aria-labelledby", tabId); + this.activeTabIndex !== index ? tabpanel.setAttribute("hidden", "") : tabpanel.removeAttribute("hidden"); + }); + }; + this.handleTabClick = (event) => { + const selectedTab = event.currentTarget; + if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) { + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = this.tabs.indexOf(selectedTab); + this.setComponent(); + } + }; + this.handleTabKeyDown = (event) => { + if (this.isHorizontal()) { + switch (event.key) { + case keyArrowLeft: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowRight: + event.preventDefault(); + this.adjustForward(event); + break; + } + } else { + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowDown: + event.preventDefault(); + this.adjustForward(event); + break; + } + } + switch (event.key) { + case keyHome: + event.preventDefault(); + this.adjust(-this.activeTabIndex); + break; + case keyEnd: + event.preventDefault(); + this.adjust(this.tabs.length - this.activeTabIndex - 1); + break; + } + }; + this.adjustForward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) + 1 : 1; + if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (this.activetab && index === group.indexOf(this.activetab)) { + break; + } else if (index + 1 >= group.length) { + index = 0; + } else { + index += 1; + } + } + }; + this.adjustBackward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + while (index >= 0 && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.moveToTabByIndex = (group, index) => { + const tab = group[index]; + this.activetab = tab; + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = index; + tab.focus(); + this.setComponent(); + }; + } + /** + * @internal + */ + orientationChanged() { + if (this.$fastController.isConnected) { + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + activeidChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabsChanged() { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabpanelsChanged() { + if (this.$fastController.isConnected && this.tabpanels.length <= this.tabs.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + getActiveIndex() { + const id = this.activeid; + if (id !== void 0) { + return this.tabIds.indexOf(this.activeid) === -1 ? 0 : this.tabIds.indexOf(this.activeid); + } else { + return 0; + } + } + getTabIds() { + return this.tabs.map((tab) => { + var _a; + return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`; + }); + } + getTabPanelIds() { + return this.tabpanels.map((tabPanel) => { + var _a; + return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`; + }); + } + setComponent() { + if (this.activeTabIndex !== this.prevActiveTabIndex) { + this.activeid = this.tabIds[this.activeTabIndex]; + this.focusTab(); + this.change(); + } + } + isHorizontal() { + return this.orientation === TabsOrientation.horizontal; + } + handleActiveIndicatorPosition() { + if (this.showActiveIndicator && this.activeindicator && this.activeTabIndex !== this.prevActiveTabIndex) { + if (this.ticking) { + this.ticking = false; + } else { + this.ticking = true; + this.animateActiveIndicator(); + } + } + } + animateActiveIndicator() { + this.ticking = true; + const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow"; + const translateProperty = this.isHorizontal() ? "translateX" : "translateY"; + const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop"; + const prev = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + const next = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`; + const dif = next - prev; + this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`; + this.activeIndicatorRef.classList.add("activeIndicatorTransition"); + this.activeIndicatorRef.addEventListener("transitionend", () => { + this.ticking = false; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`; + this.activeIndicatorRef.classList.remove("activeIndicatorTransition"); + }); + } + /** + * The adjust method for FASTTabs + * @public + * @remarks + * This method allows the active index to be adjusted by numerical increments + */ + adjust(adjustment) { + const focusableTabs = this.tabs.filter((t) => this.isFocusableElement(t)); + const currentActiveTabIndex = focusableTabs.indexOf(this.activetab); + const nextTabIndex = limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment); + const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]); + if (nextIndex > -1) { + this.moveToTabByIndex(this.tabs, nextIndex); + } + } + focusTab() { + this.tabs[this.activeTabIndex].focus(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.activeTabIndex = this.getActiveIndex(); + } + }; + __decorate([ + attr + ], Tabs.prototype, "orientation", void 0); + __decorate([ + attr + ], Tabs.prototype, "activeid", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabs", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabpanels", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Tabs.prototype, "activeindicator", void 0); + __decorate([ + observable + ], Tabs.prototype, "activeIndicatorRef", void 0); + __decorate([ + observable + ], Tabs.prototype, "showActiveIndicator", void 0); + applyMixins(Tabs, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js + var init_tabs2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js"() { + init_tabs_template(); + init_tabs(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js + var _TextArea, FormAssociatedTextArea; + var init_text_area_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextArea = class extends FoundationElement { + }; + FormAssociatedTextArea = class extends FormAssociated(_TextArea) { + constructor() { + super(...arguments); + this.proxy = document.createElement("textarea"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js + var TextAreaResize; + var init_text_area_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js"() { + TextAreaResize = { + /** + * No resize. + */ + none: "none", + /** + * Resize vertically and horizontally. + */ + both: "both", + /** + * Resize horizontally. + */ + horizontal: "horizontal", + /** + * Resize vertically. + */ + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js + var TextArea; + var init_text_area = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js"() { + init_tslib_es6(); + init_esm(); + init_text_field(); + init_apply_mixins(); + init_text_area_form_associated(); + init_text_area_options(); + TextArea = class extends FormAssociatedTextArea { + constructor() { + super(...arguments); + this.resize = TextAreaResize.none; + this.cols = 20; + this.handleTextInput = () => { + this.value = this.control.value; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.readOnly = this.readOnly; + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.autofocus = this.autofocus; + } + } + listChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.setAttribute("list", this.list); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.maxLength = this.maxlength; + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.minLength = this.minlength; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * Selects all the text in the text area + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "readOnly", void 0); + __decorate([ + attr + ], TextArea.prototype, "resize", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], TextArea.prototype, "formId", void 0); + __decorate([ + attr + ], TextArea.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "minlength", void 0); + __decorate([ + attr + ], TextArea.prototype, "name", void 0); + __decorate([ + attr + ], TextArea.prototype, "placeholder", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "cols", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "rows", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextArea.prototype, "defaultSlottedNodes", void 0); + applyMixins(TextArea, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js + var textAreaTemplate; + var init_text_area_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js"() { + init_esm(); + init_text_area(); + textAreaTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js + var init_text_area2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js"() { + init_text_area_template(); + init_text_area(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js + var textFieldTemplate; + var init_text_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js"() { + init_esm(); + init_start_end(); + init_whitespace_filter(); + textFieldTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js + var init_text_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js"() { + init_text_field_template(); + init_text_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js + var init_toolbar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js + function getRootActiveElement(element) { + const rootNode = element.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.activeElement; + } + return document.activeElement; + } + var init_root_active_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js + var ToolbarArrowKeyMap, Toolbar, DelegatesARIAToolbar; + var init_toolbar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + init_direction(); + init_root_active_element(); + ToolbarArrowKeyMap = Object.freeze({ + [ArrowKeys.ArrowUp]: { + [Orientation.vertical]: -1 + }, + [ArrowKeys.ArrowDown]: { + [Orientation.vertical]: 1 + }, + [ArrowKeys.ArrowLeft]: { + [Orientation.horizontal]: { + [Direction.ltr]: -1, + [Direction.rtl]: 1 + } + }, + [ArrowKeys.ArrowRight]: { + [Orientation.horizontal]: { + [Direction.ltr]: 1, + [Direction.rtl]: -1 + } + } + }); + Toolbar = class _Toolbar extends FoundationElement { + constructor() { + super(...arguments); + this._activeIndex = 0; + this.direction = Direction.ltr; + this.orientation = Orientation.horizontal; + } + /** + * The index of the currently focused element, clamped between 0 and the last element. + * + * @internal + */ + get activeIndex() { + Observable.track(this, "activeIndex"); + return this._activeIndex; + } + set activeIndex(value) { + if (this.$fastController.isConnected) { + this._activeIndex = limit(0, this.focusableElements.length - 1, value); + Observable.notify(this, "activeIndex"); + } + } + slottedItemsChanged() { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * Set the activeIndex when a focusable element in the toolbar is clicked. + * + * @internal + */ + mouseDownHandler(e) { + var _a; + const activeIndex = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a.findIndex((x) => x.contains(e.target)); + if (activeIndex > -1 && this.activeIndex !== activeIndex) { + this.setFocusedElement(activeIndex); + } + return true; + } + childItemsChanged(prev, next) { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + } + /** + * When the toolbar receives focus, set the currently active element as focused. + * + * @internal + */ + focusinHandler(e) { + const relatedTarget = e.relatedTarget; + if (!relatedTarget || this.contains(relatedTarget)) { + return; + } + this.setFocusedElement(); + } + /** + * Determines a value that can be used to iterate a list with the arrow keys. + * + * @param this - An element with an orientation and direction + * @param key - The event key value + * @internal + */ + getDirectionalIncrementer(key) { + var _a, _b, _c, _d, _e; + return (_e = (_c = (_b = (_a = ToolbarArrowKeyMap[key]) === null || _a === void 0 ? void 0 : _a[this.orientation]) === null || _b === void 0 ? void 0 : _b[this.direction]) !== null && _c !== void 0 ? _c : (_d = ToolbarArrowKeyMap[key]) === null || _d === void 0 ? void 0 : _d[this.orientation]) !== null && _e !== void 0 ? _e : 0; + } + /** + * Handle keyboard events for the toolbar. + * + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (!(key in ArrowKeys) || e.defaultPrevented || e.shiftKey) { + return true; + } + const incrementer = this.getDirectionalIncrementer(key); + if (!incrementer) { + return !e.target.closest("[role=radiogroup]"); + } + const nextIndex = this.activeIndex + incrementer; + if (this.focusableElements[nextIndex]) { + e.preventDefault(); + } + this.setFocusedElement(nextIndex); + return true; + } + /** + * get all the slotted elements + * @internal + */ + get allSlottedItems() { + return [ + ...this.start.assignedElements(), + ...this.slottedItems, + ...this.end.assignedElements() + ]; + } + /** + * Prepare the slotted elements which can be focusable. + * + * @internal + */ + reduceFocusableElements() { + var _a; + const previousFocusedElement = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a[this.activeIndex]; + this.focusableElements = this.allSlottedItems.reduce(_Toolbar.reduceFocusableItems, []); + const adjustedActiveIndex = this.focusableElements.indexOf(previousFocusedElement); + this.activeIndex = Math.max(0, adjustedActiveIndex); + this.setFocusableElements(); + } + /** + * Set the activeIndex and focus the corresponding control. + * + * @param activeIndex - The new index to set + * @internal + */ + setFocusedElement(activeIndex = this.activeIndex) { + this.activeIndex = activeIndex; + this.setFocusableElements(); + if (this.focusableElements[this.activeIndex] && // Don't focus the toolbar element if some event handlers moved + // the focus on another element in the page. + this.contains(getRootActiveElement(this))) { + this.focusableElements[this.activeIndex].focus(); + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceFocusableItems(elements2, element) { + var _a, _b, _c, _d; + const isRoleRadio = element.getAttribute("role") === "radio"; + const isFocusableFastElement = (_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus; + const hasFocusableShadow = Array.from((_d = (_c = element.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll("*")) !== null && _d !== void 0 ? _d : []).some((x) => isFocusable(x)); + if (!element.hasAttribute("disabled") && !element.hasAttribute("hidden") && (isFocusable(element) || isRoleRadio || isFocusableFastElement || hasFocusableShadow)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Toolbar.reduceFocusableItems, [])); + } + return elements2; + } + /** + * @internal + */ + setFocusableElements() { + if (this.$fastController.isConnected && this.focusableElements.length > 0) { + this.focusableElements.forEach((element, index) => { + element.tabIndex = this.activeIndex === index ? 0 : -1; + }); + } + } + }; + __decorate([ + observable + ], Toolbar.prototype, "direction", void 0); + __decorate([ + attr + ], Toolbar.prototype, "orientation", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedItems", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedLabel", void 0); + __decorate([ + observable + ], Toolbar.prototype, "childItems", void 0); + DelegatesARIAToolbar = class { + }; + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], DelegatesARIAToolbar.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], DelegatesARIAToolbar.prototype, "ariaLabel", void 0); + applyMixins(DelegatesARIAToolbar, ARIAGlobalStatesAndProperties); + applyMixins(Toolbar, StartEnd, DelegatesARIAToolbar); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js + var init_toolbar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js"() { + init_toolbar_template(); + init_toolbar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js + var init_tooltip_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js + var TooltipPosition; + var init_tooltip_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js"() { + TooltipPosition = { + /** + * The tooltip is positioned above the element + */ + top: "top", + /** + * The tooltip is positioned to the right of the element + */ + right: "right", + /** + * The tooltip is positioned below the element + */ + bottom: "bottom", + /** + * The tooltip is positioned to the left of the element + */ + left: "left", + /** + * The tooltip is positioned before the element + */ + start: "start", + /** + * The tooltip is positioned after the element + */ + end: "end", + /** + * The tooltip is positioned above the element and to the left + */ + topLeft: "top-left", + /** + * The tooltip is positioned above the element and to the right + */ + topRight: "top-right", + /** + * The tooltip is positioned below the element and to the left + */ + bottomLeft: "bottom-left", + /** + * The tooltip is positioned below the element and to the right + */ + bottomRight: "bottom-right", + /** + * The tooltip is positioned above the element and to the left + */ + topStart: "top-start", + /** + * The tooltip is positioned above the element and to the right + */ + topEnd: "top-end", + /** + * The tooltip is positioned below the element and to the left + */ + bottomStart: "bottom-start", + /** + * The tooltip is positioned below the element and to the right + */ + bottomEnd: "bottom-end" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js + var Tooltip; + var init_tooltip = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + init_tooltip_options(); + Tooltip = class extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.delay = 300; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.horizontalInset = "false"; + this.verticalInset = "false"; + this.horizontalScaling = "content"; + this.verticalScaling = "content"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = void 0; + this.tooltipVisible = false; + this.currentDirection = Direction.ltr; + this.showDelayTimer = null; + this.hideDelayTimer = null; + this.isAnchorHoveredFocused = false; + this.isRegionHovered = false; + this.handlePositionChange = (ev) => { + this.classList.toggle("top", this.region.verticalPosition === "start"); + this.classList.toggle("bottom", this.region.verticalPosition === "end"); + this.classList.toggle("inset-top", this.region.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.region.verticalPosition === "insetEnd"); + this.classList.toggle("center-vertical", this.region.verticalPosition === "center"); + this.classList.toggle("left", this.region.horizontalPosition === "start"); + this.classList.toggle("right", this.region.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.region.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.region.horizontalPosition === "insetEnd"); + this.classList.toggle("center-horizontal", this.region.horizontalPosition === "center"); + }; + this.handleRegionMouseOver = (ev) => { + this.isRegionHovered = true; + }; + this.handleRegionMouseOut = (ev) => { + this.isRegionHovered = false; + this.startHideDelayTimer(); + }; + this.handleAnchorMouseOver = (ev) => { + if (this.tooltipVisible) { + this.isAnchorHoveredFocused = true; + return; + } + this.startShowDelayTimer(); + }; + this.handleAnchorMouseOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.handleAnchorFocusIn = (ev) => { + this.startShowDelayTimer(); + }; + this.handleAnchorFocusOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.startHideDelayTimer = () => { + this.clearHideDelayTimer(); + if (!this.tooltipVisible) { + return; + } + this.hideDelayTimer = window.setTimeout(() => { + this.updateTooltipVisibility(); + }, 60); + }; + this.clearHideDelayTimer = () => { + if (this.hideDelayTimer !== null) { + clearTimeout(this.hideDelayTimer); + this.hideDelayTimer = null; + } + }; + this.startShowDelayTimer = () => { + if (this.isAnchorHoveredFocused) { + return; + } + if (this.delay > 1) { + if (this.showDelayTimer === null) + this.showDelayTimer = window.setTimeout(() => { + this.startHover(); + }, this.delay); + return; + } + this.startHover(); + }; + this.startHover = () => { + this.isAnchorHoveredFocused = true; + this.updateTooltipVisibility(); + }; + this.clearShowDelayTimer = () => { + if (this.showDelayTimer !== null) { + clearTimeout(this.showDelayTimer); + this.showDelayTimer = null; + } + }; + this.getAnchor = () => { + const rootNode = this.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.getElementById(this.anchor); + } + return document.getElementById(this.anchor); + }; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && this.tooltipVisible) { + switch (e.key) { + case keyEscape: + this.isAnchorHoveredFocused = false; + this.updateTooltipVisibility(); + this.$emit("dismiss"); + break; + } + } + }; + this.updateTooltipVisibility = () => { + if (this.visible === false) { + this.hideTooltip(); + } else if (this.visible === true) { + this.showTooltip(); + return; + } else { + if (this.isAnchorHoveredFocused || this.isRegionHovered) { + this.showTooltip(); + return; + } + this.hideTooltip(); + } + }; + this.showTooltip = () => { + if (this.tooltipVisible) { + return; + } + this.currentDirection = getDirection(this); + this.tooltipVisible = true; + document.addEventListener("keydown", this.handleDocumentKeydown); + DOM.queueUpdate(this.setRegionProps); + }; + this.hideTooltip = () => { + if (!this.tooltipVisible) { + return; + } + this.clearHideDelayTimer(); + if (this.region !== null && this.region !== void 0) { + this.region.removeEventListener("positionchange", this.handlePositionChange); + this.region.viewportElement = null; + this.region.anchorElement = null; + this.region.removeEventListener("mouseover", this.handleRegionMouseOver); + this.region.removeEventListener("mouseout", this.handleRegionMouseOut); + } + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.tooltipVisible = false; + }; + this.setRegionProps = () => { + if (!this.tooltipVisible) { + return; + } + this.region.viewportElement = this.viewportElement; + this.region.anchorElement = this.anchorElement; + this.region.addEventListener("positionchange", this.handlePositionChange); + this.region.addEventListener("mouseover", this.handleRegionMouseOver, { + passive: true + }); + this.region.addEventListener("mouseout", this.handleRegionMouseOut, { + passive: true + }); + }; + } + visibleChanged() { + if (this.$fastController.isConnected) { + this.updateTooltipVisibility(); + this.updateLayout(); + } + } + anchorChanged() { + if (this.$fastController.isConnected) { + this.anchorElement = this.getAnchor(); + } + } + positionChanged() { + if (this.$fastController.isConnected) { + this.updateLayout(); + } + } + anchorElementChanged(oldValue) { + if (this.$fastController.isConnected) { + if (oldValue !== null && oldValue !== void 0) { + oldValue.removeEventListener("mouseover", this.handleAnchorMouseOver); + oldValue.removeEventListener("mouseout", this.handleAnchorMouseOut); + oldValue.removeEventListener("focusin", this.handleAnchorFocusIn); + oldValue.removeEventListener("focusout", this.handleAnchorFocusOut); + } + if (this.anchorElement !== null && this.anchorElement !== void 0) { + this.anchorElement.addEventListener("mouseover", this.handleAnchorMouseOver, { passive: true }); + this.anchorElement.addEventListener("mouseout", this.handleAnchorMouseOut, { passive: true }); + this.anchorElement.addEventListener("focusin", this.handleAnchorFocusIn, { + passive: true + }); + this.anchorElement.addEventListener("focusout", this.handleAnchorFocusOut, { passive: true }); + const anchorId = this.anchorElement.id; + if (this.anchorElement.parentElement !== null) { + this.anchorElement.parentElement.querySelectorAll(":hover").forEach((element) => { + if (element.id === anchorId) { + this.startShowDelayTimer(); + } + }); + } + } + if (this.region !== null && this.region !== void 0 && this.tooltipVisible) { + this.region.anchorElement = this.anchorElement; + } + this.updateLayout(); + } + } + viewportElementChanged() { + if (this.region !== null && this.region !== void 0) { + this.region.viewportElement = this.viewportElement; + } + this.updateLayout(); + } + connectedCallback() { + super.connectedCallback(); + this.anchorElement = this.getAnchor(); + this.updateTooltipVisibility(); + } + disconnectedCallback() { + this.hideTooltip(); + this.clearShowDelayTimer(); + this.clearHideDelayTimer(); + super.disconnectedCallback(); + } + /** + * updated the properties being passed to the anchored region + */ + updateLayout() { + this.verticalPositioningMode = "locktodefault"; + this.horizontalPositioningMode = "locktodefault"; + switch (this.position) { + case TooltipPosition.top: + case TooltipPosition.bottom: + this.verticalDefaultPosition = this.position; + this.horizontalDefaultPosition = "center"; + break; + case TooltipPosition.right: + case TooltipPosition.left: + case TooltipPosition.start: + case TooltipPosition.end: + this.verticalDefaultPosition = "center"; + this.horizontalDefaultPosition = this.position; + break; + case TooltipPosition.topLeft: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.topRight: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.bottomLeft: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.bottomRight: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.topStart: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.topEnd: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "end"; + break; + case TooltipPosition.bottomStart: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.bottomEnd: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "end"; + break; + default: + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = "center"; + break; + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tooltip.prototype, "visible", void 0); + __decorate([ + attr + ], Tooltip.prototype, "anchor", void 0); + __decorate([ + attr + ], Tooltip.prototype, "delay", void 0); + __decorate([ + attr + ], Tooltip.prototype, "position", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], Tooltip.prototype, "autoUpdateMode", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock" }) + ], Tooltip.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock" }) + ], Tooltip.prototype, "verticalViewportLock", void 0); + __decorate([ + observable + ], Tooltip.prototype, "anchorElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "viewportElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "tooltipVisible", void 0); + __decorate([ + observable + ], Tooltip.prototype, "currentDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js + var init_tooltip2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js"() { + init_tooltip_template(); + init_tooltip(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js + var init_tree_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js + function isTreeItemElement(el2) { + return isHTMLElement(el2) && el2.getAttribute("role") === "treeitem"; + } + var TreeItem; + var init_tree_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TreeItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.expanded = false; + this.focusable = false; + this.isNestedItem = () => { + return isTreeItemElement(this.parentElement); + }; + this.handleExpandCollapseButtonClick = (e) => { + if (!this.disabled && !e.defaultPrevented) { + this.expanded = !this.expanded; + } + }; + this.handleFocus = (e) => { + this.setAttribute("tabindex", "0"); + }; + this.handleBlur = (e) => { + this.setAttribute("tabindex", "-1"); + }; + } + expandedChanged() { + if (this.$fastController.isConnected) { + this.$emit("expanded-change", this); + } + } + selectedChanged() { + if (this.$fastController.isConnected) { + this.$emit("selected-change", this); + } + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.items.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = true; + } + }); + } + } + /** + * Places document focus on a tree item + * + * @public + * @param el - the element to focus + */ + static focusItem(el2) { + el2.focusable = true; + el2.focus(); + } + /** + * Gets number of children + * + * @internal + */ + childItemLength() { + const treeChildren = this.childItems.filter((item) => { + return isTreeItemElement(item); + }); + return treeChildren ? treeChildren.length : 0; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "expanded", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "selected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "disabled", void 0); + __decorate([ + observable + ], TreeItem.prototype, "focusable", void 0); + __decorate([ + observable + ], TreeItem.prototype, "childItems", void 0); + __decorate([ + observable + ], TreeItem.prototype, "items", void 0); + __decorate([ + observable + ], TreeItem.prototype, "nested", void 0); + __decorate([ + observable + ], TreeItem.prototype, "renderCollapsedChildren", void 0); + applyMixins(TreeItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js + var init_tree_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js"() { + init_tree_item_template(); + init_tree_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js + var init_tree_view_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js + var TreeView; + var init_tree_view = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_tree_item(); + init_foundation_element(); + TreeView = class extends FoundationElement { + constructor() { + super(...arguments); + this.currentFocused = null; + this.handleFocus = (e) => { + if (this.slottedTreeItems.length < 1) { + return; + } + if (e.target === this) { + if (this.currentFocused === null) { + this.currentFocused = this.getValidFocusableItem(); + } + if (this.currentFocused !== null) { + TreeItem.focusItem(this.currentFocused); + } + return; + } + if (this.contains(e.target)) { + this.setAttribute("tabindex", "-1"); + this.currentFocused = e.target; + } + }; + this.handleBlur = (e) => { + if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) { + this.setAttribute("tabindex", "0"); + } + }; + this.handleKeyDown = (e) => { + if (e.defaultPrevented) { + return; + } + if (this.slottedTreeItems.length < 1) { + return true; + } + const treeItems = this.getVisibleNodes(); + switch (e.key) { + case keyHome: + if (treeItems.length) { + TreeItem.focusItem(treeItems[0]); + } + return; + case keyEnd: + if (treeItems.length) { + TreeItem.focusItem(treeItems[treeItems.length - 1]); + } + return; + case keyArrowLeft: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) { + item.expanded = false; + } else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) { + TreeItem.focusItem(item.parentElement); + } + } + return false; + case keyArrowRight: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) { + item.expanded = true; + } else if (item instanceof TreeItem && item.childItemLength() > 0) { + this.focusNextNode(1, e.target); + } + } + return; + case keyArrowDown: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(1, e.target); + } + return; + case keyArrowUp: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(-1, e.target); + } + return; + case keyEnter: + this.handleClick(e); + return; + } + return true; + }; + this.handleSelectedChange = (e) => { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (item.selected) { + if (this.currentSelected && this.currentSelected !== item) { + this.currentSelected.selected = false; + } + this.currentSelected = item; + } else if (!item.selected && this.currentSelected === item) { + this.currentSelected = null; + } + return; + }; + this.setItems = () => { + const selectedItem = this.treeView.querySelector("[aria-selected='true']"); + this.currentSelected = selectedItem; + if (this.currentFocused === null || !this.contains(this.currentFocused)) { + this.currentFocused = this.getValidFocusableItem(); + } + this.nested = this.checkForNestedItems(); + const treeItems = this.getVisibleNodes(); + treeItems.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = this.nested; + } + }); + }; + this.isFocusableElement = (el2) => { + return isTreeItemElement(el2); + }; + this.isSelectedElement = (el2) => { + return el2.selected; + }; + } + slottedTreeItemsChanged() { + if (this.$fastController.isConnected) { + this.setItems(); + } + } + connectedCallback() { + super.connectedCallback(); + this.setAttribute("tabindex", "0"); + DOM.queueUpdate(() => { + this.setItems(); + }); + } + /** + * Handles click events bubbling up + * + * @internal + */ + handleClick(e) { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (!item.disabled) { + item.selected = !item.selected; + } + return; + } + /** + * Move focus to a tree item based on its offset from the provided item + */ + focusNextNode(delta, item) { + const visibleNodes = this.getVisibleNodes(); + if (!visibleNodes) { + return; + } + const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta]; + if (isHTMLElement(focusItem)) { + TreeItem.focusItem(focusItem); + } + } + /** + * checks if there are any nested tree items + */ + getValidFocusableItem() { + const treeItems = this.getVisibleNodes(); + let focusIndex = treeItems.findIndex(this.isSelectedElement); + if (focusIndex === -1) { + focusIndex = treeItems.findIndex(this.isFocusableElement); + } + if (focusIndex !== -1) { + return treeItems[focusIndex]; + } + return null; + } + /** + * checks if there are any nested tree items + */ + checkForNestedItems() { + return this.slottedTreeItems.some((node) => { + return isTreeItemElement(node) && node.querySelector("[role='treeitem']"); + }); + } + getVisibleNodes() { + return getDisplayedNodes(this, "[role='treeitem']") || []; + } + }; + __decorate([ + attr({ attribute: "render-collapsed-nodes" }) + ], TreeView.prototype, "renderCollapsedNodes", void 0); + __decorate([ + observable + ], TreeView.prototype, "currentSelected", void 0); + __decorate([ + observable + ], TreeView.prototype, "slottedTreeItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js + var init_tree_view2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js"() { + init_tree_view_template(); + init_tree_view(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js + var MatchMediaBehavior, MatchMediaStyleSheetBehavior, forcedColorsStylesheetBehavior, darkModeStylesheetBehavior, lightModeStylesheetBehavior; + var init_match_media_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js"() { + MatchMediaBehavior = class { + /** + * + * @param query - The media query to operate from. + */ + constructor(query) { + this.listenerCache = /* @__PURE__ */ new WeakMap(); + this.query = query; + } + /** + * Binds the behavior to the element. + * @param source - The element for which the behavior is bound. + */ + bind(source) { + const { query } = this; + const listener = this.constructListener(source); + listener.bind(query)(); + query.addListener(listener); + this.listenerCache.set(source, listener); + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + */ + unbind(source) { + const listener = this.listenerCache.get(source); + if (listener) { + this.query.removeListener(listener); + this.listenerCache.delete(source); + } + } + }; + MatchMediaStyleSheetBehavior = class _MatchMediaStyleSheetBehavior extends MatchMediaBehavior { + /** + * Constructs a {@link MatchMediaStyleSheetBehavior} instance. + * @param query - The media query to operate from. + * @param styles - The styles to coordinate with the query. + */ + constructor(query, styles) { + super(query); + this.styles = styles; + } + /** + * Defines a function to construct {@link MatchMediaStyleSheetBehavior | MatchMediaStyleSheetBehaviors} for + * a provided query. + * @param query - The media query to operate from. + * + * @public + * @example + * + * ```ts + * import { css } from "@microsoft/fast-element"; + * import { MatchMediaStyleSheetBehavior } from "@microsoft/fast-foundation"; + * + * const landscapeBehavior = MatchMediaStyleSheetBehavior.with( + * window.matchMedia("(orientation: landscape)") + * ); + * const styles = css` + * :host { + * width: 200px; + * height: 400px; + * } + * ` + * .withBehaviors(landscapeBehavior(css` + * :host { + * width: 400px; + * height: 200px; + * } + * `)) + * ``` + */ + static with(query) { + return (styles) => { + return new _MatchMediaStyleSheetBehavior(query, styles); + }; + } + /** + * Constructs a match-media listener for a provided element. + * @param source - the element for which to attach or detach styles. + * @internal + */ + constructListener(source) { + let attached = false; + const styles = this.styles; + return function listener() { + const { matches: matches2 } = this; + if (matches2 && !attached) { + source.$fastController.addStyles(styles); + attached = matches2; + } else if (!matches2 && attached) { + source.$fastController.removeStyles(styles); + attached = matches2; + } + }; + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + * @internal + */ + unbind(source) { + super.unbind(source); + source.$fastController.removeStyles(this.styles); + } + }; + forcedColorsStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(forced-colors)")); + darkModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: dark)")); + lightModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: light)")); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js + var init_property_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js + var disabledCursor; + var init_disabled = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js"() { + disabledCursor = "not-allowed"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js + function display(displayValue) { + return `${hidden}:host{display:${displayValue}}`; + } + var hidden; + var init_display = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js"() { + hidden = `:host([hidden]){display:none}`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js + var focusVisible; + var init_focus = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js"() { + init_dist2(); + focusVisible = canUseFocusVisible() ? "focus-visible" : "focus"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js + var init_style = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js"() { + init_disabled(); + init_display(); + init_focus(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js + var init_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js"() { + init_apply_mixins(); + init_composed_parent(); + init_match_media_stylesheet_behavior(); + init_property_stylesheet_behavior(); + init_style(); + init_direction(); + init_whitespace_filter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/index.js + var init_esm2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/index.js"() { + init_accordion_item2(); + init_accordion2(); + init_anchor2(); + init_anchored_region2(); + init_avatar2(); + init_badge2(); + init_breadcrumb_item2(); + init_breadcrumb2(); + init_button2(); + init_calendar2(); + init_card2(); + init_checkbox2(); + init_combobox2(); + init_data_grid2(); + init_design_system2(); + init_design_token(); + init_di2(); + init_dialog2(); + init_disclosure2(); + init_divider2(); + init_flipper2(); + init_form_associated2(); + init_foundation_element2(); + init_listbox_option2(); + init_listbox2(); + init_picker2(); + init_menu_item2(); + init_menu2(); + init_number_field2(); + init_patterns(); + init_progress_ring(); + init_progress(); + init_radio_group2(); + init_radio2(); + init_horizontal_scroll2(); + init_search2(); + init_select2(); + init_skeleton2(); + init_slider_label2(); + init_slider2(); + init_switch2(); + init_tab_panel2(); + init_tab2(); + init_tabs2(); + init_text_area2(); + init_text_field2(); + init_toolbar2(); + init_tooltip2(); + init_tree_item2(); + init_tree_view2(); + init_utilities(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js + function provideVSCodeDesignSystem(element) { + return DesignSystem.getOrCreate(element).withPrefix("vscode"); + } + var init_vscode_design_system = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js"() { + init_esm2(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js + function initThemeChangeListener(tokenMappings2) { + window.addEventListener("load", () => { + const observer = new MutationObserver(() => { + applyCurrentTheme(tokenMappings2); + }); + observer.observe(document.body, { + attributes: true, + attributeFilter: ["class"] + }); + applyCurrentTheme(tokenMappings2); + }); + } + function applyCurrentTheme(tokenMappings2) { + const styles = getComputedStyle(document.body); + const body = document.querySelector("body"); + if (body) { + const themeKind = body.getAttribute("data-vscode-theme-kind"); + for (const [vscodeTokenName, toolkitToken] of tokenMappings2) { + let value = styles.getPropertyValue(vscodeTokenName).toString(); + if (themeKind === "vscode-high-contrast") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + value = "transparent"; + } + if (toolkitToken.name === "button-icon-hover-background") { + value = "transparent"; + } + } else if (themeKind === "vscode-high-contrast-light") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + switch (toolkitToken.name) { + case "button-primary-hover-background": + value = "#0F4A85"; + break; + case "button-secondary-hover-background": + value = "transparent"; + break; + case "button-icon-hover-background": + value = "transparent"; + break; + } + } + } else { + if (toolkitToken.name === "contrast-active-border") { + value = "transparent"; + } + } + toolkitToken.setValueFor(body, value); + } + } + } + var init_applyTheme = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js + function create2(name, vscodeThemeVar) { + const designToken = DesignToken.create(name); + if (vscodeThemeVar) { + if (vscodeThemeVar.includes("--fake-vscode-token")) { + const uniqueId2 = "id" + Math.random().toString(16).slice(2); + vscodeThemeVar = `${vscodeThemeVar}-${uniqueId2}`; + } + tokenMappings.set(vscodeThemeVar, designToken); + } + if (!isThemeListenerInitialized) { + initThemeChangeListener(tokenMappings); + isThemeListenerInitialized = true; + } + return designToken; + } + var tokenMappings, isThemeListenerInitialized; + var init_create = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js"() { + init_esm2(); + init_applyTheme(); + tokenMappings = /* @__PURE__ */ new Map(); + isThemeListenerInitialized = false; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js + var background, borderWidth, contrastActiveBorder, contrastBorder, cornerRadius, cornerRadiusRound, designUnit, disabledOpacity, focusBorder, fontFamily, fontWeight, foreground, inputHeight, inputMinWidth, typeRampBaseFontSize, typeRampBaseLineHeight, typeRampMinus1FontSize, typeRampMinus1LineHeight, typeRampMinus2FontSize, typeRampMinus2LineHeight, typeRampPlus1FontSize, typeRampPlus1LineHeight, scrollbarWidth, scrollbarHeight, scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, badgeBackground, badgeForeground, buttonBorder, buttonIconBackground, buttonIconCornerRadius, buttonIconFocusBorderOffset, buttonIconHoverBackground, buttonIconPadding, buttonPrimaryBackground, buttonPrimaryForeground, buttonPrimaryHoverBackground, buttonSecondaryBackground, buttonSecondaryForeground, buttonSecondaryHoverBackground, buttonPaddingHorizontal, buttonPaddingVertical, checkboxBackground, checkboxBorder, checkboxCornerRadius, checkboxForeground, listActiveSelectionBackground, listActiveSelectionForeground, listHoverBackground, dividerBackground, dropdownBackground, dropdownBorder, dropdownForeground, dropdownListMaxHeight, inputBackground, inputForeground, inputPlaceholderForeground, linkActiveForeground, linkForeground, progressBackground, panelTabActiveBorder, panelTabActiveForeground, panelTabForeground, panelViewBackground, panelViewBorder, tagCornerRadius; + var init_design_tokens = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js"() { + init_create(); + background = create2("background", "--vscode-editor-background").withDefault("#1e1e1e"); + borderWidth = create2("border-width").withDefault(1); + contrastActiveBorder = create2("contrast-active-border", "--vscode-contrastActiveBorder").withDefault("#f38518"); + contrastBorder = create2("contrast-border", "--vscode-contrastBorder").withDefault("#6fc3df"); + cornerRadius = create2("corner-radius").withDefault(0); + cornerRadiusRound = create2("corner-radius-round").withDefault(2); + designUnit = create2("design-unit").withDefault(4); + disabledOpacity = create2("disabled-opacity").withDefault(0.4); + focusBorder = create2("focus-border", "--vscode-focusBorder").withDefault("#007fd4"); + fontFamily = create2("font-family", "--vscode-font-family").withDefault("-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol"); + fontWeight = create2("font-weight", "--vscode-font-weight").withDefault("400"); + foreground = create2("foreground", "--vscode-foreground").withDefault("#cccccc"); + inputHeight = create2("input-height").withDefault("26"); + inputMinWidth = create2("input-min-width").withDefault("100px"); + typeRampBaseFontSize = create2("type-ramp-base-font-size", "--vscode-font-size").withDefault("13px"); + typeRampBaseLineHeight = create2("type-ramp-base-line-height").withDefault("normal"); + typeRampMinus1FontSize = create2("type-ramp-minus1-font-size").withDefault("11px"); + typeRampMinus1LineHeight = create2("type-ramp-minus1-line-height").withDefault("16px"); + typeRampMinus2FontSize = create2("type-ramp-minus2-font-size").withDefault("9px"); + typeRampMinus2LineHeight = create2("type-ramp-minus2-line-height").withDefault("16px"); + typeRampPlus1FontSize = create2("type-ramp-plus1-font-size").withDefault("16px"); + typeRampPlus1LineHeight = create2("type-ramp-plus1-line-height").withDefault("24px"); + scrollbarWidth = create2("scrollbarWidth").withDefault("10px"); + scrollbarHeight = create2("scrollbarHeight").withDefault("10px"); + scrollbarSliderBackground = create2("scrollbar-slider-background", "--vscode-scrollbarSlider-background").withDefault("#79797966"); + scrollbarSliderHoverBackground = create2("scrollbar-slider-hover-background", "--vscode-scrollbarSlider-hoverBackground").withDefault("#646464b3"); + scrollbarSliderActiveBackground = create2("scrollbar-slider-active-background", "--vscode-scrollbarSlider-activeBackground").withDefault("#bfbfbf66"); + badgeBackground = create2("badge-background", "--vscode-badge-background").withDefault("#4d4d4d"); + badgeForeground = create2("badge-foreground", "--vscode-badge-foreground").withDefault("#ffffff"); + buttonBorder = create2("button-border", "--vscode-button-border").withDefault("transparent"); + buttonIconBackground = create2("button-icon-background").withDefault("transparent"); + buttonIconCornerRadius = create2("button-icon-corner-radius").withDefault("5px"); + buttonIconFocusBorderOffset = create2("button-icon-outline-offset").withDefault(0); + buttonIconHoverBackground = create2("button-icon-hover-background", "--fake-vscode-token").withDefault("rgba(90, 93, 94, 0.31)"); + buttonIconPadding = create2("button-icon-padding").withDefault("3px"); + buttonPrimaryBackground = create2("button-primary-background", "--vscode-button-background").withDefault("#0e639c"); + buttonPrimaryForeground = create2("button-primary-foreground", "--vscode-button-foreground").withDefault("#ffffff"); + buttonPrimaryHoverBackground = create2("button-primary-hover-background", "--vscode-button-hoverBackground").withDefault("#1177bb"); + buttonSecondaryBackground = create2("button-secondary-background", "--vscode-button-secondaryBackground").withDefault("#3a3d41"); + buttonSecondaryForeground = create2("button-secondary-foreground", "--vscode-button-secondaryForeground").withDefault("#ffffff"); + buttonSecondaryHoverBackground = create2("button-secondary-hover-background", "--vscode-button-secondaryHoverBackground").withDefault("#45494e"); + buttonPaddingHorizontal = create2("button-padding-horizontal").withDefault("11px"); + buttonPaddingVertical = create2("button-padding-vertical").withDefault("4px"); + checkboxBackground = create2("checkbox-background", "--vscode-checkbox-background").withDefault("#3c3c3c"); + checkboxBorder = create2("checkbox-border", "--vscode-checkbox-border").withDefault("#3c3c3c"); + checkboxCornerRadius = create2("checkbox-corner-radius").withDefault(3); + checkboxForeground = create2("checkbox-foreground", "--vscode-checkbox-foreground").withDefault("#f0f0f0"); + listActiveSelectionBackground = create2("list-active-selection-background", "--vscode-list-activeSelectionBackground").withDefault("#094771"); + listActiveSelectionForeground = create2("list-active-selection-foreground", "--vscode-list-activeSelectionForeground").withDefault("#ffffff"); + listHoverBackground = create2("list-hover-background", "--vscode-list-hoverBackground").withDefault("#2a2d2e"); + dividerBackground = create2("divider-background", "--vscode-settings-dropdownListBorder").withDefault("#454545"); + dropdownBackground = create2("dropdown-background", "--vscode-dropdown-background").withDefault("#3c3c3c"); + dropdownBorder = create2("dropdown-border", "--vscode-dropdown-border").withDefault("#3c3c3c"); + dropdownForeground = create2("dropdown-foreground", "--vscode-dropdown-foreground").withDefault("#f0f0f0"); + dropdownListMaxHeight = create2("dropdown-list-max-height").withDefault("200px"); + inputBackground = create2("input-background", "--vscode-input-background").withDefault("#3c3c3c"); + inputForeground = create2("input-foreground", "--vscode-input-foreground").withDefault("#cccccc"); + inputPlaceholderForeground = create2("input-placeholder-foreground", "--vscode-input-placeholderForeground").withDefault("#cccccc"); + linkActiveForeground = create2("link-active-foreground", "--vscode-textLink-activeForeground").withDefault("#3794ff"); + linkForeground = create2("link-foreground", "--vscode-textLink-foreground").withDefault("#3794ff"); + progressBackground = create2("progress-background", "--vscode-progressBar-background").withDefault("#0e70c0"); + panelTabActiveBorder = create2("panel-tab-active-border", "--vscode-panelTitle-activeBorder").withDefault("#e7e7e7"); + panelTabActiveForeground = create2("panel-tab-active-foreground", "--vscode-panelTitle-activeForeground").withDefault("#e7e7e7"); + panelTabForeground = create2("panel-tab-foreground", "--vscode-panelTitle-inactiveForeground").withDefault("#e7e7e799"); + panelViewBackground = create2("panel-view-background", "--vscode-panel-background").withDefault("#1e1e1e"); + panelViewBorder = create2("panel-view-border", "--vscode-panel-border").withDefault("#80808059"); + tagCornerRadius = create2("tag-corner-radius").withDefault("2px"); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js + var badgeStyles; + var init_badge_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + badgeStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + text-align: center; + } + .control { + align-items: center; + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: 11px; + box-sizing: border-box; + color: ${badgeForeground}; + display: flex; + height: calc(${designUnit} * 4px); + justify-content: center; + min-width: calc(${designUnit} * 4px + 2px); + min-height: calc(${designUnit} * 4px + 2px); + padding: 3px 6px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js + var Badge2, vsCodeBadge; + var init_badge3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js"() { + init_esm2(); + init_badge_styles(); + Badge2 = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.circular) { + this.circular = true; + } + } + }; + vsCodeBadge = Badge2.compose({ + baseName: "badge", + template: badgeTemplate, + styles: badgeStyles + }); + } + }); + + // node_modules/tslib/tslib.es6.mjs + function __decorate2(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es62 = __esm({ + "node_modules/tslib/tslib.es6.mjs"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js + var BaseButtonStyles, PrimaryButtonStyles, SecondaryButtonStyles, IconButtonStyles, buttonStyles; + var init_button_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + BaseButtonStyles = css` + ${display("inline-flex")} :host { + outline: none; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${buttonPrimaryForeground}; + background: ${buttonPrimaryBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + fill: currentColor; + cursor: pointer; + } + .control { + background: transparent; + height: inherit; + flex-grow: 1; + box-sizing: border-box; + display: inline-flex; + justify-content: center; + align-items: center; + padding: ${buttonPaddingVertical} ${buttonPaddingHorizontal}; + white-space: wrap; + outline: none; + text-decoration: none; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + color: inherit; + border-radius: inherit; + fill: inherit; + cursor: inherit; + font-family: inherit; + } + :host(:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host(:active) { + background: ${buttonPrimaryBackground}; + } + .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + .control::-moz-focus-inner { + border: 0; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + background: ${buttonPrimaryBackground}; + cursor: ${disabledCursor}; + } + .content { + display: flex; + } + .start { + display: flex; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-end: 8px; + } +`; + PrimaryButtonStyles = css` + :host([appearance='primary']) { + background: ${buttonPrimaryBackground}; + color: ${buttonPrimaryForeground}; + } + :host([appearance='primary']:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host([appearance='primary']:active) .control:active { + background: ${buttonPrimaryBackground}; + } + :host([appearance='primary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='primary'][disabled]) { + background: ${buttonPrimaryBackground}; + } +`; + SecondaryButtonStyles = css` + :host([appearance='secondary']) { + background: ${buttonSecondaryBackground}; + color: ${buttonSecondaryForeground}; + } + :host([appearance='secondary']:hover) { + background: ${buttonSecondaryHoverBackground}; + } + :host([appearance='secondary']:active) .control:active { + background: ${buttonSecondaryBackground}; + } + :host([appearance='secondary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='secondary'][disabled]) { + background: ${buttonSecondaryBackground}; + } +`; + IconButtonStyles = css` + :host([appearance='icon']) { + background: ${buttonIconBackground}; + border-radius: ${buttonIconCornerRadius}; + color: ${foreground}; + } + :host([appearance='icon']:hover) { + background: ${buttonIconHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } + :host([appearance='icon']) .control { + padding: ${buttonIconPadding}; + border: none; + } + :host([appearance='icon']:active) .control:active { + background: ${buttonIconHoverBackground}; + } + :host([appearance='icon']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: ${buttonIconFocusBorderOffset}; + } + :host([appearance='icon'][disabled]) { + background: ${buttonIconBackground}; + } +`; + buttonStyles = (context, definition) => css` + ${BaseButtonStyles} + ${PrimaryButtonStyles} + ${SecondaryButtonStyles} + ${IconButtonStyles} +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/index.js + var Button2, vsCodeButton; + var init_button3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/index.js"() { + init_tslib_es62(); + init_esm(); + init_esm2(); + init_button_styles(); + Button2 = class extends Button { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.appearance) { + const appearanceValue = this.getAttribute("appearance"); + this.appearance = appearanceValue; + } + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "appearance" && newVal === "icon") { + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.ariaLabel = "Icon Button"; + } + } + if (attrName === "aria-label") { + this.ariaLabel = newVal; + } + if (attrName === "disabled") { + this.disabled = newVal !== null; + } + } + }; + __decorate2([ + attr + ], Button2.prototype, "appearance", void 0); + vsCodeButton = Button2.compose({ + baseName: "button", + template: buttonTemplate, + styles: buttonStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js + var checkboxStyles; + var init_checkbox_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + checkboxStyles = (context, defintiion) => css` + ${display("inline-flex")} :host { + align-items: center; + outline: none; + margin: calc(${designUnit} * 1px) 0; + user-select: none; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control { + position: relative; + width: calc(${designUnit} * 4px + 2px); + height: calc(${designUnit} * 4px + 2px); + box-sizing: border-box; + border-radius: calc(${checkboxCornerRadius} * 1px); + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + background: ${checkboxBackground}; + outline: none; + cursor: pointer; + } + .label { + font-family: ${fontFamily}; + color: ${foreground}; + padding-inline-start: calc(${designUnit} * 2px + 2px); + margin-inline-end: calc(${designUnit} * 2px + 2px); + cursor: pointer; + } + .label__hidden { + display: none; + visibility: hidden; + } + .checked-indicator { + width: 100%; + height: 100%; + display: block; + fill: ${foreground}; + opacity: 0; + pointer-events: none; + } + .indeterminate-indicator { + border-radius: 2px; + background: ${foreground}; + position: absolute; + top: 50%; + left: 50%; + width: 50%; + height: 50%; + transform: translate(-50%, -50%); + opacity: 0; + } + :host(:enabled) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:enabled) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host(.disabled) .label, + :host(.readonly) .label, + :host(.readonly) .control, + :host(.disabled) .control { + cursor: ${disabledCursor}; + } + :host(.checked:not(.indeterminate)) .checked-indicator, + :host(.indeterminate) .indeterminate-indicator { + opacity: 1; + } + :host(.disabled) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js + var Checkbox2, vsCodeCheckbox; + var init_checkbox3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js"() { + init_esm2(); + init_checkbox_styles(); + Checkbox2 = class extends Checkbox { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Checkbox"); + } + } + }; + vsCodeCheckbox = Checkbox2.compose({ + baseName: "checkbox", + template: checkboxTemplate, + styles: checkboxStyles, + checkedIndicator: ` + + + + `, + indeterminateIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js + var dataGridStyles; + var init_data_grid_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js"() { + init_esm(); + dataGridStyles = (context, definition) => css` + :host { + display: flex; + position: relative; + flex-direction: column; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js + var dataGridRowStyles; + var init_data_grid_row_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js"() { + init_esm(); + init_design_tokens(); + dataGridRowStyles = (context, definition) => css` + :host { + display: grid; + padding: calc((${designUnit} / 4) * 1px) 0; + box-sizing: border-box; + width: 100%; + background: transparent; + } + :host(.header) { + } + :host(.sticky-header) { + background: ${background}; + position: sticky; + top: 0; + } + :host(:hover) { + background: ${listHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js + var dataGridCellStyles; + var init_data_grid_cell_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dataGridCellStyles = (context, definition) => css` + :host { + padding: calc(${designUnit} * 1px) calc(${designUnit} * 3px); + color: ${foreground}; + opacity: 1; + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + font-weight: 400; + border: solid calc(${borderWidth} * 1px) transparent; + border-radius: calc(${cornerRadius} * 1px); + white-space: wrap; + overflow-wrap: anywhere; + } + :host(.column-header) { + font-weight: 600; + } + :host(:${focusVisible}), + :host(:focus), + :host(:active) { + background: ${listActiveSelectionBackground}; + border: solid calc(${borderWidth} * 1px) ${focusBorder}; + color: ${listActiveSelectionForeground}; + outline: none; + } + :host(:${focusVisible}) ::slotted(*), + :host(:focus) ::slotted(*), + :host(:active) ::slotted(*) { + color: ${listActiveSelectionForeground} !important; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js + var DataGrid2, vsCodeDataGrid, DataGridRow2, vsCodeDataGridRow, DataGridCell2, vsCodeDataGridCell; + var init_data_grid3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js"() { + init_esm2(); + init_data_grid_styles(); + init_data_grid_row_styles(); + init_data_grid_cell_styles(); + DataGrid2 = class extends DataGrid { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Data Grid"); + } + } + }; + vsCodeDataGrid = DataGrid2.compose({ + baseName: "data-grid", + baseClass: DataGrid, + template: dataGridTemplate, + styles: dataGridStyles + }); + DataGridRow2 = class extends DataGridRow { + }; + vsCodeDataGridRow = DataGridRow2.compose({ + baseName: "data-grid-row", + baseClass: DataGridRow, + template: dataGridRowTemplate, + styles: dataGridRowStyles + }); + DataGridCell2 = class extends DataGridCell { + }; + vsCodeDataGridCell = DataGridCell2.compose({ + baseName: "data-grid-cell", + baseClass: DataGridCell, + template: dataGridCellTemplate, + styles: dataGridCellStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js + var dividerStyles; + var init_divider_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dividerStyles = (context, definition) => css` + ${display("block")} :host { + border: none; + border-top: calc(${borderWidth} * 1px) solid ${dividerBackground}; + box-sizing: content-box; + height: 0; + margin: calc(${designUnit} * 1px) 0; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js + var Divider2, vsCodeDivider; + var init_divider3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js"() { + init_esm2(); + init_divider_styles(); + Divider2 = class extends Divider { + }; + vsCodeDivider = Divider2.compose({ + baseName: "divider", + template: dividerTemplate, + styles: dividerStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js + var dropdownStyles; + var init_dropdown_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dropdownStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: ${dropdownBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + color: ${foreground}; + contain: contents; + font-family: ${fontFamily}; + height: calc(${inputHeight} * 1px); + position: relative; + user-select: none; + min-width: ${inputMinWidth}; + outline: none; + vertical-align: top; + } + .control { + align-items: center; + box-sizing: border-box; + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + cursor: pointer; + display: flex; + font-family: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + min-height: 100%; + padding: 2px 6px 2px 8px; + width: 100%; + } + .listbox { + background: ${dropdownBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + display: inline-flex; + flex-direction: column; + left: 0; + max-height: ${dropdownListMaxHeight}; + padding: 0; + overflow-y: auto; + position: absolute; + width: 100%; + z-index: 1; + } + .listbox[hidden] { + display: none; + } + :host(:${focusVisible}) .control { + border-color: ${focusBorder}; + } + :host(:not([disabled]):hover) { + background: ${dropdownBackground}; + border-color: ${dropdownBorder}; + } + :host(:${focusVisible}) ::slotted([aria-selected="true"][role="option"]:not([disabled])) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + cursor: ${disabledCursor}; + user-select: none; + } + :host([disabled]:hover) { + background: ${dropdownBackground}; + color: ${foreground}; + fill: currentcolor; + } + :host(:not([disabled])) .control:active { + border-color: ${focusBorder}; + } + :host(:empty) .listbox { + display: none; + } + :host([open]) .control { + border-color: ${focusBorder}; + } + :host([open][position='above']) .listbox { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + :host([open][position='below']) .listbox { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + :host([open][position='above']) .listbox { + bottom: calc(${inputHeight} * 1px); + } + :host([open][position='below']) .listbox { + top: calc(${inputHeight} * 1px); + } + .selected-value { + flex: 1 1 auto; + font-family: inherit; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + } + .indicator { + flex: 0 0 auto; + margin-inline-start: 1em; + } + slot[name='listbox'] { + display: none; + width: 100%; + } + :host([open]) slot[name='listbox'] { + display: flex; + position: absolute; + } + .end { + margin-inline-start: auto; + } + .start, + .end, + .indicator, + .select-indicator, + ::slotted(svg), + ::slotted(span) { + fill: currentcolor; + height: 1em; + min-height: calc(${designUnit} * 4px); + min-width: calc(${designUnit} * 4px); + width: 1em; + } + ::slotted([role='option']), + ::slotted(option) { + flex: 0 0 auto; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js + var Dropdown, vsCodeDropdown; + var init_dropdown = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js"() { + init_esm2(); + init_dropdown_styles(); + Dropdown = class extends Select { + }; + vsCodeDropdown = Dropdown.compose({ + baseName: "dropdown", + template: selectTemplate, + styles: dropdownStyles, + indicator: ` + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js + var linkStyles; + var init_link_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + linkStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: transparent; + box-sizing: border-box; + color: ${linkForeground}; + cursor: pointer; + fill: currentcolor; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + outline: none; + } + .control { + background: transparent; + border: calc(${borderWidth} * 1px) solid transparent; + border-radius: calc(${cornerRadius} * 1px); + box-sizing: border-box; + color: inherit; + cursor: inherit; + fill: inherit; + font-family: inherit; + height: inherit; + padding: 0; + outline: none; + text-decoration: none; + word-break: break-word; + } + .control::-moz-focus-inner { + border: 0; + } + :host(:hover) { + color: ${linkActiveForeground}; + } + :host(:hover) .content { + text-decoration: underline; + } + :host(:active) { + background: transparent; + color: ${linkActiveForeground}; + } + :host(:${focusVisible}) .control, + :host(:focus) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/index.js + var Link, vsCodeLink; + var init_link = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/index.js"() { + init_esm2(); + init_link_styles(); + Link = class extends Anchor { + }; + vsCodeLink = Link.compose({ + baseName: "link", + template: anchorTemplate, + styles: linkStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js + var optionStyles; + var init_option_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + optionStyles = (context, definition) => css` + ${display("inline-flex")} :host { + font-family: var(--body-font); + border-radius: ${cornerRadius}; + border: calc(${borderWidth} * 1px) solid transparent; + box-sizing: border-box; + color: ${foreground}; + cursor: pointer; + fill: currentcolor; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: 0; + outline: none; + overflow: hidden; + padding: 0 calc((${designUnit} / 2) * 1px) + calc((${designUnit} / 4) * 1px); + user-select: none; + white-space: nowrap; + } + :host(:${focusVisible}) { + border-color: ${focusBorder}; + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([aria-selected='true']) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:active) { + background: ${listActiveSelectionBackground}; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):hover) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):active) { + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]:hover) { + background-color: inherit; + } + .content { + grid-column-start: 2; + justify-self: start; + overflow: hidden; + text-overflow: ellipsis; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/index.js + var Option2, vsCodeOption; + var init_option = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/index.js"() { + init_esm2(); + init_option_styles(); + Option2 = class extends ListboxOption { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Option"); + } + } + }; + vsCodeOption = Option2.compose({ + baseName: "option", + template: listboxOptionTemplate, + styles: optionStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js + var panelsStyles; + var init_panels_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelsStyles = (context, definition) => css` + ${display("grid")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${foreground}; + grid-template-columns: auto 1fr auto; + grid-template-rows: auto 1fr; + overflow-x: auto; + } + .tablist { + display: grid; + grid-template-rows: auto auto; + grid-template-columns: auto; + column-gap: calc(${designUnit} * 8px); + position: relative; + width: max-content; + align-self: end; + padding: calc(${designUnit} * 1px) calc(${designUnit} * 1px) 0; + box-sizing: border-box; + } + .start, + .end { + align-self: center; + } + .activeIndicator { + grid-row: 2; + grid-column: 1; + width: 100%; + height: calc((${designUnit} / 4) * 1px); + justify-self: center; + background: ${panelTabActiveForeground}; + margin: 0; + border-radius: calc(${cornerRadius} * 1px); + } + .activeIndicatorTransition { + transition: transform 0.01s linear; + } + .tabpanel { + grid-row: 2; + grid-column-start: 1; + grid-column-end: 4; + position: relative; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js + var panelTabStyles; + var init_panel_tab_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelTabStyles = (context, definition) => css` + ${display("inline-flex")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + height: calc(${designUnit} * 7px); + padding: calc(${designUnit} * 1px) 0; + color: ${panelTabForeground}; + fill: currentcolor; + border-radius: calc(${cornerRadius} * 1px); + border: solid calc(${borderWidth} * 1px) transparent; + align-items: center; + justify-content: center; + grid-row: 1; + cursor: pointer; + } + :host(:hover) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:active) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:hover) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:active) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:${focusVisible}) { + outline: none; + border: solid calc(${borderWidth} * 1px) ${panelTabActiveBorder}; + } + :host(:focus) { + outline: none; + } + ::slotted(vscode-badge) { + margin-inline-start: calc(${designUnit} * 2px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js + var panelViewStyles; + var init_panel_view_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelViewStyles = (context, definition) => css` + ${display("flex")} :host { + color: inherit; + background-color: transparent; + border: solid calc(${borderWidth} * 1px) transparent; + box-sizing: border-box; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: 10px calc((${designUnit} + 2) * 1px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js + var Panels, vsCodePanels, PanelTab, vsCodePanelTab, PanelView, vsCodePanelView; + var init_panels = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js"() { + init_esm2(); + init_panels_styles(); + init_panel_tab_styles(); + init_panel_view_styles(); + Panels = class extends Tabs { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.orientation) { + this.orientation = TabsOrientation.horizontal; + } + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Panels"); + } + } + }; + vsCodePanels = Panels.compose({ + baseName: "panels", + template: tabsTemplate, + styles: panelsStyles + }); + PanelTab = class extends Tab { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.disabled) { + this.disabled = false; + } + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } + } + }; + vsCodePanelTab = PanelTab.compose({ + baseName: "panel-tab", + template: tabTemplate, + styles: panelTabStyles + }); + PanelView = class extends TabPanel { + }; + vsCodePanelView = PanelView.compose({ + baseName: "panel-view", + template: tabPanelTemplate, + styles: panelViewStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js + var progressRingStyles; + var init_progress_ring_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + progressRingStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: center; + outline: none; + height: calc(${designUnit} * 7px); + width: calc(${designUnit} * 7px); + margin: 0; + } + .progress { + height: 100%; + width: 100%; + } + .background { + fill: none; + stroke: transparent; + stroke-width: calc(${designUnit} / 2 * 1px); + } + .indeterminate-indicator-1 { + fill: none; + stroke: ${progressBackground}; + stroke-width: calc(${designUnit} / 2 * 1px); + stroke-linecap: square; + transform-origin: 50% 50%; + transform: rotate(-90deg); + transition: all 0.2s ease-in-out; + animation: spin-infinite 2s linear infinite; + } + @keyframes spin-infinite { + 0% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(0deg); + } + 50% { + stroke-dasharray: 21.99px 21.99px; + transform: rotate(450deg); + } + 100% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(1080deg); + } + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js + var ProgressRing, vsCodeProgressRing; + var init_progress_ring2 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js"() { + init_esm2(); + init_progress_ring_styles(); + ProgressRing = class extends BaseProgress { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.paused) { + this.paused = false; + } + this.setAttribute("aria-label", "Loading"); + this.setAttribute("aria-live", "assertive"); + this.setAttribute("role", "alert"); + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "value") { + this.removeAttribute("value"); + } + } + }; + vsCodeProgressRing = ProgressRing.compose({ + baseName: "progress-ring", + template: progressRingTemplate, + styles: progressRingStyles, + indeterminateIndicator: ` + + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js + var radioGroupStyles; + var init_radio_group_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioGroupStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: flex-start; + margin: calc(${designUnit} * 1px) 0; + flex-direction: column; + } + .positioning-region { + display: flex; + flex-wrap: wrap; + } + :host([orientation='vertical']) .positioning-region { + flex-direction: column; + } + :host([orientation='horizontal']) .positioning-region { + flex-direction: row; + } + ::slotted([slot='label']) { + color: ${foreground}; + font-size: ${typeRampBaseFontSize}; + margin: calc(${designUnit} * 1px) 0; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js + var RadioGroup2, vsCodeRadioGroup; + var init_radio_group3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js"() { + init_dist2(); + init_esm2(); + init_radio_group_styles(); + RadioGroup2 = class extends RadioGroup { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const label = this.querySelector("label"); + if (label) { + const id = "radio-group-" + Math.random().toString(16).slice(2); + label.setAttribute("id", id); + this.setAttribute("aria-labelledby", id); + } + } + }; + vsCodeRadioGroup = RadioGroup2.compose({ + baseName: "radio-group", + template: radioGroupTemplate, + styles: radioGroupStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js + var radioStyles; + var init_radio_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioStyles = (context, definition) => css` + ${display("inline-flex")} :host { + align-items: center; + flex-direction: row; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: calc(${designUnit} * 1px) 0; + outline: none; + position: relative; + transition: all 0.2s ease-in-out; + user-select: none; + } + .control { + background: ${checkboxBackground}; + border-radius: 999px; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + box-sizing: border-box; + cursor: pointer; + height: calc(${designUnit} * 4px); + position: relative; + outline: none; + width: calc(${designUnit} * 4px); + } + .label { + color: ${foreground}; + cursor: pointer; + font-family: ${fontFamily}; + margin-inline-end: calc(${designUnit} * 2px + 2px); + padding-inline-start: calc(${designUnit} * 2px + 2px); + } + .label__hidden { + display: none; + visibility: hidden; + } + .control, + .checked-indicator { + flex-shrink: 0; + } + .checked-indicator { + background: ${foreground}; + border-radius: 999px; + display: inline-block; + inset: calc(${designUnit} * 1px); + opacity: 0; + pointer-events: none; + position: absolute; + } + :host(:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:not([disabled])) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked='true']) .control { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:active { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked="true"]:${focusVisible}:not([disabled])) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([aria-checked='true']) .checked-indicator { + opacity: 1; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js + var Radio2, vsCodeRadio; + var init_radio3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js"() { + init_esm2(); + init_radio_styles(); + Radio2 = class extends Radio { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Radio"); + } + } + }; + vsCodeRadio = Radio2.compose({ + baseName: "radio", + template: radioTemplate, + styles: radioStyles, + checkedIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js + var tagStyles; + var init_tag_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + tagStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + } + .control { + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: ${tagCornerRadius}; + color: ${badgeForeground}; + padding: calc(${designUnit} * 0.5px) calc(${designUnit} * 1px); + text-transform: uppercase; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js + var Tag, vsCodeTag; + var init_tag = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js"() { + init_esm2(); + init_tag_styles(); + Tag = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.circular) { + this.circular = false; + } + } + }; + vsCodeTag = Tag.compose({ + baseName: "tag", + template: badgeTemplate, + styles: tagStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js + var textAreaStyles; + var init_text_area_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textAreaStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .control { + box-sizing: border-box; + position: relative; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + font: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: calc(${designUnit} * 2px + 1px); + width: 100%; + min-width: ${inputMinWidth}; + resize: none; + } + .control:hover:enabled { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + .control:active:enabled { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .control::-webkit-scrollbar { + width: ${scrollbarWidth}; + height: ${scrollbarHeight}; + } + .control::-webkit-scrollbar-corner { + background: ${inputBackground}; + } + .control::-webkit-scrollbar-thumb { + background: ${scrollbarSliderBackground}; + } + .control::-webkit-scrollbar-thumb:hover { + background: ${scrollbarSliderHoverBackground}; + } + .control::-webkit-scrollbar-thumb:active { + background: ${scrollbarSliderActiveBackground}; + } + :host(:focus-within:not([disabled])) .control { + border-color: ${focusBorder}; + } + :host([resize='both']) .control { + resize: both; + } + :host([resize='horizontal']) .control { + resize: horizontal; + } + :host([resize='vertical']) .control { + resize: vertical; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js + var TextArea2, vsCodeTextArea; + var init_text_area3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js"() { + init_esm2(); + init_text_area_styles(); + TextArea2 = class extends TextArea { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text area"); + } + } + }; + vsCodeTextArea = TextArea2.compose({ + baseName: "text-area", + template: textAreaTemplate, + styles: textAreaStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js + var textFieldStyles; + var init_text_field_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textFieldStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .root { + box-sizing: border-box; + position: relative; + display: flex; + flex-direction: row; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + height: calc(${inputHeight} * 1px); + min-width: ${inputMinWidth}; + } + .control { + -webkit-appearance: none; + font: inherit; + background: transparent; + border: 0; + color: inherit; + height: calc(100% - (${designUnit} * 1px)); + width: 100%; + margin-top: auto; + margin-bottom: auto; + border: none; + padding: 0 calc(${designUnit} * 2px + 1px); + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + .start, + .end { + display: flex; + margin: auto; + fill: currentcolor; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-start: calc(${designUnit} * 2px); + } + .end { + margin-inline-end: calc(${designUnit} * 2px); + } + :host(:hover:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + :host(:active:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + :host(:focus-within:not([disabled])) .root { + border-color: ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js + var TextField2, vsCodeTextField; + var init_text_field3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js"() { + init_esm2(); + init_text_field_styles(); + TextField2 = class extends TextField { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text field"); + } + } + }; + vsCodeTextField = TextField2.compose({ + baseName: "text-field", + template: textFieldTemplate, + styles: textFieldStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js + var allComponents; + var init_custom_elements = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js"() { + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + allComponents = { + vsCodeBadge, + vsCodeButton, + vsCodeCheckbox, + vsCodeDataGrid, + vsCodeDataGridCell, + vsCodeDataGridRow, + vsCodeDivider, + vsCodeDropdown, + vsCodeLink, + vsCodeOption, + vsCodePanels, + vsCodePanelTab, + vsCodePanelView, + vsCodeProgressRing, + vsCodeRadioGroup, + vsCodeRadio, + vsCodeTag, + vsCodeTextArea, + vsCodeTextField, + register(container, ...rest) { + if (!container) { + return; + } + for (const key in this) { + if (key === "register") { + continue; + } + this[key]().register(container, ...rest); + } + } + }; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/index.js + var dist_exports = {}; + __export(dist_exports, { + Badge: () => Badge2, + Button: () => Button2, + Checkbox: () => Checkbox2, + DataGrid: () => DataGrid2, + DataGridCell: () => DataGridCell2, + DataGridCellTypes: () => DataGridCellTypes, + DataGridRow: () => DataGridRow2, + DataGridRowTypes: () => DataGridRowTypes, + Divider: () => Divider2, + DividerRole: () => DividerRole, + Dropdown: () => Dropdown, + DropdownPosition: () => SelectPosition, + GenerateHeaderOptions: () => GenerateHeaderOptions, + Link: () => Link, + Option: () => Option2, + PanelTab: () => PanelTab, + PanelView: () => PanelView, + Panels: () => Panels, + ProgressRing: () => ProgressRing, + Radio: () => Radio2, + RadioGroup: () => RadioGroup2, + RadioGroupOrientation: () => Orientation, + Tag: () => Tag, + TextArea: () => TextArea2, + TextAreaResize: () => TextAreaResize, + TextField: () => TextField2, + TextFieldType: () => TextFieldType, + allComponents: () => allComponents, + provideVSCodeDesignSystem: () => provideVSCodeDesignSystem, + vsCodeBadge: () => vsCodeBadge, + vsCodeButton: () => vsCodeButton, + vsCodeCheckbox: () => vsCodeCheckbox, + vsCodeDataGrid: () => vsCodeDataGrid, + vsCodeDataGridCell: () => vsCodeDataGridCell, + vsCodeDataGridRow: () => vsCodeDataGridRow, + vsCodeDivider: () => vsCodeDivider, + vsCodeDropdown: () => vsCodeDropdown, + vsCodeLink: () => vsCodeLink, + vsCodeOption: () => vsCodeOption, + vsCodePanelTab: () => vsCodePanelTab, + vsCodePanelView: () => vsCodePanelView, + vsCodePanels: () => vsCodePanels, + vsCodeProgressRing: () => vsCodeProgressRing, + vsCodeRadio: () => vsCodeRadio, + vsCodeRadioGroup: () => vsCodeRadioGroup, + vsCodeTag: () => vsCodeTag, + vsCodeTextArea: () => vsCodeTextArea, + vsCodeTextField: () => vsCodeTextField + }); + var init_dist3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/index.js"() { + init_vscode_design_system(); + init_custom_elements(); + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + } + }); + + // src/webview/shared/modelUtils.ts + function getModelDisplayName(model) { + const names = { + "gpt-4": "GPT-4", + "gpt-4.1": "GPT-4.1", + "gpt-4o": "GPT-4o", + "gpt-4o-mini": "GPT-4o Mini", + "gpt-3.5-turbo": "GPT-3.5 Turbo", + "gpt-5": "GPT-5", + "gpt-5-codex": "GPT-5 Codex (Preview)", + "gpt-5-mini": "GPT-5 Mini", + "gpt-5.1": "GPT-5.1", + "gpt-5.1-codex": "GPT-5.1 Codex", + "gpt-5.1-codex-max": "GPT-5.1 Codex Max", + "gpt-5.1-codex-mini": "GPT-5.1 Codex Mini (Preview)", + "gpt-5.2": "GPT-5.2", + "gpt-5.2-codex": "GPT-5.2 Codex", + "claude-sonnet-3.5": "Claude Sonnet 3.5", + "claude-sonnet-3.7": "Claude Sonnet 3.7", + "claude-sonnet-4": "Claude Sonnet 4", + "claude-sonnet-4.5": "Claude Sonnet 4.5", + "claude-haiku": "Claude Haiku", + "claude-haiku-4.5": "Claude Haiku 4.5", + "claude-opus-4.1": "Claude Opus 4.1", + "claude-opus-4.5": "Claude Opus 4.5", + "gemini-2.5-pro": "Gemini 2.5 Pro", + "gemini-3-flash": "Gemini 3 Flash", + "gemini-3-pro": "Gemini 3 Pro", + "gemini-3-pro-preview": "Gemini 3 Pro (Preview)", + "grok-code-fast-1": "Grok Code Fast 1", + "raptor-mini": "Raptor Mini", + "o3-mini": "o3-mini", + "o4-mini": "o4-mini (Preview)" + }; + return names[model] || model; + } + + // src/tokenEstimators.json + var tokenEstimators_default = { + $schema: "http://json-schema.org/draft-07/schema#", + description: "Character-to-token ratio estimators for different AI models. Used to estimate token counts from text length.", + estimators: { + "gpt-4": 0.25, + "gpt-4.1": 0.25, + "gpt-4.1-mini": 0.25, + "gpt-4o": 0.25, + "gpt-4o-mini": 0.25, + "gpt-4-turbo": 0.25, + "gpt-3.5-turbo": 0.25, + "gpt-5": 0.25, + "gpt-5-codex": 0.25, + "gpt-5-mini": 0.25, + "gpt-5.1": 0.25, + "gpt-5.1-codex": 0.25, + "gpt-5.1-codex-max": 0.25, + "gpt-5.1-codex-mini": 0.25, + "gpt-5.2": 0.25, + "gpt-5.2-codex": 0.25, + "gpt-5.2-pro": 0.25, + "gpt-5.3-codex": 0.25, + "gpt-5.4": 0.25, + "gpt-4.1-nano": 0.25, + "gemini-2.0-flash": 0.25, + "gemini-2.0-flash-lite": 0.25, + "gemini-2.5-flash": 0.25, + "gemini-2.5-flash-lite": 0.25, + "claude-sonnet-3.5": 0.24, + "claude-sonnet-3.7": 0.24, + "claude-sonnet-4": 0.24, + "claude-sonnet-4.5": 0.24, + "claude-sonnet-4.6": 0.24, + "claude-haiku": 0.24, + "claude-haiku-4.5": 0.24, + "claude-opus-4.1": 0.24, + "claude-opus-4.5": 0.24, + "claude-opus-4.6": 0.24, + "claude-opus-4.6-(fast-mode)-(preview)": 0.24, + "claude-opus-4.6-fast": 0.24, + "gemini-2.5-pro": 0.25, + "gemini-3-flash": 0.25, + "gemini-3-pro": 0.25, + "gemini-3-pro-preview": 0.25, + "gemini-3.1-pro": 0.25, + "grok-code-fast-1": 0.25, + "raptor-mini": 0.25, + goldeneye: 0.25, + "o1-preview": 0.25, + "o1-mini": 0.25, + "o3-mini": 0.25, + "o4-mini": 0.25 + } + }; + + // src/webview/shared/formatUtils.ts + var tokenEstimators = tokenEstimators_default.estimators; + var currentLocale; + function getEditorIcon(editor) { + const icons = { + "VS Code": "\u{1F499}", + "VS Code Insiders": "\u{1F49A}", + "VS Code Exploration": "\u{1F9EA}", + "VS Code Server": "\u2601\uFE0F", + "VS Code Server (Insiders)": "\u2601\uFE0F", + "VSCodium": "\u{1F537}", + "Cursor": "\u26A1", + "Copilot CLI": "\u{1F916}", + "OpenCode": "\u{1F7E2}", + "Visual Studio": "\u{1FA9F}", + "Unknown": "\u2753" + }; + return icons[editor] || "\u{1F4DD}"; + } + function getCharsPerToken(model) { + const ratio = tokenEstimators[model] ?? 0.25; + return 1 / ratio; + } + function formatFixed(value, digits) { + return new Intl.NumberFormat(currentLocale, { + minimumFractionDigits: digits, + maximumFractionDigits: digits + }).format(value); + } + function formatPercent(value, digits = 1) { + return `${formatFixed(value, digits)}%`; + } + function formatNumber(value) { + return value.toLocaleString(currentLocale); + } + function formatCost(value) { + return new Intl.NumberFormat(currentLocale, { + style: "currency", + currency: "USD", + minimumFractionDigits: 4, + maximumFractionDigits: 4 + }).format(value); + } + + // src/webview/shared/domUtils.ts + function el(tag, className, text) { + const node = document.createElement(tag); + if (className) { + node.className = className; + } + if (text !== void 0) { + node.textContent = text; + } + return node; + } + function createButton(configOrId, label, appearance) { + const button = document.createElement("vscode-button"); + if (typeof configOrId === "string") { + button.id = configOrId; + button.textContent = label || ""; + if (appearance) { + button.setAttribute("appearance", appearance); + } + } else { + const config = configOrId; + button.id = config.id; + button.textContent = config.label; + if (config.appearance) { + button.setAttribute("appearance", config.appearance); + } + } + return button; + } + + // src/webview/shared/buttonConfig.ts + var BUTTONS = { + "btn-refresh": { + id: "btn-refresh", + label: "\u{1F504} Refresh", + appearance: "primary" + }, + "btn-details": { + id: "btn-details", + label: "\u{1F916} Details" + }, + "btn-chart": { + id: "btn-chart", + label: "\u{1F4C8} Chart" + }, + "btn-usage": { + id: "btn-usage", + label: "\u{1F4CA} Usage Analysis" + }, + "btn-diagnostics": { + id: "btn-diagnostics", + label: "\u{1F50D} Diagnostics" + }, + "btn-maturity": { + id: "btn-maturity", + label: "\u{1F3AF} Fluency Score" + }, + "btn-dashboard": { + id: "btn-dashboard", + label: "\u{1F4CA} Team Dashboard" + }, + "btn-level-viewer": { + id: "btn-level-viewer", + label: "\u{1F50D} Level Viewer" + }, + "btn-environmental": { + id: "btn-environmental", + label: "\u{1F33F} Environmental Impact" + } + }; + + // src/webview/shared/theme.css + var theme_default = '/**\n * Shared theme variables for all webview panels\n * Uses VS Code theme tokens for automatic light/dark theme support\n */\n\n:root {\n /* VS Code base colors */\n --bg-primary: var(--vscode-editor-background);\n --bg-secondary: var(--vscode-sideBar-background);\n --bg-tertiary: var(--vscode-editorWidget-background);\n --text-primary: var(--vscode-editor-foreground);\n --text-secondary: var(--vscode-descriptionForeground);\n --text-muted: var(--vscode-disabledForeground);\n --border-color: var(--vscode-panel-border);\n --border-subtle: var(--vscode-widget-border);\n \n /* Button colors */\n --button-bg: var(--vscode-button-background);\n --button-fg: var(--vscode-button-foreground);\n --button-hover-bg: var(--vscode-button-hoverBackground);\n --button-secondary-bg: var(--vscode-button-secondaryBackground);\n --button-secondary-fg: var(--vscode-button-secondaryForeground);\n --button-secondary-hover-bg: var(--vscode-button-secondaryHoverBackground);\n \n /* Input colors */\n --input-bg: var(--vscode-input-background);\n --input-fg: var(--vscode-input-foreground);\n --input-border: var(--vscode-input-border);\n \n /* List/card colors */\n --list-hover-bg: var(--vscode-list-hoverBackground);\n --list-active-bg: var(--vscode-list-activeSelectionBackground);\n --list-active-fg: var(--vscode-list-activeSelectionForeground);\n --list-inactive-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Alternating row colors for better readability */\n --row-alternate-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Badge colors */\n --badge-bg: var(--vscode-badge-background);\n --badge-fg: var(--vscode-badge-foreground);\n \n /* Focus colors */\n --focus-border: var(--vscode-focusBorder);\n \n /* Link colors */\n --link-color: var(--vscode-textLink-foreground);\n --link-hover-color: var(--vscode-textLink-activeForeground);\n \n /* Status colors */\n --error-fg: var(--vscode-errorForeground);\n --warning-fg: var(--vscode-editorWarning-foreground);\n --success-fg: var(--vscode-terminal-ansiGreen);\n \n /* Shadow for cards */\n --shadow-color: rgb(0, 0, 0, 0.16);\n --shadow-hover-color: rgb(0, 0, 0, 0.24);\n}\n\n/* Light theme adjustments */\nbody[data-vscode-theme-kind="vscode-light"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --shadow-color: rgb(0, 0, 0, 0.08);\n --shadow-hover-color: rgb(0, 0, 0, 0.12);\n}\n\n/* High contrast mode adjustments */\nbody[data-vscode-theme-kind="vscode-high-contrast"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --border-color: var(--vscode-contrastBorder);\n --border-subtle: var(--vscode-contrastBorder);\n}\n'; + + // src/webview/details/styles.css + var styles_default = "body {\n margin: 0;\n background: var(--bg-primary);\n color: var(--text-primary);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.container {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n padding-bottom: 4px;\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 700;\n color: var(--text-primary);\n}\n\n.button-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.sections {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.section {\n background: var(--bg-secondary);\n border: 1px solid var(--border-color);\n border-radius: 10px;\n padding: 12px;\n box-shadow: 0 4px 10px var(--shadow-color);\n}\n\n.section h3 {\n margin: 0 0 10px;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--text-primary);\n letter-spacing: 0.2px;\n}\n\n.stats-table {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n background: var(--bg-tertiary);\n border: 1px solid var(--border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.stats-table thead {\n background: var(--list-hover-bg);\n}\n\n.stats-table th,\n.stats-table td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--border-subtle);\n vertical-align: middle;\n}\n\n.stats-table th {\n text-align: left;\n color: var(--text-secondary);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.1px;\n}\n\n.stats-table td {\n color: var(--text-primary);\n font-size: 12px;\n}\n\n.stats-table th.align-right,\n.stats-table td.align-right {\n text-align: right;\n}\n\n.metric-label {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n}\n\n.period-header {\n display: flex;\n align-items: center;\n gap: 4px;\n color: var(--text-secondary);\n}\n\n.align-right .period-header {\n justify-content: flex-end;\n}\n\n.value-right {\n text-align: right;\n}\n\n.muted {\n color: var(--text-muted);\n font-size: 11px;\n margin-top: 4px;\n}\n\n.notes {\n margin: 4px 0 0;\n padding-left: 16px;\n color: var(--text-secondary);\n}\n\n.notes li {\n margin: 4px 0;\n line-height: 1.4;\n}\n\n.footer {\n color: var(--text-muted);\n font-size: 11px;\n margin-top: 6px;\n}\n"; + + // src/webview/details/main.ts + var vscode = acquireVsCodeApi(); + var initialData = window.__INITIAL_DETAILS__; + console.log("[CopilotTokenTracker] details webview loaded"); + console.log("[CopilotTokenTracker] window.__INITIAL_DETAILS__:", window.__INITIAL_DETAILS__); + console.log("[CopilotTokenTracker] initialData:", initialData); + var _initSort = initialData?.sortSettings; + var editorSortKey = _initSort?.editor?.key ?? "name"; + var editorSortDir = _initSort?.editor?.dir ?? "asc"; + var modelSortKey = _initSort?.model?.key ?? "name"; + var modelSortDir = _initSort?.model?.dir ?? "asc"; + function calculateProjection(last30DaysValue) { + const daysInYear = 365.25; + return last30DaysValue / 30 * daysInYear; + } + function render(stats) { + const root = document.getElementById("root"); + if (!root) { + return; + } + const projectedTokens = Math.round(calculateProjection(stats.last30Days.tokens)); + const projectedSessions = Math.round(calculateProjection(stats.last30Days.sessions)); + const projectedCo2 = calculateProjection(stats.last30Days.co2); + const projectedWater = calculateProjection(stats.last30Days.waterUsage); + const projectedCost = calculateProjection(stats.last30Days.estimatedCost); + const projectedTrees = calculateProjection(stats.last30Days.treesEquivalent); + renderShell(root, stats, { + projectedTokens, + projectedSessions, + projectedCo2, + projectedWater, + projectedCost, + projectedTrees + }); + wireButtons(); + } + function renderShell(root, stats, projections) { + const lastUpdated = new Date(stats.lastUpdated); + root.replaceChildren(); + const themeStyle = document.createElement("style"); + themeStyle.textContent = theme_default; + const style = document.createElement("style"); + style.textContent = styles_default; + const container = el("div", "container"); + const header = el("div", "header"); + const title = el("div", "title", "\u{1F916} Copilot Token Usage"); + const buttonRow = el("div", "button-row"); + buttonRow.append( + createButton(BUTTONS["btn-refresh"]), + createButton(BUTTONS["btn-chart"]), + createButton(BUTTONS["btn-usage"]), + createButton(BUTTONS["btn-environmental"]), + createButton(BUTTONS["btn-diagnostics"]), + createButton(BUTTONS["btn-maturity"]) + ); + if (stats.backendConfigured) { + buttonRow.append(createButton(BUTTONS["btn-dashboard"])); + } + header.append(title, buttonRow); + const footer = el("div", "footer", `Last updated: ${lastUpdated.toLocaleString()} \xB7 Updates every 5 minutes`); + const sections = el("div", "sections"); + sections.append(buildMetricsSection(stats, projections)); + const editorSection = buildEditorUsageSection(stats); + if (editorSection) { + sections.append(editorSection); + } + const modelSection = buildModelUsageSection(stats); + if (modelSection) { + sections.append(modelSection); + } + container.append(header, sections, footer); + root.append(themeStyle, style, container); + } + function buildMetricsSection(stats, projections) { + const section = el("div", "section"); + const heading = el("h3"); + heading.textContent = "\u{1F916} Copilot Token Usage"; + section.append(heading); + const table = document.createElement("table"); + table.className = "stats-table"; + const thead = document.createElement("thead"); + const headerRow = document.createElement("tr"); + const headers = [ + { icon: "\u{1F4CA}", text: "Metric" }, + { icon: "\u{1F4C5}", text: "Today" }, + { icon: "\u{1F4C8}", text: "Last 30 Days" }, + { icon: "\u{1F4C6}", text: "Previous Month" }, + { icon: "\u{1F30D}", text: "Projected Year" } + ]; + headers.forEach((h, idx) => { + const th = document.createElement("th"); + th.className = idx === 0 ? "" : "align-right"; + const wrap = el("div", "period-header"); + wrap.textContent = `${h.icon} ${h.text}`; + th.append(wrap); + headerRow.append(th); + }); + thead.append(headerRow); + table.append(thead); + const tbody = document.createElement("tbody"); + const rows = [ + { label: "Tokens (total)", icon: "\u{1F7E3}", color: "#c37bff", today: formatNumber(stats.today.tokens), last30Days: formatNumber(stats.last30Days.tokens), lastMonth: formatNumber(stats.lastMonth.tokens), projected: formatNumber(projections.projectedTokens) }, + { label: "Tokens (user estimated)", icon: "\u{1F4DD}", color: "#b39ddb", today: formatNumber(stats.today.estimatedTokens), last30Days: formatNumber(stats.last30Days.estimatedTokens), lastMonth: formatNumber(stats.lastMonth.estimatedTokens), projected: "\u2014" }, + { label: "Service overhead %", icon: "\u2601\uFE0F", color: "#90a4ae", today: (stats.today.actualTokens || 0) > 0 ? formatPercent((stats.today.tokens - stats.today.estimatedTokens) / stats.today.tokens * 100) : "\u2014", last30Days: (stats.last30Days.actualTokens || 0) > 0 ? formatPercent((stats.last30Days.tokens - stats.last30Days.estimatedTokens) / stats.last30Days.tokens * 100) : "\u2014", lastMonth: (stats.lastMonth.actualTokens || 0) > 0 ? formatPercent((stats.lastMonth.tokens - stats.lastMonth.estimatedTokens) / stats.lastMonth.tokens * 100) : "\u2014", projected: "\u2014" }, + { label: "Thinking tokens", icon: "\u{1F9E0}", color: "#a78bfa", today: formatNumber(stats.today.thinkingTokens || 0), last30Days: formatNumber(stats.last30Days.thinkingTokens || 0), lastMonth: formatNumber(stats.lastMonth.thinkingTokens || 0), projected: "\u2014" }, + { label: "Estimated cost", icon: "\u{1FA99}", color: "#ffd166", today: formatCost(stats.today.estimatedCost), last30Days: formatCost(stats.last30Days.estimatedCost), lastMonth: formatCost(stats.lastMonth.estimatedCost), projected: formatCost(projections.projectedCost) }, + { label: "Sessions", icon: "\u{1F4C5}", color: "#66aaff", today: formatNumber(stats.today.sessions), last30Days: formatNumber(stats.last30Days.sessions), lastMonth: formatNumber(stats.lastMonth.sessions), projected: formatNumber(projections.projectedSessions) }, + { label: "Average interactions/session", icon: "\u{1F4AC}", color: "#8ce0ff", today: formatNumber(stats.today.avgInteractionsPerSession), last30Days: formatNumber(stats.last30Days.avgInteractionsPerSession), lastMonth: formatNumber(stats.lastMonth.avgInteractionsPerSession), projected: "\u2014" }, + { label: "Average tokens/session", icon: "\u{1F522}", color: "#7ce38b", today: formatNumber(stats.today.avgTokensPerSession), last30Days: formatNumber(stats.last30Days.avgTokensPerSession), lastMonth: formatNumber(stats.lastMonth.avgTokensPerSession), projected: "\u2014" } + ]; + rows.forEach((row) => { + const tr = document.createElement("tr"); + const labelTd = document.createElement("td"); + const labelWrapper = document.createElement("span"); + labelWrapper.className = "metric-label"; + const iconSpan = document.createElement("span"); + iconSpan.textContent = row.icon; + if (row.color) { + iconSpan.style.color = row.color; + } + const textSpan = document.createElement("span"); + textSpan.textContent = row.label; + labelWrapper.append(iconSpan, textSpan); + labelTd.append(labelWrapper); + const todayTd = document.createElement("td"); + todayTd.className = "value-right align-right"; + todayTd.textContent = row.today; + const last30DaysTd = document.createElement("td"); + last30DaysTd.className = "value-right align-right"; + last30DaysTd.textContent = row.last30Days; + const lastMonthTd = document.createElement("td"); + lastMonthTd.className = "value-right align-right"; + lastMonthTd.textContent = row.lastMonth; + const projTd = document.createElement("td"); + projTd.className = "value-right align-right"; + projTd.textContent = row.projected; + tr.append(labelTd, todayTd, last30DaysTd, lastMonthTd, projTd); + tbody.append(tr); + }); + table.append(tbody); + section.append(table); + return section; + } + function getSortIndicator(colKey, activeKey, dir) { + if (colKey !== activeKey) { + return " \u2195"; + } + return dir === "asc" ? " \u2191" : " \u2193"; + } + function saveSortSettings() { + vscode.postMessage({ + command: "saveSortSettings", + settings: { + editor: { key: editorSortKey, dir: editorSortDir }, + model: { key: modelSortKey, dir: modelSortDir } + } + }); + } + function buildEditorTbody(stats, allEditors) { + const todayTotal = Object.values(stats.today.editorUsage).reduce((sum, e) => sum + e.tokens, 0); + const last30DaysTotal = Object.values(stats.last30Days.editorUsage).reduce((sum, e) => sum + e.tokens, 0); + const lastMonthTotal = Object.values(stats.lastMonth.editorUsage).reduce((sum, e) => sum + e.tokens, 0); + const items = allEditors.map((editor) => { + const todayUsage = stats.today.editorUsage[editor] || { tokens: 0, sessions: 0 }; + const last30DaysUsage = stats.last30Days.editorUsage[editor] || { tokens: 0, sessions: 0 }; + const lastMonthUsage = stats.lastMonth.editorUsage[editor] || { tokens: 0, sessions: 0 }; + return { + editor, + todayUsage, + last30DaysUsage, + lastMonthUsage, + projectedTokens: Math.round(calculateProjection(last30DaysUsage.tokens)), + projectedSessions: Math.round(calculateProjection(last30DaysUsage.sessions)) + }; + }); + items.sort((a, b) => { + let cmp; + switch (editorSortKey) { + case "name": + cmp = a.editor.localeCompare(b.editor); + break; + case "today": + cmp = a.todayUsage.tokens - b.todayUsage.tokens; + break; + case "last30Days": + cmp = a.last30DaysUsage.tokens - b.last30DaysUsage.tokens; + break; + case "lastMonth": + cmp = a.lastMonthUsage.tokens - b.lastMonthUsage.tokens; + break; + case "projected": + cmp = a.projectedTokens - b.projectedTokens; + break; + default: + cmp = 0; + } + return editorSortDir === "asc" ? cmp : -cmp; + }); + const tbody = document.createElement("tbody"); + items.forEach(({ editor, todayUsage, last30DaysUsage, lastMonthUsage, projectedTokens, projectedSessions }) => { + const todayPercent = todayTotal > 0 ? todayUsage.tokens / todayTotal * 100 : 0; + const last30DaysPercent = last30DaysTotal > 0 ? last30DaysUsage.tokens / last30DaysTotal * 100 : 0; + const lastMonthPercent = lastMonthTotal > 0 ? lastMonthUsage.tokens / lastMonthTotal * 100 : 0; + const tr = document.createElement("tr"); + const labelTd = document.createElement("td"); + const labelWrapper = document.createElement("span"); + labelWrapper.className = "metric-label"; + labelWrapper.textContent = `${getEditorIcon(editor)} ${editor}`; + labelTd.append(labelWrapper); + const todayTd = document.createElement("td"); + todayTd.className = "value-right align-right"; + todayTd.textContent = formatNumber(todayUsage.tokens); + const todaySub = el("div", "muted", `${formatPercent(todayPercent)} \xB7 ${todayUsage.sessions} sessions`); + todayTd.append(todaySub); + const last30DaysTd = document.createElement("td"); + last30DaysTd.className = "value-right align-right"; + last30DaysTd.textContent = formatNumber(last30DaysUsage.tokens); + const last30DaysSub = el("div", "muted", `${formatPercent(last30DaysPercent)} \xB7 ${last30DaysUsage.sessions} sessions`); + last30DaysTd.append(last30DaysSub); + const lastMonthTd = document.createElement("td"); + lastMonthTd.className = "value-right align-right"; + lastMonthTd.textContent = formatNumber(lastMonthUsage.tokens); + const lastMonthSub = el("div", "muted", `${formatPercent(lastMonthPercent)} \xB7 ${lastMonthUsage.sessions} sessions`); + lastMonthTd.append(lastMonthSub); + const projTd = document.createElement("td"); + projTd.className = "value-right align-right"; + projTd.textContent = formatNumber(projectedTokens); + const projSub = el("div", "muted", `${projectedSessions} sessions`); + projTd.append(projSub); + tr.append(labelTd, todayTd, last30DaysTd, lastMonthTd, projTd); + tbody.append(tr); + }); + return tbody; + } + function buildEditorUsageSection(stats) { + const allEditors = /* @__PURE__ */ new Set([ + ...Object.keys(stats.today.editorUsage), + ...Object.keys(stats.last30Days.editorUsage), + ...Object.keys(stats.lastMonth.editorUsage) + ]); + if (allEditors.size === 0) { + return null; + } + const section = el("div", "section"); + const heading = el("h3"); + heading.textContent = "\u{1F4BB} Usage by Editor"; + section.append(heading); + const table = document.createElement("table"); + table.className = "stats-table"; + const thead = document.createElement("thead"); + const headerRow = document.createElement("tr"); + const editorColHeaders = [ + { icon: "\u{1F4DD}", text: "Editor", key: "name" }, + { icon: "\u{1F4C5}", text: "Today", key: "today" }, + { icon: "\u{1F4C8}", text: "Last 30 Days", key: "last30Days" }, + { icon: "\u{1F4C6}", text: "Previous Month", key: "lastMonth" }, + { icon: "\u{1F30D}", text: "Projected Year", key: "projected" } + ]; + const editorHeaderWraps = []; + editorColHeaders.forEach((h, idx) => { + const th = document.createElement("th"); + th.className = idx === 0 ? "" : "align-right"; + th.style.cursor = "pointer"; + th.style.userSelect = "none"; + th.title = `Sort by ${h.text}`; + const wrap = el("div", "period-header"); + wrap.textContent = `${h.icon} ${h.text}${getSortIndicator(h.key, editorSortKey, editorSortDir)}`; + th.append(wrap); + editorHeaderWraps.push(wrap); + th.addEventListener("click", () => { + if (editorSortKey === h.key) { + editorSortDir = editorSortDir === "asc" ? "desc" : "asc"; + } else { + editorSortKey = h.key; + editorSortDir = h.key === "name" ? "asc" : "desc"; + } + editorHeaderWraps.forEach((w, i) => { + w.textContent = `${editorColHeaders[i].icon} ${editorColHeaders[i].text}${getSortIndicator(editorColHeaders[i].key, editorSortKey, editorSortDir)}`; + }); + const newTbody = buildEditorTbody(stats, Array.from(allEditors)); + const oldTbody = table.querySelector("tbody"); + if (oldTbody) { + table.replaceChild(newTbody, oldTbody); + } else { + table.append(newTbody); + } + saveSortSettings(); + }); + headerRow.append(th); + }); + thead.append(headerRow); + table.append(thead); + table.append(buildEditorTbody(stats, Array.from(allEditors))); + section.append(table); + return section; + } + function buildModelTbody(stats, allModels) { + const items = allModels.map((model) => { + const todayUsage = stats.today.modelUsage[model] || { inputTokens: 0, outputTokens: 0 }; + const last30DaysUsage = stats.last30Days.modelUsage[model] || { inputTokens: 0, outputTokens: 0 }; + const lastMonthUsage = stats.lastMonth.modelUsage[model] || { inputTokens: 0, outputTokens: 0 }; + const todayTotal = todayUsage.inputTokens + todayUsage.outputTokens; + const last30DaysTotal = last30DaysUsage.inputTokens + last30DaysUsage.outputTokens; + const lastMonthTotal = lastMonthUsage.inputTokens + lastMonthUsage.outputTokens; + return { + model, + todayTotal, + todayInputPct: todayTotal > 0 ? todayUsage.inputTokens / todayTotal * 100 : 0, + todayOutputPct: todayTotal > 0 ? todayUsage.outputTokens / todayTotal * 100 : 0, + last30DaysTotal, + last30DaysInputPct: last30DaysTotal > 0 ? last30DaysUsage.inputTokens / last30DaysTotal * 100 : 0, + last30DaysOutputPct: last30DaysTotal > 0 ? last30DaysUsage.outputTokens / last30DaysTotal * 100 : 0, + lastMonthTotal, + lastMonthInputPct: lastMonthTotal > 0 ? lastMonthUsage.inputTokens / lastMonthTotal * 100 : 0, + lastMonthOutputPct: lastMonthTotal > 0 ? lastMonthUsage.outputTokens / lastMonthTotal * 100 : 0, + projected: Math.round(calculateProjection(last30DaysTotal)), + charsPerToken: getCharsPerToken(model) + }; + }); + items.sort((a, b) => { + let cmp; + switch (modelSortKey) { + case "name": + cmp = a.model.localeCompare(b.model); + break; + case "today": + cmp = a.todayTotal - b.todayTotal; + break; + case "last30Days": + cmp = a.last30DaysTotal - b.last30DaysTotal; + break; + case "lastMonth": + cmp = a.lastMonthTotal - b.lastMonthTotal; + break; + case "projected": + cmp = a.projected - b.projected; + break; + default: + cmp = 0; + } + return modelSortDir === "asc" ? cmp : -cmp; + }); + const tbody = document.createElement("tbody"); + items.forEach((item) => { + const tr = document.createElement("tr"); + const labelTd = document.createElement("td"); + const labelWrapper = document.createElement("span"); + labelWrapper.className = "metric-label"; + labelWrapper.innerHTML = `${getModelDisplayName(item.model)} (~${item.charsPerToken.toFixed(1)} chars/tk)`; + labelTd.append(labelWrapper); + const todayTd = document.createElement("td"); + todayTd.className = "value-right align-right"; + todayTd.textContent = formatNumber(item.todayTotal); + const todaySub = el("div", "muted", `\u2191${formatPercent(item.todayInputPct)} \u2193${formatPercent(item.todayOutputPct)}`); + todayTd.append(todaySub); + const last30DaysTd = document.createElement("td"); + last30DaysTd.className = "value-right align-right"; + last30DaysTd.textContent = formatNumber(item.last30DaysTotal); + const last30DaysSub = el("div", "muted", `\u2191${formatPercent(item.last30DaysInputPct)} \u2193${formatPercent(item.last30DaysOutputPct)}`); + last30DaysTd.append(last30DaysSub); + const lastMonthTd = document.createElement("td"); + lastMonthTd.className = "value-right align-right"; + lastMonthTd.textContent = formatNumber(item.lastMonthTotal); + const lastMonthSub = el("div", "muted", `\u2191${formatPercent(item.lastMonthInputPct)} \u2193${formatPercent(item.lastMonthOutputPct)}`); + lastMonthTd.append(lastMonthSub); + const projTd = document.createElement("td"); + projTd.className = "value-right align-right"; + projTd.textContent = formatNumber(item.projected); + tr.append(labelTd, todayTd, last30DaysTd, lastMonthTd, projTd); + tbody.append(tr); + }); + return tbody; + } + function buildModelUsageSection(stats) { + const allModels = /* @__PURE__ */ new Set([ + ...Object.keys(stats.today.modelUsage), + ...Object.keys(stats.last30Days.modelUsage), + ...Object.keys(stats.lastMonth.modelUsage) + ]); + if (allModels.size === 0) { + return null; + } + const section = el("div", "section"); + const heading = el("h3"); + heading.textContent = "\u{1F3AF} Model Usage (Tokens)"; + section.append(heading); + const table = document.createElement("table"); + table.className = "stats-table"; + const thead = document.createElement("thead"); + const headerRow = document.createElement("tr"); + const modelColHeaders = [ + { icon: "\u{1F9E0}", text: "Model", key: "name" }, + { icon: "\u{1F4C5}", text: "Today", key: "today" }, + { icon: "\u{1F4C8}", text: "Last 30 Days", key: "last30Days" }, + { icon: "\u{1F4C6}", text: "Previous Month", key: "lastMonth" }, + { icon: "\u{1F30D}", text: "Projected Year", key: "projected" } + ]; + const modelHeaderWraps = []; + modelColHeaders.forEach((h, idx) => { + const th = document.createElement("th"); + th.className = idx === 0 ? "" : "align-right"; + th.style.cursor = "pointer"; + th.style.userSelect = "none"; + th.title = `Sort by ${h.text}`; + const wrap = el("div", "period-header"); + wrap.textContent = `${h.icon} ${h.text}${getSortIndicator(h.key, modelSortKey, modelSortDir)}`; + th.append(wrap); + modelHeaderWraps.push(wrap); + th.addEventListener("click", () => { + if (modelSortKey === h.key) { + modelSortDir = modelSortDir === "asc" ? "desc" : "asc"; + } else { + modelSortKey = h.key; + modelSortDir = h.key === "name" ? "asc" : "desc"; + } + modelHeaderWraps.forEach((w, i) => { + w.textContent = `${modelColHeaders[i].icon} ${modelColHeaders[i].text}${getSortIndicator(modelColHeaders[i].key, modelSortKey, modelSortDir)}`; + }); + const newTbody = buildModelTbody(stats, Array.from(allModels)); + const oldTbody = table.querySelector("tbody"); + if (oldTbody) { + table.replaceChild(newTbody, oldTbody); + } else { + table.append(newTbody); + } + saveSortSettings(); + }); + headerRow.append(th); + }); + thead.append(headerRow); + table.append(thead); + table.append(buildModelTbody(stats, Array.from(allModels))); + section.append(table); + return section; + } + function wireButtons() { + const refresh = document.getElementById("btn-refresh"); + const chart = document.getElementById("btn-chart"); + const usage = document.getElementById("btn-usage"); + const diagnostics = document.getElementById("btn-diagnostics"); + refresh?.addEventListener("click", () => vscode.postMessage({ command: "refresh" })); + chart?.addEventListener("click", () => vscode.postMessage({ command: "showChart" })); + usage?.addEventListener("click", () => vscode.postMessage({ command: "showUsageAnalysis" })); + diagnostics?.addEventListener("click", () => vscode.postMessage({ command: "showDiagnostics" })); + const maturity = document.getElementById("btn-maturity"); + maturity?.addEventListener("click", () => vscode.postMessage({ command: "showMaturity" })); + const dashboard = document.getElementById("btn-dashboard"); + dashboard?.addEventListener("click", () => vscode.postMessage({ command: "showDashboard" })); + const environmental = document.getElementById("btn-environmental"); + environmental?.addEventListener("click", () => vscode.postMessage({ command: "showEnvironmental" })); + } + async function bootstrap() { + console.log("[CopilotTokenTracker] bootstrap called"); + const { provideVSCodeDesignSystem: provideVSCodeDesignSystem2, vsCodeButton: vsCodeButton2, vsCodeBadge: vsCodeBadge2 } = await Promise.resolve().then(() => (init_dist3(), dist_exports)); + provideVSCodeDesignSystem2().register(vsCodeButton2(), vsCodeBadge2()); + if (initialData) { + console.log("[CopilotTokenTracker] Rendering details with initialData:", initialData); + render(initialData); + } else { + console.warn("[CopilotTokenTracker] No initialData found, rendering fallback."); + const root = document.getElementById("root"); + if (root) { + root.textContent = ""; + const fallback = document.createElement("div"); + fallback.style.padding = "16px"; + fallback.style.color = "#e7e7e7"; + fallback.textContent = "No data available."; + root.append(fallback); + } + } + } + window.addEventListener("message", (event) => { + const message = event.data; + if (message.command === "updateStats") { + render(message.data); + } + }); + void bootstrap(); +})(); +/*! Bundled license information: + +tslib/tslib.es6.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) + +tabbable/dist/index.esm.js: + (*! + * tabbable 5.3.3 + * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE + *) +*/ +//# sourceMappingURL=details.js.map diff --git a/visualstudio-extension/src/CopilotTokenTracker/webview/diagnostics.js b/visualstudio-extension/src/CopilotTokenTracker/webview/diagnostics.js new file mode 100644 index 00000000..4ab02da3 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/webview/diagnostics.js @@ -0,0 +1,21620 @@ +"use strict"; +(() => { + var __defProp = Object.defineProperty; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; + var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); + }; + + // node_modules/@microsoft/fast-element/dist/esm/platform.js + function createMetadataLocator() { + const metadataLookup = /* @__PURE__ */ new WeakMap(); + return function(target) { + let metadata = metadataLookup.get(target); + if (metadata === void 0) { + let currentTarget = Reflect.getPrototypeOf(target); + while (metadata === void 0 && currentTarget !== null) { + metadata = metadataLookup.get(currentTarget); + currentTarget = Reflect.getPrototypeOf(currentTarget); + } + metadata = metadata === void 0 ? [] : metadata.slice(0); + metadataLookup.set(target, metadata); + } + return metadata; + }; + } + var $global, propConfig, FAST, emptyArray; + var init_platform = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/platform.js"() { + $global = (function() { + if (typeof globalThis !== "undefined") { + return globalThis; + } + if (typeof global !== "undefined") { + return global; + } + if (typeof self !== "undefined") { + return self; + } + if (typeof window !== "undefined") { + return window; + } + try { + return new Function("return this")(); + } catch (_a) { + return {}; + } + })(); + if ($global.trustedTypes === void 0) { + $global.trustedTypes = { createPolicy: (n, r) => r }; + } + propConfig = { + configurable: false, + enumerable: false, + writable: false + }; + if ($global.FAST === void 0) { + Reflect.defineProperty($global, "FAST", Object.assign({ value: /* @__PURE__ */ Object.create(null) }, propConfig)); + } + FAST = $global.FAST; + if (FAST.getById === void 0) { + const storage = /* @__PURE__ */ Object.create(null); + Reflect.defineProperty(FAST, "getById", Object.assign({ value(id, initialize) { + let found = storage[id]; + if (found === void 0) { + found = initialize ? storage[id] = initialize() : null; + } + return found; + } }, propConfig)); + } + emptyArray = Object.freeze([]); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/dom.js + var updateQueue, fastHTMLPolicy, htmlPolicy, marker, _interpolationStart, _interpolationEnd, DOM; + var init_dom = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/dom.js"() { + init_platform(); + updateQueue = $global.FAST.getById(1, () => { + const tasks = []; + const pendingErrors = []; + function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } + } + function tryRunTask(task) { + try { + task.call(); + } catch (error) { + pendingErrors.push(error); + setTimeout(throwFirstError, 0); + } + } + function process() { + const capacity = 1024; + let index = 0; + while (index < tasks.length) { + tryRunTask(tasks[index]); + index++; + if (index > capacity) { + for (let scan = 0, newLength = tasks.length - index; scan < newLength; scan++) { + tasks[scan] = tasks[scan + index]; + } + tasks.length -= index; + index = 0; + } + } + tasks.length = 0; + } + function enqueue(callable) { + if (tasks.length < 1) { + $global.requestAnimationFrame(process); + } + tasks.push(callable); + } + return Object.freeze({ + enqueue, + process + }); + }); + fastHTMLPolicy = $global.trustedTypes.createPolicy("fast-html", { + createHTML: (html2) => html2 + }); + htmlPolicy = fastHTMLPolicy; + marker = `fast-${Math.random().toString(36).substring(2, 8)}`; + _interpolationStart = `${marker}{`; + _interpolationEnd = `}${marker}`; + DOM = Object.freeze({ + /** + * Indicates whether the DOM supports the adoptedStyleSheets feature. + */ + supportsAdoptedStyleSheets: Array.isArray(document.adoptedStyleSheets) && "replace" in CSSStyleSheet.prototype, + /** + * Sets the HTML trusted types policy used by the templating engine. + * @param policy - The policy to set for HTML. + * @remarks + * This API can only be called once, for security reasons. It should be + * called by the application developer at the start of their program. + */ + setHTMLPolicy(policy) { + if (htmlPolicy !== fastHTMLPolicy) { + throw new Error("The HTML policy can only be set once."); + } + htmlPolicy = policy; + }, + /** + * Turns a string into trusted HTML using the configured trusted types policy. + * @param html - The string to turn into trusted HTML. + * @remarks + * Used internally by the template engine when creating templates + * and setting innerHTML. + */ + createHTML(html2) { + return htmlPolicy.createHTML(html2); + }, + /** + * Determines if the provided node is a template marker used by the runtime. + * @param node - The node to test. + */ + isMarker(node) { + return node && node.nodeType === 8 && node.data.startsWith(marker); + }, + /** + * Given a marker node, extract the {@link HTMLDirective} index from the placeholder. + * @param node - The marker node to extract the index from. + */ + extractDirectiveIndexFromMarker(node) { + return parseInt(node.data.replace(`${marker}:`, "")); + }, + /** + * Creates a placeholder string suitable for marking out a location *within* + * an attribute value or HTML content. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by binding directives. + */ + createInterpolationPlaceholder(index) { + return `${_interpolationStart}${index}${_interpolationEnd}`; + }, + /** + * Creates a placeholder that manifests itself as an attribute on an + * element. + * @param attributeName - The name of the custom attribute. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by attribute directives such as `ref`, `slotted`, and `children`. + */ + createCustomAttributePlaceholder(attributeName, index) { + return `${attributeName}="${this.createInterpolationPlaceholder(index)}"`; + }, + /** + * Creates a placeholder that manifests itself as a marker within the DOM structure. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by structural directives such as `repeat`. + */ + createBlockPlaceholder(index) { + return ``; + }, + /** + * Schedules DOM update work in the next async batch. + * @param callable - The callable function or object to queue. + */ + queueUpdate: updateQueue.enqueue, + /** + * Immediately processes all work previously scheduled + * through queueUpdate. + * @remarks + * This also forces nextUpdate promises + * to resolve. + */ + processUpdates: updateQueue.process, + /** + * Resolves with the next DOM update. + */ + nextUpdate() { + return new Promise(updateQueue.enqueue); + }, + /** + * Sets an attribute value on an element. + * @param element - The element to set the attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is `null` or `undefined`, the attribute is removed, otherwise + * it is set to the provided value using the standard `setAttribute` API. + */ + setAttribute(element, attributeName, value) { + if (value === null || value === void 0) { + element.removeAttribute(attributeName); + } else { + element.setAttribute(attributeName, value); + } + }, + /** + * Sets a boolean attribute value. + * @param element - The element to set the boolean attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is true, the attribute is added; otherwise it is removed. + */ + setBooleanAttribute(element, attributeName, value) { + value ? element.setAttribute(attributeName, "") : element.removeAttribute(attributeName); + }, + /** + * Removes all the child nodes of the provided parent node. + * @param parent - The node to remove the children from. + */ + removeChildNodes(parent) { + for (let child = parent.firstChild; child !== null; child = parent.firstChild) { + parent.removeChild(child); + } + }, + /** + * Creates a TreeWalker configured to walk a template fragment. + * @param fragment - The fragment to walk. + */ + createTemplateWalker(fragment) { + return document.createTreeWalker( + fragment, + 133, + // element, text, comment + null, + false + ); + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js + var SubscriberSet, PropertyChangeNotifier; + var init_notifier = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js"() { + SubscriberSet = class { + /** + * Creates an instance of SubscriberSet for the specified source. + * @param source - The object source that subscribers will receive notifications from. + * @param initialSubscriber - An initial subscriber to changes. + */ + constructor(source, initialSubscriber) { + this.sub1 = void 0; + this.sub2 = void 0; + this.spillover = void 0; + this.source = source; + this.sub1 = initialSubscriber; + } + /** + * Checks whether the provided subscriber has been added to this set. + * @param subscriber - The subscriber to test for inclusion in this set. + */ + has(subscriber) { + return this.spillover === void 0 ? this.sub1 === subscriber || this.sub2 === subscriber : this.spillover.indexOf(subscriber) !== -1; + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + */ + subscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.has(subscriber)) { + return; + } + if (this.sub1 === void 0) { + this.sub1 = subscriber; + return; + } + if (this.sub2 === void 0) { + this.sub2 = subscriber; + return; + } + this.spillover = [this.sub1, this.sub2, subscriber]; + this.sub1 = void 0; + this.sub2 = void 0; + } else { + const index = spillover.indexOf(subscriber); + if (index === -1) { + spillover.push(subscriber); + } + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + */ + unsubscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.sub1 === subscriber) { + this.sub1 = void 0; + } else if (this.sub2 === subscriber) { + this.sub2 = void 0; + } + } else { + const index = spillover.indexOf(subscriber); + if (index !== -1) { + spillover.splice(index, 1); + } + } + } + /** + * Notifies all subscribers. + * @param args - Data passed along to subscribers during notification. + */ + notify(args) { + const spillover = this.spillover; + const source = this.source; + if (spillover === void 0) { + const sub1 = this.sub1; + const sub2 = this.sub2; + if (sub1 !== void 0) { + sub1.handleChange(source, args); + } + if (sub2 !== void 0) { + sub2.handleChange(source, args); + } + } else { + for (let i = 0, ii = spillover.length; i < ii; ++i) { + spillover[i].handleChange(source, args); + } + } + } + }; + PropertyChangeNotifier = class { + /** + * Creates an instance of PropertyChangeNotifier for the specified source. + * @param source - The object source that subscribers will receive notifications from. + */ + constructor(source) { + this.subscribers = {}; + this.sourceSubscribers = null; + this.source = source; + } + /** + * Notifies all subscribers, based on the specified property. + * @param propertyName - The property name, passed along to subscribers during notification. + */ + notify(propertyName) { + var _a; + const subscribers = this.subscribers[propertyName]; + if (subscribers !== void 0) { + subscribers.notify(propertyName); + } + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.notify(propertyName); + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + * @param propertyToWatch - The name of the property that the subscriber is interested in watching for changes. + */ + subscribe(subscriber, propertyToWatch) { + var _a; + if (propertyToWatch) { + let subscribers = this.subscribers[propertyToWatch]; + if (subscribers === void 0) { + this.subscribers[propertyToWatch] = subscribers = new SubscriberSet(this.source); + } + subscribers.subscribe(subscriber); + } else { + this.sourceSubscribers = (_a = this.sourceSubscribers) !== null && _a !== void 0 ? _a : new SubscriberSet(this.source); + this.sourceSubscribers.subscribe(subscriber); + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + * @param propertyToUnwatch - The name of the property that the subscriber is no longer interested in watching. + */ + unsubscribe(subscriber, propertyToUnwatch) { + var _a; + if (propertyToUnwatch) { + const subscribers = this.subscribers[propertyToUnwatch]; + if (subscribers !== void 0) { + subscribers.unsubscribe(subscriber); + } + } else { + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriber); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/observable.js + function observable(target, nameOrAccessor) { + Observable.defineProperty(target, nameOrAccessor); + } + function volatile(target, name, descriptor) { + return Object.assign({}, descriptor, { + get: function() { + Observable.trackVolatile(); + return descriptor.get.apply(this); + } + }); + } + var Observable, contextEvent, ExecutionContext, defaultExecutionContext; + var init_observable = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/observable.js"() { + init_dom(); + init_platform(); + init_notifier(); + Observable = FAST.getById(2, () => { + const volatileRegex = /(:|&&|\|\||if)/; + const notifierLookup = /* @__PURE__ */ new WeakMap(); + const queueUpdate = DOM.queueUpdate; + let watcher = void 0; + let createArrayObserver = (array) => { + throw new Error("Must call enableArrayObservation before observing arrays."); + }; + function getNotifier(source) { + let found = source.$fastController || notifierLookup.get(source); + if (found === void 0) { + if (Array.isArray(source)) { + found = createArrayObserver(source); + } else { + notifierLookup.set(source, found = new PropertyChangeNotifier(source)); + } + } + return found; + } + const getAccessors = createMetadataLocator(); + class DefaultObservableAccessor { + constructor(name) { + this.name = name; + this.field = `_${name}`; + this.callback = `${name}Changed`; + } + getValue(source) { + if (watcher !== void 0) { + watcher.watch(source, this.name); + } + return source[this.field]; + } + setValue(source, newValue) { + const field = this.field; + const oldValue = source[field]; + if (oldValue !== newValue) { + source[field] = newValue; + const callback = source[this.callback]; + if (typeof callback === "function") { + callback.call(source, oldValue, newValue); + } + getNotifier(source).notify(this.name); + } + } + } + class BindingObserverImplementation extends SubscriberSet { + constructor(binding, initialSubscriber, isVolatileBinding = false) { + super(binding, initialSubscriber); + this.binding = binding; + this.isVolatileBinding = isVolatileBinding; + this.needsRefresh = true; + this.needsQueue = true; + this.first = this; + this.last = null; + this.propertySource = void 0; + this.propertyName = void 0; + this.notifier = void 0; + this.next = void 0; + } + observe(source, context) { + if (this.needsRefresh && this.last !== null) { + this.disconnect(); + } + const previousWatcher = watcher; + watcher = this.needsRefresh ? this : void 0; + this.needsRefresh = this.isVolatileBinding; + const result = this.binding(source, context); + watcher = previousWatcher; + return result; + } + disconnect() { + if (this.last !== null) { + let current = this.first; + while (current !== void 0) { + current.notifier.unsubscribe(this, current.propertyName); + current = current.next; + } + this.last = null; + this.needsRefresh = this.needsQueue = true; + } + } + watch(propertySource, propertyName) { + const prev = this.last; + const notifier = getNotifier(propertySource); + const current = prev === null ? this.first : {}; + current.propertySource = propertySource; + current.propertyName = propertyName; + current.notifier = notifier; + notifier.subscribe(this, propertyName); + if (prev !== null) { + if (!this.needsRefresh) { + let prevValue; + watcher = void 0; + prevValue = prev.propertySource[prev.propertyName]; + watcher = this; + if (propertySource === prevValue) { + this.needsRefresh = true; + } + } + prev.next = current; + } + this.last = current; + } + handleChange() { + if (this.needsQueue) { + this.needsQueue = false; + queueUpdate(this); + } + } + call() { + if (this.last !== null) { + this.needsQueue = true; + this.notify(this); + } + } + records() { + let next = this.first; + return { + next: () => { + const current = next; + if (current === void 0) { + return { value: void 0, done: true }; + } else { + next = next.next; + return { + value: current, + done: false + }; + } + }, + [Symbol.iterator]: function() { + return this; + } + }; + } + } + return Object.freeze({ + /** + * @internal + * @param factory - The factory used to create array observers. + */ + setArrayObserverFactory(factory) { + createArrayObserver = factory; + }, + /** + * Gets a notifier for an object or Array. + * @param source - The object or Array to get the notifier for. + */ + getNotifier, + /** + * Records a property change for a source object. + * @param source - The object to record the change against. + * @param propertyName - The property to track as changed. + */ + track(source, propertyName) { + if (watcher !== void 0) { + watcher.watch(source, propertyName); + } + }, + /** + * Notifies watchers that the currently executing property getter or function is volatile + * with respect to its observable dependencies. + */ + trackVolatile() { + if (watcher !== void 0) { + watcher.needsRefresh = true; + } + }, + /** + * Notifies subscribers of a source object of changes. + * @param source - the object to notify of changes. + * @param args - The change args to pass to subscribers. + */ + notify(source, args) { + getNotifier(source).notify(args); + }, + /** + * Defines an observable property on an object or prototype. + * @param target - The target object to define the observable on. + * @param nameOrAccessor - The name of the property to define as observable; + * or a custom accessor that specifies the property name and accessor implementation. + */ + defineProperty(target, nameOrAccessor) { + if (typeof nameOrAccessor === "string") { + nameOrAccessor = new DefaultObservableAccessor(nameOrAccessor); + } + getAccessors(target).push(nameOrAccessor); + Reflect.defineProperty(target, nameOrAccessor.name, { + enumerable: true, + get: function() { + return nameOrAccessor.getValue(this); + }, + set: function(newValue) { + nameOrAccessor.setValue(this, newValue); + } + }); + }, + /** + * Finds all the observable accessors defined on the target, + * including its prototype chain. + * @param target - The target object to search for accessor on. + */ + getAccessors, + /** + * Creates a {@link BindingObserver} that can watch the + * provided {@link Binding} for changes. + * @param binding - The binding to observe. + * @param initialSubscriber - An initial subscriber to changes in the binding value. + * @param isVolatileBinding - Indicates whether the binding's dependency list must be re-evaluated on every value evaluation. + */ + binding(binding, initialSubscriber, isVolatileBinding = this.isVolatileBinding(binding)) { + return new BindingObserverImplementation(binding, initialSubscriber, isVolatileBinding); + }, + /** + * Determines whether a binding expression is volatile and needs to have its dependency list re-evaluated + * on every evaluation of the value. + * @param binding - The binding to inspect. + */ + isVolatileBinding(binding) { + return volatileRegex.test(binding.toString()); + } + }); + }); + contextEvent = FAST.getById(3, () => { + let current = null; + return { + get() { + return current; + }, + set(event) { + current = event; + } + }; + }); + ExecutionContext = class { + constructor() { + this.index = 0; + this.length = 0; + this.parent = null; + this.parentContext = null; + } + /** + * The current event within an event handler. + */ + get event() { + return contextEvent.get(); + } + /** + * Indicates whether the current item within a repeat context + * has an even index. + */ + get isEven() { + return this.index % 2 === 0; + } + /** + * Indicates whether the current item within a repeat context + * has an odd index. + */ + get isOdd() { + return this.index % 2 !== 0; + } + /** + * Indicates whether the current item within a repeat context + * is the first item in the collection. + */ + get isFirst() { + return this.index === 0; + } + /** + * Indicates whether the current item within a repeat context + * is somewhere in the middle of the collection. + */ + get isInMiddle() { + return !this.isFirst && !this.isLast; + } + /** + * Indicates whether the current item within a repeat context + * is the last item in the collection. + */ + get isLast() { + return this.index === this.length - 1; + } + /** + * Sets the event for the current execution context. + * @param event - The event to set. + * @internal + */ + static setEvent(event) { + contextEvent.set(event); + } + }; + Observable.defineProperty(ExecutionContext.prototype, "index"); + Observable.defineProperty(ExecutionContext.prototype, "length"); + defaultExecutionContext = Object.seal(new ExecutionContext()); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js + var HTMLDirective, TargetedHTMLDirective, AttachedBehaviorHTMLDirective; + var init_html_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js"() { + init_dom(); + HTMLDirective = class { + constructor() { + this.targetIndex = 0; + } + }; + TargetedHTMLDirective = class extends HTMLDirective { + constructor() { + super(...arguments); + this.createPlaceholder = DOM.createInterpolationPlaceholder; + } + }; + AttachedBehaviorHTMLDirective = class extends HTMLDirective { + /** + * + * @param name - The name of the behavior; used as a custom attribute on the element. + * @param behavior - The behavior to instantiate and attach to the element. + * @param options - Options to pass to the behavior during creation. + */ + constructor(name, behavior, options) { + super(); + this.name = name; + this.behavior = behavior; + this.options = options; + } + /** + * Creates a placeholder string based on the directive's index within the template. + * @param index - The index of the directive within the template. + * @remarks + * Creates a custom attribute placeholder. + */ + createPlaceholder(index) { + return DOM.createCustomAttributePlaceholder(this.name, index); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + * @remarks + * Creates an instance of the `behavior` type this directive was constructed with + * and passes the target and options to that `behavior`'s constructor. + */ + createBehavior(target) { + return new this.behavior(target, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/binding.js + function normalBind(source, context) { + this.source = source; + this.context = context; + if (this.bindingObserver === null) { + this.bindingObserver = Observable.binding(this.binding, this, this.isBindingVolatile); + } + this.updateTarget(this.bindingObserver.observe(source, context)); + } + function triggerBind(source, context) { + this.source = source; + this.context = context; + this.target.addEventListener(this.targetName, this); + } + function normalUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + } + function contentUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.unbind(); + view.needsBindOnly = true; + } + } + function triggerUnbind() { + this.target.removeEventListener(this.targetName, this); + this.source = null; + this.context = null; + } + function updateAttributeTarget(value) { + DOM.setAttribute(this.target, this.targetName, value); + } + function updateBooleanAttributeTarget(value) { + DOM.setBooleanAttribute(this.target, this.targetName, value); + } + function updateContentTarget(value) { + if (value === null || value === void 0) { + value = ""; + } + if (value.create) { + this.target.textContent = ""; + let view = this.target.$fastView; + if (view === void 0) { + view = value.create(); + } else { + if (this.target.$fastTemplate !== value) { + if (view.isComposed) { + view.remove(); + view.unbind(); + } + view = value.create(); + } + } + if (!view.isComposed) { + view.isComposed = true; + view.bind(this.source, this.context); + view.insertBefore(this.target); + this.target.$fastView = view; + this.target.$fastTemplate = value; + } else if (view.needsBindOnly) { + view.needsBindOnly = false; + view.bind(this.source, this.context); + } + } else { + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.isComposed = false; + view.remove(); + if (view.needsBindOnly) { + view.needsBindOnly = false; + } else { + view.unbind(); + } + } + this.target.textContent = value; + } + } + function updatePropertyTarget(value) { + this.target[this.targetName] = value; + } + function updateClassTarget(value) { + const classVersions = this.classVersions || /* @__PURE__ */ Object.create(null); + const target = this.target; + let version = this.version || 0; + if (value !== null && value !== void 0 && value.length) { + const names = value.split(/\s+/); + for (let i = 0, ii = names.length; i < ii; ++i) { + const currentName = names[i]; + if (currentName === "") { + continue; + } + classVersions[currentName] = version; + target.classList.add(currentName); + } + } + this.classVersions = classVersions; + this.version = version + 1; + if (version === 0) { + return; + } + version -= 1; + for (const name in classVersions) { + if (classVersions[name] === version) { + target.classList.remove(name); + } + } + } + var HTMLBindingDirective, BindingBehavior; + var init_binding = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/binding.js"() { + init_dom(); + init_observable(); + init_html_directive(); + HTMLBindingDirective = class extends TargetedHTMLDirective { + /** + * Creates an instance of BindingDirective. + * @param binding - A binding that returns the data used to update the DOM. + */ + constructor(binding) { + super(); + this.binding = binding; + this.bind = normalBind; + this.unbind = normalUnbind; + this.updateTarget = updateAttributeTarget; + this.isBindingVolatile = Observable.isVolatileBinding(this.binding); + } + /** + * Gets/sets the name of the attribute or property that this + * binding is targeting. + */ + get targetName() { + return this.originalTargetName; + } + set targetName(value) { + this.originalTargetName = value; + if (value === void 0) { + return; + } + switch (value[0]) { + case ":": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updatePropertyTarget; + if (this.cleanedTargetName === "innerHTML") { + const binding = this.binding; + this.binding = (s, c) => DOM.createHTML(binding(s, c)); + } + break; + case "?": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updateBooleanAttributeTarget; + break; + case "@": + this.cleanedTargetName = value.substr(1); + this.bind = triggerBind; + this.unbind = triggerUnbind; + break; + default: + this.cleanedTargetName = value; + if (value === "class") { + this.updateTarget = updateClassTarget; + } + break; + } + } + /** + * Makes this binding target the content of an element rather than + * a particular attribute or property. + */ + targetAtContent() { + this.updateTarget = updateContentTarget; + this.unbind = contentUnbind; + } + /** + * Creates the runtime BindingBehavior instance based on the configuration + * information stored in the BindingDirective. + * @param target - The target node that the binding behavior should attach to. + */ + createBehavior(target) { + return new BindingBehavior(target, this.binding, this.isBindingVolatile, this.bind, this.unbind, this.updateTarget, this.cleanedTargetName); + } + }; + BindingBehavior = class { + /** + * Creates an instance of BindingBehavior. + * @param target - The target of the data updates. + * @param binding - The binding that returns the latest value for an update. + * @param isBindingVolatile - Indicates whether the binding has volatile dependencies. + * @param bind - The operation to perform during binding. + * @param unbind - The operation to perform during unbinding. + * @param updateTarget - The operation to perform when updating. + * @param targetName - The name of the target attribute or property to update. + */ + constructor(target, binding, isBindingVolatile, bind, unbind, updateTarget, targetName) { + this.source = null; + this.context = null; + this.bindingObserver = null; + this.target = target; + this.binding = binding; + this.isBindingVolatile = isBindingVolatile; + this.bind = bind; + this.unbind = unbind; + this.updateTarget = updateTarget; + this.targetName = targetName; + } + /** @internal */ + handleChange() { + this.updateTarget(this.bindingObserver.observe(this.source, this.context)); + } + /** @internal */ + handleEvent(event) { + ExecutionContext.setEvent(event); + const result = this.binding(this.source, this.context); + ExecutionContext.setEvent(null); + if (result !== true) { + event.preventDefault(); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js + function createAggregateBinding(parts) { + if (parts.length === 1) { + return parts[0]; + } + let targetName; + const partCount = parts.length; + const finalParts = parts.map((x) => { + if (typeof x === "string") { + return () => x; + } + targetName = x.targetName || targetName; + return x.binding; + }); + const binding = (scope, context) => { + let output = ""; + for (let i = 0; i < partCount; ++i) { + output += finalParts[i](scope, context); + } + return output; + }; + const directive = new HTMLBindingDirective(binding); + directive.targetName = targetName; + return directive; + } + function parseContent(context, value) { + const valueParts = value.split(_interpolationStart); + if (valueParts.length === 1) { + return null; + } + const bindingParts = []; + for (let i = 0, ii = valueParts.length; i < ii; ++i) { + const current = valueParts[i]; + const index = current.indexOf(_interpolationEnd); + let literal; + if (index === -1) { + literal = current; + } else { + const directiveIndex = parseInt(current.substring(0, index)); + bindingParts.push(context.directives[directiveIndex]); + literal = current.substring(index + interpolationEndLength); + } + if (literal !== "") { + bindingParts.push(literal); + } + } + return bindingParts; + } + function compileAttributes(context, node, includeBasicValues = false) { + const attributes = node.attributes; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const attr2 = attributes[i]; + const attrValue = attr2.value; + const parseResult = parseContent(context, attrValue); + let result = null; + if (parseResult === null) { + if (includeBasicValues) { + result = new HTMLBindingDirective(() => attrValue); + result.targetName = attr2.name; + } + } else { + result = createAggregateBinding(parseResult); + } + if (result !== null) { + node.removeAttributeNode(attr2); + i--; + ii--; + context.addFactory(result); + } + } + } + function compileContent(context, node, walker) { + const parseResult = parseContent(context, node.textContent); + if (parseResult !== null) { + let lastNode = node; + for (let i = 0, ii = parseResult.length; i < ii; ++i) { + const currentPart = parseResult[i]; + const currentNode = i === 0 ? node : lastNode.parentNode.insertBefore(document.createTextNode(""), lastNode.nextSibling); + if (typeof currentPart === "string") { + currentNode.textContent = currentPart; + } else { + currentNode.textContent = " "; + context.captureContentBinding(currentPart); + } + lastNode = currentNode; + context.targetIndex++; + if (currentNode !== node) { + walker.nextNode(); + } + } + context.targetIndex--; + } + } + function compileTemplate(template, directives) { + const fragment = template.content; + document.adoptNode(fragment); + const context = CompilationContext.borrow(directives); + compileAttributes(context, template, true); + const hostBehaviorFactories = context.behaviorFactories; + context.reset(); + const walker = DOM.createTemplateWalker(fragment); + let node; + while (node = walker.nextNode()) { + context.targetIndex++; + switch (node.nodeType) { + case 1: + compileAttributes(context, node); + break; + case 3: + compileContent(context, node, walker); + break; + case 8: + if (DOM.isMarker(node)) { + context.addFactory(directives[DOM.extractDirectiveIndexFromMarker(node)]); + } + } + } + let targetOffset = 0; + if ( + // If the first node in a fragment is a marker, that means it's an unstable first node, + // because something like a when, repeat, etc. could add nodes before the marker. + // To mitigate this, we insert a stable first node. However, if we insert a node, + // that will alter the result of the TreeWalker. So, we also need to offset the target index. + DOM.isMarker(fragment.firstChild) || // Or if there is only one node and a directive, it means the template's content + // is *only* the directive. In that case, HTMLView.dispose() misses any nodes inserted by + // the directive. Inserting a new node ensures proper disposal of nodes added by the directive. + fragment.childNodes.length === 1 && directives.length + ) { + fragment.insertBefore(document.createComment(""), fragment.firstChild); + targetOffset = -1; + } + const viewBehaviorFactories = context.behaviorFactories; + context.release(); + return { + fragment, + viewBehaviorFactories, + hostBehaviorFactories, + targetOffset + }; + } + var sharedContext, CompilationContext, interpolationEndLength; + var init_compiler = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js"() { + init_dom(); + init_binding(); + sharedContext = null; + CompilationContext = class _CompilationContext { + addFactory(factory) { + factory.targetIndex = this.targetIndex; + this.behaviorFactories.push(factory); + } + captureContentBinding(directive) { + directive.targetAtContent(); + this.addFactory(directive); + } + reset() { + this.behaviorFactories = []; + this.targetIndex = -1; + } + release() { + sharedContext = this; + } + static borrow(directives) { + const shareable = sharedContext || new _CompilationContext(); + shareable.directives = directives; + shareable.reset(); + sharedContext = null; + return shareable; + } + }; + interpolationEndLength = _interpolationEnd.length; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/view.js + var range, HTMLView; + var init_view = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/view.js"() { + range = document.createRange(); + HTMLView = class { + /** + * Constructs an instance of HTMLView. + * @param fragment - The html fragment that contains the nodes for this view. + * @param behaviors - The behaviors to be applied to this view. + */ + constructor(fragment, behaviors) { + this.fragment = fragment; + this.behaviors = behaviors; + this.source = null; + this.context = null; + this.firstChild = fragment.firstChild; + this.lastChild = fragment.lastChild; + } + /** + * Appends the view's DOM nodes to the referenced node. + * @param node - The parent node to append the view's DOM nodes to. + */ + appendTo(node) { + node.appendChild(this.fragment); + } + /** + * Inserts the view's DOM nodes before the referenced node. + * @param node - The node to insert the view's DOM before. + */ + insertBefore(node) { + if (this.fragment.hasChildNodes()) { + node.parentNode.insertBefore(this.fragment, node); + } else { + const end = this.lastChild; + if (node.previousSibling === end) + return; + const parentNode = node.parentNode; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parentNode.insertBefore(current, node); + current = next; + } + parentNode.insertBefore(end, node); + } + } + /** + * Removes the view's DOM nodes. + * The nodes are not disposed and the view can later be re-inserted. + */ + remove() { + const fragment = this.fragment; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + fragment.appendChild(current); + current = next; + } + fragment.appendChild(end); + } + /** + * Removes the view and unbinds its behaviors, disposing of DOM nodes afterward. + * Once a view has been disposed, it cannot be inserted or bound again. + */ + dispose() { + const parent = this.firstChild.parentNode; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parent.removeChild(current); + current = next; + } + parent.removeChild(end); + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + } + /** + * Binds a view's behaviors to its binding source. + * @param source - The binding source for the view's binding behaviors. + * @param context - The execution context to run the behaviors within. + */ + bind(source, context) { + const behaviors = this.behaviors; + if (this.source === source) { + return; + } else if (this.source !== null) { + const oldSource = this.source; + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + const current = behaviors[i]; + current.unbind(oldSource); + current.bind(source, context); + } + } else { + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].bind(source, context); + } + } + } + /** + * Unbinds a view's behaviors from its binding source. + */ + unbind() { + if (this.source === null) { + return; + } + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + this.source = null; + } + /** + * Efficiently disposes of a contiguous range of synthetic view instances. + * @param views - A contiguous range of views to be disposed. + */ + static disposeContiguousBatch(views) { + if (views.length === 0) { + return; + } + range.setStartBefore(views[0].firstChild); + range.setEndAfter(views[views.length - 1].lastChild); + range.deleteContents(); + for (let i = 0, ii = views.length; i < ii; ++i) { + const view = views[i]; + const behaviors = view.behaviors; + const oldSource = view.source; + for (let j = 0, jj = behaviors.length; j < jj; ++j) { + behaviors[j].unbind(oldSource); + } + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/template.js + function html(strings, ...values) { + const directives = []; + let html2 = ""; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + const currentString = strings[i]; + let value = values[i]; + html2 += currentString; + if (value instanceof ViewTemplate) { + const template = value; + value = () => template; + } + if (typeof value === "function") { + value = new HTMLBindingDirective(value); + } + if (value instanceof TargetedHTMLDirective) { + const match = lastAttributeNameRegex.exec(currentString); + if (match !== null) { + value.targetName = match[2]; + } + } + if (value instanceof HTMLDirective) { + html2 += value.createPlaceholder(directives.length); + directives.push(value); + } else { + html2 += value; + } + } + html2 += strings[strings.length - 1]; + return new ViewTemplate(html2, directives); + } + var ViewTemplate, lastAttributeNameRegex; + var init_template = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/template.js"() { + init_dom(); + init_observable(); + init_compiler(); + init_view(); + init_html_directive(); + init_binding(); + ViewTemplate = class { + /** + * Creates an instance of ViewTemplate. + * @param html - The html representing what this template will instantiate, including placeholders for directives. + * @param directives - The directives that will be connected to placeholders in the html. + */ + constructor(html2, directives) { + this.behaviorCount = 0; + this.hasHostBehaviors = false; + this.fragment = null; + this.targetOffset = 0; + this.viewBehaviorFactories = null; + this.hostBehaviorFactories = null; + this.html = html2; + this.directives = directives; + } + /** + * Creates an HTMLView instance based on this template definition. + * @param hostBindingTarget - The element that host behaviors will be bound to. + */ + create(hostBindingTarget) { + if (this.fragment === null) { + let template; + const html2 = this.html; + if (typeof html2 === "string") { + template = document.createElement("template"); + template.innerHTML = DOM.createHTML(html2); + const fec = template.content.firstElementChild; + if (fec !== null && fec.tagName === "TEMPLATE") { + template = fec; + } + } else { + template = html2; + } + const result = compileTemplate(template, this.directives); + this.fragment = result.fragment; + this.viewBehaviorFactories = result.viewBehaviorFactories; + this.hostBehaviorFactories = result.hostBehaviorFactories; + this.targetOffset = result.targetOffset; + this.behaviorCount = this.viewBehaviorFactories.length + this.hostBehaviorFactories.length; + this.hasHostBehaviors = this.hostBehaviorFactories.length > 0; + } + const fragment = this.fragment.cloneNode(true); + const viewFactories = this.viewBehaviorFactories; + const behaviors = new Array(this.behaviorCount); + const walker = DOM.createTemplateWalker(fragment); + let behaviorIndex = 0; + let targetIndex = this.targetOffset; + let node = walker.nextNode(); + for (let ii = viewFactories.length; behaviorIndex < ii; ++behaviorIndex) { + const factory = viewFactories[behaviorIndex]; + const factoryIndex = factory.targetIndex; + while (node !== null) { + if (targetIndex === factoryIndex) { + behaviors[behaviorIndex] = factory.createBehavior(node); + break; + } else { + node = walker.nextNode(); + targetIndex++; + } + } + } + if (this.hasHostBehaviors) { + const hostFactories = this.hostBehaviorFactories; + for (let i = 0, ii = hostFactories.length; i < ii; ++i, ++behaviorIndex) { + behaviors[behaviorIndex] = hostFactories[i].createBehavior(hostBindingTarget); + } + } + return new HTMLView(fragment, behaviors); + } + /** + * Creates an HTMLView from this template, binds it to the source, and then appends it to the host. + * @param source - The data source to bind the template to. + * @param host - The Element where the template will be rendered. + * @param hostBindingTarget - An HTML element to target the host bindings at if different from the + * host that the template is being attached to. + */ + render(source, host, hostBindingTarget) { + if (typeof host === "string") { + host = document.getElementById(host); + } + if (hostBindingTarget === void 0) { + hostBindingTarget = host; + } + const view = this.create(hostBindingTarget); + view.bind(source, defaultExecutionContext); + view.appendTo(host); + return view; + } + }; + lastAttributeNameRegex = /* eslint-disable-next-line no-control-regex */ + /([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js + function reduceStyles(styles) { + return styles.map((x) => x instanceof ElementStyles ? reduceStyles(x.styles) : [x]).reduce((prev, curr) => prev.concat(curr), []); + } + function reduceBehaviors(styles) { + return styles.map((x) => x instanceof ElementStyles ? x.behaviors : null).reduce((prev, curr) => { + if (curr === null) { + return prev; + } + if (prev === null) { + prev = []; + } + return prev.concat(curr); + }, null); + } + function separateSheetsToPrepend(sheets) { + const prepend = []; + const append = []; + sheets.forEach((x) => (x[prependToAdoptedStyleSheetsSymbol] ? prepend : append).push(x)); + return { prepend, append }; + } + function getNextStyleClass() { + return `fast-style-class-${++styleClassId}`; + } + var ElementStyles, prependToAdoptedStyleSheetsSymbol, addAdoptedStyleSheets, removeAdoptedStyleSheets, AdoptedStyleSheetsStyles, styleClassId, StyleElementStyles; + var init_element_styles = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js"() { + init_dom(); + ElementStyles = class { + constructor() { + this.targets = /* @__PURE__ */ new WeakSet(); + } + /** @internal */ + addStylesTo(target) { + this.targets.add(target); + } + /** @internal */ + removeStylesFrom(target) { + this.targets.delete(target); + } + /** @internal */ + isAttachedTo(target) { + return this.targets.has(target); + } + /** + * Associates behaviors with this set of styles. + * @param behaviors - The behaviors to associate. + */ + withBehaviors(...behaviors) { + this.behaviors = this.behaviors === null ? behaviors : this.behaviors.concat(behaviors); + return this; + } + }; + ElementStyles.create = (() => { + if (DOM.supportsAdoptedStyleSheets) { + const styleSheetCache = /* @__PURE__ */ new Map(); + return (styles) => ( + // eslint-disable-next-line @typescript-eslint/no-use-before-define + new AdoptedStyleSheetsStyles(styles, styleSheetCache) + ); + } + return (styles) => new StyleElementStyles(styles); + })(); + prependToAdoptedStyleSheetsSymbol = /* @__PURE__ */ Symbol("prependToAdoptedStyleSheets"); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets = [...prepend, ...target.adoptedStyleSheets, ...append]; + }; + removeAdoptedStyleSheets = (target, sheets) => { + target.adoptedStyleSheets = target.adoptedStyleSheets.filter((x) => sheets.indexOf(x) === -1); + }; + if (DOM.supportsAdoptedStyleSheets) { + try { + document.adoptedStyleSheets.push(); + document.adoptedStyleSheets.splice(); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets.splice(0, 0, ...prepend); + target.adoptedStyleSheets.push(...append); + }; + removeAdoptedStyleSheets = (target, sheets) => { + for (const sheet of sheets) { + const index = target.adoptedStyleSheets.indexOf(sheet); + if (index !== -1) { + target.adoptedStyleSheets.splice(index, 1); + } + } + }; + } catch (e) { + } + } + AdoptedStyleSheetsStyles = class extends ElementStyles { + constructor(styles, styleSheetCache) { + super(); + this.styles = styles; + this.styleSheetCache = styleSheetCache; + this._styleSheets = void 0; + this.behaviors = reduceBehaviors(styles); + } + get styleSheets() { + if (this._styleSheets === void 0) { + const styles = this.styles; + const styleSheetCache = this.styleSheetCache; + this._styleSheets = reduceStyles(styles).map((x) => { + if (x instanceof CSSStyleSheet) { + return x; + } + let sheet = styleSheetCache.get(x); + if (sheet === void 0) { + sheet = new CSSStyleSheet(); + sheet.replaceSync(x); + styleSheetCache.set(x, sheet); + } + return sheet; + }); + } + return this._styleSheets; + } + addStylesTo(target) { + addAdoptedStyleSheets(target, this.styleSheets); + super.addStylesTo(target); + } + removeStylesFrom(target) { + removeAdoptedStyleSheets(target, this.styleSheets); + super.removeStylesFrom(target); + } + }; + styleClassId = 0; + StyleElementStyles = class extends ElementStyles { + constructor(styles) { + super(); + this.styles = styles; + this.behaviors = null; + this.behaviors = reduceBehaviors(styles); + this.styleSheets = reduceStyles(styles); + this.styleClass = getNextStyleClass(); + } + addStylesTo(target) { + const styleSheets = this.styleSheets; + const styleClass = this.styleClass; + target = this.normalizeTarget(target); + for (let i = 0; i < styleSheets.length; i++) { + const element = document.createElement("style"); + element.innerHTML = styleSheets[i]; + element.className = styleClass; + target.append(element); + } + super.addStylesTo(target); + } + removeStylesFrom(target) { + target = this.normalizeTarget(target); + const styles = target.querySelectorAll(`.${this.styleClass}`); + for (let i = 0, ii = styles.length; i < ii; ++i) { + target.removeChild(styles[i]); + } + super.removeStylesFrom(target); + } + isAttachedTo(target) { + return super.isAttachedTo(this.normalizeTarget(target)); + } + normalizeTarget(target) { + return target === document ? document.body : target; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/attributes.js + function attr(configOrTarget, prop) { + let config; + function decorator($target, $prop) { + if (arguments.length > 1) { + config.property = $prop; + } + AttributeConfiguration.locate($target.constructor).push(config); + } + if (arguments.length > 1) { + config = {}; + decorator(configOrTarget, prop); + return; + } + config = configOrTarget === void 0 ? {} : configOrTarget; + return decorator; + } + var AttributeConfiguration, booleanConverter, nullableNumberConverter, AttributeDefinition; + var init_attributes = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/attributes.js"() { + init_observable(); + init_dom(); + init_platform(); + AttributeConfiguration = Object.freeze({ + /** + * Locates all attribute configurations associated with a type. + */ + locate: createMetadataLocator() + }); + booleanConverter = { + toView(value) { + return value ? "true" : "false"; + }, + fromView(value) { + if (value === null || value === void 0 || value === "false" || value === false || value === 0) { + return false; + } + return true; + } + }; + nullableNumberConverter = { + toView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number.toString(); + }, + fromView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number; + } + }; + AttributeDefinition = class _AttributeDefinition { + /** + * Creates an instance of AttributeDefinition. + * @param Owner - The class constructor that owns this attribute. + * @param name - The name of the property associated with the attribute. + * @param attribute - The name of the attribute in HTML. + * @param mode - The {@link AttributeMode} that describes the behavior of this attribute. + * @param converter - A {@link ValueConverter} that integrates with the property getter/setter + * to convert values to and from a DOM string. + */ + constructor(Owner, name, attribute = name.toLowerCase(), mode = "reflect", converter) { + this.guards = /* @__PURE__ */ new Set(); + this.Owner = Owner; + this.name = name; + this.attribute = attribute; + this.mode = mode; + this.converter = converter; + this.fieldName = `_${name}`; + this.callbackName = `${name}Changed`; + this.hasCallback = this.callbackName in Owner.prototype; + if (mode === "boolean" && converter === void 0) { + this.converter = booleanConverter; + } + } + /** + * Sets the value of the attribute/property on the source element. + * @param source - The source element to access. + * @param value - The value to set the attribute/property to. + */ + setValue(source, newValue) { + const oldValue = source[this.fieldName]; + const converter = this.converter; + if (converter !== void 0) { + newValue = converter.fromView(newValue); + } + if (oldValue !== newValue) { + source[this.fieldName] = newValue; + this.tryReflectToAttribute(source); + if (this.hasCallback) { + source[this.callbackName](oldValue, newValue); + } + source.$fastController.notify(this.name); + } + } + /** + * Gets the value of the attribute/property on the source element. + * @param source - The source element to access. + */ + getValue(source) { + Observable.track(source, this.name); + return source[this.fieldName]; + } + /** @internal */ + onAttributeChangedCallback(element, value) { + if (this.guards.has(element)) { + return; + } + this.guards.add(element); + this.setValue(element, value); + this.guards.delete(element); + } + tryReflectToAttribute(element) { + const mode = this.mode; + const guards = this.guards; + if (guards.has(element) || mode === "fromView") { + return; + } + DOM.queueUpdate(() => { + guards.add(element); + const latestValue = element[this.fieldName]; + switch (mode) { + case "reflect": + const converter = this.converter; + DOM.setAttribute(element, this.attribute, converter !== void 0 ? converter.toView(latestValue) : latestValue); + break; + case "boolean": + DOM.setBooleanAttribute(element, this.attribute, latestValue); + break; + } + guards.delete(element); + }); + } + /** + * Collects all attribute definitions associated with the owner. + * @param Owner - The class constructor to collect attribute for. + * @param attributeLists - Any existing attributes to collect and merge with those associated with the owner. + * @internal + */ + static collect(Owner, ...attributeLists) { + const attributes = []; + attributeLists.push(AttributeConfiguration.locate(Owner)); + for (let i = 0, ii = attributeLists.length; i < ii; ++i) { + const list = attributeLists[i]; + if (list === void 0) { + continue; + } + for (let j = 0, jj = list.length; j < jj; ++j) { + const config = list[j]; + if (typeof config === "string") { + attributes.push(new _AttributeDefinition(Owner, config)); + } else { + attributes.push(new _AttributeDefinition(Owner, config.property, config.attribute, config.mode, config.converter)); + } + } + } + return attributes; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js + var defaultShadowOptions, defaultElementOptions, fastRegistry, FASTElementDefinition; + var init_fast_definitions = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js"() { + init_platform(); + init_observable(); + init_element_styles(); + init_attributes(); + defaultShadowOptions = { mode: "open" }; + defaultElementOptions = {}; + fastRegistry = FAST.getById(4, () => { + const typeToDefinition = /* @__PURE__ */ new Map(); + return Object.freeze({ + register(definition) { + if (typeToDefinition.has(definition.type)) { + return false; + } + typeToDefinition.set(definition.type, definition); + return true; + }, + getByType(key) { + return typeToDefinition.get(key); + } + }); + }); + FASTElementDefinition = class { + /** + * Creates an instance of FASTElementDefinition. + * @param type - The type this definition is being created for. + * @param nameOrConfig - The name of the element to define or a config object + * that describes the element to define. + */ + constructor(type, nameOrConfig = type.definition) { + if (typeof nameOrConfig === "string") { + nameOrConfig = { name: nameOrConfig }; + } + this.type = type; + this.name = nameOrConfig.name; + this.template = nameOrConfig.template; + const attributes = AttributeDefinition.collect(type, nameOrConfig.attributes); + const observedAttributes = new Array(attributes.length); + const propertyLookup = {}; + const attributeLookup = {}; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const current = attributes[i]; + observedAttributes[i] = current.attribute; + propertyLookup[current.name] = current; + attributeLookup[current.attribute] = current; + } + this.attributes = attributes; + this.observedAttributes = observedAttributes; + this.propertyLookup = propertyLookup; + this.attributeLookup = attributeLookup; + this.shadowOptions = nameOrConfig.shadowOptions === void 0 ? defaultShadowOptions : nameOrConfig.shadowOptions === null ? void 0 : Object.assign(Object.assign({}, defaultShadowOptions), nameOrConfig.shadowOptions); + this.elementOptions = nameOrConfig.elementOptions === void 0 ? defaultElementOptions : Object.assign(Object.assign({}, defaultElementOptions), nameOrConfig.elementOptions); + this.styles = nameOrConfig.styles === void 0 ? void 0 : Array.isArray(nameOrConfig.styles) ? ElementStyles.create(nameOrConfig.styles) : nameOrConfig.styles instanceof ElementStyles ? nameOrConfig.styles : ElementStyles.create([nameOrConfig.styles]); + } + /** + * Indicates if this element has been defined in at least one registry. + */ + get isDefined() { + return !!fastRegistry.getByType(this.type); + } + /** + * Defines a custom element based on this definition. + * @param registry - The element registry to define the element in. + */ + define(registry = customElements) { + const type = this.type; + if (fastRegistry.register(this)) { + const attributes = this.attributes; + const proto = type.prototype; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + Observable.defineProperty(proto, attributes[i]); + } + Reflect.defineProperty(type, "observedAttributes", { + value: this.observedAttributes, + enumerable: true + }); + } + if (!registry.get(this.name)) { + registry.define(this.name, type, this.elementOptions); + } + return this; + } + }; + FASTElementDefinition.forType = fastRegistry.getByType; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/controller.js + function getShadowRoot(element) { + return element.shadowRoot || shadowRoots.get(element) || null; + } + var shadowRoots, defaultEventOptions, Controller; + var init_controller = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/controller.js"() { + init_dom(); + init_notifier(); + init_observable(); + init_fast_definitions(); + shadowRoots = /* @__PURE__ */ new WeakMap(); + defaultEventOptions = { + bubbles: true, + composed: true, + cancelable: true + }; + Controller = class _Controller extends PropertyChangeNotifier { + /** + * Creates a Controller to control the specified element. + * @param element - The element to be controlled by this controller. + * @param definition - The element definition metadata that instructs this + * controller in how to handle rendering and other platform integrations. + * @internal + */ + constructor(element, definition) { + super(element); + this.boundObservables = null; + this.behaviors = null; + this.needsInitialization = true; + this._template = null; + this._styles = null; + this._isConnected = false; + this.$fastController = this; + this.view = null; + this.element = element; + this.definition = definition; + const shadowOptions = definition.shadowOptions; + if (shadowOptions !== void 0) { + const shadowRoot = element.attachShadow(shadowOptions); + if (shadowOptions.mode === "closed") { + shadowRoots.set(element, shadowRoot); + } + } + const accessors = Observable.getAccessors(element); + if (accessors.length > 0) { + const boundObservables = this.boundObservables = /* @__PURE__ */ Object.create(null); + for (let i = 0, ii = accessors.length; i < ii; ++i) { + const propertyName = accessors[i].name; + const value = element[propertyName]; + if (value !== void 0) { + delete element[propertyName]; + boundObservables[propertyName] = value; + } + } + } + } + /** + * Indicates whether or not the custom element has been + * connected to the document. + */ + get isConnected() { + Observable.track(this, "isConnected"); + return this._isConnected; + } + setIsConnected(value) { + this._isConnected = value; + Observable.notify(this, "isConnected"); + } + /** + * Gets/sets the template used to render the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get template() { + return this._template; + } + set template(value) { + if (this._template === value) { + return; + } + this._template = value; + if (!this.needsInitialization) { + this.renderTemplate(value); + } + } + /** + * Gets/sets the primary styles used for the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get styles() { + return this._styles; + } + set styles(value) { + if (this._styles === value) { + return; + } + if (this._styles !== null) { + this.removeStyles(this._styles); + } + this._styles = value; + if (!this.needsInitialization && value !== null) { + this.addStyles(value); + } + } + /** + * Adds styles to this element. Providing an HTMLStyleElement will attach the element instance to the shadowRoot. + * @param styles - The styles to add. + */ + addStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.append(styles); + } else if (!styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.addStylesTo(target); + if (sourceBehaviors !== null) { + this.addBehaviors(sourceBehaviors); + } + } + } + /** + * Removes styles from this element. Providing an HTMLStyleElement will detach the element instance from the shadowRoot. + * @param styles - the styles to remove. + */ + removeStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.removeChild(styles); + } else if (styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.removeStylesFrom(target); + if (sourceBehaviors !== null) { + this.removeBehaviors(sourceBehaviors); + } + } + } + /** + * Adds behaviors to this element. + * @param behaviors - The behaviors to add. + */ + addBehaviors(behaviors) { + const targetBehaviors = this.behaviors || (this.behaviors = /* @__PURE__ */ new Map()); + const length = behaviors.length; + const behaviorsToBind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + targetBehaviors.set(behavior, targetBehaviors.get(behavior) + 1); + } else { + targetBehaviors.set(behavior, 1); + behaviorsToBind.push(behavior); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToBind.length; ++i) { + behaviorsToBind[i].bind(element, defaultExecutionContext); + } + } + } + /** + * Removes behaviors from this element. + * @param behaviors - The behaviors to remove. + * @param force - Forces unbinding of behaviors. + */ + removeBehaviors(behaviors, force = false) { + const targetBehaviors = this.behaviors; + if (targetBehaviors === null) { + return; + } + const length = behaviors.length; + const behaviorsToUnbind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + const count = targetBehaviors.get(behavior) - 1; + count === 0 || force ? targetBehaviors.delete(behavior) && behaviorsToUnbind.push(behavior) : targetBehaviors.set(behavior, count); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToUnbind.length; ++i) { + behaviorsToUnbind[i].unbind(element); + } + } + } + /** + * Runs connected lifecycle behavior on the associated element. + */ + onConnectedCallback() { + if (this._isConnected) { + return; + } + const element = this.element; + if (this.needsInitialization) { + this.finishInitialization(); + } else if (this.view !== null) { + this.view.bind(element, defaultExecutionContext); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + for (const [behavior] of behaviors) { + behavior.bind(element, defaultExecutionContext); + } + } + this.setIsConnected(true); + } + /** + * Runs disconnected lifecycle behavior on the associated element. + */ + onDisconnectedCallback() { + if (!this._isConnected) { + return; + } + this.setIsConnected(false); + const view = this.view; + if (view !== null) { + view.unbind(); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + const element = this.element; + for (const [behavior] of behaviors) { + behavior.unbind(element); + } + } + } + /** + * Runs the attribute changed callback for the associated element. + * @param name - The name of the attribute that changed. + * @param oldValue - The previous value of the attribute. + * @param newValue - The new value of the attribute. + */ + onAttributeChangedCallback(name, oldValue, newValue) { + const attrDef = this.definition.attributeLookup[name]; + if (attrDef !== void 0) { + attrDef.onAttributeChangedCallback(this.element, newValue); + } + } + /** + * Emits a custom HTML event. + * @param type - The type name of the event. + * @param detail - The event detail object to send with the event. + * @param options - The event options. By default bubbles and composed. + * @remarks + * Only emits events if connected. + */ + emit(type, detail, options) { + if (this._isConnected) { + return this.element.dispatchEvent(new CustomEvent(type, Object.assign(Object.assign({ detail }, defaultEventOptions), options))); + } + return false; + } + finishInitialization() { + const element = this.element; + const boundObservables = this.boundObservables; + if (boundObservables !== null) { + const propertyNames = Object.keys(boundObservables); + for (let i = 0, ii = propertyNames.length; i < ii; ++i) { + const propertyName = propertyNames[i]; + element[propertyName] = boundObservables[propertyName]; + } + this.boundObservables = null; + } + const definition = this.definition; + if (this._template === null) { + if (this.element.resolveTemplate) { + this._template = this.element.resolveTemplate(); + } else if (definition.template) { + this._template = definition.template || null; + } + } + if (this._template !== null) { + this.renderTemplate(this._template); + } + if (this._styles === null) { + if (this.element.resolveStyles) { + this._styles = this.element.resolveStyles(); + } else if (definition.styles) { + this._styles = definition.styles || null; + } + } + if (this._styles !== null) { + this.addStyles(this._styles); + } + this.needsInitialization = false; + } + renderTemplate(template) { + const element = this.element; + const host = getShadowRoot(element) || element; + if (this.view !== null) { + this.view.dispose(); + this.view = null; + } else if (!this.needsInitialization) { + DOM.removeChildNodes(host); + } + if (template) { + this.view = template.render(element, host, element); + } + } + /** + * Locates or creates a controller for the specified element. + * @param element - The element to return the controller for. + * @remarks + * The specified element must have a {@link FASTElementDefinition} + * registered either through the use of the {@link customElement} + * decorator or a call to `FASTElement.define`. + */ + static forCustomElement(element) { + const controller = element.$fastController; + if (controller !== void 0) { + return controller; + } + const definition = FASTElementDefinition.forType(element.constructor); + if (definition === void 0) { + throw new Error("Missing FASTElement definition."); + } + return element.$fastController = new _Controller(element, definition); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js + function createFASTElement(BaseType) { + return class extends BaseType { + constructor() { + super(); + Controller.forCustomElement(this); + } + $emit(type, detail, options) { + return this.$fastController.emit(type, detail, options); + } + connectedCallback() { + this.$fastController.onConnectedCallback(); + } + disconnectedCallback() { + this.$fastController.onDisconnectedCallback(); + } + attributeChangedCallback(name, oldValue, newValue) { + this.$fastController.onAttributeChangedCallback(name, oldValue, newValue); + } + }; + } + var FASTElement; + var init_fast_element = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js"() { + init_controller(); + init_fast_definitions(); + FASTElement = Object.assign(createFASTElement(HTMLElement), { + /** + * Creates a new FASTElement base class inherited from the + * provided base type. + * @param BaseType - The base element type to inherit from. + */ + from(BaseType) { + return createFASTElement(BaseType); + }, + /** + * Defines a platform custom element based on the provided type and definition. + * @param type - The custom element type to define. + * @param nameOrDef - The name of the element to define or a definition object + * that describes the element to define. + */ + define(type, nameOrDef) { + return new FASTElementDefinition(type, nameOrDef).define().type; + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js + var CSSDirective; + var init_css_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js"() { + CSSDirective = class { + /** + * Creates a CSS fragment to interpolate into the CSS document. + * @returns - the string to interpolate into CSS + */ + createCSS() { + return ""; + } + /** + * Creates a behavior to bind to the host element. + * @returns - the behavior to bind to the host element, or undefined. + */ + createBehavior() { + return void 0; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css.js + function collectStyles(strings, values) { + const styles = []; + let cssString = ""; + const behaviors = []; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + cssString += strings[i]; + let value = values[i]; + if (value instanceof CSSDirective) { + const behavior = value.createBehavior(); + value = value.createCSS(); + if (behavior) { + behaviors.push(behavior); + } + } + if (value instanceof ElementStyles || value instanceof CSSStyleSheet) { + if (cssString.trim() !== "") { + styles.push(cssString); + cssString = ""; + } + styles.push(value); + } else { + cssString += value; + } + } + cssString += strings[strings.length - 1]; + if (cssString.trim() !== "") { + styles.push(cssString); + } + return { + styles, + behaviors + }; + } + function css(strings, ...values) { + const { styles, behaviors } = collectStyles(strings, values); + const elementStyles = ElementStyles.create(styles); + if (behaviors.length) { + elementStyles.withBehaviors(...behaviors); + } + return elementStyles; + } + var init_css = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css.js"() { + init_css_directive(); + init_element_styles(); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js + function newSplice(index, removed, addedCount) { + return { + index, + removed, + addedCount + }; + } + function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) { + const rowCount = oldEnd - oldStart + 1; + const columnCount = currentEnd - currentStart + 1; + const distances = new Array(rowCount); + let north; + let west; + for (let i = 0; i < rowCount; ++i) { + distances[i] = new Array(columnCount); + distances[i][0] = i; + } + for (let j = 0; j < columnCount; ++j) { + distances[0][j] = j; + } + for (let i = 1; i < rowCount; ++i) { + for (let j = 1; j < columnCount; ++j) { + if (current[currentStart + j - 1] === old[oldStart + i - 1]) { + distances[i][j] = distances[i - 1][j - 1]; + } else { + north = distances[i - 1][j] + 1; + west = distances[i][j - 1] + 1; + distances[i][j] = north < west ? north : west; + } + } + } + return distances; + } + function spliceOperationsFromEditDistances(distances) { + let i = distances.length - 1; + let j = distances[0].length - 1; + let current = distances[i][j]; + const edits = []; + while (i > 0 || j > 0) { + if (i === 0) { + edits.push(EDIT_ADD); + j--; + continue; + } + if (j === 0) { + edits.push(EDIT_DELETE); + i--; + continue; + } + const northWest = distances[i - 1][j - 1]; + const west = distances[i - 1][j]; + const north = distances[i][j - 1]; + let min; + if (west < north) { + min = west < northWest ? west : northWest; + } else { + min = north < northWest ? north : northWest; + } + if (min === northWest) { + if (northWest === current) { + edits.push(EDIT_LEAVE); + } else { + edits.push(EDIT_UPDATE); + current = northWest; + } + i--; + j--; + } else if (min === west) { + edits.push(EDIT_DELETE); + i--; + current = west; + } else { + edits.push(EDIT_ADD); + j--; + current = north; + } + } + edits.reverse(); + return edits; + } + function sharedPrefix(current, old, searchLength) { + for (let i = 0; i < searchLength; ++i) { + if (current[i] !== old[i]) { + return i; + } + } + return searchLength; + } + function sharedSuffix(current, old, searchLength) { + let index1 = current.length; + let index2 = old.length; + let count = 0; + while (count < searchLength && current[--index1] === old[--index2]) { + count++; + } + return count; + } + function intersect(start1, end1, start2, end2) { + if (end1 < start2 || end2 < start1) { + return -1; + } + if (end1 === start2 || end2 === start1) { + return 0; + } + if (start1 < start2) { + if (end1 < end2) { + return end1 - start2; + } + return end2 - start2; + } + if (end2 < end1) { + return end2 - start1; + } + return end1 - start1; + } + function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) { + let prefixCount = 0; + let suffixCount = 0; + const minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart); + if (currentStart === 0 && oldStart === 0) { + prefixCount = sharedPrefix(current, old, minLength); + } + if (currentEnd === current.length && oldEnd === old.length) { + suffixCount = sharedSuffix(current, old, minLength - prefixCount); + } + currentStart += prefixCount; + oldStart += prefixCount; + currentEnd -= suffixCount; + oldEnd -= suffixCount; + if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) { + return emptyArray; + } + if (currentStart === currentEnd) { + const splice2 = newSplice(currentStart, [], 0); + while (oldStart < oldEnd) { + splice2.removed.push(old[oldStart++]); + } + return [splice2]; + } else if (oldStart === oldEnd) { + return [newSplice(currentStart, [], currentEnd - currentStart)]; + } + const ops = spliceOperationsFromEditDistances(calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd)); + const splices = []; + let splice = void 0; + let index = currentStart; + let oldIndex = oldStart; + for (let i = 0; i < ops.length; ++i) { + switch (ops[i]) { + case EDIT_LEAVE: + if (splice !== void 0) { + splices.push(splice); + splice = void 0; + } + index++; + oldIndex++; + break; + case EDIT_UPDATE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + case EDIT_ADD: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + break; + case EDIT_DELETE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + } + } + if (splice !== void 0) { + splices.push(splice); + } + return splices; + } + function mergeSplice(splices, index, removed, addedCount) { + const splice = newSplice(index, removed, addedCount); + let inserted = false; + let insertionOffset = 0; + for (let i = 0; i < splices.length; i++) { + const current = splices[i]; + current.index += insertionOffset; + if (inserted) { + continue; + } + const intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount); + if (intersectCount >= 0) { + splices.splice(i, 1); + i--; + insertionOffset -= current.addedCount - current.removed.length; + splice.addedCount += current.addedCount - intersectCount; + const deleteCount = splice.removed.length + current.removed.length - intersectCount; + if (!splice.addedCount && !deleteCount) { + inserted = true; + } else { + let currentRemoved = current.removed; + if (splice.index < current.index) { + const prepend = splice.removed.slice(0, current.index - splice.index); + $push.apply(prepend, currentRemoved); + currentRemoved = prepend; + } + if (splice.index + splice.removed.length > current.index + current.addedCount) { + const append = splice.removed.slice(current.index + current.addedCount - splice.index); + $push.apply(currentRemoved, append); + } + splice.removed = currentRemoved; + if (current.index < splice.index) { + splice.index = current.index; + } + } + } else if (splice.index < current.index) { + inserted = true; + splices.splice(i, 0, splice); + i++; + const offset = splice.addedCount - splice.removed.length; + current.index += offset; + insertionOffset += offset; + } + } + if (!inserted) { + splices.push(splice); + } + } + function createInitialSplices(changeRecords) { + const splices = []; + for (let i = 0, ii = changeRecords.length; i < ii; i++) { + const record = changeRecords[i]; + mergeSplice(splices, record.index, record.removed, record.addedCount); + } + return splices; + } + function projectArraySplices(array, changeRecords) { + let splices = []; + const initialSplices = createInitialSplices(changeRecords); + for (let i = 0, ii = initialSplices.length; i < ii; ++i) { + const splice = initialSplices[i]; + if (splice.addedCount === 1 && splice.removed.length === 1) { + if (splice.removed[0] !== array[splice.index]) { + splices.push(splice); + } + continue; + } + splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length)); + } + return splices; + } + var EDIT_LEAVE, EDIT_UPDATE, EDIT_ADD, EDIT_DELETE, $push; + var init_array_change_records = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js"() { + init_platform(); + EDIT_LEAVE = 0; + EDIT_UPDATE = 1; + EDIT_ADD = 2; + EDIT_DELETE = 3; + $push = Array.prototype.push; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js + function adjustIndex(changeRecord, array) { + let index = changeRecord.index; + const arrayLength = array.length; + if (index > arrayLength) { + index = arrayLength - changeRecord.addedCount; + } else if (index < 0) { + index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount; + } + if (index < 0) { + index = 0; + } + changeRecord.index = index; + return changeRecord; + } + function enableArrayObservation() { + if (arrayObservationEnabled) { + return; + } + arrayObservationEnabled = true; + Observable.setArrayObserverFactory((collection) => { + return new ArrayObserver(collection); + }); + const proto = Array.prototype; + if (proto.$fastPatch) { + return; + } + Reflect.defineProperty(proto, "$fastPatch", { + value: 1, + enumerable: false + }); + const pop = proto.pop; + const push = proto.push; + const reverse = proto.reverse; + const shift = proto.shift; + const sort = proto.sort; + const splice = proto.splice; + const unshift = proto.unshift; + proto.pop = function() { + const notEmpty = this.length > 0; + const methodCallResult = pop.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(this.length, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.push = function() { + const methodCallResult = push.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(this.length - arguments.length, [], arguments.length), this)); + } + return methodCallResult; + }; + proto.reverse = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = reverse.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.shift = function() { + const notEmpty = this.length > 0; + const methodCallResult = shift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(0, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.sort = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = sort.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.splice = function() { + const methodCallResult = splice.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(+arguments[0], methodCallResult, arguments.length > 2 ? arguments.length - 2 : 0), this)); + } + return methodCallResult; + }; + proto.unshift = function() { + const methodCallResult = unshift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(0, [], arguments.length), this)); + } + return methodCallResult; + }; + } + var arrayObservationEnabled, ArrayObserver; + var init_array_observer = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js"() { + init_dom(); + init_array_change_records(); + init_notifier(); + init_observable(); + arrayObservationEnabled = false; + ArrayObserver = class extends SubscriberSet { + constructor(source) { + super(source); + this.oldCollection = void 0; + this.splices = void 0; + this.needsQueue = true; + this.call = this.flush; + Reflect.defineProperty(source, "$fastController", { + value: this, + enumerable: false + }); + } + subscribe(subscriber) { + this.flush(); + super.subscribe(subscriber); + } + addSplice(splice) { + if (this.splices === void 0) { + this.splices = [splice]; + } else { + this.splices.push(splice); + } + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + reset(oldCollection) { + this.oldCollection = oldCollection; + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + flush() { + const splices = this.splices; + const oldCollection = this.oldCollection; + if (splices === void 0 && oldCollection === void 0) { + return; + } + this.needsQueue = true; + this.splices = void 0; + this.oldCollection = void 0; + const finalSplices = oldCollection === void 0 ? projectArraySplices(this.source, splices) : calcSplices(this.source, 0, this.source.length, oldCollection, 0, oldCollection.length); + this.notify(finalSplices); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/ref.js + function ref(propertyName) { + return new AttachedBehaviorHTMLDirective("fast-ref", RefBehavior, propertyName); + } + var RefBehavior; + var init_ref = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/ref.js"() { + init_html_directive(); + RefBehavior = class { + /** + * Creates an instance of RefBehavior. + * @param target - The element to reference. + * @param propertyName - The name of the property to assign the reference to. + */ + constructor(target, propertyName) { + this.target = target; + this.propertyName = propertyName; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + source[this.propertyName] = this.target; + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + /* eslint-disable-next-line @typescript-eslint/no-empty-function */ + unbind() { + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/interfaces.js + var isFunction; + var init_interfaces = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/interfaces.js"() { + isFunction = (object) => typeof object === "function"; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/when.js + function normalizeBinding(value) { + return value === void 0 ? noTemplate : isFunction(value) ? value : () => value; + } + function when(binding, templateOrTemplateBinding, elseTemplateOrTemplateBinding) { + const dataBinding = isFunction(binding) ? binding : () => binding; + const templateBinding = normalizeBinding(templateOrTemplateBinding); + const elseBinding = normalizeBinding(elseTemplateOrTemplateBinding); + return (source, context) => dataBinding(source, context) ? templateBinding(source, context) : elseBinding(source, context); + } + var noTemplate; + var init_when = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/when.js"() { + init_interfaces(); + noTemplate = () => null; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js + function bindWithoutPositioning(view, items, index, context) { + view.bind(items[index], context); + } + function bindWithPositioning(view, items, index, context) { + const childContext = Object.create(context); + childContext.index = index; + childContext.length = items.length; + view.bind(items[index], childContext); + } + var defaultRepeatOptions, RepeatBehavior, RepeatDirective; + var init_repeat = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js"() { + init_dom(); + init_observable(); + init_array_observer(); + init_platform(); + init_html_directive(); + init_view(); + defaultRepeatOptions = Object.freeze({ + positioning: false, + recycle: true + }); + RepeatBehavior = class { + /** + * Creates an instance of RepeatBehavior. + * @param location - The location in the DOM to render the repeat. + * @param itemsBinding - The array to render. + * @param isItemsBindingVolatile - Indicates whether the items binding has volatile dependencies. + * @param templateBinding - The template to render for each item. + * @param isTemplateBindingVolatile - Indicates whether the template binding has volatile dependencies. + * @param options - Options used to turn on special repeat features. + */ + constructor(location, itemsBinding, isItemsBindingVolatile, templateBinding, isTemplateBindingVolatile, options) { + this.location = location; + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.source = null; + this.views = []; + this.items = null; + this.itemsObserver = null; + this.originalContext = void 0; + this.childContext = void 0; + this.bindView = bindWithoutPositioning; + this.itemsBindingObserver = Observable.binding(itemsBinding, this, isItemsBindingVolatile); + this.templateBindingObserver = Observable.binding(templateBinding, this, isTemplateBindingVolatile); + if (options.positioning) { + this.bindView = bindWithPositioning; + } + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source, context) { + this.source = source; + this.originalContext = context; + this.childContext = Object.create(context); + this.childContext.parent = source; + this.childContext.parentContext = this.originalContext; + this.items = this.itemsBindingObserver.observe(source, this.originalContext); + this.template = this.templateBindingObserver.observe(source, this.originalContext); + this.observeItems(true); + this.refreshAllViews(); + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.source = null; + this.items = null; + if (this.itemsObserver !== null) { + this.itemsObserver.unsubscribe(this); + } + this.unbindAllViews(); + this.itemsBindingObserver.disconnect(); + this.templateBindingObserver.disconnect(); + } + /** @internal */ + handleChange(source, args) { + if (source === this.itemsBinding) { + this.items = this.itemsBindingObserver.observe(this.source, this.originalContext); + this.observeItems(); + this.refreshAllViews(); + } else if (source === this.templateBinding) { + this.template = this.templateBindingObserver.observe(this.source, this.originalContext); + this.refreshAllViews(true); + } else { + this.updateViews(args); + } + } + observeItems(force = false) { + if (!this.items) { + this.items = emptyArray; + return; + } + const oldObserver = this.itemsObserver; + const newObserver = this.itemsObserver = Observable.getNotifier(this.items); + const hasNewObserver = oldObserver !== newObserver; + if (hasNewObserver && oldObserver !== null) { + oldObserver.unsubscribe(this); + } + if (hasNewObserver || force) { + newObserver.subscribe(this); + } + } + updateViews(splices) { + const childContext = this.childContext; + const views = this.views; + const bindView = this.bindView; + const items = this.items; + const template = this.template; + const recycle = this.options.recycle; + const leftoverViews = []; + let leftoverIndex = 0; + let availableViews = 0; + for (let i = 0, ii = splices.length; i < ii; ++i) { + const splice = splices[i]; + const removed = splice.removed; + let removeIndex = 0; + let addIndex = splice.index; + const end = addIndex + splice.addedCount; + const removedViews = views.splice(splice.index, removed.length); + const totalAvailableViews = availableViews = leftoverViews.length + removedViews.length; + for (; addIndex < end; ++addIndex) { + const neighbor = views[addIndex]; + const location = neighbor ? neighbor.firstChild : this.location; + let view; + if (recycle && availableViews > 0) { + if (removeIndex <= totalAvailableViews && removedViews.length > 0) { + view = removedViews[removeIndex]; + removeIndex++; + } else { + view = leftoverViews[leftoverIndex]; + leftoverIndex++; + } + availableViews--; + } else { + view = template.create(); + } + views.splice(addIndex, 0, view); + bindView(view, items, addIndex, childContext); + view.insertBefore(location); + } + if (removedViews[removeIndex]) { + leftoverViews.push(...removedViews.slice(removeIndex)); + } + } + for (let i = leftoverIndex, ii = leftoverViews.length; i < ii; ++i) { + leftoverViews[i].dispose(); + } + if (this.options.positioning) { + for (let i = 0, ii = views.length; i < ii; ++i) { + const currentContext = views[i].context; + currentContext.length = ii; + currentContext.index = i; + } + } + } + refreshAllViews(templateChanged = false) { + const items = this.items; + const childContext = this.childContext; + const template = this.template; + const location = this.location; + const bindView = this.bindView; + let itemsLength = items.length; + let views = this.views; + let viewsLength = views.length; + if (itemsLength === 0 || templateChanged || !this.options.recycle) { + HTMLView.disposeContiguousBatch(views); + viewsLength = 0; + } + if (viewsLength === 0) { + this.views = views = new Array(itemsLength); + for (let i = 0; i < itemsLength; ++i) { + const view = template.create(); + bindView(view, items, i, childContext); + views[i] = view; + view.insertBefore(location); + } + } else { + let i = 0; + for (; i < itemsLength; ++i) { + if (i < viewsLength) { + const view = views[i]; + bindView(view, items, i, childContext); + } else { + const view = template.create(); + bindView(view, items, i, childContext); + views.push(view); + view.insertBefore(location); + } + } + const removed = views.splice(i, viewsLength - i); + for (i = 0, itemsLength = removed.length; i < itemsLength; ++i) { + removed[i].dispose(); + } + } + } + unbindAllViews() { + const views = this.views; + for (let i = 0, ii = views.length; i < ii; ++i) { + views[i].unbind(); + } + } + }; + RepeatDirective = class extends HTMLDirective { + /** + * Creates an instance of RepeatDirective. + * @param itemsBinding - The binding that provides the array to render. + * @param templateBinding - The template binding used to obtain a template to render for each item in the array. + * @param options - Options used to turn on special repeat features. + */ + constructor(itemsBinding, templateBinding, options) { + super(); + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.createPlaceholder = DOM.createBlockPlaceholder; + enableArrayObservation(); + this.isItemsBindingVolatile = Observable.isVolatileBinding(itemsBinding); + this.isTemplateBindingVolatile = Observable.isVolatileBinding(templateBinding); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + */ + createBehavior(target) { + return new RepeatBehavior(target, this.itemsBinding, this.isItemsBindingVolatile, this.templateBinding, this.isTemplateBindingVolatile, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js + function elements(selector) { + if (selector) { + return function(value, index, array) { + return value.nodeType === 1 && value.matches(selector); + }; + } + return function(value, index, array) { + return value.nodeType === 1; + }; + } + var NodeObservationBehavior; + var init_node_observation = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js"() { + init_observable(); + init_platform(); + NodeObservationBehavior = class { + /** + * Creates an instance of NodeObservationBehavior. + * @param target - The target to assign the nodes property on. + * @param options - The options to use in configuring node observation. + */ + constructor(target, options) { + this.target = target; + this.options = options; + this.source = null; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + const name = this.options.property; + this.shouldUpdate = Observable.getAccessors(source).some((x) => x.name === name); + this.source = source; + this.updateTarget(this.computeNodes()); + if (this.shouldUpdate) { + this.observe(); + } + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.updateTarget(emptyArray); + this.source = null; + if (this.shouldUpdate) { + this.disconnect(); + } + } + /** @internal */ + handleEvent() { + this.updateTarget(this.computeNodes()); + } + computeNodes() { + let nodes = this.getNodes(); + if (this.options.filter !== void 0) { + nodes = nodes.filter(this.options.filter); + } + return nodes; + } + updateTarget(value) { + this.source[this.options.property] = value; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js + function slotted(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { property: propertyOrOptions }; + } + return new AttachedBehaviorHTMLDirective("fast-slotted", SlottedBehavior, propertyOrOptions); + } + var SlottedBehavior; + var init_slotted = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js"() { + init_html_directive(); + init_node_observation(); + SlottedBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of SlottedBehavior. + * @param target - The slot element target to observe. + * @param options - The options to use when observing the slot. + */ + constructor(target, options) { + super(target, options); + } + /** + * Begins observation of the nodes. + */ + observe() { + this.target.addEventListener("slotchange", this); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.target.removeEventListener("slotchange", this); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + return this.target.assignedNodes(this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/children.js + function children(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { + property: propertyOrOptions + }; + } + return new AttachedBehaviorHTMLDirective("fast-children", ChildrenBehavior, propertyOrOptions); + } + var ChildrenBehavior; + var init_children = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/children.js"() { + init_html_directive(); + init_node_observation(); + ChildrenBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of ChildrenBehavior. + * @param target - The element target to observe children on. + * @param options - The options to use when observing the element children. + */ + constructor(target, options) { + super(target, options); + this.observer = null; + options.childList = true; + } + /** + * Begins observation of the nodes. + */ + observe() { + if (this.observer === null) { + this.observer = new MutationObserver(this.handleEvent.bind(this)); + } + this.observer.observe(this.target, this.options); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.observer.disconnect(); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + if ("subtree" in this.options) { + return Array.from(this.target.querySelectorAll(this.options.selector)); + } + return Array.from(this.target.childNodes); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/index.js + var init_esm = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/index.js"() { + init_platform(); + init_template(); + init_fast_element(); + init_fast_definitions(); + init_attributes(); + init_controller(); + init_compiler(); + init_element_styles(); + init_css(); + init_css_directive(); + init_view(); + init_observable(); + init_notifier(); + init_dom(); + init_binding(); + init_html_directive(); + init_ref(); + init_when(); + init_repeat(); + init_slotted(); + init_children(); + init_node_observation(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js + var StartEnd, endSlotTemplate, startSlotTemplate, endTemplate, startTemplate; + var init_start_end = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js"() { + init_esm(); + StartEnd = class { + handleStartContentChange() { + this.startContainer.classList.toggle("start", this.start.assignedNodes().length > 0); + } + handleEndContentChange() { + this.endContainer.classList.toggle("end", this.end.assignedNodes().length > 0); + } + }; + endSlotTemplate = (context, definition) => html` + definition.end ? "end" : void 0} + > + + ${definition.end || ""} + + +`; + startSlotTemplate = (context, definition) => html` + + + ${definition.start || ""} + + +`; + endTemplate = html` + + + +`; + startTemplate = html` + + + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js + var init_accordion_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js + function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es6 = __esm({ + "node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/di.js + function cloneArrayWithPossibleProps(source) { + const clone = source.slice(); + const keys = Object.keys(source); + const len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + clone[key] = source[key]; + } + } + return clone; + } + function getParamTypes(key) { + return (Type) => { + return Reflect.getOwnMetadata(key, Type); + }; + } + function createResolver(getter) { + return function(key) { + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor); + }; + return resolver; + }; + } + function createAllResolver(getter) { + return function(key, searchAncestors) { + searchAncestors = !!searchAncestors; + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor, searchAncestors); + }; + return resolver; + }; + } + function ignore(target, property, descriptor) { + DI.inject(ignore)(target, property, descriptor); + } + function createNewInstance(key, handler) { + return handler.getFactory(key).construct(handler); + } + function containerGetKey(d) { + return this.get(d); + } + function transformInstance(inst, transform) { + return transform(inst); + } + function isRegistry(obj) { + return typeof obj.register === "function"; + } + function isSelfRegistry(obj) { + return isRegistry(obj) && typeof obj.registerInRequestor === "boolean"; + } + function isRegisterInRequester(obj) { + return isSelfRegistry(obj) && obj.registerInRequestor; + } + function isClass(obj) { + return obj.prototype !== void 0; + } + function cacheCallbackResult(fun) { + return function(handler, requestor, resolver) { + if (cache.has(resolver)) { + return cache.get(resolver); + } + const t = fun(handler, requestor, resolver); + cache.set(resolver, t); + return t; + }; + } + function validateKey(key) { + if (key === null || key === void 0) { + throw new Error("key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?"); + } + } + function buildAllResponse(resolver, handler, requestor) { + if (resolver instanceof ResolverImpl && resolver.strategy === 4) { + const state = resolver.state; + let i = state.length; + const results = new Array(i); + while (i--) { + results[i] = state[i].resolve(handler, requestor); + } + return results; + } + return [resolver.resolve(handler, requestor)]; + } + function isObject(value) { + return typeof value === "object" && value !== null || typeof value === "function"; + } + function isArrayIndex(value) { + switch (typeof value) { + case "number": + return value >= 0 && (value | 0) === value; + case "string": { + const result = isNumericLookup[value]; + if (result !== void 0) { + return result; + } + const length = value.length; + if (length === 0) { + return isNumericLookup[value] = false; + } + let ch = 0; + for (let i = 0; i < length; ++i) { + ch = value.charCodeAt(i); + if (i === 0 && ch === 48 && length > 1 || ch < 48 || ch > 57) { + return isNumericLookup[value] = false; + } + } + return isNumericLookup[value] = true; + } + default: + return false; + } + } + var metadataByTarget, ResolverBuilder, DefaultResolver, ContainerConfiguration, dependencyLookup, rootDOMContainer, DI, Container, inject, defaultSingletonOptions, all, lazy, optional, newInstanceForScope, newInstanceOf, ResolverImpl, FactoryImpl, containerResolver, InstrinsicTypeNames, DILocateParentEventType, factories, ContainerImpl, cache, Registration, defaultFriendlyName, isNativeFunction, isNumericLookup; + var init_di = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/di.js"() { + init_esm(); + metadataByTarget = /* @__PURE__ */ new Map(); + if (!("metadata" in Reflect)) { + Reflect.metadata = function(key, value) { + return function(target) { + Reflect.defineMetadata(key, value, target); + }; + }; + Reflect.defineMetadata = function(key, value, target) { + let metadata = metadataByTarget.get(target); + if (metadata === void 0) { + metadataByTarget.set(target, metadata = /* @__PURE__ */ new Map()); + } + metadata.set(key, value); + }; + Reflect.getOwnMetadata = function(key, target) { + const metadata = metadataByTarget.get(target); + if (metadata !== void 0) { + return metadata.get(key); + } + return void 0; + }; + } + ResolverBuilder = class { + /** + * + * @param container - The container to create resolvers for. + * @param key - The key to register resolvers under. + */ + constructor(container, key) { + this.container = container; + this.key = key; + } + /** + * Creates a resolver for an existing object instance. + * @param value - The instance to resolve. + * @returns The resolver. + */ + instance(value) { + return this.registerResolver(0, value); + } + /** + * Creates a resolver that enforces a singleton lifetime. + * @param value - The type to create and cache the singleton for. + * @returns The resolver. + */ + singleton(value) { + return this.registerResolver(1, value); + } + /** + * Creates a resolver that creates a new instance for every dependency request. + * @param value - The type to create instances of. + * @returns - The resolver. + */ + transient(value) { + return this.registerResolver(2, value); + } + /** + * Creates a resolver that invokes a callback function for every dependency resolution + * request, allowing custom logic to return the dependency. + * @param value - The callback to call during resolution. + * @returns The resolver. + */ + callback(value) { + return this.registerResolver(3, value); + } + /** + * Creates a resolver that invokes a callback function the first time that a dependency + * resolution is requested. The returned value is then cached and provided for all + * subsequent requests. + * @param value - The callback to call during the first resolution. + * @returns The resolver. + */ + cachedCallback(value) { + return this.registerResolver(3, cacheCallbackResult(value)); + } + /** + * Aliases the current key to a different key. + * @param destinationKey - The key to point the alias to. + * @returns The resolver. + */ + aliasTo(destinationKey) { + return this.registerResolver(5, destinationKey); + } + registerResolver(strategy, state) { + const { container, key } = this; + this.container = this.key = void 0; + return container.registerResolver(key, new ResolverImpl(key, strategy, state)); + } + }; + DefaultResolver = Object.freeze({ + /** + * Disables auto-registration and throws for all un-registered dependencies. + * @param key - The key to create the resolver for. + */ + none(key) { + throw Error(`${key.toString()} not registered, did you forget to add @singleton()?`); + }, + /** + * Provides default singleton resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + singleton(key) { + return new ResolverImpl(key, 1, key); + }, + /** + * Provides default transient resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + transient(key) { + return new ResolverImpl(key, 2, key); + } + }); + ContainerConfiguration = Object.freeze({ + /** + * The default configuration used when creating a DOM-disconnected container. + * @remarks + * The default creates a root container, with no parent container. It does not handle + * owner requests and it uses singleton resolution behavior for auto-registration. + */ + default: Object.freeze({ + parentLocator: () => null, + responsibleForOwnerRequests: false, + defaultResolver: DefaultResolver.singleton + }) + }); + dependencyLookup = /* @__PURE__ */ new Map(); + rootDOMContainer = null; + DI = Object.freeze({ + /** + * Creates a new dependency injection container. + * @param config - The configuration for the container. + * @returns A newly created dependency injection container. + */ + createContainer(config) { + return new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config)); + }, + /** + * Finds the dependency injection container responsible for providing dependencies + * to the specified node. + * @param node - The node to find the responsible container for. + * @returns The container responsible for providing dependencies to the node. + * @remarks + * This will be the same as the parent container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findResponsibleContainer(node) { + const owned = node.$$container$$; + if (owned && owned.responsibleForOwnerRequests) { + return owned; + } + return DI.findParentContainer(node); + }, + /** + * Find the dependency injection container up the DOM tree from this node. + * @param node - The node to find the parent container for. + * @returns The parent container of this node. + * @remarks + * This will be the same as the responsible container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findParentContainer(node) { + const event = new CustomEvent(DILocateParentEventType, { + bubbles: true, + composed: true, + cancelable: true, + detail: { container: void 0 } + }); + node.dispatchEvent(event); + return event.detail.container || DI.getOrCreateDOMContainer(); + }, + /** + * Returns a dependency injection container if one is explicitly owned by the specified + * node. If one is not owned, then a new container is created and assigned to the node. + * @param node - The node to find or create the container for. + * @param config - The configuration for the container if one needs to be created. + * @returns The located or created container. + * @remarks + * This API does not search for a responsible or parent container. It looks only for a container + * directly defined on the specified node and creates one at that location if one does not + * already exist. + */ + getOrCreateDOMContainer(node, config) { + if (!node) { + return rootDOMContainer || (rootDOMContainer = new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: () => null + }))); + } + return node.$$container$$ || new ContainerImpl(node, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: DI.findParentContainer + })); + }, + /** + * Gets the "design:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getDesignParamtypes: getParamTypes("design:paramtypes"), + /** + * Gets the "di:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getAnnotationParamtypes: getParamTypes("di:paramtypes"), + /** + * + * @param Type - Gets the "di:paramtypes" metadata for the specified type. If none is found, + * an empty metadata array is created and added. + * @returns The metadata array. + */ + getOrCreateAnnotationParamTypes(Type) { + let annotationParamtypes = this.getAnnotationParamtypes(Type); + if (annotationParamtypes === void 0) { + Reflect.defineMetadata("di:paramtypes", annotationParamtypes = [], Type); + } + return annotationParamtypes; + }, + /** + * Gets the dependency keys representing what is needed to instantiate the specified type. + * @param Type - The type to get the dependencies for. + * @returns An array of dependency keys. + */ + getDependencies(Type) { + let dependencies = dependencyLookup.get(Type); + if (dependencies === void 0) { + const inject2 = Type.inject; + if (inject2 === void 0) { + const designParamtypes = DI.getDesignParamtypes(Type); + const annotationParamtypes = DI.getAnnotationParamtypes(Type); + if (designParamtypes === void 0) { + if (annotationParamtypes === void 0) { + const Proto = Object.getPrototypeOf(Type); + if (typeof Proto === "function" && Proto !== Function.prototype) { + dependencies = cloneArrayWithPossibleProps(DI.getDependencies(Proto)); + } else { + dependencies = []; + } + } else { + dependencies = cloneArrayWithPossibleProps(annotationParamtypes); + } + } else if (annotationParamtypes === void 0) { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + } else { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + let len = annotationParamtypes.length; + let auAnnotationParamtype; + for (let i = 0; i < len; ++i) { + auAnnotationParamtype = annotationParamtypes[i]; + if (auAnnotationParamtype !== void 0) { + dependencies[i] = auAnnotationParamtype; + } + } + const keys = Object.keys(annotationParamtypes); + len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + dependencies[key] = annotationParamtypes[key]; + } + } + } + } else { + dependencies = cloneArrayWithPossibleProps(inject2); + } + dependencyLookup.set(Type, dependencies); + } + return dependencies; + }, + /** + * Defines a property on a web component class. The value of this property will + * be resolved from the dependency injection container responsible for the element + * instance, based on where it is connected in the DOM. + * @param target - The target to define the property on. + * @param propertyName - The name of the property to define. + * @param key - The dependency injection key. + * @param respectConnection - Indicates whether or not to update the property value if the + * hosting component is disconnected and then re-connected at a different location in the DOM. + * @remarks + * The respectConnection option is only applicable to elements that descend from FASTElement. + */ + defineProperty(target, propertyName, key, respectConnection = false) { + const diPropertyKey = `$di_${propertyName}`; + Reflect.defineProperty(target, propertyName, { + get: function() { + let value = this[diPropertyKey]; + if (value === void 0) { + const container = this instanceof HTMLElement ? DI.findResponsibleContainer(this) : DI.getOrCreateDOMContainer(); + value = container.get(key); + this[diPropertyKey] = value; + if (respectConnection && this instanceof FASTElement) { + const notifier = this.$fastController; + const handleChange = () => { + const newContainer = DI.findResponsibleContainer(this); + const newValue = newContainer.get(key); + const oldValue = this[diPropertyKey]; + if (newValue !== oldValue) { + this[diPropertyKey] = value; + notifier.notify(propertyName); + } + }; + notifier.subscribe({ handleChange }, "isConnected"); + } + } + return value; + } + }); + }, + /** + * Creates a dependency injection key. + * @param nameConfigOrCallback - A friendly name for the key or a lambda that configures a + * default resolution for the dependency. + * @param configuror - If a friendly name was provided for the first parameter, then an optional + * lambda that configures a default resolution for the dependency can be provided second. + * @returns The created key. + * @remarks + * The created key can be used as a property decorator or constructor parameter decorator, + * in addition to its standard use in an inject array or through direct container APIs. + */ + createInterface(nameConfigOrCallback, configuror) { + const configure = typeof nameConfigOrCallback === "function" ? nameConfigOrCallback : configuror; + const friendlyName = typeof nameConfigOrCallback === "string" ? nameConfigOrCallback : nameConfigOrCallback && "friendlyName" in nameConfigOrCallback ? nameConfigOrCallback.friendlyName || defaultFriendlyName : defaultFriendlyName; + const respectConnection = typeof nameConfigOrCallback === "string" ? false : nameConfigOrCallback && "respectConnection" in nameConfigOrCallback ? nameConfigOrCallback.respectConnection || false : false; + const Interface = function(target, property, index) { + if (target == null || new.target !== void 0) { + throw new Error(`No registration for interface: '${Interface.friendlyName}'`); + } + if (property) { + DI.defineProperty(target, property, Interface, respectConnection); + } else { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + annotationParamtypes[index] = Interface; + } + }; + Interface.$isInterface = true; + Interface.friendlyName = friendlyName == null ? "(anonymous)" : friendlyName; + if (configure != null) { + Interface.register = function(container, key) { + return configure(new ResolverBuilder(container, key !== null && key !== void 0 ? key : Interface)); + }; + } + Interface.toString = function toString() { + return `InterfaceSymbol<${Interface.friendlyName}>`; + }; + return Interface; + }, + /** + * A decorator that specifies what to inject into its target. + * @param dependencies - The dependencies to inject. + * @returns The decorator to be applied to the target class. + * @remarks + * The decorator can be used to decorate a class, listing all of the classes dependencies. + * Or it can be used to decorate a constructor paramter, indicating what to inject for that + * parameter. + * Or it can be used for a web component property, indicating what that property should resolve to. + */ + inject(...dependencies) { + return function(target, key, descriptor) { + if (typeof descriptor === "number") { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + const dep = dependencies[0]; + if (dep !== void 0) { + annotationParamtypes[descriptor] = dep; + } + } else if (key) { + DI.defineProperty(target, key, dependencies[0]); + } else { + const annotationParamtypes = descriptor ? DI.getOrCreateAnnotationParamTypes(descriptor.value) : DI.getOrCreateAnnotationParamTypes(target); + let dep; + for (let i = 0; i < dependencies.length; ++i) { + dep = dependencies[i]; + if (dep !== void 0) { + annotationParamtypes[i] = dep; + } + } + } + }; + }, + /** + * Registers the `target` class as a transient dependency; each time the dependency is resolved + * a new instance will be created. + * + * @param target - The class / constructor function to register as transient. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.transient(Foo); + * ``` + * + * @example + * Inline declaration + * + * ```ts + * const Foo = DI.transient(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + transient(target) { + target.register = function register(container) { + const registration = Registration.transient(target, target); + return registration.register(container); + }; + target.registerInRequestor = false; + return target; + }, + /** + * Registers the `target` class as a singleton dependency; the class will only be created once. Each + * consecutive time the dependency is resolved, the same instance will be returned. + * + * @param target - The class / constructor function to register as a singleton. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.singleton(Foo); + * ``` + * + * @example + * Inline declaration + * ```ts + * const Foo = DI.singleton(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + singleton(target, options = defaultSingletonOptions) { + target.register = function register(container) { + const registration = Registration.singleton(target, target); + return registration.register(container); + }; + target.registerInRequestor = options.scoped; + return target; + } + }); + Container = DI.createInterface("Container"); + inject = DI.inject; + defaultSingletonOptions = { scoped: false }; + all = createAllResolver((key, handler, requestor, searchAncestors) => requestor.getAll(key, searchAncestors)); + lazy = createResolver((key, handler, requestor) => { + return () => requestor.get(key); + }); + optional = createResolver((key, handler, requestor) => { + if (requestor.has(key, true)) { + return requestor.get(key); + } else { + return void 0; + } + }); + ignore.$isResolver = true; + ignore.resolve = () => void 0; + newInstanceForScope = createResolver((key, handler, requestor) => { + const instance = createNewInstance(key, handler); + const resolver = new ResolverImpl(key, 0, instance); + requestor.registerResolver(key, resolver); + return instance; + }); + newInstanceOf = createResolver((key, handler, _requestor) => createNewInstance(key, handler)); + ResolverImpl = class { + constructor(key, strategy, state) { + this.key = key; + this.strategy = strategy; + this.state = state; + this.resolving = false; + } + get $isResolver() { + return true; + } + register(container) { + return container.registerResolver(this.key, this); + } + resolve(handler, requestor) { + switch (this.strategy) { + case 0: + return this.state; + case 1: { + if (this.resolving) { + throw new Error(`Cyclic dependency found: ${this.state.name}`); + } + this.resolving = true; + this.state = handler.getFactory(this.state).construct(requestor); + this.strategy = 0; + this.resolving = false; + return this.state; + } + case 2: { + const factory = handler.getFactory(this.state); + if (factory === null) { + throw new Error(`Resolver for ${String(this.key)} returned a null factory`); + } + return factory.construct(requestor); + } + case 3: + return this.state(handler, requestor, this); + case 4: + return this.state[0].resolve(handler, requestor); + case 5: + return requestor.get(this.state); + default: + throw new Error(`Invalid resolver strategy specified: ${this.strategy}.`); + } + } + getFactory(container) { + var _a, _b, _c; + switch (this.strategy) { + case 1: + case 2: + return container.getFactory(this.state); + case 5: + return (_c = (_b = (_a = container.getResolver(this.state)) === null || _a === void 0 ? void 0 : _a.getFactory) === null || _b === void 0 ? void 0 : _b.call(_a, container)) !== null && _c !== void 0 ? _c : null; + default: + return null; + } + } + }; + FactoryImpl = class { + constructor(Type, dependencies) { + this.Type = Type; + this.dependencies = dependencies; + this.transformers = null; + } + construct(container, dynamicDependencies) { + let instance; + if (dynamicDependencies === void 0) { + instance = new this.Type(...this.dependencies.map(containerGetKey, container)); + } else { + instance = new this.Type(...this.dependencies.map(containerGetKey, container), ...dynamicDependencies); + } + if (this.transformers == null) { + return instance; + } + return this.transformers.reduce(transformInstance, instance); + } + registerTransformer(transformer) { + (this.transformers || (this.transformers = [])).push(transformer); + } + }; + containerResolver = { + $isResolver: true, + resolve(handler, requestor) { + return requestor; + } + }; + InstrinsicTypeNames = /* @__PURE__ */ new Set([ + "Array", + "ArrayBuffer", + "Boolean", + "DataView", + "Date", + "Error", + "EvalError", + "Float32Array", + "Float64Array", + "Function", + "Int8Array", + "Int16Array", + "Int32Array", + "Map", + "Number", + "Object", + "Promise", + "RangeError", + "ReferenceError", + "RegExp", + "Set", + "SharedArrayBuffer", + "String", + "SyntaxError", + "TypeError", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "URIError", + "WeakMap", + "WeakSet" + ]); + DILocateParentEventType = "__DI_LOCATE_PARENT__"; + factories = /* @__PURE__ */ new Map(); + ContainerImpl = class _ContainerImpl { + constructor(owner, config) { + this.owner = owner; + this.config = config; + this._parent = void 0; + this.registerDepth = 0; + this.context = null; + if (owner !== null) { + owner.$$container$$ = this; + } + this.resolvers = /* @__PURE__ */ new Map(); + this.resolvers.set(Container, containerResolver); + if (owner instanceof Node) { + owner.addEventListener(DILocateParentEventType, (e) => { + if (e.composedPath()[0] !== this.owner) { + e.detail.container = this; + e.stopImmediatePropagation(); + } + }); + } + } + get parent() { + if (this._parent === void 0) { + this._parent = this.config.parentLocator(this.owner); + } + return this._parent; + } + get depth() { + return this.parent === null ? 0 : this.parent.depth + 1; + } + get responsibleForOwnerRequests() { + return this.config.responsibleForOwnerRequests; + } + registerWithContext(context, ...params) { + this.context = context; + this.register(...params); + this.context = null; + return this; + } + register(...params) { + if (++this.registerDepth === 100) { + throw new Error("Unable to autoregister dependency"); + } + let current; + let keys; + let value; + let j; + let jj; + const context = this.context; + for (let i = 0, ii = params.length; i < ii; ++i) { + current = params[i]; + if (!isObject(current)) { + continue; + } + if (isRegistry(current)) { + current.register(this, context); + } else if (isClass(current)) { + Registration.singleton(current, current).register(this); + } else { + keys = Object.keys(current); + j = 0; + jj = keys.length; + for (; j < jj; ++j) { + value = current[keys[j]]; + if (!isObject(value)) { + continue; + } + if (isRegistry(value)) { + value.register(this, context); + } else { + this.register(value); + } + } + } + } + --this.registerDepth; + return this; + } + registerResolver(key, resolver) { + validateKey(key); + const resolvers = this.resolvers; + const result = resolvers.get(key); + if (result == null) { + resolvers.set(key, resolver); + } else if (result instanceof ResolverImpl && result.strategy === 4) { + result.state.push(resolver); + } else { + resolvers.set(key, new ResolverImpl(key, 4, [result, resolver])); + } + return resolver; + } + registerTransformer(key, transformer) { + const resolver = this.getResolver(key); + if (resolver == null) { + return false; + } + if (resolver.getFactory) { + const factory = resolver.getFactory(this); + if (factory == null) { + return false; + } + factory.registerTransformer(transformer); + return true; + } + return false; + } + getResolver(key, autoRegister = true) { + validateKey(key); + if (key.resolve !== void 0) { + return key; + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + return autoRegister ? this.jitRegister(key, handler) : null; + } + current = current.parent; + } else { + return resolver; + } + } + return null; + } + has(key, searchAncestors = false) { + return this.resolvers.has(key) ? true : searchAncestors && this.parent != null ? this.parent.has(key, true) : false; + } + get(key) { + validateKey(key); + if (key.$isResolver) { + return key.resolve(this, this); + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + resolver = this.jitRegister(key, handler); + return resolver.resolve(current, this); + } + current = current.parent; + } else { + return resolver.resolve(current, this); + } + } + throw new Error(`Unable to resolve key: ${String(key)}`); + } + getAll(key, searchAncestors = false) { + validateKey(key); + const requestor = this; + let current = requestor; + let resolver; + if (searchAncestors) { + let resolutions = emptyArray; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver != null) { + resolutions = resolutions.concat( + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + buildAllResponse(resolver, current, requestor) + ); + } + current = current.parent; + } + return resolutions; + } else { + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + current = current.parent; + if (current == null) { + return emptyArray; + } + } else { + return buildAllResponse(resolver, current, requestor); + } + } + } + return emptyArray; + } + getFactory(Type) { + let factory = factories.get(Type); + if (factory === void 0) { + if (isNativeFunction(Type)) { + throw new Error(`${Type.name} is a native function and therefore cannot be safely constructed by DI. If this is intentional, please use a callback or cachedCallback resolver.`); + } + factories.set(Type, factory = new FactoryImpl(Type, DI.getDependencies(Type))); + } + return factory; + } + registerFactory(key, factory) { + factories.set(key, factory); + } + createChild(config) { + return new _ContainerImpl(null, Object.assign({}, this.config, config, { parentLocator: () => this })); + } + jitRegister(keyAsValue, handler) { + if (typeof keyAsValue !== "function") { + throw new Error(`Attempted to jitRegister something that is not a constructor: '${keyAsValue}'. Did you forget to register this dependency?`); + } + if (InstrinsicTypeNames.has(keyAsValue.name)) { + throw new Error(`Attempted to jitRegister an intrinsic type: ${keyAsValue.name}. Did you forget to add @inject(Key)`); + } + if (isRegistry(keyAsValue)) { + const registrationResolver = keyAsValue.register(handler); + if (!(registrationResolver instanceof Object) || registrationResolver.resolve == null) { + const newResolver = handler.resolvers.get(keyAsValue); + if (newResolver != void 0) { + return newResolver; + } + throw new Error("A valid resolver was not returned from the static register method"); + } + return registrationResolver; + } else if (keyAsValue.$isInterface) { + throw new Error(`Attempted to jitRegister an interface: ${keyAsValue.friendlyName}`); + } else { + const resolver = this.config.defaultResolver(keyAsValue, handler); + handler.resolvers.set(keyAsValue, resolver); + return resolver; + } + } + }; + cache = /* @__PURE__ */ new WeakMap(); + Registration = Object.freeze({ + /** + * Allows you to pass an instance. + * Every time you request this {@link Key} you will get this instance back. + * + * @example + * ``` + * Registration.instance(Foo, new Foo())); + * ``` + * + * @param key - The key to register the instance under. + * @param value - The instance to return when the key is requested. + */ + instance(key, value) { + return new ResolverImpl(key, 0, value); + }, + /** + * Creates an instance from the class. + * Every time you request this {@link Key} you will get the same one back. + * + * @example + * ``` + * Registration.singleton(Foo, Foo); + * ``` + * + * @param key - The key to register the singleton under. + * @param value - The class to instantiate as a singleton when first requested. + */ + singleton(key, value) { + return new ResolverImpl(key, 1, value); + }, + /** + * Creates an instance from a class. + * Every time you request this {@link Key} you will get a new instance. + * + * @example + * ``` + * Registration.instance(Foo, Foo); + * ``` + * + * @param key - The key to register the instance type under. + * @param value - The class to instantiate each time the key is requested. + */ + transient(key, value) { + return new ResolverImpl(key, 2, value); + }, + /** + * Delegates to a callback function to provide the dependency. + * Every time you request this {@link Key} the callback will be invoked to provide + * the dependency. + * + * @example + * ``` + * Registration.callback(Foo, () => new Foo()); + * Registration.callback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + */ + callback(key, callback) { + return new ResolverImpl(key, 3, callback); + }, + /** + * Delegates to a callback function to provide the dependency and then caches the + * dependency for future requests. + * + * @example + * ``` + * Registration.cachedCallback(Foo, () => new Foo()); + * Registration.cachedCallback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + * @remarks + * If you pass the same Registration to another container, the same cached value will be used. + * Should all references to the resolver returned be removed, the cache will expire. + */ + cachedCallback(key, callback) { + return new ResolverImpl(key, 3, cacheCallbackResult(callback)); + }, + /** + * Creates an alternate {@link Key} to retrieve an instance by. + * + * @example + * ``` + * Register.singleton(Foo, Foo) + * Register.aliasTo(Foo, MyFoos); + * + * container.getAll(MyFoos) // contains an instance of Foo + * ``` + * + * @param originalKey - The original key that has been registered. + * @param aliasKey - The alias to the original key. + */ + aliasTo(originalKey, aliasKey) { + return new ResolverImpl(aliasKey, 5, originalKey); + } + }); + defaultFriendlyName = "(anonymous)"; + isNativeFunction = /* @__PURE__ */ (function() { + const lookup = /* @__PURE__ */ new WeakMap(); + let isNative = false; + let sourceText = ""; + let i = 0; + return function(fn) { + isNative = lookup.get(fn); + if (isNative === void 0) { + sourceText = fn.toString(); + i = sourceText.length; + isNative = // 29 is the length of 'function () { [native code] }' which is the smallest length of a native function string + i >= 29 && // 100 seems to be a safe upper bound of the max length of a native function. In Chrome and FF it's 56, in Edge it's 61. + i <= 100 && // This whole heuristic *could* be tricked by a comment. Do we need to care about that? + sourceText.charCodeAt(i - 1) === 125 && // } + // TODO: the spec is a little vague about the precise constraints, so we do need to test this across various browsers to make sure just one whitespace is a safe assumption. + sourceText.charCodeAt(i - 2) <= 32 && // whitespace + sourceText.charCodeAt(i - 3) === 93 && // ] + sourceText.charCodeAt(i - 4) === 101 && // e + sourceText.charCodeAt(i - 5) === 100 && // d + sourceText.charCodeAt(i - 6) === 111 && // o + sourceText.charCodeAt(i - 7) === 99 && // c + sourceText.charCodeAt(i - 8) === 32 && // + sourceText.charCodeAt(i - 9) === 101 && // e + sourceText.charCodeAt(i - 10) === 118 && // v + sourceText.charCodeAt(i - 11) === 105 && // i + sourceText.charCodeAt(i - 12) === 116 && // t + sourceText.charCodeAt(i - 13) === 97 && // a + sourceText.charCodeAt(i - 14) === 110 && // n + sourceText.charCodeAt(i - 15) === 88; + lookup.set(fn, isNative); + } + return isNative; + }; + })(); + isNumericLookup = {}; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js + function presentationKeyFromTag(tagName) { + return `${tagName.toLowerCase()}:presentation`; + } + var presentationRegistry, ComponentPresentation, DefaultComponentPresentation; + var init_component_presentation = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js"() { + init_esm(); + init_di(); + presentationRegistry = /* @__PURE__ */ new Map(); + ComponentPresentation = Object.freeze({ + /** + * Defines a component presentation for an element. + * @param tagName - The element name to define the presentation for. + * @param presentation - The presentation that will be applied to matching elements. + * @param container - The dependency injection container to register the configuration in. + * @public + */ + define(tagName, presentation, container) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === void 0) { + presentationRegistry.set(key, presentation); + } else { + presentationRegistry.set(key, false); + } + container.register(Registration.instance(key, presentation)); + }, + /** + * Finds a component presentation for the specified element name, + * searching the DOM hierarchy starting from the provided element. + * @param tagName - The name of the element to locate the presentation for. + * @param element - The element to begin the search from. + * @returns The component presentation or null if none is found. + * @public + */ + forTag(tagName, element) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === false) { + const container = DI.findResponsibleContainer(element); + return container.get(key); + } + return existing || null; + } + }); + DefaultComponentPresentation = class { + /** + * Creates an instance of DefaultComponentPresentation. + * @param template - The template to apply to the element. + * @param styles - The styles to apply to the element. + * @public + */ + constructor(template, styles) { + this.template = template || null; + this.styles = styles === void 0 ? null : Array.isArray(styles) ? ElementStyles.create(styles) : styles instanceof ElementStyles ? styles : ElementStyles.create([styles]); + } + /** + * Applies the presentation details to the specified element. + * @param element - The element to apply the presentation details to. + * @public + */ + applyTo(element) { + const controller = element.$fastController; + if (controller.template === null) { + controller.template = this.template; + } + if (controller.styles === null) { + controller.styles = this.styles; + } + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js + function resolveOption(option, context, definition) { + if (typeof option === "function") { + return option(context, definition); + } + return option; + } + var FoundationElement, FoundationElementRegistry; + var init_foundation_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js"() { + init_tslib_es6(); + init_esm(); + init_component_presentation(); + FoundationElement = class _FoundationElement extends FASTElement { + constructor() { + super(...arguments); + this._presentation = void 0; + } + /** + * A property which resolves the ComponentPresentation instance + * for the current component. + * @public + */ + get $presentation() { + if (this._presentation === void 0) { + this._presentation = ComponentPresentation.forTag(this.tagName, this); + } + return this._presentation; + } + templateChanged() { + if (this.template !== void 0) { + this.$fastController.template = this.template; + } + } + stylesChanged() { + if (this.styles !== void 0) { + this.$fastController.styles = this.styles; + } + } + /** + * The connected callback for this FASTElement. + * @remarks + * This method is invoked by the platform whenever this FoundationElement + * becomes connected to the document. + * @public + */ + connectedCallback() { + if (this.$presentation !== null) { + this.$presentation.applyTo(this); + } + super.connectedCallback(); + } + /** + * Defines an element registry function with a set of element definition defaults. + * @param elementDefinition - The definition of the element to create the registry + * function for. + * @public + */ + static compose(elementDefinition) { + return (overrideDefinition = {}) => new FoundationElementRegistry(this === _FoundationElement ? class extends _FoundationElement { + } : this, elementDefinition, overrideDefinition); + } + }; + __decorate([ + observable + ], FoundationElement.prototype, "template", void 0); + __decorate([ + observable + ], FoundationElement.prototype, "styles", void 0); + FoundationElementRegistry = class { + constructor(type, elementDefinition, overrideDefinition) { + this.type = type; + this.elementDefinition = elementDefinition; + this.overrideDefinition = overrideDefinition; + this.definition = Object.assign(Object.assign({}, this.elementDefinition), this.overrideDefinition); + } + register(container, context) { + const definition = this.definition; + const overrideDefinition = this.overrideDefinition; + const prefix = definition.prefix || context.elementPrefix; + const name = `${prefix}-${definition.baseName}`; + context.tryDefineElement({ + name, + type: this.type, + baseClass: this.elementDefinition.baseClass, + callback: (x) => { + const presentation = new DefaultComponentPresentation(resolveOption(definition.template, x, definition), resolveOption(definition.styles, x, definition)); + x.definePresentation(presentation); + let shadowOptions = resolveOption(definition.shadowOptions, x, definition); + if (x.shadowRootMode) { + if (shadowOptions) { + if (!overrideDefinition.shadowOptions) { + shadowOptions.mode = x.shadowRootMode; + } + } else if (shadowOptions !== null) { + shadowOptions = { mode: x.shadowRootMode }; + } + } + x.defineElement({ + elementOptions: resolveOption(definition.elementOptions, x, definition), + shadowOptions, + attributes: resolveOption(definition.attributes, x, definition) + }); + } + }); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js + function applyMixins(derivedCtor, ...baseCtors) { + const derivedAttributes = AttributeConfiguration.locate(derivedCtor); + baseCtors.forEach((baseCtor) => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => { + if (name !== "constructor") { + Object.defineProperty( + derivedCtor.prototype, + name, + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + Object.getOwnPropertyDescriptor(baseCtor.prototype, name) + ); + } + }); + const baseAttributes = AttributeConfiguration.locate(baseCtor); + baseAttributes.forEach((x) => derivedAttributes.push(x)); + }); + } + var init_apply_mixins = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js"() { + init_esm(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js + var AccordionItem; + var init_accordion_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_start_end(); + init_apply_mixins(); + AccordionItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.headinglevel = 2; + this.expanded = false; + this.clickHandler = (e) => { + this.expanded = !this.expanded; + this.change(); + }; + this.change = () => { + this.$emit("change"); + }; + } + }; + __decorate([ + attr({ + attribute: "heading-level", + mode: "fromView", + converter: nullableNumberConverter + }) + ], AccordionItem.prototype, "headinglevel", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], AccordionItem.prototype, "expanded", void 0); + __decorate([ + attr + ], AccordionItem.prototype, "id", void 0); + applyMixins(AccordionItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js + var init_accordion_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js"() { + init_accordion_item_template(); + init_accordion_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js + var init_accordion_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/aria.js + var Orientation; + var init_aria = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/aria.js"() { + Orientation = { + horizontal: "horizontal", + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/array.js + function findLastIndex(array, predicate) { + let k = array.length; + while (k--) { + if (predicate(array[k], k, array)) { + return k; + } + } + return -1; + } + var init_array = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/array.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/class-names.js + var init_class_names = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/class-names.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-dom.js + function canUseDOM() { + return !!(typeof window !== "undefined" && window.document && window.document.createElement); + } + var init_can_use_dom = __esm({ + "node_modules/exenv-es6/dist/can-use-dom.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-event-listeners.js + var init_can_use_event_listeners = __esm({ + "node_modules/exenv-es6/dist/can-use-event-listeners.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-viewport.js + var init_can_use_viewport = __esm({ + "node_modules/exenv-es6/dist/can-use-viewport.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-workers.js + var init_can_use_workers = __esm({ + "node_modules/exenv-es6/dist/can-use-workers.js"() { + } + }); + + // node_modules/exenv-es6/dist/index.js + var init_dist = __esm({ + "node_modules/exenv-es6/dist/index.js"() { + init_can_use_dom(); + init_can_use_event_listeners(); + init_can_use_viewport(); + init_can_use_workers(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/dom.js + function isHTMLElement(...args) { + return args.every((arg) => arg instanceof HTMLElement); + } + function getDisplayedNodes(rootNode, selector) { + if (!rootNode || !selector || !isHTMLElement(rootNode)) { + return; + } + const nodes = Array.from(rootNode.querySelectorAll(selector)); + return nodes.filter((node) => node.offsetParent !== null); + } + function getNonce() { + const node = document.querySelector('meta[property="csp-nonce"]'); + if (node) { + return node.getAttribute("content"); + } else { + return null; + } + } + function canUseFocusVisible() { + if (typeof _canUseFocusVisible === "boolean") { + return _canUseFocusVisible; + } + if (!canUseDOM()) { + _canUseFocusVisible = false; + return _canUseFocusVisible; + } + const styleElement = document.createElement("style"); + const styleNonce = getNonce(); + if (styleNonce !== null) { + styleElement.setAttribute("nonce", styleNonce); + } + document.head.appendChild(styleElement); + try { + styleElement.sheet.insertRule("foo:focus-visible {color:inherit}", 0); + _canUseFocusVisible = true; + } catch (e) { + _canUseFocusVisible = false; + } finally { + document.head.removeChild(styleElement); + } + return _canUseFocusVisible; + } + var _canUseFocusVisible; + var init_dom2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/dom.js"() { + init_dist(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/events.js + var eventFocus, eventFocusIn, eventFocusOut, eventKeyDown, eventResize, eventScroll; + var init_events = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/events.js"() { + eventFocus = "focus"; + eventFocusIn = "focusin"; + eventFocusOut = "focusout"; + eventKeyDown = "keydown"; + eventResize = "resize"; + eventScroll = "scroll"; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/html.js + var init_html = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/html.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/key-codes.js + var KeyCodes, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnter, keyEscape, keyHome, keyEnd, keyFunction2, keyPageDown, keyPageUp, keySpace, keyTab, keyBackspace, keyDelete, ArrowKeys; + var init_key_codes = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/key-codes.js"() { + (function(KeyCodes2) { + KeyCodes2[KeyCodes2["alt"] = 18] = "alt"; + KeyCodes2[KeyCodes2["arrowDown"] = 40] = "arrowDown"; + KeyCodes2[KeyCodes2["arrowLeft"] = 37] = "arrowLeft"; + KeyCodes2[KeyCodes2["arrowRight"] = 39] = "arrowRight"; + KeyCodes2[KeyCodes2["arrowUp"] = 38] = "arrowUp"; + KeyCodes2[KeyCodes2["back"] = 8] = "back"; + KeyCodes2[KeyCodes2["backSlash"] = 220] = "backSlash"; + KeyCodes2[KeyCodes2["break"] = 19] = "break"; + KeyCodes2[KeyCodes2["capsLock"] = 20] = "capsLock"; + KeyCodes2[KeyCodes2["closeBracket"] = 221] = "closeBracket"; + KeyCodes2[KeyCodes2["colon"] = 186] = "colon"; + KeyCodes2[KeyCodes2["colon2"] = 59] = "colon2"; + KeyCodes2[KeyCodes2["comma"] = 188] = "comma"; + KeyCodes2[KeyCodes2["ctrl"] = 17] = "ctrl"; + KeyCodes2[KeyCodes2["delete"] = 46] = "delete"; + KeyCodes2[KeyCodes2["end"] = 35] = "end"; + KeyCodes2[KeyCodes2["enter"] = 13] = "enter"; + KeyCodes2[KeyCodes2["equals"] = 187] = "equals"; + KeyCodes2[KeyCodes2["equals2"] = 61] = "equals2"; + KeyCodes2[KeyCodes2["equals3"] = 107] = "equals3"; + KeyCodes2[KeyCodes2["escape"] = 27] = "escape"; + KeyCodes2[KeyCodes2["forwardSlash"] = 191] = "forwardSlash"; + KeyCodes2[KeyCodes2["function1"] = 112] = "function1"; + KeyCodes2[KeyCodes2["function10"] = 121] = "function10"; + KeyCodes2[KeyCodes2["function11"] = 122] = "function11"; + KeyCodes2[KeyCodes2["function12"] = 123] = "function12"; + KeyCodes2[KeyCodes2["function2"] = 113] = "function2"; + KeyCodes2[KeyCodes2["function3"] = 114] = "function3"; + KeyCodes2[KeyCodes2["function4"] = 115] = "function4"; + KeyCodes2[KeyCodes2["function5"] = 116] = "function5"; + KeyCodes2[KeyCodes2["function6"] = 117] = "function6"; + KeyCodes2[KeyCodes2["function7"] = 118] = "function7"; + KeyCodes2[KeyCodes2["function8"] = 119] = "function8"; + KeyCodes2[KeyCodes2["function9"] = 120] = "function9"; + KeyCodes2[KeyCodes2["home"] = 36] = "home"; + KeyCodes2[KeyCodes2["insert"] = 45] = "insert"; + KeyCodes2[KeyCodes2["menu"] = 93] = "menu"; + KeyCodes2[KeyCodes2["minus"] = 189] = "minus"; + KeyCodes2[KeyCodes2["minus2"] = 109] = "minus2"; + KeyCodes2[KeyCodes2["numLock"] = 144] = "numLock"; + KeyCodes2[KeyCodes2["numPad0"] = 96] = "numPad0"; + KeyCodes2[KeyCodes2["numPad1"] = 97] = "numPad1"; + KeyCodes2[KeyCodes2["numPad2"] = 98] = "numPad2"; + KeyCodes2[KeyCodes2["numPad3"] = 99] = "numPad3"; + KeyCodes2[KeyCodes2["numPad4"] = 100] = "numPad4"; + KeyCodes2[KeyCodes2["numPad5"] = 101] = "numPad5"; + KeyCodes2[KeyCodes2["numPad6"] = 102] = "numPad6"; + KeyCodes2[KeyCodes2["numPad7"] = 103] = "numPad7"; + KeyCodes2[KeyCodes2["numPad8"] = 104] = "numPad8"; + KeyCodes2[KeyCodes2["numPad9"] = 105] = "numPad9"; + KeyCodes2[KeyCodes2["numPadDivide"] = 111] = "numPadDivide"; + KeyCodes2[KeyCodes2["numPadDot"] = 110] = "numPadDot"; + KeyCodes2[KeyCodes2["numPadMinus"] = 109] = "numPadMinus"; + KeyCodes2[KeyCodes2["numPadMultiply"] = 106] = "numPadMultiply"; + KeyCodes2[KeyCodes2["numPadPlus"] = 107] = "numPadPlus"; + KeyCodes2[KeyCodes2["openBracket"] = 219] = "openBracket"; + KeyCodes2[KeyCodes2["pageDown"] = 34] = "pageDown"; + KeyCodes2[KeyCodes2["pageUp"] = 33] = "pageUp"; + KeyCodes2[KeyCodes2["period"] = 190] = "period"; + KeyCodes2[KeyCodes2["print"] = 44] = "print"; + KeyCodes2[KeyCodes2["quote"] = 222] = "quote"; + KeyCodes2[KeyCodes2["scrollLock"] = 145] = "scrollLock"; + KeyCodes2[KeyCodes2["shift"] = 16] = "shift"; + KeyCodes2[KeyCodes2["space"] = 32] = "space"; + KeyCodes2[KeyCodes2["tab"] = 9] = "tab"; + KeyCodes2[KeyCodes2["tilde"] = 192] = "tilde"; + KeyCodes2[KeyCodes2["windowsLeft"] = 91] = "windowsLeft"; + KeyCodes2[KeyCodes2["windowsOpera"] = 219] = "windowsOpera"; + KeyCodes2[KeyCodes2["windowsRight"] = 92] = "windowsRight"; + })(KeyCodes || (KeyCodes = {})); + keyArrowDown = "ArrowDown"; + keyArrowLeft = "ArrowLeft"; + keyArrowRight = "ArrowRight"; + keyArrowUp = "ArrowUp"; + keyEnter = "Enter"; + keyEscape = "Escape"; + keyHome = "Home"; + keyEnd = "End"; + keyFunction2 = "F2"; + keyPageDown = "PageDown"; + keyPageUp = "PageUp"; + keySpace = " "; + keyTab = "Tab"; + keyBackspace = "Backspace"; + keyDelete = "Delete"; + ArrowKeys = { + ArrowDown: keyArrowDown, + ArrowLeft: keyArrowLeft, + ArrowRight: keyArrowRight, + ArrowUp: keyArrowUp + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/localization.js + var Direction; + var init_localization = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/localization.js"() { + (function(Direction2) { + Direction2["ltr"] = "ltr"; + Direction2["rtl"] = "rtl"; + })(Direction || (Direction = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/numbers.js + function wrapInBounds(min, max, value) { + if (value < min) { + return max; + } else if (value > max) { + return min; + } + return value; + } + function limit(min, max, value) { + return Math.min(Math.max(value, min), max); + } + function inRange(value, min, max = 0) { + [min, max] = [min, max].sort((a, b) => a - b); + return min <= value && value < max; + } + var init_numbers = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/numbers.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/strings.js + function uniqueId(prefix = "") { + return `${prefix}${uniqueIdCounter++}`; + } + var uniqueIdCounter; + var init_strings = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/strings.js"() { + uniqueIdCounter = 0; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/query.js + var init_query = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/query.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js + var RtlScrollConverter; + var init_rtl_scroll_converter = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js"() { + init_dist(); + init_localization(); + RtlScrollConverter = class _RtlScrollConverter { + /** + * Gets the scrollLeft value of the provided element + */ + static getScrollLeft(scrolledElement, direction) { + if (direction === Direction.rtl) { + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + return scrolledElement.scrollLeft; + } + /** + * Sets the scrollLeft value of the provided element + */ + static setScrollLeft(scrolledElement, scrollValue, direction) { + if (direction === Direction.rtl) { + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, scrollValue); + return; + } + scrolledElement.scrollLeft = scrollValue; + } + /** + * The initial rtl scroll converter getter function, it calls the browser test to set the correct converter + * functions and then invokes the getter + */ + static initialGetRtlScrollConverter(scrolledElement) { + _RtlScrollConverter.initializeRtlScrollConverters(); + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + /** + * The "direct" rtl get scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft; + } + /** + * The "inverted" get scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedGetRtlScrollConverter(scrolledElement) { + return -Math.abs(scrolledElement.scrollLeft); + } + /** + * The "reverse" get scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft - (scrolledElement.scrollWidth - scrolledElement.clientWidth); + } + /** + * The initial rtl scroll converter setter function, it calls the browser test to set the correct converter + * functions and then invokes the setter + */ + static initialSetRtlScrollConverter(scrolledElement, newScrollValue) { + _RtlScrollConverter.initializeRtlScrollConverters(); + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, newScrollValue); + } + /** + * The "direct" rtl set scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = newScrollValue; + } + /** + * The "inverted" set scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = Math.abs(newScrollValue); + } + /** + * The "reverse" set scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseSetRtlScrollConverter(scrolledElement, newScrollValue) { + const maxScroll = scrolledElement.scrollWidth - scrolledElement.clientWidth; + scrolledElement.scrollLeft = maxScroll + newScrollValue; + } + /** + * detects the appropriate rtl scroll converter functions and assigns them + * should only run once + */ + static initializeRtlScrollConverters() { + if (!canUseDOM()) { + _RtlScrollConverter.applyDirectScrollConverters(); + return; + } + const testElement = _RtlScrollConverter.getTestElement(); + document.body.appendChild(testElement); + _RtlScrollConverter.checkForScrollType(testElement); + document.body.removeChild(testElement); + } + /** + * checks the provided test element to determine scroll type + * and apply appropriate converters + */ + static checkForScrollType(testElement) { + if (_RtlScrollConverter.isReverse(testElement)) { + _RtlScrollConverter.applyReverseScrollConverters(); + } else { + if (_RtlScrollConverter.isDirect(testElement)) { + _RtlScrollConverter.applyDirectScrollConverters(); + } else { + _RtlScrollConverter.applyInvertedScrollConverters(); + } + } + } + /** + * checks test element initial state for rtl "reverse" mode + */ + static isReverse(testElement) { + return testElement.scrollLeft > 0; + } + /** + * checks test element for rtl "direct" mode + */ + static isDirect(testElement) { + testElement.scrollLeft = -1; + return testElement.scrollLeft < 0; + } + /** + * apply direct scroll conververters + */ + static applyDirectScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.directSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.directGetRtlScrollConverter; + } + /** + * apply inverted scroll conververters + */ + static applyInvertedScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.invertedSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.invertedGetRtlScrollConverter; + } + /** + * apply reverse scroll conververters + */ + static applyReverseScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.reverseSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.reverseGetRtlScrollConverter; + } + /** + * generate a test element for rtl testing + */ + static getTestElement() { + const testElement = document.createElement("div"); + testElement.appendChild(document.createTextNode("ABCD")); + testElement.dir = "rtl"; + testElement.style.fontSize = "14px"; + testElement.style.width = "4px"; + testElement.style.height = "1px"; + testElement.style.position = "absolute"; + testElement.style.top = "-1000px"; + testElement.style.overflow = "scroll"; + return testElement; + } + }; + RtlScrollConverter.getRtlScrollLeftConverter = RtlScrollConverter.initialGetRtlScrollConverter; + RtlScrollConverter.setRtlScrollLeftConverter = RtlScrollConverter.initialSetRtlScrollConverter; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/system-colors.js + var SystemColors; + var init_system_colors = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/system-colors.js"() { + (function(SystemColors2) { + SystemColors2["Canvas"] = "Canvas"; + SystemColors2["CanvasText"] = "CanvasText"; + SystemColors2["LinkText"] = "LinkText"; + SystemColors2["VisitedText"] = "VisitedText"; + SystemColors2["ActiveText"] = "ActiveText"; + SystemColors2["ButtonFace"] = "ButtonFace"; + SystemColors2["ButtonText"] = "ButtonText"; + SystemColors2["Field"] = "Field"; + SystemColors2["FieldText"] = "FieldText"; + SystemColors2["Highlight"] = "Highlight"; + SystemColors2["HighlightText"] = "HighlightText"; + SystemColors2["GrayText"] = "GrayText"; + })(SystemColors || (SystemColors = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/index.js + var init_dist2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/index.js"() { + init_aria(); + init_array(); + init_class_names(); + init_dom2(); + init_events(); + init_html(); + init_key_codes(); + init_localization(); + init_numbers(); + init_strings(); + init_query(); + init_rtl_scroll_converter(); + init_system_colors(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js + var AccordionExpandMode, Accordion; + var init_accordion = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_accordion_item(); + AccordionExpandMode = { + /** + * Designates only a single {@link @microsoft/fast-foundation#(AccordionItem:class) } can be open a time. + */ + single: "single", + /** + * Designates multiple {@link @microsoft/fast-foundation#(AccordionItem:class) | AccordionItems} can be open simultaneously. + */ + multi: "multi" + }; + Accordion = class extends FoundationElement { + constructor() { + super(...arguments); + this.expandmode = AccordionExpandMode.multi; + this.activeItemIndex = 0; + this.change = () => { + this.$emit("change", this.activeid); + }; + this.setItems = () => { + var _a; + if (this.accordionItems.length === 0) { + return; + } + this.accordionIds = this.getItemIds(); + this.accordionItems.forEach((item, index) => { + if (item instanceof AccordionItem) { + item.addEventListener("change", this.activeItemChange); + if (this.isSingleExpandMode()) { + this.activeItemIndex !== index ? item.expanded = false : item.expanded = true; + } + } + const itemId = this.accordionIds[index]; + item.setAttribute("id", typeof itemId !== "string" ? `accordion-${index + 1}` : itemId); + this.activeid = this.accordionIds[this.activeItemIndex]; + item.addEventListener("keydown", this.handleItemKeyDown); + item.addEventListener("focus", this.handleItemFocus); + }); + if (this.isSingleExpandMode()) { + const expandedItem = (_a = this.findExpandedItem()) !== null && _a !== void 0 ? _a : this.accordionItems[0]; + expandedItem.setAttribute("aria-disabled", "true"); + } + }; + this.removeItemListeners = (oldValue) => { + oldValue.forEach((item, index) => { + item.removeEventListener("change", this.activeItemChange); + item.removeEventListener("keydown", this.handleItemKeyDown); + item.removeEventListener("focus", this.handleItemFocus); + }); + }; + this.activeItemChange = (event) => { + if (event.defaultPrevented || event.target !== event.currentTarget) { + return; + } + event.preventDefault(); + const selectedItem = event.target; + this.activeid = selectedItem.getAttribute("id"); + if (this.isSingleExpandMode()) { + this.resetItems(); + selectedItem.expanded = true; + selectedItem.setAttribute("aria-disabled", "true"); + this.accordionItems.forEach((item) => { + if (!item.hasAttribute("disabled") && item.id !== this.activeid) { + item.removeAttribute("aria-disabled"); + } + }); + } + this.activeItemIndex = Array.from(this.accordionItems).indexOf(selectedItem); + this.change(); + }; + this.handleItemKeyDown = (event) => { + if (event.target !== event.currentTarget) { + return; + } + this.accordionIds = this.getItemIds(); + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjust(-1); + break; + case keyArrowDown: + event.preventDefault(); + this.adjust(1); + break; + case keyHome: + this.activeItemIndex = 0; + this.focusItem(); + break; + case keyEnd: + this.activeItemIndex = this.accordionItems.length - 1; + this.focusItem(); + break; + } + }; + this.handleItemFocus = (event) => { + if (event.target === event.currentTarget) { + const focusedItem = event.target; + const focusedIndex = this.activeItemIndex = Array.from(this.accordionItems).indexOf(focusedItem); + if (this.activeItemIndex !== focusedIndex && focusedIndex !== -1) { + this.activeItemIndex = focusedIndex; + this.activeid = this.accordionIds[this.activeItemIndex]; + } + } + }; + } + /** + * @internal + */ + accordionItemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.removeItemListeners(oldValue); + this.setItems(); + } + } + findExpandedItem() { + for (let item = 0; item < this.accordionItems.length; item++) { + if (this.accordionItems[item].getAttribute("expanded") === "true") { + return this.accordionItems[item]; + } + } + return null; + } + resetItems() { + this.accordionItems.forEach((item, index) => { + item.expanded = false; + }); + } + getItemIds() { + return this.accordionItems.map((accordionItem) => { + return accordionItem.getAttribute("id"); + }); + } + isSingleExpandMode() { + return this.expandmode === AccordionExpandMode.single; + } + adjust(adjustment) { + this.activeItemIndex = wrapInBounds(0, this.accordionItems.length - 1, this.activeItemIndex + adjustment); + this.focusItem(); + } + focusItem() { + const element = this.accordionItems[this.activeItemIndex]; + if (element instanceof AccordionItem) { + element.expandbutton.focus(); + } + } + }; + __decorate([ + attr({ attribute: "expand-mode" }) + ], Accordion.prototype, "expandmode", void 0); + __decorate([ + observable + ], Accordion.prototype, "accordionItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js + var init_accordion2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js"() { + init_accordion_template(); + init_accordion(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js + var anchorTemplate; + var init_anchor_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js"() { + init_esm(); + init_start_end(); + anchorTemplate = (context, definition) => html` + + ${startSlotTemplate(context, definition)} + + + + ${endSlotTemplate(context, definition)} + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js + var ARIAGlobalStatesAndProperties; + var init_aria_global = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js"() { + init_tslib_es6(); + init_esm(); + ARIAGlobalStatesAndProperties = class { + }; + __decorate([ + attr({ attribute: "aria-atomic" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaAtomic", void 0); + __decorate([ + attr({ attribute: "aria-busy" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaBusy", void 0); + __decorate([ + attr({ attribute: "aria-controls" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaControls", void 0); + __decorate([ + attr({ attribute: "aria-current" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaCurrent", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-details" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDetails", void 0); + __decorate([ + attr({ attribute: "aria-disabled" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDisabled", void 0); + __decorate([ + attr({ attribute: "aria-errormessage" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaErrormessage", void 0); + __decorate([ + attr({ attribute: "aria-flowto" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaFlowto", void 0); + __decorate([ + attr({ attribute: "aria-haspopup" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHaspopup", void 0); + __decorate([ + attr({ attribute: "aria-hidden" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHidden", void 0); + __decorate([ + attr({ attribute: "aria-invalid" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaInvalid", void 0); + __decorate([ + attr({ attribute: "aria-keyshortcuts" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaKeyshortcuts", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabel", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-live" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLive", void 0); + __decorate([ + attr({ attribute: "aria-owns" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaOwns", void 0); + __decorate([ + attr({ attribute: "aria-relevant" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRelevant", void 0); + __decorate([ + attr({ attribute: "aria-roledescription" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRoledescription", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js + var init_patterns = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js"() { + init_aria_global(); + init_start_end(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js + var Anchor, DelegatesARIALink; + var init_anchor = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_patterns(); + init_apply_mixins(); + Anchor = class extends FoundationElement { + constructor() { + super(...arguments); + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + var _a2; + (_a2 = this.control) === null || _a2 === void 0 ? void 0 : _a2.focus(); + }; + } + }; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.handleUnsupportedDelegatesFocus(); + } + }; + __decorate([ + attr + ], Anchor.prototype, "download", void 0); + __decorate([ + attr + ], Anchor.prototype, "href", void 0); + __decorate([ + attr + ], Anchor.prototype, "hreflang", void 0); + __decorate([ + attr + ], Anchor.prototype, "ping", void 0); + __decorate([ + attr + ], Anchor.prototype, "referrerpolicy", void 0); + __decorate([ + attr + ], Anchor.prototype, "rel", void 0); + __decorate([ + attr + ], Anchor.prototype, "target", void 0); + __decorate([ + attr + ], Anchor.prototype, "type", void 0); + __decorate([ + observable + ], Anchor.prototype, "defaultSlottedContent", void 0); + DelegatesARIALink = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIALink.prototype, "ariaExpanded", void 0); + applyMixins(DelegatesARIALink, ARIAGlobalStatesAndProperties); + applyMixins(Anchor, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js + var init_anchor2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js"() { + init_anchor_template(); + init_anchor(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js + var init_anchored_region_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js + var getDirection; + var init_direction = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js"() { + init_dist2(); + getDirection = (rootNode) => { + const dirNode = rootNode.closest("[dir]"); + return dirNode !== null && dirNode.dir === "rtl" ? Direction.rtl : Direction.ltr; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js + var IntersectionService; + var init_intersection_service = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js"() { + init_esm(); + IntersectionService = class { + constructor() { + this.intersectionDetector = null; + this.observedElements = /* @__PURE__ */ new Map(); + this.requestPosition = (target, callback) => { + var _a; + if (this.intersectionDetector === null) { + return; + } + if (this.observedElements.has(target)) { + (_a = this.observedElements.get(target)) === null || _a === void 0 ? void 0 : _a.push(callback); + return; + } + this.observedElements.set(target, [callback]); + this.intersectionDetector.observe(target); + }; + this.cancelRequestPosition = (target, callback) => { + const callbacks = this.observedElements.get(target); + if (callbacks !== void 0) { + const callBackIndex = callbacks.indexOf(callback); + if (callBackIndex !== -1) { + callbacks.splice(callBackIndex, 1); + } + } + }; + this.initializeIntersectionDetector = () => { + if (!$global.IntersectionObserver) { + return; + } + this.intersectionDetector = new IntersectionObserver(this.handleIntersection, { + root: null, + rootMargin: "0px", + threshold: [0, 1] + }); + }; + this.handleIntersection = (entries) => { + if (this.intersectionDetector === null) { + return; + } + const pendingCallbacks = []; + const pendingCallbackParams = []; + entries.forEach((entry) => { + var _a; + (_a = this.intersectionDetector) === null || _a === void 0 ? void 0 : _a.unobserve(entry.target); + const thisElementCallbacks = this.observedElements.get(entry.target); + if (thisElementCallbacks !== void 0) { + thisElementCallbacks.forEach((callback) => { + let targetCallbackIndex = pendingCallbacks.indexOf(callback); + if (targetCallbackIndex === -1) { + targetCallbackIndex = pendingCallbacks.length; + pendingCallbacks.push(callback); + pendingCallbackParams.push([]); + } + pendingCallbackParams[targetCallbackIndex].push(entry); + }); + this.observedElements.delete(entry.target); + } + }); + pendingCallbacks.forEach((callback, index) => { + callback(pendingCallbackParams[index]); + }); + }; + this.initializeIntersectionDetector(); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js + var AnchoredRegion; + var init_anchored_region = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_direction(); + init_intersection_service(); + AnchoredRegion = class _AnchoredRegion extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.viewport = ""; + this.horizontalPositioningMode = "uncontrolled"; + this.horizontalDefaultPosition = "unset"; + this.horizontalViewportLock = false; + this.horizontalInset = false; + this.horizontalScaling = "content"; + this.verticalPositioningMode = "uncontrolled"; + this.verticalDefaultPosition = "unset"; + this.verticalViewportLock = false; + this.verticalInset = false; + this.verticalScaling = "content"; + this.fixedPlacement = false; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.initialLayoutComplete = false; + this.resizeDetector = null; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.pendingPositioningUpdate = false; + this.pendingReset = false; + this.currentDirection = Direction.ltr; + this.regionVisible = false; + this.forceUpdate = false; + this.updateThreshold = 0.5; + this.update = () => { + if (!this.pendingPositioningUpdate) { + this.requestPositionUpdates(); + } + }; + this.startObservers = () => { + this.stopObservers(); + if (this.anchorElement === null) { + return; + } + this.requestPositionUpdates(); + if (this.resizeDetector !== null) { + this.resizeDetector.observe(this.anchorElement); + this.resizeDetector.observe(this); + } + }; + this.requestPositionUpdates = () => { + if (this.anchorElement === null || this.pendingPositioningUpdate) { + return; + } + _AnchoredRegion.intersectionService.requestPosition(this, this.handleIntersection); + _AnchoredRegion.intersectionService.requestPosition(this.anchorElement, this.handleIntersection); + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.requestPosition(this.viewportElement, this.handleIntersection); + } + this.pendingPositioningUpdate = true; + }; + this.stopObservers = () => { + if (this.pendingPositioningUpdate) { + this.pendingPositioningUpdate = false; + _AnchoredRegion.intersectionService.cancelRequestPosition(this, this.handleIntersection); + if (this.anchorElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.anchorElement, this.handleIntersection); + } + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.viewportElement, this.handleIntersection); + } + } + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + } + }; + this.getViewport = () => { + if (typeof this.viewport !== "string" || this.viewport === "") { + return document.documentElement; + } + return document.getElementById(this.viewport); + }; + this.getAnchor = () => { + return document.getElementById(this.anchor); + }; + this.handleIntersection = (entries) => { + if (!this.pendingPositioningUpdate) { + return; + } + this.pendingPositioningUpdate = false; + if (!this.applyIntersectionEntries(entries)) { + return; + } + this.updateLayout(); + }; + this.applyIntersectionEntries = (entries) => { + const regionEntry = entries.find((x) => x.target === this); + const anchorEntry = entries.find((x) => x.target === this.anchorElement); + const viewportEntry = entries.find((x) => x.target === this.viewportElement); + if (regionEntry === void 0 || viewportEntry === void 0 || anchorEntry === void 0) { + return false; + } + if (!this.regionVisible || this.forceUpdate || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0 || this.isRectDifferent(this.anchorRect, anchorEntry.boundingClientRect) || this.isRectDifferent(this.viewportRect, viewportEntry.boundingClientRect) || this.isRectDifferent(this.regionRect, regionEntry.boundingClientRect)) { + this.regionRect = regionEntry.boundingClientRect; + this.anchorRect = anchorEntry.boundingClientRect; + if (this.viewportElement === document.documentElement) { + this.viewportRect = new DOMRectReadOnly(viewportEntry.boundingClientRect.x + document.documentElement.scrollLeft, viewportEntry.boundingClientRect.y + document.documentElement.scrollTop, viewportEntry.boundingClientRect.width, viewportEntry.boundingClientRect.height); + } else { + this.viewportRect = viewportEntry.boundingClientRect; + } + this.updateRegionOffset(); + this.forceUpdate = false; + return true; + } + return false; + }; + this.updateRegionOffset = () => { + if (this.anchorRect && this.regionRect) { + this.baseHorizontalOffset = this.baseHorizontalOffset + (this.anchorRect.left - this.regionRect.left) + (this.translateX - this.baseHorizontalOffset); + this.baseVerticalOffset = this.baseVerticalOffset + (this.anchorRect.top - this.regionRect.top) + (this.translateY - this.baseVerticalOffset); + } + }; + this.isRectDifferent = (rectA, rectB) => { + if (Math.abs(rectA.top - rectB.top) > this.updateThreshold || Math.abs(rectA.right - rectB.right) > this.updateThreshold || Math.abs(rectA.bottom - rectB.bottom) > this.updateThreshold || Math.abs(rectA.left - rectB.left) > this.updateThreshold) { + return true; + } + return false; + }; + this.handleResize = (entries) => { + this.update(); + }; + this.reset = () => { + if (!this.pendingReset) { + return; + } + this.pendingReset = false; + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + if (this.viewportElement === null) { + this.viewportElement = this.getViewport(); + } + this.currentDirection = getDirection(this); + this.startObservers(); + }; + this.updateLayout = () => { + let desiredVerticalPosition = void 0; + let desiredHorizontalPosition = void 0; + if (this.horizontalPositioningMode !== "uncontrolled") { + const horizontalOptions = this.getPositioningOptions(this.horizontalInset); + if (this.horizontalDefaultPosition === "center") { + desiredHorizontalPosition = "center"; + } else if (this.horizontalDefaultPosition !== "unset") { + let dirCorrectedHorizontalDefaultPosition = this.horizontalDefaultPosition; + if (dirCorrectedHorizontalDefaultPosition === "start" || dirCorrectedHorizontalDefaultPosition === "end") { + const newDirection = getDirection(this); + if (newDirection !== this.currentDirection) { + this.currentDirection = newDirection; + this.initialize(); + return; + } + if (this.currentDirection === Direction.ltr) { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "left" : "right"; + } else { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "right" : "left"; + } + } + switch (dirCorrectedHorizontalDefaultPosition) { + case "left": + desiredHorizontalPosition = this.horizontalInset ? "insetStart" : "start"; + break; + case "right": + desiredHorizontalPosition = this.horizontalInset ? "insetEnd" : "end"; + break; + } + } + const horizontalThreshold = this.horizontalThreshold !== void 0 ? this.horizontalThreshold : this.regionRect !== void 0 ? this.regionRect.width : 0; + const anchorLeft = this.anchorRect !== void 0 ? this.anchorRect.left : 0; + const anchorRight = this.anchorRect !== void 0 ? this.anchorRect.right : 0; + const anchorWidth = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + const viewportLeft = this.viewportRect !== void 0 ? this.viewportRect.left : 0; + const viewportRight = this.viewportRect !== void 0 ? this.viewportRect.right : 0; + if (desiredHorizontalPosition === void 0 || !(this.horizontalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredHorizontalPosition, anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) < horizontalThreshold) { + desiredHorizontalPosition = this.getAvailableSpace(horizontalOptions[0], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) > this.getAvailableSpace(horizontalOptions[1], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) ? horizontalOptions[0] : horizontalOptions[1]; + } + } + if (this.verticalPositioningMode !== "uncontrolled") { + const verticalOptions = this.getPositioningOptions(this.verticalInset); + if (this.verticalDefaultPosition === "center") { + desiredVerticalPosition = "center"; + } else if (this.verticalDefaultPosition !== "unset") { + switch (this.verticalDefaultPosition) { + case "top": + desiredVerticalPosition = this.verticalInset ? "insetStart" : "start"; + break; + case "bottom": + desiredVerticalPosition = this.verticalInset ? "insetEnd" : "end"; + break; + } + } + const verticalThreshold = this.verticalThreshold !== void 0 ? this.verticalThreshold : this.regionRect !== void 0 ? this.regionRect.height : 0; + const anchorTop = this.anchorRect !== void 0 ? this.anchorRect.top : 0; + const anchorBottom = this.anchorRect !== void 0 ? this.anchorRect.bottom : 0; + const anchorHeight = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + const viewportTop = this.viewportRect !== void 0 ? this.viewportRect.top : 0; + const viewportBottom = this.viewportRect !== void 0 ? this.viewportRect.bottom : 0; + if (desiredVerticalPosition === void 0 || !(this.verticalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredVerticalPosition, anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) < verticalThreshold) { + desiredVerticalPosition = this.getAvailableSpace(verticalOptions[0], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) > this.getAvailableSpace(verticalOptions[1], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) ? verticalOptions[0] : verticalOptions[1]; + } + } + const nextPositionerDimension = this.getNextRegionDimension(desiredHorizontalPosition, desiredVerticalPosition); + const positionChanged = this.horizontalPosition !== desiredHorizontalPosition || this.verticalPosition !== desiredVerticalPosition; + this.setHorizontalPosition(desiredHorizontalPosition, nextPositionerDimension); + this.setVerticalPosition(desiredVerticalPosition, nextPositionerDimension); + this.updateRegionStyle(); + if (!this.initialLayoutComplete) { + this.initialLayoutComplete = true; + this.requestPositionUpdates(); + return; + } + if (!this.regionVisible) { + this.regionVisible = true; + this.style.removeProperty("pointer-events"); + this.style.removeProperty("opacity"); + this.classList.toggle("loaded", true); + this.$emit("loaded", this, { bubbles: false }); + } + this.updatePositionClasses(); + if (positionChanged) { + this.$emit("positionchange", this, { bubbles: false }); + } + }; + this.updateRegionStyle = () => { + this.style.width = this.regionWidth; + this.style.height = this.regionHeight; + this.style.transform = `translate(${this.translateX}px, ${this.translateY}px)`; + }; + this.updatePositionClasses = () => { + this.classList.toggle("top", this.verticalPosition === "start"); + this.classList.toggle("bottom", this.verticalPosition === "end"); + this.classList.toggle("inset-top", this.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.verticalPosition === "insetEnd"); + this.classList.toggle("vertical-center", this.verticalPosition === "center"); + this.classList.toggle("left", this.horizontalPosition === "start"); + this.classList.toggle("right", this.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.horizontalPosition === "insetEnd"); + this.classList.toggle("horizontal-center", this.horizontalPosition === "center"); + }; + this.setHorizontalPosition = (desiredHorizontalPosition, nextPositionerDimension) => { + if (desiredHorizontalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionWidth = 0; + switch (this.horizontalScaling) { + case "anchor": + case "fill": + nextRegionWidth = this.horizontalViewportLock ? this.viewportRect.width : nextPositionerDimension.width; + this.regionWidth = `${nextRegionWidth}px`; + break; + case "content": + nextRegionWidth = this.regionRect.width; + this.regionWidth = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredHorizontalPosition) { + case "start": + this.translateX = this.baseHorizontalOffset - nextRegionWidth; + if (this.horizontalViewportLock && this.anchorRect.left > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.right); + } + break; + case "insetStart": + this.translateX = this.baseHorizontalOffset - nextRegionWidth + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.right); + } + break; + case "insetEnd": + this.translateX = this.baseHorizontalOffset; + if (this.horizontalViewportLock && this.anchorRect.left < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.left); + } + break; + case "end": + this.translateX = this.baseHorizontalOffset + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.left); + } + break; + case "center": + sizeDelta = (this.anchorRect.width - nextRegionWidth) / 2; + this.translateX = this.baseHorizontalOffset + sizeDelta; + if (this.horizontalViewportLock) { + const regionLeft = this.anchorRect.left + sizeDelta; + const regionRight = this.anchorRect.right - sizeDelta; + if (regionLeft < this.viewportRect.left && !(regionRight > this.viewportRect.right)) { + this.translateX = this.translateX - (regionLeft - this.viewportRect.left); + } else if (regionRight > this.viewportRect.right && !(regionLeft < this.viewportRect.left)) { + this.translateX = this.translateX - (regionRight - this.viewportRect.right); + } + } + break; + } + this.horizontalPosition = desiredHorizontalPosition; + }; + this.setVerticalPosition = (desiredVerticalPosition, nextPositionerDimension) => { + if (desiredVerticalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionHeight = 0; + switch (this.verticalScaling) { + case "anchor": + case "fill": + nextRegionHeight = this.verticalViewportLock ? this.viewportRect.height : nextPositionerDimension.height; + this.regionHeight = `${nextRegionHeight}px`; + break; + case "content": + nextRegionHeight = this.regionRect.height; + this.regionHeight = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredVerticalPosition) { + case "start": + this.translateY = this.baseVerticalOffset - nextRegionHeight; + if (this.verticalViewportLock && this.anchorRect.top > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.bottom); + } + break; + case "insetStart": + this.translateY = this.baseVerticalOffset - nextRegionHeight + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.bottom); + } + break; + case "insetEnd": + this.translateY = this.baseVerticalOffset; + if (this.verticalViewportLock && this.anchorRect.top < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.top); + } + break; + case "end": + this.translateY = this.baseVerticalOffset + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.top); + } + break; + case "center": + sizeDelta = (this.anchorRect.height - nextRegionHeight) / 2; + this.translateY = this.baseVerticalOffset + sizeDelta; + if (this.verticalViewportLock) { + const regionTop = this.anchorRect.top + sizeDelta; + const regionBottom = this.anchorRect.bottom - sizeDelta; + if (regionTop < this.viewportRect.top && !(regionBottom > this.viewportRect.bottom)) { + this.translateY = this.translateY - (regionTop - this.viewportRect.top); + } else if (regionBottom > this.viewportRect.bottom && !(regionTop < this.viewportRect.top)) { + this.translateY = this.translateY - (regionBottom - this.viewportRect.bottom); + } + } + } + this.verticalPosition = desiredVerticalPosition; + }; + this.getPositioningOptions = (inset) => { + if (inset) { + return ["insetStart", "insetEnd"]; + } + return ["start", "end"]; + }; + this.getAvailableSpace = (positionOption, anchorStart, anchorEnd, anchorSpan, viewportStart, viewportEnd) => { + const spaceStart = anchorStart - viewportStart; + const spaceEnd = viewportEnd - (anchorStart + anchorSpan); + switch (positionOption) { + case "start": + return spaceStart; + case "insetStart": + return spaceStart + anchorSpan; + case "insetEnd": + return spaceEnd + anchorSpan; + case "end": + return spaceEnd; + case "center": + return Math.min(spaceStart, spaceEnd) * 2 + anchorSpan; + } + }; + this.getNextRegionDimension = (desiredHorizontalPosition, desiredVerticalPosition) => { + const newRegionDimension = { + height: this.regionRect !== void 0 ? this.regionRect.height : 0, + width: this.regionRect !== void 0 ? this.regionRect.width : 0 + }; + if (desiredHorizontalPosition !== void 0 && this.horizontalScaling === "fill") { + newRegionDimension.width = this.getAvailableSpace(desiredHorizontalPosition, this.anchorRect !== void 0 ? this.anchorRect.left : 0, this.anchorRect !== void 0 ? this.anchorRect.right : 0, this.anchorRect !== void 0 ? this.anchorRect.width : 0, this.viewportRect !== void 0 ? this.viewportRect.left : 0, this.viewportRect !== void 0 ? this.viewportRect.right : 0); + } else if (this.horizontalScaling === "anchor") { + newRegionDimension.width = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + } + if (desiredVerticalPosition !== void 0 && this.verticalScaling === "fill") { + newRegionDimension.height = this.getAvailableSpace(desiredVerticalPosition, this.anchorRect !== void 0 ? this.anchorRect.top : 0, this.anchorRect !== void 0 ? this.anchorRect.bottom : 0, this.anchorRect !== void 0 ? this.anchorRect.height : 0, this.viewportRect !== void 0 ? this.viewportRect.top : 0, this.viewportRect !== void 0 ? this.viewportRect.bottom : 0); + } else if (this.verticalScaling === "anchor") { + newRegionDimension.height = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + } + return newRegionDimension; + }; + this.startAutoUpdateEventListeners = () => { + window.addEventListener(eventResize, this.update, { passive: true }); + window.addEventListener(eventScroll, this.update, { + passive: true, + capture: true + }); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.observe(this.viewportElement); + } + }; + this.stopAutoUpdateEventListeners = () => { + window.removeEventListener(eventResize, this.update); + window.removeEventListener(eventScroll, this.update); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.unobserve(this.viewportElement); + } + }; + } + anchorChanged() { + if (this.initialLayoutComplete) { + this.anchorElement = this.getAnchor(); + } + } + viewportChanged() { + if (this.initialLayoutComplete) { + this.viewportElement = this.getViewport(); + } + } + horizontalPositioningModeChanged() { + this.requestReset(); + } + horizontalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + horizontalViewportLockChanged() { + this.updateForAttributeChange(); + } + horizontalInsetChanged() { + this.updateForAttributeChange(); + } + horizontalThresholdChanged() { + this.updateForAttributeChange(); + } + horizontalScalingChanged() { + this.updateForAttributeChange(); + } + verticalPositioningModeChanged() { + this.requestReset(); + } + verticalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + verticalViewportLockChanged() { + this.updateForAttributeChange(); + } + verticalInsetChanged() { + this.updateForAttributeChange(); + } + verticalThresholdChanged() { + this.updateForAttributeChange(); + } + verticalScalingChanged() { + this.updateForAttributeChange(); + } + fixedPlacementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + autoUpdateModeChanged(prevMode, newMode) { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + if (prevMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + if (newMode === "auto") { + this.startAutoUpdateEventListeners(); + } + } + } + anchorElementChanged() { + this.requestReset(); + } + viewportElementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.autoUpdateMode === "auto") { + this.startAutoUpdateEventListeners(); + } + this.initialize(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + if (this.autoUpdateMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + this.stopObservers(); + this.disconnectResizeDetector(); + } + /** + * @internal + */ + adoptedCallback() { + this.initialize(); + } + /** + * destroys the instance's resize observer + */ + disconnectResizeDetector() { + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.handleResize); + } + /** + * react to attribute changes that don't require a reset + */ + updateForAttributeChange() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.forceUpdate = true; + this.update(); + } + } + /** + * fully initializes the component + */ + initialize() { + this.initializeResizeDetector(); + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + this.requestReset(); + } + /** + * Request a reset if there are currently no open requests + */ + requestReset() { + if (this.$fastController.isConnected && this.pendingReset === false) { + this.setInitialState(); + DOM.queueUpdate(() => this.reset()); + this.pendingReset = true; + } + } + /** + * sets the starting configuration for component internal values + */ + setInitialState() { + this.initialLayoutComplete = false; + this.regionVisible = false; + this.translateX = 0; + this.translateY = 0; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.viewportRect = void 0; + this.regionRect = void 0; + this.anchorRect = void 0; + this.verticalPosition = void 0; + this.horizontalPosition = void 0; + this.style.opacity = "0"; + this.style.pointerEvents = "none"; + this.forceUpdate = false; + this.style.position = this.fixedPlacement ? "fixed" : "absolute"; + this.updatePositionClasses(); + this.updateRegionStyle(); + } + }; + AnchoredRegion.intersectionService = new IntersectionService(); + __decorate([ + attr + ], AnchoredRegion.prototype, "anchor", void 0); + __decorate([ + attr + ], AnchoredRegion.prototype, "viewport", void 0); + __decorate([ + attr({ attribute: "horizontal-positioning-mode" }) + ], AnchoredRegion.prototype, "horizontalPositioningMode", void 0); + __decorate([ + attr({ attribute: "horizontal-default-position" }) + ], AnchoredRegion.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "horizontal-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalInset", void 0); + __decorate([ + attr({ attribute: "horizontal-threshold" }) + ], AnchoredRegion.prototype, "horizontalThreshold", void 0); + __decorate([ + attr({ attribute: "horizontal-scaling" }) + ], AnchoredRegion.prototype, "horizontalScaling", void 0); + __decorate([ + attr({ attribute: "vertical-positioning-mode" }) + ], AnchoredRegion.prototype, "verticalPositioningMode", void 0); + __decorate([ + attr({ attribute: "vertical-default-position" }) + ], AnchoredRegion.prototype, "verticalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalInset", void 0); + __decorate([ + attr({ attribute: "vertical-threshold" }) + ], AnchoredRegion.prototype, "verticalThreshold", void 0); + __decorate([ + attr({ attribute: "vertical-scaling" }) + ], AnchoredRegion.prototype, "verticalScaling", void 0); + __decorate([ + attr({ attribute: "fixed-placement", mode: "boolean" }) + ], AnchoredRegion.prototype, "fixedPlacement", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], AnchoredRegion.prototype, "autoUpdateMode", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "anchorElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "viewportElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "initialLayoutComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js + var horizontalAnchorOverlay, FlyoutPosTop, FlyoutPosBottom, FlyoutPosTallest, FlyoutPosTopFill, FlyoutPosBottomFill, FlyoutPosTallestFill; + var init_anchored_region_config = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js"() { + horizontalAnchorOverlay = { + horizontalDefaultPosition: "center", + horizontalPositioningMode: "locktodefault", + horizontalInset: false, + horizontalScaling: "anchor" + }; + FlyoutPosTop = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "top", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosBottom = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "bottom", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTallest = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalPositioningMode: "dynamic", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTopFill = Object.assign(Object.assign({}, FlyoutPosTop), { verticalScaling: "fill" }); + FlyoutPosBottomFill = Object.assign(Object.assign({}, FlyoutPosBottom), { verticalScaling: "fill" }); + FlyoutPosTallestFill = Object.assign(Object.assign({}, FlyoutPosTallest), { verticalScaling: "fill" }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js + var init_anchored_region2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js"() { + init_anchored_region_template(); + init_anchored_region(); + init_anchored_region_config(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js + var init_avatar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js + var Avatar; + var init_avatar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Avatar = class extends FoundationElement { + /** + * Internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.shape) { + this.shape = "circle"; + } + } + }; + __decorate([ + attr + ], Avatar.prototype, "fill", void 0); + __decorate([ + attr + ], Avatar.prototype, "color", void 0); + __decorate([ + attr + ], Avatar.prototype, "link", void 0); + __decorate([ + attr + ], Avatar.prototype, "shape", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js + var init_avatar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js"() { + init_avatar_template(); + init_avatar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js + var badgeTemplate; + var init_badge_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js"() { + init_esm(); + badgeTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js + var Badge; + var init_badge = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Badge = class extends FoundationElement { + constructor() { + super(...arguments); + this.generateBadgeStyle = () => { + if (!this.fill && !this.color) { + return; + } + const fill = `background-color: var(--badge-fill-${this.fill});`; + const color = `color: var(--badge-color-${this.color});`; + if (this.fill && !this.color) { + return fill; + } else if (this.color && !this.fill) { + return color; + } else { + return `${color} ${fill}`; + } + }; + } + }; + __decorate([ + attr({ attribute: "fill" }) + ], Badge.prototype, "fill", void 0); + __decorate([ + attr({ attribute: "color" }) + ], Badge.prototype, "color", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Badge.prototype, "circular", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js + var init_badge2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js"() { + init_badge_template(); + init_badge(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js + var init_breadcrumb_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js + var BreadcrumbItem; + var init_breadcrumb_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js"() { + init_tslib_es6(); + init_esm(); + init_anchor(); + init_patterns(); + init_apply_mixins(); + BreadcrumbItem = class extends Anchor { + constructor() { + super(...arguments); + this.separator = true; + } + }; + __decorate([ + observable + ], BreadcrumbItem.prototype, "separator", void 0); + applyMixins(BreadcrumbItem, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js + var init_breadcrumb_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js"() { + init_breadcrumb_item_template(); + init_breadcrumb_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js + var init_breadcrumb_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js + var Breadcrumb; + var init_breadcrumb = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js"() { + init_tslib_es6(); + init_esm(); + init_breadcrumb_item(); + init_foundation_element(); + Breadcrumb = class extends FoundationElement { + slottedBreadcrumbItemsChanged() { + if (this.$fastController.isConnected) { + if (this.slottedBreadcrumbItems === void 0 || this.slottedBreadcrumbItems.length === 0) { + return; + } + const lastNode = this.slottedBreadcrumbItems[this.slottedBreadcrumbItems.length - 1]; + this.slottedBreadcrumbItems.forEach((item) => { + const itemIsLastNode = item === lastNode; + this.setItemSeparator(item, itemIsLastNode); + this.setAriaCurrent(item, itemIsLastNode); + }); + } + } + setItemSeparator(item, isLastNode) { + if (item instanceof BreadcrumbItem) { + item.separator = !isLastNode; + } + } + /** + * Finds href on childnodes in the light DOM or shadow DOM. + * We look in the shadow DOM because we insert an anchor when breadcrumb-item has an href. + */ + findChildWithHref(node) { + var _a, _b; + if (node.childElementCount > 0) { + return node.querySelector("a[href]"); + } else if ((_a = node.shadowRoot) === null || _a === void 0 ? void 0 : _a.childElementCount) { + return (_b = node.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector("a[href]"); + } else + return null; + } + /** + * Sets ARIA Current for the current node + * If child node with an anchor tag and with href is found then set aria-current to correct value for the child node, + * otherwise apply aria-current to the host element, with an href + */ + setAriaCurrent(item, isLastNode) { + const childNodeWithHref = this.findChildWithHref(item); + if (childNodeWithHref === null && item.hasAttribute("href") && item instanceof BreadcrumbItem) { + isLastNode ? item.setAttribute("aria-current", "page") : item.removeAttribute("aria-current"); + } else if (childNodeWithHref !== null) { + isLastNode ? childNodeWithHref.setAttribute("aria-current", "page") : childNodeWithHref.removeAttribute("aria-current"); + } + } + }; + __decorate([ + observable + ], Breadcrumb.prototype, "slottedBreadcrumbItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js + var init_breadcrumb2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js"() { + init_breadcrumb_template(); + init_breadcrumb(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js + var buttonTemplate; + var init_button_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js"() { + init_esm(); + init_start_end(); + buttonTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js + function FormAssociated(BaseCtor) { + const C = class extends BaseCtor { + constructor(...args) { + super(...args); + this.dirtyValue = false; + this.disabled = false; + this.proxyEventsToBlock = ["change", "click"]; + this.proxyInitialized = false; + this.required = false; + this.initialValue = this.initialValue || ""; + if (!this.elementInternals) { + this.formResetCallback = this.formResetCallback.bind(this); + } + } + /** + * Must evaluate to true to enable elementInternals. + * Feature detects API support and resolve respectively + * + * @internal + */ + static get formAssociated() { + return supportsElementInternals; + } + /** + * Returns the validity state of the element + * + * @alpha + */ + get validity() { + return this.elementInternals ? this.elementInternals.validity : this.proxy.validity; + } + /** + * Retrieve a reference to the associated form. + * Returns null if not associated to any form. + * + * @alpha + */ + get form() { + return this.elementInternals ? this.elementInternals.form : this.proxy.form; + } + /** + * Retrieve the localized validation message, + * or custom validation message if set. + * + * @alpha + */ + get validationMessage() { + return this.elementInternals ? this.elementInternals.validationMessage : this.proxy.validationMessage; + } + /** + * Whether the element will be validated when the + * form is submitted + */ + get willValidate() { + return this.elementInternals ? this.elementInternals.willValidate : this.proxy.willValidate; + } + /** + * A reference to all associated label elements + */ + get labels() { + if (this.elementInternals) { + return Object.freeze(Array.from(this.elementInternals.labels)); + } else if (this.proxy instanceof HTMLElement && this.proxy.ownerDocument && this.id) { + const parentLabels = this.proxy.labels; + const forLabels = Array.from(this.proxy.getRootNode().querySelectorAll(`[for='${this.id}']`)); + const labels = parentLabels ? forLabels.concat(Array.from(parentLabels)) : forLabels; + return Object.freeze(labels); + } else { + return emptyArray; + } + } + /** + * Invoked when the `value` property changes + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `valueChanged` method + * They must be sure to invoke `super.valueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + valueChanged(previous, next) { + this.dirtyValue = true; + if (this.proxy instanceof HTMLElement) { + this.proxy.value = this.value; + } + this.currentValue = this.value; + this.setFormValue(this.value); + this.validate(); + } + currentValueChanged() { + this.value = this.currentValue; + } + /** + * Invoked when the `initialValue` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `initialValueChanged` method + * They must be sure to invoke `super.initialValueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + /** + * Invoked when the `disabled` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `disabledChanged` method + * They must be sure to invoke `super.disabledChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + disabledChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.disabled = this.disabled; + } + DOM.queueUpdate(() => this.classList.toggle("disabled", this.disabled)); + } + /** + * Invoked when the `name` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `nameChanged` method + * They must be sure to invoke `super.nameChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + nameChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.name = this.name; + } + } + /** + * Invoked when the `required` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `requiredChanged` method + * They must be sure to invoke `super.requiredChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + requiredChanged(prev, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.required = this.required; + } + DOM.queueUpdate(() => this.classList.toggle("required", this.required)); + this.validate(); + } + /** + * The element internals object. Will only exist + * in browsers supporting the attachInternals API + */ + get elementInternals() { + if (!supportsElementInternals) { + return null; + } + let internals = InternalsMap.get(this); + if (!internals) { + internals = this.attachInternals(); + InternalsMap.set(this, internals); + } + return internals; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("keypress", this._keypressHandler); + if (!this.value) { + this.value = this.initialValue; + this.dirtyValue = false; + } + if (!this.elementInternals) { + this.attachProxy(); + if (this.form) { + this.form.addEventListener("reset", this.formResetCallback); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.proxyEventsToBlock.forEach((name) => this.proxy.removeEventListener(name, this.stopPropagation)); + if (!this.elementInternals && this.form) { + this.form.removeEventListener("reset", this.formResetCallback); + } + } + /** + * Return the current validity of the element. + */ + checkValidity() { + return this.elementInternals ? this.elementInternals.checkValidity() : this.proxy.checkValidity(); + } + /** + * Return the current validity of the element. + * If false, fires an invalid event at the element. + */ + reportValidity() { + return this.elementInternals ? this.elementInternals.reportValidity() : this.proxy.reportValidity(); + } + /** + * Set the validity of the control. In cases when the elementInternals object is not + * available (and the proxy element is used to report validity), this function will + * do nothing unless a message is provided, at which point the setCustomValidity method + * of the proxy element will be invoked with the provided message. + * @param flags - Validity flags + * @param message - Optional message to supply + * @param anchor - Optional element used by UA to display an interactive validation UI + */ + setValidity(flags, message, anchor) { + if (this.elementInternals) { + this.elementInternals.setValidity(flags, message, anchor); + } else if (typeof message === "string") { + this.proxy.setCustomValidity(message); + } + } + /** + * Invoked when a connected component's form or fieldset has its disabled + * state changed. + * @param disabled - the disabled value of the form / fieldset + */ + formDisabledCallback(disabled) { + this.disabled = disabled; + } + formResetCallback() { + this.value = this.initialValue; + this.dirtyValue = false; + } + /** + * Attach the proxy element to the DOM + */ + attachProxy() { + var _a; + if (!this.proxyInitialized) { + this.proxyInitialized = true; + this.proxy.style.display = "none"; + this.proxyEventsToBlock.forEach((name) => this.proxy.addEventListener(name, this.stopPropagation)); + this.proxy.disabled = this.disabled; + this.proxy.required = this.required; + if (typeof this.name === "string") { + this.proxy.name = this.name; + } + if (typeof this.value === "string") { + this.proxy.value = this.value; + } + this.proxy.setAttribute("slot", proxySlotName); + this.proxySlot = document.createElement("slot"); + this.proxySlot.setAttribute("name", proxySlotName); + } + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(this.proxySlot); + this.appendChild(this.proxy); + } + /** + * Detach the proxy element from the DOM + */ + detachProxy() { + var _a; + this.removeChild(this.proxy); + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.removeChild(this.proxySlot); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate(anchor) { + if (this.proxy instanceof HTMLElement) { + this.setValidity(this.proxy.validity, this.proxy.validationMessage, anchor); + } + } + /** + * Associates the provided value (and optional state) with the parent form. + * @param value - The value to set + * @param state - The state object provided to during session restores and when autofilling. + */ + setFormValue(value, state) { + if (this.elementInternals) { + this.elementInternals.setFormValue(value, state || value); + } + } + _keypressHandler(e) { + switch (e.key) { + case keyEnter: + if (this.form instanceof HTMLFormElement) { + const defaultButton = this.form.querySelector("[type=submit]"); + defaultButton === null || defaultButton === void 0 ? void 0 : defaultButton.click(); + } + break; + } + } + /** + * Used to stop propagation of proxy element events + * @param e - Event object + */ + stopPropagation(e) { + e.stopPropagation(); + } + }; + attr({ mode: "boolean" })(C.prototype, "disabled"); + attr({ mode: "fromView", attribute: "value" })(C.prototype, "initialValue"); + attr({ attribute: "current-value" })(C.prototype, "currentValue"); + attr(C.prototype, "name"); + attr({ mode: "boolean" })(C.prototype, "required"); + observable(C.prototype, "value"); + return C; + } + function CheckableFormAssociated(BaseCtor) { + class C extends FormAssociated(BaseCtor) { + } + class D extends C { + constructor(...args) { + super(args); + this.dirtyChecked = false; + this.checkedAttribute = false; + this.checked = false; + this.dirtyChecked = false; + } + checkedAttributeChanged() { + this.defaultChecked = this.checkedAttribute; + } + /** + * @internal + */ + defaultCheckedChanged() { + if (!this.dirtyChecked) { + this.checked = this.defaultChecked; + this.dirtyChecked = false; + } + } + checkedChanged(prev, next) { + if (!this.dirtyChecked) { + this.dirtyChecked = true; + } + this.currentChecked = this.checked; + this.updateForm(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.checked = this.checked; + } + if (prev !== void 0) { + this.$emit("change"); + } + this.validate(); + } + currentCheckedChanged(prev, next) { + this.checked = this.currentChecked; + } + updateForm() { + const value = this.checked ? this.value : null; + this.setFormValue(value, value); + } + connectedCallback() { + super.connectedCallback(); + this.updateForm(); + } + formResetCallback() { + super.formResetCallback(); + this.checked = !!this.checkedAttribute; + this.dirtyChecked = false; + } + } + attr({ attribute: "checked", mode: "boolean" })(D.prototype, "checkedAttribute"); + attr({ attribute: "current-checked", converter: booleanConverter })(D.prototype, "currentChecked"); + observable(D.prototype, "defaultChecked"); + observable(D.prototype, "checked"); + return D; + } + var proxySlotName, ElementInternalsKey, supportsElementInternals, InternalsMap; + var init_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js"() { + init_esm(); + init_dist2(); + proxySlotName = "form-associated-proxy"; + ElementInternalsKey = "ElementInternals"; + supportsElementInternals = ElementInternalsKey in window && "setFormValue" in window[ElementInternalsKey].prototype; + InternalsMap = /* @__PURE__ */ new WeakMap(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js + var _Button, FormAssociatedButton; + var init_button_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Button = class extends FoundationElement { + }; + FormAssociatedButton = class extends FormAssociated(_Button) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.js + var Button, DelegatesARIAButton; + var init_button = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_button_form_associated(); + Button = class extends FormAssociatedButton { + constructor() { + super(...arguments); + this.handleClick = (e) => { + var _a; + if (this.disabled && ((_a = this.defaultSlottedContent) === null || _a === void 0 ? void 0 : _a.length) <= 1) { + e.stopPropagation(); + } + }; + this.handleSubmission = () => { + if (!this.form) { + return; + } + const attached = this.proxy.isConnected; + if (!attached) { + this.attachProxy(); + } + typeof this.form.requestSubmit === "function" ? this.form.requestSubmit(this.proxy) : this.proxy.click(); + if (!attached) { + this.detachProxy(); + } + }; + this.handleFormReset = () => { + var _a; + (_a = this.form) === null || _a === void 0 ? void 0 : _a.reset(); + }; + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + this.control.focus(); + }; + } + }; + } + formactionChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formAction = this.formaction; + } + } + formenctypeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formEnctype = this.formenctype; + } + } + formmethodChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formMethod = this.formmethod; + } + } + formnovalidateChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formNoValidate = this.formnovalidate; + } + } + formtargetChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formTarget = this.formtarget; + } + } + typeChanged(previous, next) { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + } + next === "submit" && this.addEventListener("click", this.handleSubmission); + previous === "submit" && this.removeEventListener("click", this.handleSubmission); + next === "reset" && this.addEventListener("click", this.handleFormReset); + previous === "reset" && this.removeEventListener("click", this.handleFormReset); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.handleUnsupportedDelegatesFocus(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.addEventListener("click", this.handleClick); + }); + } + } + /** + * @internal + */ + disconnectedCallback() { + var _a; + super.disconnectedCallback(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.removeEventListener("click", this.handleClick); + }); + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], Button.prototype, "formId", void 0); + __decorate([ + attr + ], Button.prototype, "formaction", void 0); + __decorate([ + attr + ], Button.prototype, "formenctype", void 0); + __decorate([ + attr + ], Button.prototype, "formmethod", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "formnovalidate", void 0); + __decorate([ + attr + ], Button.prototype, "formtarget", void 0); + __decorate([ + attr + ], Button.prototype, "type", void 0); + __decorate([ + observable + ], Button.prototype, "defaultSlottedContent", void 0); + DelegatesARIAButton = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIAButton.prototype, "ariaExpanded", void 0); + __decorate([ + attr({ attribute: "aria-pressed" }) + ], DelegatesARIAButton.prototype, "ariaPressed", void 0); + applyMixins(DelegatesARIAButton, ARIAGlobalStatesAndProperties); + applyMixins(Button, StartEnd, DelegatesARIAButton); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/index.js + var init_button2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/index.js"() { + init_button_template(); + init_button(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js + var DateFormatter; + var init_date_formatter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js"() { + DateFormatter = class { + constructor(config) { + this.dayFormat = "numeric"; + this.weekdayFormat = "long"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.date = /* @__PURE__ */ new Date(); + if (config) { + for (const key in config) { + const value = config[key]; + if (key === "date") { + this.date = this.getDateObject(value); + } else { + this[key] = value; + } + } + } + } + /** + * Helper function to make sure that the DateFormatter is working with an instance of Date + * @param date - The date as an object, string or Date insance + * @returns - A Date instance + * @public + */ + getDateObject(date) { + if (typeof date === "string") { + const dates = date.split(/[/-]/); + if (dates.length < 3) { + return /* @__PURE__ */ new Date(); + } + return new Date(parseInt(dates[2], 10), parseInt(dates[0], 10) - 1, parseInt(dates[1], 10)); + } else if ("day" in date && "month" in date && "year" in date) { + const { day, month, year } = date; + return new Date(year, month - 1, day); + } + return date; + } + /** + * + * @param date - a valide date as either a Date, string, objec or a DateFormatter + * @param format - The formatting for the string + * @param locale - locale data used for formatting + * @returns A localized string of the date provided + * @public + */ + getDate(date = this.date, format = { + weekday: this.weekdayFormat, + month: this.monthFormat, + day: this.dayFormat, + year: this.yearFormat + }, locale = this.locale) { + const dateObj = this.getDateObject(date); + if (!dateObj.getTime()) { + return ""; + } + const optionsWithTimeZone = Object.assign({ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }, format); + return new Intl.DateTimeFormat(locale, optionsWithTimeZone).format(dateObj); + } + /** + * + * @param day - Day to localize + * @param format - The formatting for the day + * @param locale - The locale data used for formatting + * @returns - A localized number for the day + * @public + */ + getDay(day = this.date.getDate(), format = this.dayFormat, locale = this.locale) { + return this.getDate({ month: 1, day, year: 2020 }, { day: format }, locale); + } + /** + * + * @param month - The month to localize + * @param format - The formatting for the month + * @param locale - The locale data used for formatting + * @returns - A localized name of the month + * @public + */ + getMonth(month = this.date.getMonth() + 1, format = this.monthFormat, locale = this.locale) { + return this.getDate({ month, day: 2, year: 2020 }, { month: format }, locale); + } + /** + * + * @param year - The year to localize + * @param format - The formatting for the year + * @param locale - The locale data used for formatting + * @returns - A localized string for the year + * @public + */ + getYear(year = this.date.getFullYear(), format = this.yearFormat, locale = this.locale) { + return this.getDate({ month: 2, day: 2, year }, { year: format }, locale); + } + /** + * + * @param weekday - The number of the weekday, defaults to Sunday + * @param format - The formatting for the weekday label + * @param locale - The locale data used for formatting + * @returns - A formatted weekday label + * @public + */ + getWeekday(weekday = 0, format = this.weekdayFormat, locale = this.locale) { + const date = `1-${weekday + 1}-2017`; + return this.getDate(date, { weekday: format }, locale); + } + /** + * + * @param format - The formatting for the weekdays + * @param locale - The locale data used for formatting + * @returns - An array of the weekday labels + * @public + */ + getWeekdays(format = this.weekdayFormat, locale = this.locale) { + return Array(7).fill(null).map((_, day) => this.getWeekday(day, format, locale)); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js + var Calendar; + var init_calendar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_date_formatter(); + Calendar = class extends FoundationElement { + constructor() { + super(...arguments); + this.dateFormatter = new DateFormatter(); + this.readonly = false; + this.locale = "en-US"; + this.month = (/* @__PURE__ */ new Date()).getMonth() + 1; + this.year = (/* @__PURE__ */ new Date()).getFullYear(); + this.dayFormat = "numeric"; + this.weekdayFormat = "short"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.minWeeks = 0; + this.disabledDates = ""; + this.selectedDates = ""; + this.oneDayInMs = 864e5; + } + localeChanged() { + this.dateFormatter.locale = this.locale; + } + dayFormatChanged() { + this.dateFormatter.dayFormat = this.dayFormat; + } + weekdayFormatChanged() { + this.dateFormatter.weekdayFormat = this.weekdayFormat; + } + monthFormatChanged() { + this.dateFormatter.monthFormat = this.monthFormat; + } + yearFormatChanged() { + this.dateFormatter.yearFormat = this.yearFormat; + } + /** + * Gets data needed to render about a calendar month as well as the previous and next months + * @param year - year of the calendar + * @param month - month of the calendar + * @returns - an object with data about the current and 2 surrounding months + * @public + */ + getMonthInfo(month = this.month, year = this.year) { + const getFirstDay = (date) => new Date(date.getFullYear(), date.getMonth(), 1).getDay(); + const getLength = (date) => { + const nextMonth2 = new Date(date.getFullYear(), date.getMonth() + 1, 1); + return new Date(nextMonth2.getTime() - this.oneDayInMs).getDate(); + }; + const thisMonth = new Date(year, month - 1); + const nextMonth = new Date(year, month); + const previousMonth = new Date(year, month - 2); + return { + length: getLength(thisMonth), + month, + start: getFirstDay(thisMonth), + year, + previous: { + length: getLength(previousMonth), + month: previousMonth.getMonth() + 1, + start: getFirstDay(previousMonth), + year: previousMonth.getFullYear() + }, + next: { + length: getLength(nextMonth), + month: nextMonth.getMonth() + 1, + start: getFirstDay(nextMonth), + year: nextMonth.getFullYear() + } + }; + } + /** + * A list of calendar days + * @param info - an object containing the information needed to render a calendar month + * @param minWeeks - minimum number of weeks to show + * @returns a list of days in a calendar month + * @public + */ + getDays(info = this.getMonthInfo(), minWeeks = this.minWeeks) { + minWeeks = minWeeks > 10 ? 10 : minWeeks; + const { start, length, previous, next } = info; + const days = []; + let dayCount = 1 - start; + while (dayCount < length + 1 || days.length < minWeeks || days[days.length - 1].length % 7 !== 0) { + const { month, year } = dayCount < 1 ? previous : dayCount > length ? next : info; + const day = dayCount < 1 ? previous.length + dayCount : dayCount > length ? dayCount - length : dayCount; + const dateString = `${month}-${day}-${year}`; + const disabled = this.dateInString(dateString, this.disabledDates); + const selected = this.dateInString(dateString, this.selectedDates); + const date = { + day, + month, + year, + disabled, + selected + }; + const target = days[days.length - 1]; + if (days.length === 0 || target.length % 7 === 0) { + days.push([date]); + } else { + target.push(date); + } + dayCount++; + } + return days; + } + /** + * A helper function that checks if a date exists in a list of dates + * @param date - A date objec that includes the day, month and year + * @param datesString - a comma separated list of dates + * @returns - Returns true if it found the date in the list of dates + * @public + */ + dateInString(date, datesString) { + const dates = datesString.split(",").map((str) => str.trim()); + date = typeof date === "string" ? date : `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`; + return dates.some((d) => d === date); + } + /** + * Creates a class string for the day container + * @param date - date of the calendar cell + * @returns - string of class names + * @public + */ + getDayClassNames(date, todayString) { + const { day, month, year, disabled, selected } = date; + const today = todayString === `${month}-${day}-${year}`; + const inactive = this.month !== month; + return [ + "day", + today && "today", + inactive && "inactive", + disabled && "disabled", + selected && "selected" + ].filter(Boolean).join(" "); + } + /** + * Returns a list of weekday labels + * @returns An array of weekday text and full text if abbreviated + * @public + */ + getWeekdayText() { + const weekdayText = this.dateFormatter.getWeekdays().map((text) => ({ text })); + if (this.weekdayFormat !== "long") { + const longText = this.dateFormatter.getWeekdays("long"); + weekdayText.forEach((weekday, index) => { + weekday.abbr = longText[index]; + }); + } + return weekdayText; + } + /** + * Emits the "date-select" event with the day, month and year. + * @param date - Date cell + * @public + */ + handleDateSelect(event, day) { + event.preventDefault; + this.$emit("dateselected", day); + } + /** + * Handles keyboard events on a cell + * @param event - Keyboard event + * @param date - Date of the cell selected + */ + handleKeydown(event, date) { + if (event.key === keyEnter) { + this.handleDateSelect(event, date); + } + return true; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Calendar.prototype, "readonly", void 0); + __decorate([ + attr + ], Calendar.prototype, "locale", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "month", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "year", void 0); + __decorate([ + attr({ attribute: "day-format", mode: "fromView" }) + ], Calendar.prototype, "dayFormat", void 0); + __decorate([ + attr({ attribute: "weekday-format", mode: "fromView" }) + ], Calendar.prototype, "weekdayFormat", void 0); + __decorate([ + attr({ attribute: "month-format", mode: "fromView" }) + ], Calendar.prototype, "monthFormat", void 0); + __decorate([ + attr({ attribute: "year-format", mode: "fromView" }) + ], Calendar.prototype, "yearFormat", void 0); + __decorate([ + attr({ attribute: "min-weeks", converter: nullableNumberConverter }) + ], Calendar.prototype, "minWeeks", void 0); + __decorate([ + attr({ attribute: "disabled-dates" }) + ], Calendar.prototype, "disabledDates", void 0); + __decorate([ + attr({ attribute: "selected-dates" }) + ], Calendar.prototype, "selectedDates", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js + var GenerateHeaderOptions, DataGridCellTypes, DataGridRowTypes; + var init_data_grid_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js"() { + GenerateHeaderOptions = { + none: "none", + default: "default", + sticky: "sticky" + }; + DataGridCellTypes = { + default: "default", + columnHeader: "columnheader", + rowHeader: "rowheader" + }; + DataGridRowTypes = { + default: "default", + header: "header", + stickyHeader: "sticky-header" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js + var DataGridRow; + var init_data_grid_row = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGridRow = class extends FoundationElement { + constructor() { + super(...arguments); + this.rowType = DataGridRowTypes.default; + this.rowData = null; + this.columnDefinitions = null; + this.isActiveRow = false; + this.cellsRepeatBehavior = null; + this.cellsPlaceholder = null; + this.focusColumnIndex = 0; + this.refocusOnLoad = false; + this.updateRowStyle = () => { + this.style.gridTemplateColumns = this.gridTemplateColumns; + }; + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowStyle(); + } + } + rowTypeChanged() { + if (this.$fastController.isConnected) { + this.updateItemTemplate(); + } + } + rowDataChanged() { + if (this.rowData !== null && this.isActiveRow) { + this.refocusOnLoad = true; + return; + } + } + cellItemTemplateChanged() { + this.updateItemTemplate(); + } + headerCellItemTemplateChanged() { + this.updateItemTemplate(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.cellsRepeatBehavior === null) { + this.cellsPlaceholder = document.createComment(""); + this.appendChild(this.cellsPlaceholder); + this.updateItemTemplate(); + this.cellsRepeatBehavior = new RepeatDirective((x) => x.columnDefinitions, (x) => x.activeCellItemTemplate, { positioning: true }).createBehavior(this.cellsPlaceholder); + this.$fastController.addBehaviors([this.cellsRepeatBehavior]); + } + this.addEventListener("cell-focused", this.handleCellFocus); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.updateRowStyle(); + if (this.refocusOnLoad) { + this.refocusOnLoad = false; + if (this.cellElements.length > this.focusColumnIndex) { + this.cellElements[this.focusColumnIndex].focus(); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("cell-focused", this.handleCellFocus); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + } + handleFocusout(e) { + if (!this.contains(e.target)) { + this.isActiveRow = false; + this.focusColumnIndex = 0; + } + } + handleCellFocus(e) { + this.isActiveRow = true; + this.focusColumnIndex = this.cellElements.indexOf(e.target); + this.$emit("row-focused", this); + } + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusColumnIndex = 0; + switch (e.key) { + case keyArrowLeft: + newFocusColumnIndex = Math.max(0, this.focusColumnIndex - 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyArrowRight: + newFocusColumnIndex = Math.min(this.cellElements.length - 1, this.focusColumnIndex + 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyHome: + if (!e.ctrlKey) { + this.cellElements[0].focus(); + e.preventDefault(); + } + break; + case keyEnd: + if (!e.ctrlKey) { + this.cellElements[this.cellElements.length - 1].focus(); + e.preventDefault(); + } + break; + } + } + updateItemTemplate() { + this.activeCellItemTemplate = this.rowType === DataGridRowTypes.default && this.cellItemTemplate !== void 0 ? this.cellItemTemplate : this.rowType === DataGridRowTypes.default && this.cellItemTemplate === void 0 ? this.defaultCellItemTemplate : this.headerCellItemTemplate !== void 0 ? this.headerCellItemTemplate : this.defaultHeaderCellItemTemplate; + } + }; + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGridRow.prototype, "gridTemplateColumns", void 0); + __decorate([ + attr({ attribute: "row-type" }) + ], DataGridRow.prototype, "rowType", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowIndex", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "isActiveRow", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "activeCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultHeaderCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js + function createRowItemTemplate(context) { + const rowTag = context.tagFor(DataGridRow); + return html` + <${rowTag} + :rowData="${(x) => x}" + :cellItemTemplate="${(x, c) => c.parent.cellItemTemplate}" + :headerCellItemTemplate="${(x, c) => c.parent.headerCellItemTemplate}" + > +`; + } + var dataGridTemplate; + var init_data_grid_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js"() { + init_esm(); + init_data_grid_row(); + dataGridTemplate = (context, definition) => { + const rowItemTemplate = createRowItemTemplate(context); + const rowTag = context.tagFor(DataGridRow); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js + var DataGrid; + var init_data_grid = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGrid = class _DataGrid extends FoundationElement { + constructor() { + super(); + this.noTabbing = false; + this.generateHeader = GenerateHeaderOptions.default; + this.rowsData = []; + this.columnDefinitions = null; + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + this.rowsPlaceholder = null; + this.generatedHeader = null; + this.isUpdatingFocus = false; + this.pendingFocusUpdate = false; + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = true; + this.generatedGridTemplateColumns = ""; + this.focusOnCell = (rowIndex, columnIndex, scrollIntoView) => { + if (this.rowElements.length === 0) { + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + return; + } + const focusRowIndex = Math.max(0, Math.min(this.rowElements.length - 1, rowIndex)); + const focusRow = this.rowElements[focusRowIndex]; + const cells = focusRow.querySelectorAll('[role="cell"], [role="gridcell"], [role="columnheader"], [role="rowheader"]'); + const focusColumnIndex = Math.max(0, Math.min(cells.length - 1, columnIndex)); + const focusTarget = cells[focusColumnIndex]; + if (scrollIntoView && this.scrollHeight !== this.clientHeight && (focusRowIndex < this.focusRowIndex && this.scrollTop > 0 || focusRowIndex > this.focusRowIndex && this.scrollTop < this.scrollHeight - this.clientHeight)) { + focusTarget.scrollIntoView({ block: "center", inline: "center" }); + } + focusTarget.focus(); + }; + this.onChildListChange = (mutations, observer) => { + if (mutations && mutations.length) { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((newNode) => { + if (newNode.nodeType === 1 && newNode.getAttribute("role") === "row") { + newNode.columnDefinitions = this.columnDefinitions; + } + }); + }); + this.queueRowIndexUpdate(); + } + }; + this.queueRowIndexUpdate = () => { + if (!this.rowindexUpdateQueued) { + this.rowindexUpdateQueued = true; + DOM.queueUpdate(this.updateRowIndexes); + } + }; + this.updateRowIndexes = () => { + let newGridTemplateColumns = this.gridTemplateColumns; + if (newGridTemplateColumns === void 0) { + if (this.generatedGridTemplateColumns === "" && this.rowElements.length > 0) { + const firstRow = this.rowElements[0]; + this.generatedGridTemplateColumns = new Array(firstRow.cellElements.length).fill("1fr").join(" "); + } + newGridTemplateColumns = this.generatedGridTemplateColumns; + } + this.rowElements.forEach((element, index) => { + const thisRow = element; + thisRow.rowIndex = index; + thisRow.gridTemplateColumns = newGridTemplateColumns; + if (this.columnDefinitionsStale) { + thisRow.columnDefinitions = this.columnDefinitions; + } + }); + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = false; + }; + } + /** + * generates a gridTemplateColumns based on columndata array + */ + static generateTemplateColumns(columnDefinitions) { + let templateColumns = ""; + columnDefinitions.forEach((column) => { + templateColumns = `${templateColumns}${templateColumns === "" ? "" : " "}${"1fr"}`; + }); + return templateColumns; + } + noTabbingChanged() { + if (this.$fastController.isConnected) { + if (this.noTabbing) { + this.setAttribute("tabIndex", "-1"); + } else { + this.setAttribute("tabIndex", this.contains(document.activeElement) || this === document.activeElement ? "-1" : "0"); + } + } + } + generateHeaderChanged() { + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowIndexes(); + } + } + rowsDataChanged() { + if (this.columnDefinitions === null && this.rowsData.length > 0) { + this.columnDefinitions = _DataGrid.generateColumns(this.rowsData[0]); + } + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + columnDefinitionsChanged() { + if (this.columnDefinitions === null) { + this.generatedGridTemplateColumns = ""; + return; + } + this.generatedGridTemplateColumns = _DataGrid.generateTemplateColumns(this.columnDefinitions); + if (this.$fastController.isConnected) { + this.columnDefinitionsStale = true; + this.queueRowIndexUpdate(); + } + } + headerCellItemTemplateChanged() { + if (this.$fastController.isConnected) { + if (this.generatedHeader !== null) { + this.generatedHeader.headerCellItemTemplate = this.headerCellItemTemplate; + } + } + } + focusRowIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + focusColumnIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.rowItemTemplate === void 0) { + this.rowItemTemplate = this.defaultRowItemTemplate; + } + this.rowsPlaceholder = document.createComment(""); + this.appendChild(this.rowsPlaceholder); + this.toggleGeneratedHeader(); + this.rowsRepeatBehavior = new RepeatDirective((x) => x.rowsData, (x) => x.rowItemTemplate, { positioning: true }).createBehavior(this.rowsPlaceholder); + this.$fastController.addBehaviors([this.rowsRepeatBehavior]); + this.addEventListener("row-focused", this.handleRowFocus); + this.addEventListener(eventFocus, this.handleFocus); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.addEventListener(eventFocusOut, this.handleFocusOut); + this.observer = new MutationObserver(this.onChildListChange); + this.observer.observe(this, { childList: true }); + if (this.noTabbing) { + this.setAttribute("tabindex", "-1"); + } + DOM.queueUpdate(this.queueRowIndexUpdate); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("row-focused", this.handleRowFocus); + this.removeEventListener(eventFocus, this.handleFocus); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.removeEventListener(eventFocusOut, this.handleFocusOut); + this.observer.disconnect(); + this.rowsPlaceholder = null; + this.generatedHeader = null; + } + /** + * @internal + */ + handleRowFocus(e) { + this.isUpdatingFocus = true; + const focusRow = e.target; + this.focusRowIndex = this.rowElements.indexOf(focusRow); + this.focusColumnIndex = focusRow.focusColumnIndex; + this.setAttribute("tabIndex", "-1"); + this.isUpdatingFocus = false; + } + /** + * @internal + */ + handleFocus(e) { + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + /** + * @internal + */ + handleFocusOut(e) { + if (e.relatedTarget === null || !this.contains(e.relatedTarget)) { + this.setAttribute("tabIndex", this.noTabbing ? "-1" : "0"); + } + } + /** + * @internal + */ + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusRowIndex; + const maxIndex = this.rowElements.length - 1; + const currentGridBottom = this.offsetHeight + this.scrollTop; + const lastRow = this.rowElements[maxIndex]; + switch (e.key) { + case keyArrowUp: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex - 1, this.focusColumnIndex, true); + break; + case keyArrowDown: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex + 1, this.focusColumnIndex, true); + break; + case keyPageUp: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex === 0) { + this.focusOnCell(0, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex - 1; + for (newFocusRowIndex; newFocusRowIndex >= 0; newFocusRowIndex--) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop < this.scrollTop) { + this.scrollTop = thisRow.offsetTop + thisRow.clientHeight - this.clientHeight; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyPageDown: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex >= maxIndex || lastRow.offsetTop + lastRow.offsetHeight <= currentGridBottom) { + this.focusOnCell(maxIndex, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex + 1; + for (newFocusRowIndex; newFocusRowIndex <= maxIndex; newFocusRowIndex++) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop + thisRow.offsetHeight > currentGridBottom) { + let stickyHeaderOffset = 0; + if (this.generateHeader === GenerateHeaderOptions.sticky && this.generatedHeader !== null) { + stickyHeaderOffset = this.generatedHeader.clientHeight; + } + this.scrollTop = thisRow.offsetTop - stickyHeaderOffset; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyHome: + if (e.ctrlKey) { + e.preventDefault(); + this.focusOnCell(0, 0, true); + } + break; + case keyEnd: + if (e.ctrlKey && this.columnDefinitions !== null) { + e.preventDefault(); + this.focusOnCell(this.rowElements.length - 1, this.columnDefinitions.length - 1, true); + } + break; + } + } + queueFocusUpdate() { + if (this.isUpdatingFocus && (this.contains(document.activeElement) || this === document.activeElement)) { + return; + } + if (this.pendingFocusUpdate === false) { + this.pendingFocusUpdate = true; + DOM.queueUpdate(() => this.updateFocus()); + } + } + updateFocus() { + this.pendingFocusUpdate = false; + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + toggleGeneratedHeader() { + if (this.generatedHeader !== null) { + this.removeChild(this.generatedHeader); + this.generatedHeader = null; + } + if (this.generateHeader !== GenerateHeaderOptions.none && this.rowsData.length > 0) { + const generatedHeaderElement = document.createElement(this.rowElementTag); + this.generatedHeader = generatedHeaderElement; + this.generatedHeader.columnDefinitions = this.columnDefinitions; + this.generatedHeader.gridTemplateColumns = this.gridTemplateColumns; + this.generatedHeader.rowType = this.generateHeader === GenerateHeaderOptions.sticky ? DataGridRowTypes.stickyHeader : DataGridRowTypes.header; + if (this.firstChild !== null || this.rowsPlaceholder !== null) { + this.insertBefore(generatedHeaderElement, this.firstChild !== null ? this.firstChild : this.rowsPlaceholder); + } + return; + } + } + }; + DataGrid.generateColumns = (row) => { + return Object.getOwnPropertyNames(row).map((property, index) => { + return { + columnDataKey: property, + gridColumn: `${index}` + }; + }); + }; + __decorate([ + attr({ attribute: "no-tabbing", mode: "boolean" }) + ], DataGrid.prototype, "noTabbing", void 0); + __decorate([ + attr({ attribute: "generate-header" }) + ], DataGrid.prototype, "generateHeader", void 0); + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGrid.prototype, "gridTemplateColumns", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowsData", void 0); + __decorate([ + observable + ], DataGrid.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusRowIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusColumnIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "defaultRowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElementTag", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js + var defaultCellContentsTemplate, defaultHeaderCellContentsTemplate, DataGridCell; + var init_data_grid_cell = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + defaultCellContentsTemplate = html` + +`; + defaultHeaderCellContentsTemplate = html` + +`; + DataGridCell = class extends FoundationElement { + constructor() { + super(...arguments); + this.cellType = DataGridCellTypes.default; + this.rowData = null; + this.columnDefinition = null; + this.isActiveCell = false; + this.customCellView = null; + this.updateCellStyle = () => { + this.style.gridColumn = this.gridColumn; + }; + } + cellTypeChanged() { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + gridColumnChanged() { + if (this.$fastController.isConnected) { + this.updateCellStyle(); + } + } + columnDefinitionChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.addEventListener(eventFocusIn, this.handleFocusin); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.style.gridColumn = `${((_a = this.columnDefinition) === null || _a === void 0 ? void 0 : _a.gridColumn) === void 0 ? 0 : this.columnDefinition.gridColumn}`; + this.updateCellView(); + this.updateCellStyle(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener(eventFocusIn, this.handleFocusin); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.disconnectCellView(); + } + handleFocusin(e) { + if (this.isActiveCell) { + return; + } + this.isActiveCell = true; + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition !== null && this.columnDefinition.headerCellInternalFocusQueue !== true && typeof this.columnDefinition.headerCellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + default: + if (this.columnDefinition !== null && this.columnDefinition.cellInternalFocusQueue !== true && typeof this.columnDefinition.cellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + } + this.$emit("cell-focused", this); + } + handleFocusout(e) { + if (this !== document.activeElement && !this.contains(document.activeElement)) { + this.isActiveCell = false; + } + } + handleKeydown(e) { + if (e.defaultPrevented || this.columnDefinition === null || this.cellType === DataGridCellTypes.default && this.columnDefinition.cellInternalFocusQueue !== true || this.cellType === DataGridCellTypes.columnHeader && this.columnDefinition.headerCellInternalFocusQueue !== true) { + return; + } + switch (e.key) { + case keyEnter: + case keyFunction2: + if (this.contains(document.activeElement) && document.activeElement !== this) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + default: + if (this.columnDefinition.cellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + } + break; + case keyEscape: + if (this.contains(document.activeElement) && document.activeElement !== this) { + this.focus(); + e.preventDefault(); + } + break; + } + } + updateCellView() { + this.disconnectCellView(); + if (this.columnDefinition === null) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellTemplate !== void 0) { + this.customCellView = this.columnDefinition.headerCellTemplate.render(this, this); + } else { + this.customCellView = defaultHeaderCellContentsTemplate.render(this, this); + } + break; + case void 0: + case DataGridCellTypes.rowHeader: + case DataGridCellTypes.default: + if (this.columnDefinition.cellTemplate !== void 0) { + this.customCellView = this.columnDefinition.cellTemplate.render(this, this); + } else { + this.customCellView = defaultCellContentsTemplate.render(this, this); + } + break; + } + } + disconnectCellView() { + if (this.customCellView !== null) { + this.customCellView.dispose(); + this.customCellView = null; + } + } + }; + __decorate([ + attr({ attribute: "cell-type" }) + ], DataGridCell.prototype, "cellType", void 0); + __decorate([ + attr({ attribute: "grid-column" }) + ], DataGridCell.prototype, "gridColumn", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "columnDefinition", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js + function createCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="${(x) => x.isRowHeader ? "rowheader" : void 0}" + grid-column="${(x, c) => c.index + 1}" + :rowData="${(x, c) => c.parent.rowData}" + :columnDefinition="${(x) => x}" + > +`; + } + function createHeaderCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="columnheader" + grid-column="${(x, c) => c.index + 1}" + :columnDefinition="${(x) => x}" + > +`; + } + var dataGridRowTemplate; + var init_data_grid_row_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js"() { + init_esm(); + init_data_grid_cell(); + dataGridRowTemplate = (context, definition) => { + const cellItemTemplate = createCellItemTemplate(context); + const headerCellItemTemplate = createHeaderCellItemTemplate(context); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js + var dataGridCellTemplate; + var init_data_grid_cell_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js"() { + init_esm(); + dataGridCellTemplate = (context, definition) => { + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js + var init_data_grid2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js"() { + init_data_grid_template(); + init_data_grid(); + init_data_grid_row_template(); + init_data_grid_row(); + init_data_grid_cell_template(); + init_data_grid_cell(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js + var CalendarTitleTemplate; + var init_calendar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js"() { + init_esm(); + CalendarTitleTemplate = html` +
+ + ${(x) => x.dateFormatter.getMonth(x.month)} + + ${(x) => x.dateFormatter.getYear(x.year)} +
+`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js + var init_calendar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js"() { + init_calendar(); + init_calendar_template(); + init_date_formatter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js + var init_card_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.js + var init_card = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/index.js + var init_card2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/index.js"() { + init_card_template(); + init_card(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js + var checkboxTemplate; + var init_checkbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js"() { + init_esm(); + checkboxTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js + var _Checkbox, FormAssociatedCheckbox; + var init_checkbox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Checkbox = class extends FoundationElement { + }; + FormAssociatedCheckbox = class extends CheckableFormAssociated(_Checkbox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js + var Checkbox; + var init_checkbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_checkbox_form_associated(); + Checkbox = class extends FormAssociatedCheckbox { + constructor() { + super(); + this.initialValue = "on"; + this.indeterminate = false; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keySpace: + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Checkbox.prototype, "readOnly", void 0); + __decorate([ + observable + ], Checkbox.prototype, "defaultSlottedNodes", void 0); + __decorate([ + observable + ], Checkbox.prototype, "indeterminate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js + var init_checkbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js"() { + init_checkbox_template(); + init_checkbox(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js + function isListboxOption(el) { + return isHTMLElement(el) && (el.getAttribute("role") === "option" || el instanceof HTMLOptionElement); + } + var ListboxOption, DelegatesARIAListboxOption; + var init_listbox_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + ListboxOption = class extends FoundationElement { + constructor(text, value, defaultSelected, selected) { + super(); + this.defaultSelected = false; + this.dirtySelected = false; + this.selected = this.defaultSelected; + this.dirtyValue = false; + if (text) { + this.textContent = text; + } + if (value) { + this.initialValue = value; + } + if (defaultSelected) { + this.defaultSelected = defaultSelected; + } + if (selected) { + this.selected = selected; + } + this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected); + this.proxy.disabled = this.disabled; + } + /** + * Updates the ariaChecked property when the checked property changes. + * + * @param prev - the previous checked value + * @param next - the current checked value + * + * @public + */ + checkedChanged(prev, next) { + if (typeof next === "boolean") { + this.ariaChecked = next ? "true" : "false"; + return; + } + this.ariaChecked = null; + } + /** + * Updates the proxy's text content when the default slot changes. + * @param prev - the previous content value + * @param next - the current content value + * + * @internal + */ + contentChanged(prev, next) { + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.textContent = this.textContent; + } + this.$emit("contentchange", null, { bubbles: true }); + } + defaultSelectedChanged() { + if (!this.dirtySelected) { + this.selected = this.defaultSelected; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.defaultSelected; + } + } + } + disabledChanged(prev, next) { + this.ariaDisabled = this.disabled ? "true" : "false"; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.disabled = this.disabled; + } + } + selectedAttributeChanged() { + this.defaultSelected = this.selectedAttribute; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.defaultSelected = this.defaultSelected; + } + } + selectedChanged() { + this.ariaSelected = this.selected ? "true" : "false"; + if (!this.dirtySelected) { + this.dirtySelected = true; + } + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.selected; + } + } + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + get label() { + var _a; + return (_a = this.value) !== null && _a !== void 0 ? _a : this.text; + } + get text() { + var _a, _b; + return (_b = (_a = this.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, " ").trim()) !== null && _b !== void 0 ? _b : ""; + } + set value(next) { + const newValue = `${next !== null && next !== void 0 ? next : ""}`; + this._value = newValue; + this.dirtyValue = true; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.value = newValue; + } + Observable.notify(this, "value"); + } + get value() { + var _a; + Observable.track(this, "value"); + return (_a = this._value) !== null && _a !== void 0 ? _a : this.text; + } + get form() { + return this.proxy ? this.proxy.form : null; + } + }; + __decorate([ + observable + ], ListboxOption.prototype, "checked", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "content", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "defaultSelected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxOption.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "selected", mode: "boolean" }) + ], ListboxOption.prototype, "selectedAttribute", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "selected", void 0); + __decorate([ + attr({ attribute: "value", mode: "fromView" }) + ], ListboxOption.prototype, "initialValue", void 0); + DelegatesARIAListboxOption = class { + }; + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0); + applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties); + applyMixins(ListboxOption, StartEnd, DelegatesARIAListboxOption); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js + var Listbox, DelegatesARIAListbox; + var init_listbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_listbox_option(); + init_aria_global(); + init_apply_mixins(); + Listbox = class _Listbox extends FoundationElement { + constructor() { + super(...arguments); + this._options = []; + this.selectedIndex = -1; + this.selectedOptions = []; + this.shouldSkipFocus = false; + this.typeaheadBuffer = ""; + this.typeaheadExpired = true; + this.typeaheadTimeout = -1; + } + /** + * The first selected option. + * + * @internal + */ + get firstSelectedOption() { + var _a; + return (_a = this.selectedOptions[0]) !== null && _a !== void 0 ? _a : null; + } + /** + * Returns true if there is one or more selectable option. + * + * @internal + */ + get hasSelectableOptions() { + return this.options.length > 0 && !this.options.every((o) => o.disabled); + } + /** + * The number of options. + * + * @public + */ + get length() { + var _a, _b; + return (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; + } + /** + * The list of options. + * + * @public + */ + get options() { + Observable.track(this, "options"); + return this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Flag for the typeahead timeout expiration. + * + * @deprecated use `Listbox.typeaheadExpired` + * @internal + */ + get typeAheadExpired() { + return this.typeaheadExpired; + } + set typeAheadExpired(value) { + this.typeaheadExpired = value; + } + /** + * Handle click events for listbox options. + * + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && !captured.disabled) { + this.selectedIndex = this.options.indexOf(captured); + return true; + } + } + /** + * Ensures that the provided option is focused and scrolled into view. + * + * @param optionToFocus - The option to focus + * @internal + */ + focusAndScrollOptionIntoView(optionToFocus = this.firstSelectedOption) { + if (this.contains(document.activeElement) && optionToFocus !== null) { + optionToFocus.focus(); + requestAnimationFrame(() => { + optionToFocus.scrollIntoView({ block: "nearest" }); + }); + } + } + /** + * Handles `focusin` actions for the component. When the component receives focus, + * the list of selected options is refreshed and the first selected option is scrolled + * into view. + * + * @internal + */ + focusinHandler(e) { + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Returns the options which match the current typeahead buffer. + * + * @internal + */ + getTypeaheadMatches() { + const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); + const re = new RegExp(`^${pattern}`, "gi"); + return this.options.filter((o) => o.text.trim().match(re)); + } + /** + * Determines the index of the next option which is selectable, if any. + * + * @param prev - the previous selected index + * @param next - the next index to select + * + * @internal + */ + getSelectableIndex(prev = this.selectedIndex, next) { + const direction = prev > next ? -1 : prev < next ? 1 : 0; + const potentialDirection = prev + direction; + let nextSelectableOption = null; + switch (direction) { + case -1: { + nextSelectableOption = this.options.reduceRight((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index < potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + case 1: { + nextSelectableOption = this.options.reduce((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index > potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + } + return this.options.indexOf(nextSelectableOption); + } + /** + * Handles external changes to child options. + * + * @param source - the source object + * @param propertyName - the property + * + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "selected": { + if (_Listbox.slottedOptionFilter(source)) { + this.selectedIndex = this.options.indexOf(source); + } + this.setSelectedOptions(); + break; + } + } + } + /** + * Moves focus to an option whose label matches characters typed by the user. + * Consecutive keystrokes are batched into a buffer of search text used + * to match against the set of options. If `TYPE_AHEAD_TIMEOUT_MS` passes + * between consecutive keystrokes, the search restarts. + * + * @param key - the key to be evaluated + * + * @internal + */ + handleTypeAhead(key) { + if (this.typeaheadTimeout) { + window.clearTimeout(this.typeaheadTimeout); + } + this.typeaheadTimeout = window.setTimeout(() => this.typeaheadExpired = true, _Listbox.TYPE_AHEAD_TIMEOUT_MS); + if (key.length > 1) { + return; + } + this.typeaheadBuffer = `${this.typeaheadExpired ? "" : this.typeaheadBuffer}${key}`; + } + /** + * Handles `keydown` actions for listbox navigation and typeahead. + * + * @internal + */ + keydownHandler(e) { + if (this.disabled) { + return true; + } + this.shouldSkipFocus = false; + const key = e.key; + switch (key) { + // Select the first available option + case keyHome: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectFirstOption(); + } + break; + } + // Select the next selectable option + case keyArrowDown: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectNextOption(); + } + break; + } + // Select the previous selectable option + case keyArrowUp: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectPreviousOption(); + } + break; + } + // Select the last available option + case keyEnd: { + e.preventDefault(); + this.selectLastOption(); + break; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEnter: + case keyEscape: { + return true; + } + case keySpace: { + if (this.typeaheadExpired) { + return true; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @internal + */ + mousedownHandler(e) { + this.shouldSkipFocus = !this.contains(document.activeElement); + return true; + } + /** + * Switches between single-selection and multi-selection mode. + * + * @param prev - the previous value of the `multiple` attribute + * @param next - the next value of the `multiple` attribute + * + * @internal + */ + multipleChanged(prev, next) { + this.ariaMultiSelectable = next ? "true" : null; + } + /** + * Updates the list of selected options when the `selectedIndex` changes. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + var _a; + if (!this.hasSelectableOptions) { + this.selectedIndex = -1; + return; + } + if (((_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.disabled) && typeof prev === "number") { + const selectableIndex = this.getSelectableIndex(prev, next); + const newNext = selectableIndex > -1 ? selectableIndex : prev; + this.selectedIndex = newNext; + if (next === newNext) { + this.selectedIndexChanged(next, newNext); + } + return; + } + this.setSelectedOptions(); + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + const filteredNext = next.filter(_Listbox.slottedOptionFilter); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "selected"); + o.selected = filteredNext.includes(o); + notifier.subscribe(this, "selected"); + }); + } + /** + * Moves focus to the first selectable option. + * + * @public + */ + selectFirstOption() { + var _a, _b; + if (!this.disabled) { + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((o) => !o.disabled)) !== null && _b !== void 0 ? _b : -1; + } + } + /** + * Moves focus to the last selectable option. + * + * @internal + */ + selectLastOption() { + if (!this.disabled) { + this.selectedIndex = findLastIndex(this.options, (o) => !o.disabled); + } + } + /** + * Moves focus to the next selectable option. + * + * @internal + */ + selectNextOption() { + if (!this.disabled && this.selectedIndex < this.options.length - 1) { + this.selectedIndex += 1; + } + } + /** + * Moves focus to the previous selectable option. + * + * @internal + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex > 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Updates the selected index to match the first selected option. + * + * @internal + */ + setDefaultSelectedOption() { + var _a, _b; + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((el) => el.defaultSelected)) !== null && _b !== void 0 ? _b : -1; + } + /** + * Sets an option as selected and gives it focus. + * + * @public + */ + setSelectedOptions() { + var _a, _b, _c; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) { + this.selectedOptions = [this.options[this.selectedIndex]]; + this.ariaActiveDescendant = (_c = (_b = this.firstSelectedOption) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : ""; + this.focusAndScrollOptionIntoView(); + } + } + /** + * Updates the list of options and resets the selected option when the slotted option content changes. + * + * @param prev - the previous list of slotted options + * @param next - the current list of slotted options + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options = next.reduce((options, item) => { + if (isListboxOption(item)) { + options.push(item); + } + return options; + }, []); + const setSize = `${this.options.length}`; + this.options.forEach((option, index) => { + if (!option.id) { + option.id = uniqueId("option-"); + } + option.ariaPosInSet = `${index + 1}`; + option.ariaSetSize = setSize; + }); + if (this.$fastController.isConnected) { + this.setSelectedOptions(); + this.setDefaultSelectedOption(); + } + } + /** + * Updates the filtered list of options when the typeahead buffer changes. + * + * @param prev - the previous typeahead buffer value + * @param next - the current typeahead buffer value + * + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + if (typeaheadMatches.length) { + const selectedIndex = this.options.indexOf(typeaheadMatches[0]); + if (selectedIndex > -1) { + this.selectedIndex = selectedIndex; + } + } + this.typeaheadExpired = false; + } + } + }; + Listbox.slottedOptionFilter = (n) => isListboxOption(n) && !n.hidden; + Listbox.TYPE_AHEAD_TIMEOUT_MS = 1e3; + __decorate([ + attr({ mode: "boolean" }) + ], Listbox.prototype, "disabled", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedIndex", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "slottedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "typeaheadBuffer", void 0); + DelegatesARIAListbox = class { + }; + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaActiveDescendant", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaDisabled", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaExpanded", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaMultiSelectable", void 0); + applyMixins(DelegatesARIAListbox, ARIAGlobalStatesAndProperties); + applyMixins(Listbox, DelegatesARIAListbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js + var SelectPosition; + var init_select_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js"() { + SelectPosition = { + above: "above", + below: "below" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js + var _Combobox, FormAssociatedCombobox; + var init_combobox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js"() { + init_form_associated(); + init_listbox(); + _Combobox = class extends Listbox { + }; + FormAssociatedCombobox = class extends FormAssociated(_Combobox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js + var ComboboxAutocomplete; + var init_combobox_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js"() { + ComboboxAutocomplete = { + inline: "inline", + list: "list", + both: "both", + none: "none" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js + var Combobox, DelegatesARIACombobox; + var init_combobox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_select_options(); + init_apply_mixins(); + init_combobox_form_associated(); + init_combobox_options(); + Combobox = class extends FormAssociatedCombobox { + constructor() { + super(...arguments); + this._value = ""; + this.filteredOptions = []; + this.filter = ""; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + this.open = false; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + super.formResetCallback(); + this.setDefaultSelectedOption(); + this.updateValue(); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + get isAutocompleteInline() { + return this.autocomplete === ComboboxAutocomplete.inline || this.isAutocompleteBoth; + } + get isAutocompleteList() { + return this.autocomplete === ComboboxAutocomplete.list || this.isAutocompleteBoth; + } + get isAutocompleteBoth() { + return this.autocomplete === ComboboxAutocomplete.both; + } + /** + * Sets focus and synchronize ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged() { + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The list of options. + * + * @public + * @remarks + * Overrides `Listbox.options`. + */ + get options() { + Observable.track(this, "options"); + return this.filteredOptions.length ? this.filteredOptions : this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Updates the placeholder on the proxy element. + * @internal + */ + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c; + const prev = `${this._value}`; + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el) => el.text.toLowerCase() === next.toLowerCase()); + const prevSelectedValue = (_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.text; + const nextSelectedValue = (_b = this.options[selectedIndex]) === null || _b === void 0 ? void 0 : _b.text; + this.selectedIndex = prevSelectedValue !== nextSelectedValue ? selectedIndex : this.selectedIndex; + next = ((_c = this.firstSelectedOption) === null || _c === void 0 ? void 0 : _c.text) || next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + } + } + /** + * Handle opening and closing the listbox when the combobox is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (this.disabled || (captured === null || captured === void 0 ? void 0 : captured.disabled)) { + return; + } + if (this.open) { + if (e.composedPath()[0] === this.control) { + return; + } + if (captured) { + this.selectedOptions = [captured]; + this.control.value = captured.text; + this.clearSelectionRange(); + this.updateValue(true); + } + } + this.open = !this.open; + if (this.open) { + this.control.focus(); + } + return true; + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + if (this.value) { + this.initialValue = this.value; + } + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Filter available options by text value. + * + * @public + */ + filterOptions() { + if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) { + this.filter = ""; + } + const filter = this.filter.toLowerCase(); + this.filteredOptions = this._options.filter((o) => o.text.toLowerCase().startsWith(this.filter.toLowerCase())); + if (this.isAutocompleteList) { + if (!this.filteredOptions.length && !filter) { + this.filteredOptions = this._options; + } + this._options.forEach((o) => { + o.hidden = !this.filteredOptions.includes(o); + }); + } + } + /** + * Focus the control and scroll the first selected option into view. + * + * @internal + * @remarks + * Overrides: `Listbox.focusAndScrollOptionIntoView` + */ + focusAndScrollOptionIntoView() { + if (this.contains(document.activeElement)) { + this.control.focus(); + if (this.firstSelectedOption) { + requestAnimationFrame(() => { + var _a; + (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: "nearest" }); + }); + } + } + } + /** + * Handle focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + this.syncValue(); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!this.options || !this.options.includes(focusTarget)) { + this.open = false; + } + } + /** + * Handle content changes on the control input. + * + * @param e - the input event + * @internal + */ + inputHandler(e) { + this.filter = this.control.value; + this.filterOptions(); + if (!this.isAutocompleteInline) { + this.selectedIndex = this.options.map((option) => option.text).indexOf(this.control.value); + } + if (e.inputType.includes("deleteContent") || !this.filter.length) { + return true; + } + if (this.isAutocompleteList && !this.open) { + this.open = true; + } + if (this.isAutocompleteInline) { + if (this.filteredOptions.length) { + this.selectedOptions = [this.filteredOptions[0]]; + this.selectedIndex = this.options.indexOf(this.firstSelectedOption); + this.setInlineSelection(); + } else { + this.selectedIndex = -1; + } + } + return; + } + /** + * Handle keydown actions for listbox navigation. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (e.ctrlKey || e.shiftKey) { + return true; + } + switch (key) { + case "Enter": { + this.syncValue(); + if (this.isAutocompleteInline) { + this.filter = this.value; + } + this.open = false; + this.clearSelectionRange(); + break; + } + case "Escape": { + if (!this.isAutocompleteInline) { + this.selectedIndex = -1; + } + if (this.open) { + this.open = false; + break; + } + this.value = ""; + this.control.value = ""; + this.filter = ""; + this.filterOptions(); + break; + } + case "Tab": { + this.setInputToSelection(); + if (!this.open) { + return true; + } + e.preventDefault(); + this.open = false; + break; + } + case "ArrowUp": + case "ArrowDown": { + this.filterOptions(); + if (!this.open) { + this.open = true; + break; + } + if (this.filteredOptions.length > 0) { + super.keydownHandler(e); + } + if (this.isAutocompleteInline) { + this.setInlineSelection(); + } + break; + } + default: { + return true; + } + } + } + /** + * Handle keyup actions for value input and text field manipulations. + * + * @param e - the keyboard event + * @internal + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + case "ArrowRight": + case "Backspace": + case "Delete": + case "Home": + case "End": { + this.filter = this.control.value; + this.selectedIndex = -1; + this.filterOptions(); + break; + } + } + } + /** + * Ensure that the selectedIndex is within the current allowable filtered range. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + if (this.$fastController.isConnected) { + next = limit(-1, this.options.length - 1, next); + if (next !== this.selectedIndex) { + this.selectedIndex = next; + return; + } + super.selectedIndexChanged(prev, next); + } + } + /** + * Move focus to the previous selectable option. + * + * @internal + * @remarks + * Overrides `Listbox.selectPreviousOption` + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex >= 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Set the default selected options at initialization or reset. + * + * @internal + * @remarks + * Overrides `Listbox.setDefaultSelectedOption` + */ + setDefaultSelectedOption() { + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el) => el.getAttribute("selected") !== null || el.selected); + this.selectedIndex = selectedIndex; + if (!this.dirtyValue && this.firstSelectedOption) { + this.value = this.firstSelectedOption.text; + } + this.setSelectedOptions(); + } + } + /** + * Focus and set the content of the control based on the first selected option. + * + * @internal + */ + setInputToSelection() { + if (this.firstSelectedOption) { + this.control.value = this.firstSelectedOption.text; + this.control.focus(); + } + } + /** + * Focus, set and select the content of the control based on the first selected option. + * + * @internal + */ + setInlineSelection() { + if (this.firstSelectedOption) { + this.setInputToSelection(); + this.control.setSelectionRange(this.filter.length, this.control.value.length, "backward"); + } + } + /** + * Determines if a value update should involve emitting a change event, then updates the value. + * + * @internal + */ + syncValue() { + var _a; + const newValue = this.selectedIndex > -1 ? (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text : this.control.value; + this.updateValue(this.value !== newValue); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @param force - direction to force the listbox to display + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * Ensure that the entire list of options is used when setting the selected property. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + * @remarks + * Overrides: `Listbox.selectedOptionsChanged` + */ + selectedOptionsChanged(prev, next) { + if (this.$fastController.isConnected) { + this._options.forEach((o) => { + o.selected = next.includes(o); + }); + } + } + /** + * Synchronize the form-associated proxy and update the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + super.slottedOptionsChanged(prev, next); + this.updateValue(); + } + /** + * Sets the value and to match the first selected option. + * + * @param shouldEmit - if true, the change event will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a; + if (this.$fastController.isConnected) { + this.value = ((_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) || this.control.value; + this.control.value = this.value; + } + if (shouldEmit) { + this.$emit("change"); + } + } + /** + * @internal + */ + clearSelectionRange() { + const controlValueLength = this.control.value.length; + this.control.setSelectionRange(controlValueLength, controlValueLength); + } + }; + __decorate([ + attr({ attribute: "autocomplete", mode: "fromView" }) + ], Combobox.prototype, "autocomplete", void 0); + __decorate([ + observable + ], Combobox.prototype, "maxHeight", void 0); + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Combobox.prototype, "open", void 0); + __decorate([ + attr + ], Combobox.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Combobox.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Combobox.prototype, "position", void 0); + DelegatesARIACombobox = class { + }; + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaAutoComplete", void 0); + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIACombobox, DelegatesARIAListbox); + applyMixins(Combobox, StartEnd, DelegatesARIACombobox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js + var init_combobox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js + var init_combobox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js"() { + init_combobox(); + init_combobox_options(); + init_combobox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js + function composedParent(element) { + const parentNode = element.parentElement; + if (parentNode) { + return parentNode; + } else { + const rootNode = element.getRootNode(); + if (rootNode.host instanceof HTMLElement) { + return rootNode.host; + } + } + return null; + } + var init_composed_parent = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js + function composedContains(reference, test) { + let current = test; + while (current !== null) { + if (current === reference) { + return true; + } + current = composedParent(current); + } + return false; + } + var init_composed_contains = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js"() { + init_composed_parent(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js + function isFastElement(element) { + return element instanceof FASTElement; + } + var defaultElement, QueuedStyleSheetTarget, ConstructableStyleSheetTarget, DocumentStyleSheetTarget, HeadStyleElementStyleSheetTarget, StyleElementStyleSheetTarget, ElementStyleSheetTarget, RootStyleSheetTarget, propertyTargetCache, propertyTargetCtor, PropertyTargetManager; + var init_custom_property_manager = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js"() { + init_tslib_es6(); + init_esm(); + defaultElement = document.createElement("div"); + QueuedStyleSheetTarget = class { + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + ConstructableStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor(source) { + super(); + const sheet = new CSSStyleSheet(); + sheet[prependToAdoptedStyleSheetsSymbol] = true; + this.target = sheet.cssRules[sheet.insertRule(":host{}")].style; + source.$fastController.addStyles(ElementStyles.create([sheet])); + } + }; + DocumentStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + const sheet = new CSSStyleSheet(); + this.target = sheet.cssRules[sheet.insertRule(":root{}")].style; + document.adoptedStyleSheets = [ + ...document.adoptedStyleSheets, + sheet + ]; + } + }; + HeadStyleElementStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + this.style = document.createElement("style"); + document.head.appendChild(this.style); + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":root{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } + } + }; + StyleElementStyleSheetTarget = class { + constructor(target) { + this.store = /* @__PURE__ */ new Map(); + this.target = null; + const controller = target.$fastController; + this.style = document.createElement("style"); + controller.addStyles(this.style); + Observable.getNotifier(controller).subscribe(this, "isConnected"); + this.handleChange(controller, "isConnected"); + } + targetChanged() { + if (this.target !== null) { + for (const [key, value] of this.store.entries()) { + this.target.setProperty(key, value); + } + } + } + setProperty(name, value) { + this.store.set(name, value); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.setProperty(name, value); + } + }); + } + removeProperty(name) { + this.store.delete(name); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.removeProperty(name); + } + }); + } + handleChange(source, key) { + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":host{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } else { + this.target = null; + } + } + }; + __decorate([ + observable + ], StyleElementStyleSheetTarget.prototype, "target", void 0); + ElementStyleSheetTarget = class { + constructor(source) { + this.target = source.style; + } + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + RootStyleSheetTarget = class _RootStyleSheetTarget { + setProperty(name, value) { + _RootStyleSheetTarget.properties[name] = value; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).setProperty(name, value); + } + } + removeProperty(name) { + delete _RootStyleSheetTarget.properties[name]; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).removeProperty(name); + } + } + static registerRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (!roots.has(root)) { + roots.add(root); + const target = PropertyTargetManager.getOrCreate(this.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.setProperty(key, _RootStyleSheetTarget.properties[key]); + } + } + } + static unregisterRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (roots.has(root)) { + roots.delete(root); + const target = PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.removeProperty(key); + } + } + } + /** + * Returns the document when provided the default element, + * otherwise is a no-op + * @param root - the root to normalize + */ + static normalizeRoot(root) { + return root === defaultElement ? document : root; + } + }; + RootStyleSheetTarget.roots = /* @__PURE__ */ new Set(); + RootStyleSheetTarget.properties = {}; + propertyTargetCache = /* @__PURE__ */ new WeakMap(); + propertyTargetCtor = DOM.supportsAdoptedStyleSheets ? ConstructableStyleSheetTarget : StyleElementStyleSheetTarget; + PropertyTargetManager = Object.freeze({ + getOrCreate(source) { + if (propertyTargetCache.has(source)) { + return propertyTargetCache.get(source); + } + let target; + if (source === defaultElement) { + target = new RootStyleSheetTarget(); + } else if (source instanceof Document) { + target = DOM.supportsAdoptedStyleSheets ? new DocumentStyleSheetTarget() : new HeadStyleElementStyleSheetTarget(); + } else if (isFastElement(source)) { + target = new propertyTargetCtor(source); + } else { + target = new ElementStyleSheetTarget(source); + } + propertyTargetCache.set(source, target); + return target; + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js + function create(nameOrConfig) { + return DesignTokenImpl.from(nameOrConfig); + } + var DesignTokenImpl, CustomPropertyReflector, DesignTokenBindingObserver, Store, nodeCache, childToParent, DesignTokenNode, DesignToken; + var init_design_token = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js"() { + init_tslib_es6(); + init_esm(); + init_composed_parent(); + init_composed_contains(); + init_custom_property_manager(); + init_custom_property_manager(); + DesignTokenImpl = class _DesignTokenImpl extends CSSDirective { + constructor(configuration) { + super(); + this.subscribers = /* @__PURE__ */ new WeakMap(); + this._appliedTo = /* @__PURE__ */ new Set(); + this.name = configuration.name; + if (configuration.cssCustomPropertyName !== null) { + this.cssCustomProperty = `--${configuration.cssCustomPropertyName}`; + this.cssVar = `var(${this.cssCustomProperty})`; + } + this.id = _DesignTokenImpl.uniqueId(); + _DesignTokenImpl.tokensById.set(this.id, this); + } + get appliedTo() { + return [...this._appliedTo]; + } + static from(nameOrConfig) { + return new _DesignTokenImpl({ + name: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.name, + cssCustomPropertyName: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.cssCustomPropertyName === void 0 ? nameOrConfig.name : nameOrConfig.cssCustomPropertyName + }); + } + static isCSSDesignToken(token) { + return typeof token.cssCustomProperty === "string"; + } + static isDerivedDesignTokenValue(value) { + return typeof value === "function"; + } + /** + * Gets a token by ID. Returns undefined if the token was not found. + * @param id - The ID of the token + * @returns + */ + static getTokenById(id) { + return _DesignTokenImpl.tokensById.get(id); + } + getOrCreateSubscriberSet(target = this) { + return this.subscribers.get(target) || this.subscribers.set(target, /* @__PURE__ */ new Set()) && this.subscribers.get(target); + } + createCSS() { + return this.cssVar || ""; + } + getValueFor(element) { + const value = DesignTokenNode.getOrCreate(element).get(this); + if (value !== void 0) { + return value; + } + throw new Error(`Value could not be retrieved for token named "${this.name}". Ensure the value is set for ${element} or an ancestor of ${element}.`); + } + setValueFor(element, value) { + this._appliedTo.add(element); + if (value instanceof _DesignTokenImpl) { + value = this.alias(value); + } + DesignTokenNode.getOrCreate(element).set(this, value); + return this; + } + deleteValueFor(element) { + this._appliedTo.delete(element); + if (DesignTokenNode.existsFor(element)) { + DesignTokenNode.getOrCreate(element).delete(this); + } + return this; + } + withDefault(value) { + this.setValueFor(defaultElement, value); + return this; + } + subscribe(subscriber, target) { + const subscriberSet = this.getOrCreateSubscriberSet(target); + if (target && !DesignTokenNode.existsFor(target)) { + DesignTokenNode.getOrCreate(target); + } + if (!subscriberSet.has(subscriber)) { + subscriberSet.add(subscriber); + } + } + unsubscribe(subscriber, target) { + const list = this.subscribers.get(target || this); + if (list && list.has(subscriber)) { + list.delete(subscriber); + } + } + /** + * Notifies subscribers that the value for an element has changed. + * @param element - The element to emit a notification for + */ + notify(element) { + const record = Object.freeze({ token: this, target: element }); + if (this.subscribers.has(this)) { + this.subscribers.get(this).forEach((sub) => sub.handleChange(record)); + } + if (this.subscribers.has(element)) { + this.subscribers.get(element).forEach((sub) => sub.handleChange(record)); + } + } + /** + * Alias the token to the provided token. + * @param token - the token to alias to + */ + alias(token) { + return ((target) => token.getValueFor(target)); + } + }; + DesignTokenImpl.uniqueId = /* @__PURE__ */ (() => { + let id = 0; + return () => { + id++; + return id.toString(16); + }; + })(); + DesignTokenImpl.tokensById = /* @__PURE__ */ new Map(); + CustomPropertyReflector = class { + startReflection(token, target) { + token.subscribe(this, target); + this.handleChange({ token, target }); + } + stopReflection(token, target) { + token.unsubscribe(this, target); + this.remove(token, target); + } + handleChange(record) { + const { token, target } = record; + this.add(token, target); + } + add(token, target) { + PropertyTargetManager.getOrCreate(target).setProperty(token.cssCustomProperty, this.resolveCSSValue(DesignTokenNode.getOrCreate(target).get(token))); + } + remove(token, target) { + PropertyTargetManager.getOrCreate(target).removeProperty(token.cssCustomProperty); + } + resolveCSSValue(value) { + return value && typeof value.createCSS === "function" ? value.createCSS() : value; + } + }; + DesignTokenBindingObserver = class { + constructor(source, token, node) { + this.source = source; + this.token = token; + this.node = node; + this.dependencies = /* @__PURE__ */ new Set(); + this.observer = Observable.binding(source, this, false); + this.observer.handleChange = this.observer.call; + this.handleChange(); + } + disconnect() { + this.observer.disconnect(); + } + /** + * @internal + */ + handleChange() { + try { + this.node.store.set(this.token, this.observer.observe(this.node.target, defaultExecutionContext)); + } catch (e) { + console.error(e); + } + } + }; + Store = class { + constructor() { + this.values = /* @__PURE__ */ new Map(); + } + set(token, value) { + if (this.values.get(token) !== value) { + this.values.set(token, value); + Observable.getNotifier(this).notify(token.id); + } + } + get(token) { + Observable.track(this, token.id); + return this.values.get(token); + } + delete(token) { + this.values.delete(token); + Observable.getNotifier(this).notify(token.id); + } + all() { + return this.values.entries(); + } + }; + nodeCache = /* @__PURE__ */ new WeakMap(); + childToParent = /* @__PURE__ */ new WeakMap(); + DesignTokenNode = class _DesignTokenNode { + constructor(target) { + this.target = target; + this.store = new Store(); + this.children = []; + this.assignedValues = /* @__PURE__ */ new Map(); + this.reflecting = /* @__PURE__ */ new Set(); + this.bindingObservers = /* @__PURE__ */ new Map(); + this.tokenValueChangeHandler = { + handleChange: (source, arg) => { + const token = DesignTokenImpl.getTokenById(arg); + if (token) { + token.notify(this.target); + this.updateCSSTokenReflection(source, token); + } + } + }; + nodeCache.set(target, this); + Observable.getNotifier(this.store).subscribe(this.tokenValueChangeHandler); + if (target instanceof FASTElement) { + target.$fastController.addBehaviors([this]); + } else if (target.isConnected) { + this.bind(); + } + } + /** + * Returns a DesignTokenNode for an element. + * Creates a new instance if one does not already exist for a node, + * otherwise returns the cached instance + * + * @param target - The HTML element to retrieve a DesignTokenNode for + */ + static getOrCreate(target) { + return nodeCache.get(target) || new _DesignTokenNode(target); + } + /** + * Determines if a DesignTokenNode has been created for a target + * @param target - The element to test + */ + static existsFor(target) { + return nodeCache.has(target); + } + /** + * Searches for and return the nearest parent DesignTokenNode. + * Null is returned if no node is found or the node provided is for a default element. + */ + static findParent(node) { + if (!(defaultElement === node.target)) { + let parent = composedParent(node.target); + while (parent !== null) { + if (nodeCache.has(parent)) { + return nodeCache.get(parent); + } + parent = composedParent(parent); + } + return _DesignTokenNode.getOrCreate(defaultElement); + } + return null; + } + /** + * Finds the closest node with a value explicitly assigned for a token, otherwise null. + * @param token - The token to look for + * @param start - The node to start looking for value assignment + * @returns + */ + static findClosestAssignedNode(token, start) { + let current = start; + do { + if (current.has(token)) { + return current; + } + current = current.parent ? current.parent : current.target !== defaultElement ? _DesignTokenNode.getOrCreate(defaultElement) : null; + } while (current !== null); + return null; + } + /** + * The parent DesignTokenNode, or null. + */ + get parent() { + return childToParent.get(this) || null; + } + updateCSSTokenReflection(source, token) { + if (DesignTokenImpl.isCSSDesignToken(token)) { + const parent = this.parent; + const reflecting = this.isReflecting(token); + if (parent) { + const parentValue = parent.get(token); + const sourceValue = source.get(token); + if (parentValue !== sourceValue && !reflecting) { + this.reflectToCSS(token); + } else if (parentValue === sourceValue && reflecting) { + this.stopReflectToCSS(token); + } + } else if (!reflecting) { + this.reflectToCSS(token); + } + } + } + /** + * Checks if a token has been assigned an explicit value the node. + * @param token - the token to check. + */ + has(token) { + return this.assignedValues.has(token); + } + /** + * Gets the value of a token for a node + * @param token - The token to retrieve the value for + * @returns + */ + get(token) { + const value = this.store.get(token); + if (value !== void 0) { + return value; + } + const raw = this.getRaw(token); + if (raw !== void 0) { + this.hydrate(token, raw); + return this.get(token); + } + } + /** + * Retrieves the raw assigned value of a token from the nearest assigned node. + * @param token - The token to retrieve a raw value for + * @returns + */ + getRaw(token) { + var _a; + if (this.assignedValues.has(token)) { + return this.assignedValues.get(token); + } + return (_a = _DesignTokenNode.findClosestAssignedNode(token, this)) === null || _a === void 0 ? void 0 : _a.getRaw(token); + } + /** + * Sets a token to a value for a node + * @param token - The token to set + * @param value - The value to set the token to + */ + set(token, value) { + if (DesignTokenImpl.isDerivedDesignTokenValue(this.assignedValues.get(token))) { + this.tearDownBindingObserver(token); + } + this.assignedValues.set(token, value); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + this.setupBindingObserver(token, value); + } else { + this.store.set(token, value); + } + } + /** + * Deletes a token value for the node. + * @param token - The token to delete the value for + */ + delete(token) { + this.assignedValues.delete(token); + this.tearDownBindingObserver(token); + const upstream = this.getRaw(token); + if (upstream) { + this.hydrate(token, upstream); + } else { + this.store.delete(token); + } + } + /** + * Invoked when the DesignTokenNode.target is attached to the document + */ + bind() { + const parent = _DesignTokenNode.findParent(this); + if (parent) { + parent.appendChild(this); + } + for (const key of this.assignedValues.keys()) { + key.notify(this.target); + } + } + /** + * Invoked when the DesignTokenNode.target is detached from the document + */ + unbind() { + if (this.parent) { + const parent = childToParent.get(this); + parent.removeChild(this); + } + for (const token of this.bindingObservers.keys()) { + this.tearDownBindingObserver(token); + } + } + /** + * Appends a child to a parent DesignTokenNode. + * @param child - The child to append to the node + */ + appendChild(child) { + if (child.parent) { + childToParent.get(child).removeChild(child); + } + const reParent = this.children.filter((x) => child.contains(x)); + childToParent.set(child, this); + this.children.push(child); + reParent.forEach((x) => child.appendChild(x)); + Observable.getNotifier(this.store).subscribe(child); + for (const [token, value] of this.store.all()) { + child.hydrate(token, this.bindingObservers.has(token) ? this.getRaw(token) : value); + child.updateCSSTokenReflection(child.store, token); + } + } + /** + * Removes a child from a node. + * @param child - The child to remove. + */ + removeChild(child) { + const childIndex = this.children.indexOf(child); + if (childIndex !== -1) { + this.children.splice(childIndex, 1); + } + Observable.getNotifier(this.store).unsubscribe(child); + if (child.parent !== this) { + return false; + } + const deleted = childToParent.delete(child); + for (const [token] of this.store.all()) { + child.hydrate(token, child.getRaw(token)); + child.updateCSSTokenReflection(child.store, token); + } + return deleted; + } + /** + * Tests whether a provided node is contained by + * the calling node. + * @param test - The node to test + */ + contains(test) { + return composedContains(this.target, test.target); + } + /** + * Instructs the node to reflect a design token for the provided token. + * @param token - The design token to reflect + */ + reflectToCSS(token) { + if (!this.isReflecting(token)) { + this.reflecting.add(token); + _DesignTokenNode.cssCustomPropertyReflector.startReflection(token, this.target); + } + } + /** + * Stops reflecting a DesignToken to CSS + * @param token - The design token to stop reflecting + */ + stopReflectToCSS(token) { + if (this.isReflecting(token)) { + this.reflecting.delete(token); + _DesignTokenNode.cssCustomPropertyReflector.stopReflection(token, this.target); + } + } + /** + * Determines if a token is being reflected to CSS for a node. + * @param token - The token to check for reflection + * @returns + */ + isReflecting(token) { + return this.reflecting.has(token); + } + /** + * Handle changes to upstream tokens + * @param source - The parent DesignTokenNode + * @param property - The token ID that changed + */ + handleChange(source, property) { + const token = DesignTokenImpl.getTokenById(property); + if (!token) { + return; + } + this.hydrate(token, this.getRaw(token)); + this.updateCSSTokenReflection(this.store, token); + } + /** + * Hydrates a token with a DesignTokenValue, making retrieval available. + * @param token - The token to hydrate + * @param value - The value to hydrate + */ + hydrate(token, value) { + if (!this.has(token)) { + const observer = this.bindingObservers.get(token); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + if (observer) { + if (observer.source !== value) { + this.tearDownBindingObserver(token); + this.setupBindingObserver(token, value); + } + } else { + this.setupBindingObserver(token, value); + } + } else { + if (observer) { + this.tearDownBindingObserver(token); + } + this.store.set(token, value); + } + } + } + /** + * Sets up a binding observer for a derived token value that notifies token + * subscribers on change. + * + * @param token - The token to notify when the binding updates + * @param source - The binding source + */ + setupBindingObserver(token, source) { + const binding = new DesignTokenBindingObserver(source, token, this); + this.bindingObservers.set(token, binding); + return binding; + } + /** + * Tear down a binding observer for a token. + */ + tearDownBindingObserver(token) { + if (this.bindingObservers.has(token)) { + this.bindingObservers.get(token).disconnect(); + this.bindingObservers.delete(token); + return true; + } + return false; + } + }; + DesignTokenNode.cssCustomPropertyReflector = new CustomPropertyReflector(); + __decorate([ + observable + ], DesignTokenNode.prototype, "children", void 0); + DesignToken = Object.freeze({ + create, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been connected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * 3. The HTMLElement is not connected to the document when token values are set. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyConnection(element) { + if (!element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).bind(); + return true; + }, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been disconnected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyDisconnection(element) { + if (element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).unbind(); + return true; + }, + /** + * Registers and element or document as a DesignToken root. + * {@link CSSDesignToken | CSSDesignTokens} with default values assigned via + * {@link (DesignToken:interface).withDefault} will emit CSS custom properties to all + * registered roots. + * @param target - The root to register + */ + registerRoot(target = defaultElement) { + RootStyleSheetTarget.registerRoot(target); + }, + /** + * Unregister an element or document as a DesignToken root. + * @param target - The root to deregister + */ + unregisterRoot(target = defaultElement) { + RootStyleSheetTarget.unregisterRoot(target); + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js + function extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback) { + if (typeof params === "string") { + return { + name: params, + type: elementDefinitionType, + callback: elementDefinitionCallback + }; + } else { + return params; + } + } + var ElementDisambiguation, elementTypesByTag, elementTagsByType, rootDesignSystem, designSystemKey, DesignSystem, DefaultDesignSystem, ElementDefinitionEntry; + var init_design_system = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js"() { + init_esm(); + init_foundation_element(); + init_di(); + init_design_token(); + init_component_presentation(); + ElementDisambiguation = Object.freeze({ + /** + * Skip defining the element but still call the provided callback passed + * to DesignSystemRegistrationContext.tryDefineElement + */ + definitionCallbackOnly: null, + /** + * Ignore the duplicate element entirely. + */ + ignoreDuplicate: /* @__PURE__ */ Symbol() + }); + elementTypesByTag = /* @__PURE__ */ new Map(); + elementTagsByType = /* @__PURE__ */ new Map(); + rootDesignSystem = null; + designSystemKey = DI.createInterface((x) => x.cachedCallback((handler) => { + if (rootDesignSystem === null) { + rootDesignSystem = new DefaultDesignSystem(null, handler); + } + return rootDesignSystem; + })); + DesignSystem = Object.freeze({ + /** + * Returns the HTML element name that the type is defined as. + * @param type - The type to lookup. + * @public + */ + tagFor(type) { + return elementTagsByType.get(type); + }, + /** + * Searches the DOM hierarchy for the design system that is responsible + * for the provided element. + * @param element - The element to locate the design system for. + * @returns The located design system. + * @public + */ + responsibleFor(element) { + const owned = element.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.findResponsibleContainer(element); + return container.get(designSystemKey); + }, + /** + * Gets the DesignSystem if one is explicitly defined on the provided element; + * otherwise creates a design system defined directly on the element. + * @param element - The element to get or create a design system for. + * @returns The design system. + * @public + */ + getOrCreate(node) { + if (!node) { + if (rootDesignSystem === null) { + rootDesignSystem = DI.getOrCreateDOMContainer().get(designSystemKey); + } + return rootDesignSystem; + } + const owned = node.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.getOrCreateDOMContainer(node); + if (container.has(designSystemKey, false)) { + return container.get(designSystemKey); + } else { + const system = new DefaultDesignSystem(node, container); + container.register(Registration.instance(designSystemKey, system)); + return system; + } + } + }); + DefaultDesignSystem = class { + constructor(owner, container) { + this.owner = owner; + this.container = container; + this.designTokensInitialized = false; + this.prefix = "fast"; + this.shadowRootMode = void 0; + this.disambiguate = () => ElementDisambiguation.definitionCallbackOnly; + if (owner !== null) { + owner.$$designSystem$$ = this; + } + } + withPrefix(prefix) { + this.prefix = prefix; + return this; + } + withShadowRootMode(mode) { + this.shadowRootMode = mode; + return this; + } + withElementDisambiguation(callback) { + this.disambiguate = callback; + return this; + } + withDesignTokenRoot(root) { + this.designTokenRoot = root; + return this; + } + register(...registrations) { + const container = this.container; + const elementDefinitionEntries = []; + const disambiguate = this.disambiguate; + const shadowRootMode = this.shadowRootMode; + const context = { + elementPrefix: this.prefix, + tryDefineElement(params, elementDefinitionType, elementDefinitionCallback) { + const extractedParams = extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback); + const { name, callback, baseClass } = extractedParams; + let { type } = extractedParams; + let elementName = name; + let typeFoundByName = elementTypesByTag.get(elementName); + let needsDefine = true; + while (typeFoundByName) { + const result = disambiguate(elementName, type, typeFoundByName); + switch (result) { + case ElementDisambiguation.ignoreDuplicate: + return; + case ElementDisambiguation.definitionCallbackOnly: + needsDefine = false; + typeFoundByName = void 0; + break; + default: + elementName = result; + typeFoundByName = elementTypesByTag.get(elementName); + break; + } + } + if (needsDefine) { + if (elementTagsByType.has(type) || type === FoundationElement) { + type = class extends type { + }; + } + elementTypesByTag.set(elementName, type); + elementTagsByType.set(type, elementName); + if (baseClass) { + elementTagsByType.set(baseClass, elementName); + } + } + elementDefinitionEntries.push(new ElementDefinitionEntry(container, elementName, type, shadowRootMode, callback, needsDefine)); + } + }; + if (!this.designTokensInitialized) { + this.designTokensInitialized = true; + if (this.designTokenRoot !== null) { + DesignToken.registerRoot(this.designTokenRoot); + } + } + container.registerWithContext(context, ...registrations); + for (const entry of elementDefinitionEntries) { + entry.callback(entry); + if (entry.willDefine && entry.definition !== null) { + entry.definition.define(); + } + } + return this; + } + }; + ElementDefinitionEntry = class { + constructor(container, name, type, shadowRootMode, callback, willDefine) { + this.container = container; + this.name = name; + this.type = type; + this.shadowRootMode = shadowRootMode; + this.callback = callback; + this.willDefine = willDefine; + this.definition = null; + } + definePresentation(presentation) { + ComponentPresentation.define(this.name, presentation, this.container); + } + defineElement(definition) { + this.definition = new FASTElementDefinition(this.type, Object.assign(Object.assign({}, definition), { name: this.name })); + } + tagFor(type) { + return DesignSystem.tagFor(type); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js + var init_registration_context = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js + var init_design_system2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js"() { + init_design_system(); + init_component_presentation(); + init_registration_context(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/index.js + var init_di2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/index.js"() { + init_di(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js + var init_dialog_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js"() { + } + }); + + // node_modules/tabbable/dist/index.esm.js + var candidateSelectors, candidateSelector, NoElement, matches, getRootNode, getTabindex, isInput, isHiddenInput, isDetailsWithSummary, getCheckedRadio, isTabbableRadio, isRadio, isNonTabbableRadio, isZeroArea, isHidden, isDisabledFromFieldset, isNodeMatchingSelectorFocusable, isNodeMatchingSelectorTabbable, isTabbable, focusableCandidateSelector, isFocusable; + var init_index_esm = __esm({ + "node_modules/tabbable/dist/index.esm.js"() { + candidateSelectors = ["input", "select", "textarea", "a[href]", "button", "[tabindex]:not(slot)", "audio[controls]", "video[controls]", '[contenteditable]:not([contenteditable="false"])', "details>summary:first-of-type", "details"]; + candidateSelector = /* @__PURE__ */ candidateSelectors.join(","); + NoElement = typeof Element === "undefined"; + matches = NoElement ? function() { + } : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; + getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) { + return element.getRootNode(); + } : function(element) { + return element.ownerDocument; + }; + getTabindex = function getTabindex2(node, isScope) { + if (node.tabIndex < 0) { + if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute("tabindex"), 10))) { + return 0; + } + } + return node.tabIndex; + }; + isInput = function isInput2(node) { + return node.tagName === "INPUT"; + }; + isHiddenInput = function isHiddenInput2(node) { + return isInput(node) && node.type === "hidden"; + }; + isDetailsWithSummary = function isDetailsWithSummary2(node) { + var r = node.tagName === "DETAILS" && Array.prototype.slice.apply(node.children).some(function(child) { + return child.tagName === "SUMMARY"; + }); + return r; + }; + getCheckedRadio = function getCheckedRadio2(nodes, form) { + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].checked && nodes[i].form === form) { + return nodes[i]; + } + } + }; + isTabbableRadio = function isTabbableRadio2(node) { + if (!node.name) { + return true; + } + var radioScope = node.form || getRootNode(node); + var queryRadios = function queryRadios2(name) { + return radioScope.querySelectorAll('input[type="radio"][name="' + name + '"]'); + }; + var radioSet; + if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && typeof window.CSS.escape === "function") { + radioSet = queryRadios(window.CSS.escape(node.name)); + } else { + try { + radioSet = queryRadios(node.name); + } catch (err) { + console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", err.message); + return false; + } + } + var checked = getCheckedRadio(radioSet, node.form); + return !checked || checked === node; + }; + isRadio = function isRadio2(node) { + return isInput(node) && node.type === "radio"; + }; + isNonTabbableRadio = function isNonTabbableRadio2(node) { + return isRadio(node) && !isTabbableRadio(node); + }; + isZeroArea = function isZeroArea2(node) { + var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height; + return width === 0 && height === 0; + }; + isHidden = function isHidden2(node, _ref) { + var displayCheck = _ref.displayCheck, getShadowRoot2 = _ref.getShadowRoot; + if (getComputedStyle(node).visibility === "hidden") { + return true; + } + var isDirectSummary = matches.call(node, "details>summary:first-of-type"); + var nodeUnderDetails = isDirectSummary ? node.parentElement : node; + if (matches.call(nodeUnderDetails, "details:not([open]) *")) { + return true; + } + var nodeRootHost = getRootNode(node).host; + var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node); + if (!displayCheck || displayCheck === "full") { + if (typeof getShadowRoot2 === "function") { + var originalNode = node; + while (node) { + var parentElement = node.parentElement; + var rootNode = getRootNode(node); + if (parentElement && !parentElement.shadowRoot && getShadowRoot2(parentElement) === true) { + return isZeroArea(node); + } else if (node.assignedSlot) { + node = node.assignedSlot; + } else if (!parentElement && rootNode !== node.ownerDocument) { + node = rootNode.host; + } else { + node = parentElement; + } + } + node = originalNode; + } + if (nodeIsAttached) { + return !node.getClientRects().length; + } + } else if (displayCheck === "non-zero-area") { + return isZeroArea(node); + } + return false; + }; + isDisabledFromFieldset = function isDisabledFromFieldset2(node) { + if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) { + var parentNode = node.parentElement; + while (parentNode) { + if (parentNode.tagName === "FIELDSET" && parentNode.disabled) { + for (var i = 0; i < parentNode.children.length; i++) { + var child = parentNode.children.item(i); + if (child.tagName === "LEGEND") { + return matches.call(parentNode, "fieldset[disabled] *") ? true : !child.contains(node); + } + } + return true; + } + parentNode = parentNode.parentElement; + } + } + return false; + }; + isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) { + if (node.disabled || isHiddenInput(node) || isHidden(node, options) || // For a details element with a summary, the summary element gets the focus + isDetailsWithSummary(node) || isDisabledFromFieldset(node)) { + return false; + } + return true; + }; + isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) { + if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) { + return false; + } + return true; + }; + isTabbable = function isTabbable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, candidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorTabbable(options, node); + }; + focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat("iframe").join(","); + isFocusable = function isFocusable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, focusableCandidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorFocusable(options, node); + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js + var Dialog; + var init_dialog = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + Dialog = class _Dialog extends FoundationElement { + constructor() { + super(...arguments); + this.modal = true; + this.hidden = false; + this.trapFocus = true; + this.trapFocusChanged = () => { + if (this.$fastController.isConnected) { + this.updateTrapFocus(); + } + }; + this.isTrappingFocus = false; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && !this.hidden) { + switch (e.key) { + case keyEscape: + this.dismiss(); + e.preventDefault(); + break; + case keyTab: + this.handleTabKeyDown(e); + break; + } + } + }; + this.handleDocumentFocus = (e) => { + if (!e.defaultPrevented && this.shouldForceFocus(e.target)) { + this.focusFirstElement(); + e.preventDefault(); + } + }; + this.handleTabKeyDown = (e) => { + if (!this.trapFocus || this.hidden) { + return; + } + const bounds = this.getTabQueueBounds(); + if (bounds.length === 0) { + return; + } + if (bounds.length === 1) { + bounds[0].focus(); + e.preventDefault(); + return; + } + if (e.shiftKey && e.target === bounds[0]) { + bounds[bounds.length - 1].focus(); + e.preventDefault(); + } else if (!e.shiftKey && e.target === bounds[bounds.length - 1]) { + bounds[0].focus(); + e.preventDefault(); + } + return; + }; + this.getTabQueueBounds = () => { + const bounds = []; + return _Dialog.reduceTabbableItems(bounds, this); + }; + this.focusFirstElement = () => { + const bounds = this.getTabQueueBounds(); + if (bounds.length > 0) { + bounds[0].focus(); + } else { + if (this.dialog instanceof HTMLElement) { + this.dialog.focus(); + } + } + }; + this.shouldForceFocus = (currentFocusElement) => { + return this.isTrappingFocus && !this.contains(currentFocusElement); + }; + this.shouldTrapFocus = () => { + return this.trapFocus && !this.hidden; + }; + this.updateTrapFocus = (shouldTrapFocusOverride) => { + const shouldTrapFocus = shouldTrapFocusOverride === void 0 ? this.shouldTrapFocus() : shouldTrapFocusOverride; + if (shouldTrapFocus && !this.isTrappingFocus) { + this.isTrappingFocus = true; + document.addEventListener("focusin", this.handleDocumentFocus); + DOM.queueUpdate(() => { + if (this.shouldForceFocus(document.activeElement)) { + this.focusFirstElement(); + } + }); + } else if (!shouldTrapFocus && this.isTrappingFocus) { + this.isTrappingFocus = false; + document.removeEventListener("focusin", this.handleDocumentFocus); + } + }; + } + /** + * @internal + */ + dismiss() { + this.$emit("dismiss"); + this.$emit("cancel"); + } + /** + * The method to show the dialog. + * + * @public + */ + show() { + this.hidden = false; + } + /** + * The method to hide the dialog. + * + * @public + */ + hide() { + this.hidden = true; + this.$emit("close"); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + document.addEventListener("keydown", this.handleDocumentKeydown); + this.notifier = Observable.getNotifier(this); + this.notifier.subscribe(this, "hidden"); + this.updateTrapFocus(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.updateTrapFocus(false); + this.notifier.unsubscribe(this, "hidden"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "hidden": + this.updateTrapFocus(); + break; + default: + break; + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceTabbableItems(elements2, element) { + if (element.getAttribute("tabindex") === "-1") { + return elements2; + } + if (isTabbable(element) || _Dialog.isFocusableFastElement(element) && _Dialog.hasTabbableShadow(element)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Dialog.reduceTabbableItems, [])); + } + return elements2; + } + /** + * Test if element is focusable fast element + * + * @param element - The element to check + * + * @internal + */ + static isFocusableFastElement(element) { + var _a, _b; + return !!((_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus); + } + /** + * Test if the element has a focusable shadow + * + * @param element - The element to check + * + * @internal + */ + static hasTabbableShadow(element) { + var _a, _b; + return Array.from((_b = (_a = element.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll("*")) !== null && _b !== void 0 ? _b : []).some((x) => { + return isTabbable(x); + }); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "modal", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "hidden", void 0); + __decorate([ + attr({ attribute: "trap-focus", mode: "boolean" }) + ], Dialog.prototype, "trapFocus", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], Dialog.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], Dialog.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], Dialog.prototype, "ariaLabel", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js + var init_dialog2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js"() { + init_dialog_template(); + init_dialog(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js + var init_disclosure_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js + var Disclosure; + var init_disclosure = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Disclosure = class extends FoundationElement { + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.setup(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.details.removeEventListener("toggle", this.onToggle); + } + /** + * Show extra content. + */ + show() { + this.details.open = true; + } + /** + * Hide extra content. + */ + hide() { + this.details.open = false; + } + /** + * Toggle the current(expanded/collapsed) state. + */ + toggle() { + this.details.open = !this.details.open; + } + /** + * Register listener and set default disclosure mode + */ + setup() { + this.onToggle = this.onToggle.bind(this); + this.details.addEventListener("toggle", this.onToggle); + if (this.expanded) { + this.show(); + } + } + /** + * Update the aria attr and fire `toggle` event + */ + onToggle() { + this.expanded = this.details.open; + this.$emit("toggle"); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Disclosure.prototype, "expanded", void 0); + __decorate([ + attr + ], Disclosure.prototype, "title", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js + var init_disclosure2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js"() { + init_disclosure_template(); + init_disclosure(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js + var dividerTemplate; + var init_divider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js"() { + init_esm(); + dividerTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js + var DividerRole; + var init_divider_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js"() { + DividerRole = { + /** + * The divider semantically separates content + */ + separator: "separator", + /** + * The divider has no semantic value and is for visual presentation only. + */ + presentation: "presentation" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js + var Divider; + var init_divider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_divider_options(); + Divider = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = DividerRole.separator; + this.orientation = Orientation.horizontal; + } + }; + __decorate([ + attr + ], Divider.prototype, "role", void 0); + __decorate([ + attr + ], Divider.prototype, "orientation", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js + var init_divider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js"() { + init_divider_template(); + init_divider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js + var FlipperDirection; + var init_flipper_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js"() { + FlipperDirection = { + next: "next", + previous: "previous" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js + var init_flipper_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js + var Flipper; + var init_flipper = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_flipper_options(); + Flipper = class extends FoundationElement { + constructor() { + super(...arguments); + this.hiddenFromAT = true; + this.direction = FlipperDirection.next; + } + /** + * Simulate a click event when the flipper has focus and the user hits enter or space keys + * Blur focus if the user hits escape key + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + if (!this.hiddenFromAT) { + const key = e.key; + if (key === "Enter" || key === "Space") { + this.$emit("click", e); + } + if (key === "Escape") { + this.blur(); + } + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Flipper.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "aria-hidden", converter: booleanConverter }) + ], Flipper.prototype, "hiddenFromAT", void 0); + __decorate([ + attr + ], Flipper.prototype, "direction", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js + var init_flipper2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js"() { + init_flipper_template(); + init_flipper(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js + var init_form_associated2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js"() { + init_form_associated(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js + var init_foundation_element2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js"() { + init_foundation_element(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js + var listboxOptionTemplate; + var init_listbox_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js"() { + init_esm(); + init_start_end(); + listboxOptionTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js + var init_listbox_option2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js"() { + init_listbox_option(); + init_listbox_option_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js + var ListboxElement; + var init_listbox_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + ListboxElement = class extends Listbox { + constructor() { + super(...arguments); + this.activeIndex = -1; + this.rangeStartIndex = -1; + } + /** + * Returns the last checked option. + * + * @internal + */ + get activeOption() { + return this.options[this.activeIndex]; + } + /** + * Returns the list of checked options. + * + * @internal + */ + get checkedOptions() { + var _a; + return (_a = this.options) === null || _a === void 0 ? void 0 : _a.filter((o) => o.checked); + } + /** + * Returns the index of the first selected option. + * + * @internal + */ + get firstSelectedOptionIndex() { + return this.options.indexOf(this.firstSelectedOption); + } + /** + * Updates the `ariaActiveDescendant` property when the active index changes. + * + * @param prev - the previous active index + * @param next - the next active index + * + * @internal + */ + activeIndexChanged(prev, next) { + var _a, _b; + this.ariaActiveDescendant = (_b = (_a = this.options[next]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ""; + this.focusAndScrollOptionIntoView(); + } + /** + * Toggles the checked state for the currently active option. + * + * @remarks + * Multiple-selection mode only. + * + * @internal + */ + checkActiveIndex() { + if (!this.multiple) { + return; + } + const activeItem = this.activeOption; + if (activeItem) { + activeItem.checked = true; + } + } + /** + * Sets the active index to the first option and marks it as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkFirstOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex + 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and sets the matching option as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkLastOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.options.length); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = this.options.length - 1; + this.checkActiveIndex(); + } + /** + * @override + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("focusout", this.focusoutHandler); + } + /** + * @override + * @internal + */ + disconnectedCallback() { + this.removeEventListener("focusout", this.focusoutHandler); + super.disconnectedCallback(); + } + /** + * Increments the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkNextOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.activeIndex + 1); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex += this.activeIndex < this.options.length - 1 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkPreviousOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + if (this.checkedOptions.length === 1) { + this.rangeStartIndex += 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.activeIndex, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex -= this.activeIndex > 0 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Handles click events for listbox options. + * + * @param e - the event object + * + * @override + * @internal + */ + clickHandler(e) { + var _a; + if (!this.multiple) { + return super.clickHandler(e); + } + const captured = (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest(`[role=option]`); + if (!captured || captured.disabled) { + return; + } + this.uncheckAllOptions(); + this.activeIndex = this.options.indexOf(captured); + this.checkActiveIndex(); + this.toggleSelectedForAllCheckedOptions(); + return true; + } + /** + * @override + * @internal + */ + focusAndScrollOptionIntoView() { + super.focusAndScrollOptionIntoView(this.activeOption); + } + /** + * In multiple-selection mode: + * If any options are selected, the first selected option is checked when + * the listbox receives focus. If no options are selected, the first + * selectable option is checked. + * + * @override + * @internal + */ + focusinHandler(e) { + if (!this.multiple) { + return super.focusinHandler(e); + } + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.uncheckAllOptions(); + if (this.activeIndex === -1) { + this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0; + } + this.checkActiveIndex(); + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Unchecks all options when the listbox loses focus. + * + * @internal + */ + focusoutHandler(e) { + if (this.multiple) { + this.uncheckAllOptions(); + } + } + /** + * Handles keydown actions for listbox navigation and typeahead + * + * @override + * @internal + */ + keydownHandler(e) { + if (!this.multiple) { + return super.keydownHandler(e); + } + if (this.disabled) { + return true; + } + const { key, shiftKey } = e; + this.shouldSkipFocus = false; + switch (key) { + // Select the first available option + case keyHome: { + this.checkFirstOption(shiftKey); + return; + } + // Select the next selectable option + case keyArrowDown: { + this.checkNextOption(shiftKey); + return; + } + // Select the previous selectable option + case keyArrowUp: { + this.checkPreviousOption(shiftKey); + return; + } + // Select the last available option + case keyEnd: { + this.checkLastOption(shiftKey); + return; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEscape: { + this.uncheckAllOptions(); + this.checkActiveIndex(); + return true; + } + case keySpace: { + e.preventDefault(); + if (this.typeAheadExpired) { + this.toggleSelectedForAllCheckedOptions(); + return; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @override + * @internal + */ + mousedownHandler(e) { + if (e.offsetX >= 0 && e.offsetX <= this.scrollWidth) { + return super.mousedownHandler(e); + } + } + /** + * Switches between single-selection and multi-selection mode. + * + * @internal + */ + multipleChanged(prev, next) { + var _a; + this.ariaMultiSelectable = next ? "true" : null; + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + o.checked = next ? false : void 0; + }); + this.setSelectedOptions(); + } + /** + * Sets an option as selected and gives it focus. + * + * @override + * @public + */ + setSelectedOptions() { + if (!this.multiple) { + super.setSelectedOptions(); + return; + } + if (this.$fastController.isConnected && this.options) { + this.selectedOptions = this.options.filter((o) => o.selected); + this.focusAndScrollOptionIntoView(); + } + } + /** + * Ensures the size is a positive integer when the property is updated. + * + * @param prev - the previous size value + * @param next - the current size value + * + * @internal + */ + sizeChanged(prev, next) { + var _a; + const size = Math.max(0, parseInt((_a = next === null || next === void 0 ? void 0 : next.toFixed()) !== null && _a !== void 0 ? _a : "", 10)); + if (size !== next) { + DOM.queueUpdate(() => { + this.size = size; + }); + } + } + /** + * Toggles the selected state of the provided options. If any provided items + * are in an unselected state, all items are set to selected. If every + * provided item is selected, they are all unselected. + * + * @internal + */ + toggleSelectedForAllCheckedOptions() { + const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled); + const force = !enabledCheckedOptions.every((o) => o.selected); + enabledCheckedOptions.forEach((o) => o.selected = force); + this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]); + this.setSelectedOptions(); + } + /** + * @override + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (!this.multiple) { + super.typeaheadBufferChanged(prev, next); + return; + } + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + const activeIndex = this.options.indexOf(typeaheadMatches[0]); + if (activeIndex > -1) { + this.activeIndex = activeIndex; + this.uncheckAllOptions(); + this.checkActiveIndex(); + } + this.typeAheadExpired = false; + } + } + /** + * Unchecks all options. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - reset the rangeStartIndex + * + * @internal + */ + uncheckAllOptions(preserveChecked = false) { + this.options.forEach((o) => o.checked = this.multiple ? false : void 0); + if (!preserveChecked) { + this.rangeStartIndex = -1; + } + } + }; + __decorate([ + observable + ], ListboxElement.prototype, "activeIndex", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxElement.prototype, "multiple", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], ListboxElement.prototype, "size", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js + var init_listbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js + var init_listbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js"() { + init_listbox(); + init_listbox_element(); + init_listbox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js + var PickerMenu; + var init_picker_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js"() { + init_tslib_es6(); + init_dist2(); + init_esm(); + init_foundation_element(); + PickerMenu = class extends FoundationElement { + constructor() { + super(...arguments); + this.optionElements = []; + } + menuElementsChanged() { + this.updateOptions(); + } + headerElementsChanged() { + this.updateOptions(); + } + footerElementsChanged() { + this.updateOptions(); + } + updateOptions() { + this.optionElements.splice(0, this.optionElements.length); + this.addSlottedListItems(this.headerElements); + this.addSlottedListItems(this.menuElements); + this.addSlottedListItems(this.footerElements); + this.$emit("optionsupdated", { bubbles: false }); + } + addSlottedListItems(slotChildren) { + if (slotChildren === void 0) { + return; + } + slotChildren.forEach((child) => { + if (child.nodeType === 1 && child.getAttribute("role") === "listitem") { + child.id = child.id || uniqueId("option-"); + this.optionElements.push(child); + } + }); + } + }; + __decorate([ + observable + ], PickerMenu.prototype, "menuElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "headerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "footerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "suggestionsAvailableText", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js + var defaultContentsTemplate, PickerMenuOption; + var init_picker_menu_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + defaultContentsTemplate = html` + +`; + PickerMenuOption = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.disconnectView(); + } + handleClick(e) { + if (e.defaultPrevented) { + return false; + } + this.handleInvoked(); + return false; + } + handleInvoked() { + this.$emit("pickeroptioninvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerMenuOption.prototype, "value", void 0); + __decorate([ + observable + ], PickerMenuOption.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js + var init_picker_list = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js + var defaultContentsTemplate2, PickerListItem; + var init_picker_list_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + defaultContentsTemplate2 = html` + +`; + PickerListItem = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + this.disconnectView(); + super.disconnectedCallback(); + } + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + if (e.key === keyEnter) { + this.handleInvoke(); + return false; + } + return true; + } + handleClick(e) { + if (!e.defaultPrevented) { + this.handleInvoke(); + } + return false; + } + handleInvoke() { + this.$emit("pickeriteminvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate2.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerListItem.prototype, "value", void 0); + __decorate([ + observable + ], PickerListItem.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js + var init_picker_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js + var _Picker, FormAssociatedPicker; + var init_picker_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Picker = class extends FoundationElement { + }; + FormAssociatedPicker = class extends FormAssociated(_Picker) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js + var pickerInputTemplate, Picker; + var init_picker = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_anchored_region2(); + init_picker_menu_option(); + init_picker_list_item(); + init_picker_form_associated(); + pickerInputTemplate = html` + +`; + Picker = class extends FormAssociatedPicker { + constructor() { + super(...arguments); + this.selection = ""; + this.filterSelected = true; + this.filterQuery = true; + this.noSuggestionsText = "No suggestions available"; + this.suggestionsAvailableText = "Suggestions available"; + this.loadingText = "Loading suggestions"; + this.menuPlacement = "bottom-fill"; + this.showLoading = false; + this.optionsList = []; + this.filteredOptionsList = []; + this.flyoutOpen = false; + this.menuFocusIndex = -1; + this.showNoOptions = false; + this.selectedItems = []; + this.inputElementView = null; + this.handleTextInput = (e) => { + this.query = this.inputElement.value; + }; + this.handleInputClick = (e) => { + e.preventDefault(); + this.toggleFlyout(true); + }; + this.setRegionProps = () => { + if (!this.flyoutOpen) { + return; + } + if (this.region === null || this.region === void 0) { + DOM.queueUpdate(this.setRegionProps); + return; + } + this.region.anchorElement = this.inputElement; + }; + this.configLookup = { + top: FlyoutPosTop, + bottom: FlyoutPosBottom, + tallest: FlyoutPosTallest, + "top-fill": FlyoutPosTopFill, + "bottom-fill": FlyoutPosBottomFill, + "tallest-fill": FlyoutPosTallestFill + }; + } + selectionChanged() { + if (this.$fastController.isConnected) { + this.handleSelectionChange(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.value = this.selection; + this.validate(); + } + } + } + optionsChanged() { + this.optionsList = this.options.split(",").map((opt) => opt.trim()).filter((opt) => opt !== ""); + } + menuPlacementChanged() { + if (this.$fastController.isConnected) { + this.updateMenuConfig(); + } + } + showLoadingChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + listItemTemplateChanged() { + this.updateListItemTemplate(); + } + defaultListItemTemplateChanged() { + this.updateListItemTemplate(); + } + menuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + defaultMenuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + optionsListChanged() { + this.updateFilteredOptions(); + } + queryChanged() { + if (this.$fastController.isConnected) { + if (this.inputElement.value !== this.query) { + this.inputElement.value = this.query; + } + this.updateFilteredOptions(); + this.$emit("querychange", { bubbles: false }); + } + } + filteredOptionsListChanged() { + if (this.$fastController.isConnected) { + this.showNoOptions = this.filteredOptionsList.length === 0 && this.menuElement.querySelectorAll('[role="listitem"]').length === 0; + this.setFocusedOption(this.showNoOptions ? -1 : 0); + } + } + flyoutOpenChanged() { + if (this.flyoutOpen) { + DOM.queueUpdate(this.setRegionProps); + this.$emit("menuopening", { bubbles: false }); + } else { + this.$emit("menuclosing", { bubbles: false }); + } + } + showNoOptionsChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.listElement = document.createElement(this.selectedListTag); + this.appendChild(this.listElement); + this.itemsPlaceholderElement = document.createComment(""); + this.listElement.append(this.itemsPlaceholderElement); + this.inputElementView = pickerInputTemplate.render(this, this.listElement); + const match = this.menuTag.toUpperCase(); + this.menuElement = Array.from(this.children).find((element) => { + return element.tagName === match; + }); + if (this.menuElement === void 0) { + this.menuElement = document.createElement(this.menuTag); + this.appendChild(this.menuElement); + } + if (this.menuElement.id === "") { + this.menuElement.id = uniqueId("listbox-"); + } + this.menuId = this.menuElement.id; + this.optionsPlaceholder = document.createComment(""); + this.menuElement.append(this.optionsPlaceholder); + this.updateMenuConfig(); + DOM.queueUpdate(() => this.initialize()); + } + disconnectedCallback() { + super.disconnectedCallback(); + this.toggleFlyout(false); + this.inputElement.removeEventListener("input", this.handleTextInput); + this.inputElement.removeEventListener("click", this.handleInputClick); + if (this.inputElementView !== null) { + this.inputElementView.dispose(); + this.inputElementView = null; + } + } + /** + * Move focus to the input element + * @public + */ + focus() { + this.inputElement.focus(); + } + /** + * Initialize the component. This is delayed a frame to ensure children are connected as well. + */ + initialize() { + this.updateListItemTemplate(); + this.updateOptionTemplate(); + this.itemsRepeatBehavior = new RepeatDirective((x) => x.selectedItems, (x) => x.activeListItemTemplate, { positioning: true }).createBehavior(this.itemsPlaceholderElement); + this.inputElement.addEventListener("input", this.handleTextInput); + this.inputElement.addEventListener("click", this.handleInputClick); + this.$fastController.addBehaviors([this.itemsRepeatBehavior]); + this.menuElement.suggestionsAvailableText = this.suggestionsAvailableText; + this.menuElement.addEventListener("optionsupdated", this.handleMenuOptionsUpdated); + this.optionsRepeatBehavior = new RepeatDirective((x) => x.filteredOptionsList, (x) => x.activeMenuOptionTemplate, { positioning: true }).createBehavior(this.optionsPlaceholder); + this.$fastController.addBehaviors([this.optionsRepeatBehavior]); + this.handleSelectionChange(); + } + /** + * Toggles the menu flyout + */ + toggleFlyout(open) { + if (this.flyoutOpen === open) { + return; + } + if (open && document.activeElement === this.inputElement) { + this.flyoutOpen = open; + DOM.queueUpdate(() => { + if (this.menuElement !== void 0) { + this.setFocusedOption(0); + } else { + this.disableMenu(); + } + }); + return; + } + this.flyoutOpen = false; + this.disableMenu(); + return; + } + /** + * Handle the menu options updated event from the child menu + */ + handleMenuOptionsUpdated(e) { + e.preventDefault(); + if (this.flyoutOpen) { + this.setFocusedOption(0); + } + } + /** + * Handle key down events. + */ + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + // TODO: what should "home" and "end" keys do, exactly? + // + // case keyHome: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.setFocusedOption(0); + // } + // } + // return false; + // } + // case keyEnd: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.toggleFlyout(true); + // this.setFocusedOption(this.menuElement.optionElements.length - 1); + // } + // } + // return false; + // } + case keyArrowDown: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const nextFocusOptionIndex = this.flyoutOpen ? Math.min(this.menuFocusIndex + 1, this.menuElement.optionElements.length - 1) : 0; + this.setFocusedOption(nextFocusOptionIndex); + } + return false; + } + case keyArrowUp: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const previousFocusOptionIndex = this.flyoutOpen ? Math.max(this.menuFocusIndex - 1, 0) : 0; + this.setFocusedOption(previousFocusOptionIndex); + } + return false; + } + case keyEscape: { + this.toggleFlyout(false); + return false; + } + case keyEnter: { + if (this.menuFocusIndex !== -1 && this.menuElement.optionElements.length > this.menuFocusIndex) { + this.menuElement.optionElements[this.menuFocusIndex].click(); + } + return false; + } + case keyArrowRight: { + if (document.activeElement !== this.inputElement) { + this.incrementFocusedItem(1); + return false; + } + return true; + } + case keyArrowLeft: { + if (this.inputElement.selectionStart === 0) { + this.incrementFocusedItem(-1); + return false; + } + return true; + } + case keyDelete: + case keyBackspace: { + if (document.activeElement === null) { + return true; + } + if (document.activeElement === this.inputElement) { + if (this.inputElement.selectionStart === 0) { + this.selection = this.selectedItems.slice(0, this.selectedItems.length - 1).toString(); + this.toggleFlyout(false); + return false; + } + return true; + } + const selectedItems = Array.from(this.listElement.children); + const currentFocusedItemIndex = selectedItems.indexOf(document.activeElement); + if (currentFocusedItemIndex > -1) { + this.selection = this.selectedItems.splice(currentFocusedItemIndex, 1).toString(); + DOM.queueUpdate(() => { + selectedItems[Math.min(selectedItems.length, currentFocusedItemIndex)].focus(); + }); + return false; + } + return true; + } + } + this.toggleFlyout(true); + return true; + } + /** + * Handle focus in events. + */ + handleFocusIn(e) { + return false; + } + /** + * Handle focus out events. + */ + handleFocusOut(e) { + if (this.menuElement === void 0 || !this.menuElement.contains(e.relatedTarget)) { + this.toggleFlyout(false); + } + return false; + } + /** + * The list of selected items has changed + */ + handleSelectionChange() { + if (this.selectedItems.toString() === this.selection) { + return; + } + this.selectedItems = this.selection === "" ? [] : this.selection.split(","); + this.updateFilteredOptions(); + DOM.queueUpdate(() => { + this.checkMaxItems(); + }); + this.$emit("selectionchange", { bubbles: false }); + } + /** + * Anchored region is loaded, menu and options exist in the DOM. + */ + handleRegionLoaded(e) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + this.$emit("menuloaded", { bubbles: false }); + }); + } + /** + * Checks if the maximum number of items has been chosen and updates the ui. + */ + checkMaxItems() { + if (this.inputElement === void 0) { + return; + } + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + if (document.activeElement === this.inputElement) { + const selectedItemInstances = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + selectedItemInstances[selectedItemInstances.length - 1].focus(); + } + this.inputElement.hidden = true; + } else { + this.inputElement.hidden = false; + } + } + /** + * A list item has been invoked. + */ + handleItemInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerListItem) { + const listItems = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + const itemIndex = listItems.indexOf(e.target); + if (itemIndex !== -1) { + const newSelection = this.selectedItems.slice(); + newSelection.splice(itemIndex, 1); + this.selection = newSelection.toString(); + DOM.queueUpdate(() => this.incrementFocusedItem(0)); + } + return false; + } + return true; + } + /** + * A menu option has been invoked. + */ + handleOptionInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerMenuOption) { + if (e.target.value !== void 0) { + this.selection = `${this.selection}${this.selection === "" ? "" : ","}${e.target.value}`; + } + this.inputElement.value = ""; + this.query = ""; + this.inputElement.focus(); + this.toggleFlyout(false); + return false; + } + return true; + } + /** + * Increments the focused list item by the specified amount + */ + incrementFocusedItem(increment) { + if (this.selectedItems.length === 0) { + this.inputElement.focus(); + return; + } + const selectedItemsAsElements = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + if (document.activeElement !== null) { + let currentFocusedItemIndex = selectedItemsAsElements.indexOf(document.activeElement); + if (currentFocusedItemIndex === -1) { + currentFocusedItemIndex = selectedItemsAsElements.length; + } + const newFocusedItemIndex = Math.min(selectedItemsAsElements.length, Math.max(0, currentFocusedItemIndex + increment)); + if (newFocusedItemIndex === selectedItemsAsElements.length) { + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + selectedItemsAsElements[newFocusedItemIndex - 1].focus(); + } else { + this.inputElement.focus(); + } + } else { + selectedItemsAsElements[newFocusedItemIndex].focus(); + } + } + } + /** + * Disables the menu. Note that the menu can be open, just doens't have any valid options on display. + */ + disableMenu() { + var _a, _b, _c; + this.menuFocusIndex = -1; + this.menuFocusOptionId = void 0; + (_a = this.inputElement) === null || _a === void 0 ? void 0 : _a.removeAttribute("aria-activedescendant"); + (_b = this.inputElement) === null || _b === void 0 ? void 0 : _b.removeAttribute("aria-owns"); + (_c = this.inputElement) === null || _c === void 0 ? void 0 : _c.removeAttribute("aria-expanded"); + } + /** + * Sets the currently focused menu option by index + */ + setFocusedOption(optionIndex) { + if (!this.flyoutOpen || optionIndex === -1 || this.showNoOptions || this.showLoading) { + this.disableMenu(); + return; + } + if (this.menuElement.optionElements.length === 0) { + return; + } + this.menuElement.optionElements.forEach((element) => { + element.setAttribute("aria-selected", "false"); + }); + this.menuFocusIndex = optionIndex; + if (this.menuFocusIndex > this.menuElement.optionElements.length - 1) { + this.menuFocusIndex = this.menuElement.optionElements.length - 1; + } + this.menuFocusOptionId = this.menuElement.optionElements[this.menuFocusIndex].id; + this.inputElement.setAttribute("aria-owns", this.menuId); + this.inputElement.setAttribute("aria-expanded", "true"); + this.inputElement.setAttribute("aria-activedescendant", this.menuFocusOptionId); + const focusedOption = this.menuElement.optionElements[this.menuFocusIndex]; + focusedOption.setAttribute("aria-selected", "true"); + this.menuElement.scrollTo(0, focusedOption.offsetTop); + } + /** + * Updates the template used for the list item repeat behavior + */ + updateListItemTemplate() { + var _a; + this.activeListItemTemplate = (_a = this.listItemTemplate) !== null && _a !== void 0 ? _a : this.defaultListItemTemplate; + } + /** + * Updates the template used for the menu option repeat behavior + */ + updateOptionTemplate() { + var _a; + this.activeMenuOptionTemplate = (_a = this.menuOptionTemplate) !== null && _a !== void 0 ? _a : this.defaultMenuOptionTemplate; + } + /** + * Updates the filtered options array + */ + updateFilteredOptions() { + this.filteredOptionsList = this.optionsList.slice(0); + if (this.filterSelected) { + this.filteredOptionsList = this.filteredOptionsList.filter((el) => this.selectedItems.indexOf(el) === -1); + } + if (this.filterQuery && this.query !== "" && this.query !== void 0) { + this.filteredOptionsList = this.filteredOptionsList.filter((el) => el.indexOf(this.query) !== -1); + } + } + /** + * Updates the menu configuration + */ + updateMenuConfig() { + let newConfig = this.configLookup[this.menuPlacement]; + if (newConfig === null) { + newConfig = FlyoutPosBottomFill; + } + this.menuConfig = Object.assign(Object.assign({}, newConfig), { autoUpdateMode: "auto", fixedPlacement: true, horizontalViewportLock: false, verticalViewportLock: false }); + } + }; + __decorate([ + attr({ attribute: "selection" }) + ], Picker.prototype, "selection", void 0); + __decorate([ + attr({ attribute: "options" }) + ], Picker.prototype, "options", void 0); + __decorate([ + attr({ attribute: "filter-selected", mode: "boolean" }) + ], Picker.prototype, "filterSelected", void 0); + __decorate([ + attr({ attribute: "filter-query", mode: "boolean" }) + ], Picker.prototype, "filterQuery", void 0); + __decorate([ + attr({ attribute: "max-selected" }) + ], Picker.prototype, "maxSelected", void 0); + __decorate([ + attr({ attribute: "no-suggestions-text" }) + ], Picker.prototype, "noSuggestionsText", void 0); + __decorate([ + attr({ attribute: "suggestions-available-text" }) + ], Picker.prototype, "suggestionsAvailableText", void 0); + __decorate([ + attr({ attribute: "loading-text" }) + ], Picker.prototype, "loadingText", void 0); + __decorate([ + attr({ attribute: "label" }) + ], Picker.prototype, "label", void 0); + __decorate([ + attr({ attribute: "labelledby" }) + ], Picker.prototype, "labelledBy", void 0); + __decorate([ + attr({ attribute: "placeholder" }) + ], Picker.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "menu-placement" }) + ], Picker.prototype, "menuPlacement", void 0); + __decorate([ + observable + ], Picker.prototype, "showLoading", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "optionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "query", void 0); + __decorate([ + observable + ], Picker.prototype, "filteredOptionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "flyoutOpen", void 0); + __decorate([ + observable + ], Picker.prototype, "menuId", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedListTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusIndex", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusOptionId", void 0); + __decorate([ + observable + ], Picker.prototype, "showNoOptions", void 0); + __decorate([ + observable + ], Picker.prototype, "menuConfig", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js + var init_picker_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js + var init_picker_menu_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js + var init_picker_list_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js + var init_picker_list_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js + var init_picker2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js"() { + init_picker_template(); + init_picker(); + init_picker_menu_template(); + init_picker_menu(); + init_picker_menu_option_template(); + init_picker_menu_option(); + init_picker_list_template(); + init_picker_list(); + init_picker_list_item_template(); + init_picker_list_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js + var MenuItemRole, roleForMenuItem; + var init_menu_item_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js"() { + MenuItemRole = { + /** + * The menu item has a "menuitem" role + */ + menuitem: "menuitem", + /** + * The menu item has a "menuitemcheckbox" role + */ + menuitemcheckbox: "menuitemcheckbox", + /** + * The menu item has a "menuitemradio" role + */ + menuitemradio: "menuitemradio" + }; + roleForMenuItem = { + [MenuItemRole.menuitem]: "menuitem", + [MenuItemRole.menuitemcheckbox]: "menuitemcheckbox", + [MenuItemRole.menuitemradio]: "menuitemradio" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js + var MenuItem; + var init_menu_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_start_end(); + init_direction(); + init_apply_mixins(); + init_menu_item_options(); + MenuItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = MenuItemRole.menuitem; + this.hasSubmenu = false; + this.currentDirection = Direction.ltr; + this.focusSubmenuOnLoad = false; + this.handleMenuItemKeyDown = (e) => { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.invoke(); + return false; + case keyArrowRight: + this.expandAndFocus(); + return false; + case keyArrowLeft: + if (this.expanded) { + this.expanded = false; + this.focus(); + return false; + } + } + return true; + }; + this.handleMenuItemClick = (e) => { + if (e.defaultPrevented || this.disabled) { + return false; + } + this.invoke(); + return false; + }; + this.submenuLoaded = () => { + if (!this.focusSubmenuOnLoad) { + return; + } + this.focusSubmenuOnLoad = false; + if (this.hasSubmenu) { + this.submenu.focus(); + this.setAttribute("tabindex", "-1"); + } + }; + this.handleMouseOver = (e) => { + if (this.disabled || !this.hasSubmenu || this.expanded) { + return false; + } + this.expanded = true; + return false; + }; + this.handleMouseOut = (e) => { + if (!this.expanded || this.contains(document.activeElement)) { + return false; + } + this.expanded = false; + return false; + }; + this.expandAndFocus = () => { + if (!this.hasSubmenu) { + return; + } + this.focusSubmenuOnLoad = true; + this.expanded = true; + }; + this.invoke = () => { + if (this.disabled) { + return; + } + switch (this.role) { + case MenuItemRole.menuitemcheckbox: + this.checked = !this.checked; + break; + case MenuItemRole.menuitem: + this.updateSubmenu(); + if (this.hasSubmenu) { + this.expandAndFocus(); + } else { + this.$emit("change"); + } + break; + case MenuItemRole.menuitemradio: + if (!this.checked) { + this.checked = true; + } + break; + } + }; + this.updateSubmenu = () => { + this.submenu = this.domChildren().find((element) => { + return element.getAttribute("role") === "menu"; + }); + this.hasSubmenu = this.submenu === void 0 ? false : true; + }; + } + expandedChanged(oldValue) { + if (this.$fastController.isConnected) { + if (this.submenu === void 0) { + return; + } + if (this.expanded === false) { + this.submenu.collapseExpandedItem(); + } else { + this.currentDirection = getDirection(this); + } + this.$emit("expanded-change", this, { bubbles: false }); + } + } + checkedChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.$emit("change"); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.updateSubmenu(); + }); + if (!this.startColumnCount) { + this.startColumnCount = 1; + } + this.observer = new MutationObserver(this.updateSubmenu); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.submenu = void 0; + if (this.observer !== void 0) { + this.observer.disconnect(); + this.observer = void 0; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "disabled", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "expanded", void 0); + __decorate([ + observable + ], MenuItem.prototype, "startColumnCount", void 0); + __decorate([ + attr + ], MenuItem.prototype, "role", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "checked", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenuRegion", void 0); + __decorate([ + observable + ], MenuItem.prototype, "hasSubmenu", void 0); + __decorate([ + observable + ], MenuItem.prototype, "currentDirection", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenu", void 0); + applyMixins(MenuItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js + var init_menu_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js + var init_menu_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js"() { + init_menu_item_template(); + init_menu_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js + var init_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js + var Menu; + var init_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_menu_item2(); + init_foundation_element(); + Menu = class _Menu extends FoundationElement { + constructor() { + super(...arguments); + this.expandedItem = null; + this.focusIndex = -1; + this.isNestedMenu = () => { + return this.parentElement !== null && isHTMLElement(this.parentElement) && this.parentElement.getAttribute("role") === "menuitem"; + }; + this.handleFocusOut = (e) => { + if (!this.contains(e.relatedTarget) && this.menuItems !== void 0) { + this.collapseExpandedItem(); + const focusIndex = this.menuItems.findIndex(this.isFocusableElement); + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.menuItems[focusIndex].setAttribute("tabindex", "0"); + this.focusIndex = focusIndex; + } + }; + this.handleItemFocus = (e) => { + const targetItem = e.target; + if (this.menuItems !== void 0 && targetItem !== this.menuItems[this.focusIndex]) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.focusIndex = this.menuItems.indexOf(targetItem); + targetItem.setAttribute("tabindex", "0"); + } + }; + this.handleExpandedChanged = (e) => { + if (e.defaultPrevented || e.target === null || this.menuItems === void 0 || this.menuItems.indexOf(e.target) < 0) { + return; + } + e.preventDefault(); + const changedItem = e.target; + if (this.expandedItem !== null && changedItem === this.expandedItem && changedItem.expanded === false) { + this.expandedItem = null; + return; + } + if (changedItem.expanded) { + if (this.expandedItem !== null && this.expandedItem !== changedItem) { + this.expandedItem.expanded = false; + } + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.expandedItem = changedItem; + this.focusIndex = this.menuItems.indexOf(changedItem); + changedItem.setAttribute("tabindex", "0"); + } + }; + this.removeItemListeners = () => { + if (this.menuItems !== void 0) { + this.menuItems.forEach((item) => { + item.removeEventListener("expanded-change", this.handleExpandedChanged); + item.removeEventListener("focus", this.handleItemFocus); + }); + } + }; + this.setItems = () => { + const newItems = this.domChildren(); + this.removeItemListeners(); + this.menuItems = newItems; + const menuItems = this.menuItems.filter(this.isMenuItemElement); + if (menuItems.length) { + this.focusIndex = 0; + } + function elementIndent(el) { + const role = el.getAttribute("role"); + const startSlot = el.querySelector("[slot=start]"); + if (role !== MenuItemRole.menuitem && startSlot === null) { + return 1; + } else if (role === MenuItemRole.menuitem && startSlot !== null) { + return 1; + } else if (role !== MenuItemRole.menuitem && startSlot !== null) { + return 2; + } else { + return 0; + } + } + const indent = menuItems.reduce((accum, current) => { + const elementValue = elementIndent(current); + return accum > elementValue ? accum : elementValue; + }, 0); + menuItems.forEach((item, index) => { + item.setAttribute("tabindex", index === 0 ? "0" : "-1"); + item.addEventListener("expanded-change", this.handleExpandedChanged); + item.addEventListener("focus", this.handleItemFocus); + if (item instanceof MenuItem || "startColumnCount" in item) { + item.startColumnCount = indent; + } + }); + }; + this.changeHandler = (e) => { + if (this.menuItems === void 0) { + return; + } + const changedMenuItem = e.target; + const changeItemIndex = this.menuItems.indexOf(changedMenuItem); + if (changeItemIndex === -1) { + return; + } + if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked === true) { + for (let i = changeItemIndex - 1; i >= 0; --i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + const maxIndex = this.menuItems.length - 1; + for (let i = changeItemIndex + 1; i <= maxIndex; ++i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + } + }; + this.isMenuItemElement = (el) => { + return isHTMLElement(el) && _Menu.focusableElementRoles.hasOwnProperty(el.getAttribute("role")); + }; + this.isFocusableElement = (el) => { + return this.isMenuItemElement(el); + }; + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.menuItems !== void 0) { + this.setItems(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.setItems(); + }); + this.addEventListener("change", this.changeHandler); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeItemListeners(); + this.menuItems = void 0; + this.removeEventListener("change", this.changeHandler); + } + /** + * Focuses the first item in the menu. + * + * @public + */ + focus() { + this.setFocus(0, 1); + } + /** + * Collapses any expanded menu items. + * + * @public + */ + collapseExpandedItem() { + if (this.expandedItem !== null) { + this.expandedItem.expanded = false; + this.expandedItem = null; + } + } + /** + * @internal + */ + handleMenuKeyDown(e) { + if (e.defaultPrevented || this.menuItems === void 0) { + return; + } + switch (e.key) { + case keyArrowDown: + this.setFocus(this.focusIndex + 1, 1); + return; + case keyArrowUp: + this.setFocus(this.focusIndex - 1, -1); + return; + case keyEnd: + this.setFocus(this.menuItems.length - 1, -1); + return; + case keyHome: + this.setFocus(0, 1); + return; + default: + return true; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + setFocus(focusIndex, adjustment) { + if (this.menuItems === void 0) { + return; + } + while (focusIndex >= 0 && focusIndex < this.menuItems.length) { + const child = this.menuItems[focusIndex]; + if (this.isFocusableElement(child)) { + if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + } + this.focusIndex = focusIndex; + child.setAttribute("tabindex", "0"); + child.focus(); + break; + } + focusIndex += adjustment; + } + } + }; + Menu.focusableElementRoles = roleForMenuItem; + __decorate([ + observable + ], Menu.prototype, "items", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js + var init_menu2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js"() { + init_menu_template(); + init_menu(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js + var init_number_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js + var _TextField, FormAssociatedTextField; + var init_text_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextField = class extends FoundationElement { + }; + FormAssociatedTextField = class extends FormAssociated(_TextField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js + var TextFieldType; + var init_text_field_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js"() { + TextFieldType = { + /** + * An email TextField + */ + email: "email", + /** + * A password TextField + */ + password: "password", + /** + * A telephone TextField + */ + tel: "tel", + /** + * A text TextField + */ + text: "text", + /** + * A URL TextField + */ + url: "url" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js + var TextField, DelegatesARIATextbox; + var init_text_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_text_field_form_associated(); + init_text_field_options(); + TextField = class extends FormAssociatedTextField { + constructor() { + super(...arguments); + this.type = TextFieldType.text; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + typeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + this.validate(); + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the text field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], TextField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "autofocus", void 0); + __decorate([ + attr + ], TextField.prototype, "placeholder", void 0); + __decorate([ + attr + ], TextField.prototype, "type", void 0); + __decorate([ + attr + ], TextField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "minlength", void 0); + __decorate([ + attr + ], TextField.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextField.prototype, "defaultSlottedNodes", void 0); + DelegatesARIATextbox = class { + }; + applyMixins(DelegatesARIATextbox, ARIAGlobalStatesAndProperties); + applyMixins(TextField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js + var _NumberField, FormAssociatedNumberField; + var init_number_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _NumberField = class extends FoundationElement { + }; + FormAssociatedNumberField = class extends FormAssociated(_NumberField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js + var NumberField; + var init_number_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_text_field(); + init_number_field_form_associated(); + NumberField = class extends FormAssociatedNumberField { + constructor() { + super(...arguments); + this.hideStep = false; + this.step = 1; + this.isUserInput = false; + } + /** + * Ensures that the max is greater than the min and that the value + * is less than the max + * @param previous - the previous max value + * @param next - updated max value + * + * @internal + */ + maxChanged(previous, next) { + var _a; + this.max = Math.max(next, (_a = this.min) !== null && _a !== void 0 ? _a : next); + const min = Math.min(this.min, this.max); + if (this.min !== void 0 && this.min !== min) { + this.min = min; + } + this.value = this.getValidValue(this.value); + } + /** + * Ensures that the min is less than the max and that the value + * is greater than the min + * @param previous - previous min value + * @param next - updated min value + * + * @internal + */ + minChanged(previous, next) { + var _a; + this.min = Math.min(next, (_a = this.max) !== null && _a !== void 0 ? _a : next); + const max = Math.max(this.min, this.max); + if (this.max !== void 0 && this.max !== max) { + this.max = max; + } + this.value = this.getValidValue(this.value); + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * Validates that the value is a number between the min and max + * @param previous - previous stored value + * @param next - value being updated + * @param updateControl - should the text field be updated with value, defaults to true + * @internal + */ + valueChanged(previous, next) { + this.value = this.getValidValue(next); + if (next !== this.value) { + return; + } + if (this.control && !this.isUserInput) { + this.control.value = this.value; + } + super.valueChanged(previous, this.value); + if (previous !== void 0 && !this.isUserInput) { + this.$emit("input"); + this.$emit("change"); + } + this.isUserInput = false; + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Sets the internal value to a valid number between the min and max properties + * @param value - user input + * + * @internal + */ + getValidValue(value) { + var _a, _b; + let validValue = parseFloat(parseFloat(value).toPrecision(12)); + if (isNaN(validValue)) { + validValue = ""; + } else { + validValue = Math.min(validValue, (_a = this.max) !== null && _a !== void 0 ? _a : validValue); + validValue = Math.max(validValue, (_b = this.min) !== null && _b !== void 0 ? _b : validValue).toString(); + } + return validValue; + } + /** + * Increments the value using the step value + * + * @public + */ + stepUp() { + const value = parseFloat(this.value); + const stepUpValue = !isNaN(value) ? value + this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? this.step : 0; + this.value = stepUpValue.toString(); + } + /** + * Decrements the value using the step value + * + * @public + */ + stepDown() { + const value = parseFloat(this.value); + const stepDownValue = !isNaN(value) ? value - this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? 0 - this.step : 0; + this.value = stepDownValue.toString(); + } + /** + * Sets up the initial state of the number field + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "number"); + this.validate(); + this.control.value = this.value; + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the number field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, ""); + this.isUserInput = true; + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** + * Handles the internal control's `keydown` event + * @internal + */ + handleKeyDown(e) { + const key = e.key; + switch (key) { + case keyArrowUp: + this.stepUp(); + return false; + case keyArrowDown: + this.stepDown(); + return false; + } + return true; + } + /** + * Handles populating the input field with a validated value when + * leaving the input field. + * @internal + */ + handleBlur() { + this.control.value = this.value; + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], NumberField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], NumberField.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "hide-step", mode: "boolean" }) + ], NumberField.prototype, "hideStep", void 0); + __decorate([ + attr + ], NumberField.prototype, "placeholder", void 0); + __decorate([ + attr + ], NumberField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "minlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "size", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "step", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "min", void 0); + __decorate([ + observable + ], NumberField.prototype, "defaultSlottedNodes", void 0); + applyMixins(NumberField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js + var init_number_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js"() { + init_number_field_template(); + init_number_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js + var progressSegments, progressRingTemplate; + var init_progress_ring_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js"() { + init_esm(); + progressSegments = 44; + progressRingTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js + var init_progress_ring = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js"() { + init_progress_ring_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js + var BaseProgress; + var init_base_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + BaseProgress = class extends FoundationElement { + constructor() { + super(...arguments); + this.percentComplete = 0; + } + valueChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + minChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + maxChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updatePercentComplete(); + } + updatePercentComplete() { + const min = typeof this.min === "number" ? this.min : 0; + const max = typeof this.max === "number" ? this.max : 100; + const value = typeof this.value === "number" ? this.value : 0; + const range2 = max - min; + this.percentComplete = range2 === 0 ? 0 : Math.fround((value - min) / range2 * 100); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "value", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "max", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], BaseProgress.prototype, "paused", void 0); + __decorate([ + observable + ], BaseProgress.prototype, "percentComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js + var init_progress_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js + var init_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js"() { + init_base_progress(); + init_progress_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js + var radioGroupTemplate; + var init_radio_group_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js"() { + init_esm(); + init_dist2(); + radioGroupTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js + var RadioGroup; + var init_radio_group = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + RadioGroup = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = Orientation.horizontal; + this.radioChangeHandler = (e) => { + const changedRadio = e.target; + if (changedRadio.checked) { + this.slottedRadioButtons.forEach((radio) => { + if (radio !== changedRadio) { + radio.checked = false; + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + } + }); + this.selectedRadio = changedRadio; + this.value = changedRadio.value; + changedRadio.setAttribute("tabindex", "0"); + this.focusedRadio = changedRadio; + } + e.stopPropagation(); + }; + this.moveToRadioByIndex = (group, index) => { + const radio = group[index]; + if (!this.isInsideToolbar) { + radio.setAttribute("tabindex", "0"); + if (radio.readOnly) { + this.slottedRadioButtons.forEach((nextRadio) => { + if (nextRadio !== radio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + radio.checked = true; + this.selectedRadio = radio; + } + } + this.focusedRadio = radio; + radio.focus(); + }; + this.moveRightOffGroup = () => { + var _a; + (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.moveLeftOffGroup = () => { + var _a; + (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.focusOutHandler = (e) => { + const group = this.slottedRadioButtons; + const radio = e.target; + const index = radio !== null ? group.indexOf(radio) : 0; + const focusedIndex = this.focusedRadio ? group.indexOf(this.focusedRadio) : -1; + if (focusedIndex === 0 && index === focusedIndex || focusedIndex === group.length - 1 && focusedIndex === index) { + if (!this.selectedRadio) { + this.focusedRadio = group[0]; + this.focusedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.focusedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + this.focusedRadio = this.selectedRadio; + if (!this.isInsideFoundationToolbar) { + this.selectedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.selectedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } + } + } + return true; + }; + this.clickHandler = (e) => { + const radio = e.target; + if (radio) { + const group = this.slottedRadioButtons; + if (radio.checked || group.indexOf(radio) === 0) { + radio.setAttribute("tabindex", "0"); + this.selectedRadio = radio; + } else { + radio.setAttribute("tabindex", "-1"); + this.selectedRadio = null; + } + this.focusedRadio = radio; + } + e.preventDefault(); + }; + this.shouldMoveOffGroupToTheRight = (index, group, key) => { + return index === group.length && this.isInsideToolbar && key === keyArrowRight; + }; + this.shouldMoveOffGroupToTheLeft = (group, key) => { + const index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + return index < 0 && this.isInsideToolbar && key === keyArrowLeft; + }; + this.checkFocusedRadio = () => { + if (this.focusedRadio !== null && !this.focusedRadio.readOnly && !this.focusedRadio.checked) { + this.focusedRadio.checked = true; + this.focusedRadio.setAttribute("tabindex", "0"); + this.focusedRadio.focus(); + this.selectedRadio = this.focusedRadio; + } + }; + this.moveRight = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1; + if (this.shouldMoveOffGroupToTheRight(index, group, e.key)) { + this.moveRightOffGroup(); + return; + } else if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index + 1 >= group.length) { + if (this.isInsideToolbar) { + break; + } else { + index = 0; + } + } else { + index += 1; + } + } + }; + this.moveLeft = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + if (this.shouldMoveOffGroupToTheLeft(group, e.key)) { + this.moveLeftOffGroup(); + return; + } + while (index >= 0 && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.keydownHandler = (e) => { + const key = e.key; + if (key in ArrowKeys && this.isInsideFoundationToolbar) { + return true; + } + switch (key) { + case keyEnter: { + this.checkFocusedRadio(); + break; + } + case keyArrowRight: + case keyArrowDown: { + if (this.direction === Direction.ltr) { + this.moveRight(e); + } else { + this.moveLeft(e); + } + break; + } + case keyArrowLeft: + case keyArrowUp: { + if (this.direction === Direction.ltr) { + this.moveLeft(e); + } else { + this.moveRight(e); + } + break; + } + default: { + return true; + } + } + }; + } + readOnlyChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.readOnly) { + radio.readOnly = true; + } else { + radio.readOnly = false; + } + }); + } + } + disabledChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.disabled) { + radio.disabled = true; + } else { + radio.disabled = false; + } + }); + } + } + nameChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + radio.setAttribute("name", this.name); + }); + } + } + valueChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + if (radio.value === this.value) { + radio.checked = true; + this.selectedRadio = radio; + } + }); + } + this.$emit("change"); + } + slottedRadioButtonsChanged(oldValue, newValue) { + if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) { + this.setupRadioButtons(); + } + } + get parentToolbar() { + return this.closest('[role="toolbar"]'); + } + get isInsideToolbar() { + var _a; + return (_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false; + } + get isInsideFoundationToolbar() { + var _a; + return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + this.setupRadioButtons(); + } + disconnectedCallback() { + this.slottedRadioButtons.forEach((radio) => { + radio.removeEventListener("change", this.radioChangeHandler); + }); + } + setupRadioButtons() { + const checkedRadios = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0; + if (numberOfCheckedRadios > 1) { + const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1]; + lastCheckedRadio.checked = true; + } + let foundMatchingVal = false; + this.slottedRadioButtons.forEach((radio) => { + if (this.name !== void 0) { + radio.setAttribute("name", this.name); + } + if (this.disabled) { + radio.disabled = true; + } + if (this.readOnly) { + radio.readOnly = true; + } + if (this.value && this.value === radio.value) { + this.selectedRadio = radio; + this.focusedRadio = radio; + radio.checked = true; + radio.setAttribute("tabindex", "0"); + foundMatchingVal = true; + } else { + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + radio.checked = false; + } + radio.addEventListener("change", this.radioChangeHandler); + }); + if (this.value === void 0 && this.slottedRadioButtons.length > 0) { + const checkedRadios2 = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios2 = checkedRadios2 !== null ? checkedRadios2.length : 0; + if (numberOfCheckedRadios2 > 0 && !foundMatchingVal) { + const lastCheckedRadio = checkedRadios2[numberOfCheckedRadios2 - 1]; + lastCheckedRadio.checked = true; + this.focusedRadio = lastCheckedRadio; + lastCheckedRadio.setAttribute("tabindex", "0"); + } else { + this.slottedRadioButtons[0].setAttribute("tabindex", "0"); + this.focusedRadio = this.slottedRadioButtons[0]; + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], RadioGroup.prototype, "readOnly", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], RadioGroup.prototype, "disabled", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "name", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "value", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "orientation", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "childItems", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "slottedRadioButtons", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js + var init_radio_group2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js"() { + init_radio_group_template(); + init_radio_group(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js + var radioTemplate; + var init_radio_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js"() { + init_esm(); + radioTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js + var _Radio, FormAssociatedRadio; + var init_radio_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Radio = class extends FoundationElement { + }; + FormAssociatedRadio = class extends CheckableFormAssociated(_Radio) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js + var Radio; + var init_radio = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_radio_form_associated(); + Radio = class extends FormAssociatedRadio { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + switch (e.key) { + case keySpace: + if (!this.checked && !this.readOnly) { + this.checked = true; + } + return; + } + return true; + }; + this.proxy.setAttribute("type", "radio"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * @internal + */ + defaultCheckedChanged() { + var _a; + if (this.$fastController.isConnected && !this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_a = this.defaultChecked) !== null && _a !== void 0 ? _a : false; + this.dirtyChecked = false; + } + } + } + /** + * @internal + */ + connectedCallback() { + var _a, _b; + super.connectedCallback(); + this.validate(); + if (((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("role")) !== "radiogroup" && this.getAttribute("tabindex") === null) { + if (!this.disabled) { + this.setAttribute("tabindex", "0"); + } + } + if (this.checkedAttribute) { + if (!this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_b = this.defaultChecked) !== null && _b !== void 0 ? _b : false; + this.dirtyChecked = false; + } + } + } + } + isInsideRadioGroup() { + const parent = this.closest("[role=radiogroup]"); + return parent !== null; + } + /** + * @internal + */ + clickHandler(e) { + if (!this.disabled && !this.readOnly && !this.checked) { + this.checked = true; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Radio.prototype, "readOnly", void 0); + __decorate([ + observable + ], Radio.prototype, "name", void 0); + __decorate([ + observable + ], Radio.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js + var init_radio2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js"() { + init_radio_template(); + init_radio(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js + var HorizontalScroll; + var init_horizontal_scroll = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + HorizontalScroll = class extends FoundationElement { + constructor() { + super(...arguments); + this.framesPerSecond = 60; + this.updatingItems = false; + this.speed = 600; + this.easing = "ease-in-out"; + this.flippersHiddenFromAT = false; + this.scrolling = false; + this.resizeDetector = null; + } + /** + * The calculated duration for a frame. + * + * @internal + */ + get frameTime() { + return 1e3 / this.framesPerSecond; + } + /** + * Firing scrollstart and scrollend events + * @internal + */ + scrollingChanged(prev, next) { + if (this.scrollContainer) { + const event = this.scrolling == true ? "scrollstart" : "scrollend"; + this.$emit(event, this.scrollContainer.scrollLeft); + } + } + /** + * In RTL mode + * @internal + */ + get isRtl() { + return this.scrollItems.length > 1 && this.scrollItems[0].offsetLeft > this.scrollItems[1].offsetLeft; + } + connectedCallback() { + super.connectedCallback(); + this.initializeResizeDetector(); + } + disconnectedCallback() { + this.disconnectResizeDetector(); + super.disconnectedCallback(); + } + /** + * Updates scroll stops and flippers when scroll items change + * @param previous - current scroll items + * @param next - new updated scroll items + * @public + */ + scrollItemsChanged(previous, next) { + if (next && !this.updatingItems) { + DOM.queueUpdate(() => this.setStops()); + } + } + /** + * destroys the instance's resize observer + * @internal + */ + disconnectResizeDetector() { + if (this.resizeDetector) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + * @internal + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.resized.bind(this)); + this.resizeDetector.observe(this); + } + /** + * Looks for slots and uses child nodes instead + * @internal + */ + updateScrollStops() { + this.updatingItems = true; + const updatedItems = this.scrollItems.reduce((scrollItems, scrollItem) => { + if (scrollItem instanceof HTMLSlotElement) { + return scrollItems.concat(scrollItem.assignedElements()); + } + scrollItems.push(scrollItem); + return scrollItems; + }, []); + this.scrollItems = updatedItems; + this.updatingItems = false; + } + /** + * Finds all of the scroll stops between elements + * @internal + */ + setStops() { + this.updateScrollStops(); + const { scrollContainer: container } = this; + const { scrollLeft } = container; + const { width: containerWidth, left: containerLeft } = container.getBoundingClientRect(); + this.width = containerWidth; + let lastStop = 0; + let stops = this.scrollItems.map((item, index) => { + const { left, width } = item.getBoundingClientRect(); + const leftPosition = Math.round(left + scrollLeft - containerLeft); + const right = Math.round(leftPosition + width); + if (this.isRtl) { + return -right; + } + lastStop = right; + return index === 0 ? 0 : leftPosition; + }).concat(lastStop); + stops = this.fixScrollMisalign(stops); + stops.sort((a, b) => Math.abs(a) - Math.abs(b)); + this.scrollStops = stops; + this.setFlippers(); + } + /** + * Checks to see if the stops are returning values + * otherwise it will try to reinitialize them + * + * @returns boolean indicating that current scrollStops are valid non-zero values + * @internal + */ + validateStops(reinit = true) { + const hasStops = () => !!this.scrollStops.find((stop) => stop > 0); + if (!hasStops() && reinit) { + this.setStops(); + } + return hasStops(); + } + /** + * + */ + fixScrollMisalign(stops) { + if (this.isRtl && stops.some((stop) => stop > 0)) { + stops.sort((a, b) => b - a); + const offset = stops[0]; + stops = stops.map((stop) => stop - offset); + } + return stops; + } + /** + * Sets the controls view if enabled + * @internal + */ + setFlippers() { + var _a, _b; + const position = this.scrollContainer.scrollLeft; + (_a = this.previousFlipperContainer) === null || _a === void 0 ? void 0 : _a.classList.toggle("disabled", position === 0); + if (this.scrollStops) { + const lastStop = Math.abs(this.scrollStops[this.scrollStops.length - 1]); + (_b = this.nextFlipperContainer) === null || _b === void 0 ? void 0 : _b.classList.toggle("disabled", this.validateStops(false) && Math.abs(position) + this.width >= lastStop); + } + } + /** + * Function that can scroll an item into view. + * @param item - An item index, a scroll item or a child of one of the scroll items + * @param padding - Padding of the viewport where the active item shouldn't be + * @param rightPadding - Optional right padding. Uses the padding if not defined + * + * @public + */ + scrollInView(item, padding = 0, rightPadding) { + var _a; + if (typeof item !== "number" && item) { + item = this.scrollItems.findIndex((scrollItem) => scrollItem === item || scrollItem.contains(item)); + } + if (item !== void 0) { + rightPadding = rightPadding !== null && rightPadding !== void 0 ? rightPadding : padding; + const { scrollContainer: container, scrollStops, scrollItems: items } = this; + const { scrollLeft } = this.scrollContainer; + const { width: containerWidth } = container.getBoundingClientRect(); + const itemStart = scrollStops[item]; + const { width } = items[item].getBoundingClientRect(); + const itemEnd = itemStart + width; + const isBefore = scrollLeft + padding > itemStart; + if (isBefore || scrollLeft + containerWidth - rightPadding < itemEnd) { + const stops = [...scrollStops].sort((a, b) => isBefore ? b - a : a - b); + const scrollTo = (_a = stops.find((position) => isBefore ? position + padding < itemStart : position + containerWidth - (rightPadding !== null && rightPadding !== void 0 ? rightPadding : 0) > itemEnd)) !== null && _a !== void 0 ? _a : 0; + this.scrollToPosition(scrollTo); + } + } + } + /** + * Lets the user arrow left and right through the horizontal scroll + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + this.scrollToPrevious(); + break; + case "ArrowRight": + this.scrollToNext(); + break; + } + } + /** + * Scrolls items to the left + * @public + */ + scrollToPrevious() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop, index) => stop >= scrollPosition && (this.isRtl || index === this.scrollStops.length - 1 || this.scrollStops[index + 1] > scrollPosition)); + const right = Math.abs(this.scrollStops[current + 1]); + let nextIndex = this.scrollStops.findIndex((stop) => Math.abs(stop) + this.width > right); + if (nextIndex >= current || nextIndex === -1) { + nextIndex = current > 0 ? current - 1 : 0; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Scrolls items to the right + * @public + */ + scrollToNext() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop) => Math.abs(stop) >= Math.abs(scrollPosition)); + const outOfView = this.scrollStops.findIndex((stop) => Math.abs(scrollPosition) + this.width <= Math.abs(stop)); + let nextIndex = current; + if (outOfView > current + 2) { + nextIndex = outOfView - 2; + } else if (current < this.scrollStops.length - 2) { + nextIndex = current + 1; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Handles scrolling with easing + * @param position - starting position + * @param newPosition - position to scroll to + * @public + */ + scrollToPosition(newPosition, position = this.scrollContainer.scrollLeft) { + var _a; + if (this.scrolling) { + return; + } + this.scrolling = true; + const seconds = (_a = this.duration) !== null && _a !== void 0 ? _a : `${Math.abs(newPosition - position) / this.speed}s`; + this.content.style.setProperty("transition-duration", seconds); + const computedDuration = parseFloat(getComputedStyle(this.content).getPropertyValue("transition-duration")); + const transitionendHandler = (e) => { + if (e && e.target !== e.currentTarget) { + return; + } + this.content.style.setProperty("transition-duration", "0s"); + this.content.style.removeProperty("transform"); + this.scrollContainer.style.setProperty("scroll-behavior", "auto"); + this.scrollContainer.scrollLeft = newPosition; + this.setFlippers(); + this.content.removeEventListener("transitionend", transitionendHandler); + this.scrolling = false; + }; + if (computedDuration === 0) { + transitionendHandler(); + return; + } + this.content.addEventListener("transitionend", transitionendHandler); + const maxScrollValue = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth; + let transitionStop = this.scrollContainer.scrollLeft - Math.min(newPosition, maxScrollValue); + if (this.isRtl) { + transitionStop = this.scrollContainer.scrollLeft + Math.min(Math.abs(newPosition), maxScrollValue); + } + this.content.style.setProperty("transition-property", "transform"); + this.content.style.setProperty("transition-timing-function", this.easing); + this.content.style.setProperty("transform", `translateX(${transitionStop}px)`); + } + /** + * Monitors resize event on the horizontal-scroll element + * @public + */ + resized() { + if (this.resizeTimeout) { + this.resizeTimeout = clearTimeout(this.resizeTimeout); + } + this.resizeTimeout = setTimeout(() => { + this.width = this.scrollContainer.offsetWidth; + this.setFlippers(); + }, this.frameTime); + } + /** + * Monitors scrolled event on the content container + * @public + */ + scrolled() { + if (this.scrollTimeout) { + this.scrollTimeout = clearTimeout(this.scrollTimeout); + } + this.scrollTimeout = setTimeout(() => { + this.setFlippers(); + }, this.frameTime); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], HorizontalScroll.prototype, "speed", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "duration", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "easing", void 0); + __decorate([ + attr({ attribute: "flippers-hidden-from-at", converter: booleanConverter }) + ], HorizontalScroll.prototype, "flippersHiddenFromAT", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrolling", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrollItems", void 0); + __decorate([ + attr({ attribute: "view" }) + ], HorizontalScroll.prototype, "view", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js + var init_horizontal_scroll_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js + var init_horizontal_scroll2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js"() { + init_horizontal_scroll(); + init_horizontal_scroll_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js + function whitespaceFilter(value, index, array) { + return value.nodeType !== Node.TEXT_NODE ? true : typeof value.nodeValue === "string" && !!value.nodeValue.trim().length; + } + var init_whitespace_filter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js + var init_search_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js + var _Search, FormAssociatedSearch; + var init_search_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Search = class extends FoundationElement { + }; + FormAssociatedSearch = class extends FormAssociated(_Search) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.js + var Search, DelegatesARIASearch; + var init_search = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_search_form_associated(); + Search = class extends FormAssociatedSearch { + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Handles the control's clear value event + * @public + */ + handleClearInput() { + this.value = ""; + this.control.focus(); + this.handleChange(); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Search.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "autofocus", void 0); + __decorate([ + attr + ], Search.prototype, "placeholder", void 0); + __decorate([ + attr + ], Search.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "minlength", void 0); + __decorate([ + attr + ], Search.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "spellcheck", void 0); + __decorate([ + observable + ], Search.prototype, "defaultSlottedNodes", void 0); + DelegatesARIASearch = class { + }; + applyMixins(DelegatesARIASearch, ARIAGlobalStatesAndProperties); + applyMixins(Search, StartEnd, DelegatesARIASearch); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/index.js + var init_search2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/index.js"() { + init_search_template(); + init_search(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js + var _Select, FormAssociatedSelect; + var init_select_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js"() { + init_listbox_element(); + init_form_associated(); + _Select = class extends ListboxElement { + }; + FormAssociatedSelect = class extends FormAssociated(_Select) { + constructor() { + super(...arguments); + this.proxy = document.createElement("select"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.js + var Select, DelegatesARIASelect; + var init_select = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_apply_mixins(); + init_select_form_associated(); + init_select_options(); + Select = class extends FormAssociatedSelect { + constructor() { + super(...arguments); + this.open = false; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + } + /** + * Sets focus and synchronizes ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged(prev, next) { + if (!this.collapsible) { + return; + } + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + this.indexWhenOpened = this.selectedIndex; + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The component is collapsible when in single-selection mode with no size attribute. + * + * @internal + */ + get collapsible() { + return !(this.multiple || typeof this.size === "number"); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c, _d, _e, _f, _g; + const prev = `${this._value}`; + if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.length) { + const selectedIndex = this._options.findIndex((el) => el.value === next); + const prevSelectedValue = (_c = (_b = this._options[this.selectedIndex]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null; + const nextSelectedValue = (_e = (_d = this._options[selectedIndex]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : null; + if (selectedIndex === -1 || prevSelectedValue !== nextSelectedValue) { + next = ""; + this.selectedIndex = selectedIndex; + } + next = (_g = (_f = this.firstSelectedOption) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + this.updateDisplayValue(); + } + } + /** + * Sets the value and display value to match the first selected option. + * + * @param shouldEmit - if true, the input and change events will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a, _b; + if (this.$fastController.isConnected) { + this.value = (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : ""; + } + if (shouldEmit) { + this.$emit("input"); + this.$emit("change", this, { + bubbles: true, + composed: void 0 + }); + } + } + /** + * Updates the proxy value when the selected index changes. + * + * @param prev - the previous selected index + * @param next - the next selected index + * + * @internal + */ + selectedIndexChanged(prev, next) { + super.selectedIndexChanged(prev, next); + this.updateValue(); + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * The value displayed on the button. + * + * @public + */ + get displayValue() { + var _a, _b; + Observable.track(this, "displayValue"); + return (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : ""; + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + this.setProxyOptions(); + super.setDefaultSelectedOption(); + if (this.selectedIndex === -1) { + this.selectedIndex = 0; + } + } + /** + * Handle opening and closing the listbox when the select is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + if (this.disabled) { + return; + } + if (this.open) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && captured.disabled) { + return; + } + } + super.clickHandler(e); + this.open = this.collapsible && !this.open; + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + return true; + } + /** + * Handles focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + var _a; + super.focusoutHandler(e); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.includes(focusTarget))) { + this.open = false; + if (this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + } + } + /** + * Updates the value when an option's value changes. + * + * @param source - the source object + * @param propertyName - the property to evaluate + * + * @internal + * @override + */ + handleChange(source, propertyName) { + super.handleChange(source, propertyName); + if (propertyName === "value") { + this.updateValue(); + } + } + /** + * Synchronize the form-associated proxy and updates the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "value"); + }); + super.slottedOptionsChanged(prev, next); + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.subscribe(this, "value"); + }); + this.setProxyOptions(); + this.updateValue(); + } + /** + * Prevents focus when size is set and a scrollbar is clicked. + * + * @param e - the mouse event object + * + * @override + * @internal + */ + mousedownHandler(e) { + var _a; + if (e.offsetX >= 0 && e.offsetX <= ((_a = this.listbox) === null || _a === void 0 ? void 0 : _a.scrollWidth)) { + return super.mousedownHandler(e); + } + return this.collapsible; + } + /** + * Sets the multiple property on the proxy element. + * + * @param prev - the previous multiple value + * @param next - the current multiple value + */ + multipleChanged(prev, next) { + super.multipleChanged(prev, next); + if (this.proxy) { + this.proxy.multiple = next; + } + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @override + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + super.selectedOptionsChanged(prev, next); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o, i) => { + var _a2; + const proxyOption = (_a2 = this.proxy) === null || _a2 === void 0 ? void 0 : _a2.options.item(i); + if (proxyOption) { + proxyOption.selected = o.selected; + } + }); + } + /** + * Sets the selected index to match the first option with the selected attribute, or + * the first selectable option. + * + * @override + * @internal + */ + setDefaultSelectedOption() { + var _a; + const options = (_a = this.options) !== null && _a !== void 0 ? _a : Array.from(this.children).filter(Listbox.slottedOptionFilter); + const selectedIndex = options === null || options === void 0 ? void 0 : options.findIndex((el) => el.hasAttribute("selected") || el.selected || el.value === this.value); + if (selectedIndex !== -1) { + this.selectedIndex = selectedIndex; + return; + } + this.selectedIndex = 0; + } + /** + * Resets and fills the proxy to match the component's options. + * + * @internal + */ + setProxyOptions() { + if (this.proxy instanceof HTMLSelectElement && this.options) { + this.proxy.options.length = 0; + this.options.forEach((option) => { + const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null); + if (proxyOption) { + this.proxy.options.add(proxyOption); + } + }); + } + } + /** + * Handle keyboard interaction for the select. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + super.keydownHandler(e); + const key = e.key || e.key.charCodeAt(0); + switch (key) { + case keySpace: { + e.preventDefault(); + if (this.collapsible && this.typeAheadExpired) { + this.open = !this.open; + } + break; + } + case keyHome: + case keyEnd: { + e.preventDefault(); + break; + } + case keyEnter: { + e.preventDefault(); + this.open = !this.open; + break; + } + case keyEscape: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + break; + } + case keyTab: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + return true; + } + } + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + this.indexWhenOpened = this.selectedIndex; + } + return !(key === keyArrowDown || key === keyArrowUp); + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + this.addEventListener("contentchange", this.updateDisplayValue); + } + disconnectedCallback() { + this.removeEventListener("contentchange", this.updateDisplayValue); + super.disconnectedCallback(); + } + /** + * Updates the proxy's size property when the size attribute changes. + * + * @param prev - the previous size + * @param next - the current size + * + * @override + * @internal + */ + sizeChanged(prev, next) { + super.sizeChanged(prev, next); + if (this.proxy) { + this.proxy.size = next; + } + } + /** + * + * @internal + */ + updateDisplayValue() { + if (this.collapsible) { + Observable.notify(this, "displayValue"); + } + } + }; + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Select.prototype, "open", void 0); + __decorate([ + volatile + ], Select.prototype, "collapsible", null); + __decorate([ + observable + ], Select.prototype, "control", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Select.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Select.prototype, "position", void 0); + __decorate([ + observable + ], Select.prototype, "maxHeight", void 0); + DelegatesARIASelect = class { + }; + __decorate([ + observable + ], DelegatesARIASelect.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIASelect, DelegatesARIAListbox); + applyMixins(Select, StartEnd, DelegatesARIASelect); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js + var selectTemplate; + var init_select_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js"() { + init_esm(); + init_listbox(); + init_start_end(); + selectTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/index.js + var init_select2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/index.js"() { + init_select(); + init_select_options(); + init_select_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js + var init_skeleton_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js + var Skeleton; + var init_skeleton = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Skeleton = class extends FoundationElement { + constructor() { + super(...arguments); + this.shape = "rect"; + } + }; + __decorate([ + attr + ], Skeleton.prototype, "fill", void 0); + __decorate([ + attr + ], Skeleton.prototype, "shape", void 0); + __decorate([ + attr + ], Skeleton.prototype, "pattern", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Skeleton.prototype, "shimmer", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js + var init_skeleton2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js"() { + init_skeleton_template(); + init_skeleton(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js + var init_slider_label_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js + function convertPixelToPercent(pixelPos, minPosition, maxPosition, direction) { + let pct = limit(0, 1, (pixelPos - minPosition) / (maxPosition - minPosition)); + if (direction === Direction.rtl) { + pct = 1 - pct; + } + return pct; + } + var init_slider_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js"() { + init_dist2(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js + var defaultConfig, SliderLabel; + var init_slider_label = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_slider_utilities(); + init_foundation_element(); + defaultConfig = { + min: 0, + max: 0, + direction: Direction.ltr, + orientation: Orientation.horizontal, + disabled: false + }; + SliderLabel = class extends FoundationElement { + constructor() { + super(...arguments); + this.hideMark = false; + this.sliderDirection = Direction.ltr; + this.getSliderConfiguration = () => { + if (!this.isSliderConfig(this.parentNode)) { + this.sliderDirection = defaultConfig.direction || Direction.ltr; + this.sliderOrientation = defaultConfig.orientation || Orientation.horizontal; + this.sliderMaxPosition = defaultConfig.max; + this.sliderMinPosition = defaultConfig.min; + } else { + const parentSlider = this.parentNode; + const { min, max, direction, orientation, disabled } = parentSlider; + if (disabled !== void 0) { + this.disabled = disabled; + } + this.sliderDirection = direction || Direction.ltr; + this.sliderOrientation = orientation || Orientation.horizontal; + this.sliderMaxPosition = max; + this.sliderMinPosition = min; + } + }; + this.positionAsStyle = () => { + const direction = this.sliderDirection ? this.sliderDirection : Direction.ltr; + const pct = convertPixelToPercent(Number(this.position), Number(this.sliderMinPosition), Number(this.sliderMaxPosition)); + let rightNum = Math.round((1 - pct) * 100); + let leftNum = Math.round(pct * 100); + if (Number.isNaN(leftNum) && Number.isNaN(rightNum)) { + rightNum = 50; + leftNum = 50; + } + if (this.sliderOrientation === Orientation.horizontal) { + return direction === Direction.rtl ? `right: ${leftNum}%; left: ${rightNum}%;` : `left: ${leftNum}%; right: ${rightNum}%;`; + } else { + return `top: ${leftNum}%; bottom: ${rightNum}%;`; + } + }; + } + positionChanged() { + this.positionStyle = this.positionAsStyle(); + } + /** + * @internal + */ + sliderOrientationChanged() { + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.getSliderConfiguration(); + this.positionStyle = this.positionAsStyle(); + this.notifier = Observable.getNotifier(this.parentNode); + this.notifier.subscribe(this, "orientation"); + this.notifier.subscribe(this, "direction"); + this.notifier.subscribe(this, "max"); + this.notifier.subscribe(this, "min"); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.notifier.unsubscribe(this, "orientation"); + this.notifier.unsubscribe(this, "direction"); + this.notifier.unsubscribe(this, "max"); + this.notifier.unsubscribe(this, "min"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "direction": + this.sliderDirection = source.direction; + break; + case "orientation": + this.sliderOrientation = source.orientation; + break; + case "max": + this.sliderMaxPosition = source.max; + break; + case "min": + this.sliderMinPosition = source.min; + break; + default: + break; + } + this.positionStyle = this.positionAsStyle(); + } + isSliderConfig(node) { + return node.max !== void 0 && node.min !== void 0; + } + }; + __decorate([ + observable + ], SliderLabel.prototype, "positionStyle", void 0); + __decorate([ + attr + ], SliderLabel.prototype, "position", void 0); + __decorate([ + attr({ attribute: "hide-mark", mode: "boolean" }) + ], SliderLabel.prototype, "hideMark", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], SliderLabel.prototype, "disabled", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderOrientation", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMinPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMaxPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js + var init_slider_label2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js"() { + init_slider_label_template(); + init_slider_label(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js + var init_slider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js + var _Slider, FormAssociatedSlider; + var init_slider_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Slider = class extends FoundationElement { + }; + FormAssociatedSlider = class extends FormAssociated(_Slider) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js + var SliderMode, Slider; + var init_slider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_slider_utilities(); + init_slider_form_associated(); + SliderMode = { + singleValue: "single-value" + }; + Slider = class extends FormAssociatedSlider { + constructor() { + super(...arguments); + this.direction = Direction.ltr; + this.isDragging = false; + this.trackWidth = 0; + this.trackMinWidth = 0; + this.trackHeight = 0; + this.trackLeft = 0; + this.trackMinHeight = 0; + this.valueTextFormatter = () => null; + this.min = 0; + this.max = 10; + this.step = 1; + this.orientation = Orientation.horizontal; + this.mode = SliderMode.singleValue; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + if (e.key === keyHome) { + e.preventDefault(); + this.value = `${this.min}`; + } else if (e.key === keyEnd) { + e.preventDefault(); + this.value = `${this.max}`; + } else if (!e.shiftKey) { + switch (e.key) { + case keyArrowRight: + case keyArrowUp: + e.preventDefault(); + this.increment(); + break; + case keyArrowLeft: + case keyArrowDown: + e.preventDefault(); + this.decrement(); + break; + } + } + }; + this.setupTrackConstraints = () => { + const clientRect = this.track.getBoundingClientRect(); + this.trackWidth = this.track.clientWidth; + this.trackMinWidth = this.track.clientLeft; + this.trackHeight = clientRect.bottom; + this.trackMinHeight = clientRect.top; + this.trackLeft = this.getBoundingClientRect().left; + if (this.trackWidth === 0) { + this.trackWidth = 1; + } + }; + this.setupListeners = (remove = false) => { + const eventAction = `${remove ? "remove" : "add"}EventListener`; + this[eventAction]("keydown", this.keypressHandler); + this[eventAction]("mousedown", this.handleMouseDown); + this.thumb[eventAction]("mousedown", this.handleThumbMouseDown, { + passive: true + }); + this.thumb[eventAction]("touchstart", this.handleThumbMouseDown, { + passive: true + }); + if (remove) { + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + } + }; + this.initialValue = ""; + this.handleThumbMouseDown = (event) => { + if (event) { + if (this.readOnly || this.disabled || event.defaultPrevented) { + return; + } + event.target.focus(); + } + const eventAction = `${event !== null ? "add" : "remove"}EventListener`; + window[eventAction]("mouseup", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchmove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchend", this.handleWindowMouseUp); + this.isDragging = event !== null; + }; + this.handleMouseMove = (e) => { + if (this.readOnly || this.disabled || e.defaultPrevented) { + return; + } + const sourceEvent = window.TouchEvent && e instanceof TouchEvent ? e.touches[0] : e; + const eventValue = this.orientation === Orientation.horizontal ? sourceEvent.pageX - document.documentElement.scrollLeft - this.trackLeft : sourceEvent.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(eventValue)}`; + }; + this.calculateNewValue = (rawValue) => { + const newPosition = convertPixelToPercent(rawValue, this.orientation === Orientation.horizontal ? this.trackMinWidth : this.trackMinHeight, this.orientation === Orientation.horizontal ? this.trackWidth : this.trackHeight, this.direction); + const newValue = (this.max - this.min) * newPosition + this.min; + return this.convertToConstrainedValue(newValue); + }; + this.handleWindowMouseUp = (event) => { + this.stopDragging(); + }; + this.stopDragging = () => { + this.isDragging = false; + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + }; + this.handleMouseDown = (e) => { + const eventAction = `${e !== null ? "add" : "remove"}EventListener`; + if (e === null || !this.disabled && !this.readOnly) { + window[eventAction]("mouseup", this.handleWindowMouseUp); + window.document[eventAction]("mouseleave", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove); + if (e) { + e.preventDefault(); + this.setupTrackConstraints(); + e.target.focus(); + const controlValue = this.orientation === Orientation.horizontal ? e.pageX - document.documentElement.scrollLeft - this.trackLeft : e.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(controlValue)}`; + } + } + }; + this.convertToConstrainedValue = (value) => { + if (isNaN(value)) { + value = this.min; + } + let constrainedValue = value - this.min; + const roundedConstrainedValue = Math.round(constrainedValue / this.step); + const remainderValue = constrainedValue - roundedConstrainedValue * (this.stepMultiplier * this.step) / this.stepMultiplier; + constrainedValue = remainderValue >= Number(this.step) / 2 ? constrainedValue - remainderValue + Number(this.step) : constrainedValue - remainderValue; + return constrainedValue + this.min; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * @internal + */ + valueChanged(previous, next) { + super.valueChanged(previous, next); + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + this.$emit("change"); + } + minChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.min = `${this.min}`; + } + this.validate(); + } + maxChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.max = `${this.max}`; + } + this.validate(); + } + stepChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.step = `${this.step}`; + } + this.updateStepMultiplier(); + this.validate(); + } + orientationChanged() { + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "range"); + this.direction = getDirection(this); + this.updateStepMultiplier(); + this.setupTrackConstraints(); + this.setupListeners(); + this.setupDefaultValue(); + this.setThumbPositionForOrientation(this.direction); + } + /** + * @internal + */ + disconnectedCallback() { + this.setupListeners(true); + } + /** + * Increment the value by the step + * + * @public + */ + increment() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) + Number(this.step) : Number(this.value) - Number(this.step); + const incrementedVal = this.convertToConstrainedValue(newVal); + const incrementedValString = incrementedVal < Number(this.max) ? `${incrementedVal}` : `${this.max}`; + this.value = incrementedValString; + } + /** + * Decrement the value by the step + * + * @public + */ + decrement() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) - Number(this.step) : Number(this.value) + Number(this.step); + const decrementedVal = this.convertToConstrainedValue(newVal); + const decrementedValString = decrementedVal > Number(this.min) ? `${decrementedVal}` : `${this.min}`; + this.value = decrementedValString; + } + /** + * Places the thumb based on the current value + * + * @public + * @param direction - writing mode + */ + setThumbPositionForOrientation(direction) { + const newPct = convertPixelToPercent(Number(this.value), Number(this.min), Number(this.max), direction); + const percentage = (1 - newPct) * 100; + if (this.orientation === Orientation.horizontal) { + this.position = this.isDragging ? `right: ${percentage}%; transition: none;` : `right: ${percentage}%; transition: all 0.2s ease;`; + } else { + this.position = this.isDragging ? `bottom: ${percentage}%; transition: none;` : `bottom: ${percentage}%; transition: all 0.2s ease;`; + } + } + /** + * Update the step multiplier used to ensure rounding errors from steps that + * are not whole numbers + */ + updateStepMultiplier() { + const stepString = this.step + ""; + const decimalPlacesOfStep = !!(this.step % 1) ? stepString.length - stepString.indexOf(".") - 1 : 0; + this.stepMultiplier = Math.pow(10, decimalPlacesOfStep); + } + get midpoint() { + return `${this.convertToConstrainedValue((this.max + this.min) / 2)}`; + } + setupDefaultValue() { + if (typeof this.value === "string") { + if (this.value.length === 0) { + this.initialValue = this.midpoint; + } else { + const value = parseFloat(this.value); + if (!Number.isNaN(value) && (value < this.min || value > this.max)) { + this.value = this.midpoint; + } + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Slider.prototype, "readOnly", void 0); + __decorate([ + observable + ], Slider.prototype, "direction", void 0); + __decorate([ + observable + ], Slider.prototype, "isDragging", void 0); + __decorate([ + observable + ], Slider.prototype, "position", void 0); + __decorate([ + observable + ], Slider.prototype, "trackWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "trackLeft", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "valueTextFormatter", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "step", void 0); + __decorate([ + attr + ], Slider.prototype, "orientation", void 0); + __decorate([ + attr + ], Slider.prototype, "mode", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js + var init_slider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js"() { + init_slider_template(); + init_slider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js + var init_switch_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js + var _Switch, FormAssociatedSwitch; + var init_switch_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Switch = class extends FoundationElement { + }; + FormAssociatedSwitch = class extends CheckableFormAssociated(_Switch) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js + var Switch; + var init_switch = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_switch_form_associated(); + Switch = class extends FormAssociatedSwitch { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + this.readOnly ? this.classList.add("readonly") : this.classList.remove("readonly"); + } + /** + * @internal + */ + checkedChanged(prev, next) { + super.checkedChanged(prev, next); + this.checked ? this.classList.add("checked") : this.classList.remove("checked"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Switch.prototype, "readOnly", void 0); + __decorate([ + observable + ], Switch.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js + var init_switch2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js"() { + init_switch_template(); + init_switch(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js + var tabPanelTemplate; + var init_tab_panel_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js"() { + init_esm(); + tabPanelTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js + var TabPanel; + var init_tab_panel = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js"() { + init_foundation_element(); + TabPanel = class extends FoundationElement { + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js + var init_tab_panel2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js"() { + init_tab_panel_template(); + init_tab_panel(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js + var tabTemplate; + var init_tab_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js"() { + init_esm(); + tabTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js + var Tab; + var init_tab = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Tab = class extends FoundationElement { + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tab.prototype, "disabled", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js + var init_tab2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js"() { + init_tab_template(); + init_tab(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js + var tabsTemplate; + var init_tabs_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js"() { + init_esm(); + init_start_end(); + tabsTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js + var TabsOrientation, Tabs; + var init_tabs = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TabsOrientation = { + vertical: "vertical", + horizontal: "horizontal" + }; + Tabs = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = TabsOrientation.horizontal; + this.activeindicator = true; + this.showActiveIndicator = true; + this.prevActiveTabIndex = 0; + this.activeTabIndex = 0; + this.ticking = false; + this.change = () => { + this.$emit("change", this.activetab); + }; + this.isDisabledElement = (el) => { + return el.getAttribute("aria-disabled") === "true"; + }; + this.isHiddenElement = (el) => { + return el.hasAttribute("hidden"); + }; + this.isFocusableElement = (el) => { + return !this.isDisabledElement(el) && !this.isHiddenElement(el); + }; + this.setTabs = () => { + const gridHorizontalProperty = "gridColumn"; + const gridVerticalProperty = "gridRow"; + const gridProperty = this.isHorizontal() ? gridHorizontalProperty : gridVerticalProperty; + this.activeTabIndex = this.getActiveIndex(); + this.showActiveIndicator = false; + this.tabs.forEach((tab, index) => { + if (tab.slot === "tab") { + const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab); + if (this.activeindicator && this.isFocusableElement(tab)) { + this.showActiveIndicator = true; + } + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tab.setAttribute("id", tabId); + tab.setAttribute("aria-selected", isActiveTab ? "true" : "false"); + tab.setAttribute("aria-controls", tabpanelId); + tab.addEventListener("click", this.handleTabClick); + tab.addEventListener("keydown", this.handleTabKeyDown); + tab.setAttribute("tabindex", isActiveTab ? "0" : "-1"); + if (isActiveTab) { + this.activetab = tab; + this.activeid = tabId; + } + } + tab.style[gridHorizontalProperty] = ""; + tab.style[gridVerticalProperty] = ""; + tab.style[gridProperty] = `${index + 1}`; + !this.isHorizontal() ? tab.classList.add("vertical") : tab.classList.remove("vertical"); + }); + }; + this.setTabPanels = () => { + this.tabpanels.forEach((tabpanel, index) => { + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tabpanel.setAttribute("id", tabpanelId); + tabpanel.setAttribute("aria-labelledby", tabId); + this.activeTabIndex !== index ? tabpanel.setAttribute("hidden", "") : tabpanel.removeAttribute("hidden"); + }); + }; + this.handleTabClick = (event) => { + const selectedTab = event.currentTarget; + if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) { + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = this.tabs.indexOf(selectedTab); + this.setComponent(); + } + }; + this.handleTabKeyDown = (event) => { + if (this.isHorizontal()) { + switch (event.key) { + case keyArrowLeft: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowRight: + event.preventDefault(); + this.adjustForward(event); + break; + } + } else { + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowDown: + event.preventDefault(); + this.adjustForward(event); + break; + } + } + switch (event.key) { + case keyHome: + event.preventDefault(); + this.adjust(-this.activeTabIndex); + break; + case keyEnd: + event.preventDefault(); + this.adjust(this.tabs.length - this.activeTabIndex - 1); + break; + } + }; + this.adjustForward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) + 1 : 1; + if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (this.activetab && index === group.indexOf(this.activetab)) { + break; + } else if (index + 1 >= group.length) { + index = 0; + } else { + index += 1; + } + } + }; + this.adjustBackward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + while (index >= 0 && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.moveToTabByIndex = (group, index) => { + const tab = group[index]; + this.activetab = tab; + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = index; + tab.focus(); + this.setComponent(); + }; + } + /** + * @internal + */ + orientationChanged() { + if (this.$fastController.isConnected) { + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + activeidChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabsChanged() { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabpanelsChanged() { + if (this.$fastController.isConnected && this.tabpanels.length <= this.tabs.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + getActiveIndex() { + const id = this.activeid; + if (id !== void 0) { + return this.tabIds.indexOf(this.activeid) === -1 ? 0 : this.tabIds.indexOf(this.activeid); + } else { + return 0; + } + } + getTabIds() { + return this.tabs.map((tab) => { + var _a; + return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`; + }); + } + getTabPanelIds() { + return this.tabpanels.map((tabPanel) => { + var _a; + return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`; + }); + } + setComponent() { + if (this.activeTabIndex !== this.prevActiveTabIndex) { + this.activeid = this.tabIds[this.activeTabIndex]; + this.focusTab(); + this.change(); + } + } + isHorizontal() { + return this.orientation === TabsOrientation.horizontal; + } + handleActiveIndicatorPosition() { + if (this.showActiveIndicator && this.activeindicator && this.activeTabIndex !== this.prevActiveTabIndex) { + if (this.ticking) { + this.ticking = false; + } else { + this.ticking = true; + this.animateActiveIndicator(); + } + } + } + animateActiveIndicator() { + this.ticking = true; + const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow"; + const translateProperty = this.isHorizontal() ? "translateX" : "translateY"; + const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop"; + const prev = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + const next = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`; + const dif = next - prev; + this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`; + this.activeIndicatorRef.classList.add("activeIndicatorTransition"); + this.activeIndicatorRef.addEventListener("transitionend", () => { + this.ticking = false; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`; + this.activeIndicatorRef.classList.remove("activeIndicatorTransition"); + }); + } + /** + * The adjust method for FASTTabs + * @public + * @remarks + * This method allows the active index to be adjusted by numerical increments + */ + adjust(adjustment) { + const focusableTabs = this.tabs.filter((t) => this.isFocusableElement(t)); + const currentActiveTabIndex = focusableTabs.indexOf(this.activetab); + const nextTabIndex = limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment); + const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]); + if (nextIndex > -1) { + this.moveToTabByIndex(this.tabs, nextIndex); + } + } + focusTab() { + this.tabs[this.activeTabIndex].focus(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.activeTabIndex = this.getActiveIndex(); + } + }; + __decorate([ + attr + ], Tabs.prototype, "orientation", void 0); + __decorate([ + attr + ], Tabs.prototype, "activeid", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabs", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabpanels", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Tabs.prototype, "activeindicator", void 0); + __decorate([ + observable + ], Tabs.prototype, "activeIndicatorRef", void 0); + __decorate([ + observable + ], Tabs.prototype, "showActiveIndicator", void 0); + applyMixins(Tabs, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js + var init_tabs2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js"() { + init_tabs_template(); + init_tabs(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js + var _TextArea, FormAssociatedTextArea; + var init_text_area_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextArea = class extends FoundationElement { + }; + FormAssociatedTextArea = class extends FormAssociated(_TextArea) { + constructor() { + super(...arguments); + this.proxy = document.createElement("textarea"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js + var TextAreaResize; + var init_text_area_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js"() { + TextAreaResize = { + /** + * No resize. + */ + none: "none", + /** + * Resize vertically and horizontally. + */ + both: "both", + /** + * Resize horizontally. + */ + horizontal: "horizontal", + /** + * Resize vertically. + */ + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js + var TextArea; + var init_text_area = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js"() { + init_tslib_es6(); + init_esm(); + init_text_field(); + init_apply_mixins(); + init_text_area_form_associated(); + init_text_area_options(); + TextArea = class extends FormAssociatedTextArea { + constructor() { + super(...arguments); + this.resize = TextAreaResize.none; + this.cols = 20; + this.handleTextInput = () => { + this.value = this.control.value; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.readOnly = this.readOnly; + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.autofocus = this.autofocus; + } + } + listChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.setAttribute("list", this.list); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.maxLength = this.maxlength; + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.minLength = this.minlength; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * Selects all the text in the text area + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "readOnly", void 0); + __decorate([ + attr + ], TextArea.prototype, "resize", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], TextArea.prototype, "formId", void 0); + __decorate([ + attr + ], TextArea.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "minlength", void 0); + __decorate([ + attr + ], TextArea.prototype, "name", void 0); + __decorate([ + attr + ], TextArea.prototype, "placeholder", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "cols", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "rows", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextArea.prototype, "defaultSlottedNodes", void 0); + applyMixins(TextArea, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js + var textAreaTemplate; + var init_text_area_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js"() { + init_esm(); + init_text_area(); + textAreaTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js + var init_text_area2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js"() { + init_text_area_template(); + init_text_area(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js + var textFieldTemplate; + var init_text_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js"() { + init_esm(); + init_start_end(); + init_whitespace_filter(); + textFieldTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js + var init_text_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js"() { + init_text_field_template(); + init_text_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js + var init_toolbar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js + function getRootActiveElement(element) { + const rootNode = element.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.activeElement; + } + return document.activeElement; + } + var init_root_active_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js + var ToolbarArrowKeyMap, Toolbar, DelegatesARIAToolbar; + var init_toolbar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + init_direction(); + init_root_active_element(); + ToolbarArrowKeyMap = Object.freeze({ + [ArrowKeys.ArrowUp]: { + [Orientation.vertical]: -1 + }, + [ArrowKeys.ArrowDown]: { + [Orientation.vertical]: 1 + }, + [ArrowKeys.ArrowLeft]: { + [Orientation.horizontal]: { + [Direction.ltr]: -1, + [Direction.rtl]: 1 + } + }, + [ArrowKeys.ArrowRight]: { + [Orientation.horizontal]: { + [Direction.ltr]: 1, + [Direction.rtl]: -1 + } + } + }); + Toolbar = class _Toolbar extends FoundationElement { + constructor() { + super(...arguments); + this._activeIndex = 0; + this.direction = Direction.ltr; + this.orientation = Orientation.horizontal; + } + /** + * The index of the currently focused element, clamped between 0 and the last element. + * + * @internal + */ + get activeIndex() { + Observable.track(this, "activeIndex"); + return this._activeIndex; + } + set activeIndex(value) { + if (this.$fastController.isConnected) { + this._activeIndex = limit(0, this.focusableElements.length - 1, value); + Observable.notify(this, "activeIndex"); + } + } + slottedItemsChanged() { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * Set the activeIndex when a focusable element in the toolbar is clicked. + * + * @internal + */ + mouseDownHandler(e) { + var _a; + const activeIndex = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a.findIndex((x) => x.contains(e.target)); + if (activeIndex > -1 && this.activeIndex !== activeIndex) { + this.setFocusedElement(activeIndex); + } + return true; + } + childItemsChanged(prev, next) { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + } + /** + * When the toolbar receives focus, set the currently active element as focused. + * + * @internal + */ + focusinHandler(e) { + const relatedTarget = e.relatedTarget; + if (!relatedTarget || this.contains(relatedTarget)) { + return; + } + this.setFocusedElement(); + } + /** + * Determines a value that can be used to iterate a list with the arrow keys. + * + * @param this - An element with an orientation and direction + * @param key - The event key value + * @internal + */ + getDirectionalIncrementer(key) { + var _a, _b, _c, _d, _e; + return (_e = (_c = (_b = (_a = ToolbarArrowKeyMap[key]) === null || _a === void 0 ? void 0 : _a[this.orientation]) === null || _b === void 0 ? void 0 : _b[this.direction]) !== null && _c !== void 0 ? _c : (_d = ToolbarArrowKeyMap[key]) === null || _d === void 0 ? void 0 : _d[this.orientation]) !== null && _e !== void 0 ? _e : 0; + } + /** + * Handle keyboard events for the toolbar. + * + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (!(key in ArrowKeys) || e.defaultPrevented || e.shiftKey) { + return true; + } + const incrementer = this.getDirectionalIncrementer(key); + if (!incrementer) { + return !e.target.closest("[role=radiogroup]"); + } + const nextIndex = this.activeIndex + incrementer; + if (this.focusableElements[nextIndex]) { + e.preventDefault(); + } + this.setFocusedElement(nextIndex); + return true; + } + /** + * get all the slotted elements + * @internal + */ + get allSlottedItems() { + return [ + ...this.start.assignedElements(), + ...this.slottedItems, + ...this.end.assignedElements() + ]; + } + /** + * Prepare the slotted elements which can be focusable. + * + * @internal + */ + reduceFocusableElements() { + var _a; + const previousFocusedElement = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a[this.activeIndex]; + this.focusableElements = this.allSlottedItems.reduce(_Toolbar.reduceFocusableItems, []); + const adjustedActiveIndex = this.focusableElements.indexOf(previousFocusedElement); + this.activeIndex = Math.max(0, adjustedActiveIndex); + this.setFocusableElements(); + } + /** + * Set the activeIndex and focus the corresponding control. + * + * @param activeIndex - The new index to set + * @internal + */ + setFocusedElement(activeIndex = this.activeIndex) { + this.activeIndex = activeIndex; + this.setFocusableElements(); + if (this.focusableElements[this.activeIndex] && // Don't focus the toolbar element if some event handlers moved + // the focus on another element in the page. + this.contains(getRootActiveElement(this))) { + this.focusableElements[this.activeIndex].focus(); + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceFocusableItems(elements2, element) { + var _a, _b, _c, _d; + const isRoleRadio = element.getAttribute("role") === "radio"; + const isFocusableFastElement = (_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus; + const hasFocusableShadow = Array.from((_d = (_c = element.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll("*")) !== null && _d !== void 0 ? _d : []).some((x) => isFocusable(x)); + if (!element.hasAttribute("disabled") && !element.hasAttribute("hidden") && (isFocusable(element) || isRoleRadio || isFocusableFastElement || hasFocusableShadow)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Toolbar.reduceFocusableItems, [])); + } + return elements2; + } + /** + * @internal + */ + setFocusableElements() { + if (this.$fastController.isConnected && this.focusableElements.length > 0) { + this.focusableElements.forEach((element, index) => { + element.tabIndex = this.activeIndex === index ? 0 : -1; + }); + } + } + }; + __decorate([ + observable + ], Toolbar.prototype, "direction", void 0); + __decorate([ + attr + ], Toolbar.prototype, "orientation", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedItems", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedLabel", void 0); + __decorate([ + observable + ], Toolbar.prototype, "childItems", void 0); + DelegatesARIAToolbar = class { + }; + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], DelegatesARIAToolbar.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], DelegatesARIAToolbar.prototype, "ariaLabel", void 0); + applyMixins(DelegatesARIAToolbar, ARIAGlobalStatesAndProperties); + applyMixins(Toolbar, StartEnd, DelegatesARIAToolbar); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js + var init_toolbar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js"() { + init_toolbar_template(); + init_toolbar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js + var init_tooltip_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js + var TooltipPosition; + var init_tooltip_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js"() { + TooltipPosition = { + /** + * The tooltip is positioned above the element + */ + top: "top", + /** + * The tooltip is positioned to the right of the element + */ + right: "right", + /** + * The tooltip is positioned below the element + */ + bottom: "bottom", + /** + * The tooltip is positioned to the left of the element + */ + left: "left", + /** + * The tooltip is positioned before the element + */ + start: "start", + /** + * The tooltip is positioned after the element + */ + end: "end", + /** + * The tooltip is positioned above the element and to the left + */ + topLeft: "top-left", + /** + * The tooltip is positioned above the element and to the right + */ + topRight: "top-right", + /** + * The tooltip is positioned below the element and to the left + */ + bottomLeft: "bottom-left", + /** + * The tooltip is positioned below the element and to the right + */ + bottomRight: "bottom-right", + /** + * The tooltip is positioned above the element and to the left + */ + topStart: "top-start", + /** + * The tooltip is positioned above the element and to the right + */ + topEnd: "top-end", + /** + * The tooltip is positioned below the element and to the left + */ + bottomStart: "bottom-start", + /** + * The tooltip is positioned below the element and to the right + */ + bottomEnd: "bottom-end" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js + var Tooltip; + var init_tooltip = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + init_tooltip_options(); + Tooltip = class extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.delay = 300; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.horizontalInset = "false"; + this.verticalInset = "false"; + this.horizontalScaling = "content"; + this.verticalScaling = "content"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = void 0; + this.tooltipVisible = false; + this.currentDirection = Direction.ltr; + this.showDelayTimer = null; + this.hideDelayTimer = null; + this.isAnchorHoveredFocused = false; + this.isRegionHovered = false; + this.handlePositionChange = (ev) => { + this.classList.toggle("top", this.region.verticalPosition === "start"); + this.classList.toggle("bottom", this.region.verticalPosition === "end"); + this.classList.toggle("inset-top", this.region.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.region.verticalPosition === "insetEnd"); + this.classList.toggle("center-vertical", this.region.verticalPosition === "center"); + this.classList.toggle("left", this.region.horizontalPosition === "start"); + this.classList.toggle("right", this.region.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.region.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.region.horizontalPosition === "insetEnd"); + this.classList.toggle("center-horizontal", this.region.horizontalPosition === "center"); + }; + this.handleRegionMouseOver = (ev) => { + this.isRegionHovered = true; + }; + this.handleRegionMouseOut = (ev) => { + this.isRegionHovered = false; + this.startHideDelayTimer(); + }; + this.handleAnchorMouseOver = (ev) => { + if (this.tooltipVisible) { + this.isAnchorHoveredFocused = true; + return; + } + this.startShowDelayTimer(); + }; + this.handleAnchorMouseOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.handleAnchorFocusIn = (ev) => { + this.startShowDelayTimer(); + }; + this.handleAnchorFocusOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.startHideDelayTimer = () => { + this.clearHideDelayTimer(); + if (!this.tooltipVisible) { + return; + } + this.hideDelayTimer = window.setTimeout(() => { + this.updateTooltipVisibility(); + }, 60); + }; + this.clearHideDelayTimer = () => { + if (this.hideDelayTimer !== null) { + clearTimeout(this.hideDelayTimer); + this.hideDelayTimer = null; + } + }; + this.startShowDelayTimer = () => { + if (this.isAnchorHoveredFocused) { + return; + } + if (this.delay > 1) { + if (this.showDelayTimer === null) + this.showDelayTimer = window.setTimeout(() => { + this.startHover(); + }, this.delay); + return; + } + this.startHover(); + }; + this.startHover = () => { + this.isAnchorHoveredFocused = true; + this.updateTooltipVisibility(); + }; + this.clearShowDelayTimer = () => { + if (this.showDelayTimer !== null) { + clearTimeout(this.showDelayTimer); + this.showDelayTimer = null; + } + }; + this.getAnchor = () => { + const rootNode = this.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.getElementById(this.anchor); + } + return document.getElementById(this.anchor); + }; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && this.tooltipVisible) { + switch (e.key) { + case keyEscape: + this.isAnchorHoveredFocused = false; + this.updateTooltipVisibility(); + this.$emit("dismiss"); + break; + } + } + }; + this.updateTooltipVisibility = () => { + if (this.visible === false) { + this.hideTooltip(); + } else if (this.visible === true) { + this.showTooltip(); + return; + } else { + if (this.isAnchorHoveredFocused || this.isRegionHovered) { + this.showTooltip(); + return; + } + this.hideTooltip(); + } + }; + this.showTooltip = () => { + if (this.tooltipVisible) { + return; + } + this.currentDirection = getDirection(this); + this.tooltipVisible = true; + document.addEventListener("keydown", this.handleDocumentKeydown); + DOM.queueUpdate(this.setRegionProps); + }; + this.hideTooltip = () => { + if (!this.tooltipVisible) { + return; + } + this.clearHideDelayTimer(); + if (this.region !== null && this.region !== void 0) { + this.region.removeEventListener("positionchange", this.handlePositionChange); + this.region.viewportElement = null; + this.region.anchorElement = null; + this.region.removeEventListener("mouseover", this.handleRegionMouseOver); + this.region.removeEventListener("mouseout", this.handleRegionMouseOut); + } + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.tooltipVisible = false; + }; + this.setRegionProps = () => { + if (!this.tooltipVisible) { + return; + } + this.region.viewportElement = this.viewportElement; + this.region.anchorElement = this.anchorElement; + this.region.addEventListener("positionchange", this.handlePositionChange); + this.region.addEventListener("mouseover", this.handleRegionMouseOver, { + passive: true + }); + this.region.addEventListener("mouseout", this.handleRegionMouseOut, { + passive: true + }); + }; + } + visibleChanged() { + if (this.$fastController.isConnected) { + this.updateTooltipVisibility(); + this.updateLayout(); + } + } + anchorChanged() { + if (this.$fastController.isConnected) { + this.anchorElement = this.getAnchor(); + } + } + positionChanged() { + if (this.$fastController.isConnected) { + this.updateLayout(); + } + } + anchorElementChanged(oldValue) { + if (this.$fastController.isConnected) { + if (oldValue !== null && oldValue !== void 0) { + oldValue.removeEventListener("mouseover", this.handleAnchorMouseOver); + oldValue.removeEventListener("mouseout", this.handleAnchorMouseOut); + oldValue.removeEventListener("focusin", this.handleAnchorFocusIn); + oldValue.removeEventListener("focusout", this.handleAnchorFocusOut); + } + if (this.anchorElement !== null && this.anchorElement !== void 0) { + this.anchorElement.addEventListener("mouseover", this.handleAnchorMouseOver, { passive: true }); + this.anchorElement.addEventListener("mouseout", this.handleAnchorMouseOut, { passive: true }); + this.anchorElement.addEventListener("focusin", this.handleAnchorFocusIn, { + passive: true + }); + this.anchorElement.addEventListener("focusout", this.handleAnchorFocusOut, { passive: true }); + const anchorId = this.anchorElement.id; + if (this.anchorElement.parentElement !== null) { + this.anchorElement.parentElement.querySelectorAll(":hover").forEach((element) => { + if (element.id === anchorId) { + this.startShowDelayTimer(); + } + }); + } + } + if (this.region !== null && this.region !== void 0 && this.tooltipVisible) { + this.region.anchorElement = this.anchorElement; + } + this.updateLayout(); + } + } + viewportElementChanged() { + if (this.region !== null && this.region !== void 0) { + this.region.viewportElement = this.viewportElement; + } + this.updateLayout(); + } + connectedCallback() { + super.connectedCallback(); + this.anchorElement = this.getAnchor(); + this.updateTooltipVisibility(); + } + disconnectedCallback() { + this.hideTooltip(); + this.clearShowDelayTimer(); + this.clearHideDelayTimer(); + super.disconnectedCallback(); + } + /** + * updated the properties being passed to the anchored region + */ + updateLayout() { + this.verticalPositioningMode = "locktodefault"; + this.horizontalPositioningMode = "locktodefault"; + switch (this.position) { + case TooltipPosition.top: + case TooltipPosition.bottom: + this.verticalDefaultPosition = this.position; + this.horizontalDefaultPosition = "center"; + break; + case TooltipPosition.right: + case TooltipPosition.left: + case TooltipPosition.start: + case TooltipPosition.end: + this.verticalDefaultPosition = "center"; + this.horizontalDefaultPosition = this.position; + break; + case TooltipPosition.topLeft: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.topRight: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.bottomLeft: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.bottomRight: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.topStart: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.topEnd: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "end"; + break; + case TooltipPosition.bottomStart: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.bottomEnd: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "end"; + break; + default: + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = "center"; + break; + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tooltip.prototype, "visible", void 0); + __decorate([ + attr + ], Tooltip.prototype, "anchor", void 0); + __decorate([ + attr + ], Tooltip.prototype, "delay", void 0); + __decorate([ + attr + ], Tooltip.prototype, "position", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], Tooltip.prototype, "autoUpdateMode", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock" }) + ], Tooltip.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock" }) + ], Tooltip.prototype, "verticalViewportLock", void 0); + __decorate([ + observable + ], Tooltip.prototype, "anchorElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "viewportElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "tooltipVisible", void 0); + __decorate([ + observable + ], Tooltip.prototype, "currentDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js + var init_tooltip2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js"() { + init_tooltip_template(); + init_tooltip(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js + var init_tree_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js + function isTreeItemElement(el) { + return isHTMLElement(el) && el.getAttribute("role") === "treeitem"; + } + var TreeItem; + var init_tree_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TreeItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.expanded = false; + this.focusable = false; + this.isNestedItem = () => { + return isTreeItemElement(this.parentElement); + }; + this.handleExpandCollapseButtonClick = (e) => { + if (!this.disabled && !e.defaultPrevented) { + this.expanded = !this.expanded; + } + }; + this.handleFocus = (e) => { + this.setAttribute("tabindex", "0"); + }; + this.handleBlur = (e) => { + this.setAttribute("tabindex", "-1"); + }; + } + expandedChanged() { + if (this.$fastController.isConnected) { + this.$emit("expanded-change", this); + } + } + selectedChanged() { + if (this.$fastController.isConnected) { + this.$emit("selected-change", this); + } + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.items.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = true; + } + }); + } + } + /** + * Places document focus on a tree item + * + * @public + * @param el - the element to focus + */ + static focusItem(el) { + el.focusable = true; + el.focus(); + } + /** + * Gets number of children + * + * @internal + */ + childItemLength() { + const treeChildren = this.childItems.filter((item) => { + return isTreeItemElement(item); + }); + return treeChildren ? treeChildren.length : 0; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "expanded", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "selected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "disabled", void 0); + __decorate([ + observable + ], TreeItem.prototype, "focusable", void 0); + __decorate([ + observable + ], TreeItem.prototype, "childItems", void 0); + __decorate([ + observable + ], TreeItem.prototype, "items", void 0); + __decorate([ + observable + ], TreeItem.prototype, "nested", void 0); + __decorate([ + observable + ], TreeItem.prototype, "renderCollapsedChildren", void 0); + applyMixins(TreeItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js + var init_tree_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js"() { + init_tree_item_template(); + init_tree_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js + var init_tree_view_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js + var TreeView; + var init_tree_view = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_tree_item(); + init_foundation_element(); + TreeView = class extends FoundationElement { + constructor() { + super(...arguments); + this.currentFocused = null; + this.handleFocus = (e) => { + if (this.slottedTreeItems.length < 1) { + return; + } + if (e.target === this) { + if (this.currentFocused === null) { + this.currentFocused = this.getValidFocusableItem(); + } + if (this.currentFocused !== null) { + TreeItem.focusItem(this.currentFocused); + } + return; + } + if (this.contains(e.target)) { + this.setAttribute("tabindex", "-1"); + this.currentFocused = e.target; + } + }; + this.handleBlur = (e) => { + if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) { + this.setAttribute("tabindex", "0"); + } + }; + this.handleKeyDown = (e) => { + if (e.defaultPrevented) { + return; + } + if (this.slottedTreeItems.length < 1) { + return true; + } + const treeItems = this.getVisibleNodes(); + switch (e.key) { + case keyHome: + if (treeItems.length) { + TreeItem.focusItem(treeItems[0]); + } + return; + case keyEnd: + if (treeItems.length) { + TreeItem.focusItem(treeItems[treeItems.length - 1]); + } + return; + case keyArrowLeft: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) { + item.expanded = false; + } else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) { + TreeItem.focusItem(item.parentElement); + } + } + return false; + case keyArrowRight: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) { + item.expanded = true; + } else if (item instanceof TreeItem && item.childItemLength() > 0) { + this.focusNextNode(1, e.target); + } + } + return; + case keyArrowDown: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(1, e.target); + } + return; + case keyArrowUp: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(-1, e.target); + } + return; + case keyEnter: + this.handleClick(e); + return; + } + return true; + }; + this.handleSelectedChange = (e) => { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (item.selected) { + if (this.currentSelected && this.currentSelected !== item) { + this.currentSelected.selected = false; + } + this.currentSelected = item; + } else if (!item.selected && this.currentSelected === item) { + this.currentSelected = null; + } + return; + }; + this.setItems = () => { + const selectedItem = this.treeView.querySelector("[aria-selected='true']"); + this.currentSelected = selectedItem; + if (this.currentFocused === null || !this.contains(this.currentFocused)) { + this.currentFocused = this.getValidFocusableItem(); + } + this.nested = this.checkForNestedItems(); + const treeItems = this.getVisibleNodes(); + treeItems.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = this.nested; + } + }); + }; + this.isFocusableElement = (el) => { + return isTreeItemElement(el); + }; + this.isSelectedElement = (el) => { + return el.selected; + }; + } + slottedTreeItemsChanged() { + if (this.$fastController.isConnected) { + this.setItems(); + } + } + connectedCallback() { + super.connectedCallback(); + this.setAttribute("tabindex", "0"); + DOM.queueUpdate(() => { + this.setItems(); + }); + } + /** + * Handles click events bubbling up + * + * @internal + */ + handleClick(e) { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (!item.disabled) { + item.selected = !item.selected; + } + return; + } + /** + * Move focus to a tree item based on its offset from the provided item + */ + focusNextNode(delta, item) { + const visibleNodes = this.getVisibleNodes(); + if (!visibleNodes) { + return; + } + const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta]; + if (isHTMLElement(focusItem)) { + TreeItem.focusItem(focusItem); + } + } + /** + * checks if there are any nested tree items + */ + getValidFocusableItem() { + const treeItems = this.getVisibleNodes(); + let focusIndex = treeItems.findIndex(this.isSelectedElement); + if (focusIndex === -1) { + focusIndex = treeItems.findIndex(this.isFocusableElement); + } + if (focusIndex !== -1) { + return treeItems[focusIndex]; + } + return null; + } + /** + * checks if there are any nested tree items + */ + checkForNestedItems() { + return this.slottedTreeItems.some((node) => { + return isTreeItemElement(node) && node.querySelector("[role='treeitem']"); + }); + } + getVisibleNodes() { + return getDisplayedNodes(this, "[role='treeitem']") || []; + } + }; + __decorate([ + attr({ attribute: "render-collapsed-nodes" }) + ], TreeView.prototype, "renderCollapsedNodes", void 0); + __decorate([ + observable + ], TreeView.prototype, "currentSelected", void 0); + __decorate([ + observable + ], TreeView.prototype, "slottedTreeItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js + var init_tree_view2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js"() { + init_tree_view_template(); + init_tree_view(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js + var MatchMediaBehavior, MatchMediaStyleSheetBehavior, forcedColorsStylesheetBehavior, darkModeStylesheetBehavior, lightModeStylesheetBehavior; + var init_match_media_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js"() { + MatchMediaBehavior = class { + /** + * + * @param query - The media query to operate from. + */ + constructor(query) { + this.listenerCache = /* @__PURE__ */ new WeakMap(); + this.query = query; + } + /** + * Binds the behavior to the element. + * @param source - The element for which the behavior is bound. + */ + bind(source) { + const { query } = this; + const listener = this.constructListener(source); + listener.bind(query)(); + query.addListener(listener); + this.listenerCache.set(source, listener); + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + */ + unbind(source) { + const listener = this.listenerCache.get(source); + if (listener) { + this.query.removeListener(listener); + this.listenerCache.delete(source); + } + } + }; + MatchMediaStyleSheetBehavior = class _MatchMediaStyleSheetBehavior extends MatchMediaBehavior { + /** + * Constructs a {@link MatchMediaStyleSheetBehavior} instance. + * @param query - The media query to operate from. + * @param styles - The styles to coordinate with the query. + */ + constructor(query, styles) { + super(query); + this.styles = styles; + } + /** + * Defines a function to construct {@link MatchMediaStyleSheetBehavior | MatchMediaStyleSheetBehaviors} for + * a provided query. + * @param query - The media query to operate from. + * + * @public + * @example + * + * ```ts + * import { css } from "@microsoft/fast-element"; + * import { MatchMediaStyleSheetBehavior } from "@microsoft/fast-foundation"; + * + * const landscapeBehavior = MatchMediaStyleSheetBehavior.with( + * window.matchMedia("(orientation: landscape)") + * ); + * const styles = css` + * :host { + * width: 200px; + * height: 400px; + * } + * ` + * .withBehaviors(landscapeBehavior(css` + * :host { + * width: 400px; + * height: 200px; + * } + * `)) + * ``` + */ + static with(query) { + return (styles) => { + return new _MatchMediaStyleSheetBehavior(query, styles); + }; + } + /** + * Constructs a match-media listener for a provided element. + * @param source - the element for which to attach or detach styles. + * @internal + */ + constructListener(source) { + let attached = false; + const styles = this.styles; + return function listener() { + const { matches: matches2 } = this; + if (matches2 && !attached) { + source.$fastController.addStyles(styles); + attached = matches2; + } else if (!matches2 && attached) { + source.$fastController.removeStyles(styles); + attached = matches2; + } + }; + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + * @internal + */ + unbind(source) { + super.unbind(source); + source.$fastController.removeStyles(this.styles); + } + }; + forcedColorsStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(forced-colors)")); + darkModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: dark)")); + lightModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: light)")); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js + var init_property_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js + var disabledCursor; + var init_disabled = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js"() { + disabledCursor = "not-allowed"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js + function display(displayValue) { + return `${hidden}:host{display:${displayValue}}`; + } + var hidden; + var init_display = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js"() { + hidden = `:host([hidden]){display:none}`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js + var focusVisible; + var init_focus = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js"() { + init_dist2(); + focusVisible = canUseFocusVisible() ? "focus-visible" : "focus"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js + var init_style = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js"() { + init_disabled(); + init_display(); + init_focus(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js + var init_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js"() { + init_apply_mixins(); + init_composed_parent(); + init_match_media_stylesheet_behavior(); + init_property_stylesheet_behavior(); + init_style(); + init_direction(); + init_whitespace_filter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/index.js + var init_esm2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/index.js"() { + init_accordion_item2(); + init_accordion2(); + init_anchor2(); + init_anchored_region2(); + init_avatar2(); + init_badge2(); + init_breadcrumb_item2(); + init_breadcrumb2(); + init_button2(); + init_calendar2(); + init_card2(); + init_checkbox2(); + init_combobox2(); + init_data_grid2(); + init_design_system2(); + init_design_token(); + init_di2(); + init_dialog2(); + init_disclosure2(); + init_divider2(); + init_flipper2(); + init_form_associated2(); + init_foundation_element2(); + init_listbox_option2(); + init_listbox2(); + init_picker2(); + init_menu_item2(); + init_menu2(); + init_number_field2(); + init_patterns(); + init_progress_ring(); + init_progress(); + init_radio_group2(); + init_radio2(); + init_horizontal_scroll2(); + init_search2(); + init_select2(); + init_skeleton2(); + init_slider_label2(); + init_slider2(); + init_switch2(); + init_tab_panel2(); + init_tab2(); + init_tabs2(); + init_text_area2(); + init_text_field2(); + init_toolbar2(); + init_tooltip2(); + init_tree_item2(); + init_tree_view2(); + init_utilities(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js + function provideVSCodeDesignSystem(element) { + return DesignSystem.getOrCreate(element).withPrefix("vscode"); + } + var init_vscode_design_system = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js"() { + init_esm2(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js + function initThemeChangeListener(tokenMappings2) { + window.addEventListener("load", () => { + const observer = new MutationObserver(() => { + applyCurrentTheme(tokenMappings2); + }); + observer.observe(document.body, { + attributes: true, + attributeFilter: ["class"] + }); + applyCurrentTheme(tokenMappings2); + }); + } + function applyCurrentTheme(tokenMappings2) { + const styles = getComputedStyle(document.body); + const body = document.querySelector("body"); + if (body) { + const themeKind = body.getAttribute("data-vscode-theme-kind"); + for (const [vscodeTokenName, toolkitToken] of tokenMappings2) { + let value = styles.getPropertyValue(vscodeTokenName).toString(); + if (themeKind === "vscode-high-contrast") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + value = "transparent"; + } + if (toolkitToken.name === "button-icon-hover-background") { + value = "transparent"; + } + } else if (themeKind === "vscode-high-contrast-light") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + switch (toolkitToken.name) { + case "button-primary-hover-background": + value = "#0F4A85"; + break; + case "button-secondary-hover-background": + value = "transparent"; + break; + case "button-icon-hover-background": + value = "transparent"; + break; + } + } + } else { + if (toolkitToken.name === "contrast-active-border") { + value = "transparent"; + } + } + toolkitToken.setValueFor(body, value); + } + } + } + var init_applyTheme = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js + function create2(name, vscodeThemeVar) { + const designToken = DesignToken.create(name); + if (vscodeThemeVar) { + if (vscodeThemeVar.includes("--fake-vscode-token")) { + const uniqueId2 = "id" + Math.random().toString(16).slice(2); + vscodeThemeVar = `${vscodeThemeVar}-${uniqueId2}`; + } + tokenMappings.set(vscodeThemeVar, designToken); + } + if (!isThemeListenerInitialized) { + initThemeChangeListener(tokenMappings); + isThemeListenerInitialized = true; + } + return designToken; + } + var tokenMappings, isThemeListenerInitialized; + var init_create = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js"() { + init_esm2(); + init_applyTheme(); + tokenMappings = /* @__PURE__ */ new Map(); + isThemeListenerInitialized = false; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js + var background, borderWidth, contrastActiveBorder, contrastBorder, cornerRadius, cornerRadiusRound, designUnit, disabledOpacity, focusBorder, fontFamily, fontWeight, foreground, inputHeight, inputMinWidth, typeRampBaseFontSize, typeRampBaseLineHeight, typeRampMinus1FontSize, typeRampMinus1LineHeight, typeRampMinus2FontSize, typeRampMinus2LineHeight, typeRampPlus1FontSize, typeRampPlus1LineHeight, scrollbarWidth, scrollbarHeight, scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, badgeBackground, badgeForeground, buttonBorder, buttonIconBackground, buttonIconCornerRadius, buttonIconFocusBorderOffset, buttonIconHoverBackground, buttonIconPadding, buttonPrimaryBackground, buttonPrimaryForeground, buttonPrimaryHoverBackground, buttonSecondaryBackground, buttonSecondaryForeground, buttonSecondaryHoverBackground, buttonPaddingHorizontal, buttonPaddingVertical, checkboxBackground, checkboxBorder, checkboxCornerRadius, checkboxForeground, listActiveSelectionBackground, listActiveSelectionForeground, listHoverBackground, dividerBackground, dropdownBackground, dropdownBorder, dropdownForeground, dropdownListMaxHeight, inputBackground, inputForeground, inputPlaceholderForeground, linkActiveForeground, linkForeground, progressBackground, panelTabActiveBorder, panelTabActiveForeground, panelTabForeground, panelViewBackground, panelViewBorder, tagCornerRadius; + var init_design_tokens = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js"() { + init_create(); + background = create2("background", "--vscode-editor-background").withDefault("#1e1e1e"); + borderWidth = create2("border-width").withDefault(1); + contrastActiveBorder = create2("contrast-active-border", "--vscode-contrastActiveBorder").withDefault("#f38518"); + contrastBorder = create2("contrast-border", "--vscode-contrastBorder").withDefault("#6fc3df"); + cornerRadius = create2("corner-radius").withDefault(0); + cornerRadiusRound = create2("corner-radius-round").withDefault(2); + designUnit = create2("design-unit").withDefault(4); + disabledOpacity = create2("disabled-opacity").withDefault(0.4); + focusBorder = create2("focus-border", "--vscode-focusBorder").withDefault("#007fd4"); + fontFamily = create2("font-family", "--vscode-font-family").withDefault("-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol"); + fontWeight = create2("font-weight", "--vscode-font-weight").withDefault("400"); + foreground = create2("foreground", "--vscode-foreground").withDefault("#cccccc"); + inputHeight = create2("input-height").withDefault("26"); + inputMinWidth = create2("input-min-width").withDefault("100px"); + typeRampBaseFontSize = create2("type-ramp-base-font-size", "--vscode-font-size").withDefault("13px"); + typeRampBaseLineHeight = create2("type-ramp-base-line-height").withDefault("normal"); + typeRampMinus1FontSize = create2("type-ramp-minus1-font-size").withDefault("11px"); + typeRampMinus1LineHeight = create2("type-ramp-minus1-line-height").withDefault("16px"); + typeRampMinus2FontSize = create2("type-ramp-minus2-font-size").withDefault("9px"); + typeRampMinus2LineHeight = create2("type-ramp-minus2-line-height").withDefault("16px"); + typeRampPlus1FontSize = create2("type-ramp-plus1-font-size").withDefault("16px"); + typeRampPlus1LineHeight = create2("type-ramp-plus1-line-height").withDefault("24px"); + scrollbarWidth = create2("scrollbarWidth").withDefault("10px"); + scrollbarHeight = create2("scrollbarHeight").withDefault("10px"); + scrollbarSliderBackground = create2("scrollbar-slider-background", "--vscode-scrollbarSlider-background").withDefault("#79797966"); + scrollbarSliderHoverBackground = create2("scrollbar-slider-hover-background", "--vscode-scrollbarSlider-hoverBackground").withDefault("#646464b3"); + scrollbarSliderActiveBackground = create2("scrollbar-slider-active-background", "--vscode-scrollbarSlider-activeBackground").withDefault("#bfbfbf66"); + badgeBackground = create2("badge-background", "--vscode-badge-background").withDefault("#4d4d4d"); + badgeForeground = create2("badge-foreground", "--vscode-badge-foreground").withDefault("#ffffff"); + buttonBorder = create2("button-border", "--vscode-button-border").withDefault("transparent"); + buttonIconBackground = create2("button-icon-background").withDefault("transparent"); + buttonIconCornerRadius = create2("button-icon-corner-radius").withDefault("5px"); + buttonIconFocusBorderOffset = create2("button-icon-outline-offset").withDefault(0); + buttonIconHoverBackground = create2("button-icon-hover-background", "--fake-vscode-token").withDefault("rgba(90, 93, 94, 0.31)"); + buttonIconPadding = create2("button-icon-padding").withDefault("3px"); + buttonPrimaryBackground = create2("button-primary-background", "--vscode-button-background").withDefault("#0e639c"); + buttonPrimaryForeground = create2("button-primary-foreground", "--vscode-button-foreground").withDefault("#ffffff"); + buttonPrimaryHoverBackground = create2("button-primary-hover-background", "--vscode-button-hoverBackground").withDefault("#1177bb"); + buttonSecondaryBackground = create2("button-secondary-background", "--vscode-button-secondaryBackground").withDefault("#3a3d41"); + buttonSecondaryForeground = create2("button-secondary-foreground", "--vscode-button-secondaryForeground").withDefault("#ffffff"); + buttonSecondaryHoverBackground = create2("button-secondary-hover-background", "--vscode-button-secondaryHoverBackground").withDefault("#45494e"); + buttonPaddingHorizontal = create2("button-padding-horizontal").withDefault("11px"); + buttonPaddingVertical = create2("button-padding-vertical").withDefault("4px"); + checkboxBackground = create2("checkbox-background", "--vscode-checkbox-background").withDefault("#3c3c3c"); + checkboxBorder = create2("checkbox-border", "--vscode-checkbox-border").withDefault("#3c3c3c"); + checkboxCornerRadius = create2("checkbox-corner-radius").withDefault(3); + checkboxForeground = create2("checkbox-foreground", "--vscode-checkbox-foreground").withDefault("#f0f0f0"); + listActiveSelectionBackground = create2("list-active-selection-background", "--vscode-list-activeSelectionBackground").withDefault("#094771"); + listActiveSelectionForeground = create2("list-active-selection-foreground", "--vscode-list-activeSelectionForeground").withDefault("#ffffff"); + listHoverBackground = create2("list-hover-background", "--vscode-list-hoverBackground").withDefault("#2a2d2e"); + dividerBackground = create2("divider-background", "--vscode-settings-dropdownListBorder").withDefault("#454545"); + dropdownBackground = create2("dropdown-background", "--vscode-dropdown-background").withDefault("#3c3c3c"); + dropdownBorder = create2("dropdown-border", "--vscode-dropdown-border").withDefault("#3c3c3c"); + dropdownForeground = create2("dropdown-foreground", "--vscode-dropdown-foreground").withDefault("#f0f0f0"); + dropdownListMaxHeight = create2("dropdown-list-max-height").withDefault("200px"); + inputBackground = create2("input-background", "--vscode-input-background").withDefault("#3c3c3c"); + inputForeground = create2("input-foreground", "--vscode-input-foreground").withDefault("#cccccc"); + inputPlaceholderForeground = create2("input-placeholder-foreground", "--vscode-input-placeholderForeground").withDefault("#cccccc"); + linkActiveForeground = create2("link-active-foreground", "--vscode-textLink-activeForeground").withDefault("#3794ff"); + linkForeground = create2("link-foreground", "--vscode-textLink-foreground").withDefault("#3794ff"); + progressBackground = create2("progress-background", "--vscode-progressBar-background").withDefault("#0e70c0"); + panelTabActiveBorder = create2("panel-tab-active-border", "--vscode-panelTitle-activeBorder").withDefault("#e7e7e7"); + panelTabActiveForeground = create2("panel-tab-active-foreground", "--vscode-panelTitle-activeForeground").withDefault("#e7e7e7"); + panelTabForeground = create2("panel-tab-foreground", "--vscode-panelTitle-inactiveForeground").withDefault("#e7e7e799"); + panelViewBackground = create2("panel-view-background", "--vscode-panel-background").withDefault("#1e1e1e"); + panelViewBorder = create2("panel-view-border", "--vscode-panel-border").withDefault("#80808059"); + tagCornerRadius = create2("tag-corner-radius").withDefault("2px"); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js + var badgeStyles; + var init_badge_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + badgeStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + text-align: center; + } + .control { + align-items: center; + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: 11px; + box-sizing: border-box; + color: ${badgeForeground}; + display: flex; + height: calc(${designUnit} * 4px); + justify-content: center; + min-width: calc(${designUnit} * 4px + 2px); + min-height: calc(${designUnit} * 4px + 2px); + padding: 3px 6px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js + var Badge2, vsCodeBadge; + var init_badge3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js"() { + init_esm2(); + init_badge_styles(); + Badge2 = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.circular) { + this.circular = true; + } + } + }; + vsCodeBadge = Badge2.compose({ + baseName: "badge", + template: badgeTemplate, + styles: badgeStyles + }); + } + }); + + // node_modules/tslib/tslib.es6.mjs + function __decorate2(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es62 = __esm({ + "node_modules/tslib/tslib.es6.mjs"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js + var BaseButtonStyles, PrimaryButtonStyles, SecondaryButtonStyles, IconButtonStyles, buttonStyles; + var init_button_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + BaseButtonStyles = css` + ${display("inline-flex")} :host { + outline: none; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${buttonPrimaryForeground}; + background: ${buttonPrimaryBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + fill: currentColor; + cursor: pointer; + } + .control { + background: transparent; + height: inherit; + flex-grow: 1; + box-sizing: border-box; + display: inline-flex; + justify-content: center; + align-items: center; + padding: ${buttonPaddingVertical} ${buttonPaddingHorizontal}; + white-space: wrap; + outline: none; + text-decoration: none; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + color: inherit; + border-radius: inherit; + fill: inherit; + cursor: inherit; + font-family: inherit; + } + :host(:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host(:active) { + background: ${buttonPrimaryBackground}; + } + .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + .control::-moz-focus-inner { + border: 0; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + background: ${buttonPrimaryBackground}; + cursor: ${disabledCursor}; + } + .content { + display: flex; + } + .start { + display: flex; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-end: 8px; + } +`; + PrimaryButtonStyles = css` + :host([appearance='primary']) { + background: ${buttonPrimaryBackground}; + color: ${buttonPrimaryForeground}; + } + :host([appearance='primary']:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host([appearance='primary']:active) .control:active { + background: ${buttonPrimaryBackground}; + } + :host([appearance='primary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='primary'][disabled]) { + background: ${buttonPrimaryBackground}; + } +`; + SecondaryButtonStyles = css` + :host([appearance='secondary']) { + background: ${buttonSecondaryBackground}; + color: ${buttonSecondaryForeground}; + } + :host([appearance='secondary']:hover) { + background: ${buttonSecondaryHoverBackground}; + } + :host([appearance='secondary']:active) .control:active { + background: ${buttonSecondaryBackground}; + } + :host([appearance='secondary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='secondary'][disabled]) { + background: ${buttonSecondaryBackground}; + } +`; + IconButtonStyles = css` + :host([appearance='icon']) { + background: ${buttonIconBackground}; + border-radius: ${buttonIconCornerRadius}; + color: ${foreground}; + } + :host([appearance='icon']:hover) { + background: ${buttonIconHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } + :host([appearance='icon']) .control { + padding: ${buttonIconPadding}; + border: none; + } + :host([appearance='icon']:active) .control:active { + background: ${buttonIconHoverBackground}; + } + :host([appearance='icon']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: ${buttonIconFocusBorderOffset}; + } + :host([appearance='icon'][disabled]) { + background: ${buttonIconBackground}; + } +`; + buttonStyles = (context, definition) => css` + ${BaseButtonStyles} + ${PrimaryButtonStyles} + ${SecondaryButtonStyles} + ${IconButtonStyles} +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/index.js + var Button2, vsCodeButton; + var init_button3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/index.js"() { + init_tslib_es62(); + init_esm(); + init_esm2(); + init_button_styles(); + Button2 = class extends Button { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.appearance) { + const appearanceValue = this.getAttribute("appearance"); + this.appearance = appearanceValue; + } + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "appearance" && newVal === "icon") { + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.ariaLabel = "Icon Button"; + } + } + if (attrName === "aria-label") { + this.ariaLabel = newVal; + } + if (attrName === "disabled") { + this.disabled = newVal !== null; + } + } + }; + __decorate2([ + attr + ], Button2.prototype, "appearance", void 0); + vsCodeButton = Button2.compose({ + baseName: "button", + template: buttonTemplate, + styles: buttonStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js + var checkboxStyles; + var init_checkbox_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + checkboxStyles = (context, defintiion) => css` + ${display("inline-flex")} :host { + align-items: center; + outline: none; + margin: calc(${designUnit} * 1px) 0; + user-select: none; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control { + position: relative; + width: calc(${designUnit} * 4px + 2px); + height: calc(${designUnit} * 4px + 2px); + box-sizing: border-box; + border-radius: calc(${checkboxCornerRadius} * 1px); + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + background: ${checkboxBackground}; + outline: none; + cursor: pointer; + } + .label { + font-family: ${fontFamily}; + color: ${foreground}; + padding-inline-start: calc(${designUnit} * 2px + 2px); + margin-inline-end: calc(${designUnit} * 2px + 2px); + cursor: pointer; + } + .label__hidden { + display: none; + visibility: hidden; + } + .checked-indicator { + width: 100%; + height: 100%; + display: block; + fill: ${foreground}; + opacity: 0; + pointer-events: none; + } + .indeterminate-indicator { + border-radius: 2px; + background: ${foreground}; + position: absolute; + top: 50%; + left: 50%; + width: 50%; + height: 50%; + transform: translate(-50%, -50%); + opacity: 0; + } + :host(:enabled) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:enabled) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host(.disabled) .label, + :host(.readonly) .label, + :host(.readonly) .control, + :host(.disabled) .control { + cursor: ${disabledCursor}; + } + :host(.checked:not(.indeterminate)) .checked-indicator, + :host(.indeterminate) .indeterminate-indicator { + opacity: 1; + } + :host(.disabled) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js + var Checkbox2, vsCodeCheckbox; + var init_checkbox3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js"() { + init_esm2(); + init_checkbox_styles(); + Checkbox2 = class extends Checkbox { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Checkbox"); + } + } + }; + vsCodeCheckbox = Checkbox2.compose({ + baseName: "checkbox", + template: checkboxTemplate, + styles: checkboxStyles, + checkedIndicator: ` + + + + `, + indeterminateIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js + var dataGridStyles; + var init_data_grid_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js"() { + init_esm(); + dataGridStyles = (context, definition) => css` + :host { + display: flex; + position: relative; + flex-direction: column; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js + var dataGridRowStyles; + var init_data_grid_row_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js"() { + init_esm(); + init_design_tokens(); + dataGridRowStyles = (context, definition) => css` + :host { + display: grid; + padding: calc((${designUnit} / 4) * 1px) 0; + box-sizing: border-box; + width: 100%; + background: transparent; + } + :host(.header) { + } + :host(.sticky-header) { + background: ${background}; + position: sticky; + top: 0; + } + :host(:hover) { + background: ${listHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js + var dataGridCellStyles; + var init_data_grid_cell_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dataGridCellStyles = (context, definition) => css` + :host { + padding: calc(${designUnit} * 1px) calc(${designUnit} * 3px); + color: ${foreground}; + opacity: 1; + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + font-weight: 400; + border: solid calc(${borderWidth} * 1px) transparent; + border-radius: calc(${cornerRadius} * 1px); + white-space: wrap; + overflow-wrap: anywhere; + } + :host(.column-header) { + font-weight: 600; + } + :host(:${focusVisible}), + :host(:focus), + :host(:active) { + background: ${listActiveSelectionBackground}; + border: solid calc(${borderWidth} * 1px) ${focusBorder}; + color: ${listActiveSelectionForeground}; + outline: none; + } + :host(:${focusVisible}) ::slotted(*), + :host(:focus) ::slotted(*), + :host(:active) ::slotted(*) { + color: ${listActiveSelectionForeground} !important; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js + var DataGrid2, vsCodeDataGrid, DataGridRow2, vsCodeDataGridRow, DataGridCell2, vsCodeDataGridCell; + var init_data_grid3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js"() { + init_esm2(); + init_data_grid_styles(); + init_data_grid_row_styles(); + init_data_grid_cell_styles(); + DataGrid2 = class extends DataGrid { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Data Grid"); + } + } + }; + vsCodeDataGrid = DataGrid2.compose({ + baseName: "data-grid", + baseClass: DataGrid, + template: dataGridTemplate, + styles: dataGridStyles + }); + DataGridRow2 = class extends DataGridRow { + }; + vsCodeDataGridRow = DataGridRow2.compose({ + baseName: "data-grid-row", + baseClass: DataGridRow, + template: dataGridRowTemplate, + styles: dataGridRowStyles + }); + DataGridCell2 = class extends DataGridCell { + }; + vsCodeDataGridCell = DataGridCell2.compose({ + baseName: "data-grid-cell", + baseClass: DataGridCell, + template: dataGridCellTemplate, + styles: dataGridCellStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js + var dividerStyles; + var init_divider_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dividerStyles = (context, definition) => css` + ${display("block")} :host { + border: none; + border-top: calc(${borderWidth} * 1px) solid ${dividerBackground}; + box-sizing: content-box; + height: 0; + margin: calc(${designUnit} * 1px) 0; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js + var Divider2, vsCodeDivider; + var init_divider3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js"() { + init_esm2(); + init_divider_styles(); + Divider2 = class extends Divider { + }; + vsCodeDivider = Divider2.compose({ + baseName: "divider", + template: dividerTemplate, + styles: dividerStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js + var dropdownStyles; + var init_dropdown_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dropdownStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: ${dropdownBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + color: ${foreground}; + contain: contents; + font-family: ${fontFamily}; + height: calc(${inputHeight} * 1px); + position: relative; + user-select: none; + min-width: ${inputMinWidth}; + outline: none; + vertical-align: top; + } + .control { + align-items: center; + box-sizing: border-box; + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + cursor: pointer; + display: flex; + font-family: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + min-height: 100%; + padding: 2px 6px 2px 8px; + width: 100%; + } + .listbox { + background: ${dropdownBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + display: inline-flex; + flex-direction: column; + left: 0; + max-height: ${dropdownListMaxHeight}; + padding: 0; + overflow-y: auto; + position: absolute; + width: 100%; + z-index: 1; + } + .listbox[hidden] { + display: none; + } + :host(:${focusVisible}) .control { + border-color: ${focusBorder}; + } + :host(:not([disabled]):hover) { + background: ${dropdownBackground}; + border-color: ${dropdownBorder}; + } + :host(:${focusVisible}) ::slotted([aria-selected="true"][role="option"]:not([disabled])) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + cursor: ${disabledCursor}; + user-select: none; + } + :host([disabled]:hover) { + background: ${dropdownBackground}; + color: ${foreground}; + fill: currentcolor; + } + :host(:not([disabled])) .control:active { + border-color: ${focusBorder}; + } + :host(:empty) .listbox { + display: none; + } + :host([open]) .control { + border-color: ${focusBorder}; + } + :host([open][position='above']) .listbox { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + :host([open][position='below']) .listbox { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + :host([open][position='above']) .listbox { + bottom: calc(${inputHeight} * 1px); + } + :host([open][position='below']) .listbox { + top: calc(${inputHeight} * 1px); + } + .selected-value { + flex: 1 1 auto; + font-family: inherit; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + } + .indicator { + flex: 0 0 auto; + margin-inline-start: 1em; + } + slot[name='listbox'] { + display: none; + width: 100%; + } + :host([open]) slot[name='listbox'] { + display: flex; + position: absolute; + } + .end { + margin-inline-start: auto; + } + .start, + .end, + .indicator, + .select-indicator, + ::slotted(svg), + ::slotted(span) { + fill: currentcolor; + height: 1em; + min-height: calc(${designUnit} * 4px); + min-width: calc(${designUnit} * 4px); + width: 1em; + } + ::slotted([role='option']), + ::slotted(option) { + flex: 0 0 auto; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js + var Dropdown, vsCodeDropdown; + var init_dropdown = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js"() { + init_esm2(); + init_dropdown_styles(); + Dropdown = class extends Select { + }; + vsCodeDropdown = Dropdown.compose({ + baseName: "dropdown", + template: selectTemplate, + styles: dropdownStyles, + indicator: ` + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js + var linkStyles; + var init_link_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + linkStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: transparent; + box-sizing: border-box; + color: ${linkForeground}; + cursor: pointer; + fill: currentcolor; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + outline: none; + } + .control { + background: transparent; + border: calc(${borderWidth} * 1px) solid transparent; + border-radius: calc(${cornerRadius} * 1px); + box-sizing: border-box; + color: inherit; + cursor: inherit; + fill: inherit; + font-family: inherit; + height: inherit; + padding: 0; + outline: none; + text-decoration: none; + word-break: break-word; + } + .control::-moz-focus-inner { + border: 0; + } + :host(:hover) { + color: ${linkActiveForeground}; + } + :host(:hover) .content { + text-decoration: underline; + } + :host(:active) { + background: transparent; + color: ${linkActiveForeground}; + } + :host(:${focusVisible}) .control, + :host(:focus) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/index.js + var Link, vsCodeLink; + var init_link = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/index.js"() { + init_esm2(); + init_link_styles(); + Link = class extends Anchor { + }; + vsCodeLink = Link.compose({ + baseName: "link", + template: anchorTemplate, + styles: linkStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js + var optionStyles; + var init_option_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + optionStyles = (context, definition) => css` + ${display("inline-flex")} :host { + font-family: var(--body-font); + border-radius: ${cornerRadius}; + border: calc(${borderWidth} * 1px) solid transparent; + box-sizing: border-box; + color: ${foreground}; + cursor: pointer; + fill: currentcolor; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: 0; + outline: none; + overflow: hidden; + padding: 0 calc((${designUnit} / 2) * 1px) + calc((${designUnit} / 4) * 1px); + user-select: none; + white-space: nowrap; + } + :host(:${focusVisible}) { + border-color: ${focusBorder}; + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([aria-selected='true']) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:active) { + background: ${listActiveSelectionBackground}; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):hover) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):active) { + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]:hover) { + background-color: inherit; + } + .content { + grid-column-start: 2; + justify-self: start; + overflow: hidden; + text-overflow: ellipsis; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/index.js + var Option2, vsCodeOption; + var init_option = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/index.js"() { + init_esm2(); + init_option_styles(); + Option2 = class extends ListboxOption { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Option"); + } + } + }; + vsCodeOption = Option2.compose({ + baseName: "option", + template: listboxOptionTemplate, + styles: optionStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js + var panelsStyles; + var init_panels_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelsStyles = (context, definition) => css` + ${display("grid")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${foreground}; + grid-template-columns: auto 1fr auto; + grid-template-rows: auto 1fr; + overflow-x: auto; + } + .tablist { + display: grid; + grid-template-rows: auto auto; + grid-template-columns: auto; + column-gap: calc(${designUnit} * 8px); + position: relative; + width: max-content; + align-self: end; + padding: calc(${designUnit} * 1px) calc(${designUnit} * 1px) 0; + box-sizing: border-box; + } + .start, + .end { + align-self: center; + } + .activeIndicator { + grid-row: 2; + grid-column: 1; + width: 100%; + height: calc((${designUnit} / 4) * 1px); + justify-self: center; + background: ${panelTabActiveForeground}; + margin: 0; + border-radius: calc(${cornerRadius} * 1px); + } + .activeIndicatorTransition { + transition: transform 0.01s linear; + } + .tabpanel { + grid-row: 2; + grid-column-start: 1; + grid-column-end: 4; + position: relative; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js + var panelTabStyles; + var init_panel_tab_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelTabStyles = (context, definition) => css` + ${display("inline-flex")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + height: calc(${designUnit} * 7px); + padding: calc(${designUnit} * 1px) 0; + color: ${panelTabForeground}; + fill: currentcolor; + border-radius: calc(${cornerRadius} * 1px); + border: solid calc(${borderWidth} * 1px) transparent; + align-items: center; + justify-content: center; + grid-row: 1; + cursor: pointer; + } + :host(:hover) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:active) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:hover) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:active) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:${focusVisible}) { + outline: none; + border: solid calc(${borderWidth} * 1px) ${panelTabActiveBorder}; + } + :host(:focus) { + outline: none; + } + ::slotted(vscode-badge) { + margin-inline-start: calc(${designUnit} * 2px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js + var panelViewStyles; + var init_panel_view_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelViewStyles = (context, definition) => css` + ${display("flex")} :host { + color: inherit; + background-color: transparent; + border: solid calc(${borderWidth} * 1px) transparent; + box-sizing: border-box; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: 10px calc((${designUnit} + 2) * 1px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js + var Panels, vsCodePanels, PanelTab, vsCodePanelTab, PanelView, vsCodePanelView; + var init_panels = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js"() { + init_esm2(); + init_panels_styles(); + init_panel_tab_styles(); + init_panel_view_styles(); + Panels = class extends Tabs { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.orientation) { + this.orientation = TabsOrientation.horizontal; + } + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Panels"); + } + } + }; + vsCodePanels = Panels.compose({ + baseName: "panels", + template: tabsTemplate, + styles: panelsStyles + }); + PanelTab = class extends Tab { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.disabled) { + this.disabled = false; + } + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } + } + }; + vsCodePanelTab = PanelTab.compose({ + baseName: "panel-tab", + template: tabTemplate, + styles: panelTabStyles + }); + PanelView = class extends TabPanel { + }; + vsCodePanelView = PanelView.compose({ + baseName: "panel-view", + template: tabPanelTemplate, + styles: panelViewStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js + var progressRingStyles; + var init_progress_ring_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + progressRingStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: center; + outline: none; + height: calc(${designUnit} * 7px); + width: calc(${designUnit} * 7px); + margin: 0; + } + .progress { + height: 100%; + width: 100%; + } + .background { + fill: none; + stroke: transparent; + stroke-width: calc(${designUnit} / 2 * 1px); + } + .indeterminate-indicator-1 { + fill: none; + stroke: ${progressBackground}; + stroke-width: calc(${designUnit} / 2 * 1px); + stroke-linecap: square; + transform-origin: 50% 50%; + transform: rotate(-90deg); + transition: all 0.2s ease-in-out; + animation: spin-infinite 2s linear infinite; + } + @keyframes spin-infinite { + 0% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(0deg); + } + 50% { + stroke-dasharray: 21.99px 21.99px; + transform: rotate(450deg); + } + 100% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(1080deg); + } + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js + var ProgressRing, vsCodeProgressRing; + var init_progress_ring2 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js"() { + init_esm2(); + init_progress_ring_styles(); + ProgressRing = class extends BaseProgress { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.paused) { + this.paused = false; + } + this.setAttribute("aria-label", "Loading"); + this.setAttribute("aria-live", "assertive"); + this.setAttribute("role", "alert"); + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "value") { + this.removeAttribute("value"); + } + } + }; + vsCodeProgressRing = ProgressRing.compose({ + baseName: "progress-ring", + template: progressRingTemplate, + styles: progressRingStyles, + indeterminateIndicator: ` + + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js + var radioGroupStyles; + var init_radio_group_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioGroupStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: flex-start; + margin: calc(${designUnit} * 1px) 0; + flex-direction: column; + } + .positioning-region { + display: flex; + flex-wrap: wrap; + } + :host([orientation='vertical']) .positioning-region { + flex-direction: column; + } + :host([orientation='horizontal']) .positioning-region { + flex-direction: row; + } + ::slotted([slot='label']) { + color: ${foreground}; + font-size: ${typeRampBaseFontSize}; + margin: calc(${designUnit} * 1px) 0; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js + var RadioGroup2, vsCodeRadioGroup; + var init_radio_group3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js"() { + init_dist2(); + init_esm2(); + init_radio_group_styles(); + RadioGroup2 = class extends RadioGroup { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const label = this.querySelector("label"); + if (label) { + const id = "radio-group-" + Math.random().toString(16).slice(2); + label.setAttribute("id", id); + this.setAttribute("aria-labelledby", id); + } + } + }; + vsCodeRadioGroup = RadioGroup2.compose({ + baseName: "radio-group", + template: radioGroupTemplate, + styles: radioGroupStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js + var radioStyles; + var init_radio_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioStyles = (context, definition) => css` + ${display("inline-flex")} :host { + align-items: center; + flex-direction: row; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: calc(${designUnit} * 1px) 0; + outline: none; + position: relative; + transition: all 0.2s ease-in-out; + user-select: none; + } + .control { + background: ${checkboxBackground}; + border-radius: 999px; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + box-sizing: border-box; + cursor: pointer; + height: calc(${designUnit} * 4px); + position: relative; + outline: none; + width: calc(${designUnit} * 4px); + } + .label { + color: ${foreground}; + cursor: pointer; + font-family: ${fontFamily}; + margin-inline-end: calc(${designUnit} * 2px + 2px); + padding-inline-start: calc(${designUnit} * 2px + 2px); + } + .label__hidden { + display: none; + visibility: hidden; + } + .control, + .checked-indicator { + flex-shrink: 0; + } + .checked-indicator { + background: ${foreground}; + border-radius: 999px; + display: inline-block; + inset: calc(${designUnit} * 1px); + opacity: 0; + pointer-events: none; + position: absolute; + } + :host(:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:not([disabled])) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked='true']) .control { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:active { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked="true"]:${focusVisible}:not([disabled])) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([aria-checked='true']) .checked-indicator { + opacity: 1; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js + var Radio2, vsCodeRadio; + var init_radio3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js"() { + init_esm2(); + init_radio_styles(); + Radio2 = class extends Radio { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Radio"); + } + } + }; + vsCodeRadio = Radio2.compose({ + baseName: "radio", + template: radioTemplate, + styles: radioStyles, + checkedIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js + var tagStyles; + var init_tag_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + tagStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + } + .control { + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: ${tagCornerRadius}; + color: ${badgeForeground}; + padding: calc(${designUnit} * 0.5px) calc(${designUnit} * 1px); + text-transform: uppercase; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js + var Tag, vsCodeTag; + var init_tag = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js"() { + init_esm2(); + init_tag_styles(); + Tag = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.circular) { + this.circular = false; + } + } + }; + vsCodeTag = Tag.compose({ + baseName: "tag", + template: badgeTemplate, + styles: tagStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js + var textAreaStyles; + var init_text_area_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textAreaStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .control { + box-sizing: border-box; + position: relative; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + font: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: calc(${designUnit} * 2px + 1px); + width: 100%; + min-width: ${inputMinWidth}; + resize: none; + } + .control:hover:enabled { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + .control:active:enabled { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .control::-webkit-scrollbar { + width: ${scrollbarWidth}; + height: ${scrollbarHeight}; + } + .control::-webkit-scrollbar-corner { + background: ${inputBackground}; + } + .control::-webkit-scrollbar-thumb { + background: ${scrollbarSliderBackground}; + } + .control::-webkit-scrollbar-thumb:hover { + background: ${scrollbarSliderHoverBackground}; + } + .control::-webkit-scrollbar-thumb:active { + background: ${scrollbarSliderActiveBackground}; + } + :host(:focus-within:not([disabled])) .control { + border-color: ${focusBorder}; + } + :host([resize='both']) .control { + resize: both; + } + :host([resize='horizontal']) .control { + resize: horizontal; + } + :host([resize='vertical']) .control { + resize: vertical; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js + var TextArea2, vsCodeTextArea; + var init_text_area3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js"() { + init_esm2(); + init_text_area_styles(); + TextArea2 = class extends TextArea { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text area"); + } + } + }; + vsCodeTextArea = TextArea2.compose({ + baseName: "text-area", + template: textAreaTemplate, + styles: textAreaStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js + var textFieldStyles; + var init_text_field_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textFieldStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .root { + box-sizing: border-box; + position: relative; + display: flex; + flex-direction: row; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + height: calc(${inputHeight} * 1px); + min-width: ${inputMinWidth}; + } + .control { + -webkit-appearance: none; + font: inherit; + background: transparent; + border: 0; + color: inherit; + height: calc(100% - (${designUnit} * 1px)); + width: 100%; + margin-top: auto; + margin-bottom: auto; + border: none; + padding: 0 calc(${designUnit} * 2px + 1px); + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + .start, + .end { + display: flex; + margin: auto; + fill: currentcolor; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-start: calc(${designUnit} * 2px); + } + .end { + margin-inline-end: calc(${designUnit} * 2px); + } + :host(:hover:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + :host(:active:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + :host(:focus-within:not([disabled])) .root { + border-color: ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js + var TextField2, vsCodeTextField; + var init_text_field3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js"() { + init_esm2(); + init_text_field_styles(); + TextField2 = class extends TextField { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text field"); + } + } + }; + vsCodeTextField = TextField2.compose({ + baseName: "text-field", + template: textFieldTemplate, + styles: textFieldStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js + var allComponents; + var init_custom_elements = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js"() { + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + allComponents = { + vsCodeBadge, + vsCodeButton, + vsCodeCheckbox, + vsCodeDataGrid, + vsCodeDataGridCell, + vsCodeDataGridRow, + vsCodeDivider, + vsCodeDropdown, + vsCodeLink, + vsCodeOption, + vsCodePanels, + vsCodePanelTab, + vsCodePanelView, + vsCodeProgressRing, + vsCodeRadioGroup, + vsCodeRadio, + vsCodeTag, + vsCodeTextArea, + vsCodeTextField, + register(container, ...rest) { + if (!container) { + return; + } + for (const key in this) { + if (key === "register") { + continue; + } + this[key]().register(container, ...rest); + } + } + }; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/index.js + var dist_exports = {}; + __export(dist_exports, { + Badge: () => Badge2, + Button: () => Button2, + Checkbox: () => Checkbox2, + DataGrid: () => DataGrid2, + DataGridCell: () => DataGridCell2, + DataGridCellTypes: () => DataGridCellTypes, + DataGridRow: () => DataGridRow2, + DataGridRowTypes: () => DataGridRowTypes, + Divider: () => Divider2, + DividerRole: () => DividerRole, + Dropdown: () => Dropdown, + DropdownPosition: () => SelectPosition, + GenerateHeaderOptions: () => GenerateHeaderOptions, + Link: () => Link, + Option: () => Option2, + PanelTab: () => PanelTab, + PanelView: () => PanelView, + Panels: () => Panels, + ProgressRing: () => ProgressRing, + Radio: () => Radio2, + RadioGroup: () => RadioGroup2, + RadioGroupOrientation: () => Orientation, + Tag: () => Tag, + TextArea: () => TextArea2, + TextAreaResize: () => TextAreaResize, + TextField: () => TextField2, + TextFieldType: () => TextFieldType, + allComponents: () => allComponents, + provideVSCodeDesignSystem: () => provideVSCodeDesignSystem, + vsCodeBadge: () => vsCodeBadge, + vsCodeButton: () => vsCodeButton, + vsCodeCheckbox: () => vsCodeCheckbox, + vsCodeDataGrid: () => vsCodeDataGrid, + vsCodeDataGridCell: () => vsCodeDataGridCell, + vsCodeDataGridRow: () => vsCodeDataGridRow, + vsCodeDivider: () => vsCodeDivider, + vsCodeDropdown: () => vsCodeDropdown, + vsCodeLink: () => vsCodeLink, + vsCodeOption: () => vsCodeOption, + vsCodePanelTab: () => vsCodePanelTab, + vsCodePanelView: () => vsCodePanelView, + vsCodePanels: () => vsCodePanels, + vsCodeProgressRing: () => vsCodeProgressRing, + vsCodeRadio: () => vsCodeRadio, + vsCodeRadioGroup: () => vsCodeRadioGroup, + vsCodeTag: () => vsCodeTag, + vsCodeTextArea: () => vsCodeTextArea, + vsCodeTextField: () => vsCodeTextField + }); + var init_dist3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/index.js"() { + init_vscode_design_system(); + init_custom_elements(); + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + } + }); + + // src/webview/shared/buttonConfig.ts + var BUTTONS = { + "btn-refresh": { + id: "btn-refresh", + label: "\u{1F504} Refresh", + appearance: "primary" + }, + "btn-details": { + id: "btn-details", + label: "\u{1F916} Details" + }, + "btn-chart": { + id: "btn-chart", + label: "\u{1F4C8} Chart" + }, + "btn-usage": { + id: "btn-usage", + label: "\u{1F4CA} Usage Analysis" + }, + "btn-diagnostics": { + id: "btn-diagnostics", + label: "\u{1F50D} Diagnostics" + }, + "btn-maturity": { + id: "btn-maturity", + label: "\u{1F3AF} Fluency Score" + }, + "btn-dashboard": { + id: "btn-dashboard", + label: "\u{1F4CA} Team Dashboard" + }, + "btn-level-viewer": { + id: "btn-level-viewer", + label: "\u{1F50D} Level Viewer" + }, + "btn-environmental": { + id: "btn-environmental", + label: "\u{1F33F} Environmental Impact" + } + }; + function buttonHtml(id) { + const config = BUTTONS[id]; + const appearance = config.appearance ? ` appearance="${config.appearance}"` : ""; + return `${config.label}`; + } + + // src/webview/shared/theme.css + var theme_default = '/**\n * Shared theme variables for all webview panels\n * Uses VS Code theme tokens for automatic light/dark theme support\n */\n\n:root {\n /* VS Code base colors */\n --bg-primary: var(--vscode-editor-background);\n --bg-secondary: var(--vscode-sideBar-background);\n --bg-tertiary: var(--vscode-editorWidget-background);\n --text-primary: var(--vscode-editor-foreground);\n --text-secondary: var(--vscode-descriptionForeground);\n --text-muted: var(--vscode-disabledForeground);\n --border-color: var(--vscode-panel-border);\n --border-subtle: var(--vscode-widget-border);\n \n /* Button colors */\n --button-bg: var(--vscode-button-background);\n --button-fg: var(--vscode-button-foreground);\n --button-hover-bg: var(--vscode-button-hoverBackground);\n --button-secondary-bg: var(--vscode-button-secondaryBackground);\n --button-secondary-fg: var(--vscode-button-secondaryForeground);\n --button-secondary-hover-bg: var(--vscode-button-secondaryHoverBackground);\n \n /* Input colors */\n --input-bg: var(--vscode-input-background);\n --input-fg: var(--vscode-input-foreground);\n --input-border: var(--vscode-input-border);\n \n /* List/card colors */\n --list-hover-bg: var(--vscode-list-hoverBackground);\n --list-active-bg: var(--vscode-list-activeSelectionBackground);\n --list-active-fg: var(--vscode-list-activeSelectionForeground);\n --list-inactive-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Alternating row colors for better readability */\n --row-alternate-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Badge colors */\n --badge-bg: var(--vscode-badge-background);\n --badge-fg: var(--vscode-badge-foreground);\n \n /* Focus colors */\n --focus-border: var(--vscode-focusBorder);\n \n /* Link colors */\n --link-color: var(--vscode-textLink-foreground);\n --link-hover-color: var(--vscode-textLink-activeForeground);\n \n /* Status colors */\n --error-fg: var(--vscode-errorForeground);\n --warning-fg: var(--vscode-editorWarning-foreground);\n --success-fg: var(--vscode-terminal-ansiGreen);\n \n /* Shadow for cards */\n --shadow-color: rgb(0, 0, 0, 0.16);\n --shadow-hover-color: rgb(0, 0, 0, 0.24);\n}\n\n/* Light theme adjustments */\nbody[data-vscode-theme-kind="vscode-light"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --shadow-color: rgb(0, 0, 0, 0.08);\n --shadow-hover-color: rgb(0, 0, 0, 0.12);\n}\n\n/* High contrast mode adjustments */\nbody[data-vscode-theme-kind="vscode-high-contrast"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --border-color: var(--vscode-contrastBorder);\n --border-subtle: var(--vscode-contrastBorder);\n}\n'; + + // src/webview/diagnostics/styles.css + var styles_default = "* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: var(--bg-primary);\n color: var(--text-primary);\n padding: 16px;\n line-height: 1.5;\n min-width: 320px;\n}\n\n.container {\n background: var(--bg-secondary);\n border: 1px solid var(--border-color);\n border-radius: 10px;\n padding: 16px;\n box-shadow: 0 4px 10px var(--shadow-color);\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n padding-bottom: 4px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.header-icon {\n font-size: 20px;\n}\n\n\n.button-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.section {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-color);\n border-radius: 8px;\n padding: 12px;\n margin-bottom: 16px;\n box-shadow: 0 2px 6px var(--shadow-color);\n}\n\n.section-title {\n font-size: 14px;\n font-weight: 700;\n color: var(--text-primary);\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 6px;\n letter-spacing: 0.2px;\n}\n\n.section-subtitle {\n font-size: 12px;\n color: var(--text-secondary);\n margin-bottom: 12px;\n}\n\n/* Tab styles */\n.tabs {\n display: flex;\n border-bottom: 1px solid var(--border-color);\n margin-bottom: 16px;\n}\n\n.tab {\n padding: 10px 20px;\n cursor: pointer;\n border: none;\n background: transparent;\n color: var(--text-secondary);\n font-size: 13px;\n font-weight: 500;\n border-bottom: 2px solid transparent;\n transition: all 0.2s;\n}\n\n.tab:hover {\n color: var(--text-primary);\n background: var(--list-hover-bg);\n}\n\n.tab.active {\n color: var(--link-color);\n border-bottom-color: var(--link-color);\n}\n\n.tab-content {\n display: none;\n}\n\n.tab-content.active {\n display: block;\n}\n\n/* Editor filter panels */\n.editor-filter-panels {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n margin-bottom: 16px;\n}\n\n.editor-panel {\n background: var(--bg-tertiary);\n border: 2px solid var(--border-color);\n border-radius: 8px;\n padding: 12px 16px;\n cursor: pointer;\n transition: all 0.2s;\n min-width: 140px;\n text-align: center;\n white-space: nowrap;\n}\n\n.editor-panel:hover {\n background: var(--list-hover-bg);\n border-color: var(--border-color);\n}\n\n.editor-panel.active {\n background: var(--list-active-bg);\n border-color: var(--link-color);\n color: var(--list-active-fg);\n}\n\n.editor-panel.active .editor-panel-name {\n color: var(--list-active-fg);\n}\n\n.editor-panel.active .editor-panel-stats {\n color: var(--list-active-fg);\n opacity: 0.85;\n}\n\n.editor-panel-icon {\n font-size: 24px;\n margin-bottom: 4px;\n}\n\n.editor-panel-name {\n font-size: 13px;\n font-weight: 600;\n color: var(--text-primary);\n margin-bottom: 2px;\n}\n\n.editor-panel-stats {\n font-size: 10px;\n color: var(--text-muted);\n}\n\n/* Loading state */\n.loading-state {\n text-align: center;\n padding: 40px 20px;\n color: var(--text-muted);\n}\n\n.loading-spinner {\n font-size: 48px;\n margin-bottom: 16px;\n animation: pulse 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.5;\n }\n}\n\n.loading-text {\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 8px;\n}\n\n.loading-subtext {\n font-size: 12px;\n color: var(--text-muted);\n}\n\n/* Summary cards */\n.summary-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.summary-card {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-color);\n border-radius: 4px;\n padding: 12px;\n text-align: center;\n}\n\n.summary-label {\n font-size: 11px;\n color: var(--text-secondary);\n margin-bottom: 4px;\n}\n\n.summary-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.summary-sub {\n font-size: 10px;\n color: var(--text-secondary);\n text-align: left;\n margin-top: 6px;\n}\n\n.context-ref-filter {\n cursor: pointer;\n padding: 2px 6px;\n border-radius: 3px;\n margin: 2px 0;\n transition: all 0.2s;\n}\n\n.context-ref-filter:hover {\n background: rgb(79, 195, 247, 0.2);\n color: var(--link-color);\n}\n\n.context-ref-filter.active {\n background: rgb(79, 195, 247, 0.3);\n color: var(--link-color);\n font-weight: 600;\n}\n\n/* Table styles */\n.table-container {\n overflow: auto;\n max-height: 500px;\n}\n\n.session-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n}\n\n.session-table th,\n.session-table td {\n padding: 8px 10px;\n text-align: left;\n border-bottom: 1px solid var(--border-color);\n}\n\n.session-table th {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n font-weight: 600;\n position: sticky;\n top: 0;\n}\n\n.session-table th.sortable {\n cursor: pointer;\n user-select: none;\n}\n\n.session-table th.sortable:hover {\n background: var(--list-hover-bg);\n color: var(--link-color);\n}\n\n.session-table tr:hover {\n background: rgb(255, 255, 255, 0.03);\n}\n\n.editor-badge {\n background: var(--list-active-bg);\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n color: var(--list-active-fg);\n white-space: nowrap;\n}\n\n.editor-badge-crush {\n background: #3d0a4f;\n color: #ff3dff;\n border: 1px solid #cc00cc;\n}\n\n.editor-badge-vs {\n background: #5c2d91;\n color: #ffffff;\n border: 1px solid #7b3fbe;\n}\n\n.session-folders-table {\n margin-top: 16px;\n margin-bottom: 16px;\n}\n\n.session-folders-table h4 {\n color: var(--text-primary);\n font-size: 14px;\n margin-bottom: 12px;\n}\n\n.report-content {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-color);\n border-radius: 4px;\n padding: 16px;\n white-space: pre-wrap;\n font-size: 13px;\n overflow: auto;\n max-height: 60vh;\n}\n\n.file-subpath {\n font-size: 11px;\n color: var(--text-muted);\n margin-top: 4px;\n}\n\n.session-file-link,\n.reveal-link,\n.view-formatted-link {\n color: var(--link-color);\n text-decoration: underline;\n cursor: pointer;\n}\n\n.session-file-link:hover,\n.reveal-link:hover,\n.view-formatted-link:hover {\n color: var(--link-hover-color);\n}\n\n.empty-session-link {\n color: var(--text-muted);\n}\n\n.empty-session-link:hover {\n color: var(--text-secondary);\n}\n\n.button-group {\n display: flex;\n gap: 12px;\n margin-top: 16px;\n flex-wrap: wrap;\n}\n\n.button {\n background: var(--button-secondary-bg);\n border: 1px solid var(--border-subtle);\n color: var(--text-primary);\n padding: 8px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: background-color 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.button:hover {\n background: var(--bg-tertiary);\n}\n\n.button:active {\n background: var(--button-bg);\n}\n\n.button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.button.secondary {\n background: var(--bg-tertiary);\n border-color: var(--border-subtle);\n color: var(--text-primary);\n}\n\n.button.secondary:hover {\n background: var(--list-hover-bg);\n}\n\n.info-box {\n background: var(--list-active-bg);\n border: 1px solid var(--border-color);\n border-radius: 4px;\n padding: 12px;\n margin-bottom: 16px;\n font-size: 13px;\n color: var(--list-active-fg);\n}\n\n.info-box-title {\n font-weight: 600;\n color: var(--list-active-fg);\n margin-bottom: 6px;\n}\n\n.cache-details {\n margin-top: 16px;\n}\n\n.cache-location {\n margin-top: 20px;\n}\n\n.cache-location h4 {\n color: var(--text-primary);\n font-size: 14px;\n margin-bottom: 8px;\n}\n\n.location-box {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-color);\n border-radius: 4px;\n padding: 12px;\n overflow-x: auto;\n}\n\n.location-box code {\n color: var(--link-color);\n font-size: 12px;\n}\n\n.cache-actions {\n margin-top: 20px;\n}\n\n.cache-actions h4 {\n color: var(--text-primary);\n font-size: 14px;\n margin-bottom: 8px;\n}\n"; + + // src/webview/shared/contextRefUtils.ts + function getTotalContextRefs(refs) { + return refs.file + refs.selection + refs.implicitSelection + refs.symbol + refs.codebase + refs.workspace + refs.terminal + refs.vscode + refs.copilotInstructions + refs.agentsMd + (refs.terminalLastCommand || 0) + (refs.terminalSelection || 0) + (refs.clipboard || 0) + (refs.changes || 0) + (refs.outputPanel || 0) + (refs.problemsPanel || 0); + } + function getContextRefsSummary(refs, abbreviated = false) { + const parts = []; + if (abbreviated) { + if (refs.file > 0) { + parts.push(`#file: ${refs.file}`); + } + if (refs.selection > 0) { + parts.push(`#sel: ${refs.selection}`); + } + if (refs.implicitSelection > 0) { + parts.push(`impl: ${refs.implicitSelection}`); + } + if (refs.symbol > 0) { + parts.push(`#sym: ${refs.symbol}`); + } + if (refs.codebase > 0) { + parts.push(`#cb: ${refs.codebase}`); + } + if (refs.workspace > 0) { + parts.push(`@ws: ${refs.workspace}`); + } + if (refs.terminal > 0) { + parts.push(`@term: ${refs.terminal}`); + } + if (refs.vscode > 0) { + parts.push(`@vsc: ${refs.vscode}`); + } + if ((refs.terminalLastCommand || 0) > 0) { + parts.push(`#termLC: ${refs.terminalLastCommand}`); + } + if ((refs.terminalSelection || 0) > 0) { + parts.push(`#termSel: ${refs.terminalSelection}`); + } + if ((refs.clipboard || 0) > 0) { + parts.push(`#clip: ${refs.clipboard}`); + } + if ((refs.changes || 0) > 0) { + parts.push(`#chg: ${refs.changes}`); + } + if ((refs.outputPanel || 0) > 0) { + parts.push(`#out: ${refs.outputPanel}`); + } + if ((refs.problemsPanel || 0) > 0) { + parts.push(`#prob: ${refs.problemsPanel}`); + } + if (refs.copilotInstructions > 0) { + parts.push(`\u{1F4CB} inst: ${refs.copilotInstructions}`); + } + if (refs.agentsMd > 0) { + parts.push(`\u{1F916} ag: ${refs.agentsMd}`); + } + } else { + if (refs.file > 0) { + parts.push(`#file: ${refs.file}`); + } + if (refs.selection > 0) { + parts.push(`#selection: ${refs.selection}`); + } + if (refs.implicitSelection > 0) { + parts.push(`implicit: ${refs.implicitSelection}`); + } + if (refs.symbol > 0) { + parts.push(`#symbol: ${refs.symbol}`); + } + if (refs.codebase > 0) { + parts.push(`#codebase: ${refs.codebase}`); + } + if (refs.workspace > 0) { + parts.push(`@workspace: ${refs.workspace}`); + } + if (refs.terminal > 0) { + parts.push(`@terminal: ${refs.terminal}`); + } + if (refs.vscode > 0) { + parts.push(`@vscode: ${refs.vscode}`); + } + if ((refs.terminalLastCommand || 0) > 0) { + parts.push(`#terminalLastCommand: ${refs.terminalLastCommand}`); + } + if ((refs.terminalSelection || 0) > 0) { + parts.push(`#terminalSelection: ${refs.terminalSelection}`); + } + if ((refs.clipboard || 0) > 0) { + parts.push(`#clipboard: ${refs.clipboard}`); + } + if ((refs.changes || 0) > 0) { + parts.push(`#changes: ${refs.changes}`); + } + if ((refs.outputPanel || 0) > 0) { + parts.push(`#outputPanel: ${refs.outputPanel}`); + } + if ((refs.problemsPanel || 0) > 0) { + parts.push(`#problemsPanel: ${refs.problemsPanel}`); + } + if (refs.copilotInstructions > 0) { + parts.push(`\u{1F4CB} instructions: ${refs.copilotInstructions}`); + } + if (refs.agentsMd > 0) { + parts.push(`\u{1F916} agents: ${refs.agentsMd}`); + } + } + return parts.length > 0 ? parts.join(", ") : "None"; + } + + // src/webview/diagnostics/main.ts + var LOADING_PLACEHOLDER = "Loading..."; + var SESSION_FILES_SECTION_REGEX = /Session File Locations \(first 20\):[\s\S]*?(?=\n\s*\n|={70})/; + var LOADING_MESSAGE = `\u23F3 Loading diagnostic data... + +This may take a few moments depending on the number of session files. +The view will automatically update when data is ready.`; + var vscode = acquireVsCodeApi(); + var initialData = window.__INITIAL_DIAGNOSTICS__; + var currentSortColumn = "lastInteraction"; + var currentSortDirection = "desc"; + var currentEditorFilter = null; + var currentContextRefFilter = null; + function escapeHtml(text) { + return text.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); + } + function removeSessionFilesSection(reportText) { + return reportText.replace(SESSION_FILES_SECTION_REGEX, ""); + } + function formatDate(isoString) { + if (!isoString) { + return "N/A"; + } + try { + return escapeHtml(new Date(isoString).toLocaleString()); + } catch { + return escapeHtml(isoString); + } + } + function getTimeSince(isoString) { + try { + const now = Date.now(); + const then = new Date(isoString).getTime(); + const diffMs = now - then; + if (diffMs < 0) { + return "Just now"; + } + const seconds = Math.floor(diffMs / 1e3); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + if (days > 0) { + return `${days} day${days !== 1 ? "s" : ""} ago`; + } + if (hours > 0) { + return `${hours} hour${hours !== 1 ? "s" : ""} ago`; + } + if (minutes > 0) { + return `${minutes} minute${minutes !== 1 ? "s" : ""} ago`; + } + return `${seconds} second${seconds !== 1 ? "s" : ""} ago`; + } catch { + return "Unknown"; + } + } + function formatFileSize(bytes) { + const numericBytes = Number(bytes); + if (!Number.isFinite(numericBytes) || numericBytes < 0) { + return "N/A"; + } + if (numericBytes < 1024) { + return `${numericBytes} B`; + } + if (numericBytes < 1024 * 1024) { + return `${(numericBytes / 1024).toFixed(1)} KB`; + } + return `${(numericBytes / (1024 * 1024)).toFixed(2)} MB`; + } + function sanitizeNumber(value) { + if (value === void 0 || value === null) { + return "0"; + } + const n = Number(value); + if (!Number.isFinite(n)) { + return "0"; + } + return Math.floor(n).toString(); + } + function buildCandidatePathsElement(candidatePaths) { + const container = document.createElement("div"); + container.className = "candidate-paths-table"; + const heading = document.createElement("h4"); + heading.textContent = "Scanned Paths (all candidate locations):"; + container.appendChild(heading); + const description = document.createElement("p"); + description.style.cssText = "color: #999; font-size: 12px; margin: 4px 0 8px 0;"; + description.textContent = "These are all the paths the extension checks for session files. Paths marked with \u2705 exist on this system."; + container.appendChild(description); + const table = document.createElement("table"); + table.className = "session-table"; + container.appendChild(table); + const thead = document.createElement("thead"); + table.appendChild(thead); + const headerRow = document.createElement("tr"); + thead.appendChild(headerRow); + for (const text of ["Status", "Source", "Path"]) { + const th = document.createElement("th"); + th.textContent = text; + headerRow.appendChild(th); + } + const tbody = document.createElement("tbody"); + table.appendChild(tbody); + const sorted = [...candidatePaths].sort((a, b) => { + if (a.exists !== b.exists) { + return a.exists ? -1 : 1; + } + return a.source.localeCompare(b.source); + }); + const crushEntries = sorted.filter( + (cp) => cp.source.toLowerCase().includes("crush") + ); + const otherEntries = sorted.filter( + (cp) => !cp.source.toLowerCase().includes("crush") + ); + const renderRow = (cp) => { + const row = document.createElement("tr"); + if (!cp.exists) { + row.style.opacity = "0.5"; + } + const statusCell = document.createElement("td"); + statusCell.textContent = cp.exists ? "\u2705" : "\u274C"; + statusCell.style.textAlign = "center"; + row.appendChild(statusCell); + const sourceCell = document.createElement("td"); + const badge = document.createElement("span"); + badge.className = getEditorBadgeClass(cp.source); + badge.textContent = `${getEditorIcon(cp.source)} ${cp.source}`; + sourceCell.appendChild(badge); + row.appendChild(sourceCell); + const pathCell = document.createElement("td"); + pathCell.setAttribute("title", cp.path); + pathCell.style.fontFamily = "var(--vscode-editor-font-family, monospace)"; + pathCell.style.fontSize = "12px"; + pathCell.textContent = cp.path; + row.appendChild(pathCell); + tbody.appendChild(row); + }; + for (const cp of otherEntries) { + renderRow(cp); + } + if (crushEntries.length > 0) { + const anyExist = crushEntries.some((cp) => cp.exists); + const row = document.createElement("tr"); + if (!anyExist) { + row.style.opacity = "0.5"; + } + const statusCell = document.createElement("td"); + statusCell.textContent = anyExist ? "\u2705" : "\u274C"; + statusCell.style.textAlign = "center"; + row.appendChild(statusCell); + const sourceCell = document.createElement("td"); + const badge = document.createElement("span"); + badge.className = getEditorBadgeClass("Crush"); + badge.textContent = `${getEditorIcon("Crush")} Crush`; + sourceCell.appendChild(badge); + row.appendChild(sourceCell); + const pathCell = document.createElement("td"); + pathCell.style.fontFamily = "var(--vscode-editor-font-family, monospace)"; + pathCell.style.fontSize = "12px"; + pathCell.style.lineHeight = "1.6"; + for (const cp of crushEntries) { + const line = document.createElement("div"); + line.style.opacity = cp.exists ? "1" : "0.5"; + line.title = cp.path; + line.textContent = `${cp.exists ? "\u2705" : "\u274C"} ${cp.path}`; + pathCell.appendChild(line); + } + row.appendChild(pathCell); + tbody.appendChild(row); + } + return container; + } + function getRepoDisplayName(repoUrl) { + if (!repoUrl) { + return ""; + } + let url = repoUrl.replace(/\.git$/, ""); + if (url.includes("@") && url.includes(":")) { + const colonIndex = url.lastIndexOf(":"); + const atIndex = url.lastIndexOf("@"); + if (colonIndex > atIndex) { + return url.substring(colonIndex + 1); + } + } + try { + if (url.includes("://")) { + const urlObj = new URL(url); + const pathParts = urlObj.pathname.split("/").filter((p) => p); + if (pathParts.length >= 2) { + return `${pathParts[pathParts.length - 2]}/${pathParts[pathParts.length - 1]}`; + } + return urlObj.pathname.replace(/^\//, ""); + } + } catch { + } + const parts = url.split("/").filter((p) => p); + if (parts.length >= 2) { + return `${parts[parts.length - 2]}/${parts[parts.length - 1]}`; + } + return url; + } + function getEditorBadgeClass(editor) { + const lower = editor.toLowerCase(); + if (lower.includes("visual studio")) { + return "editor-badge editor-badge-vs"; + } + if (lower.includes("visual studio")) { + return "editor-badge editor-badge-vs"; + } + if (lower.includes("crush")) { + return "editor-badge editor-badge-crush"; + } + return "editor-badge"; + } + function getEditorIcon(editor) { + const lower = editor.toLowerCase(); + if (lower.includes("visual studio")) { + return "\u{1FA9F}"; + } + if (lower.includes("visual studio")) { + return "\u{1FA9F}"; + } + if (lower.includes("crush")) { + return "\u{1FA77}"; + } + if (lower.includes("opencode")) { + return "\u{1F7E2}"; + } + if (lower.includes("cursor")) { + return "\u{1F5B1}\uFE0F"; + } + if (lower.includes("insiders")) { + return "\u{1F49A}"; + } + if (lower.includes("vscodium")) { + return "\u{1F535}"; + } + if (lower.includes("windsurf")) { + return "\u{1F3C4}"; + } + if (lower.includes("vs code") || lower.includes("vscode")) { + return "\u{1F499}"; + } + return "\u{1F4DD}"; + } + function sortSessionFiles(files) { + return [...files].sort((a, b) => { + const aVal = a.lastInteraction; + const bVal = b.lastInteraction; + if (!aVal && !bVal) { + return 0; + } + if (!aVal) { + return 1; + } + if (!bVal) { + return -1; + } + const aTime = new Date(aVal).getTime(); + const bTime = new Date(bVal).getTime(); + return currentSortDirection === "desc" ? bTime - aTime : aTime - bTime; + }); + } + function getSortIndicator(column) { + if (currentSortColumn !== column) { + return ""; + } + return currentSortDirection === "desc" ? " \u25BC" : " \u25B2"; + } + function getEditorStats(files) { + const stats = {}; + for (const sf of files) { + const editor = sf.editorSource || "Unknown"; + if (!stats[editor]) { + stats[editor] = { count: 0, interactions: 0 }; + } + stats[editor].count++; + stats[editor].interactions += sf.interactions; + } + return stats; + } + function safeText(value) { + if (value === null || value === void 0) { + return ""; + } + return escapeHtml(String(value)); + } + function renderSessionTable(detailedFiles, isLoading = false) { + if (isLoading) { + return ` +
+
\u23F3
+
Loading session files...
+
Analyzing up to 500 files from the last 14 days
+
+ `; + } + if (detailedFiles.length === 0) { + return '

No session files with activity in the last 14 days.

'; + } + const editorStats = getEditorStats(detailedFiles); + const editors = Object.keys(editorStats).sort(); + let filteredFiles = currentEditorFilter ? detailedFiles.filter((sf) => sf.editorSource === currentEditorFilter) : detailedFiles; + if (currentContextRefFilter) { + filteredFiles = filteredFiles.filter((sf) => { + const refType = currentContextRefFilter; + const value = sf.contextReferences[refType]; + return typeof value === "number" && value > 0; + }); + } + const totalInteractions = filteredFiles.reduce( + (sum, sf) => sum + Number(sf.interactions || 0), + 0 + ); + const totalContextRefs = filteredFiles.reduce( + (sum, sf) => sum + getTotalContextRefs(sf.contextReferences), + 0 + ); + const aggContextRefs = filteredFiles.reduce( + (agg, sf) => { + const r = sf.contextReferences; + agg.file += r.file; + agg.symbol += r.symbol; + agg.selection += r.selection; + agg.implicitSelection += r.implicitSelection; + agg.codebase += r.codebase; + agg.workspace += r.workspace; + agg.terminal += r.terminal; + agg.vscode += r.vscode; + agg.copilotInstructions += r.copilotInstructions; + agg.agentsMd += r.agentsMd; + return agg; + }, + { + file: 0, + symbol: 0, + selection: 0, + implicitSelection: 0, + codebase: 0, + workspace: 0, + terminal: 0, + vscode: 0, + copilotInstructions: 0, + agentsMd: 0 + } + ); + const sortedFiles = sortSessionFiles(filteredFiles); + const editorPanelsHtml = ` +
+
+
\u{1F310}
+
All Editors
+
${detailedFiles.length} sessions
+
+ ${editors.map( + (editor) => ` +
+
${getEditorIcon(editor)}
+
${escapeHtml(editor)}
+
${editorStats[editor].count} sessions \xB7 ${editorStats[editor].interactions} interactions
+
+ ` + ).join("")} +
+ `; + return ` + ${editorPanelsHtml} + +
+
+
\u{1F4C1} ${currentEditorFilter ? "Filtered" : "Total"} Sessions
+
${filteredFiles.length}
+
+
+
\u{1F4AC} Interactions
+
${totalInteractions}
+
+
+
\u{1F517} Context References
+
${safeText(totalContextRefs)}
+
+ ${totalContextRefs === 0 ? "None" : ""} + ${aggContextRefs.file > 0 ? `
#file ${aggContextRefs.file}
` : ""} + ${aggContextRefs.symbol > 0 ? `
#sym ${aggContextRefs.symbol}
` : ""} + ${aggContextRefs.implicitSelection > 0 ? `
implicit ${aggContextRefs.implicitSelection}
` : ""} + ${aggContextRefs.copilotInstructions > 0 ? `
\u{1F4CB} instructions ${aggContextRefs.copilotInstructions}
` : ""} + ${aggContextRefs.agentsMd > 0 ? `
\u{1F916} agents ${aggContextRefs.agentsMd}
` : ""} + ${aggContextRefs.workspace > 0 ? `
@workspace ${aggContextRefs.workspace}
` : ""} + ${aggContextRefs.vscode > 0 ? `
@vscode ${aggContextRefs.vscode}
` : ""} +
+
+
+
\u{1F4C5} Time Range
+
Last 14 days
+
+
+ +
+ + + + + + + + + + + + + + + + ${sortedFiles.map( + (sf, idx) => ` + + + + + + + + + + + + ` + ).join("")} + +
#EditorTitleRepositorySizeInteractionsContext RefsLast Interaction${getSortIndicator("lastInteraction")}Actions
${idx + 1}${getEditorIcon(sf.editorName || sf.editorSource)} ${escapeHtml(sf.editorName || sf.editorSource)} + ${sf.title ? `${escapeHtml(sf.title.length > 40 ? sf.title.substring(0, 40) + "..." : sf.title)}` : `(Empty session)`} + ${sf.repository ? escapeHtml(getRepoDisplayName(sf.repository)) : '\u2014'}${formatFileSize(sf.size)}${sanitizeNumber(sf.interactions)}${sanitizeNumber(getTotalContextRefs(sf.contextReferences))}${formatDate(sf.lastInteraction)} + \u{1F4C4} View +
+
+ `; + } + function counterRow(key, label, value) { + return ` + + ${escapeHtml(label)} + + + + + + + `; + } + function stringRow(key, label, value) { + const display2 = value ? `\u2705 ${escapeHtml(value)}` : "\u274C (not set)"; + return ` + + ${escapeHtml(label)} + + ${display2} + + `; + } + function flagRow(key, label, value) { + return ` + + ${escapeHtml(label)} + + + ${value ? "\u2705 true" : "\u274C false"} + + + + + `; + } + function renderDebugTab(counters) { + const c = counters ?? { openCount: 0, unknownMcpOpenCount: 0, fluencyBannerDismissed: false, unknownMcpDismissedVersion: "" }; + return ` +
+
+
\u{1F41B} Debug \u2014 Global State Counters
+
Visible only when a debugger is attached. Edit counters and dismissed flags stored in VS Code global state, then click Set to apply. Changes take effect immediately.
+
+
+

Notification Counters

+ + ${counterRow("extension.openCount", "extension.openCount (fluency banner threshold: 5)", c.openCount)} + ${counterRow("extension.unknownMcpOpenCount", "extension.unknownMcpOpenCount (unknown MCP threshold: 8)", c.unknownMcpOpenCount)} +
+

Dismissed Flags

+ + ${flagRow("news.fluencyScoreBanner.v1.dismissed", "news.fluencyScoreBanner.v1.dismissed", c.fluencyBannerDismissed)} + ${stringRow("news.unknownMcpTools.dismissedVersion", "news.unknownMcpTools.dismissedVersion", c.unknownMcpDismissedVersion)} +
+
+ +
+
+
`; + } + function renderBackendStoragePanel(backendInfo) { + if (!backendInfo) { + return ` +
+
\u2601\uFE0F Azure Storage Backend
+
+ Backend storage information is not available. This may be a temporary issue. +
+
+ `; + } + const statusColor = backendInfo.isConfigured ? "#2d6a4f" : backendInfo.enabled ? "#d97706" : "#666"; + const statusIcon = backendInfo.isConfigured ? "\u2705" : backendInfo.enabled ? "\u26A0\uFE0F" : "\u26AA"; + const statusText = backendInfo.isConfigured ? "Configured & Enabled" : backendInfo.enabled ? "Enabled but Not Configured" : "Disabled"; + const configButtonText = backendInfo.isConfigured ? "\u2699\uFE0F Manage Backend" : "\u{1F527} Configure Backend"; + const configButtonStyle = backendInfo.isConfigured ? "secondary" : ""; + return ` +
+
\u2601\uFE0F Azure Storage Backend
+
+ Sync your token usage data to Azure Storage Tables for team-wide reporting and multi-device access. + Configure Azure resources and authentication settings to enable cloud synchronization. +
+
+ +
+
+
${statusIcon} Backend Status
+
${statusText}
+
+
+
\u{1F510} Auth Mode
+
${backendInfo.authMode === "entraId" ? "Entra ID" : "Shared Key"}
+
+
+
\u{1F465} Sharing Profile
+
${escapeHtml(backendInfo.sharingProfile)}
+
+
+
\u{1F552} Last Sync
+
${backendInfo.lastSyncTime ? getTimeSince(backendInfo.lastSyncTime) : "Never"}
+
+
+ + ${backendInfo.isConfigured ? ` +
+

\u{1F4CA} Configuration Details

+ + + + + + + + + + + + + + + + + + + + + + + +
Storage Account${escapeHtml(backendInfo.storageAccount)}
Subscription ID${escapeHtml(backendInfo.subscriptionId)}
Resource Group${escapeHtml(backendInfo.resourceGroup)}
Aggregation Table${escapeHtml(backendInfo.aggTable)}
Events Table${escapeHtml(backendInfo.eventsTable)}
+
+ +
+

\u{1F4C8} Local Session Statistics

+
+
+
\u{1F4BB} Unique Devices
+
${escapeHtml(String(backendInfo.deviceCount))}
+
Based on workspace IDs
+
+
+
\u{1F4C1} Total Sessions
+
${escapeHtml(String(backendInfo.sessionCount))}
+
Local session files
+
+
+
\u2601\uFE0F Cloud Records
+
${backendInfo.recordCount !== null ? escapeHtml(String(backendInfo.recordCount)) : "\u2014"}
+
Azure Storage records
+
+
+
\u{1F504} Sync Status
+
${backendInfo.lastSyncTime ? formatDate(backendInfo.lastSyncTime) : "Never"}
+
+
+
+ +
+

\u2139\uFE0F About Azure Storage Backend

+

+ The Azure Storage backend enables: +

+
    +
  • Team-wide token usage reporting and analytics
  • +
  • Multi-device synchronization of your usage data
  • +
  • Long-term storage and historical analysis
  • +
  • Configurable privacy levels (anonymous, pseudonymous, or identified)
  • +
+
+ ` : ` +
+

\u{1F680} Get Started with Azure Storage

+

+ To enable cloud synchronization, you'll need to configure an Azure Storage account. + The setup wizard will guide you through the process. +

+
    +
  • Azure subscription with Storage Account access
  • +
  • Appropriate permissions (Storage Table Data Contributor or Storage Account Key)
  • +
  • VS Code signed in with your Azure account (for Entra ID auth)
  • +
+
+ `} + +
+ + ${backendInfo.isConfigured ? ` + + ` : ""} +
+ `; + } + function renderLayout(data) { + const root = document.getElementById("root"); + if (!root) { + return; + } + let sessionFilesHtml = ""; + const sessionFolders = data.sessionFolders || []; + if (sessionFolders.length > 0) { + const sorted = [...sessionFolders].sort((a, b) => b.count - a.count); + sessionFilesHtml = ` +
+

Main Session Folders (by editor root):

+ + + + + + + + + + `; + const totalSessions = sorted.reduce((sum, sf) => sum + sf.count, 0); + console.log( + "[Diagnostics] Total sessions calculated:", + totalSessions, + "from", + sorted.length, + "folders" + ); + sorted.forEach( + (sf) => { + let display2 = sf.dir; + const home = window.process?.env?.HOME || window.process?.env?.USERPROFILE || ""; + if (home && display2.startsWith(home)) { + display2 = display2.replace(home, "~"); + } + const editorName = sf.editorName || "Unknown"; + sessionFilesHtml += ` + + + + + + `; + } + ); + sessionFilesHtml += ` + + + + + `; + console.log("[Diagnostics] Total row HTML added to sessionFilesHtml"); + sessionFilesHtml += ` + +
FolderEditor# of SessionsOpen
${escapeHtml(display2)}${getEditorIcon(editorName)} ${escapeHtml(editorName)}${sf.count}Open directory
Total:${totalSessions}
+
`; + } + let escapedReport = escapeHtml(data.report); + const reportIsLoading = data.report === LOADING_PLACEHOLDER; + if (!reportIsLoading) { + escapedReport = removeSessionFilesSection(escapedReport); + } else { + escapedReport = LOADING_MESSAGE.trim(); + } + const detailedFiles = data.detailedSessionFiles || []; + root.innerHTML = ` + + +
+
+
+ \u{1F50D} + Diagnostic Report +
+
+ ${buttonHtml("btn-refresh")} + ${buttonHtml("btn-details")} + ${buttonHtml("btn-chart")} + ${buttonHtml("btn-usage")} + ${buttonHtml("btn-environmental")} + ${buttonHtml("btn-maturity")} + ${data?.backendConfigured ? buttonHtml("btn-dashboard") : ""} +
+
+ +
+ + + + + ${data.isDebugMode ? '' : ""} +
+ +
+
+
\u{1F4CB} About This Report
+
+ This diagnostic report contains information about your GitHub Copilot Token Tracker + extension setup and usage statistics.
It does not include any of your + code or conversation content. You can safely share this report when reporting issues. +
+
+
${escapedReport}
+ ${sessionFilesHtml} +
+ + + +
+
+ +
+
+
\u{1F4C1} Session File Analysis
+
+ This tab shows session files with activity in the last 14 days from all detected editors.
+ Click on an editor panel to filter, click column headers to sort, and click a file name to open it. +
+
+
${renderSessionTable(detailedFiles, detailedFiles.length === 0)}
+
+ +
+
+
\u{1F4BE} Cache Information
+
+ The extension caches session file data to improve performance and reduce file system operations. + Cache is stored in VS Code's global state and persists across sessions. +
+
+
+
+
+
\u{1F4E6} Cache Entries
+
${data.cacheInfo?.size || 0}
+
+
+
\u{1F4BE} Cache Size
+
${data.cacheInfo?.sizeInMB ? data.cacheInfo.sizeInMB.toFixed(2) + " MB" : "N/A"}
+
+
+
\u{1F552} Last Updated
+
${data.cacheInfo?.lastUpdated ? formatDate(data.cacheInfo.lastUpdated) : "Never"}
+
+
+
\u23F1\uFE0F Cache Age
+
${data.cacheInfo?.lastUpdated ? getTimeSince(data.cacheInfo.lastUpdated) : "N/A"}
+
+
+
+

Storage Location

+
+ ${escapeHtml(data.cacheInfo?.location || "VS Code Global State")} + ${data.cacheInfo?.storagePath ? ` Open storage location` : ""} +
+

+ Cache is stored in VS Code's global state (extension storage) and includes: +

    +
  • Token counts per session file
  • +
  • Interaction counts
  • +
  • Model usage statistics
  • +
  • File modification timestamps for validation
  • +
  • Usage analysis data (tool calls, modes, context references)
  • +
+

+
+
+

Cache Management

+

+ Clearing the cache will force the extension to re-read and re-analyze all session files on the next update. + This can help resolve issues with stale or incorrect data. +

+ +
+
+
+ +
+ ${renderBackendStoragePanel(data.backendStorageInfo)} +
+ ${data.isDebugMode ? renderDebugTab(data.globalStateCounters) : ""} +
+ `; + let storedDetailedFiles = detailedFiles; + let isLoading = detailedFiles.length === 0; + window.addEventListener("message", (event) => { + const message = event.data; + if (message.command === "diagnosticDataLoaded") { + if (message.report) { + const reportTabContent = document.getElementById("tab-report"); + if (reportTabContent) { + const processedReport = removeSessionFilesSection(message.report); + const reportPre = reportTabContent.querySelector(".report-content"); + if (reportPre) { + reportPre.textContent = processedReport; + } + } + } + if (message.backendStorageInfo) { + const backendTabContent = document.getElementById("tab-backend"); + if (backendTabContent) { + backendTabContent.innerHTML = renderBackendStoragePanel( + message.backendStorageInfo + ); + setupBackendButtonHandlers(); + } + } else { + console.warn("diagnosticDataLoaded received but backendStorageInfo is missing or undefined"); + } + if (message.sessionFolders && message.sessionFolders.length > 0) { + const reportTabContent = document.getElementById("tab-report"); + if (reportTabContent) { + const sorted = [...message.sessionFolders].sort( + (a, b) => b.count - a.count + ); + let container = reportTabContent.querySelector( + ".session-folders-table" + ); + if (!container) { + container = document.createElement("div"); + container.className = "session-folders-table"; + } else { + while (container.firstChild) { + container.removeChild(container.firstChild); + } + } + const heading = document.createElement("h4"); + heading.textContent = "Main Session Folders (by editor root):"; + container.appendChild(heading); + const table = document.createElement("table"); + table.className = "session-table"; + container.appendChild(table); + const thead = document.createElement("thead"); + table.appendChild(thead); + const headerRow = document.createElement("tr"); + thead.appendChild(headerRow); + const headers = ["Folder", "Editor", "# of Sessions", "Open"]; + headers.forEach((text) => { + const th = document.createElement("th"); + th.textContent = text; + headerRow.appendChild(th); + }); + const tbody = document.createElement("tbody"); + table.appendChild(tbody); + sorted.forEach((sf) => { + let display2 = sf.dir; + const home = window.process?.env?.HOME || window.process?.env?.USERPROFILE || ""; + if (home && display2.startsWith(home)) { + display2 = display2.replace(home, "~"); + } + const editorName = sf.editorName || "Unknown"; + const row = document.createElement("tr"); + const folderCell = document.createElement("td"); + folderCell.setAttribute("title", escapeHtml(sf.dir)); + folderCell.textContent = escapeHtml(display2); + row.appendChild(folderCell); + const editorCell = document.createElement("td"); + const editorBadge = document.createElement("span"); + editorBadge.className = getEditorBadgeClass(editorName); + editorBadge.textContent = `${getEditorIcon(editorName)} ${escapeHtml(editorName)}`; + editorCell.appendChild(editorBadge); + row.appendChild(editorCell); + const countCell = document.createElement("td"); + countCell.textContent = String(sf.count); + row.appendChild(countCell); + const openCell = document.createElement("td"); + const openLink = document.createElement("a"); + openLink.href = "#"; + openLink.className = "reveal-link"; + openLink.setAttribute("data-path", encodeURIComponent(sf.dir)); + openLink.textContent = "Open directory"; + openCell.appendChild(openLink); + row.appendChild(openCell); + tbody.appendChild(row); + }); + const totalSessions = sorted.reduce((sum, sf) => sum + sf.count, 0); + const totalRow = document.createElement("tr"); + totalRow.style.borderTop = "2px solid var(--vscode-panel-border)"; + totalRow.style.fontWeight = "bold"; + totalRow.style.background = "rgba(255, 255, 255, 0.05)"; + const totalLabelCell = document.createElement("td"); + totalLabelCell.setAttribute("colspan", "2"); + totalLabelCell.style.textAlign = "right"; + totalLabelCell.style.paddingRight = "16px"; + totalLabelCell.textContent = "Total:"; + totalRow.appendChild(totalLabelCell); + const totalCountCell = document.createElement("td"); + totalCountCell.textContent = totalSessions.toString(); + totalRow.appendChild(totalCountCell); + const totalEmptyCell = document.createElement("td"); + totalRow.appendChild(totalEmptyCell); + tbody.appendChild(totalRow); + const existingTable = reportTabContent.querySelector( + ".session-folders-table" + ); + if (!existingTable) { + const reportContent = reportTabContent.querySelector(".report-content"); + if (reportContent) { + reportContent.insertAdjacentElement("afterend", container); + } else { + reportTabContent.appendChild(container); + } + } + setupStorageLinkHandlers(); + } + } + if (message.candidatePaths && message.candidatePaths.length > 0) { + const reportTabContent = document.getElementById("tab-report"); + if (reportTabContent) { + const existing = reportTabContent.querySelector(".candidate-paths-table"); + if (existing) { + existing.remove(); + } + const candidateEl = buildCandidatePathsElement(message.candidatePaths); + const foldersTable = reportTabContent.querySelector(".session-folders-table"); + if (foldersTable) { + foldersTable.insertAdjacentElement("afterend", candidateEl); + } else { + const reportContent = reportTabContent.querySelector(".report-content"); + if (reportContent) { + reportContent.insertAdjacentElement("afterend", candidateEl); + } else { + reportTabContent.appendChild(candidateEl); + } + } + } + } + } else if (message.command === "diagnosticDataError") { + console.error("Error loading diagnostic data:", message.error); + const root2 = document.getElementById("root"); + if (root2) { + const errorDiv = document.createElement("div"); + errorDiv.style.cssText = "color: #ff6b6b; padding: 20px; text-align: center;"; + errorDiv.innerHTML = ` +

\u26A0\uFE0F Error Loading Diagnostic Data

+

${escapeHtml(message.error || "Unknown error")}

+ `; + root2.insertBefore(errorDiv, root2.firstChild); + } + } else if (message.command === "sessionFilesLoaded" && message.detailedSessionFiles) { + storedDetailedFiles = message.detailedSessionFiles; + isLoading = false; + const sessionsTab = document.querySelector('.tab[data-tab="sessions"]'); + if (sessionsTab) { + sessionsTab.textContent = `\u{1F4C1} Session Files (${storedDetailedFiles.length})`; + } + reRenderTable(); + } else if (message.command === "cacheCleared") { + const btnReport = document.getElementById( + "btn-clear-cache" + ); + const btnTab = document.getElementById( + "btn-clear-cache-tab" + ); + if (btnReport) { + btnReport.style.background = "#2d6a4f"; + btnReport.innerHTML = "\u2705Cache Cleared"; + btnReport.disabled = false; + } + if (btnTab) { + btnTab.style.background = "#2d6a4f"; + btnTab.innerHTML = "\u2705Cache Cleared"; + btnTab.disabled = false; + } + setTimeout(() => { + if (btnReport) { + btnReport.style.background = ""; + btnReport.innerHTML = "\u{1F5D1}\uFE0FClear Cache"; + } + if (btnTab) { + btnTab.style.background = ""; + btnTab.innerHTML = "\u{1F5D1}\uFE0FClear Cache"; + } + }, 2e3); + } else if (message.command === "cacheRefreshed") { + if (message.cacheInfo) { + const cacheInfo = message.cacheInfo; + const cacheTabContent = document.getElementById("tab-cache"); + if (cacheTabContent) { + const summaryCards = cacheTabContent.querySelectorAll(".summary-card"); + if (summaryCards.length >= 4) { + const entriesValue = summaryCards[0]?.querySelector(".summary-value"); + if (entriesValue) { + entriesValue.textContent = String(cacheInfo.size); + } + const sizeValue = summaryCards[1]?.querySelector(".summary-value"); + if (sizeValue) { + sizeValue.textContent = `${cacheInfo.sizeInMB.toFixed(2)} MB`; + } + const lastUpdatedValue = summaryCards[2]?.querySelector(".summary-value"); + if (lastUpdatedValue) { + const date = new Date(cacheInfo.lastUpdated); + lastUpdatedValue.textContent = date.toLocaleString(); + } + const ageValue = summaryCards[3]?.querySelector(".summary-value"); + if (ageValue) { + ageValue.textContent = "0 seconds ago"; + } + } + } + } + } + }); + function setupStorageLinkHandlers() { + document.querySelectorAll(".open-storage-link").forEach((link) => { + link.addEventListener("click", (e) => { + e.preventDefault(); + const path = decodeURIComponent( + link.getAttribute("data-path") || "" + ); + if (path) { + vscode.postMessage({ command: "revealPath", path }); + } + }); + }); + } + function activateTab(tabId) { + const tabButton = document.querySelector(`.tab[data-tab="${tabId}"]`); + const tabContent = document.getElementById(`tab-${tabId}`); + if (tabButton && tabContent) { + document.querySelectorAll(".tab").forEach((t) => t.classList.remove("active")); + document.querySelectorAll(".tab-content").forEach((c) => c.classList.remove("active")); + tabButton.classList.add("active"); + tabContent.classList.add("active"); + return true; + } + return false; + } + document.querySelectorAll(".tab").forEach((tab) => { + tab.addEventListener("click", () => { + const tabId = tab.getAttribute("data-tab"); + if (tabId && activateTab(tabId)) { + vscode.setState({ activeTab: tabId }); + } + }); + }); + function setupSortHandlers() { + document.querySelectorAll(".sortable").forEach((header) => { + header.addEventListener("click", () => { + const sortColumn = header.getAttribute( + "data-sort" + ); + if (sortColumn) { + if (currentSortColumn === sortColumn) { + currentSortDirection = currentSortDirection === "desc" ? "asc" : "desc"; + } else { + currentSortColumn = sortColumn; + currentSortDirection = "desc"; + } + reRenderTable(); + } + }); + }); + } + function setupEditorFilterHandlers() { + document.querySelectorAll(".editor-panel").forEach((panel) => { + panel.addEventListener("click", () => { + const editor = panel.getAttribute("data-editor"); + currentEditorFilter = editor === "" ? null : editor; + reRenderTable(); + }); + }); + } + function setupContextRefFilterHandlers() { + document.querySelectorAll(".context-ref-filter").forEach((filter) => { + filter.addEventListener("click", () => { + const refType = filter.getAttribute( + "data-ref-type" + ); + if (currentContextRefFilter === refType) { + currentContextRefFilter = null; + } else { + currentContextRefFilter = refType; + } + reRenderTable(); + }); + }); + } + function setupBackendButtonHandlers() { + document.getElementById("btn-configure-backend")?.addEventListener("click", () => { + vscode.postMessage({ command: "configureBackend" }); + }); + document.getElementById("btn-open-settings")?.addEventListener("click", () => { + vscode.postMessage({ command: "openSettings" }); + }); + } + function reRenderTable() { + const container = document.getElementById("session-table-container"); + if (container) { + container.innerHTML = renderSessionTable(storedDetailedFiles, isLoading); + if (!isLoading) { + setupSortHandlers(); + setupEditorFilterHandlers(); + setupContextRefFilterHandlers(); + setupFileLinks(); + } + } + } + function setupFileLinks() { + document.querySelectorAll(".session-file-link").forEach((link) => { + link.addEventListener("click", (e) => { + e.preventDefault(); + const file = decodeURIComponent( + link.getAttribute("data-file") || "" + ); + vscode.postMessage({ command: "openSessionFile", file }); + }); + }); + document.querySelectorAll(".view-formatted-link").forEach((link) => { + link.addEventListener("click", (e) => { + e.preventDefault(); + const file = decodeURIComponent( + link.getAttribute("data-file") || "" + ); + vscode.postMessage({ command: "openFormattedJsonlFile", file }); + }); + }); + document.querySelectorAll(".reveal-link").forEach((link) => { + link.addEventListener("click", (e) => { + e.preventDefault(); + const path = decodeURIComponent( + link.getAttribute("data-path") || "" + ); + vscode.postMessage({ command: "revealPath", path }); + }); + }); + } + document.getElementById("btn-copy")?.addEventListener("click", () => { + vscode.postMessage({ command: "copyReport" }); + }); + document.getElementById("btn-issue")?.addEventListener("click", () => { + vscode.postMessage({ command: "openIssue" }); + }); + function updateCacheNumbers() { + const cacheTabContent = document.getElementById("tab-cache"); + if (cacheTabContent) { + const summaryCards = cacheTabContent.querySelectorAll(".summary-card"); + if (summaryCards.length >= 4) { + const entriesValue = summaryCards[0]?.querySelector(".summary-value"); + if (entriesValue) { + entriesValue.textContent = "0"; + } + const sizeValue = summaryCards[1]?.querySelector(".summary-value"); + if (sizeValue) { + sizeValue.textContent = "0 MB"; + } + const lastUpdatedValue = summaryCards[2]?.querySelector(".summary-value"); + if (lastUpdatedValue) { + lastUpdatedValue.textContent = "Never"; + } + const ageValue = summaryCards[3]?.querySelector(".summary-value"); + if (ageValue) { + ageValue.textContent = "N/A"; + } + } + } + } + document.getElementById("btn-clear-cache")?.addEventListener("click", () => { + const btn = document.getElementById( + "btn-clear-cache" + ); + if (btn) { + btn.style.background = "#d97706"; + btn.innerHTML = "\u23F3Clearing..."; + btn.disabled = true; + } + updateCacheNumbers(); + vscode.postMessage({ command: "clearCache" }); + }); + document.getElementById("btn-clear-cache-tab")?.addEventListener("click", () => { + const btn = document.getElementById( + "btn-clear-cache-tab" + ); + if (btn) { + btn.style.background = "#d97706"; + btn.innerHTML = "\u23F3Clearing..."; + btn.disabled = true; + } + updateCacheNumbers(); + vscode.postMessage({ command: "clearCache" }); + }); + document.addEventListener("click", (event) => { + const target = event.target; + if (!target) { + return; + } + if (target.id === "btn-clear-cache" || target.id === "btn-clear-cache-tab") { + target.style.background = "#d97706"; + target.innerHTML = "\u23F3Clearing..."; + if (target instanceof HTMLButtonElement) { + target.disabled = true; + } + updateCacheNumbers(); + vscode.postMessage({ command: "clearCache" }); + } + if (target.id === "btn-reset-debug-counters") { + vscode.postMessage({ command: "resetDebugCounters" }); + } + if (target.classList.contains("debug-counter-set")) { + const key = target.getAttribute("data-key"); + const row = target.closest("tr"); + const input = row?.querySelector(".debug-counter-input"); + if (key && input) { + const value = parseInt(input.value, 10); + if (!isNaN(value)) { + vscode.postMessage({ command: "setDebugCounter", key, value }); + } + } + } + if (target.classList.contains("debug-flag-set")) { + const key = target.getAttribute("data-key"); + const row = target.closest("tr"); + const input = row?.querySelector(".debug-flag-input"); + if (key && input) { + vscode.postMessage({ command: "setDebugFlag", key, value: input.checked }); + } + } + }); + document.getElementById("btn-refresh")?.addEventListener( + "click", + () => vscode.postMessage({ command: "refresh" }) + ); + document.getElementById("btn-chart")?.addEventListener( + "click", + () => vscode.postMessage({ command: "showChart" }) + ); + document.getElementById("btn-usage")?.addEventListener( + "click", + () => vscode.postMessage({ command: "showUsageAnalysis" }) + ); + document.getElementById("btn-details")?.addEventListener( + "click", + () => vscode.postMessage({ command: "showDetails" }) + ); + document.getElementById("btn-diagnostics")?.addEventListener( + "click", + () => vscode.postMessage({ command: "showDiagnostics" }) + ); + document.getElementById("btn-maturity")?.addEventListener( + "click", + () => vscode.postMessage({ command: "showMaturity" }) + ); + document.getElementById("btn-dashboard")?.addEventListener( + "click", + () => vscode.postMessage({ command: "showDashboard" }) + ); + document.getElementById("btn-environmental")?.addEventListener( + "click", + () => vscode.postMessage({ command: "showEnvironmental" }) + ); + setupSortHandlers(); + setupEditorFilterHandlers(); + setupContextRefFilterHandlers(); + setupBackendButtonHandlers(); + setupFileLinks(); + setupStorageLinkHandlers(); + const savedState = vscode.getState(); + if (savedState?.activeTab && !activateTab(savedState.activeTab)) { + activateTab("report"); + } + } + async function bootstrap() { + const { provideVSCodeDesignSystem: provideVSCodeDesignSystem2, vsCodeButton: vsCodeButton2 } = await Promise.resolve().then(() => (init_dist3(), dist_exports)); + provideVSCodeDesignSystem2().register(vsCodeButton2()); + if (!initialData) { + const root = document.getElementById("root"); + if (root) { + root.textContent = "No data available."; + } + return; + } + renderLayout(initialData); + } + void bootstrap(); +})(); +/*! Bundled license information: + +tslib/tslib.es6.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) + +tabbable/dist/index.esm.js: + (*! + * tabbable 5.3.3 + * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE + *) +*/ +//# sourceMappingURL=diagnostics.js.map diff --git a/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js b/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js new file mode 100644 index 00000000..b0b642c6 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js @@ -0,0 +1,21962 @@ +"use strict"; +(() => { + var __defProp = Object.defineProperty; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; + var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); + }; + + // node_modules/@microsoft/fast-element/dist/esm/platform.js + function createMetadataLocator() { + const metadataLookup = /* @__PURE__ */ new WeakMap(); + return function(target) { + let metadata = metadataLookup.get(target); + if (metadata === void 0) { + let currentTarget = Reflect.getPrototypeOf(target); + while (metadata === void 0 && currentTarget !== null) { + metadata = metadataLookup.get(currentTarget); + currentTarget = Reflect.getPrototypeOf(currentTarget); + } + metadata = metadata === void 0 ? [] : metadata.slice(0); + metadataLookup.set(target, metadata); + } + return metadata; + }; + } + var $global, propConfig, FAST, emptyArray; + var init_platform = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/platform.js"() { + $global = (function() { + if (typeof globalThis !== "undefined") { + return globalThis; + } + if (typeof global !== "undefined") { + return global; + } + if (typeof self !== "undefined") { + return self; + } + if (typeof window !== "undefined") { + return window; + } + try { + return new Function("return this")(); + } catch (_a) { + return {}; + } + })(); + if ($global.trustedTypes === void 0) { + $global.trustedTypes = { createPolicy: (n, r) => r }; + } + propConfig = { + configurable: false, + enumerable: false, + writable: false + }; + if ($global.FAST === void 0) { + Reflect.defineProperty($global, "FAST", Object.assign({ value: /* @__PURE__ */ Object.create(null) }, propConfig)); + } + FAST = $global.FAST; + if (FAST.getById === void 0) { + const storage = /* @__PURE__ */ Object.create(null); + Reflect.defineProperty(FAST, "getById", Object.assign({ value(id, initialize) { + let found = storage[id]; + if (found === void 0) { + found = initialize ? storage[id] = initialize() : null; + } + return found; + } }, propConfig)); + } + emptyArray = Object.freeze([]); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/dom.js + var updateQueue, fastHTMLPolicy, htmlPolicy, marker, _interpolationStart, _interpolationEnd, DOM; + var init_dom = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/dom.js"() { + init_platform(); + updateQueue = $global.FAST.getById(1, () => { + const tasks = []; + const pendingErrors = []; + function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } + } + function tryRunTask(task) { + try { + task.call(); + } catch (error) { + pendingErrors.push(error); + setTimeout(throwFirstError, 0); + } + } + function process() { + const capacity = 1024; + let index = 0; + while (index < tasks.length) { + tryRunTask(tasks[index]); + index++; + if (index > capacity) { + for (let scan = 0, newLength = tasks.length - index; scan < newLength; scan++) { + tasks[scan] = tasks[scan + index]; + } + tasks.length -= index; + index = 0; + } + } + tasks.length = 0; + } + function enqueue(callable) { + if (tasks.length < 1) { + $global.requestAnimationFrame(process); + } + tasks.push(callable); + } + return Object.freeze({ + enqueue, + process + }); + }); + fastHTMLPolicy = $global.trustedTypes.createPolicy("fast-html", { + createHTML: (html2) => html2 + }); + htmlPolicy = fastHTMLPolicy; + marker = `fast-${Math.random().toString(36).substring(2, 8)}`; + _interpolationStart = `${marker}{`; + _interpolationEnd = `}${marker}`; + DOM = Object.freeze({ + /** + * Indicates whether the DOM supports the adoptedStyleSheets feature. + */ + supportsAdoptedStyleSheets: Array.isArray(document.adoptedStyleSheets) && "replace" in CSSStyleSheet.prototype, + /** + * Sets the HTML trusted types policy used by the templating engine. + * @param policy - The policy to set for HTML. + * @remarks + * This API can only be called once, for security reasons. It should be + * called by the application developer at the start of their program. + */ + setHTMLPolicy(policy) { + if (htmlPolicy !== fastHTMLPolicy) { + throw new Error("The HTML policy can only be set once."); + } + htmlPolicy = policy; + }, + /** + * Turns a string into trusted HTML using the configured trusted types policy. + * @param html - The string to turn into trusted HTML. + * @remarks + * Used internally by the template engine when creating templates + * and setting innerHTML. + */ + createHTML(html2) { + return htmlPolicy.createHTML(html2); + }, + /** + * Determines if the provided node is a template marker used by the runtime. + * @param node - The node to test. + */ + isMarker(node) { + return node && node.nodeType === 8 && node.data.startsWith(marker); + }, + /** + * Given a marker node, extract the {@link HTMLDirective} index from the placeholder. + * @param node - The marker node to extract the index from. + */ + extractDirectiveIndexFromMarker(node) { + return parseInt(node.data.replace(`${marker}:`, "")); + }, + /** + * Creates a placeholder string suitable for marking out a location *within* + * an attribute value or HTML content. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by binding directives. + */ + createInterpolationPlaceholder(index) { + return `${_interpolationStart}${index}${_interpolationEnd}`; + }, + /** + * Creates a placeholder that manifests itself as an attribute on an + * element. + * @param attributeName - The name of the custom attribute. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by attribute directives such as `ref`, `slotted`, and `children`. + */ + createCustomAttributePlaceholder(attributeName, index) { + return `${attributeName}="${this.createInterpolationPlaceholder(index)}"`; + }, + /** + * Creates a placeholder that manifests itself as a marker within the DOM structure. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by structural directives such as `repeat`. + */ + createBlockPlaceholder(index) { + return ``; + }, + /** + * Schedules DOM update work in the next async batch. + * @param callable - The callable function or object to queue. + */ + queueUpdate: updateQueue.enqueue, + /** + * Immediately processes all work previously scheduled + * through queueUpdate. + * @remarks + * This also forces nextUpdate promises + * to resolve. + */ + processUpdates: updateQueue.process, + /** + * Resolves with the next DOM update. + */ + nextUpdate() { + return new Promise(updateQueue.enqueue); + }, + /** + * Sets an attribute value on an element. + * @param element - The element to set the attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is `null` or `undefined`, the attribute is removed, otherwise + * it is set to the provided value using the standard `setAttribute` API. + */ + setAttribute(element, attributeName, value) { + if (value === null || value === void 0) { + element.removeAttribute(attributeName); + } else { + element.setAttribute(attributeName, value); + } + }, + /** + * Sets a boolean attribute value. + * @param element - The element to set the boolean attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is true, the attribute is added; otherwise it is removed. + */ + setBooleanAttribute(element, attributeName, value) { + value ? element.setAttribute(attributeName, "") : element.removeAttribute(attributeName); + }, + /** + * Removes all the child nodes of the provided parent node. + * @param parent - The node to remove the children from. + */ + removeChildNodes(parent) { + for (let child = parent.firstChild; child !== null; child = parent.firstChild) { + parent.removeChild(child); + } + }, + /** + * Creates a TreeWalker configured to walk a template fragment. + * @param fragment - The fragment to walk. + */ + createTemplateWalker(fragment) { + return document.createTreeWalker( + fragment, + 133, + // element, text, comment + null, + false + ); + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js + var SubscriberSet, PropertyChangeNotifier; + var init_notifier = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js"() { + SubscriberSet = class { + /** + * Creates an instance of SubscriberSet for the specified source. + * @param source - The object source that subscribers will receive notifications from. + * @param initialSubscriber - An initial subscriber to changes. + */ + constructor(source, initialSubscriber) { + this.sub1 = void 0; + this.sub2 = void 0; + this.spillover = void 0; + this.source = source; + this.sub1 = initialSubscriber; + } + /** + * Checks whether the provided subscriber has been added to this set. + * @param subscriber - The subscriber to test for inclusion in this set. + */ + has(subscriber) { + return this.spillover === void 0 ? this.sub1 === subscriber || this.sub2 === subscriber : this.spillover.indexOf(subscriber) !== -1; + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + */ + subscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.has(subscriber)) { + return; + } + if (this.sub1 === void 0) { + this.sub1 = subscriber; + return; + } + if (this.sub2 === void 0) { + this.sub2 = subscriber; + return; + } + this.spillover = [this.sub1, this.sub2, subscriber]; + this.sub1 = void 0; + this.sub2 = void 0; + } else { + const index = spillover.indexOf(subscriber); + if (index === -1) { + spillover.push(subscriber); + } + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + */ + unsubscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.sub1 === subscriber) { + this.sub1 = void 0; + } else if (this.sub2 === subscriber) { + this.sub2 = void 0; + } + } else { + const index = spillover.indexOf(subscriber); + if (index !== -1) { + spillover.splice(index, 1); + } + } + } + /** + * Notifies all subscribers. + * @param args - Data passed along to subscribers during notification. + */ + notify(args) { + const spillover = this.spillover; + const source = this.source; + if (spillover === void 0) { + const sub1 = this.sub1; + const sub2 = this.sub2; + if (sub1 !== void 0) { + sub1.handleChange(source, args); + } + if (sub2 !== void 0) { + sub2.handleChange(source, args); + } + } else { + for (let i = 0, ii = spillover.length; i < ii; ++i) { + spillover[i].handleChange(source, args); + } + } + } + }; + PropertyChangeNotifier = class { + /** + * Creates an instance of PropertyChangeNotifier for the specified source. + * @param source - The object source that subscribers will receive notifications from. + */ + constructor(source) { + this.subscribers = {}; + this.sourceSubscribers = null; + this.source = source; + } + /** + * Notifies all subscribers, based on the specified property. + * @param propertyName - The property name, passed along to subscribers during notification. + */ + notify(propertyName) { + var _a; + const subscribers = this.subscribers[propertyName]; + if (subscribers !== void 0) { + subscribers.notify(propertyName); + } + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.notify(propertyName); + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + * @param propertyToWatch - The name of the property that the subscriber is interested in watching for changes. + */ + subscribe(subscriber, propertyToWatch) { + var _a; + if (propertyToWatch) { + let subscribers = this.subscribers[propertyToWatch]; + if (subscribers === void 0) { + this.subscribers[propertyToWatch] = subscribers = new SubscriberSet(this.source); + } + subscribers.subscribe(subscriber); + } else { + this.sourceSubscribers = (_a = this.sourceSubscribers) !== null && _a !== void 0 ? _a : new SubscriberSet(this.source); + this.sourceSubscribers.subscribe(subscriber); + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + * @param propertyToUnwatch - The name of the property that the subscriber is no longer interested in watching. + */ + unsubscribe(subscriber, propertyToUnwatch) { + var _a; + if (propertyToUnwatch) { + const subscribers = this.subscribers[propertyToUnwatch]; + if (subscribers !== void 0) { + subscribers.unsubscribe(subscriber); + } + } else { + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriber); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/observable.js + function observable(target, nameOrAccessor) { + Observable.defineProperty(target, nameOrAccessor); + } + function volatile(target, name, descriptor) { + return Object.assign({}, descriptor, { + get: function() { + Observable.trackVolatile(); + return descriptor.get.apply(this); + } + }); + } + var Observable, contextEvent, ExecutionContext, defaultExecutionContext; + var init_observable = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/observable.js"() { + init_dom(); + init_platform(); + init_notifier(); + Observable = FAST.getById(2, () => { + const volatileRegex = /(:|&&|\|\||if)/; + const notifierLookup = /* @__PURE__ */ new WeakMap(); + const queueUpdate = DOM.queueUpdate; + let watcher = void 0; + let createArrayObserver = (array) => { + throw new Error("Must call enableArrayObservation before observing arrays."); + }; + function getNotifier(source) { + let found = source.$fastController || notifierLookup.get(source); + if (found === void 0) { + if (Array.isArray(source)) { + found = createArrayObserver(source); + } else { + notifierLookup.set(source, found = new PropertyChangeNotifier(source)); + } + } + return found; + } + const getAccessors = createMetadataLocator(); + class DefaultObservableAccessor { + constructor(name) { + this.name = name; + this.field = `_${name}`; + this.callback = `${name}Changed`; + } + getValue(source) { + if (watcher !== void 0) { + watcher.watch(source, this.name); + } + return source[this.field]; + } + setValue(source, newValue) { + const field = this.field; + const oldValue = source[field]; + if (oldValue !== newValue) { + source[field] = newValue; + const callback = source[this.callback]; + if (typeof callback === "function") { + callback.call(source, oldValue, newValue); + } + getNotifier(source).notify(this.name); + } + } + } + class BindingObserverImplementation extends SubscriberSet { + constructor(binding, initialSubscriber, isVolatileBinding = false) { + super(binding, initialSubscriber); + this.binding = binding; + this.isVolatileBinding = isVolatileBinding; + this.needsRefresh = true; + this.needsQueue = true; + this.first = this; + this.last = null; + this.propertySource = void 0; + this.propertyName = void 0; + this.notifier = void 0; + this.next = void 0; + } + observe(source, context) { + if (this.needsRefresh && this.last !== null) { + this.disconnect(); + } + const previousWatcher = watcher; + watcher = this.needsRefresh ? this : void 0; + this.needsRefresh = this.isVolatileBinding; + const result = this.binding(source, context); + watcher = previousWatcher; + return result; + } + disconnect() { + if (this.last !== null) { + let current = this.first; + while (current !== void 0) { + current.notifier.unsubscribe(this, current.propertyName); + current = current.next; + } + this.last = null; + this.needsRefresh = this.needsQueue = true; + } + } + watch(propertySource, propertyName) { + const prev = this.last; + const notifier = getNotifier(propertySource); + const current = prev === null ? this.first : {}; + current.propertySource = propertySource; + current.propertyName = propertyName; + current.notifier = notifier; + notifier.subscribe(this, propertyName); + if (prev !== null) { + if (!this.needsRefresh) { + let prevValue; + watcher = void 0; + prevValue = prev.propertySource[prev.propertyName]; + watcher = this; + if (propertySource === prevValue) { + this.needsRefresh = true; + } + } + prev.next = current; + } + this.last = current; + } + handleChange() { + if (this.needsQueue) { + this.needsQueue = false; + queueUpdate(this); + } + } + call() { + if (this.last !== null) { + this.needsQueue = true; + this.notify(this); + } + } + records() { + let next = this.first; + return { + next: () => { + const current = next; + if (current === void 0) { + return { value: void 0, done: true }; + } else { + next = next.next; + return { + value: current, + done: false + }; + } + }, + [Symbol.iterator]: function() { + return this; + } + }; + } + } + return Object.freeze({ + /** + * @internal + * @param factory - The factory used to create array observers. + */ + setArrayObserverFactory(factory) { + createArrayObserver = factory; + }, + /** + * Gets a notifier for an object or Array. + * @param source - The object or Array to get the notifier for. + */ + getNotifier, + /** + * Records a property change for a source object. + * @param source - The object to record the change against. + * @param propertyName - The property to track as changed. + */ + track(source, propertyName) { + if (watcher !== void 0) { + watcher.watch(source, propertyName); + } + }, + /** + * Notifies watchers that the currently executing property getter or function is volatile + * with respect to its observable dependencies. + */ + trackVolatile() { + if (watcher !== void 0) { + watcher.needsRefresh = true; + } + }, + /** + * Notifies subscribers of a source object of changes. + * @param source - the object to notify of changes. + * @param args - The change args to pass to subscribers. + */ + notify(source, args) { + getNotifier(source).notify(args); + }, + /** + * Defines an observable property on an object or prototype. + * @param target - The target object to define the observable on. + * @param nameOrAccessor - The name of the property to define as observable; + * or a custom accessor that specifies the property name and accessor implementation. + */ + defineProperty(target, nameOrAccessor) { + if (typeof nameOrAccessor === "string") { + nameOrAccessor = new DefaultObservableAccessor(nameOrAccessor); + } + getAccessors(target).push(nameOrAccessor); + Reflect.defineProperty(target, nameOrAccessor.name, { + enumerable: true, + get: function() { + return nameOrAccessor.getValue(this); + }, + set: function(newValue) { + nameOrAccessor.setValue(this, newValue); + } + }); + }, + /** + * Finds all the observable accessors defined on the target, + * including its prototype chain. + * @param target - The target object to search for accessor on. + */ + getAccessors, + /** + * Creates a {@link BindingObserver} that can watch the + * provided {@link Binding} for changes. + * @param binding - The binding to observe. + * @param initialSubscriber - An initial subscriber to changes in the binding value. + * @param isVolatileBinding - Indicates whether the binding's dependency list must be re-evaluated on every value evaluation. + */ + binding(binding, initialSubscriber, isVolatileBinding = this.isVolatileBinding(binding)) { + return new BindingObserverImplementation(binding, initialSubscriber, isVolatileBinding); + }, + /** + * Determines whether a binding expression is volatile and needs to have its dependency list re-evaluated + * on every evaluation of the value. + * @param binding - The binding to inspect. + */ + isVolatileBinding(binding) { + return volatileRegex.test(binding.toString()); + } + }); + }); + contextEvent = FAST.getById(3, () => { + let current = null; + return { + get() { + return current; + }, + set(event) { + current = event; + } + }; + }); + ExecutionContext = class { + constructor() { + this.index = 0; + this.length = 0; + this.parent = null; + this.parentContext = null; + } + /** + * The current event within an event handler. + */ + get event() { + return contextEvent.get(); + } + /** + * Indicates whether the current item within a repeat context + * has an even index. + */ + get isEven() { + return this.index % 2 === 0; + } + /** + * Indicates whether the current item within a repeat context + * has an odd index. + */ + get isOdd() { + return this.index % 2 !== 0; + } + /** + * Indicates whether the current item within a repeat context + * is the first item in the collection. + */ + get isFirst() { + return this.index === 0; + } + /** + * Indicates whether the current item within a repeat context + * is somewhere in the middle of the collection. + */ + get isInMiddle() { + return !this.isFirst && !this.isLast; + } + /** + * Indicates whether the current item within a repeat context + * is the last item in the collection. + */ + get isLast() { + return this.index === this.length - 1; + } + /** + * Sets the event for the current execution context. + * @param event - The event to set. + * @internal + */ + static setEvent(event) { + contextEvent.set(event); + } + }; + Observable.defineProperty(ExecutionContext.prototype, "index"); + Observable.defineProperty(ExecutionContext.prototype, "length"); + defaultExecutionContext = Object.seal(new ExecutionContext()); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js + var HTMLDirective, TargetedHTMLDirective, AttachedBehaviorHTMLDirective; + var init_html_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js"() { + init_dom(); + HTMLDirective = class { + constructor() { + this.targetIndex = 0; + } + }; + TargetedHTMLDirective = class extends HTMLDirective { + constructor() { + super(...arguments); + this.createPlaceholder = DOM.createInterpolationPlaceholder; + } + }; + AttachedBehaviorHTMLDirective = class extends HTMLDirective { + /** + * + * @param name - The name of the behavior; used as a custom attribute on the element. + * @param behavior - The behavior to instantiate and attach to the element. + * @param options - Options to pass to the behavior during creation. + */ + constructor(name, behavior, options) { + super(); + this.name = name; + this.behavior = behavior; + this.options = options; + } + /** + * Creates a placeholder string based on the directive's index within the template. + * @param index - The index of the directive within the template. + * @remarks + * Creates a custom attribute placeholder. + */ + createPlaceholder(index) { + return DOM.createCustomAttributePlaceholder(this.name, index); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + * @remarks + * Creates an instance of the `behavior` type this directive was constructed with + * and passes the target and options to that `behavior`'s constructor. + */ + createBehavior(target) { + return new this.behavior(target, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/binding.js + function normalBind(source, context) { + this.source = source; + this.context = context; + if (this.bindingObserver === null) { + this.bindingObserver = Observable.binding(this.binding, this, this.isBindingVolatile); + } + this.updateTarget(this.bindingObserver.observe(source, context)); + } + function triggerBind(source, context) { + this.source = source; + this.context = context; + this.target.addEventListener(this.targetName, this); + } + function normalUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + } + function contentUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.unbind(); + view.needsBindOnly = true; + } + } + function triggerUnbind() { + this.target.removeEventListener(this.targetName, this); + this.source = null; + this.context = null; + } + function updateAttributeTarget(value) { + DOM.setAttribute(this.target, this.targetName, value); + } + function updateBooleanAttributeTarget(value) { + DOM.setBooleanAttribute(this.target, this.targetName, value); + } + function updateContentTarget(value) { + if (value === null || value === void 0) { + value = ""; + } + if (value.create) { + this.target.textContent = ""; + let view = this.target.$fastView; + if (view === void 0) { + view = value.create(); + } else { + if (this.target.$fastTemplate !== value) { + if (view.isComposed) { + view.remove(); + view.unbind(); + } + view = value.create(); + } + } + if (!view.isComposed) { + view.isComposed = true; + view.bind(this.source, this.context); + view.insertBefore(this.target); + this.target.$fastView = view; + this.target.$fastTemplate = value; + } else if (view.needsBindOnly) { + view.needsBindOnly = false; + view.bind(this.source, this.context); + } + } else { + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.isComposed = false; + view.remove(); + if (view.needsBindOnly) { + view.needsBindOnly = false; + } else { + view.unbind(); + } + } + this.target.textContent = value; + } + } + function updatePropertyTarget(value) { + this.target[this.targetName] = value; + } + function updateClassTarget(value) { + const classVersions = this.classVersions || /* @__PURE__ */ Object.create(null); + const target = this.target; + let version = this.version || 0; + if (value !== null && value !== void 0 && value.length) { + const names = value.split(/\s+/); + for (let i = 0, ii = names.length; i < ii; ++i) { + const currentName = names[i]; + if (currentName === "") { + continue; + } + classVersions[currentName] = version; + target.classList.add(currentName); + } + } + this.classVersions = classVersions; + this.version = version + 1; + if (version === 0) { + return; + } + version -= 1; + for (const name in classVersions) { + if (classVersions[name] === version) { + target.classList.remove(name); + } + } + } + var HTMLBindingDirective, BindingBehavior; + var init_binding = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/binding.js"() { + init_dom(); + init_observable(); + init_html_directive(); + HTMLBindingDirective = class extends TargetedHTMLDirective { + /** + * Creates an instance of BindingDirective. + * @param binding - A binding that returns the data used to update the DOM. + */ + constructor(binding) { + super(); + this.binding = binding; + this.bind = normalBind; + this.unbind = normalUnbind; + this.updateTarget = updateAttributeTarget; + this.isBindingVolatile = Observable.isVolatileBinding(this.binding); + } + /** + * Gets/sets the name of the attribute or property that this + * binding is targeting. + */ + get targetName() { + return this.originalTargetName; + } + set targetName(value) { + this.originalTargetName = value; + if (value === void 0) { + return; + } + switch (value[0]) { + case ":": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updatePropertyTarget; + if (this.cleanedTargetName === "innerHTML") { + const binding = this.binding; + this.binding = (s, c) => DOM.createHTML(binding(s, c)); + } + break; + case "?": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updateBooleanAttributeTarget; + break; + case "@": + this.cleanedTargetName = value.substr(1); + this.bind = triggerBind; + this.unbind = triggerUnbind; + break; + default: + this.cleanedTargetName = value; + if (value === "class") { + this.updateTarget = updateClassTarget; + } + break; + } + } + /** + * Makes this binding target the content of an element rather than + * a particular attribute or property. + */ + targetAtContent() { + this.updateTarget = updateContentTarget; + this.unbind = contentUnbind; + } + /** + * Creates the runtime BindingBehavior instance based on the configuration + * information stored in the BindingDirective. + * @param target - The target node that the binding behavior should attach to. + */ + createBehavior(target) { + return new BindingBehavior(target, this.binding, this.isBindingVolatile, this.bind, this.unbind, this.updateTarget, this.cleanedTargetName); + } + }; + BindingBehavior = class { + /** + * Creates an instance of BindingBehavior. + * @param target - The target of the data updates. + * @param binding - The binding that returns the latest value for an update. + * @param isBindingVolatile - Indicates whether the binding has volatile dependencies. + * @param bind - The operation to perform during binding. + * @param unbind - The operation to perform during unbinding. + * @param updateTarget - The operation to perform when updating. + * @param targetName - The name of the target attribute or property to update. + */ + constructor(target, binding, isBindingVolatile, bind, unbind, updateTarget, targetName) { + this.source = null; + this.context = null; + this.bindingObserver = null; + this.target = target; + this.binding = binding; + this.isBindingVolatile = isBindingVolatile; + this.bind = bind; + this.unbind = unbind; + this.updateTarget = updateTarget; + this.targetName = targetName; + } + /** @internal */ + handleChange() { + this.updateTarget(this.bindingObserver.observe(this.source, this.context)); + } + /** @internal */ + handleEvent(event) { + ExecutionContext.setEvent(event); + const result = this.binding(this.source, this.context); + ExecutionContext.setEvent(null); + if (result !== true) { + event.preventDefault(); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js + function createAggregateBinding(parts) { + if (parts.length === 1) { + return parts[0]; + } + let targetName; + const partCount = parts.length; + const finalParts = parts.map((x) => { + if (typeof x === "string") { + return () => x; + } + targetName = x.targetName || targetName; + return x.binding; + }); + const binding = (scope, context) => { + let output = ""; + for (let i = 0; i < partCount; ++i) { + output += finalParts[i](scope, context); + } + return output; + }; + const directive = new HTMLBindingDirective(binding); + directive.targetName = targetName; + return directive; + } + function parseContent(context, value) { + const valueParts = value.split(_interpolationStart); + if (valueParts.length === 1) { + return null; + } + const bindingParts = []; + for (let i = 0, ii = valueParts.length; i < ii; ++i) { + const current = valueParts[i]; + const index = current.indexOf(_interpolationEnd); + let literal; + if (index === -1) { + literal = current; + } else { + const directiveIndex = parseInt(current.substring(0, index)); + bindingParts.push(context.directives[directiveIndex]); + literal = current.substring(index + interpolationEndLength); + } + if (literal !== "") { + bindingParts.push(literal); + } + } + return bindingParts; + } + function compileAttributes(context, node, includeBasicValues = false) { + const attributes = node.attributes; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const attr2 = attributes[i]; + const attrValue = attr2.value; + const parseResult = parseContent(context, attrValue); + let result = null; + if (parseResult === null) { + if (includeBasicValues) { + result = new HTMLBindingDirective(() => attrValue); + result.targetName = attr2.name; + } + } else { + result = createAggregateBinding(parseResult); + } + if (result !== null) { + node.removeAttributeNode(attr2); + i--; + ii--; + context.addFactory(result); + } + } + } + function compileContent(context, node, walker) { + const parseResult = parseContent(context, node.textContent); + if (parseResult !== null) { + let lastNode = node; + for (let i = 0, ii = parseResult.length; i < ii; ++i) { + const currentPart = parseResult[i]; + const currentNode = i === 0 ? node : lastNode.parentNode.insertBefore(document.createTextNode(""), lastNode.nextSibling); + if (typeof currentPart === "string") { + currentNode.textContent = currentPart; + } else { + currentNode.textContent = " "; + context.captureContentBinding(currentPart); + } + lastNode = currentNode; + context.targetIndex++; + if (currentNode !== node) { + walker.nextNode(); + } + } + context.targetIndex--; + } + } + function compileTemplate(template, directives) { + const fragment = template.content; + document.adoptNode(fragment); + const context = CompilationContext.borrow(directives); + compileAttributes(context, template, true); + const hostBehaviorFactories = context.behaviorFactories; + context.reset(); + const walker = DOM.createTemplateWalker(fragment); + let node; + while (node = walker.nextNode()) { + context.targetIndex++; + switch (node.nodeType) { + case 1: + compileAttributes(context, node); + break; + case 3: + compileContent(context, node, walker); + break; + case 8: + if (DOM.isMarker(node)) { + context.addFactory(directives[DOM.extractDirectiveIndexFromMarker(node)]); + } + } + } + let targetOffset = 0; + if ( + // If the first node in a fragment is a marker, that means it's an unstable first node, + // because something like a when, repeat, etc. could add nodes before the marker. + // To mitigate this, we insert a stable first node. However, if we insert a node, + // that will alter the result of the TreeWalker. So, we also need to offset the target index. + DOM.isMarker(fragment.firstChild) || // Or if there is only one node and a directive, it means the template's content + // is *only* the directive. In that case, HTMLView.dispose() misses any nodes inserted by + // the directive. Inserting a new node ensures proper disposal of nodes added by the directive. + fragment.childNodes.length === 1 && directives.length + ) { + fragment.insertBefore(document.createComment(""), fragment.firstChild); + targetOffset = -1; + } + const viewBehaviorFactories = context.behaviorFactories; + context.release(); + return { + fragment, + viewBehaviorFactories, + hostBehaviorFactories, + targetOffset + }; + } + var sharedContext, CompilationContext, interpolationEndLength; + var init_compiler = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js"() { + init_dom(); + init_binding(); + sharedContext = null; + CompilationContext = class _CompilationContext { + addFactory(factory) { + factory.targetIndex = this.targetIndex; + this.behaviorFactories.push(factory); + } + captureContentBinding(directive) { + directive.targetAtContent(); + this.addFactory(directive); + } + reset() { + this.behaviorFactories = []; + this.targetIndex = -1; + } + release() { + sharedContext = this; + } + static borrow(directives) { + const shareable = sharedContext || new _CompilationContext(); + shareable.directives = directives; + shareable.reset(); + sharedContext = null; + return shareable; + } + }; + interpolationEndLength = _interpolationEnd.length; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/view.js + var range, HTMLView; + var init_view = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/view.js"() { + range = document.createRange(); + HTMLView = class { + /** + * Constructs an instance of HTMLView. + * @param fragment - The html fragment that contains the nodes for this view. + * @param behaviors - The behaviors to be applied to this view. + */ + constructor(fragment, behaviors) { + this.fragment = fragment; + this.behaviors = behaviors; + this.source = null; + this.context = null; + this.firstChild = fragment.firstChild; + this.lastChild = fragment.lastChild; + } + /** + * Appends the view's DOM nodes to the referenced node. + * @param node - The parent node to append the view's DOM nodes to. + */ + appendTo(node) { + node.appendChild(this.fragment); + } + /** + * Inserts the view's DOM nodes before the referenced node. + * @param node - The node to insert the view's DOM before. + */ + insertBefore(node) { + if (this.fragment.hasChildNodes()) { + node.parentNode.insertBefore(this.fragment, node); + } else { + const end = this.lastChild; + if (node.previousSibling === end) + return; + const parentNode = node.parentNode; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parentNode.insertBefore(current, node); + current = next; + } + parentNode.insertBefore(end, node); + } + } + /** + * Removes the view's DOM nodes. + * The nodes are not disposed and the view can later be re-inserted. + */ + remove() { + const fragment = this.fragment; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + fragment.appendChild(current); + current = next; + } + fragment.appendChild(end); + } + /** + * Removes the view and unbinds its behaviors, disposing of DOM nodes afterward. + * Once a view has been disposed, it cannot be inserted or bound again. + */ + dispose() { + const parent = this.firstChild.parentNode; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parent.removeChild(current); + current = next; + } + parent.removeChild(end); + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + } + /** + * Binds a view's behaviors to its binding source. + * @param source - The binding source for the view's binding behaviors. + * @param context - The execution context to run the behaviors within. + */ + bind(source, context) { + const behaviors = this.behaviors; + if (this.source === source) { + return; + } else if (this.source !== null) { + const oldSource = this.source; + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + const current = behaviors[i]; + current.unbind(oldSource); + current.bind(source, context); + } + } else { + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].bind(source, context); + } + } + } + /** + * Unbinds a view's behaviors from its binding source. + */ + unbind() { + if (this.source === null) { + return; + } + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + this.source = null; + } + /** + * Efficiently disposes of a contiguous range of synthetic view instances. + * @param views - A contiguous range of views to be disposed. + */ + static disposeContiguousBatch(views) { + if (views.length === 0) { + return; + } + range.setStartBefore(views[0].firstChild); + range.setEndAfter(views[views.length - 1].lastChild); + range.deleteContents(); + for (let i = 0, ii = views.length; i < ii; ++i) { + const view = views[i]; + const behaviors = view.behaviors; + const oldSource = view.source; + for (let j = 0, jj = behaviors.length; j < jj; ++j) { + behaviors[j].unbind(oldSource); + } + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/template.js + function html(strings, ...values) { + const directives = []; + let html2 = ""; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + const currentString = strings[i]; + let value = values[i]; + html2 += currentString; + if (value instanceof ViewTemplate) { + const template = value; + value = () => template; + } + if (typeof value === "function") { + value = new HTMLBindingDirective(value); + } + if (value instanceof TargetedHTMLDirective) { + const match = lastAttributeNameRegex.exec(currentString); + if (match !== null) { + value.targetName = match[2]; + } + } + if (value instanceof HTMLDirective) { + html2 += value.createPlaceholder(directives.length); + directives.push(value); + } else { + html2 += value; + } + } + html2 += strings[strings.length - 1]; + return new ViewTemplate(html2, directives); + } + var ViewTemplate, lastAttributeNameRegex; + var init_template = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/template.js"() { + init_dom(); + init_observable(); + init_compiler(); + init_view(); + init_html_directive(); + init_binding(); + ViewTemplate = class { + /** + * Creates an instance of ViewTemplate. + * @param html - The html representing what this template will instantiate, including placeholders for directives. + * @param directives - The directives that will be connected to placeholders in the html. + */ + constructor(html2, directives) { + this.behaviorCount = 0; + this.hasHostBehaviors = false; + this.fragment = null; + this.targetOffset = 0; + this.viewBehaviorFactories = null; + this.hostBehaviorFactories = null; + this.html = html2; + this.directives = directives; + } + /** + * Creates an HTMLView instance based on this template definition. + * @param hostBindingTarget - The element that host behaviors will be bound to. + */ + create(hostBindingTarget) { + if (this.fragment === null) { + let template; + const html2 = this.html; + if (typeof html2 === "string") { + template = document.createElement("template"); + template.innerHTML = DOM.createHTML(html2); + const fec = template.content.firstElementChild; + if (fec !== null && fec.tagName === "TEMPLATE") { + template = fec; + } + } else { + template = html2; + } + const result = compileTemplate(template, this.directives); + this.fragment = result.fragment; + this.viewBehaviorFactories = result.viewBehaviorFactories; + this.hostBehaviorFactories = result.hostBehaviorFactories; + this.targetOffset = result.targetOffset; + this.behaviorCount = this.viewBehaviorFactories.length + this.hostBehaviorFactories.length; + this.hasHostBehaviors = this.hostBehaviorFactories.length > 0; + } + const fragment = this.fragment.cloneNode(true); + const viewFactories = this.viewBehaviorFactories; + const behaviors = new Array(this.behaviorCount); + const walker = DOM.createTemplateWalker(fragment); + let behaviorIndex = 0; + let targetIndex = this.targetOffset; + let node = walker.nextNode(); + for (let ii = viewFactories.length; behaviorIndex < ii; ++behaviorIndex) { + const factory = viewFactories[behaviorIndex]; + const factoryIndex = factory.targetIndex; + while (node !== null) { + if (targetIndex === factoryIndex) { + behaviors[behaviorIndex] = factory.createBehavior(node); + break; + } else { + node = walker.nextNode(); + targetIndex++; + } + } + } + if (this.hasHostBehaviors) { + const hostFactories = this.hostBehaviorFactories; + for (let i = 0, ii = hostFactories.length; i < ii; ++i, ++behaviorIndex) { + behaviors[behaviorIndex] = hostFactories[i].createBehavior(hostBindingTarget); + } + } + return new HTMLView(fragment, behaviors); + } + /** + * Creates an HTMLView from this template, binds it to the source, and then appends it to the host. + * @param source - The data source to bind the template to. + * @param host - The Element where the template will be rendered. + * @param hostBindingTarget - An HTML element to target the host bindings at if different from the + * host that the template is being attached to. + */ + render(source, host, hostBindingTarget) { + if (typeof host === "string") { + host = document.getElementById(host); + } + if (hostBindingTarget === void 0) { + hostBindingTarget = host; + } + const view = this.create(hostBindingTarget); + view.bind(source, defaultExecutionContext); + view.appendTo(host); + return view; + } + }; + lastAttributeNameRegex = /* eslint-disable-next-line no-control-regex */ + /([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js + function reduceStyles(styles) { + return styles.map((x) => x instanceof ElementStyles ? reduceStyles(x.styles) : [x]).reduce((prev, curr) => prev.concat(curr), []); + } + function reduceBehaviors(styles) { + return styles.map((x) => x instanceof ElementStyles ? x.behaviors : null).reduce((prev, curr) => { + if (curr === null) { + return prev; + } + if (prev === null) { + prev = []; + } + return prev.concat(curr); + }, null); + } + function separateSheetsToPrepend(sheets) { + const prepend = []; + const append = []; + sheets.forEach((x) => (x[prependToAdoptedStyleSheetsSymbol] ? prepend : append).push(x)); + return { prepend, append }; + } + function getNextStyleClass() { + return `fast-style-class-${++styleClassId}`; + } + var ElementStyles, prependToAdoptedStyleSheetsSymbol, addAdoptedStyleSheets, removeAdoptedStyleSheets, AdoptedStyleSheetsStyles, styleClassId, StyleElementStyles; + var init_element_styles = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js"() { + init_dom(); + ElementStyles = class { + constructor() { + this.targets = /* @__PURE__ */ new WeakSet(); + } + /** @internal */ + addStylesTo(target) { + this.targets.add(target); + } + /** @internal */ + removeStylesFrom(target) { + this.targets.delete(target); + } + /** @internal */ + isAttachedTo(target) { + return this.targets.has(target); + } + /** + * Associates behaviors with this set of styles. + * @param behaviors - The behaviors to associate. + */ + withBehaviors(...behaviors) { + this.behaviors = this.behaviors === null ? behaviors : this.behaviors.concat(behaviors); + return this; + } + }; + ElementStyles.create = (() => { + if (DOM.supportsAdoptedStyleSheets) { + const styleSheetCache = /* @__PURE__ */ new Map(); + return (styles) => ( + // eslint-disable-next-line @typescript-eslint/no-use-before-define + new AdoptedStyleSheetsStyles(styles, styleSheetCache) + ); + } + return (styles) => new StyleElementStyles(styles); + })(); + prependToAdoptedStyleSheetsSymbol = /* @__PURE__ */ Symbol("prependToAdoptedStyleSheets"); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets = [...prepend, ...target.adoptedStyleSheets, ...append]; + }; + removeAdoptedStyleSheets = (target, sheets) => { + target.adoptedStyleSheets = target.adoptedStyleSheets.filter((x) => sheets.indexOf(x) === -1); + }; + if (DOM.supportsAdoptedStyleSheets) { + try { + document.adoptedStyleSheets.push(); + document.adoptedStyleSheets.splice(); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets.splice(0, 0, ...prepend); + target.adoptedStyleSheets.push(...append); + }; + removeAdoptedStyleSheets = (target, sheets) => { + for (const sheet of sheets) { + const index = target.adoptedStyleSheets.indexOf(sheet); + if (index !== -1) { + target.adoptedStyleSheets.splice(index, 1); + } + } + }; + } catch (e) { + } + } + AdoptedStyleSheetsStyles = class extends ElementStyles { + constructor(styles, styleSheetCache) { + super(); + this.styles = styles; + this.styleSheetCache = styleSheetCache; + this._styleSheets = void 0; + this.behaviors = reduceBehaviors(styles); + } + get styleSheets() { + if (this._styleSheets === void 0) { + const styles = this.styles; + const styleSheetCache = this.styleSheetCache; + this._styleSheets = reduceStyles(styles).map((x) => { + if (x instanceof CSSStyleSheet) { + return x; + } + let sheet = styleSheetCache.get(x); + if (sheet === void 0) { + sheet = new CSSStyleSheet(); + sheet.replaceSync(x); + styleSheetCache.set(x, sheet); + } + return sheet; + }); + } + return this._styleSheets; + } + addStylesTo(target) { + addAdoptedStyleSheets(target, this.styleSheets); + super.addStylesTo(target); + } + removeStylesFrom(target) { + removeAdoptedStyleSheets(target, this.styleSheets); + super.removeStylesFrom(target); + } + }; + styleClassId = 0; + StyleElementStyles = class extends ElementStyles { + constructor(styles) { + super(); + this.styles = styles; + this.behaviors = null; + this.behaviors = reduceBehaviors(styles); + this.styleSheets = reduceStyles(styles); + this.styleClass = getNextStyleClass(); + } + addStylesTo(target) { + const styleSheets = this.styleSheets; + const styleClass = this.styleClass; + target = this.normalizeTarget(target); + for (let i = 0; i < styleSheets.length; i++) { + const element = document.createElement("style"); + element.innerHTML = styleSheets[i]; + element.className = styleClass; + target.append(element); + } + super.addStylesTo(target); + } + removeStylesFrom(target) { + target = this.normalizeTarget(target); + const styles = target.querySelectorAll(`.${this.styleClass}`); + for (let i = 0, ii = styles.length; i < ii; ++i) { + target.removeChild(styles[i]); + } + super.removeStylesFrom(target); + } + isAttachedTo(target) { + return super.isAttachedTo(this.normalizeTarget(target)); + } + normalizeTarget(target) { + return target === document ? document.body : target; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/attributes.js + function attr(configOrTarget, prop) { + let config; + function decorator($target, $prop) { + if (arguments.length > 1) { + config.property = $prop; + } + AttributeConfiguration.locate($target.constructor).push(config); + } + if (arguments.length > 1) { + config = {}; + decorator(configOrTarget, prop); + return; + } + config = configOrTarget === void 0 ? {} : configOrTarget; + return decorator; + } + var AttributeConfiguration, booleanConverter, nullableNumberConverter, AttributeDefinition; + var init_attributes = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/attributes.js"() { + init_observable(); + init_dom(); + init_platform(); + AttributeConfiguration = Object.freeze({ + /** + * Locates all attribute configurations associated with a type. + */ + locate: createMetadataLocator() + }); + booleanConverter = { + toView(value) { + return value ? "true" : "false"; + }, + fromView(value) { + if (value === null || value === void 0 || value === "false" || value === false || value === 0) { + return false; + } + return true; + } + }; + nullableNumberConverter = { + toView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number.toString(); + }, + fromView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number; + } + }; + AttributeDefinition = class _AttributeDefinition { + /** + * Creates an instance of AttributeDefinition. + * @param Owner - The class constructor that owns this attribute. + * @param name - The name of the property associated with the attribute. + * @param attribute - The name of the attribute in HTML. + * @param mode - The {@link AttributeMode} that describes the behavior of this attribute. + * @param converter - A {@link ValueConverter} that integrates with the property getter/setter + * to convert values to and from a DOM string. + */ + constructor(Owner, name, attribute = name.toLowerCase(), mode = "reflect", converter) { + this.guards = /* @__PURE__ */ new Set(); + this.Owner = Owner; + this.name = name; + this.attribute = attribute; + this.mode = mode; + this.converter = converter; + this.fieldName = `_${name}`; + this.callbackName = `${name}Changed`; + this.hasCallback = this.callbackName in Owner.prototype; + if (mode === "boolean" && converter === void 0) { + this.converter = booleanConverter; + } + } + /** + * Sets the value of the attribute/property on the source element. + * @param source - The source element to access. + * @param value - The value to set the attribute/property to. + */ + setValue(source, newValue) { + const oldValue = source[this.fieldName]; + const converter = this.converter; + if (converter !== void 0) { + newValue = converter.fromView(newValue); + } + if (oldValue !== newValue) { + source[this.fieldName] = newValue; + this.tryReflectToAttribute(source); + if (this.hasCallback) { + source[this.callbackName](oldValue, newValue); + } + source.$fastController.notify(this.name); + } + } + /** + * Gets the value of the attribute/property on the source element. + * @param source - The source element to access. + */ + getValue(source) { + Observable.track(source, this.name); + return source[this.fieldName]; + } + /** @internal */ + onAttributeChangedCallback(element, value) { + if (this.guards.has(element)) { + return; + } + this.guards.add(element); + this.setValue(element, value); + this.guards.delete(element); + } + tryReflectToAttribute(element) { + const mode = this.mode; + const guards = this.guards; + if (guards.has(element) || mode === "fromView") { + return; + } + DOM.queueUpdate(() => { + guards.add(element); + const latestValue = element[this.fieldName]; + switch (mode) { + case "reflect": + const converter = this.converter; + DOM.setAttribute(element, this.attribute, converter !== void 0 ? converter.toView(latestValue) : latestValue); + break; + case "boolean": + DOM.setBooleanAttribute(element, this.attribute, latestValue); + break; + } + guards.delete(element); + }); + } + /** + * Collects all attribute definitions associated with the owner. + * @param Owner - The class constructor to collect attribute for. + * @param attributeLists - Any existing attributes to collect and merge with those associated with the owner. + * @internal + */ + static collect(Owner, ...attributeLists) { + const attributes = []; + attributeLists.push(AttributeConfiguration.locate(Owner)); + for (let i = 0, ii = attributeLists.length; i < ii; ++i) { + const list = attributeLists[i]; + if (list === void 0) { + continue; + } + for (let j = 0, jj = list.length; j < jj; ++j) { + const config = list[j]; + if (typeof config === "string") { + attributes.push(new _AttributeDefinition(Owner, config)); + } else { + attributes.push(new _AttributeDefinition(Owner, config.property, config.attribute, config.mode, config.converter)); + } + } + } + return attributes; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js + var defaultShadowOptions, defaultElementOptions, fastRegistry, FASTElementDefinition; + var init_fast_definitions = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js"() { + init_platform(); + init_observable(); + init_element_styles(); + init_attributes(); + defaultShadowOptions = { mode: "open" }; + defaultElementOptions = {}; + fastRegistry = FAST.getById(4, () => { + const typeToDefinition = /* @__PURE__ */ new Map(); + return Object.freeze({ + register(definition) { + if (typeToDefinition.has(definition.type)) { + return false; + } + typeToDefinition.set(definition.type, definition); + return true; + }, + getByType(key) { + return typeToDefinition.get(key); + } + }); + }); + FASTElementDefinition = class { + /** + * Creates an instance of FASTElementDefinition. + * @param type - The type this definition is being created for. + * @param nameOrConfig - The name of the element to define or a config object + * that describes the element to define. + */ + constructor(type, nameOrConfig = type.definition) { + if (typeof nameOrConfig === "string") { + nameOrConfig = { name: nameOrConfig }; + } + this.type = type; + this.name = nameOrConfig.name; + this.template = nameOrConfig.template; + const attributes = AttributeDefinition.collect(type, nameOrConfig.attributes); + const observedAttributes = new Array(attributes.length); + const propertyLookup = {}; + const attributeLookup = {}; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const current = attributes[i]; + observedAttributes[i] = current.attribute; + propertyLookup[current.name] = current; + attributeLookup[current.attribute] = current; + } + this.attributes = attributes; + this.observedAttributes = observedAttributes; + this.propertyLookup = propertyLookup; + this.attributeLookup = attributeLookup; + this.shadowOptions = nameOrConfig.shadowOptions === void 0 ? defaultShadowOptions : nameOrConfig.shadowOptions === null ? void 0 : Object.assign(Object.assign({}, defaultShadowOptions), nameOrConfig.shadowOptions); + this.elementOptions = nameOrConfig.elementOptions === void 0 ? defaultElementOptions : Object.assign(Object.assign({}, defaultElementOptions), nameOrConfig.elementOptions); + this.styles = nameOrConfig.styles === void 0 ? void 0 : Array.isArray(nameOrConfig.styles) ? ElementStyles.create(nameOrConfig.styles) : nameOrConfig.styles instanceof ElementStyles ? nameOrConfig.styles : ElementStyles.create([nameOrConfig.styles]); + } + /** + * Indicates if this element has been defined in at least one registry. + */ + get isDefined() { + return !!fastRegistry.getByType(this.type); + } + /** + * Defines a custom element based on this definition. + * @param registry - The element registry to define the element in. + */ + define(registry = customElements) { + const type = this.type; + if (fastRegistry.register(this)) { + const attributes = this.attributes; + const proto = type.prototype; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + Observable.defineProperty(proto, attributes[i]); + } + Reflect.defineProperty(type, "observedAttributes", { + value: this.observedAttributes, + enumerable: true + }); + } + if (!registry.get(this.name)) { + registry.define(this.name, type, this.elementOptions); + } + return this; + } + }; + FASTElementDefinition.forType = fastRegistry.getByType; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/controller.js + function getShadowRoot(element) { + return element.shadowRoot || shadowRoots.get(element) || null; + } + var shadowRoots, defaultEventOptions, Controller; + var init_controller = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/controller.js"() { + init_dom(); + init_notifier(); + init_observable(); + init_fast_definitions(); + shadowRoots = /* @__PURE__ */ new WeakMap(); + defaultEventOptions = { + bubbles: true, + composed: true, + cancelable: true + }; + Controller = class _Controller extends PropertyChangeNotifier { + /** + * Creates a Controller to control the specified element. + * @param element - The element to be controlled by this controller. + * @param definition - The element definition metadata that instructs this + * controller in how to handle rendering and other platform integrations. + * @internal + */ + constructor(element, definition) { + super(element); + this.boundObservables = null; + this.behaviors = null; + this.needsInitialization = true; + this._template = null; + this._styles = null; + this._isConnected = false; + this.$fastController = this; + this.view = null; + this.element = element; + this.definition = definition; + const shadowOptions = definition.shadowOptions; + if (shadowOptions !== void 0) { + const shadowRoot = element.attachShadow(shadowOptions); + if (shadowOptions.mode === "closed") { + shadowRoots.set(element, shadowRoot); + } + } + const accessors = Observable.getAccessors(element); + if (accessors.length > 0) { + const boundObservables = this.boundObservables = /* @__PURE__ */ Object.create(null); + for (let i = 0, ii = accessors.length; i < ii; ++i) { + const propertyName = accessors[i].name; + const value = element[propertyName]; + if (value !== void 0) { + delete element[propertyName]; + boundObservables[propertyName] = value; + } + } + } + } + /** + * Indicates whether or not the custom element has been + * connected to the document. + */ + get isConnected() { + Observable.track(this, "isConnected"); + return this._isConnected; + } + setIsConnected(value) { + this._isConnected = value; + Observable.notify(this, "isConnected"); + } + /** + * Gets/sets the template used to render the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get template() { + return this._template; + } + set template(value) { + if (this._template === value) { + return; + } + this._template = value; + if (!this.needsInitialization) { + this.renderTemplate(value); + } + } + /** + * Gets/sets the primary styles used for the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get styles() { + return this._styles; + } + set styles(value) { + if (this._styles === value) { + return; + } + if (this._styles !== null) { + this.removeStyles(this._styles); + } + this._styles = value; + if (!this.needsInitialization && value !== null) { + this.addStyles(value); + } + } + /** + * Adds styles to this element. Providing an HTMLStyleElement will attach the element instance to the shadowRoot. + * @param styles - The styles to add. + */ + addStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.append(styles); + } else if (!styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.addStylesTo(target); + if (sourceBehaviors !== null) { + this.addBehaviors(sourceBehaviors); + } + } + } + /** + * Removes styles from this element. Providing an HTMLStyleElement will detach the element instance from the shadowRoot. + * @param styles - the styles to remove. + */ + removeStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.removeChild(styles); + } else if (styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.removeStylesFrom(target); + if (sourceBehaviors !== null) { + this.removeBehaviors(sourceBehaviors); + } + } + } + /** + * Adds behaviors to this element. + * @param behaviors - The behaviors to add. + */ + addBehaviors(behaviors) { + const targetBehaviors = this.behaviors || (this.behaviors = /* @__PURE__ */ new Map()); + const length = behaviors.length; + const behaviorsToBind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + targetBehaviors.set(behavior, targetBehaviors.get(behavior) + 1); + } else { + targetBehaviors.set(behavior, 1); + behaviorsToBind.push(behavior); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToBind.length; ++i) { + behaviorsToBind[i].bind(element, defaultExecutionContext); + } + } + } + /** + * Removes behaviors from this element. + * @param behaviors - The behaviors to remove. + * @param force - Forces unbinding of behaviors. + */ + removeBehaviors(behaviors, force = false) { + const targetBehaviors = this.behaviors; + if (targetBehaviors === null) { + return; + } + const length = behaviors.length; + const behaviorsToUnbind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + const count = targetBehaviors.get(behavior) - 1; + count === 0 || force ? targetBehaviors.delete(behavior) && behaviorsToUnbind.push(behavior) : targetBehaviors.set(behavior, count); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToUnbind.length; ++i) { + behaviorsToUnbind[i].unbind(element); + } + } + } + /** + * Runs connected lifecycle behavior on the associated element. + */ + onConnectedCallback() { + if (this._isConnected) { + return; + } + const element = this.element; + if (this.needsInitialization) { + this.finishInitialization(); + } else if (this.view !== null) { + this.view.bind(element, defaultExecutionContext); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + for (const [behavior] of behaviors) { + behavior.bind(element, defaultExecutionContext); + } + } + this.setIsConnected(true); + } + /** + * Runs disconnected lifecycle behavior on the associated element. + */ + onDisconnectedCallback() { + if (!this._isConnected) { + return; + } + this.setIsConnected(false); + const view = this.view; + if (view !== null) { + view.unbind(); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + const element = this.element; + for (const [behavior] of behaviors) { + behavior.unbind(element); + } + } + } + /** + * Runs the attribute changed callback for the associated element. + * @param name - The name of the attribute that changed. + * @param oldValue - The previous value of the attribute. + * @param newValue - The new value of the attribute. + */ + onAttributeChangedCallback(name, oldValue, newValue) { + const attrDef = this.definition.attributeLookup[name]; + if (attrDef !== void 0) { + attrDef.onAttributeChangedCallback(this.element, newValue); + } + } + /** + * Emits a custom HTML event. + * @param type - The type name of the event. + * @param detail - The event detail object to send with the event. + * @param options - The event options. By default bubbles and composed. + * @remarks + * Only emits events if connected. + */ + emit(type, detail, options) { + if (this._isConnected) { + return this.element.dispatchEvent(new CustomEvent(type, Object.assign(Object.assign({ detail }, defaultEventOptions), options))); + } + return false; + } + finishInitialization() { + const element = this.element; + const boundObservables = this.boundObservables; + if (boundObservables !== null) { + const propertyNames = Object.keys(boundObservables); + for (let i = 0, ii = propertyNames.length; i < ii; ++i) { + const propertyName = propertyNames[i]; + element[propertyName] = boundObservables[propertyName]; + } + this.boundObservables = null; + } + const definition = this.definition; + if (this._template === null) { + if (this.element.resolveTemplate) { + this._template = this.element.resolveTemplate(); + } else if (definition.template) { + this._template = definition.template || null; + } + } + if (this._template !== null) { + this.renderTemplate(this._template); + } + if (this._styles === null) { + if (this.element.resolveStyles) { + this._styles = this.element.resolveStyles(); + } else if (definition.styles) { + this._styles = definition.styles || null; + } + } + if (this._styles !== null) { + this.addStyles(this._styles); + } + this.needsInitialization = false; + } + renderTemplate(template) { + const element = this.element; + const host = getShadowRoot(element) || element; + if (this.view !== null) { + this.view.dispose(); + this.view = null; + } else if (!this.needsInitialization) { + DOM.removeChildNodes(host); + } + if (template) { + this.view = template.render(element, host, element); + } + } + /** + * Locates or creates a controller for the specified element. + * @param element - The element to return the controller for. + * @remarks + * The specified element must have a {@link FASTElementDefinition} + * registered either through the use of the {@link customElement} + * decorator or a call to `FASTElement.define`. + */ + static forCustomElement(element) { + const controller = element.$fastController; + if (controller !== void 0) { + return controller; + } + const definition = FASTElementDefinition.forType(element.constructor); + if (definition === void 0) { + throw new Error("Missing FASTElement definition."); + } + return element.$fastController = new _Controller(element, definition); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js + function createFASTElement(BaseType) { + return class extends BaseType { + constructor() { + super(); + Controller.forCustomElement(this); + } + $emit(type, detail, options) { + return this.$fastController.emit(type, detail, options); + } + connectedCallback() { + this.$fastController.onConnectedCallback(); + } + disconnectedCallback() { + this.$fastController.onDisconnectedCallback(); + } + attributeChangedCallback(name, oldValue, newValue) { + this.$fastController.onAttributeChangedCallback(name, oldValue, newValue); + } + }; + } + var FASTElement; + var init_fast_element = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js"() { + init_controller(); + init_fast_definitions(); + FASTElement = Object.assign(createFASTElement(HTMLElement), { + /** + * Creates a new FASTElement base class inherited from the + * provided base type. + * @param BaseType - The base element type to inherit from. + */ + from(BaseType) { + return createFASTElement(BaseType); + }, + /** + * Defines a platform custom element based on the provided type and definition. + * @param type - The custom element type to define. + * @param nameOrDef - The name of the element to define or a definition object + * that describes the element to define. + */ + define(type, nameOrDef) { + return new FASTElementDefinition(type, nameOrDef).define().type; + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js + var CSSDirective; + var init_css_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js"() { + CSSDirective = class { + /** + * Creates a CSS fragment to interpolate into the CSS document. + * @returns - the string to interpolate into CSS + */ + createCSS() { + return ""; + } + /** + * Creates a behavior to bind to the host element. + * @returns - the behavior to bind to the host element, or undefined. + */ + createBehavior() { + return void 0; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css.js + function collectStyles(strings, values) { + const styles = []; + let cssString = ""; + const behaviors = []; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + cssString += strings[i]; + let value = values[i]; + if (value instanceof CSSDirective) { + const behavior = value.createBehavior(); + value = value.createCSS(); + if (behavior) { + behaviors.push(behavior); + } + } + if (value instanceof ElementStyles || value instanceof CSSStyleSheet) { + if (cssString.trim() !== "") { + styles.push(cssString); + cssString = ""; + } + styles.push(value); + } else { + cssString += value; + } + } + cssString += strings[strings.length - 1]; + if (cssString.trim() !== "") { + styles.push(cssString); + } + return { + styles, + behaviors + }; + } + function css(strings, ...values) { + const { styles, behaviors } = collectStyles(strings, values); + const elementStyles = ElementStyles.create(styles); + if (behaviors.length) { + elementStyles.withBehaviors(...behaviors); + } + return elementStyles; + } + var init_css = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css.js"() { + init_css_directive(); + init_element_styles(); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js + function newSplice(index, removed, addedCount) { + return { + index, + removed, + addedCount + }; + } + function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) { + const rowCount = oldEnd - oldStart + 1; + const columnCount = currentEnd - currentStart + 1; + const distances = new Array(rowCount); + let north; + let west; + for (let i = 0; i < rowCount; ++i) { + distances[i] = new Array(columnCount); + distances[i][0] = i; + } + for (let j = 0; j < columnCount; ++j) { + distances[0][j] = j; + } + for (let i = 1; i < rowCount; ++i) { + for (let j = 1; j < columnCount; ++j) { + if (current[currentStart + j - 1] === old[oldStart + i - 1]) { + distances[i][j] = distances[i - 1][j - 1]; + } else { + north = distances[i - 1][j] + 1; + west = distances[i][j - 1] + 1; + distances[i][j] = north < west ? north : west; + } + } + } + return distances; + } + function spliceOperationsFromEditDistances(distances) { + let i = distances.length - 1; + let j = distances[0].length - 1; + let current = distances[i][j]; + const edits = []; + while (i > 0 || j > 0) { + if (i === 0) { + edits.push(EDIT_ADD); + j--; + continue; + } + if (j === 0) { + edits.push(EDIT_DELETE); + i--; + continue; + } + const northWest = distances[i - 1][j - 1]; + const west = distances[i - 1][j]; + const north = distances[i][j - 1]; + let min; + if (west < north) { + min = west < northWest ? west : northWest; + } else { + min = north < northWest ? north : northWest; + } + if (min === northWest) { + if (northWest === current) { + edits.push(EDIT_LEAVE); + } else { + edits.push(EDIT_UPDATE); + current = northWest; + } + i--; + j--; + } else if (min === west) { + edits.push(EDIT_DELETE); + i--; + current = west; + } else { + edits.push(EDIT_ADD); + j--; + current = north; + } + } + edits.reverse(); + return edits; + } + function sharedPrefix(current, old, searchLength) { + for (let i = 0; i < searchLength; ++i) { + if (current[i] !== old[i]) { + return i; + } + } + return searchLength; + } + function sharedSuffix(current, old, searchLength) { + let index1 = current.length; + let index2 = old.length; + let count = 0; + while (count < searchLength && current[--index1] === old[--index2]) { + count++; + } + return count; + } + function intersect(start1, end1, start2, end2) { + if (end1 < start2 || end2 < start1) { + return -1; + } + if (end1 === start2 || end2 === start1) { + return 0; + } + if (start1 < start2) { + if (end1 < end2) { + return end1 - start2; + } + return end2 - start2; + } + if (end2 < end1) { + return end2 - start1; + } + return end1 - start1; + } + function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) { + let prefixCount = 0; + let suffixCount = 0; + const minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart); + if (currentStart === 0 && oldStart === 0) { + prefixCount = sharedPrefix(current, old, minLength); + } + if (currentEnd === current.length && oldEnd === old.length) { + suffixCount = sharedSuffix(current, old, minLength - prefixCount); + } + currentStart += prefixCount; + oldStart += prefixCount; + currentEnd -= suffixCount; + oldEnd -= suffixCount; + if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) { + return emptyArray; + } + if (currentStart === currentEnd) { + const splice2 = newSplice(currentStart, [], 0); + while (oldStart < oldEnd) { + splice2.removed.push(old[oldStart++]); + } + return [splice2]; + } else if (oldStart === oldEnd) { + return [newSplice(currentStart, [], currentEnd - currentStart)]; + } + const ops = spliceOperationsFromEditDistances(calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd)); + const splices = []; + let splice = void 0; + let index = currentStart; + let oldIndex = oldStart; + for (let i = 0; i < ops.length; ++i) { + switch (ops[i]) { + case EDIT_LEAVE: + if (splice !== void 0) { + splices.push(splice); + splice = void 0; + } + index++; + oldIndex++; + break; + case EDIT_UPDATE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + case EDIT_ADD: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + break; + case EDIT_DELETE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + } + } + if (splice !== void 0) { + splices.push(splice); + } + return splices; + } + function mergeSplice(splices, index, removed, addedCount) { + const splice = newSplice(index, removed, addedCount); + let inserted = false; + let insertionOffset = 0; + for (let i = 0; i < splices.length; i++) { + const current = splices[i]; + current.index += insertionOffset; + if (inserted) { + continue; + } + const intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount); + if (intersectCount >= 0) { + splices.splice(i, 1); + i--; + insertionOffset -= current.addedCount - current.removed.length; + splice.addedCount += current.addedCount - intersectCount; + const deleteCount = splice.removed.length + current.removed.length - intersectCount; + if (!splice.addedCount && !deleteCount) { + inserted = true; + } else { + let currentRemoved = current.removed; + if (splice.index < current.index) { + const prepend = splice.removed.slice(0, current.index - splice.index); + $push.apply(prepend, currentRemoved); + currentRemoved = prepend; + } + if (splice.index + splice.removed.length > current.index + current.addedCount) { + const append = splice.removed.slice(current.index + current.addedCount - splice.index); + $push.apply(currentRemoved, append); + } + splice.removed = currentRemoved; + if (current.index < splice.index) { + splice.index = current.index; + } + } + } else if (splice.index < current.index) { + inserted = true; + splices.splice(i, 0, splice); + i++; + const offset = splice.addedCount - splice.removed.length; + current.index += offset; + insertionOffset += offset; + } + } + if (!inserted) { + splices.push(splice); + } + } + function createInitialSplices(changeRecords) { + const splices = []; + for (let i = 0, ii = changeRecords.length; i < ii; i++) { + const record = changeRecords[i]; + mergeSplice(splices, record.index, record.removed, record.addedCount); + } + return splices; + } + function projectArraySplices(array, changeRecords) { + let splices = []; + const initialSplices = createInitialSplices(changeRecords); + for (let i = 0, ii = initialSplices.length; i < ii; ++i) { + const splice = initialSplices[i]; + if (splice.addedCount === 1 && splice.removed.length === 1) { + if (splice.removed[0] !== array[splice.index]) { + splices.push(splice); + } + continue; + } + splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length)); + } + return splices; + } + var EDIT_LEAVE, EDIT_UPDATE, EDIT_ADD, EDIT_DELETE, $push; + var init_array_change_records = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js"() { + init_platform(); + EDIT_LEAVE = 0; + EDIT_UPDATE = 1; + EDIT_ADD = 2; + EDIT_DELETE = 3; + $push = Array.prototype.push; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js + function adjustIndex(changeRecord, array) { + let index = changeRecord.index; + const arrayLength = array.length; + if (index > arrayLength) { + index = arrayLength - changeRecord.addedCount; + } else if (index < 0) { + index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount; + } + if (index < 0) { + index = 0; + } + changeRecord.index = index; + return changeRecord; + } + function enableArrayObservation() { + if (arrayObservationEnabled) { + return; + } + arrayObservationEnabled = true; + Observable.setArrayObserverFactory((collection) => { + return new ArrayObserver(collection); + }); + const proto = Array.prototype; + if (proto.$fastPatch) { + return; + } + Reflect.defineProperty(proto, "$fastPatch", { + value: 1, + enumerable: false + }); + const pop = proto.pop; + const push = proto.push; + const reverse = proto.reverse; + const shift = proto.shift; + const sort = proto.sort; + const splice = proto.splice; + const unshift = proto.unshift; + proto.pop = function() { + const notEmpty = this.length > 0; + const methodCallResult = pop.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(this.length, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.push = function() { + const methodCallResult = push.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(this.length - arguments.length, [], arguments.length), this)); + } + return methodCallResult; + }; + proto.reverse = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = reverse.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.shift = function() { + const notEmpty = this.length > 0; + const methodCallResult = shift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(0, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.sort = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = sort.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.splice = function() { + const methodCallResult = splice.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(+arguments[0], methodCallResult, arguments.length > 2 ? arguments.length - 2 : 0), this)); + } + return methodCallResult; + }; + proto.unshift = function() { + const methodCallResult = unshift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(0, [], arguments.length), this)); + } + return methodCallResult; + }; + } + var arrayObservationEnabled, ArrayObserver; + var init_array_observer = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js"() { + init_dom(); + init_array_change_records(); + init_notifier(); + init_observable(); + arrayObservationEnabled = false; + ArrayObserver = class extends SubscriberSet { + constructor(source) { + super(source); + this.oldCollection = void 0; + this.splices = void 0; + this.needsQueue = true; + this.call = this.flush; + Reflect.defineProperty(source, "$fastController", { + value: this, + enumerable: false + }); + } + subscribe(subscriber) { + this.flush(); + super.subscribe(subscriber); + } + addSplice(splice) { + if (this.splices === void 0) { + this.splices = [splice]; + } else { + this.splices.push(splice); + } + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + reset(oldCollection) { + this.oldCollection = oldCollection; + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + flush() { + const splices = this.splices; + const oldCollection = this.oldCollection; + if (splices === void 0 && oldCollection === void 0) { + return; + } + this.needsQueue = true; + this.splices = void 0; + this.oldCollection = void 0; + const finalSplices = oldCollection === void 0 ? projectArraySplices(this.source, splices) : calcSplices(this.source, 0, this.source.length, oldCollection, 0, oldCollection.length); + this.notify(finalSplices); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/ref.js + function ref(propertyName) { + return new AttachedBehaviorHTMLDirective("fast-ref", RefBehavior, propertyName); + } + var RefBehavior; + var init_ref = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/ref.js"() { + init_html_directive(); + RefBehavior = class { + /** + * Creates an instance of RefBehavior. + * @param target - The element to reference. + * @param propertyName - The name of the property to assign the reference to. + */ + constructor(target, propertyName) { + this.target = target; + this.propertyName = propertyName; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + source[this.propertyName] = this.target; + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + /* eslint-disable-next-line @typescript-eslint/no-empty-function */ + unbind() { + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/interfaces.js + var isFunction; + var init_interfaces = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/interfaces.js"() { + isFunction = (object) => typeof object === "function"; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/when.js + function normalizeBinding(value) { + return value === void 0 ? noTemplate : isFunction(value) ? value : () => value; + } + function when(binding, templateOrTemplateBinding, elseTemplateOrTemplateBinding) { + const dataBinding = isFunction(binding) ? binding : () => binding; + const templateBinding = normalizeBinding(templateOrTemplateBinding); + const elseBinding = normalizeBinding(elseTemplateOrTemplateBinding); + return (source, context) => dataBinding(source, context) ? templateBinding(source, context) : elseBinding(source, context); + } + var noTemplate; + var init_when = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/when.js"() { + init_interfaces(); + noTemplate = () => null; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js + function bindWithoutPositioning(view, items, index, context) { + view.bind(items[index], context); + } + function bindWithPositioning(view, items, index, context) { + const childContext = Object.create(context); + childContext.index = index; + childContext.length = items.length; + view.bind(items[index], childContext); + } + var defaultRepeatOptions, RepeatBehavior, RepeatDirective; + var init_repeat = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js"() { + init_dom(); + init_observable(); + init_array_observer(); + init_platform(); + init_html_directive(); + init_view(); + defaultRepeatOptions = Object.freeze({ + positioning: false, + recycle: true + }); + RepeatBehavior = class { + /** + * Creates an instance of RepeatBehavior. + * @param location - The location in the DOM to render the repeat. + * @param itemsBinding - The array to render. + * @param isItemsBindingVolatile - Indicates whether the items binding has volatile dependencies. + * @param templateBinding - The template to render for each item. + * @param isTemplateBindingVolatile - Indicates whether the template binding has volatile dependencies. + * @param options - Options used to turn on special repeat features. + */ + constructor(location, itemsBinding, isItemsBindingVolatile, templateBinding, isTemplateBindingVolatile, options) { + this.location = location; + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.source = null; + this.views = []; + this.items = null; + this.itemsObserver = null; + this.originalContext = void 0; + this.childContext = void 0; + this.bindView = bindWithoutPositioning; + this.itemsBindingObserver = Observable.binding(itemsBinding, this, isItemsBindingVolatile); + this.templateBindingObserver = Observable.binding(templateBinding, this, isTemplateBindingVolatile); + if (options.positioning) { + this.bindView = bindWithPositioning; + } + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source, context) { + this.source = source; + this.originalContext = context; + this.childContext = Object.create(context); + this.childContext.parent = source; + this.childContext.parentContext = this.originalContext; + this.items = this.itemsBindingObserver.observe(source, this.originalContext); + this.template = this.templateBindingObserver.observe(source, this.originalContext); + this.observeItems(true); + this.refreshAllViews(); + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.source = null; + this.items = null; + if (this.itemsObserver !== null) { + this.itemsObserver.unsubscribe(this); + } + this.unbindAllViews(); + this.itemsBindingObserver.disconnect(); + this.templateBindingObserver.disconnect(); + } + /** @internal */ + handleChange(source, args) { + if (source === this.itemsBinding) { + this.items = this.itemsBindingObserver.observe(this.source, this.originalContext); + this.observeItems(); + this.refreshAllViews(); + } else if (source === this.templateBinding) { + this.template = this.templateBindingObserver.observe(this.source, this.originalContext); + this.refreshAllViews(true); + } else { + this.updateViews(args); + } + } + observeItems(force = false) { + if (!this.items) { + this.items = emptyArray; + return; + } + const oldObserver = this.itemsObserver; + const newObserver = this.itemsObserver = Observable.getNotifier(this.items); + const hasNewObserver = oldObserver !== newObserver; + if (hasNewObserver && oldObserver !== null) { + oldObserver.unsubscribe(this); + } + if (hasNewObserver || force) { + newObserver.subscribe(this); + } + } + updateViews(splices) { + const childContext = this.childContext; + const views = this.views; + const bindView = this.bindView; + const items = this.items; + const template = this.template; + const recycle = this.options.recycle; + const leftoverViews = []; + let leftoverIndex = 0; + let availableViews = 0; + for (let i = 0, ii = splices.length; i < ii; ++i) { + const splice = splices[i]; + const removed = splice.removed; + let removeIndex = 0; + let addIndex = splice.index; + const end = addIndex + splice.addedCount; + const removedViews = views.splice(splice.index, removed.length); + const totalAvailableViews = availableViews = leftoverViews.length + removedViews.length; + for (; addIndex < end; ++addIndex) { + const neighbor = views[addIndex]; + const location = neighbor ? neighbor.firstChild : this.location; + let view; + if (recycle && availableViews > 0) { + if (removeIndex <= totalAvailableViews && removedViews.length > 0) { + view = removedViews[removeIndex]; + removeIndex++; + } else { + view = leftoverViews[leftoverIndex]; + leftoverIndex++; + } + availableViews--; + } else { + view = template.create(); + } + views.splice(addIndex, 0, view); + bindView(view, items, addIndex, childContext); + view.insertBefore(location); + } + if (removedViews[removeIndex]) { + leftoverViews.push(...removedViews.slice(removeIndex)); + } + } + for (let i = leftoverIndex, ii = leftoverViews.length; i < ii; ++i) { + leftoverViews[i].dispose(); + } + if (this.options.positioning) { + for (let i = 0, ii = views.length; i < ii; ++i) { + const currentContext = views[i].context; + currentContext.length = ii; + currentContext.index = i; + } + } + } + refreshAllViews(templateChanged = false) { + const items = this.items; + const childContext = this.childContext; + const template = this.template; + const location = this.location; + const bindView = this.bindView; + let itemsLength = items.length; + let views = this.views; + let viewsLength = views.length; + if (itemsLength === 0 || templateChanged || !this.options.recycle) { + HTMLView.disposeContiguousBatch(views); + viewsLength = 0; + } + if (viewsLength === 0) { + this.views = views = new Array(itemsLength); + for (let i = 0; i < itemsLength; ++i) { + const view = template.create(); + bindView(view, items, i, childContext); + views[i] = view; + view.insertBefore(location); + } + } else { + let i = 0; + for (; i < itemsLength; ++i) { + if (i < viewsLength) { + const view = views[i]; + bindView(view, items, i, childContext); + } else { + const view = template.create(); + bindView(view, items, i, childContext); + views.push(view); + view.insertBefore(location); + } + } + const removed = views.splice(i, viewsLength - i); + for (i = 0, itemsLength = removed.length; i < itemsLength; ++i) { + removed[i].dispose(); + } + } + } + unbindAllViews() { + const views = this.views; + for (let i = 0, ii = views.length; i < ii; ++i) { + views[i].unbind(); + } + } + }; + RepeatDirective = class extends HTMLDirective { + /** + * Creates an instance of RepeatDirective. + * @param itemsBinding - The binding that provides the array to render. + * @param templateBinding - The template binding used to obtain a template to render for each item in the array. + * @param options - Options used to turn on special repeat features. + */ + constructor(itemsBinding, templateBinding, options) { + super(); + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.createPlaceholder = DOM.createBlockPlaceholder; + enableArrayObservation(); + this.isItemsBindingVolatile = Observable.isVolatileBinding(itemsBinding); + this.isTemplateBindingVolatile = Observable.isVolatileBinding(templateBinding); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + */ + createBehavior(target) { + return new RepeatBehavior(target, this.itemsBinding, this.isItemsBindingVolatile, this.templateBinding, this.isTemplateBindingVolatile, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js + function elements(selector) { + if (selector) { + return function(value, index, array) { + return value.nodeType === 1 && value.matches(selector); + }; + } + return function(value, index, array) { + return value.nodeType === 1; + }; + } + var NodeObservationBehavior; + var init_node_observation = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js"() { + init_observable(); + init_platform(); + NodeObservationBehavior = class { + /** + * Creates an instance of NodeObservationBehavior. + * @param target - The target to assign the nodes property on. + * @param options - The options to use in configuring node observation. + */ + constructor(target, options) { + this.target = target; + this.options = options; + this.source = null; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + const name = this.options.property; + this.shouldUpdate = Observable.getAccessors(source).some((x) => x.name === name); + this.source = source; + this.updateTarget(this.computeNodes()); + if (this.shouldUpdate) { + this.observe(); + } + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.updateTarget(emptyArray); + this.source = null; + if (this.shouldUpdate) { + this.disconnect(); + } + } + /** @internal */ + handleEvent() { + this.updateTarget(this.computeNodes()); + } + computeNodes() { + let nodes = this.getNodes(); + if (this.options.filter !== void 0) { + nodes = nodes.filter(this.options.filter); + } + return nodes; + } + updateTarget(value) { + this.source[this.options.property] = value; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js + function slotted(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { property: propertyOrOptions }; + } + return new AttachedBehaviorHTMLDirective("fast-slotted", SlottedBehavior, propertyOrOptions); + } + var SlottedBehavior; + var init_slotted = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js"() { + init_html_directive(); + init_node_observation(); + SlottedBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of SlottedBehavior. + * @param target - The slot element target to observe. + * @param options - The options to use when observing the slot. + */ + constructor(target, options) { + super(target, options); + } + /** + * Begins observation of the nodes. + */ + observe() { + this.target.addEventListener("slotchange", this); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.target.removeEventListener("slotchange", this); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + return this.target.assignedNodes(this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/children.js + function children(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { + property: propertyOrOptions + }; + } + return new AttachedBehaviorHTMLDirective("fast-children", ChildrenBehavior, propertyOrOptions); + } + var ChildrenBehavior; + var init_children = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/children.js"() { + init_html_directive(); + init_node_observation(); + ChildrenBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of ChildrenBehavior. + * @param target - The element target to observe children on. + * @param options - The options to use when observing the element children. + */ + constructor(target, options) { + super(target, options); + this.observer = null; + options.childList = true; + } + /** + * Begins observation of the nodes. + */ + observe() { + if (this.observer === null) { + this.observer = new MutationObserver(this.handleEvent.bind(this)); + } + this.observer.observe(this.target, this.options); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.observer.disconnect(); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + if ("subtree" in this.options) { + return Array.from(this.target.querySelectorAll(this.options.selector)); + } + return Array.from(this.target.childNodes); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/index.js + var init_esm = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/index.js"() { + init_platform(); + init_template(); + init_fast_element(); + init_fast_definitions(); + init_attributes(); + init_controller(); + init_compiler(); + init_element_styles(); + init_css(); + init_css_directive(); + init_view(); + init_observable(); + init_notifier(); + init_dom(); + init_binding(); + init_html_directive(); + init_ref(); + init_when(); + init_repeat(); + init_slotted(); + init_children(); + init_node_observation(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js + var StartEnd, endSlotTemplate, startSlotTemplate, endTemplate, startTemplate; + var init_start_end = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js"() { + init_esm(); + StartEnd = class { + handleStartContentChange() { + this.startContainer.classList.toggle("start", this.start.assignedNodes().length > 0); + } + handleEndContentChange() { + this.endContainer.classList.toggle("end", this.end.assignedNodes().length > 0); + } + }; + endSlotTemplate = (context, definition) => html` + definition.end ? "end" : void 0} + > + + ${definition.end || ""} + + +`; + startSlotTemplate = (context, definition) => html` + + + ${definition.start || ""} + + +`; + endTemplate = html` + + + +`; + startTemplate = html` + + + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js + var init_accordion_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js + function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es6 = __esm({ + "node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/di.js + function cloneArrayWithPossibleProps(source) { + const clone = source.slice(); + const keys = Object.keys(source); + const len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + clone[key] = source[key]; + } + } + return clone; + } + function getParamTypes(key) { + return (Type) => { + return Reflect.getOwnMetadata(key, Type); + }; + } + function createResolver(getter) { + return function(key) { + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor); + }; + return resolver; + }; + } + function createAllResolver(getter) { + return function(key, searchAncestors) { + searchAncestors = !!searchAncestors; + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor, searchAncestors); + }; + return resolver; + }; + } + function ignore(target, property, descriptor) { + DI.inject(ignore)(target, property, descriptor); + } + function createNewInstance(key, handler) { + return handler.getFactory(key).construct(handler); + } + function containerGetKey(d) { + return this.get(d); + } + function transformInstance(inst, transform) { + return transform(inst); + } + function isRegistry(obj) { + return typeof obj.register === "function"; + } + function isSelfRegistry(obj) { + return isRegistry(obj) && typeof obj.registerInRequestor === "boolean"; + } + function isRegisterInRequester(obj) { + return isSelfRegistry(obj) && obj.registerInRequestor; + } + function isClass(obj) { + return obj.prototype !== void 0; + } + function cacheCallbackResult(fun) { + return function(handler, requestor, resolver) { + if (cache.has(resolver)) { + return cache.get(resolver); + } + const t = fun(handler, requestor, resolver); + cache.set(resolver, t); + return t; + }; + } + function validateKey(key) { + if (key === null || key === void 0) { + throw new Error("key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?"); + } + } + function buildAllResponse(resolver, handler, requestor) { + if (resolver instanceof ResolverImpl && resolver.strategy === 4) { + const state = resolver.state; + let i = state.length; + const results = new Array(i); + while (i--) { + results[i] = state[i].resolve(handler, requestor); + } + return results; + } + return [resolver.resolve(handler, requestor)]; + } + function isObject(value) { + return typeof value === "object" && value !== null || typeof value === "function"; + } + function isArrayIndex(value) { + switch (typeof value) { + case "number": + return value >= 0 && (value | 0) === value; + case "string": { + const result = isNumericLookup[value]; + if (result !== void 0) { + return result; + } + const length = value.length; + if (length === 0) { + return isNumericLookup[value] = false; + } + let ch = 0; + for (let i = 0; i < length; ++i) { + ch = value.charCodeAt(i); + if (i === 0 && ch === 48 && length > 1 || ch < 48 || ch > 57) { + return isNumericLookup[value] = false; + } + } + return isNumericLookup[value] = true; + } + default: + return false; + } + } + var metadataByTarget, ResolverBuilder, DefaultResolver, ContainerConfiguration, dependencyLookup, rootDOMContainer, DI, Container, inject, defaultSingletonOptions, all, lazy, optional, newInstanceForScope, newInstanceOf, ResolverImpl, FactoryImpl, containerResolver, InstrinsicTypeNames, DILocateParentEventType, factories, ContainerImpl, cache, Registration, defaultFriendlyName, isNativeFunction, isNumericLookup; + var init_di = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/di.js"() { + init_esm(); + metadataByTarget = /* @__PURE__ */ new Map(); + if (!("metadata" in Reflect)) { + Reflect.metadata = function(key, value) { + return function(target) { + Reflect.defineMetadata(key, value, target); + }; + }; + Reflect.defineMetadata = function(key, value, target) { + let metadata = metadataByTarget.get(target); + if (metadata === void 0) { + metadataByTarget.set(target, metadata = /* @__PURE__ */ new Map()); + } + metadata.set(key, value); + }; + Reflect.getOwnMetadata = function(key, target) { + const metadata = metadataByTarget.get(target); + if (metadata !== void 0) { + return metadata.get(key); + } + return void 0; + }; + } + ResolverBuilder = class { + /** + * + * @param container - The container to create resolvers for. + * @param key - The key to register resolvers under. + */ + constructor(container, key) { + this.container = container; + this.key = key; + } + /** + * Creates a resolver for an existing object instance. + * @param value - The instance to resolve. + * @returns The resolver. + */ + instance(value) { + return this.registerResolver(0, value); + } + /** + * Creates a resolver that enforces a singleton lifetime. + * @param value - The type to create and cache the singleton for. + * @returns The resolver. + */ + singleton(value) { + return this.registerResolver(1, value); + } + /** + * Creates a resolver that creates a new instance for every dependency request. + * @param value - The type to create instances of. + * @returns - The resolver. + */ + transient(value) { + return this.registerResolver(2, value); + } + /** + * Creates a resolver that invokes a callback function for every dependency resolution + * request, allowing custom logic to return the dependency. + * @param value - The callback to call during resolution. + * @returns The resolver. + */ + callback(value) { + return this.registerResolver(3, value); + } + /** + * Creates a resolver that invokes a callback function the first time that a dependency + * resolution is requested. The returned value is then cached and provided for all + * subsequent requests. + * @param value - The callback to call during the first resolution. + * @returns The resolver. + */ + cachedCallback(value) { + return this.registerResolver(3, cacheCallbackResult(value)); + } + /** + * Aliases the current key to a different key. + * @param destinationKey - The key to point the alias to. + * @returns The resolver. + */ + aliasTo(destinationKey) { + return this.registerResolver(5, destinationKey); + } + registerResolver(strategy, state) { + const { container, key } = this; + this.container = this.key = void 0; + return container.registerResolver(key, new ResolverImpl(key, strategy, state)); + } + }; + DefaultResolver = Object.freeze({ + /** + * Disables auto-registration and throws for all un-registered dependencies. + * @param key - The key to create the resolver for. + */ + none(key) { + throw Error(`${key.toString()} not registered, did you forget to add @singleton()?`); + }, + /** + * Provides default singleton resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + singleton(key) { + return new ResolverImpl(key, 1, key); + }, + /** + * Provides default transient resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + transient(key) { + return new ResolverImpl(key, 2, key); + } + }); + ContainerConfiguration = Object.freeze({ + /** + * The default configuration used when creating a DOM-disconnected container. + * @remarks + * The default creates a root container, with no parent container. It does not handle + * owner requests and it uses singleton resolution behavior for auto-registration. + */ + default: Object.freeze({ + parentLocator: () => null, + responsibleForOwnerRequests: false, + defaultResolver: DefaultResolver.singleton + }) + }); + dependencyLookup = /* @__PURE__ */ new Map(); + rootDOMContainer = null; + DI = Object.freeze({ + /** + * Creates a new dependency injection container. + * @param config - The configuration for the container. + * @returns A newly created dependency injection container. + */ + createContainer(config) { + return new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config)); + }, + /** + * Finds the dependency injection container responsible for providing dependencies + * to the specified node. + * @param node - The node to find the responsible container for. + * @returns The container responsible for providing dependencies to the node. + * @remarks + * This will be the same as the parent container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findResponsibleContainer(node) { + const owned = node.$$container$$; + if (owned && owned.responsibleForOwnerRequests) { + return owned; + } + return DI.findParentContainer(node); + }, + /** + * Find the dependency injection container up the DOM tree from this node. + * @param node - The node to find the parent container for. + * @returns The parent container of this node. + * @remarks + * This will be the same as the responsible container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findParentContainer(node) { + const event = new CustomEvent(DILocateParentEventType, { + bubbles: true, + composed: true, + cancelable: true, + detail: { container: void 0 } + }); + node.dispatchEvent(event); + return event.detail.container || DI.getOrCreateDOMContainer(); + }, + /** + * Returns a dependency injection container if one is explicitly owned by the specified + * node. If one is not owned, then a new container is created and assigned to the node. + * @param node - The node to find or create the container for. + * @param config - The configuration for the container if one needs to be created. + * @returns The located or created container. + * @remarks + * This API does not search for a responsible or parent container. It looks only for a container + * directly defined on the specified node and creates one at that location if one does not + * already exist. + */ + getOrCreateDOMContainer(node, config) { + if (!node) { + return rootDOMContainer || (rootDOMContainer = new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: () => null + }))); + } + return node.$$container$$ || new ContainerImpl(node, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: DI.findParentContainer + })); + }, + /** + * Gets the "design:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getDesignParamtypes: getParamTypes("design:paramtypes"), + /** + * Gets the "di:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getAnnotationParamtypes: getParamTypes("di:paramtypes"), + /** + * + * @param Type - Gets the "di:paramtypes" metadata for the specified type. If none is found, + * an empty metadata array is created and added. + * @returns The metadata array. + */ + getOrCreateAnnotationParamTypes(Type) { + let annotationParamtypes = this.getAnnotationParamtypes(Type); + if (annotationParamtypes === void 0) { + Reflect.defineMetadata("di:paramtypes", annotationParamtypes = [], Type); + } + return annotationParamtypes; + }, + /** + * Gets the dependency keys representing what is needed to instantiate the specified type. + * @param Type - The type to get the dependencies for. + * @returns An array of dependency keys. + */ + getDependencies(Type) { + let dependencies = dependencyLookup.get(Type); + if (dependencies === void 0) { + const inject2 = Type.inject; + if (inject2 === void 0) { + const designParamtypes = DI.getDesignParamtypes(Type); + const annotationParamtypes = DI.getAnnotationParamtypes(Type); + if (designParamtypes === void 0) { + if (annotationParamtypes === void 0) { + const Proto = Object.getPrototypeOf(Type); + if (typeof Proto === "function" && Proto !== Function.prototype) { + dependencies = cloneArrayWithPossibleProps(DI.getDependencies(Proto)); + } else { + dependencies = []; + } + } else { + dependencies = cloneArrayWithPossibleProps(annotationParamtypes); + } + } else if (annotationParamtypes === void 0) { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + } else { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + let len = annotationParamtypes.length; + let auAnnotationParamtype; + for (let i = 0; i < len; ++i) { + auAnnotationParamtype = annotationParamtypes[i]; + if (auAnnotationParamtype !== void 0) { + dependencies[i] = auAnnotationParamtype; + } + } + const keys = Object.keys(annotationParamtypes); + len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + dependencies[key] = annotationParamtypes[key]; + } + } + } + } else { + dependencies = cloneArrayWithPossibleProps(inject2); + } + dependencyLookup.set(Type, dependencies); + } + return dependencies; + }, + /** + * Defines a property on a web component class. The value of this property will + * be resolved from the dependency injection container responsible for the element + * instance, based on where it is connected in the DOM. + * @param target - The target to define the property on. + * @param propertyName - The name of the property to define. + * @param key - The dependency injection key. + * @param respectConnection - Indicates whether or not to update the property value if the + * hosting component is disconnected and then re-connected at a different location in the DOM. + * @remarks + * The respectConnection option is only applicable to elements that descend from FASTElement. + */ + defineProperty(target, propertyName, key, respectConnection = false) { + const diPropertyKey = `$di_${propertyName}`; + Reflect.defineProperty(target, propertyName, { + get: function() { + let value = this[diPropertyKey]; + if (value === void 0) { + const container = this instanceof HTMLElement ? DI.findResponsibleContainer(this) : DI.getOrCreateDOMContainer(); + value = container.get(key); + this[diPropertyKey] = value; + if (respectConnection && this instanceof FASTElement) { + const notifier = this.$fastController; + const handleChange = () => { + const newContainer = DI.findResponsibleContainer(this); + const newValue = newContainer.get(key); + const oldValue = this[diPropertyKey]; + if (newValue !== oldValue) { + this[diPropertyKey] = value; + notifier.notify(propertyName); + } + }; + notifier.subscribe({ handleChange }, "isConnected"); + } + } + return value; + } + }); + }, + /** + * Creates a dependency injection key. + * @param nameConfigOrCallback - A friendly name for the key or a lambda that configures a + * default resolution for the dependency. + * @param configuror - If a friendly name was provided for the first parameter, then an optional + * lambda that configures a default resolution for the dependency can be provided second. + * @returns The created key. + * @remarks + * The created key can be used as a property decorator or constructor parameter decorator, + * in addition to its standard use in an inject array or through direct container APIs. + */ + createInterface(nameConfigOrCallback, configuror) { + const configure = typeof nameConfigOrCallback === "function" ? nameConfigOrCallback : configuror; + const friendlyName = typeof nameConfigOrCallback === "string" ? nameConfigOrCallback : nameConfigOrCallback && "friendlyName" in nameConfigOrCallback ? nameConfigOrCallback.friendlyName || defaultFriendlyName : defaultFriendlyName; + const respectConnection = typeof nameConfigOrCallback === "string" ? false : nameConfigOrCallback && "respectConnection" in nameConfigOrCallback ? nameConfigOrCallback.respectConnection || false : false; + const Interface = function(target, property, index) { + if (target == null || new.target !== void 0) { + throw new Error(`No registration for interface: '${Interface.friendlyName}'`); + } + if (property) { + DI.defineProperty(target, property, Interface, respectConnection); + } else { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + annotationParamtypes[index] = Interface; + } + }; + Interface.$isInterface = true; + Interface.friendlyName = friendlyName == null ? "(anonymous)" : friendlyName; + if (configure != null) { + Interface.register = function(container, key) { + return configure(new ResolverBuilder(container, key !== null && key !== void 0 ? key : Interface)); + }; + } + Interface.toString = function toString() { + return `InterfaceSymbol<${Interface.friendlyName}>`; + }; + return Interface; + }, + /** + * A decorator that specifies what to inject into its target. + * @param dependencies - The dependencies to inject. + * @returns The decorator to be applied to the target class. + * @remarks + * The decorator can be used to decorate a class, listing all of the classes dependencies. + * Or it can be used to decorate a constructor paramter, indicating what to inject for that + * parameter. + * Or it can be used for a web component property, indicating what that property should resolve to. + */ + inject(...dependencies) { + return function(target, key, descriptor) { + if (typeof descriptor === "number") { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + const dep = dependencies[0]; + if (dep !== void 0) { + annotationParamtypes[descriptor] = dep; + } + } else if (key) { + DI.defineProperty(target, key, dependencies[0]); + } else { + const annotationParamtypes = descriptor ? DI.getOrCreateAnnotationParamTypes(descriptor.value) : DI.getOrCreateAnnotationParamTypes(target); + let dep; + for (let i = 0; i < dependencies.length; ++i) { + dep = dependencies[i]; + if (dep !== void 0) { + annotationParamtypes[i] = dep; + } + } + } + }; + }, + /** + * Registers the `target` class as a transient dependency; each time the dependency is resolved + * a new instance will be created. + * + * @param target - The class / constructor function to register as transient. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.transient(Foo); + * ``` + * + * @example + * Inline declaration + * + * ```ts + * const Foo = DI.transient(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + transient(target) { + target.register = function register(container) { + const registration = Registration.transient(target, target); + return registration.register(container); + }; + target.registerInRequestor = false; + return target; + }, + /** + * Registers the `target` class as a singleton dependency; the class will only be created once. Each + * consecutive time the dependency is resolved, the same instance will be returned. + * + * @param target - The class / constructor function to register as a singleton. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.singleton(Foo); + * ``` + * + * @example + * Inline declaration + * ```ts + * const Foo = DI.singleton(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + singleton(target, options = defaultSingletonOptions) { + target.register = function register(container) { + const registration = Registration.singleton(target, target); + return registration.register(container); + }; + target.registerInRequestor = options.scoped; + return target; + } + }); + Container = DI.createInterface("Container"); + inject = DI.inject; + defaultSingletonOptions = { scoped: false }; + all = createAllResolver((key, handler, requestor, searchAncestors) => requestor.getAll(key, searchAncestors)); + lazy = createResolver((key, handler, requestor) => { + return () => requestor.get(key); + }); + optional = createResolver((key, handler, requestor) => { + if (requestor.has(key, true)) { + return requestor.get(key); + } else { + return void 0; + } + }); + ignore.$isResolver = true; + ignore.resolve = () => void 0; + newInstanceForScope = createResolver((key, handler, requestor) => { + const instance = createNewInstance(key, handler); + const resolver = new ResolverImpl(key, 0, instance); + requestor.registerResolver(key, resolver); + return instance; + }); + newInstanceOf = createResolver((key, handler, _requestor) => createNewInstance(key, handler)); + ResolverImpl = class { + constructor(key, strategy, state) { + this.key = key; + this.strategy = strategy; + this.state = state; + this.resolving = false; + } + get $isResolver() { + return true; + } + register(container) { + return container.registerResolver(this.key, this); + } + resolve(handler, requestor) { + switch (this.strategy) { + case 0: + return this.state; + case 1: { + if (this.resolving) { + throw new Error(`Cyclic dependency found: ${this.state.name}`); + } + this.resolving = true; + this.state = handler.getFactory(this.state).construct(requestor); + this.strategy = 0; + this.resolving = false; + return this.state; + } + case 2: { + const factory = handler.getFactory(this.state); + if (factory === null) { + throw new Error(`Resolver for ${String(this.key)} returned a null factory`); + } + return factory.construct(requestor); + } + case 3: + return this.state(handler, requestor, this); + case 4: + return this.state[0].resolve(handler, requestor); + case 5: + return requestor.get(this.state); + default: + throw new Error(`Invalid resolver strategy specified: ${this.strategy}.`); + } + } + getFactory(container) { + var _a, _b, _c; + switch (this.strategy) { + case 1: + case 2: + return container.getFactory(this.state); + case 5: + return (_c = (_b = (_a = container.getResolver(this.state)) === null || _a === void 0 ? void 0 : _a.getFactory) === null || _b === void 0 ? void 0 : _b.call(_a, container)) !== null && _c !== void 0 ? _c : null; + default: + return null; + } + } + }; + FactoryImpl = class { + constructor(Type, dependencies) { + this.Type = Type; + this.dependencies = dependencies; + this.transformers = null; + } + construct(container, dynamicDependencies) { + let instance; + if (dynamicDependencies === void 0) { + instance = new this.Type(...this.dependencies.map(containerGetKey, container)); + } else { + instance = new this.Type(...this.dependencies.map(containerGetKey, container), ...dynamicDependencies); + } + if (this.transformers == null) { + return instance; + } + return this.transformers.reduce(transformInstance, instance); + } + registerTransformer(transformer) { + (this.transformers || (this.transformers = [])).push(transformer); + } + }; + containerResolver = { + $isResolver: true, + resolve(handler, requestor) { + return requestor; + } + }; + InstrinsicTypeNames = /* @__PURE__ */ new Set([ + "Array", + "ArrayBuffer", + "Boolean", + "DataView", + "Date", + "Error", + "EvalError", + "Float32Array", + "Float64Array", + "Function", + "Int8Array", + "Int16Array", + "Int32Array", + "Map", + "Number", + "Object", + "Promise", + "RangeError", + "ReferenceError", + "RegExp", + "Set", + "SharedArrayBuffer", + "String", + "SyntaxError", + "TypeError", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "URIError", + "WeakMap", + "WeakSet" + ]); + DILocateParentEventType = "__DI_LOCATE_PARENT__"; + factories = /* @__PURE__ */ new Map(); + ContainerImpl = class _ContainerImpl { + constructor(owner, config) { + this.owner = owner; + this.config = config; + this._parent = void 0; + this.registerDepth = 0; + this.context = null; + if (owner !== null) { + owner.$$container$$ = this; + } + this.resolvers = /* @__PURE__ */ new Map(); + this.resolvers.set(Container, containerResolver); + if (owner instanceof Node) { + owner.addEventListener(DILocateParentEventType, (e) => { + if (e.composedPath()[0] !== this.owner) { + e.detail.container = this; + e.stopImmediatePropagation(); + } + }); + } + } + get parent() { + if (this._parent === void 0) { + this._parent = this.config.parentLocator(this.owner); + } + return this._parent; + } + get depth() { + return this.parent === null ? 0 : this.parent.depth + 1; + } + get responsibleForOwnerRequests() { + return this.config.responsibleForOwnerRequests; + } + registerWithContext(context, ...params) { + this.context = context; + this.register(...params); + this.context = null; + return this; + } + register(...params) { + if (++this.registerDepth === 100) { + throw new Error("Unable to autoregister dependency"); + } + let current; + let keys; + let value; + let j; + let jj; + const context = this.context; + for (let i = 0, ii = params.length; i < ii; ++i) { + current = params[i]; + if (!isObject(current)) { + continue; + } + if (isRegistry(current)) { + current.register(this, context); + } else if (isClass(current)) { + Registration.singleton(current, current).register(this); + } else { + keys = Object.keys(current); + j = 0; + jj = keys.length; + for (; j < jj; ++j) { + value = current[keys[j]]; + if (!isObject(value)) { + continue; + } + if (isRegistry(value)) { + value.register(this, context); + } else { + this.register(value); + } + } + } + } + --this.registerDepth; + return this; + } + registerResolver(key, resolver) { + validateKey(key); + const resolvers = this.resolvers; + const result = resolvers.get(key); + if (result == null) { + resolvers.set(key, resolver); + } else if (result instanceof ResolverImpl && result.strategy === 4) { + result.state.push(resolver); + } else { + resolvers.set(key, new ResolverImpl(key, 4, [result, resolver])); + } + return resolver; + } + registerTransformer(key, transformer) { + const resolver = this.getResolver(key); + if (resolver == null) { + return false; + } + if (resolver.getFactory) { + const factory = resolver.getFactory(this); + if (factory == null) { + return false; + } + factory.registerTransformer(transformer); + return true; + } + return false; + } + getResolver(key, autoRegister = true) { + validateKey(key); + if (key.resolve !== void 0) { + return key; + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + return autoRegister ? this.jitRegister(key, handler) : null; + } + current = current.parent; + } else { + return resolver; + } + } + return null; + } + has(key, searchAncestors = false) { + return this.resolvers.has(key) ? true : searchAncestors && this.parent != null ? this.parent.has(key, true) : false; + } + get(key) { + validateKey(key); + if (key.$isResolver) { + return key.resolve(this, this); + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + resolver = this.jitRegister(key, handler); + return resolver.resolve(current, this); + } + current = current.parent; + } else { + return resolver.resolve(current, this); + } + } + throw new Error(`Unable to resolve key: ${String(key)}`); + } + getAll(key, searchAncestors = false) { + validateKey(key); + const requestor = this; + let current = requestor; + let resolver; + if (searchAncestors) { + let resolutions = emptyArray; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver != null) { + resolutions = resolutions.concat( + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + buildAllResponse(resolver, current, requestor) + ); + } + current = current.parent; + } + return resolutions; + } else { + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + current = current.parent; + if (current == null) { + return emptyArray; + } + } else { + return buildAllResponse(resolver, current, requestor); + } + } + } + return emptyArray; + } + getFactory(Type) { + let factory = factories.get(Type); + if (factory === void 0) { + if (isNativeFunction(Type)) { + throw new Error(`${Type.name} is a native function and therefore cannot be safely constructed by DI. If this is intentional, please use a callback or cachedCallback resolver.`); + } + factories.set(Type, factory = new FactoryImpl(Type, DI.getDependencies(Type))); + } + return factory; + } + registerFactory(key, factory) { + factories.set(key, factory); + } + createChild(config) { + return new _ContainerImpl(null, Object.assign({}, this.config, config, { parentLocator: () => this })); + } + jitRegister(keyAsValue, handler) { + if (typeof keyAsValue !== "function") { + throw new Error(`Attempted to jitRegister something that is not a constructor: '${keyAsValue}'. Did you forget to register this dependency?`); + } + if (InstrinsicTypeNames.has(keyAsValue.name)) { + throw new Error(`Attempted to jitRegister an intrinsic type: ${keyAsValue.name}. Did you forget to add @inject(Key)`); + } + if (isRegistry(keyAsValue)) { + const registrationResolver = keyAsValue.register(handler); + if (!(registrationResolver instanceof Object) || registrationResolver.resolve == null) { + const newResolver = handler.resolvers.get(keyAsValue); + if (newResolver != void 0) { + return newResolver; + } + throw new Error("A valid resolver was not returned from the static register method"); + } + return registrationResolver; + } else if (keyAsValue.$isInterface) { + throw new Error(`Attempted to jitRegister an interface: ${keyAsValue.friendlyName}`); + } else { + const resolver = this.config.defaultResolver(keyAsValue, handler); + handler.resolvers.set(keyAsValue, resolver); + return resolver; + } + } + }; + cache = /* @__PURE__ */ new WeakMap(); + Registration = Object.freeze({ + /** + * Allows you to pass an instance. + * Every time you request this {@link Key} you will get this instance back. + * + * @example + * ``` + * Registration.instance(Foo, new Foo())); + * ``` + * + * @param key - The key to register the instance under. + * @param value - The instance to return when the key is requested. + */ + instance(key, value) { + return new ResolverImpl(key, 0, value); + }, + /** + * Creates an instance from the class. + * Every time you request this {@link Key} you will get the same one back. + * + * @example + * ``` + * Registration.singleton(Foo, Foo); + * ``` + * + * @param key - The key to register the singleton under. + * @param value - The class to instantiate as a singleton when first requested. + */ + singleton(key, value) { + return new ResolverImpl(key, 1, value); + }, + /** + * Creates an instance from a class. + * Every time you request this {@link Key} you will get a new instance. + * + * @example + * ``` + * Registration.instance(Foo, Foo); + * ``` + * + * @param key - The key to register the instance type under. + * @param value - The class to instantiate each time the key is requested. + */ + transient(key, value) { + return new ResolverImpl(key, 2, value); + }, + /** + * Delegates to a callback function to provide the dependency. + * Every time you request this {@link Key} the callback will be invoked to provide + * the dependency. + * + * @example + * ``` + * Registration.callback(Foo, () => new Foo()); + * Registration.callback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + */ + callback(key, callback) { + return new ResolverImpl(key, 3, callback); + }, + /** + * Delegates to a callback function to provide the dependency and then caches the + * dependency for future requests. + * + * @example + * ``` + * Registration.cachedCallback(Foo, () => new Foo()); + * Registration.cachedCallback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + * @remarks + * If you pass the same Registration to another container, the same cached value will be used. + * Should all references to the resolver returned be removed, the cache will expire. + */ + cachedCallback(key, callback) { + return new ResolverImpl(key, 3, cacheCallbackResult(callback)); + }, + /** + * Creates an alternate {@link Key} to retrieve an instance by. + * + * @example + * ``` + * Register.singleton(Foo, Foo) + * Register.aliasTo(Foo, MyFoos); + * + * container.getAll(MyFoos) // contains an instance of Foo + * ``` + * + * @param originalKey - The original key that has been registered. + * @param aliasKey - The alias to the original key. + */ + aliasTo(originalKey, aliasKey) { + return new ResolverImpl(aliasKey, 5, originalKey); + } + }); + defaultFriendlyName = "(anonymous)"; + isNativeFunction = /* @__PURE__ */ (function() { + const lookup = /* @__PURE__ */ new WeakMap(); + let isNative = false; + let sourceText = ""; + let i = 0; + return function(fn) { + isNative = lookup.get(fn); + if (isNative === void 0) { + sourceText = fn.toString(); + i = sourceText.length; + isNative = // 29 is the length of 'function () { [native code] }' which is the smallest length of a native function string + i >= 29 && // 100 seems to be a safe upper bound of the max length of a native function. In Chrome and FF it's 56, in Edge it's 61. + i <= 100 && // This whole heuristic *could* be tricked by a comment. Do we need to care about that? + sourceText.charCodeAt(i - 1) === 125 && // } + // TODO: the spec is a little vague about the precise constraints, so we do need to test this across various browsers to make sure just one whitespace is a safe assumption. + sourceText.charCodeAt(i - 2) <= 32 && // whitespace + sourceText.charCodeAt(i - 3) === 93 && // ] + sourceText.charCodeAt(i - 4) === 101 && // e + sourceText.charCodeAt(i - 5) === 100 && // d + sourceText.charCodeAt(i - 6) === 111 && // o + sourceText.charCodeAt(i - 7) === 99 && // c + sourceText.charCodeAt(i - 8) === 32 && // + sourceText.charCodeAt(i - 9) === 101 && // e + sourceText.charCodeAt(i - 10) === 118 && // v + sourceText.charCodeAt(i - 11) === 105 && // i + sourceText.charCodeAt(i - 12) === 116 && // t + sourceText.charCodeAt(i - 13) === 97 && // a + sourceText.charCodeAt(i - 14) === 110 && // n + sourceText.charCodeAt(i - 15) === 88; + lookup.set(fn, isNative); + } + return isNative; + }; + })(); + isNumericLookup = {}; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js + function presentationKeyFromTag(tagName) { + return `${tagName.toLowerCase()}:presentation`; + } + var presentationRegistry, ComponentPresentation, DefaultComponentPresentation; + var init_component_presentation = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js"() { + init_esm(); + init_di(); + presentationRegistry = /* @__PURE__ */ new Map(); + ComponentPresentation = Object.freeze({ + /** + * Defines a component presentation for an element. + * @param tagName - The element name to define the presentation for. + * @param presentation - The presentation that will be applied to matching elements. + * @param container - The dependency injection container to register the configuration in. + * @public + */ + define(tagName, presentation, container) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === void 0) { + presentationRegistry.set(key, presentation); + } else { + presentationRegistry.set(key, false); + } + container.register(Registration.instance(key, presentation)); + }, + /** + * Finds a component presentation for the specified element name, + * searching the DOM hierarchy starting from the provided element. + * @param tagName - The name of the element to locate the presentation for. + * @param element - The element to begin the search from. + * @returns The component presentation or null if none is found. + * @public + */ + forTag(tagName, element) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === false) { + const container = DI.findResponsibleContainer(element); + return container.get(key); + } + return existing || null; + } + }); + DefaultComponentPresentation = class { + /** + * Creates an instance of DefaultComponentPresentation. + * @param template - The template to apply to the element. + * @param styles - The styles to apply to the element. + * @public + */ + constructor(template, styles) { + this.template = template || null; + this.styles = styles === void 0 ? null : Array.isArray(styles) ? ElementStyles.create(styles) : styles instanceof ElementStyles ? styles : ElementStyles.create([styles]); + } + /** + * Applies the presentation details to the specified element. + * @param element - The element to apply the presentation details to. + * @public + */ + applyTo(element) { + const controller = element.$fastController; + if (controller.template === null) { + controller.template = this.template; + } + if (controller.styles === null) { + controller.styles = this.styles; + } + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js + function resolveOption(option, context, definition) { + if (typeof option === "function") { + return option(context, definition); + } + return option; + } + var FoundationElement, FoundationElementRegistry; + var init_foundation_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js"() { + init_tslib_es6(); + init_esm(); + init_component_presentation(); + FoundationElement = class _FoundationElement extends FASTElement { + constructor() { + super(...arguments); + this._presentation = void 0; + } + /** + * A property which resolves the ComponentPresentation instance + * for the current component. + * @public + */ + get $presentation() { + if (this._presentation === void 0) { + this._presentation = ComponentPresentation.forTag(this.tagName, this); + } + return this._presentation; + } + templateChanged() { + if (this.template !== void 0) { + this.$fastController.template = this.template; + } + } + stylesChanged() { + if (this.styles !== void 0) { + this.$fastController.styles = this.styles; + } + } + /** + * The connected callback for this FASTElement. + * @remarks + * This method is invoked by the platform whenever this FoundationElement + * becomes connected to the document. + * @public + */ + connectedCallback() { + if (this.$presentation !== null) { + this.$presentation.applyTo(this); + } + super.connectedCallback(); + } + /** + * Defines an element registry function with a set of element definition defaults. + * @param elementDefinition - The definition of the element to create the registry + * function for. + * @public + */ + static compose(elementDefinition) { + return (overrideDefinition = {}) => new FoundationElementRegistry(this === _FoundationElement ? class extends _FoundationElement { + } : this, elementDefinition, overrideDefinition); + } + }; + __decorate([ + observable + ], FoundationElement.prototype, "template", void 0); + __decorate([ + observable + ], FoundationElement.prototype, "styles", void 0); + FoundationElementRegistry = class { + constructor(type, elementDefinition, overrideDefinition) { + this.type = type; + this.elementDefinition = elementDefinition; + this.overrideDefinition = overrideDefinition; + this.definition = Object.assign(Object.assign({}, this.elementDefinition), this.overrideDefinition); + } + register(container, context) { + const definition = this.definition; + const overrideDefinition = this.overrideDefinition; + const prefix = definition.prefix || context.elementPrefix; + const name = `${prefix}-${definition.baseName}`; + context.tryDefineElement({ + name, + type: this.type, + baseClass: this.elementDefinition.baseClass, + callback: (x) => { + const presentation = new DefaultComponentPresentation(resolveOption(definition.template, x, definition), resolveOption(definition.styles, x, definition)); + x.definePresentation(presentation); + let shadowOptions = resolveOption(definition.shadowOptions, x, definition); + if (x.shadowRootMode) { + if (shadowOptions) { + if (!overrideDefinition.shadowOptions) { + shadowOptions.mode = x.shadowRootMode; + } + } else if (shadowOptions !== null) { + shadowOptions = { mode: x.shadowRootMode }; + } + } + x.defineElement({ + elementOptions: resolveOption(definition.elementOptions, x, definition), + shadowOptions, + attributes: resolveOption(definition.attributes, x, definition) + }); + } + }); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js + function applyMixins(derivedCtor, ...baseCtors) { + const derivedAttributes = AttributeConfiguration.locate(derivedCtor); + baseCtors.forEach((baseCtor) => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => { + if (name !== "constructor") { + Object.defineProperty( + derivedCtor.prototype, + name, + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + Object.getOwnPropertyDescriptor(baseCtor.prototype, name) + ); + } + }); + const baseAttributes = AttributeConfiguration.locate(baseCtor); + baseAttributes.forEach((x) => derivedAttributes.push(x)); + }); + } + var init_apply_mixins = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js"() { + init_esm(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js + var AccordionItem; + var init_accordion_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_start_end(); + init_apply_mixins(); + AccordionItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.headinglevel = 2; + this.expanded = false; + this.clickHandler = (e) => { + this.expanded = !this.expanded; + this.change(); + }; + this.change = () => { + this.$emit("change"); + }; + } + }; + __decorate([ + attr({ + attribute: "heading-level", + mode: "fromView", + converter: nullableNumberConverter + }) + ], AccordionItem.prototype, "headinglevel", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], AccordionItem.prototype, "expanded", void 0); + __decorate([ + attr + ], AccordionItem.prototype, "id", void 0); + applyMixins(AccordionItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js + var init_accordion_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js"() { + init_accordion_item_template(); + init_accordion_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js + var init_accordion_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/aria.js + var Orientation; + var init_aria = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/aria.js"() { + Orientation = { + horizontal: "horizontal", + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/array.js + function findLastIndex(array, predicate) { + let k = array.length; + while (k--) { + if (predicate(array[k], k, array)) { + return k; + } + } + return -1; + } + var init_array = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/array.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/class-names.js + var init_class_names = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/class-names.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-dom.js + function canUseDOM() { + return !!(typeof window !== "undefined" && window.document && window.document.createElement); + } + var init_can_use_dom = __esm({ + "node_modules/exenv-es6/dist/can-use-dom.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-event-listeners.js + var init_can_use_event_listeners = __esm({ + "node_modules/exenv-es6/dist/can-use-event-listeners.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-viewport.js + var init_can_use_viewport = __esm({ + "node_modules/exenv-es6/dist/can-use-viewport.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-workers.js + var init_can_use_workers = __esm({ + "node_modules/exenv-es6/dist/can-use-workers.js"() { + } + }); + + // node_modules/exenv-es6/dist/index.js + var init_dist = __esm({ + "node_modules/exenv-es6/dist/index.js"() { + init_can_use_dom(); + init_can_use_event_listeners(); + init_can_use_viewport(); + init_can_use_workers(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/dom.js + function isHTMLElement(...args) { + return args.every((arg) => arg instanceof HTMLElement); + } + function getDisplayedNodes(rootNode, selector) { + if (!rootNode || !selector || !isHTMLElement(rootNode)) { + return; + } + const nodes = Array.from(rootNode.querySelectorAll(selector)); + return nodes.filter((node) => node.offsetParent !== null); + } + function getNonce() { + const node = document.querySelector('meta[property="csp-nonce"]'); + if (node) { + return node.getAttribute("content"); + } else { + return null; + } + } + function canUseFocusVisible() { + if (typeof _canUseFocusVisible === "boolean") { + return _canUseFocusVisible; + } + if (!canUseDOM()) { + _canUseFocusVisible = false; + return _canUseFocusVisible; + } + const styleElement = document.createElement("style"); + const styleNonce = getNonce(); + if (styleNonce !== null) { + styleElement.setAttribute("nonce", styleNonce); + } + document.head.appendChild(styleElement); + try { + styleElement.sheet.insertRule("foo:focus-visible {color:inherit}", 0); + _canUseFocusVisible = true; + } catch (e) { + _canUseFocusVisible = false; + } finally { + document.head.removeChild(styleElement); + } + return _canUseFocusVisible; + } + var _canUseFocusVisible; + var init_dom2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/dom.js"() { + init_dist(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/events.js + var eventFocus, eventFocusIn, eventFocusOut, eventKeyDown, eventResize, eventScroll; + var init_events = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/events.js"() { + eventFocus = "focus"; + eventFocusIn = "focusin"; + eventFocusOut = "focusout"; + eventKeyDown = "keydown"; + eventResize = "resize"; + eventScroll = "scroll"; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/html.js + var init_html = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/html.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/key-codes.js + var KeyCodes, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnter, keyEscape, keyHome, keyEnd, keyFunction2, keyPageDown, keyPageUp, keySpace, keyTab, keyBackspace, keyDelete, ArrowKeys; + var init_key_codes = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/key-codes.js"() { + (function(KeyCodes2) { + KeyCodes2[KeyCodes2["alt"] = 18] = "alt"; + KeyCodes2[KeyCodes2["arrowDown"] = 40] = "arrowDown"; + KeyCodes2[KeyCodes2["arrowLeft"] = 37] = "arrowLeft"; + KeyCodes2[KeyCodes2["arrowRight"] = 39] = "arrowRight"; + KeyCodes2[KeyCodes2["arrowUp"] = 38] = "arrowUp"; + KeyCodes2[KeyCodes2["back"] = 8] = "back"; + KeyCodes2[KeyCodes2["backSlash"] = 220] = "backSlash"; + KeyCodes2[KeyCodes2["break"] = 19] = "break"; + KeyCodes2[KeyCodes2["capsLock"] = 20] = "capsLock"; + KeyCodes2[KeyCodes2["closeBracket"] = 221] = "closeBracket"; + KeyCodes2[KeyCodes2["colon"] = 186] = "colon"; + KeyCodes2[KeyCodes2["colon2"] = 59] = "colon2"; + KeyCodes2[KeyCodes2["comma"] = 188] = "comma"; + KeyCodes2[KeyCodes2["ctrl"] = 17] = "ctrl"; + KeyCodes2[KeyCodes2["delete"] = 46] = "delete"; + KeyCodes2[KeyCodes2["end"] = 35] = "end"; + KeyCodes2[KeyCodes2["enter"] = 13] = "enter"; + KeyCodes2[KeyCodes2["equals"] = 187] = "equals"; + KeyCodes2[KeyCodes2["equals2"] = 61] = "equals2"; + KeyCodes2[KeyCodes2["equals3"] = 107] = "equals3"; + KeyCodes2[KeyCodes2["escape"] = 27] = "escape"; + KeyCodes2[KeyCodes2["forwardSlash"] = 191] = "forwardSlash"; + KeyCodes2[KeyCodes2["function1"] = 112] = "function1"; + KeyCodes2[KeyCodes2["function10"] = 121] = "function10"; + KeyCodes2[KeyCodes2["function11"] = 122] = "function11"; + KeyCodes2[KeyCodes2["function12"] = 123] = "function12"; + KeyCodes2[KeyCodes2["function2"] = 113] = "function2"; + KeyCodes2[KeyCodes2["function3"] = 114] = "function3"; + KeyCodes2[KeyCodes2["function4"] = 115] = "function4"; + KeyCodes2[KeyCodes2["function5"] = 116] = "function5"; + KeyCodes2[KeyCodes2["function6"] = 117] = "function6"; + KeyCodes2[KeyCodes2["function7"] = 118] = "function7"; + KeyCodes2[KeyCodes2["function8"] = 119] = "function8"; + KeyCodes2[KeyCodes2["function9"] = 120] = "function9"; + KeyCodes2[KeyCodes2["home"] = 36] = "home"; + KeyCodes2[KeyCodes2["insert"] = 45] = "insert"; + KeyCodes2[KeyCodes2["menu"] = 93] = "menu"; + KeyCodes2[KeyCodes2["minus"] = 189] = "minus"; + KeyCodes2[KeyCodes2["minus2"] = 109] = "minus2"; + KeyCodes2[KeyCodes2["numLock"] = 144] = "numLock"; + KeyCodes2[KeyCodes2["numPad0"] = 96] = "numPad0"; + KeyCodes2[KeyCodes2["numPad1"] = 97] = "numPad1"; + KeyCodes2[KeyCodes2["numPad2"] = 98] = "numPad2"; + KeyCodes2[KeyCodes2["numPad3"] = 99] = "numPad3"; + KeyCodes2[KeyCodes2["numPad4"] = 100] = "numPad4"; + KeyCodes2[KeyCodes2["numPad5"] = 101] = "numPad5"; + KeyCodes2[KeyCodes2["numPad6"] = 102] = "numPad6"; + KeyCodes2[KeyCodes2["numPad7"] = 103] = "numPad7"; + KeyCodes2[KeyCodes2["numPad8"] = 104] = "numPad8"; + KeyCodes2[KeyCodes2["numPad9"] = 105] = "numPad9"; + KeyCodes2[KeyCodes2["numPadDivide"] = 111] = "numPadDivide"; + KeyCodes2[KeyCodes2["numPadDot"] = 110] = "numPadDot"; + KeyCodes2[KeyCodes2["numPadMinus"] = 109] = "numPadMinus"; + KeyCodes2[KeyCodes2["numPadMultiply"] = 106] = "numPadMultiply"; + KeyCodes2[KeyCodes2["numPadPlus"] = 107] = "numPadPlus"; + KeyCodes2[KeyCodes2["openBracket"] = 219] = "openBracket"; + KeyCodes2[KeyCodes2["pageDown"] = 34] = "pageDown"; + KeyCodes2[KeyCodes2["pageUp"] = 33] = "pageUp"; + KeyCodes2[KeyCodes2["period"] = 190] = "period"; + KeyCodes2[KeyCodes2["print"] = 44] = "print"; + KeyCodes2[KeyCodes2["quote"] = 222] = "quote"; + KeyCodes2[KeyCodes2["scrollLock"] = 145] = "scrollLock"; + KeyCodes2[KeyCodes2["shift"] = 16] = "shift"; + KeyCodes2[KeyCodes2["space"] = 32] = "space"; + KeyCodes2[KeyCodes2["tab"] = 9] = "tab"; + KeyCodes2[KeyCodes2["tilde"] = 192] = "tilde"; + KeyCodes2[KeyCodes2["windowsLeft"] = 91] = "windowsLeft"; + KeyCodes2[KeyCodes2["windowsOpera"] = 219] = "windowsOpera"; + KeyCodes2[KeyCodes2["windowsRight"] = 92] = "windowsRight"; + })(KeyCodes || (KeyCodes = {})); + keyArrowDown = "ArrowDown"; + keyArrowLeft = "ArrowLeft"; + keyArrowRight = "ArrowRight"; + keyArrowUp = "ArrowUp"; + keyEnter = "Enter"; + keyEscape = "Escape"; + keyHome = "Home"; + keyEnd = "End"; + keyFunction2 = "F2"; + keyPageDown = "PageDown"; + keyPageUp = "PageUp"; + keySpace = " "; + keyTab = "Tab"; + keyBackspace = "Backspace"; + keyDelete = "Delete"; + ArrowKeys = { + ArrowDown: keyArrowDown, + ArrowLeft: keyArrowLeft, + ArrowRight: keyArrowRight, + ArrowUp: keyArrowUp + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/localization.js + var Direction; + var init_localization = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/localization.js"() { + (function(Direction2) { + Direction2["ltr"] = "ltr"; + Direction2["rtl"] = "rtl"; + })(Direction || (Direction = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/numbers.js + function wrapInBounds(min, max, value) { + if (value < min) { + return max; + } else if (value > max) { + return min; + } + return value; + } + function limit(min, max, value) { + return Math.min(Math.max(value, min), max); + } + function inRange(value, min, max = 0) { + [min, max] = [min, max].sort((a, b) => a - b); + return min <= value && value < max; + } + var init_numbers = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/numbers.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/strings.js + function uniqueId(prefix = "") { + return `${prefix}${uniqueIdCounter++}`; + } + var uniqueIdCounter; + var init_strings = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/strings.js"() { + uniqueIdCounter = 0; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/query.js + var init_query = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/query.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js + var RtlScrollConverter; + var init_rtl_scroll_converter = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js"() { + init_dist(); + init_localization(); + RtlScrollConverter = class _RtlScrollConverter { + /** + * Gets the scrollLeft value of the provided element + */ + static getScrollLeft(scrolledElement, direction) { + if (direction === Direction.rtl) { + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + return scrolledElement.scrollLeft; + } + /** + * Sets the scrollLeft value of the provided element + */ + static setScrollLeft(scrolledElement, scrollValue, direction) { + if (direction === Direction.rtl) { + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, scrollValue); + return; + } + scrolledElement.scrollLeft = scrollValue; + } + /** + * The initial rtl scroll converter getter function, it calls the browser test to set the correct converter + * functions and then invokes the getter + */ + static initialGetRtlScrollConverter(scrolledElement) { + _RtlScrollConverter.initializeRtlScrollConverters(); + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + /** + * The "direct" rtl get scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft; + } + /** + * The "inverted" get scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedGetRtlScrollConverter(scrolledElement) { + return -Math.abs(scrolledElement.scrollLeft); + } + /** + * The "reverse" get scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft - (scrolledElement.scrollWidth - scrolledElement.clientWidth); + } + /** + * The initial rtl scroll converter setter function, it calls the browser test to set the correct converter + * functions and then invokes the setter + */ + static initialSetRtlScrollConverter(scrolledElement, newScrollValue) { + _RtlScrollConverter.initializeRtlScrollConverters(); + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, newScrollValue); + } + /** + * The "direct" rtl set scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = newScrollValue; + } + /** + * The "inverted" set scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = Math.abs(newScrollValue); + } + /** + * The "reverse" set scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseSetRtlScrollConverter(scrolledElement, newScrollValue) { + const maxScroll = scrolledElement.scrollWidth - scrolledElement.clientWidth; + scrolledElement.scrollLeft = maxScroll + newScrollValue; + } + /** + * detects the appropriate rtl scroll converter functions and assigns them + * should only run once + */ + static initializeRtlScrollConverters() { + if (!canUseDOM()) { + _RtlScrollConverter.applyDirectScrollConverters(); + return; + } + const testElement = _RtlScrollConverter.getTestElement(); + document.body.appendChild(testElement); + _RtlScrollConverter.checkForScrollType(testElement); + document.body.removeChild(testElement); + } + /** + * checks the provided test element to determine scroll type + * and apply appropriate converters + */ + static checkForScrollType(testElement) { + if (_RtlScrollConverter.isReverse(testElement)) { + _RtlScrollConverter.applyReverseScrollConverters(); + } else { + if (_RtlScrollConverter.isDirect(testElement)) { + _RtlScrollConverter.applyDirectScrollConverters(); + } else { + _RtlScrollConverter.applyInvertedScrollConverters(); + } + } + } + /** + * checks test element initial state for rtl "reverse" mode + */ + static isReverse(testElement) { + return testElement.scrollLeft > 0; + } + /** + * checks test element for rtl "direct" mode + */ + static isDirect(testElement) { + testElement.scrollLeft = -1; + return testElement.scrollLeft < 0; + } + /** + * apply direct scroll conververters + */ + static applyDirectScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.directSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.directGetRtlScrollConverter; + } + /** + * apply inverted scroll conververters + */ + static applyInvertedScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.invertedSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.invertedGetRtlScrollConverter; + } + /** + * apply reverse scroll conververters + */ + static applyReverseScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.reverseSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.reverseGetRtlScrollConverter; + } + /** + * generate a test element for rtl testing + */ + static getTestElement() { + const testElement = document.createElement("div"); + testElement.appendChild(document.createTextNode("ABCD")); + testElement.dir = "rtl"; + testElement.style.fontSize = "14px"; + testElement.style.width = "4px"; + testElement.style.height = "1px"; + testElement.style.position = "absolute"; + testElement.style.top = "-1000px"; + testElement.style.overflow = "scroll"; + return testElement; + } + }; + RtlScrollConverter.getRtlScrollLeftConverter = RtlScrollConverter.initialGetRtlScrollConverter; + RtlScrollConverter.setRtlScrollLeftConverter = RtlScrollConverter.initialSetRtlScrollConverter; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/system-colors.js + var SystemColors; + var init_system_colors = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/system-colors.js"() { + (function(SystemColors2) { + SystemColors2["Canvas"] = "Canvas"; + SystemColors2["CanvasText"] = "CanvasText"; + SystemColors2["LinkText"] = "LinkText"; + SystemColors2["VisitedText"] = "VisitedText"; + SystemColors2["ActiveText"] = "ActiveText"; + SystemColors2["ButtonFace"] = "ButtonFace"; + SystemColors2["ButtonText"] = "ButtonText"; + SystemColors2["Field"] = "Field"; + SystemColors2["FieldText"] = "FieldText"; + SystemColors2["Highlight"] = "Highlight"; + SystemColors2["HighlightText"] = "HighlightText"; + SystemColors2["GrayText"] = "GrayText"; + })(SystemColors || (SystemColors = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/index.js + var init_dist2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/index.js"() { + init_aria(); + init_array(); + init_class_names(); + init_dom2(); + init_events(); + init_html(); + init_key_codes(); + init_localization(); + init_numbers(); + init_strings(); + init_query(); + init_rtl_scroll_converter(); + init_system_colors(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js + var AccordionExpandMode, Accordion; + var init_accordion = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_accordion_item(); + AccordionExpandMode = { + /** + * Designates only a single {@link @microsoft/fast-foundation#(AccordionItem:class) } can be open a time. + */ + single: "single", + /** + * Designates multiple {@link @microsoft/fast-foundation#(AccordionItem:class) | AccordionItems} can be open simultaneously. + */ + multi: "multi" + }; + Accordion = class extends FoundationElement { + constructor() { + super(...arguments); + this.expandmode = AccordionExpandMode.multi; + this.activeItemIndex = 0; + this.change = () => { + this.$emit("change", this.activeid); + }; + this.setItems = () => { + var _a; + if (this.accordionItems.length === 0) { + return; + } + this.accordionIds = this.getItemIds(); + this.accordionItems.forEach((item, index) => { + if (item instanceof AccordionItem) { + item.addEventListener("change", this.activeItemChange); + if (this.isSingleExpandMode()) { + this.activeItemIndex !== index ? item.expanded = false : item.expanded = true; + } + } + const itemId = this.accordionIds[index]; + item.setAttribute("id", typeof itemId !== "string" ? `accordion-${index + 1}` : itemId); + this.activeid = this.accordionIds[this.activeItemIndex]; + item.addEventListener("keydown", this.handleItemKeyDown); + item.addEventListener("focus", this.handleItemFocus); + }); + if (this.isSingleExpandMode()) { + const expandedItem = (_a = this.findExpandedItem()) !== null && _a !== void 0 ? _a : this.accordionItems[0]; + expandedItem.setAttribute("aria-disabled", "true"); + } + }; + this.removeItemListeners = (oldValue) => { + oldValue.forEach((item, index) => { + item.removeEventListener("change", this.activeItemChange); + item.removeEventListener("keydown", this.handleItemKeyDown); + item.removeEventListener("focus", this.handleItemFocus); + }); + }; + this.activeItemChange = (event) => { + if (event.defaultPrevented || event.target !== event.currentTarget) { + return; + } + event.preventDefault(); + const selectedItem = event.target; + this.activeid = selectedItem.getAttribute("id"); + if (this.isSingleExpandMode()) { + this.resetItems(); + selectedItem.expanded = true; + selectedItem.setAttribute("aria-disabled", "true"); + this.accordionItems.forEach((item) => { + if (!item.hasAttribute("disabled") && item.id !== this.activeid) { + item.removeAttribute("aria-disabled"); + } + }); + } + this.activeItemIndex = Array.from(this.accordionItems).indexOf(selectedItem); + this.change(); + }; + this.handleItemKeyDown = (event) => { + if (event.target !== event.currentTarget) { + return; + } + this.accordionIds = this.getItemIds(); + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjust(-1); + break; + case keyArrowDown: + event.preventDefault(); + this.adjust(1); + break; + case keyHome: + this.activeItemIndex = 0; + this.focusItem(); + break; + case keyEnd: + this.activeItemIndex = this.accordionItems.length - 1; + this.focusItem(); + break; + } + }; + this.handleItemFocus = (event) => { + if (event.target === event.currentTarget) { + const focusedItem = event.target; + const focusedIndex = this.activeItemIndex = Array.from(this.accordionItems).indexOf(focusedItem); + if (this.activeItemIndex !== focusedIndex && focusedIndex !== -1) { + this.activeItemIndex = focusedIndex; + this.activeid = this.accordionIds[this.activeItemIndex]; + } + } + }; + } + /** + * @internal + */ + accordionItemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.removeItemListeners(oldValue); + this.setItems(); + } + } + findExpandedItem() { + for (let item = 0; item < this.accordionItems.length; item++) { + if (this.accordionItems[item].getAttribute("expanded") === "true") { + return this.accordionItems[item]; + } + } + return null; + } + resetItems() { + this.accordionItems.forEach((item, index) => { + item.expanded = false; + }); + } + getItemIds() { + return this.accordionItems.map((accordionItem) => { + return accordionItem.getAttribute("id"); + }); + } + isSingleExpandMode() { + return this.expandmode === AccordionExpandMode.single; + } + adjust(adjustment) { + this.activeItemIndex = wrapInBounds(0, this.accordionItems.length - 1, this.activeItemIndex + adjustment); + this.focusItem(); + } + focusItem() { + const element = this.accordionItems[this.activeItemIndex]; + if (element instanceof AccordionItem) { + element.expandbutton.focus(); + } + } + }; + __decorate([ + attr({ attribute: "expand-mode" }) + ], Accordion.prototype, "expandmode", void 0); + __decorate([ + observable + ], Accordion.prototype, "accordionItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js + var init_accordion2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js"() { + init_accordion_template(); + init_accordion(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js + var anchorTemplate; + var init_anchor_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js"() { + init_esm(); + init_start_end(); + anchorTemplate = (context, definition) => html` + + ${startSlotTemplate(context, definition)} + + + + ${endSlotTemplate(context, definition)} + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js + var ARIAGlobalStatesAndProperties; + var init_aria_global = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js"() { + init_tslib_es6(); + init_esm(); + ARIAGlobalStatesAndProperties = class { + }; + __decorate([ + attr({ attribute: "aria-atomic" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaAtomic", void 0); + __decorate([ + attr({ attribute: "aria-busy" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaBusy", void 0); + __decorate([ + attr({ attribute: "aria-controls" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaControls", void 0); + __decorate([ + attr({ attribute: "aria-current" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaCurrent", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-details" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDetails", void 0); + __decorate([ + attr({ attribute: "aria-disabled" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDisabled", void 0); + __decorate([ + attr({ attribute: "aria-errormessage" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaErrormessage", void 0); + __decorate([ + attr({ attribute: "aria-flowto" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaFlowto", void 0); + __decorate([ + attr({ attribute: "aria-haspopup" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHaspopup", void 0); + __decorate([ + attr({ attribute: "aria-hidden" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHidden", void 0); + __decorate([ + attr({ attribute: "aria-invalid" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaInvalid", void 0); + __decorate([ + attr({ attribute: "aria-keyshortcuts" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaKeyshortcuts", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabel", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-live" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLive", void 0); + __decorate([ + attr({ attribute: "aria-owns" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaOwns", void 0); + __decorate([ + attr({ attribute: "aria-relevant" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRelevant", void 0); + __decorate([ + attr({ attribute: "aria-roledescription" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRoledescription", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js + var init_patterns = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js"() { + init_aria_global(); + init_start_end(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js + var Anchor, DelegatesARIALink; + var init_anchor = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_patterns(); + init_apply_mixins(); + Anchor = class extends FoundationElement { + constructor() { + super(...arguments); + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + var _a2; + (_a2 = this.control) === null || _a2 === void 0 ? void 0 : _a2.focus(); + }; + } + }; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.handleUnsupportedDelegatesFocus(); + } + }; + __decorate([ + attr + ], Anchor.prototype, "download", void 0); + __decorate([ + attr + ], Anchor.prototype, "href", void 0); + __decorate([ + attr + ], Anchor.prototype, "hreflang", void 0); + __decorate([ + attr + ], Anchor.prototype, "ping", void 0); + __decorate([ + attr + ], Anchor.prototype, "referrerpolicy", void 0); + __decorate([ + attr + ], Anchor.prototype, "rel", void 0); + __decorate([ + attr + ], Anchor.prototype, "target", void 0); + __decorate([ + attr + ], Anchor.prototype, "type", void 0); + __decorate([ + observable + ], Anchor.prototype, "defaultSlottedContent", void 0); + DelegatesARIALink = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIALink.prototype, "ariaExpanded", void 0); + applyMixins(DelegatesARIALink, ARIAGlobalStatesAndProperties); + applyMixins(Anchor, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js + var init_anchor2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js"() { + init_anchor_template(); + init_anchor(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js + var init_anchored_region_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js + var getDirection; + var init_direction = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js"() { + init_dist2(); + getDirection = (rootNode) => { + const dirNode = rootNode.closest("[dir]"); + return dirNode !== null && dirNode.dir === "rtl" ? Direction.rtl : Direction.ltr; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js + var IntersectionService; + var init_intersection_service = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js"() { + init_esm(); + IntersectionService = class { + constructor() { + this.intersectionDetector = null; + this.observedElements = /* @__PURE__ */ new Map(); + this.requestPosition = (target, callback) => { + var _a; + if (this.intersectionDetector === null) { + return; + } + if (this.observedElements.has(target)) { + (_a = this.observedElements.get(target)) === null || _a === void 0 ? void 0 : _a.push(callback); + return; + } + this.observedElements.set(target, [callback]); + this.intersectionDetector.observe(target); + }; + this.cancelRequestPosition = (target, callback) => { + const callbacks = this.observedElements.get(target); + if (callbacks !== void 0) { + const callBackIndex = callbacks.indexOf(callback); + if (callBackIndex !== -1) { + callbacks.splice(callBackIndex, 1); + } + } + }; + this.initializeIntersectionDetector = () => { + if (!$global.IntersectionObserver) { + return; + } + this.intersectionDetector = new IntersectionObserver(this.handleIntersection, { + root: null, + rootMargin: "0px", + threshold: [0, 1] + }); + }; + this.handleIntersection = (entries) => { + if (this.intersectionDetector === null) { + return; + } + const pendingCallbacks = []; + const pendingCallbackParams = []; + entries.forEach((entry) => { + var _a; + (_a = this.intersectionDetector) === null || _a === void 0 ? void 0 : _a.unobserve(entry.target); + const thisElementCallbacks = this.observedElements.get(entry.target); + if (thisElementCallbacks !== void 0) { + thisElementCallbacks.forEach((callback) => { + let targetCallbackIndex = pendingCallbacks.indexOf(callback); + if (targetCallbackIndex === -1) { + targetCallbackIndex = pendingCallbacks.length; + pendingCallbacks.push(callback); + pendingCallbackParams.push([]); + } + pendingCallbackParams[targetCallbackIndex].push(entry); + }); + this.observedElements.delete(entry.target); + } + }); + pendingCallbacks.forEach((callback, index) => { + callback(pendingCallbackParams[index]); + }); + }; + this.initializeIntersectionDetector(); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js + var AnchoredRegion; + var init_anchored_region = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_direction(); + init_intersection_service(); + AnchoredRegion = class _AnchoredRegion extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.viewport = ""; + this.horizontalPositioningMode = "uncontrolled"; + this.horizontalDefaultPosition = "unset"; + this.horizontalViewportLock = false; + this.horizontalInset = false; + this.horizontalScaling = "content"; + this.verticalPositioningMode = "uncontrolled"; + this.verticalDefaultPosition = "unset"; + this.verticalViewportLock = false; + this.verticalInset = false; + this.verticalScaling = "content"; + this.fixedPlacement = false; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.initialLayoutComplete = false; + this.resizeDetector = null; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.pendingPositioningUpdate = false; + this.pendingReset = false; + this.currentDirection = Direction.ltr; + this.regionVisible = false; + this.forceUpdate = false; + this.updateThreshold = 0.5; + this.update = () => { + if (!this.pendingPositioningUpdate) { + this.requestPositionUpdates(); + } + }; + this.startObservers = () => { + this.stopObservers(); + if (this.anchorElement === null) { + return; + } + this.requestPositionUpdates(); + if (this.resizeDetector !== null) { + this.resizeDetector.observe(this.anchorElement); + this.resizeDetector.observe(this); + } + }; + this.requestPositionUpdates = () => { + if (this.anchorElement === null || this.pendingPositioningUpdate) { + return; + } + _AnchoredRegion.intersectionService.requestPosition(this, this.handleIntersection); + _AnchoredRegion.intersectionService.requestPosition(this.anchorElement, this.handleIntersection); + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.requestPosition(this.viewportElement, this.handleIntersection); + } + this.pendingPositioningUpdate = true; + }; + this.stopObservers = () => { + if (this.pendingPositioningUpdate) { + this.pendingPositioningUpdate = false; + _AnchoredRegion.intersectionService.cancelRequestPosition(this, this.handleIntersection); + if (this.anchorElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.anchorElement, this.handleIntersection); + } + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.viewportElement, this.handleIntersection); + } + } + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + } + }; + this.getViewport = () => { + if (typeof this.viewport !== "string" || this.viewport === "") { + return document.documentElement; + } + return document.getElementById(this.viewport); + }; + this.getAnchor = () => { + return document.getElementById(this.anchor); + }; + this.handleIntersection = (entries) => { + if (!this.pendingPositioningUpdate) { + return; + } + this.pendingPositioningUpdate = false; + if (!this.applyIntersectionEntries(entries)) { + return; + } + this.updateLayout(); + }; + this.applyIntersectionEntries = (entries) => { + const regionEntry = entries.find((x) => x.target === this); + const anchorEntry = entries.find((x) => x.target === this.anchorElement); + const viewportEntry = entries.find((x) => x.target === this.viewportElement); + if (regionEntry === void 0 || viewportEntry === void 0 || anchorEntry === void 0) { + return false; + } + if (!this.regionVisible || this.forceUpdate || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0 || this.isRectDifferent(this.anchorRect, anchorEntry.boundingClientRect) || this.isRectDifferent(this.viewportRect, viewportEntry.boundingClientRect) || this.isRectDifferent(this.regionRect, regionEntry.boundingClientRect)) { + this.regionRect = regionEntry.boundingClientRect; + this.anchorRect = anchorEntry.boundingClientRect; + if (this.viewportElement === document.documentElement) { + this.viewportRect = new DOMRectReadOnly(viewportEntry.boundingClientRect.x + document.documentElement.scrollLeft, viewportEntry.boundingClientRect.y + document.documentElement.scrollTop, viewportEntry.boundingClientRect.width, viewportEntry.boundingClientRect.height); + } else { + this.viewportRect = viewportEntry.boundingClientRect; + } + this.updateRegionOffset(); + this.forceUpdate = false; + return true; + } + return false; + }; + this.updateRegionOffset = () => { + if (this.anchorRect && this.regionRect) { + this.baseHorizontalOffset = this.baseHorizontalOffset + (this.anchorRect.left - this.regionRect.left) + (this.translateX - this.baseHorizontalOffset); + this.baseVerticalOffset = this.baseVerticalOffset + (this.anchorRect.top - this.regionRect.top) + (this.translateY - this.baseVerticalOffset); + } + }; + this.isRectDifferent = (rectA, rectB) => { + if (Math.abs(rectA.top - rectB.top) > this.updateThreshold || Math.abs(rectA.right - rectB.right) > this.updateThreshold || Math.abs(rectA.bottom - rectB.bottom) > this.updateThreshold || Math.abs(rectA.left - rectB.left) > this.updateThreshold) { + return true; + } + return false; + }; + this.handleResize = (entries) => { + this.update(); + }; + this.reset = () => { + if (!this.pendingReset) { + return; + } + this.pendingReset = false; + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + if (this.viewportElement === null) { + this.viewportElement = this.getViewport(); + } + this.currentDirection = getDirection(this); + this.startObservers(); + }; + this.updateLayout = () => { + let desiredVerticalPosition = void 0; + let desiredHorizontalPosition = void 0; + if (this.horizontalPositioningMode !== "uncontrolled") { + const horizontalOptions = this.getPositioningOptions(this.horizontalInset); + if (this.horizontalDefaultPosition === "center") { + desiredHorizontalPosition = "center"; + } else if (this.horizontalDefaultPosition !== "unset") { + let dirCorrectedHorizontalDefaultPosition = this.horizontalDefaultPosition; + if (dirCorrectedHorizontalDefaultPosition === "start" || dirCorrectedHorizontalDefaultPosition === "end") { + const newDirection = getDirection(this); + if (newDirection !== this.currentDirection) { + this.currentDirection = newDirection; + this.initialize(); + return; + } + if (this.currentDirection === Direction.ltr) { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "left" : "right"; + } else { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "right" : "left"; + } + } + switch (dirCorrectedHorizontalDefaultPosition) { + case "left": + desiredHorizontalPosition = this.horizontalInset ? "insetStart" : "start"; + break; + case "right": + desiredHorizontalPosition = this.horizontalInset ? "insetEnd" : "end"; + break; + } + } + const horizontalThreshold = this.horizontalThreshold !== void 0 ? this.horizontalThreshold : this.regionRect !== void 0 ? this.regionRect.width : 0; + const anchorLeft = this.anchorRect !== void 0 ? this.anchorRect.left : 0; + const anchorRight = this.anchorRect !== void 0 ? this.anchorRect.right : 0; + const anchorWidth = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + const viewportLeft = this.viewportRect !== void 0 ? this.viewportRect.left : 0; + const viewportRight = this.viewportRect !== void 0 ? this.viewportRect.right : 0; + if (desiredHorizontalPosition === void 0 || !(this.horizontalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredHorizontalPosition, anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) < horizontalThreshold) { + desiredHorizontalPosition = this.getAvailableSpace(horizontalOptions[0], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) > this.getAvailableSpace(horizontalOptions[1], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) ? horizontalOptions[0] : horizontalOptions[1]; + } + } + if (this.verticalPositioningMode !== "uncontrolled") { + const verticalOptions = this.getPositioningOptions(this.verticalInset); + if (this.verticalDefaultPosition === "center") { + desiredVerticalPosition = "center"; + } else if (this.verticalDefaultPosition !== "unset") { + switch (this.verticalDefaultPosition) { + case "top": + desiredVerticalPosition = this.verticalInset ? "insetStart" : "start"; + break; + case "bottom": + desiredVerticalPosition = this.verticalInset ? "insetEnd" : "end"; + break; + } + } + const verticalThreshold = this.verticalThreshold !== void 0 ? this.verticalThreshold : this.regionRect !== void 0 ? this.regionRect.height : 0; + const anchorTop = this.anchorRect !== void 0 ? this.anchorRect.top : 0; + const anchorBottom = this.anchorRect !== void 0 ? this.anchorRect.bottom : 0; + const anchorHeight = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + const viewportTop = this.viewportRect !== void 0 ? this.viewportRect.top : 0; + const viewportBottom = this.viewportRect !== void 0 ? this.viewportRect.bottom : 0; + if (desiredVerticalPosition === void 0 || !(this.verticalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredVerticalPosition, anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) < verticalThreshold) { + desiredVerticalPosition = this.getAvailableSpace(verticalOptions[0], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) > this.getAvailableSpace(verticalOptions[1], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) ? verticalOptions[0] : verticalOptions[1]; + } + } + const nextPositionerDimension = this.getNextRegionDimension(desiredHorizontalPosition, desiredVerticalPosition); + const positionChanged = this.horizontalPosition !== desiredHorizontalPosition || this.verticalPosition !== desiredVerticalPosition; + this.setHorizontalPosition(desiredHorizontalPosition, nextPositionerDimension); + this.setVerticalPosition(desiredVerticalPosition, nextPositionerDimension); + this.updateRegionStyle(); + if (!this.initialLayoutComplete) { + this.initialLayoutComplete = true; + this.requestPositionUpdates(); + return; + } + if (!this.regionVisible) { + this.regionVisible = true; + this.style.removeProperty("pointer-events"); + this.style.removeProperty("opacity"); + this.classList.toggle("loaded", true); + this.$emit("loaded", this, { bubbles: false }); + } + this.updatePositionClasses(); + if (positionChanged) { + this.$emit("positionchange", this, { bubbles: false }); + } + }; + this.updateRegionStyle = () => { + this.style.width = this.regionWidth; + this.style.height = this.regionHeight; + this.style.transform = `translate(${this.translateX}px, ${this.translateY}px)`; + }; + this.updatePositionClasses = () => { + this.classList.toggle("top", this.verticalPosition === "start"); + this.classList.toggle("bottom", this.verticalPosition === "end"); + this.classList.toggle("inset-top", this.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.verticalPosition === "insetEnd"); + this.classList.toggle("vertical-center", this.verticalPosition === "center"); + this.classList.toggle("left", this.horizontalPosition === "start"); + this.classList.toggle("right", this.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.horizontalPosition === "insetEnd"); + this.classList.toggle("horizontal-center", this.horizontalPosition === "center"); + }; + this.setHorizontalPosition = (desiredHorizontalPosition, nextPositionerDimension) => { + if (desiredHorizontalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionWidth = 0; + switch (this.horizontalScaling) { + case "anchor": + case "fill": + nextRegionWidth = this.horizontalViewportLock ? this.viewportRect.width : nextPositionerDimension.width; + this.regionWidth = `${nextRegionWidth}px`; + break; + case "content": + nextRegionWidth = this.regionRect.width; + this.regionWidth = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredHorizontalPosition) { + case "start": + this.translateX = this.baseHorizontalOffset - nextRegionWidth; + if (this.horizontalViewportLock && this.anchorRect.left > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.right); + } + break; + case "insetStart": + this.translateX = this.baseHorizontalOffset - nextRegionWidth + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.right); + } + break; + case "insetEnd": + this.translateX = this.baseHorizontalOffset; + if (this.horizontalViewportLock && this.anchorRect.left < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.left); + } + break; + case "end": + this.translateX = this.baseHorizontalOffset + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.left); + } + break; + case "center": + sizeDelta = (this.anchorRect.width - nextRegionWidth) / 2; + this.translateX = this.baseHorizontalOffset + sizeDelta; + if (this.horizontalViewportLock) { + const regionLeft = this.anchorRect.left + sizeDelta; + const regionRight = this.anchorRect.right - sizeDelta; + if (regionLeft < this.viewportRect.left && !(regionRight > this.viewportRect.right)) { + this.translateX = this.translateX - (regionLeft - this.viewportRect.left); + } else if (regionRight > this.viewportRect.right && !(regionLeft < this.viewportRect.left)) { + this.translateX = this.translateX - (regionRight - this.viewportRect.right); + } + } + break; + } + this.horizontalPosition = desiredHorizontalPosition; + }; + this.setVerticalPosition = (desiredVerticalPosition, nextPositionerDimension) => { + if (desiredVerticalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionHeight = 0; + switch (this.verticalScaling) { + case "anchor": + case "fill": + nextRegionHeight = this.verticalViewportLock ? this.viewportRect.height : nextPositionerDimension.height; + this.regionHeight = `${nextRegionHeight}px`; + break; + case "content": + nextRegionHeight = this.regionRect.height; + this.regionHeight = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredVerticalPosition) { + case "start": + this.translateY = this.baseVerticalOffset - nextRegionHeight; + if (this.verticalViewportLock && this.anchorRect.top > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.bottom); + } + break; + case "insetStart": + this.translateY = this.baseVerticalOffset - nextRegionHeight + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.bottom); + } + break; + case "insetEnd": + this.translateY = this.baseVerticalOffset; + if (this.verticalViewportLock && this.anchorRect.top < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.top); + } + break; + case "end": + this.translateY = this.baseVerticalOffset + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.top); + } + break; + case "center": + sizeDelta = (this.anchorRect.height - nextRegionHeight) / 2; + this.translateY = this.baseVerticalOffset + sizeDelta; + if (this.verticalViewportLock) { + const regionTop = this.anchorRect.top + sizeDelta; + const regionBottom = this.anchorRect.bottom - sizeDelta; + if (regionTop < this.viewportRect.top && !(regionBottom > this.viewportRect.bottom)) { + this.translateY = this.translateY - (regionTop - this.viewportRect.top); + } else if (regionBottom > this.viewportRect.bottom && !(regionTop < this.viewportRect.top)) { + this.translateY = this.translateY - (regionBottom - this.viewportRect.bottom); + } + } + } + this.verticalPosition = desiredVerticalPosition; + }; + this.getPositioningOptions = (inset) => { + if (inset) { + return ["insetStart", "insetEnd"]; + } + return ["start", "end"]; + }; + this.getAvailableSpace = (positionOption, anchorStart, anchorEnd, anchorSpan, viewportStart, viewportEnd) => { + const spaceStart = anchorStart - viewportStart; + const spaceEnd = viewportEnd - (anchorStart + anchorSpan); + switch (positionOption) { + case "start": + return spaceStart; + case "insetStart": + return spaceStart + anchorSpan; + case "insetEnd": + return spaceEnd + anchorSpan; + case "end": + return spaceEnd; + case "center": + return Math.min(spaceStart, spaceEnd) * 2 + anchorSpan; + } + }; + this.getNextRegionDimension = (desiredHorizontalPosition, desiredVerticalPosition) => { + const newRegionDimension = { + height: this.regionRect !== void 0 ? this.regionRect.height : 0, + width: this.regionRect !== void 0 ? this.regionRect.width : 0 + }; + if (desiredHorizontalPosition !== void 0 && this.horizontalScaling === "fill") { + newRegionDimension.width = this.getAvailableSpace(desiredHorizontalPosition, this.anchorRect !== void 0 ? this.anchorRect.left : 0, this.anchorRect !== void 0 ? this.anchorRect.right : 0, this.anchorRect !== void 0 ? this.anchorRect.width : 0, this.viewportRect !== void 0 ? this.viewportRect.left : 0, this.viewportRect !== void 0 ? this.viewportRect.right : 0); + } else if (this.horizontalScaling === "anchor") { + newRegionDimension.width = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + } + if (desiredVerticalPosition !== void 0 && this.verticalScaling === "fill") { + newRegionDimension.height = this.getAvailableSpace(desiredVerticalPosition, this.anchorRect !== void 0 ? this.anchorRect.top : 0, this.anchorRect !== void 0 ? this.anchorRect.bottom : 0, this.anchorRect !== void 0 ? this.anchorRect.height : 0, this.viewportRect !== void 0 ? this.viewportRect.top : 0, this.viewportRect !== void 0 ? this.viewportRect.bottom : 0); + } else if (this.verticalScaling === "anchor") { + newRegionDimension.height = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + } + return newRegionDimension; + }; + this.startAutoUpdateEventListeners = () => { + window.addEventListener(eventResize, this.update, { passive: true }); + window.addEventListener(eventScroll, this.update, { + passive: true, + capture: true + }); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.observe(this.viewportElement); + } + }; + this.stopAutoUpdateEventListeners = () => { + window.removeEventListener(eventResize, this.update); + window.removeEventListener(eventScroll, this.update); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.unobserve(this.viewportElement); + } + }; + } + anchorChanged() { + if (this.initialLayoutComplete) { + this.anchorElement = this.getAnchor(); + } + } + viewportChanged() { + if (this.initialLayoutComplete) { + this.viewportElement = this.getViewport(); + } + } + horizontalPositioningModeChanged() { + this.requestReset(); + } + horizontalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + horizontalViewportLockChanged() { + this.updateForAttributeChange(); + } + horizontalInsetChanged() { + this.updateForAttributeChange(); + } + horizontalThresholdChanged() { + this.updateForAttributeChange(); + } + horizontalScalingChanged() { + this.updateForAttributeChange(); + } + verticalPositioningModeChanged() { + this.requestReset(); + } + verticalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + verticalViewportLockChanged() { + this.updateForAttributeChange(); + } + verticalInsetChanged() { + this.updateForAttributeChange(); + } + verticalThresholdChanged() { + this.updateForAttributeChange(); + } + verticalScalingChanged() { + this.updateForAttributeChange(); + } + fixedPlacementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + autoUpdateModeChanged(prevMode, newMode) { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + if (prevMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + if (newMode === "auto") { + this.startAutoUpdateEventListeners(); + } + } + } + anchorElementChanged() { + this.requestReset(); + } + viewportElementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.autoUpdateMode === "auto") { + this.startAutoUpdateEventListeners(); + } + this.initialize(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + if (this.autoUpdateMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + this.stopObservers(); + this.disconnectResizeDetector(); + } + /** + * @internal + */ + adoptedCallback() { + this.initialize(); + } + /** + * destroys the instance's resize observer + */ + disconnectResizeDetector() { + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.handleResize); + } + /** + * react to attribute changes that don't require a reset + */ + updateForAttributeChange() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.forceUpdate = true; + this.update(); + } + } + /** + * fully initializes the component + */ + initialize() { + this.initializeResizeDetector(); + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + this.requestReset(); + } + /** + * Request a reset if there are currently no open requests + */ + requestReset() { + if (this.$fastController.isConnected && this.pendingReset === false) { + this.setInitialState(); + DOM.queueUpdate(() => this.reset()); + this.pendingReset = true; + } + } + /** + * sets the starting configuration for component internal values + */ + setInitialState() { + this.initialLayoutComplete = false; + this.regionVisible = false; + this.translateX = 0; + this.translateY = 0; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.viewportRect = void 0; + this.regionRect = void 0; + this.anchorRect = void 0; + this.verticalPosition = void 0; + this.horizontalPosition = void 0; + this.style.opacity = "0"; + this.style.pointerEvents = "none"; + this.forceUpdate = false; + this.style.position = this.fixedPlacement ? "fixed" : "absolute"; + this.updatePositionClasses(); + this.updateRegionStyle(); + } + }; + AnchoredRegion.intersectionService = new IntersectionService(); + __decorate([ + attr + ], AnchoredRegion.prototype, "anchor", void 0); + __decorate([ + attr + ], AnchoredRegion.prototype, "viewport", void 0); + __decorate([ + attr({ attribute: "horizontal-positioning-mode" }) + ], AnchoredRegion.prototype, "horizontalPositioningMode", void 0); + __decorate([ + attr({ attribute: "horizontal-default-position" }) + ], AnchoredRegion.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "horizontal-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalInset", void 0); + __decorate([ + attr({ attribute: "horizontal-threshold" }) + ], AnchoredRegion.prototype, "horizontalThreshold", void 0); + __decorate([ + attr({ attribute: "horizontal-scaling" }) + ], AnchoredRegion.prototype, "horizontalScaling", void 0); + __decorate([ + attr({ attribute: "vertical-positioning-mode" }) + ], AnchoredRegion.prototype, "verticalPositioningMode", void 0); + __decorate([ + attr({ attribute: "vertical-default-position" }) + ], AnchoredRegion.prototype, "verticalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalInset", void 0); + __decorate([ + attr({ attribute: "vertical-threshold" }) + ], AnchoredRegion.prototype, "verticalThreshold", void 0); + __decorate([ + attr({ attribute: "vertical-scaling" }) + ], AnchoredRegion.prototype, "verticalScaling", void 0); + __decorate([ + attr({ attribute: "fixed-placement", mode: "boolean" }) + ], AnchoredRegion.prototype, "fixedPlacement", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], AnchoredRegion.prototype, "autoUpdateMode", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "anchorElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "viewportElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "initialLayoutComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js + var horizontalAnchorOverlay, FlyoutPosTop, FlyoutPosBottom, FlyoutPosTallest, FlyoutPosTopFill, FlyoutPosBottomFill, FlyoutPosTallestFill; + var init_anchored_region_config = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js"() { + horizontalAnchorOverlay = { + horizontalDefaultPosition: "center", + horizontalPositioningMode: "locktodefault", + horizontalInset: false, + horizontalScaling: "anchor" + }; + FlyoutPosTop = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "top", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosBottom = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "bottom", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTallest = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalPositioningMode: "dynamic", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTopFill = Object.assign(Object.assign({}, FlyoutPosTop), { verticalScaling: "fill" }); + FlyoutPosBottomFill = Object.assign(Object.assign({}, FlyoutPosBottom), { verticalScaling: "fill" }); + FlyoutPosTallestFill = Object.assign(Object.assign({}, FlyoutPosTallest), { verticalScaling: "fill" }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js + var init_anchored_region2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js"() { + init_anchored_region_template(); + init_anchored_region(); + init_anchored_region_config(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js + var init_avatar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js + var Avatar; + var init_avatar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Avatar = class extends FoundationElement { + /** + * Internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.shape) { + this.shape = "circle"; + } + } + }; + __decorate([ + attr + ], Avatar.prototype, "fill", void 0); + __decorate([ + attr + ], Avatar.prototype, "color", void 0); + __decorate([ + attr + ], Avatar.prototype, "link", void 0); + __decorate([ + attr + ], Avatar.prototype, "shape", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js + var init_avatar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js"() { + init_avatar_template(); + init_avatar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js + var badgeTemplate; + var init_badge_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js"() { + init_esm(); + badgeTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js + var Badge; + var init_badge = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Badge = class extends FoundationElement { + constructor() { + super(...arguments); + this.generateBadgeStyle = () => { + if (!this.fill && !this.color) { + return; + } + const fill = `background-color: var(--badge-fill-${this.fill});`; + const color = `color: var(--badge-color-${this.color});`; + if (this.fill && !this.color) { + return fill; + } else if (this.color && !this.fill) { + return color; + } else { + return `${color} ${fill}`; + } + }; + } + }; + __decorate([ + attr({ attribute: "fill" }) + ], Badge.prototype, "fill", void 0); + __decorate([ + attr({ attribute: "color" }) + ], Badge.prototype, "color", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Badge.prototype, "circular", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js + var init_badge2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js"() { + init_badge_template(); + init_badge(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js + var init_breadcrumb_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js + var BreadcrumbItem; + var init_breadcrumb_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js"() { + init_tslib_es6(); + init_esm(); + init_anchor(); + init_patterns(); + init_apply_mixins(); + BreadcrumbItem = class extends Anchor { + constructor() { + super(...arguments); + this.separator = true; + } + }; + __decorate([ + observable + ], BreadcrumbItem.prototype, "separator", void 0); + applyMixins(BreadcrumbItem, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js + var init_breadcrumb_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js"() { + init_breadcrumb_item_template(); + init_breadcrumb_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js + var init_breadcrumb_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js + var Breadcrumb; + var init_breadcrumb = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js"() { + init_tslib_es6(); + init_esm(); + init_breadcrumb_item(); + init_foundation_element(); + Breadcrumb = class extends FoundationElement { + slottedBreadcrumbItemsChanged() { + if (this.$fastController.isConnected) { + if (this.slottedBreadcrumbItems === void 0 || this.slottedBreadcrumbItems.length === 0) { + return; + } + const lastNode = this.slottedBreadcrumbItems[this.slottedBreadcrumbItems.length - 1]; + this.slottedBreadcrumbItems.forEach((item) => { + const itemIsLastNode = item === lastNode; + this.setItemSeparator(item, itemIsLastNode); + this.setAriaCurrent(item, itemIsLastNode); + }); + } + } + setItemSeparator(item, isLastNode) { + if (item instanceof BreadcrumbItem) { + item.separator = !isLastNode; + } + } + /** + * Finds href on childnodes in the light DOM or shadow DOM. + * We look in the shadow DOM because we insert an anchor when breadcrumb-item has an href. + */ + findChildWithHref(node) { + var _a, _b; + if (node.childElementCount > 0) { + return node.querySelector("a[href]"); + } else if ((_a = node.shadowRoot) === null || _a === void 0 ? void 0 : _a.childElementCount) { + return (_b = node.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector("a[href]"); + } else + return null; + } + /** + * Sets ARIA Current for the current node + * If child node with an anchor tag and with href is found then set aria-current to correct value for the child node, + * otherwise apply aria-current to the host element, with an href + */ + setAriaCurrent(item, isLastNode) { + const childNodeWithHref = this.findChildWithHref(item); + if (childNodeWithHref === null && item.hasAttribute("href") && item instanceof BreadcrumbItem) { + isLastNode ? item.setAttribute("aria-current", "page") : item.removeAttribute("aria-current"); + } else if (childNodeWithHref !== null) { + isLastNode ? childNodeWithHref.setAttribute("aria-current", "page") : childNodeWithHref.removeAttribute("aria-current"); + } + } + }; + __decorate([ + observable + ], Breadcrumb.prototype, "slottedBreadcrumbItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js + var init_breadcrumb2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js"() { + init_breadcrumb_template(); + init_breadcrumb(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js + var buttonTemplate; + var init_button_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js"() { + init_esm(); + init_start_end(); + buttonTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js + function FormAssociated(BaseCtor) { + const C = class extends BaseCtor { + constructor(...args) { + super(...args); + this.dirtyValue = false; + this.disabled = false; + this.proxyEventsToBlock = ["change", "click"]; + this.proxyInitialized = false; + this.required = false; + this.initialValue = this.initialValue || ""; + if (!this.elementInternals) { + this.formResetCallback = this.formResetCallback.bind(this); + } + } + /** + * Must evaluate to true to enable elementInternals. + * Feature detects API support and resolve respectively + * + * @internal + */ + static get formAssociated() { + return supportsElementInternals; + } + /** + * Returns the validity state of the element + * + * @alpha + */ + get validity() { + return this.elementInternals ? this.elementInternals.validity : this.proxy.validity; + } + /** + * Retrieve a reference to the associated form. + * Returns null if not associated to any form. + * + * @alpha + */ + get form() { + return this.elementInternals ? this.elementInternals.form : this.proxy.form; + } + /** + * Retrieve the localized validation message, + * or custom validation message if set. + * + * @alpha + */ + get validationMessage() { + return this.elementInternals ? this.elementInternals.validationMessage : this.proxy.validationMessage; + } + /** + * Whether the element will be validated when the + * form is submitted + */ + get willValidate() { + return this.elementInternals ? this.elementInternals.willValidate : this.proxy.willValidate; + } + /** + * A reference to all associated label elements + */ + get labels() { + if (this.elementInternals) { + return Object.freeze(Array.from(this.elementInternals.labels)); + } else if (this.proxy instanceof HTMLElement && this.proxy.ownerDocument && this.id) { + const parentLabels = this.proxy.labels; + const forLabels = Array.from(this.proxy.getRootNode().querySelectorAll(`[for='${this.id}']`)); + const labels = parentLabels ? forLabels.concat(Array.from(parentLabels)) : forLabels; + return Object.freeze(labels); + } else { + return emptyArray; + } + } + /** + * Invoked when the `value` property changes + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `valueChanged` method + * They must be sure to invoke `super.valueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + valueChanged(previous, next) { + this.dirtyValue = true; + if (this.proxy instanceof HTMLElement) { + this.proxy.value = this.value; + } + this.currentValue = this.value; + this.setFormValue(this.value); + this.validate(); + } + currentValueChanged() { + this.value = this.currentValue; + } + /** + * Invoked when the `initialValue` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `initialValueChanged` method + * They must be sure to invoke `super.initialValueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + /** + * Invoked when the `disabled` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `disabledChanged` method + * They must be sure to invoke `super.disabledChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + disabledChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.disabled = this.disabled; + } + DOM.queueUpdate(() => this.classList.toggle("disabled", this.disabled)); + } + /** + * Invoked when the `name` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `nameChanged` method + * They must be sure to invoke `super.nameChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + nameChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.name = this.name; + } + } + /** + * Invoked when the `required` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `requiredChanged` method + * They must be sure to invoke `super.requiredChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + requiredChanged(prev, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.required = this.required; + } + DOM.queueUpdate(() => this.classList.toggle("required", this.required)); + this.validate(); + } + /** + * The element internals object. Will only exist + * in browsers supporting the attachInternals API + */ + get elementInternals() { + if (!supportsElementInternals) { + return null; + } + let internals = InternalsMap.get(this); + if (!internals) { + internals = this.attachInternals(); + InternalsMap.set(this, internals); + } + return internals; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("keypress", this._keypressHandler); + if (!this.value) { + this.value = this.initialValue; + this.dirtyValue = false; + } + if (!this.elementInternals) { + this.attachProxy(); + if (this.form) { + this.form.addEventListener("reset", this.formResetCallback); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.proxyEventsToBlock.forEach((name) => this.proxy.removeEventListener(name, this.stopPropagation)); + if (!this.elementInternals && this.form) { + this.form.removeEventListener("reset", this.formResetCallback); + } + } + /** + * Return the current validity of the element. + */ + checkValidity() { + return this.elementInternals ? this.elementInternals.checkValidity() : this.proxy.checkValidity(); + } + /** + * Return the current validity of the element. + * If false, fires an invalid event at the element. + */ + reportValidity() { + return this.elementInternals ? this.elementInternals.reportValidity() : this.proxy.reportValidity(); + } + /** + * Set the validity of the control. In cases when the elementInternals object is not + * available (and the proxy element is used to report validity), this function will + * do nothing unless a message is provided, at which point the setCustomValidity method + * of the proxy element will be invoked with the provided message. + * @param flags - Validity flags + * @param message - Optional message to supply + * @param anchor - Optional element used by UA to display an interactive validation UI + */ + setValidity(flags, message, anchor) { + if (this.elementInternals) { + this.elementInternals.setValidity(flags, message, anchor); + } else if (typeof message === "string") { + this.proxy.setCustomValidity(message); + } + } + /** + * Invoked when a connected component's form or fieldset has its disabled + * state changed. + * @param disabled - the disabled value of the form / fieldset + */ + formDisabledCallback(disabled) { + this.disabled = disabled; + } + formResetCallback() { + this.value = this.initialValue; + this.dirtyValue = false; + } + /** + * Attach the proxy element to the DOM + */ + attachProxy() { + var _a; + if (!this.proxyInitialized) { + this.proxyInitialized = true; + this.proxy.style.display = "none"; + this.proxyEventsToBlock.forEach((name) => this.proxy.addEventListener(name, this.stopPropagation)); + this.proxy.disabled = this.disabled; + this.proxy.required = this.required; + if (typeof this.name === "string") { + this.proxy.name = this.name; + } + if (typeof this.value === "string") { + this.proxy.value = this.value; + } + this.proxy.setAttribute("slot", proxySlotName); + this.proxySlot = document.createElement("slot"); + this.proxySlot.setAttribute("name", proxySlotName); + } + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(this.proxySlot); + this.appendChild(this.proxy); + } + /** + * Detach the proxy element from the DOM + */ + detachProxy() { + var _a; + this.removeChild(this.proxy); + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.removeChild(this.proxySlot); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate(anchor) { + if (this.proxy instanceof HTMLElement) { + this.setValidity(this.proxy.validity, this.proxy.validationMessage, anchor); + } + } + /** + * Associates the provided value (and optional state) with the parent form. + * @param value - The value to set + * @param state - The state object provided to during session restores and when autofilling. + */ + setFormValue(value, state) { + if (this.elementInternals) { + this.elementInternals.setFormValue(value, state || value); + } + } + _keypressHandler(e) { + switch (e.key) { + case keyEnter: + if (this.form instanceof HTMLFormElement) { + const defaultButton = this.form.querySelector("[type=submit]"); + defaultButton === null || defaultButton === void 0 ? void 0 : defaultButton.click(); + } + break; + } + } + /** + * Used to stop propagation of proxy element events + * @param e - Event object + */ + stopPropagation(e) { + e.stopPropagation(); + } + }; + attr({ mode: "boolean" })(C.prototype, "disabled"); + attr({ mode: "fromView", attribute: "value" })(C.prototype, "initialValue"); + attr({ attribute: "current-value" })(C.prototype, "currentValue"); + attr(C.prototype, "name"); + attr({ mode: "boolean" })(C.prototype, "required"); + observable(C.prototype, "value"); + return C; + } + function CheckableFormAssociated(BaseCtor) { + class C extends FormAssociated(BaseCtor) { + } + class D extends C { + constructor(...args) { + super(args); + this.dirtyChecked = false; + this.checkedAttribute = false; + this.checked = false; + this.dirtyChecked = false; + } + checkedAttributeChanged() { + this.defaultChecked = this.checkedAttribute; + } + /** + * @internal + */ + defaultCheckedChanged() { + if (!this.dirtyChecked) { + this.checked = this.defaultChecked; + this.dirtyChecked = false; + } + } + checkedChanged(prev, next) { + if (!this.dirtyChecked) { + this.dirtyChecked = true; + } + this.currentChecked = this.checked; + this.updateForm(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.checked = this.checked; + } + if (prev !== void 0) { + this.$emit("change"); + } + this.validate(); + } + currentCheckedChanged(prev, next) { + this.checked = this.currentChecked; + } + updateForm() { + const value = this.checked ? this.value : null; + this.setFormValue(value, value); + } + connectedCallback() { + super.connectedCallback(); + this.updateForm(); + } + formResetCallback() { + super.formResetCallback(); + this.checked = !!this.checkedAttribute; + this.dirtyChecked = false; + } + } + attr({ attribute: "checked", mode: "boolean" })(D.prototype, "checkedAttribute"); + attr({ attribute: "current-checked", converter: booleanConverter })(D.prototype, "currentChecked"); + observable(D.prototype, "defaultChecked"); + observable(D.prototype, "checked"); + return D; + } + var proxySlotName, ElementInternalsKey, supportsElementInternals, InternalsMap; + var init_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js"() { + init_esm(); + init_dist2(); + proxySlotName = "form-associated-proxy"; + ElementInternalsKey = "ElementInternals"; + supportsElementInternals = ElementInternalsKey in window && "setFormValue" in window[ElementInternalsKey].prototype; + InternalsMap = /* @__PURE__ */ new WeakMap(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js + var _Button, FormAssociatedButton; + var init_button_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Button = class extends FoundationElement { + }; + FormAssociatedButton = class extends FormAssociated(_Button) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.js + var Button, DelegatesARIAButton; + var init_button = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_button_form_associated(); + Button = class extends FormAssociatedButton { + constructor() { + super(...arguments); + this.handleClick = (e) => { + var _a; + if (this.disabled && ((_a = this.defaultSlottedContent) === null || _a === void 0 ? void 0 : _a.length) <= 1) { + e.stopPropagation(); + } + }; + this.handleSubmission = () => { + if (!this.form) { + return; + } + const attached = this.proxy.isConnected; + if (!attached) { + this.attachProxy(); + } + typeof this.form.requestSubmit === "function" ? this.form.requestSubmit(this.proxy) : this.proxy.click(); + if (!attached) { + this.detachProxy(); + } + }; + this.handleFormReset = () => { + var _a; + (_a = this.form) === null || _a === void 0 ? void 0 : _a.reset(); + }; + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + this.control.focus(); + }; + } + }; + } + formactionChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formAction = this.formaction; + } + } + formenctypeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formEnctype = this.formenctype; + } + } + formmethodChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formMethod = this.formmethod; + } + } + formnovalidateChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formNoValidate = this.formnovalidate; + } + } + formtargetChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formTarget = this.formtarget; + } + } + typeChanged(previous, next) { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + } + next === "submit" && this.addEventListener("click", this.handleSubmission); + previous === "submit" && this.removeEventListener("click", this.handleSubmission); + next === "reset" && this.addEventListener("click", this.handleFormReset); + previous === "reset" && this.removeEventListener("click", this.handleFormReset); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.handleUnsupportedDelegatesFocus(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.addEventListener("click", this.handleClick); + }); + } + } + /** + * @internal + */ + disconnectedCallback() { + var _a; + super.disconnectedCallback(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.removeEventListener("click", this.handleClick); + }); + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], Button.prototype, "formId", void 0); + __decorate([ + attr + ], Button.prototype, "formaction", void 0); + __decorate([ + attr + ], Button.prototype, "formenctype", void 0); + __decorate([ + attr + ], Button.prototype, "formmethod", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "formnovalidate", void 0); + __decorate([ + attr + ], Button.prototype, "formtarget", void 0); + __decorate([ + attr + ], Button.prototype, "type", void 0); + __decorate([ + observable + ], Button.prototype, "defaultSlottedContent", void 0); + DelegatesARIAButton = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIAButton.prototype, "ariaExpanded", void 0); + __decorate([ + attr({ attribute: "aria-pressed" }) + ], DelegatesARIAButton.prototype, "ariaPressed", void 0); + applyMixins(DelegatesARIAButton, ARIAGlobalStatesAndProperties); + applyMixins(Button, StartEnd, DelegatesARIAButton); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/index.js + var init_button2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/index.js"() { + init_button_template(); + init_button(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js + var DateFormatter; + var init_date_formatter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js"() { + DateFormatter = class { + constructor(config) { + this.dayFormat = "numeric"; + this.weekdayFormat = "long"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.date = /* @__PURE__ */ new Date(); + if (config) { + for (const key in config) { + const value = config[key]; + if (key === "date") { + this.date = this.getDateObject(value); + } else { + this[key] = value; + } + } + } + } + /** + * Helper function to make sure that the DateFormatter is working with an instance of Date + * @param date - The date as an object, string or Date insance + * @returns - A Date instance + * @public + */ + getDateObject(date) { + if (typeof date === "string") { + const dates = date.split(/[/-]/); + if (dates.length < 3) { + return /* @__PURE__ */ new Date(); + } + return new Date(parseInt(dates[2], 10), parseInt(dates[0], 10) - 1, parseInt(dates[1], 10)); + } else if ("day" in date && "month" in date && "year" in date) { + const { day, month, year } = date; + return new Date(year, month - 1, day); + } + return date; + } + /** + * + * @param date - a valide date as either a Date, string, objec or a DateFormatter + * @param format - The formatting for the string + * @param locale - locale data used for formatting + * @returns A localized string of the date provided + * @public + */ + getDate(date = this.date, format = { + weekday: this.weekdayFormat, + month: this.monthFormat, + day: this.dayFormat, + year: this.yearFormat + }, locale = this.locale) { + const dateObj = this.getDateObject(date); + if (!dateObj.getTime()) { + return ""; + } + const optionsWithTimeZone = Object.assign({ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }, format); + return new Intl.DateTimeFormat(locale, optionsWithTimeZone).format(dateObj); + } + /** + * + * @param day - Day to localize + * @param format - The formatting for the day + * @param locale - The locale data used for formatting + * @returns - A localized number for the day + * @public + */ + getDay(day = this.date.getDate(), format = this.dayFormat, locale = this.locale) { + return this.getDate({ month: 1, day, year: 2020 }, { day: format }, locale); + } + /** + * + * @param month - The month to localize + * @param format - The formatting for the month + * @param locale - The locale data used for formatting + * @returns - A localized name of the month + * @public + */ + getMonth(month = this.date.getMonth() + 1, format = this.monthFormat, locale = this.locale) { + return this.getDate({ month, day: 2, year: 2020 }, { month: format }, locale); + } + /** + * + * @param year - The year to localize + * @param format - The formatting for the year + * @param locale - The locale data used for formatting + * @returns - A localized string for the year + * @public + */ + getYear(year = this.date.getFullYear(), format = this.yearFormat, locale = this.locale) { + return this.getDate({ month: 2, day: 2, year }, { year: format }, locale); + } + /** + * + * @param weekday - The number of the weekday, defaults to Sunday + * @param format - The formatting for the weekday label + * @param locale - The locale data used for formatting + * @returns - A formatted weekday label + * @public + */ + getWeekday(weekday = 0, format = this.weekdayFormat, locale = this.locale) { + const date = `1-${weekday + 1}-2017`; + return this.getDate(date, { weekday: format }, locale); + } + /** + * + * @param format - The formatting for the weekdays + * @param locale - The locale data used for formatting + * @returns - An array of the weekday labels + * @public + */ + getWeekdays(format = this.weekdayFormat, locale = this.locale) { + return Array(7).fill(null).map((_, day) => this.getWeekday(day, format, locale)); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js + var Calendar; + var init_calendar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_date_formatter(); + Calendar = class extends FoundationElement { + constructor() { + super(...arguments); + this.dateFormatter = new DateFormatter(); + this.readonly = false; + this.locale = "en-US"; + this.month = (/* @__PURE__ */ new Date()).getMonth() + 1; + this.year = (/* @__PURE__ */ new Date()).getFullYear(); + this.dayFormat = "numeric"; + this.weekdayFormat = "short"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.minWeeks = 0; + this.disabledDates = ""; + this.selectedDates = ""; + this.oneDayInMs = 864e5; + } + localeChanged() { + this.dateFormatter.locale = this.locale; + } + dayFormatChanged() { + this.dateFormatter.dayFormat = this.dayFormat; + } + weekdayFormatChanged() { + this.dateFormatter.weekdayFormat = this.weekdayFormat; + } + monthFormatChanged() { + this.dateFormatter.monthFormat = this.monthFormat; + } + yearFormatChanged() { + this.dateFormatter.yearFormat = this.yearFormat; + } + /** + * Gets data needed to render about a calendar month as well as the previous and next months + * @param year - year of the calendar + * @param month - month of the calendar + * @returns - an object with data about the current and 2 surrounding months + * @public + */ + getMonthInfo(month = this.month, year = this.year) { + const getFirstDay = (date) => new Date(date.getFullYear(), date.getMonth(), 1).getDay(); + const getLength = (date) => { + const nextMonth2 = new Date(date.getFullYear(), date.getMonth() + 1, 1); + return new Date(nextMonth2.getTime() - this.oneDayInMs).getDate(); + }; + const thisMonth = new Date(year, month - 1); + const nextMonth = new Date(year, month); + const previousMonth = new Date(year, month - 2); + return { + length: getLength(thisMonth), + month, + start: getFirstDay(thisMonth), + year, + previous: { + length: getLength(previousMonth), + month: previousMonth.getMonth() + 1, + start: getFirstDay(previousMonth), + year: previousMonth.getFullYear() + }, + next: { + length: getLength(nextMonth), + month: nextMonth.getMonth() + 1, + start: getFirstDay(nextMonth), + year: nextMonth.getFullYear() + } + }; + } + /** + * A list of calendar days + * @param info - an object containing the information needed to render a calendar month + * @param minWeeks - minimum number of weeks to show + * @returns a list of days in a calendar month + * @public + */ + getDays(info = this.getMonthInfo(), minWeeks = this.minWeeks) { + minWeeks = minWeeks > 10 ? 10 : minWeeks; + const { start, length, previous, next } = info; + const days = []; + let dayCount = 1 - start; + while (dayCount < length + 1 || days.length < minWeeks || days[days.length - 1].length % 7 !== 0) { + const { month, year } = dayCount < 1 ? previous : dayCount > length ? next : info; + const day = dayCount < 1 ? previous.length + dayCount : dayCount > length ? dayCount - length : dayCount; + const dateString = `${month}-${day}-${year}`; + const disabled = this.dateInString(dateString, this.disabledDates); + const selected = this.dateInString(dateString, this.selectedDates); + const date = { + day, + month, + year, + disabled, + selected + }; + const target = days[days.length - 1]; + if (days.length === 0 || target.length % 7 === 0) { + days.push([date]); + } else { + target.push(date); + } + dayCount++; + } + return days; + } + /** + * A helper function that checks if a date exists in a list of dates + * @param date - A date objec that includes the day, month and year + * @param datesString - a comma separated list of dates + * @returns - Returns true if it found the date in the list of dates + * @public + */ + dateInString(date, datesString) { + const dates = datesString.split(",").map((str) => str.trim()); + date = typeof date === "string" ? date : `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`; + return dates.some((d) => d === date); + } + /** + * Creates a class string for the day container + * @param date - date of the calendar cell + * @returns - string of class names + * @public + */ + getDayClassNames(date, todayString) { + const { day, month, year, disabled, selected } = date; + const today = todayString === `${month}-${day}-${year}`; + const inactive = this.month !== month; + return [ + "day", + today && "today", + inactive && "inactive", + disabled && "disabled", + selected && "selected" + ].filter(Boolean).join(" "); + } + /** + * Returns a list of weekday labels + * @returns An array of weekday text and full text if abbreviated + * @public + */ + getWeekdayText() { + const weekdayText = this.dateFormatter.getWeekdays().map((text) => ({ text })); + if (this.weekdayFormat !== "long") { + const longText = this.dateFormatter.getWeekdays("long"); + weekdayText.forEach((weekday, index) => { + weekday.abbr = longText[index]; + }); + } + return weekdayText; + } + /** + * Emits the "date-select" event with the day, month and year. + * @param date - Date cell + * @public + */ + handleDateSelect(event, day) { + event.preventDefault; + this.$emit("dateselected", day); + } + /** + * Handles keyboard events on a cell + * @param event - Keyboard event + * @param date - Date of the cell selected + */ + handleKeydown(event, date) { + if (event.key === keyEnter) { + this.handleDateSelect(event, date); + } + return true; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Calendar.prototype, "readonly", void 0); + __decorate([ + attr + ], Calendar.prototype, "locale", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "month", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "year", void 0); + __decorate([ + attr({ attribute: "day-format", mode: "fromView" }) + ], Calendar.prototype, "dayFormat", void 0); + __decorate([ + attr({ attribute: "weekday-format", mode: "fromView" }) + ], Calendar.prototype, "weekdayFormat", void 0); + __decorate([ + attr({ attribute: "month-format", mode: "fromView" }) + ], Calendar.prototype, "monthFormat", void 0); + __decorate([ + attr({ attribute: "year-format", mode: "fromView" }) + ], Calendar.prototype, "yearFormat", void 0); + __decorate([ + attr({ attribute: "min-weeks", converter: nullableNumberConverter }) + ], Calendar.prototype, "minWeeks", void 0); + __decorate([ + attr({ attribute: "disabled-dates" }) + ], Calendar.prototype, "disabledDates", void 0); + __decorate([ + attr({ attribute: "selected-dates" }) + ], Calendar.prototype, "selectedDates", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js + var GenerateHeaderOptions, DataGridCellTypes, DataGridRowTypes; + var init_data_grid_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js"() { + GenerateHeaderOptions = { + none: "none", + default: "default", + sticky: "sticky" + }; + DataGridCellTypes = { + default: "default", + columnHeader: "columnheader", + rowHeader: "rowheader" + }; + DataGridRowTypes = { + default: "default", + header: "header", + stickyHeader: "sticky-header" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js + var DataGridRow; + var init_data_grid_row = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGridRow = class extends FoundationElement { + constructor() { + super(...arguments); + this.rowType = DataGridRowTypes.default; + this.rowData = null; + this.columnDefinitions = null; + this.isActiveRow = false; + this.cellsRepeatBehavior = null; + this.cellsPlaceholder = null; + this.focusColumnIndex = 0; + this.refocusOnLoad = false; + this.updateRowStyle = () => { + this.style.gridTemplateColumns = this.gridTemplateColumns; + }; + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowStyle(); + } + } + rowTypeChanged() { + if (this.$fastController.isConnected) { + this.updateItemTemplate(); + } + } + rowDataChanged() { + if (this.rowData !== null && this.isActiveRow) { + this.refocusOnLoad = true; + return; + } + } + cellItemTemplateChanged() { + this.updateItemTemplate(); + } + headerCellItemTemplateChanged() { + this.updateItemTemplate(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.cellsRepeatBehavior === null) { + this.cellsPlaceholder = document.createComment(""); + this.appendChild(this.cellsPlaceholder); + this.updateItemTemplate(); + this.cellsRepeatBehavior = new RepeatDirective((x) => x.columnDefinitions, (x) => x.activeCellItemTemplate, { positioning: true }).createBehavior(this.cellsPlaceholder); + this.$fastController.addBehaviors([this.cellsRepeatBehavior]); + } + this.addEventListener("cell-focused", this.handleCellFocus); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.updateRowStyle(); + if (this.refocusOnLoad) { + this.refocusOnLoad = false; + if (this.cellElements.length > this.focusColumnIndex) { + this.cellElements[this.focusColumnIndex].focus(); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("cell-focused", this.handleCellFocus); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + } + handleFocusout(e) { + if (!this.contains(e.target)) { + this.isActiveRow = false; + this.focusColumnIndex = 0; + } + } + handleCellFocus(e) { + this.isActiveRow = true; + this.focusColumnIndex = this.cellElements.indexOf(e.target); + this.$emit("row-focused", this); + } + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusColumnIndex = 0; + switch (e.key) { + case keyArrowLeft: + newFocusColumnIndex = Math.max(0, this.focusColumnIndex - 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyArrowRight: + newFocusColumnIndex = Math.min(this.cellElements.length - 1, this.focusColumnIndex + 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyHome: + if (!e.ctrlKey) { + this.cellElements[0].focus(); + e.preventDefault(); + } + break; + case keyEnd: + if (!e.ctrlKey) { + this.cellElements[this.cellElements.length - 1].focus(); + e.preventDefault(); + } + break; + } + } + updateItemTemplate() { + this.activeCellItemTemplate = this.rowType === DataGridRowTypes.default && this.cellItemTemplate !== void 0 ? this.cellItemTemplate : this.rowType === DataGridRowTypes.default && this.cellItemTemplate === void 0 ? this.defaultCellItemTemplate : this.headerCellItemTemplate !== void 0 ? this.headerCellItemTemplate : this.defaultHeaderCellItemTemplate; + } + }; + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGridRow.prototype, "gridTemplateColumns", void 0); + __decorate([ + attr({ attribute: "row-type" }) + ], DataGridRow.prototype, "rowType", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowIndex", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "isActiveRow", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "activeCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultHeaderCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js + function createRowItemTemplate(context) { + const rowTag = context.tagFor(DataGridRow); + return html` + <${rowTag} + :rowData="${(x) => x}" + :cellItemTemplate="${(x, c) => c.parent.cellItemTemplate}" + :headerCellItemTemplate="${(x, c) => c.parent.headerCellItemTemplate}" + > +`; + } + var dataGridTemplate; + var init_data_grid_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js"() { + init_esm(); + init_data_grid_row(); + dataGridTemplate = (context, definition) => { + const rowItemTemplate = createRowItemTemplate(context); + const rowTag = context.tagFor(DataGridRow); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js + var DataGrid; + var init_data_grid = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGrid = class _DataGrid extends FoundationElement { + constructor() { + super(); + this.noTabbing = false; + this.generateHeader = GenerateHeaderOptions.default; + this.rowsData = []; + this.columnDefinitions = null; + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + this.rowsPlaceholder = null; + this.generatedHeader = null; + this.isUpdatingFocus = false; + this.pendingFocusUpdate = false; + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = true; + this.generatedGridTemplateColumns = ""; + this.focusOnCell = (rowIndex, columnIndex, scrollIntoView) => { + if (this.rowElements.length === 0) { + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + return; + } + const focusRowIndex = Math.max(0, Math.min(this.rowElements.length - 1, rowIndex)); + const focusRow = this.rowElements[focusRowIndex]; + const cells = focusRow.querySelectorAll('[role="cell"], [role="gridcell"], [role="columnheader"], [role="rowheader"]'); + const focusColumnIndex = Math.max(0, Math.min(cells.length - 1, columnIndex)); + const focusTarget = cells[focusColumnIndex]; + if (scrollIntoView && this.scrollHeight !== this.clientHeight && (focusRowIndex < this.focusRowIndex && this.scrollTop > 0 || focusRowIndex > this.focusRowIndex && this.scrollTop < this.scrollHeight - this.clientHeight)) { + focusTarget.scrollIntoView({ block: "center", inline: "center" }); + } + focusTarget.focus(); + }; + this.onChildListChange = (mutations, observer) => { + if (mutations && mutations.length) { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((newNode) => { + if (newNode.nodeType === 1 && newNode.getAttribute("role") === "row") { + newNode.columnDefinitions = this.columnDefinitions; + } + }); + }); + this.queueRowIndexUpdate(); + } + }; + this.queueRowIndexUpdate = () => { + if (!this.rowindexUpdateQueued) { + this.rowindexUpdateQueued = true; + DOM.queueUpdate(this.updateRowIndexes); + } + }; + this.updateRowIndexes = () => { + let newGridTemplateColumns = this.gridTemplateColumns; + if (newGridTemplateColumns === void 0) { + if (this.generatedGridTemplateColumns === "" && this.rowElements.length > 0) { + const firstRow = this.rowElements[0]; + this.generatedGridTemplateColumns = new Array(firstRow.cellElements.length).fill("1fr").join(" "); + } + newGridTemplateColumns = this.generatedGridTemplateColumns; + } + this.rowElements.forEach((element, index) => { + const thisRow = element; + thisRow.rowIndex = index; + thisRow.gridTemplateColumns = newGridTemplateColumns; + if (this.columnDefinitionsStale) { + thisRow.columnDefinitions = this.columnDefinitions; + } + }); + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = false; + }; + } + /** + * generates a gridTemplateColumns based on columndata array + */ + static generateTemplateColumns(columnDefinitions) { + let templateColumns = ""; + columnDefinitions.forEach((column) => { + templateColumns = `${templateColumns}${templateColumns === "" ? "" : " "}${"1fr"}`; + }); + return templateColumns; + } + noTabbingChanged() { + if (this.$fastController.isConnected) { + if (this.noTabbing) { + this.setAttribute("tabIndex", "-1"); + } else { + this.setAttribute("tabIndex", this.contains(document.activeElement) || this === document.activeElement ? "-1" : "0"); + } + } + } + generateHeaderChanged() { + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowIndexes(); + } + } + rowsDataChanged() { + if (this.columnDefinitions === null && this.rowsData.length > 0) { + this.columnDefinitions = _DataGrid.generateColumns(this.rowsData[0]); + } + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + columnDefinitionsChanged() { + if (this.columnDefinitions === null) { + this.generatedGridTemplateColumns = ""; + return; + } + this.generatedGridTemplateColumns = _DataGrid.generateTemplateColumns(this.columnDefinitions); + if (this.$fastController.isConnected) { + this.columnDefinitionsStale = true; + this.queueRowIndexUpdate(); + } + } + headerCellItemTemplateChanged() { + if (this.$fastController.isConnected) { + if (this.generatedHeader !== null) { + this.generatedHeader.headerCellItemTemplate = this.headerCellItemTemplate; + } + } + } + focusRowIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + focusColumnIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.rowItemTemplate === void 0) { + this.rowItemTemplate = this.defaultRowItemTemplate; + } + this.rowsPlaceholder = document.createComment(""); + this.appendChild(this.rowsPlaceholder); + this.toggleGeneratedHeader(); + this.rowsRepeatBehavior = new RepeatDirective((x) => x.rowsData, (x) => x.rowItemTemplate, { positioning: true }).createBehavior(this.rowsPlaceholder); + this.$fastController.addBehaviors([this.rowsRepeatBehavior]); + this.addEventListener("row-focused", this.handleRowFocus); + this.addEventListener(eventFocus, this.handleFocus); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.addEventListener(eventFocusOut, this.handleFocusOut); + this.observer = new MutationObserver(this.onChildListChange); + this.observer.observe(this, { childList: true }); + if (this.noTabbing) { + this.setAttribute("tabindex", "-1"); + } + DOM.queueUpdate(this.queueRowIndexUpdate); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("row-focused", this.handleRowFocus); + this.removeEventListener(eventFocus, this.handleFocus); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.removeEventListener(eventFocusOut, this.handleFocusOut); + this.observer.disconnect(); + this.rowsPlaceholder = null; + this.generatedHeader = null; + } + /** + * @internal + */ + handleRowFocus(e) { + this.isUpdatingFocus = true; + const focusRow = e.target; + this.focusRowIndex = this.rowElements.indexOf(focusRow); + this.focusColumnIndex = focusRow.focusColumnIndex; + this.setAttribute("tabIndex", "-1"); + this.isUpdatingFocus = false; + } + /** + * @internal + */ + handleFocus(e) { + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + /** + * @internal + */ + handleFocusOut(e) { + if (e.relatedTarget === null || !this.contains(e.relatedTarget)) { + this.setAttribute("tabIndex", this.noTabbing ? "-1" : "0"); + } + } + /** + * @internal + */ + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusRowIndex; + const maxIndex = this.rowElements.length - 1; + const currentGridBottom = this.offsetHeight + this.scrollTop; + const lastRow = this.rowElements[maxIndex]; + switch (e.key) { + case keyArrowUp: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex - 1, this.focusColumnIndex, true); + break; + case keyArrowDown: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex + 1, this.focusColumnIndex, true); + break; + case keyPageUp: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex === 0) { + this.focusOnCell(0, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex - 1; + for (newFocusRowIndex; newFocusRowIndex >= 0; newFocusRowIndex--) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop < this.scrollTop) { + this.scrollTop = thisRow.offsetTop + thisRow.clientHeight - this.clientHeight; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyPageDown: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex >= maxIndex || lastRow.offsetTop + lastRow.offsetHeight <= currentGridBottom) { + this.focusOnCell(maxIndex, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex + 1; + for (newFocusRowIndex; newFocusRowIndex <= maxIndex; newFocusRowIndex++) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop + thisRow.offsetHeight > currentGridBottom) { + let stickyHeaderOffset = 0; + if (this.generateHeader === GenerateHeaderOptions.sticky && this.generatedHeader !== null) { + stickyHeaderOffset = this.generatedHeader.clientHeight; + } + this.scrollTop = thisRow.offsetTop - stickyHeaderOffset; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyHome: + if (e.ctrlKey) { + e.preventDefault(); + this.focusOnCell(0, 0, true); + } + break; + case keyEnd: + if (e.ctrlKey && this.columnDefinitions !== null) { + e.preventDefault(); + this.focusOnCell(this.rowElements.length - 1, this.columnDefinitions.length - 1, true); + } + break; + } + } + queueFocusUpdate() { + if (this.isUpdatingFocus && (this.contains(document.activeElement) || this === document.activeElement)) { + return; + } + if (this.pendingFocusUpdate === false) { + this.pendingFocusUpdate = true; + DOM.queueUpdate(() => this.updateFocus()); + } + } + updateFocus() { + this.pendingFocusUpdate = false; + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + toggleGeneratedHeader() { + if (this.generatedHeader !== null) { + this.removeChild(this.generatedHeader); + this.generatedHeader = null; + } + if (this.generateHeader !== GenerateHeaderOptions.none && this.rowsData.length > 0) { + const generatedHeaderElement = document.createElement(this.rowElementTag); + this.generatedHeader = generatedHeaderElement; + this.generatedHeader.columnDefinitions = this.columnDefinitions; + this.generatedHeader.gridTemplateColumns = this.gridTemplateColumns; + this.generatedHeader.rowType = this.generateHeader === GenerateHeaderOptions.sticky ? DataGridRowTypes.stickyHeader : DataGridRowTypes.header; + if (this.firstChild !== null || this.rowsPlaceholder !== null) { + this.insertBefore(generatedHeaderElement, this.firstChild !== null ? this.firstChild : this.rowsPlaceholder); + } + return; + } + } + }; + DataGrid.generateColumns = (row) => { + return Object.getOwnPropertyNames(row).map((property, index) => { + return { + columnDataKey: property, + gridColumn: `${index}` + }; + }); + }; + __decorate([ + attr({ attribute: "no-tabbing", mode: "boolean" }) + ], DataGrid.prototype, "noTabbing", void 0); + __decorate([ + attr({ attribute: "generate-header" }) + ], DataGrid.prototype, "generateHeader", void 0); + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGrid.prototype, "gridTemplateColumns", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowsData", void 0); + __decorate([ + observable + ], DataGrid.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusRowIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusColumnIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "defaultRowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElementTag", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js + var defaultCellContentsTemplate, defaultHeaderCellContentsTemplate, DataGridCell; + var init_data_grid_cell = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + defaultCellContentsTemplate = html` + +`; + defaultHeaderCellContentsTemplate = html` + +`; + DataGridCell = class extends FoundationElement { + constructor() { + super(...arguments); + this.cellType = DataGridCellTypes.default; + this.rowData = null; + this.columnDefinition = null; + this.isActiveCell = false; + this.customCellView = null; + this.updateCellStyle = () => { + this.style.gridColumn = this.gridColumn; + }; + } + cellTypeChanged() { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + gridColumnChanged() { + if (this.$fastController.isConnected) { + this.updateCellStyle(); + } + } + columnDefinitionChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.addEventListener(eventFocusIn, this.handleFocusin); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.style.gridColumn = `${((_a = this.columnDefinition) === null || _a === void 0 ? void 0 : _a.gridColumn) === void 0 ? 0 : this.columnDefinition.gridColumn}`; + this.updateCellView(); + this.updateCellStyle(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener(eventFocusIn, this.handleFocusin); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.disconnectCellView(); + } + handleFocusin(e) { + if (this.isActiveCell) { + return; + } + this.isActiveCell = true; + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition !== null && this.columnDefinition.headerCellInternalFocusQueue !== true && typeof this.columnDefinition.headerCellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + default: + if (this.columnDefinition !== null && this.columnDefinition.cellInternalFocusQueue !== true && typeof this.columnDefinition.cellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + } + this.$emit("cell-focused", this); + } + handleFocusout(e) { + if (this !== document.activeElement && !this.contains(document.activeElement)) { + this.isActiveCell = false; + } + } + handleKeydown(e) { + if (e.defaultPrevented || this.columnDefinition === null || this.cellType === DataGridCellTypes.default && this.columnDefinition.cellInternalFocusQueue !== true || this.cellType === DataGridCellTypes.columnHeader && this.columnDefinition.headerCellInternalFocusQueue !== true) { + return; + } + switch (e.key) { + case keyEnter: + case keyFunction2: + if (this.contains(document.activeElement) && document.activeElement !== this) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + default: + if (this.columnDefinition.cellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + } + break; + case keyEscape: + if (this.contains(document.activeElement) && document.activeElement !== this) { + this.focus(); + e.preventDefault(); + } + break; + } + } + updateCellView() { + this.disconnectCellView(); + if (this.columnDefinition === null) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellTemplate !== void 0) { + this.customCellView = this.columnDefinition.headerCellTemplate.render(this, this); + } else { + this.customCellView = defaultHeaderCellContentsTemplate.render(this, this); + } + break; + case void 0: + case DataGridCellTypes.rowHeader: + case DataGridCellTypes.default: + if (this.columnDefinition.cellTemplate !== void 0) { + this.customCellView = this.columnDefinition.cellTemplate.render(this, this); + } else { + this.customCellView = defaultCellContentsTemplate.render(this, this); + } + break; + } + } + disconnectCellView() { + if (this.customCellView !== null) { + this.customCellView.dispose(); + this.customCellView = null; + } + } + }; + __decorate([ + attr({ attribute: "cell-type" }) + ], DataGridCell.prototype, "cellType", void 0); + __decorate([ + attr({ attribute: "grid-column" }) + ], DataGridCell.prototype, "gridColumn", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "columnDefinition", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js + function createCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="${(x) => x.isRowHeader ? "rowheader" : void 0}" + grid-column="${(x, c) => c.index + 1}" + :rowData="${(x, c) => c.parent.rowData}" + :columnDefinition="${(x) => x}" + > +`; + } + function createHeaderCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="columnheader" + grid-column="${(x, c) => c.index + 1}" + :columnDefinition="${(x) => x}" + > +`; + } + var dataGridRowTemplate; + var init_data_grid_row_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js"() { + init_esm(); + init_data_grid_cell(); + dataGridRowTemplate = (context, definition) => { + const cellItemTemplate = createCellItemTemplate(context); + const headerCellItemTemplate = createHeaderCellItemTemplate(context); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js + var dataGridCellTemplate; + var init_data_grid_cell_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js"() { + init_esm(); + dataGridCellTemplate = (context, definition) => { + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js + var init_data_grid2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js"() { + init_data_grid_template(); + init_data_grid(); + init_data_grid_row_template(); + init_data_grid_row(); + init_data_grid_cell_template(); + init_data_grid_cell(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js + var CalendarTitleTemplate; + var init_calendar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js"() { + init_esm(); + CalendarTitleTemplate = html` +
+ + ${(x) => x.dateFormatter.getMonth(x.month)} + + ${(x) => x.dateFormatter.getYear(x.year)} +
+`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js + var init_calendar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js"() { + init_calendar(); + init_calendar_template(); + init_date_formatter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js + var init_card_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.js + var init_card = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/index.js + var init_card2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/index.js"() { + init_card_template(); + init_card(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js + var checkboxTemplate; + var init_checkbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js"() { + init_esm(); + checkboxTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js + var _Checkbox, FormAssociatedCheckbox; + var init_checkbox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Checkbox = class extends FoundationElement { + }; + FormAssociatedCheckbox = class extends CheckableFormAssociated(_Checkbox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js + var Checkbox; + var init_checkbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_checkbox_form_associated(); + Checkbox = class extends FormAssociatedCheckbox { + constructor() { + super(); + this.initialValue = "on"; + this.indeterminate = false; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keySpace: + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Checkbox.prototype, "readOnly", void 0); + __decorate([ + observable + ], Checkbox.prototype, "defaultSlottedNodes", void 0); + __decorate([ + observable + ], Checkbox.prototype, "indeterminate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js + var init_checkbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js"() { + init_checkbox_template(); + init_checkbox(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js + function isListboxOption(el2) { + return isHTMLElement(el2) && (el2.getAttribute("role") === "option" || el2 instanceof HTMLOptionElement); + } + var ListboxOption, DelegatesARIAListboxOption; + var init_listbox_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + ListboxOption = class extends FoundationElement { + constructor(text, value, defaultSelected, selected) { + super(); + this.defaultSelected = false; + this.dirtySelected = false; + this.selected = this.defaultSelected; + this.dirtyValue = false; + if (text) { + this.textContent = text; + } + if (value) { + this.initialValue = value; + } + if (defaultSelected) { + this.defaultSelected = defaultSelected; + } + if (selected) { + this.selected = selected; + } + this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected); + this.proxy.disabled = this.disabled; + } + /** + * Updates the ariaChecked property when the checked property changes. + * + * @param prev - the previous checked value + * @param next - the current checked value + * + * @public + */ + checkedChanged(prev, next) { + if (typeof next === "boolean") { + this.ariaChecked = next ? "true" : "false"; + return; + } + this.ariaChecked = null; + } + /** + * Updates the proxy's text content when the default slot changes. + * @param prev - the previous content value + * @param next - the current content value + * + * @internal + */ + contentChanged(prev, next) { + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.textContent = this.textContent; + } + this.$emit("contentchange", null, { bubbles: true }); + } + defaultSelectedChanged() { + if (!this.dirtySelected) { + this.selected = this.defaultSelected; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.defaultSelected; + } + } + } + disabledChanged(prev, next) { + this.ariaDisabled = this.disabled ? "true" : "false"; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.disabled = this.disabled; + } + } + selectedAttributeChanged() { + this.defaultSelected = this.selectedAttribute; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.defaultSelected = this.defaultSelected; + } + } + selectedChanged() { + this.ariaSelected = this.selected ? "true" : "false"; + if (!this.dirtySelected) { + this.dirtySelected = true; + } + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.selected; + } + } + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + get label() { + var _a; + return (_a = this.value) !== null && _a !== void 0 ? _a : this.text; + } + get text() { + var _a, _b; + return (_b = (_a = this.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, " ").trim()) !== null && _b !== void 0 ? _b : ""; + } + set value(next) { + const newValue = `${next !== null && next !== void 0 ? next : ""}`; + this._value = newValue; + this.dirtyValue = true; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.value = newValue; + } + Observable.notify(this, "value"); + } + get value() { + var _a; + Observable.track(this, "value"); + return (_a = this._value) !== null && _a !== void 0 ? _a : this.text; + } + get form() { + return this.proxy ? this.proxy.form : null; + } + }; + __decorate([ + observable + ], ListboxOption.prototype, "checked", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "content", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "defaultSelected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxOption.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "selected", mode: "boolean" }) + ], ListboxOption.prototype, "selectedAttribute", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "selected", void 0); + __decorate([ + attr({ attribute: "value", mode: "fromView" }) + ], ListboxOption.prototype, "initialValue", void 0); + DelegatesARIAListboxOption = class { + }; + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0); + applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties); + applyMixins(ListboxOption, StartEnd, DelegatesARIAListboxOption); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js + var Listbox, DelegatesARIAListbox; + var init_listbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_listbox_option(); + init_aria_global(); + init_apply_mixins(); + Listbox = class _Listbox extends FoundationElement { + constructor() { + super(...arguments); + this._options = []; + this.selectedIndex = -1; + this.selectedOptions = []; + this.shouldSkipFocus = false; + this.typeaheadBuffer = ""; + this.typeaheadExpired = true; + this.typeaheadTimeout = -1; + } + /** + * The first selected option. + * + * @internal + */ + get firstSelectedOption() { + var _a; + return (_a = this.selectedOptions[0]) !== null && _a !== void 0 ? _a : null; + } + /** + * Returns true if there is one or more selectable option. + * + * @internal + */ + get hasSelectableOptions() { + return this.options.length > 0 && !this.options.every((o) => o.disabled); + } + /** + * The number of options. + * + * @public + */ + get length() { + var _a, _b; + return (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; + } + /** + * The list of options. + * + * @public + */ + get options() { + Observable.track(this, "options"); + return this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Flag for the typeahead timeout expiration. + * + * @deprecated use `Listbox.typeaheadExpired` + * @internal + */ + get typeAheadExpired() { + return this.typeaheadExpired; + } + set typeAheadExpired(value) { + this.typeaheadExpired = value; + } + /** + * Handle click events for listbox options. + * + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && !captured.disabled) { + this.selectedIndex = this.options.indexOf(captured); + return true; + } + } + /** + * Ensures that the provided option is focused and scrolled into view. + * + * @param optionToFocus - The option to focus + * @internal + */ + focusAndScrollOptionIntoView(optionToFocus = this.firstSelectedOption) { + if (this.contains(document.activeElement) && optionToFocus !== null) { + optionToFocus.focus(); + requestAnimationFrame(() => { + optionToFocus.scrollIntoView({ block: "nearest" }); + }); + } + } + /** + * Handles `focusin` actions for the component. When the component receives focus, + * the list of selected options is refreshed and the first selected option is scrolled + * into view. + * + * @internal + */ + focusinHandler(e) { + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Returns the options which match the current typeahead buffer. + * + * @internal + */ + getTypeaheadMatches() { + const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); + const re = new RegExp(`^${pattern}`, "gi"); + return this.options.filter((o) => o.text.trim().match(re)); + } + /** + * Determines the index of the next option which is selectable, if any. + * + * @param prev - the previous selected index + * @param next - the next index to select + * + * @internal + */ + getSelectableIndex(prev = this.selectedIndex, next) { + const direction = prev > next ? -1 : prev < next ? 1 : 0; + const potentialDirection = prev + direction; + let nextSelectableOption = null; + switch (direction) { + case -1: { + nextSelectableOption = this.options.reduceRight((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index < potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + case 1: { + nextSelectableOption = this.options.reduce((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index > potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + } + return this.options.indexOf(nextSelectableOption); + } + /** + * Handles external changes to child options. + * + * @param source - the source object + * @param propertyName - the property + * + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "selected": { + if (_Listbox.slottedOptionFilter(source)) { + this.selectedIndex = this.options.indexOf(source); + } + this.setSelectedOptions(); + break; + } + } + } + /** + * Moves focus to an option whose label matches characters typed by the user. + * Consecutive keystrokes are batched into a buffer of search text used + * to match against the set of options. If `TYPE_AHEAD_TIMEOUT_MS` passes + * between consecutive keystrokes, the search restarts. + * + * @param key - the key to be evaluated + * + * @internal + */ + handleTypeAhead(key) { + if (this.typeaheadTimeout) { + window.clearTimeout(this.typeaheadTimeout); + } + this.typeaheadTimeout = window.setTimeout(() => this.typeaheadExpired = true, _Listbox.TYPE_AHEAD_TIMEOUT_MS); + if (key.length > 1) { + return; + } + this.typeaheadBuffer = `${this.typeaheadExpired ? "" : this.typeaheadBuffer}${key}`; + } + /** + * Handles `keydown` actions for listbox navigation and typeahead. + * + * @internal + */ + keydownHandler(e) { + if (this.disabled) { + return true; + } + this.shouldSkipFocus = false; + const key = e.key; + switch (key) { + // Select the first available option + case keyHome: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectFirstOption(); + } + break; + } + // Select the next selectable option + case keyArrowDown: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectNextOption(); + } + break; + } + // Select the previous selectable option + case keyArrowUp: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectPreviousOption(); + } + break; + } + // Select the last available option + case keyEnd: { + e.preventDefault(); + this.selectLastOption(); + break; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEnter: + case keyEscape: { + return true; + } + case keySpace: { + if (this.typeaheadExpired) { + return true; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @internal + */ + mousedownHandler(e) { + this.shouldSkipFocus = !this.contains(document.activeElement); + return true; + } + /** + * Switches between single-selection and multi-selection mode. + * + * @param prev - the previous value of the `multiple` attribute + * @param next - the next value of the `multiple` attribute + * + * @internal + */ + multipleChanged(prev, next) { + this.ariaMultiSelectable = next ? "true" : null; + } + /** + * Updates the list of selected options when the `selectedIndex` changes. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + var _a; + if (!this.hasSelectableOptions) { + this.selectedIndex = -1; + return; + } + if (((_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.disabled) && typeof prev === "number") { + const selectableIndex = this.getSelectableIndex(prev, next); + const newNext = selectableIndex > -1 ? selectableIndex : prev; + this.selectedIndex = newNext; + if (next === newNext) { + this.selectedIndexChanged(next, newNext); + } + return; + } + this.setSelectedOptions(); + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + const filteredNext = next.filter(_Listbox.slottedOptionFilter); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "selected"); + o.selected = filteredNext.includes(o); + notifier.subscribe(this, "selected"); + }); + } + /** + * Moves focus to the first selectable option. + * + * @public + */ + selectFirstOption() { + var _a, _b; + if (!this.disabled) { + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((o) => !o.disabled)) !== null && _b !== void 0 ? _b : -1; + } + } + /** + * Moves focus to the last selectable option. + * + * @internal + */ + selectLastOption() { + if (!this.disabled) { + this.selectedIndex = findLastIndex(this.options, (o) => !o.disabled); + } + } + /** + * Moves focus to the next selectable option. + * + * @internal + */ + selectNextOption() { + if (!this.disabled && this.selectedIndex < this.options.length - 1) { + this.selectedIndex += 1; + } + } + /** + * Moves focus to the previous selectable option. + * + * @internal + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex > 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Updates the selected index to match the first selected option. + * + * @internal + */ + setDefaultSelectedOption() { + var _a, _b; + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((el2) => el2.defaultSelected)) !== null && _b !== void 0 ? _b : -1; + } + /** + * Sets an option as selected and gives it focus. + * + * @public + */ + setSelectedOptions() { + var _a, _b, _c; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) { + this.selectedOptions = [this.options[this.selectedIndex]]; + this.ariaActiveDescendant = (_c = (_b = this.firstSelectedOption) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : ""; + this.focusAndScrollOptionIntoView(); + } + } + /** + * Updates the list of options and resets the selected option when the slotted option content changes. + * + * @param prev - the previous list of slotted options + * @param next - the current list of slotted options + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options = next.reduce((options, item) => { + if (isListboxOption(item)) { + options.push(item); + } + return options; + }, []); + const setSize = `${this.options.length}`; + this.options.forEach((option, index) => { + if (!option.id) { + option.id = uniqueId("option-"); + } + option.ariaPosInSet = `${index + 1}`; + option.ariaSetSize = setSize; + }); + if (this.$fastController.isConnected) { + this.setSelectedOptions(); + this.setDefaultSelectedOption(); + } + } + /** + * Updates the filtered list of options when the typeahead buffer changes. + * + * @param prev - the previous typeahead buffer value + * @param next - the current typeahead buffer value + * + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + if (typeaheadMatches.length) { + const selectedIndex = this.options.indexOf(typeaheadMatches[0]); + if (selectedIndex > -1) { + this.selectedIndex = selectedIndex; + } + } + this.typeaheadExpired = false; + } + } + }; + Listbox.slottedOptionFilter = (n) => isListboxOption(n) && !n.hidden; + Listbox.TYPE_AHEAD_TIMEOUT_MS = 1e3; + __decorate([ + attr({ mode: "boolean" }) + ], Listbox.prototype, "disabled", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedIndex", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "slottedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "typeaheadBuffer", void 0); + DelegatesARIAListbox = class { + }; + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaActiveDescendant", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaDisabled", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaExpanded", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaMultiSelectable", void 0); + applyMixins(DelegatesARIAListbox, ARIAGlobalStatesAndProperties); + applyMixins(Listbox, DelegatesARIAListbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js + var SelectPosition; + var init_select_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js"() { + SelectPosition = { + above: "above", + below: "below" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js + var _Combobox, FormAssociatedCombobox; + var init_combobox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js"() { + init_form_associated(); + init_listbox(); + _Combobox = class extends Listbox { + }; + FormAssociatedCombobox = class extends FormAssociated(_Combobox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js + var ComboboxAutocomplete; + var init_combobox_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js"() { + ComboboxAutocomplete = { + inline: "inline", + list: "list", + both: "both", + none: "none" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js + var Combobox, DelegatesARIACombobox; + var init_combobox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_select_options(); + init_apply_mixins(); + init_combobox_form_associated(); + init_combobox_options(); + Combobox = class extends FormAssociatedCombobox { + constructor() { + super(...arguments); + this._value = ""; + this.filteredOptions = []; + this.filter = ""; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + this.open = false; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + super.formResetCallback(); + this.setDefaultSelectedOption(); + this.updateValue(); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + get isAutocompleteInline() { + return this.autocomplete === ComboboxAutocomplete.inline || this.isAutocompleteBoth; + } + get isAutocompleteList() { + return this.autocomplete === ComboboxAutocomplete.list || this.isAutocompleteBoth; + } + get isAutocompleteBoth() { + return this.autocomplete === ComboboxAutocomplete.both; + } + /** + * Sets focus and synchronize ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged() { + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The list of options. + * + * @public + * @remarks + * Overrides `Listbox.options`. + */ + get options() { + Observable.track(this, "options"); + return this.filteredOptions.length ? this.filteredOptions : this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Updates the placeholder on the proxy element. + * @internal + */ + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c; + const prev = `${this._value}`; + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el2) => el2.text.toLowerCase() === next.toLowerCase()); + const prevSelectedValue = (_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.text; + const nextSelectedValue = (_b = this.options[selectedIndex]) === null || _b === void 0 ? void 0 : _b.text; + this.selectedIndex = prevSelectedValue !== nextSelectedValue ? selectedIndex : this.selectedIndex; + next = ((_c = this.firstSelectedOption) === null || _c === void 0 ? void 0 : _c.text) || next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + } + } + /** + * Handle opening and closing the listbox when the combobox is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (this.disabled || (captured === null || captured === void 0 ? void 0 : captured.disabled)) { + return; + } + if (this.open) { + if (e.composedPath()[0] === this.control) { + return; + } + if (captured) { + this.selectedOptions = [captured]; + this.control.value = captured.text; + this.clearSelectionRange(); + this.updateValue(true); + } + } + this.open = !this.open; + if (this.open) { + this.control.focus(); + } + return true; + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + if (this.value) { + this.initialValue = this.value; + } + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Filter available options by text value. + * + * @public + */ + filterOptions() { + if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) { + this.filter = ""; + } + const filter = this.filter.toLowerCase(); + this.filteredOptions = this._options.filter((o) => o.text.toLowerCase().startsWith(this.filter.toLowerCase())); + if (this.isAutocompleteList) { + if (!this.filteredOptions.length && !filter) { + this.filteredOptions = this._options; + } + this._options.forEach((o) => { + o.hidden = !this.filteredOptions.includes(o); + }); + } + } + /** + * Focus the control and scroll the first selected option into view. + * + * @internal + * @remarks + * Overrides: `Listbox.focusAndScrollOptionIntoView` + */ + focusAndScrollOptionIntoView() { + if (this.contains(document.activeElement)) { + this.control.focus(); + if (this.firstSelectedOption) { + requestAnimationFrame(() => { + var _a; + (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: "nearest" }); + }); + } + } + } + /** + * Handle focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + this.syncValue(); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!this.options || !this.options.includes(focusTarget)) { + this.open = false; + } + } + /** + * Handle content changes on the control input. + * + * @param e - the input event + * @internal + */ + inputHandler(e) { + this.filter = this.control.value; + this.filterOptions(); + if (!this.isAutocompleteInline) { + this.selectedIndex = this.options.map((option) => option.text).indexOf(this.control.value); + } + if (e.inputType.includes("deleteContent") || !this.filter.length) { + return true; + } + if (this.isAutocompleteList && !this.open) { + this.open = true; + } + if (this.isAutocompleteInline) { + if (this.filteredOptions.length) { + this.selectedOptions = [this.filteredOptions[0]]; + this.selectedIndex = this.options.indexOf(this.firstSelectedOption); + this.setInlineSelection(); + } else { + this.selectedIndex = -1; + } + } + return; + } + /** + * Handle keydown actions for listbox navigation. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (e.ctrlKey || e.shiftKey) { + return true; + } + switch (key) { + case "Enter": { + this.syncValue(); + if (this.isAutocompleteInline) { + this.filter = this.value; + } + this.open = false; + this.clearSelectionRange(); + break; + } + case "Escape": { + if (!this.isAutocompleteInline) { + this.selectedIndex = -1; + } + if (this.open) { + this.open = false; + break; + } + this.value = ""; + this.control.value = ""; + this.filter = ""; + this.filterOptions(); + break; + } + case "Tab": { + this.setInputToSelection(); + if (!this.open) { + return true; + } + e.preventDefault(); + this.open = false; + break; + } + case "ArrowUp": + case "ArrowDown": { + this.filterOptions(); + if (!this.open) { + this.open = true; + break; + } + if (this.filteredOptions.length > 0) { + super.keydownHandler(e); + } + if (this.isAutocompleteInline) { + this.setInlineSelection(); + } + break; + } + default: { + return true; + } + } + } + /** + * Handle keyup actions for value input and text field manipulations. + * + * @param e - the keyboard event + * @internal + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + case "ArrowRight": + case "Backspace": + case "Delete": + case "Home": + case "End": { + this.filter = this.control.value; + this.selectedIndex = -1; + this.filterOptions(); + break; + } + } + } + /** + * Ensure that the selectedIndex is within the current allowable filtered range. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + if (this.$fastController.isConnected) { + next = limit(-1, this.options.length - 1, next); + if (next !== this.selectedIndex) { + this.selectedIndex = next; + return; + } + super.selectedIndexChanged(prev, next); + } + } + /** + * Move focus to the previous selectable option. + * + * @internal + * @remarks + * Overrides `Listbox.selectPreviousOption` + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex >= 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Set the default selected options at initialization or reset. + * + * @internal + * @remarks + * Overrides `Listbox.setDefaultSelectedOption` + */ + setDefaultSelectedOption() { + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el2) => el2.getAttribute("selected") !== null || el2.selected); + this.selectedIndex = selectedIndex; + if (!this.dirtyValue && this.firstSelectedOption) { + this.value = this.firstSelectedOption.text; + } + this.setSelectedOptions(); + } + } + /** + * Focus and set the content of the control based on the first selected option. + * + * @internal + */ + setInputToSelection() { + if (this.firstSelectedOption) { + this.control.value = this.firstSelectedOption.text; + this.control.focus(); + } + } + /** + * Focus, set and select the content of the control based on the first selected option. + * + * @internal + */ + setInlineSelection() { + if (this.firstSelectedOption) { + this.setInputToSelection(); + this.control.setSelectionRange(this.filter.length, this.control.value.length, "backward"); + } + } + /** + * Determines if a value update should involve emitting a change event, then updates the value. + * + * @internal + */ + syncValue() { + var _a; + const newValue = this.selectedIndex > -1 ? (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text : this.control.value; + this.updateValue(this.value !== newValue); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @param force - direction to force the listbox to display + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * Ensure that the entire list of options is used when setting the selected property. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + * @remarks + * Overrides: `Listbox.selectedOptionsChanged` + */ + selectedOptionsChanged(prev, next) { + if (this.$fastController.isConnected) { + this._options.forEach((o) => { + o.selected = next.includes(o); + }); + } + } + /** + * Synchronize the form-associated proxy and update the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + super.slottedOptionsChanged(prev, next); + this.updateValue(); + } + /** + * Sets the value and to match the first selected option. + * + * @param shouldEmit - if true, the change event will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a; + if (this.$fastController.isConnected) { + this.value = ((_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) || this.control.value; + this.control.value = this.value; + } + if (shouldEmit) { + this.$emit("change"); + } + } + /** + * @internal + */ + clearSelectionRange() { + const controlValueLength = this.control.value.length; + this.control.setSelectionRange(controlValueLength, controlValueLength); + } + }; + __decorate([ + attr({ attribute: "autocomplete", mode: "fromView" }) + ], Combobox.prototype, "autocomplete", void 0); + __decorate([ + observable + ], Combobox.prototype, "maxHeight", void 0); + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Combobox.prototype, "open", void 0); + __decorate([ + attr + ], Combobox.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Combobox.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Combobox.prototype, "position", void 0); + DelegatesARIACombobox = class { + }; + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaAutoComplete", void 0); + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIACombobox, DelegatesARIAListbox); + applyMixins(Combobox, StartEnd, DelegatesARIACombobox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js + var init_combobox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js + var init_combobox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js"() { + init_combobox(); + init_combobox_options(); + init_combobox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js + function composedParent(element) { + const parentNode = element.parentElement; + if (parentNode) { + return parentNode; + } else { + const rootNode = element.getRootNode(); + if (rootNode.host instanceof HTMLElement) { + return rootNode.host; + } + } + return null; + } + var init_composed_parent = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js + function composedContains(reference, test) { + let current = test; + while (current !== null) { + if (current === reference) { + return true; + } + current = composedParent(current); + } + return false; + } + var init_composed_contains = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js"() { + init_composed_parent(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js + function isFastElement(element) { + return element instanceof FASTElement; + } + var defaultElement, QueuedStyleSheetTarget, ConstructableStyleSheetTarget, DocumentStyleSheetTarget, HeadStyleElementStyleSheetTarget, StyleElementStyleSheetTarget, ElementStyleSheetTarget, RootStyleSheetTarget, propertyTargetCache, propertyTargetCtor, PropertyTargetManager; + var init_custom_property_manager = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js"() { + init_tslib_es6(); + init_esm(); + defaultElement = document.createElement("div"); + QueuedStyleSheetTarget = class { + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + ConstructableStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor(source) { + super(); + const sheet = new CSSStyleSheet(); + sheet[prependToAdoptedStyleSheetsSymbol] = true; + this.target = sheet.cssRules[sheet.insertRule(":host{}")].style; + source.$fastController.addStyles(ElementStyles.create([sheet])); + } + }; + DocumentStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + const sheet = new CSSStyleSheet(); + this.target = sheet.cssRules[sheet.insertRule(":root{}")].style; + document.adoptedStyleSheets = [ + ...document.adoptedStyleSheets, + sheet + ]; + } + }; + HeadStyleElementStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + this.style = document.createElement("style"); + document.head.appendChild(this.style); + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":root{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } + } + }; + StyleElementStyleSheetTarget = class { + constructor(target) { + this.store = /* @__PURE__ */ new Map(); + this.target = null; + const controller = target.$fastController; + this.style = document.createElement("style"); + controller.addStyles(this.style); + Observable.getNotifier(controller).subscribe(this, "isConnected"); + this.handleChange(controller, "isConnected"); + } + targetChanged() { + if (this.target !== null) { + for (const [key, value] of this.store.entries()) { + this.target.setProperty(key, value); + } + } + } + setProperty(name, value) { + this.store.set(name, value); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.setProperty(name, value); + } + }); + } + removeProperty(name) { + this.store.delete(name); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.removeProperty(name); + } + }); + } + handleChange(source, key) { + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":host{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } else { + this.target = null; + } + } + }; + __decorate([ + observable + ], StyleElementStyleSheetTarget.prototype, "target", void 0); + ElementStyleSheetTarget = class { + constructor(source) { + this.target = source.style; + } + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + RootStyleSheetTarget = class _RootStyleSheetTarget { + setProperty(name, value) { + _RootStyleSheetTarget.properties[name] = value; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).setProperty(name, value); + } + } + removeProperty(name) { + delete _RootStyleSheetTarget.properties[name]; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).removeProperty(name); + } + } + static registerRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (!roots.has(root)) { + roots.add(root); + const target = PropertyTargetManager.getOrCreate(this.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.setProperty(key, _RootStyleSheetTarget.properties[key]); + } + } + } + static unregisterRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (roots.has(root)) { + roots.delete(root); + const target = PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.removeProperty(key); + } + } + } + /** + * Returns the document when provided the default element, + * otherwise is a no-op + * @param root - the root to normalize + */ + static normalizeRoot(root) { + return root === defaultElement ? document : root; + } + }; + RootStyleSheetTarget.roots = /* @__PURE__ */ new Set(); + RootStyleSheetTarget.properties = {}; + propertyTargetCache = /* @__PURE__ */ new WeakMap(); + propertyTargetCtor = DOM.supportsAdoptedStyleSheets ? ConstructableStyleSheetTarget : StyleElementStyleSheetTarget; + PropertyTargetManager = Object.freeze({ + getOrCreate(source) { + if (propertyTargetCache.has(source)) { + return propertyTargetCache.get(source); + } + let target; + if (source === defaultElement) { + target = new RootStyleSheetTarget(); + } else if (source instanceof Document) { + target = DOM.supportsAdoptedStyleSheets ? new DocumentStyleSheetTarget() : new HeadStyleElementStyleSheetTarget(); + } else if (isFastElement(source)) { + target = new propertyTargetCtor(source); + } else { + target = new ElementStyleSheetTarget(source); + } + propertyTargetCache.set(source, target); + return target; + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js + function create(nameOrConfig) { + return DesignTokenImpl.from(nameOrConfig); + } + var DesignTokenImpl, CustomPropertyReflector, DesignTokenBindingObserver, Store, nodeCache, childToParent, DesignTokenNode, DesignToken; + var init_design_token = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js"() { + init_tslib_es6(); + init_esm(); + init_composed_parent(); + init_composed_contains(); + init_custom_property_manager(); + init_custom_property_manager(); + DesignTokenImpl = class _DesignTokenImpl extends CSSDirective { + constructor(configuration) { + super(); + this.subscribers = /* @__PURE__ */ new WeakMap(); + this._appliedTo = /* @__PURE__ */ new Set(); + this.name = configuration.name; + if (configuration.cssCustomPropertyName !== null) { + this.cssCustomProperty = `--${configuration.cssCustomPropertyName}`; + this.cssVar = `var(${this.cssCustomProperty})`; + } + this.id = _DesignTokenImpl.uniqueId(); + _DesignTokenImpl.tokensById.set(this.id, this); + } + get appliedTo() { + return [...this._appliedTo]; + } + static from(nameOrConfig) { + return new _DesignTokenImpl({ + name: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.name, + cssCustomPropertyName: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.cssCustomPropertyName === void 0 ? nameOrConfig.name : nameOrConfig.cssCustomPropertyName + }); + } + static isCSSDesignToken(token) { + return typeof token.cssCustomProperty === "string"; + } + static isDerivedDesignTokenValue(value) { + return typeof value === "function"; + } + /** + * Gets a token by ID. Returns undefined if the token was not found. + * @param id - The ID of the token + * @returns + */ + static getTokenById(id) { + return _DesignTokenImpl.tokensById.get(id); + } + getOrCreateSubscriberSet(target = this) { + return this.subscribers.get(target) || this.subscribers.set(target, /* @__PURE__ */ new Set()) && this.subscribers.get(target); + } + createCSS() { + return this.cssVar || ""; + } + getValueFor(element) { + const value = DesignTokenNode.getOrCreate(element).get(this); + if (value !== void 0) { + return value; + } + throw new Error(`Value could not be retrieved for token named "${this.name}". Ensure the value is set for ${element} or an ancestor of ${element}.`); + } + setValueFor(element, value) { + this._appliedTo.add(element); + if (value instanceof _DesignTokenImpl) { + value = this.alias(value); + } + DesignTokenNode.getOrCreate(element).set(this, value); + return this; + } + deleteValueFor(element) { + this._appliedTo.delete(element); + if (DesignTokenNode.existsFor(element)) { + DesignTokenNode.getOrCreate(element).delete(this); + } + return this; + } + withDefault(value) { + this.setValueFor(defaultElement, value); + return this; + } + subscribe(subscriber, target) { + const subscriberSet = this.getOrCreateSubscriberSet(target); + if (target && !DesignTokenNode.existsFor(target)) { + DesignTokenNode.getOrCreate(target); + } + if (!subscriberSet.has(subscriber)) { + subscriberSet.add(subscriber); + } + } + unsubscribe(subscriber, target) { + const list = this.subscribers.get(target || this); + if (list && list.has(subscriber)) { + list.delete(subscriber); + } + } + /** + * Notifies subscribers that the value for an element has changed. + * @param element - The element to emit a notification for + */ + notify(element) { + const record = Object.freeze({ token: this, target: element }); + if (this.subscribers.has(this)) { + this.subscribers.get(this).forEach((sub) => sub.handleChange(record)); + } + if (this.subscribers.has(element)) { + this.subscribers.get(element).forEach((sub) => sub.handleChange(record)); + } + } + /** + * Alias the token to the provided token. + * @param token - the token to alias to + */ + alias(token) { + return ((target) => token.getValueFor(target)); + } + }; + DesignTokenImpl.uniqueId = /* @__PURE__ */ (() => { + let id = 0; + return () => { + id++; + return id.toString(16); + }; + })(); + DesignTokenImpl.tokensById = /* @__PURE__ */ new Map(); + CustomPropertyReflector = class { + startReflection(token, target) { + token.subscribe(this, target); + this.handleChange({ token, target }); + } + stopReflection(token, target) { + token.unsubscribe(this, target); + this.remove(token, target); + } + handleChange(record) { + const { token, target } = record; + this.add(token, target); + } + add(token, target) { + PropertyTargetManager.getOrCreate(target).setProperty(token.cssCustomProperty, this.resolveCSSValue(DesignTokenNode.getOrCreate(target).get(token))); + } + remove(token, target) { + PropertyTargetManager.getOrCreate(target).removeProperty(token.cssCustomProperty); + } + resolveCSSValue(value) { + return value && typeof value.createCSS === "function" ? value.createCSS() : value; + } + }; + DesignTokenBindingObserver = class { + constructor(source, token, node) { + this.source = source; + this.token = token; + this.node = node; + this.dependencies = /* @__PURE__ */ new Set(); + this.observer = Observable.binding(source, this, false); + this.observer.handleChange = this.observer.call; + this.handleChange(); + } + disconnect() { + this.observer.disconnect(); + } + /** + * @internal + */ + handleChange() { + try { + this.node.store.set(this.token, this.observer.observe(this.node.target, defaultExecutionContext)); + } catch (e) { + console.error(e); + } + } + }; + Store = class { + constructor() { + this.values = /* @__PURE__ */ new Map(); + } + set(token, value) { + if (this.values.get(token) !== value) { + this.values.set(token, value); + Observable.getNotifier(this).notify(token.id); + } + } + get(token) { + Observable.track(this, token.id); + return this.values.get(token); + } + delete(token) { + this.values.delete(token); + Observable.getNotifier(this).notify(token.id); + } + all() { + return this.values.entries(); + } + }; + nodeCache = /* @__PURE__ */ new WeakMap(); + childToParent = /* @__PURE__ */ new WeakMap(); + DesignTokenNode = class _DesignTokenNode { + constructor(target) { + this.target = target; + this.store = new Store(); + this.children = []; + this.assignedValues = /* @__PURE__ */ new Map(); + this.reflecting = /* @__PURE__ */ new Set(); + this.bindingObservers = /* @__PURE__ */ new Map(); + this.tokenValueChangeHandler = { + handleChange: (source, arg) => { + const token = DesignTokenImpl.getTokenById(arg); + if (token) { + token.notify(this.target); + this.updateCSSTokenReflection(source, token); + } + } + }; + nodeCache.set(target, this); + Observable.getNotifier(this.store).subscribe(this.tokenValueChangeHandler); + if (target instanceof FASTElement) { + target.$fastController.addBehaviors([this]); + } else if (target.isConnected) { + this.bind(); + } + } + /** + * Returns a DesignTokenNode for an element. + * Creates a new instance if one does not already exist for a node, + * otherwise returns the cached instance + * + * @param target - The HTML element to retrieve a DesignTokenNode for + */ + static getOrCreate(target) { + return nodeCache.get(target) || new _DesignTokenNode(target); + } + /** + * Determines if a DesignTokenNode has been created for a target + * @param target - The element to test + */ + static existsFor(target) { + return nodeCache.has(target); + } + /** + * Searches for and return the nearest parent DesignTokenNode. + * Null is returned if no node is found or the node provided is for a default element. + */ + static findParent(node) { + if (!(defaultElement === node.target)) { + let parent = composedParent(node.target); + while (parent !== null) { + if (nodeCache.has(parent)) { + return nodeCache.get(parent); + } + parent = composedParent(parent); + } + return _DesignTokenNode.getOrCreate(defaultElement); + } + return null; + } + /** + * Finds the closest node with a value explicitly assigned for a token, otherwise null. + * @param token - The token to look for + * @param start - The node to start looking for value assignment + * @returns + */ + static findClosestAssignedNode(token, start) { + let current = start; + do { + if (current.has(token)) { + return current; + } + current = current.parent ? current.parent : current.target !== defaultElement ? _DesignTokenNode.getOrCreate(defaultElement) : null; + } while (current !== null); + return null; + } + /** + * The parent DesignTokenNode, or null. + */ + get parent() { + return childToParent.get(this) || null; + } + updateCSSTokenReflection(source, token) { + if (DesignTokenImpl.isCSSDesignToken(token)) { + const parent = this.parent; + const reflecting = this.isReflecting(token); + if (parent) { + const parentValue = parent.get(token); + const sourceValue = source.get(token); + if (parentValue !== sourceValue && !reflecting) { + this.reflectToCSS(token); + } else if (parentValue === sourceValue && reflecting) { + this.stopReflectToCSS(token); + } + } else if (!reflecting) { + this.reflectToCSS(token); + } + } + } + /** + * Checks if a token has been assigned an explicit value the node. + * @param token - the token to check. + */ + has(token) { + return this.assignedValues.has(token); + } + /** + * Gets the value of a token for a node + * @param token - The token to retrieve the value for + * @returns + */ + get(token) { + const value = this.store.get(token); + if (value !== void 0) { + return value; + } + const raw = this.getRaw(token); + if (raw !== void 0) { + this.hydrate(token, raw); + return this.get(token); + } + } + /** + * Retrieves the raw assigned value of a token from the nearest assigned node. + * @param token - The token to retrieve a raw value for + * @returns + */ + getRaw(token) { + var _a; + if (this.assignedValues.has(token)) { + return this.assignedValues.get(token); + } + return (_a = _DesignTokenNode.findClosestAssignedNode(token, this)) === null || _a === void 0 ? void 0 : _a.getRaw(token); + } + /** + * Sets a token to a value for a node + * @param token - The token to set + * @param value - The value to set the token to + */ + set(token, value) { + if (DesignTokenImpl.isDerivedDesignTokenValue(this.assignedValues.get(token))) { + this.tearDownBindingObserver(token); + } + this.assignedValues.set(token, value); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + this.setupBindingObserver(token, value); + } else { + this.store.set(token, value); + } + } + /** + * Deletes a token value for the node. + * @param token - The token to delete the value for + */ + delete(token) { + this.assignedValues.delete(token); + this.tearDownBindingObserver(token); + const upstream = this.getRaw(token); + if (upstream) { + this.hydrate(token, upstream); + } else { + this.store.delete(token); + } + } + /** + * Invoked when the DesignTokenNode.target is attached to the document + */ + bind() { + const parent = _DesignTokenNode.findParent(this); + if (parent) { + parent.appendChild(this); + } + for (const key of this.assignedValues.keys()) { + key.notify(this.target); + } + } + /** + * Invoked when the DesignTokenNode.target is detached from the document + */ + unbind() { + if (this.parent) { + const parent = childToParent.get(this); + parent.removeChild(this); + } + for (const token of this.bindingObservers.keys()) { + this.tearDownBindingObserver(token); + } + } + /** + * Appends a child to a parent DesignTokenNode. + * @param child - The child to append to the node + */ + appendChild(child) { + if (child.parent) { + childToParent.get(child).removeChild(child); + } + const reParent = this.children.filter((x) => child.contains(x)); + childToParent.set(child, this); + this.children.push(child); + reParent.forEach((x) => child.appendChild(x)); + Observable.getNotifier(this.store).subscribe(child); + for (const [token, value] of this.store.all()) { + child.hydrate(token, this.bindingObservers.has(token) ? this.getRaw(token) : value); + child.updateCSSTokenReflection(child.store, token); + } + } + /** + * Removes a child from a node. + * @param child - The child to remove. + */ + removeChild(child) { + const childIndex = this.children.indexOf(child); + if (childIndex !== -1) { + this.children.splice(childIndex, 1); + } + Observable.getNotifier(this.store).unsubscribe(child); + if (child.parent !== this) { + return false; + } + const deleted = childToParent.delete(child); + for (const [token] of this.store.all()) { + child.hydrate(token, child.getRaw(token)); + child.updateCSSTokenReflection(child.store, token); + } + return deleted; + } + /** + * Tests whether a provided node is contained by + * the calling node. + * @param test - The node to test + */ + contains(test) { + return composedContains(this.target, test.target); + } + /** + * Instructs the node to reflect a design token for the provided token. + * @param token - The design token to reflect + */ + reflectToCSS(token) { + if (!this.isReflecting(token)) { + this.reflecting.add(token); + _DesignTokenNode.cssCustomPropertyReflector.startReflection(token, this.target); + } + } + /** + * Stops reflecting a DesignToken to CSS + * @param token - The design token to stop reflecting + */ + stopReflectToCSS(token) { + if (this.isReflecting(token)) { + this.reflecting.delete(token); + _DesignTokenNode.cssCustomPropertyReflector.stopReflection(token, this.target); + } + } + /** + * Determines if a token is being reflected to CSS for a node. + * @param token - The token to check for reflection + * @returns + */ + isReflecting(token) { + return this.reflecting.has(token); + } + /** + * Handle changes to upstream tokens + * @param source - The parent DesignTokenNode + * @param property - The token ID that changed + */ + handleChange(source, property) { + const token = DesignTokenImpl.getTokenById(property); + if (!token) { + return; + } + this.hydrate(token, this.getRaw(token)); + this.updateCSSTokenReflection(this.store, token); + } + /** + * Hydrates a token with a DesignTokenValue, making retrieval available. + * @param token - The token to hydrate + * @param value - The value to hydrate + */ + hydrate(token, value) { + if (!this.has(token)) { + const observer = this.bindingObservers.get(token); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + if (observer) { + if (observer.source !== value) { + this.tearDownBindingObserver(token); + this.setupBindingObserver(token, value); + } + } else { + this.setupBindingObserver(token, value); + } + } else { + if (observer) { + this.tearDownBindingObserver(token); + } + this.store.set(token, value); + } + } + } + /** + * Sets up a binding observer for a derived token value that notifies token + * subscribers on change. + * + * @param token - The token to notify when the binding updates + * @param source - The binding source + */ + setupBindingObserver(token, source) { + const binding = new DesignTokenBindingObserver(source, token, this); + this.bindingObservers.set(token, binding); + return binding; + } + /** + * Tear down a binding observer for a token. + */ + tearDownBindingObserver(token) { + if (this.bindingObservers.has(token)) { + this.bindingObservers.get(token).disconnect(); + this.bindingObservers.delete(token); + return true; + } + return false; + } + }; + DesignTokenNode.cssCustomPropertyReflector = new CustomPropertyReflector(); + __decorate([ + observable + ], DesignTokenNode.prototype, "children", void 0); + DesignToken = Object.freeze({ + create, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been connected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * 3. The HTMLElement is not connected to the document when token values are set. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyConnection(element) { + if (!element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).bind(); + return true; + }, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been disconnected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyDisconnection(element) { + if (element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).unbind(); + return true; + }, + /** + * Registers and element or document as a DesignToken root. + * {@link CSSDesignToken | CSSDesignTokens} with default values assigned via + * {@link (DesignToken:interface).withDefault} will emit CSS custom properties to all + * registered roots. + * @param target - The root to register + */ + registerRoot(target = defaultElement) { + RootStyleSheetTarget.registerRoot(target); + }, + /** + * Unregister an element or document as a DesignToken root. + * @param target - The root to deregister + */ + unregisterRoot(target = defaultElement) { + RootStyleSheetTarget.unregisterRoot(target); + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js + function extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback) { + if (typeof params === "string") { + return { + name: params, + type: elementDefinitionType, + callback: elementDefinitionCallback + }; + } else { + return params; + } + } + var ElementDisambiguation, elementTypesByTag, elementTagsByType, rootDesignSystem, designSystemKey, DesignSystem, DefaultDesignSystem, ElementDefinitionEntry; + var init_design_system = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js"() { + init_esm(); + init_foundation_element(); + init_di(); + init_design_token(); + init_component_presentation(); + ElementDisambiguation = Object.freeze({ + /** + * Skip defining the element but still call the provided callback passed + * to DesignSystemRegistrationContext.tryDefineElement + */ + definitionCallbackOnly: null, + /** + * Ignore the duplicate element entirely. + */ + ignoreDuplicate: /* @__PURE__ */ Symbol() + }); + elementTypesByTag = /* @__PURE__ */ new Map(); + elementTagsByType = /* @__PURE__ */ new Map(); + rootDesignSystem = null; + designSystemKey = DI.createInterface((x) => x.cachedCallback((handler) => { + if (rootDesignSystem === null) { + rootDesignSystem = new DefaultDesignSystem(null, handler); + } + return rootDesignSystem; + })); + DesignSystem = Object.freeze({ + /** + * Returns the HTML element name that the type is defined as. + * @param type - The type to lookup. + * @public + */ + tagFor(type) { + return elementTagsByType.get(type); + }, + /** + * Searches the DOM hierarchy for the design system that is responsible + * for the provided element. + * @param element - The element to locate the design system for. + * @returns The located design system. + * @public + */ + responsibleFor(element) { + const owned = element.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.findResponsibleContainer(element); + return container.get(designSystemKey); + }, + /** + * Gets the DesignSystem if one is explicitly defined on the provided element; + * otherwise creates a design system defined directly on the element. + * @param element - The element to get or create a design system for. + * @returns The design system. + * @public + */ + getOrCreate(node) { + if (!node) { + if (rootDesignSystem === null) { + rootDesignSystem = DI.getOrCreateDOMContainer().get(designSystemKey); + } + return rootDesignSystem; + } + const owned = node.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.getOrCreateDOMContainer(node); + if (container.has(designSystemKey, false)) { + return container.get(designSystemKey); + } else { + const system = new DefaultDesignSystem(node, container); + container.register(Registration.instance(designSystemKey, system)); + return system; + } + } + }); + DefaultDesignSystem = class { + constructor(owner, container) { + this.owner = owner; + this.container = container; + this.designTokensInitialized = false; + this.prefix = "fast"; + this.shadowRootMode = void 0; + this.disambiguate = () => ElementDisambiguation.definitionCallbackOnly; + if (owner !== null) { + owner.$$designSystem$$ = this; + } + } + withPrefix(prefix) { + this.prefix = prefix; + return this; + } + withShadowRootMode(mode) { + this.shadowRootMode = mode; + return this; + } + withElementDisambiguation(callback) { + this.disambiguate = callback; + return this; + } + withDesignTokenRoot(root) { + this.designTokenRoot = root; + return this; + } + register(...registrations) { + const container = this.container; + const elementDefinitionEntries = []; + const disambiguate = this.disambiguate; + const shadowRootMode = this.shadowRootMode; + const context = { + elementPrefix: this.prefix, + tryDefineElement(params, elementDefinitionType, elementDefinitionCallback) { + const extractedParams = extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback); + const { name, callback, baseClass } = extractedParams; + let { type } = extractedParams; + let elementName = name; + let typeFoundByName = elementTypesByTag.get(elementName); + let needsDefine = true; + while (typeFoundByName) { + const result = disambiguate(elementName, type, typeFoundByName); + switch (result) { + case ElementDisambiguation.ignoreDuplicate: + return; + case ElementDisambiguation.definitionCallbackOnly: + needsDefine = false; + typeFoundByName = void 0; + break; + default: + elementName = result; + typeFoundByName = elementTypesByTag.get(elementName); + break; + } + } + if (needsDefine) { + if (elementTagsByType.has(type) || type === FoundationElement) { + type = class extends type { + }; + } + elementTypesByTag.set(elementName, type); + elementTagsByType.set(type, elementName); + if (baseClass) { + elementTagsByType.set(baseClass, elementName); + } + } + elementDefinitionEntries.push(new ElementDefinitionEntry(container, elementName, type, shadowRootMode, callback, needsDefine)); + } + }; + if (!this.designTokensInitialized) { + this.designTokensInitialized = true; + if (this.designTokenRoot !== null) { + DesignToken.registerRoot(this.designTokenRoot); + } + } + container.registerWithContext(context, ...registrations); + for (const entry of elementDefinitionEntries) { + entry.callback(entry); + if (entry.willDefine && entry.definition !== null) { + entry.definition.define(); + } + } + return this; + } + }; + ElementDefinitionEntry = class { + constructor(container, name, type, shadowRootMode, callback, willDefine) { + this.container = container; + this.name = name; + this.type = type; + this.shadowRootMode = shadowRootMode; + this.callback = callback; + this.willDefine = willDefine; + this.definition = null; + } + definePresentation(presentation) { + ComponentPresentation.define(this.name, presentation, this.container); + } + defineElement(definition) { + this.definition = new FASTElementDefinition(this.type, Object.assign(Object.assign({}, definition), { name: this.name })); + } + tagFor(type) { + return DesignSystem.tagFor(type); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js + var init_registration_context = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js + var init_design_system2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js"() { + init_design_system(); + init_component_presentation(); + init_registration_context(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/index.js + var init_di2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/index.js"() { + init_di(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js + var init_dialog_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js"() { + } + }); + + // node_modules/tabbable/dist/index.esm.js + var candidateSelectors, candidateSelector, NoElement, matches, getRootNode, getTabindex, isInput, isHiddenInput, isDetailsWithSummary, getCheckedRadio, isTabbableRadio, isRadio, isNonTabbableRadio, isZeroArea, isHidden, isDisabledFromFieldset, isNodeMatchingSelectorFocusable, isNodeMatchingSelectorTabbable, isTabbable, focusableCandidateSelector, isFocusable; + var init_index_esm = __esm({ + "node_modules/tabbable/dist/index.esm.js"() { + candidateSelectors = ["input", "select", "textarea", "a[href]", "button", "[tabindex]:not(slot)", "audio[controls]", "video[controls]", '[contenteditable]:not([contenteditable="false"])', "details>summary:first-of-type", "details"]; + candidateSelector = /* @__PURE__ */ candidateSelectors.join(","); + NoElement = typeof Element === "undefined"; + matches = NoElement ? function() { + } : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; + getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) { + return element.getRootNode(); + } : function(element) { + return element.ownerDocument; + }; + getTabindex = function getTabindex2(node, isScope) { + if (node.tabIndex < 0) { + if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute("tabindex"), 10))) { + return 0; + } + } + return node.tabIndex; + }; + isInput = function isInput2(node) { + return node.tagName === "INPUT"; + }; + isHiddenInput = function isHiddenInput2(node) { + return isInput(node) && node.type === "hidden"; + }; + isDetailsWithSummary = function isDetailsWithSummary2(node) { + var r = node.tagName === "DETAILS" && Array.prototype.slice.apply(node.children).some(function(child) { + return child.tagName === "SUMMARY"; + }); + return r; + }; + getCheckedRadio = function getCheckedRadio2(nodes, form) { + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].checked && nodes[i].form === form) { + return nodes[i]; + } + } + }; + isTabbableRadio = function isTabbableRadio2(node) { + if (!node.name) { + return true; + } + var radioScope = node.form || getRootNode(node); + var queryRadios = function queryRadios2(name) { + return radioScope.querySelectorAll('input[type="radio"][name="' + name + '"]'); + }; + var radioSet; + if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && typeof window.CSS.escape === "function") { + radioSet = queryRadios(window.CSS.escape(node.name)); + } else { + try { + radioSet = queryRadios(node.name); + } catch (err) { + console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", err.message); + return false; + } + } + var checked = getCheckedRadio(radioSet, node.form); + return !checked || checked === node; + }; + isRadio = function isRadio2(node) { + return isInput(node) && node.type === "radio"; + }; + isNonTabbableRadio = function isNonTabbableRadio2(node) { + return isRadio(node) && !isTabbableRadio(node); + }; + isZeroArea = function isZeroArea2(node) { + var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height; + return width === 0 && height === 0; + }; + isHidden = function isHidden2(node, _ref) { + var displayCheck = _ref.displayCheck, getShadowRoot2 = _ref.getShadowRoot; + if (getComputedStyle(node).visibility === "hidden") { + return true; + } + var isDirectSummary = matches.call(node, "details>summary:first-of-type"); + var nodeUnderDetails = isDirectSummary ? node.parentElement : node; + if (matches.call(nodeUnderDetails, "details:not([open]) *")) { + return true; + } + var nodeRootHost = getRootNode(node).host; + var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node); + if (!displayCheck || displayCheck === "full") { + if (typeof getShadowRoot2 === "function") { + var originalNode = node; + while (node) { + var parentElement = node.parentElement; + var rootNode = getRootNode(node); + if (parentElement && !parentElement.shadowRoot && getShadowRoot2(parentElement) === true) { + return isZeroArea(node); + } else if (node.assignedSlot) { + node = node.assignedSlot; + } else if (!parentElement && rootNode !== node.ownerDocument) { + node = rootNode.host; + } else { + node = parentElement; + } + } + node = originalNode; + } + if (nodeIsAttached) { + return !node.getClientRects().length; + } + } else if (displayCheck === "non-zero-area") { + return isZeroArea(node); + } + return false; + }; + isDisabledFromFieldset = function isDisabledFromFieldset2(node) { + if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) { + var parentNode = node.parentElement; + while (parentNode) { + if (parentNode.tagName === "FIELDSET" && parentNode.disabled) { + for (var i = 0; i < parentNode.children.length; i++) { + var child = parentNode.children.item(i); + if (child.tagName === "LEGEND") { + return matches.call(parentNode, "fieldset[disabled] *") ? true : !child.contains(node); + } + } + return true; + } + parentNode = parentNode.parentElement; + } + } + return false; + }; + isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) { + if (node.disabled || isHiddenInput(node) || isHidden(node, options) || // For a details element with a summary, the summary element gets the focus + isDetailsWithSummary(node) || isDisabledFromFieldset(node)) { + return false; + } + return true; + }; + isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) { + if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) { + return false; + } + return true; + }; + isTabbable = function isTabbable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, candidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorTabbable(options, node); + }; + focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat("iframe").join(","); + isFocusable = function isFocusable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, focusableCandidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorFocusable(options, node); + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js + var Dialog; + var init_dialog = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + Dialog = class _Dialog extends FoundationElement { + constructor() { + super(...arguments); + this.modal = true; + this.hidden = false; + this.trapFocus = true; + this.trapFocusChanged = () => { + if (this.$fastController.isConnected) { + this.updateTrapFocus(); + } + }; + this.isTrappingFocus = false; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && !this.hidden) { + switch (e.key) { + case keyEscape: + this.dismiss(); + e.preventDefault(); + break; + case keyTab: + this.handleTabKeyDown(e); + break; + } + } + }; + this.handleDocumentFocus = (e) => { + if (!e.defaultPrevented && this.shouldForceFocus(e.target)) { + this.focusFirstElement(); + e.preventDefault(); + } + }; + this.handleTabKeyDown = (e) => { + if (!this.trapFocus || this.hidden) { + return; + } + const bounds = this.getTabQueueBounds(); + if (bounds.length === 0) { + return; + } + if (bounds.length === 1) { + bounds[0].focus(); + e.preventDefault(); + return; + } + if (e.shiftKey && e.target === bounds[0]) { + bounds[bounds.length - 1].focus(); + e.preventDefault(); + } else if (!e.shiftKey && e.target === bounds[bounds.length - 1]) { + bounds[0].focus(); + e.preventDefault(); + } + return; + }; + this.getTabQueueBounds = () => { + const bounds = []; + return _Dialog.reduceTabbableItems(bounds, this); + }; + this.focusFirstElement = () => { + const bounds = this.getTabQueueBounds(); + if (bounds.length > 0) { + bounds[0].focus(); + } else { + if (this.dialog instanceof HTMLElement) { + this.dialog.focus(); + } + } + }; + this.shouldForceFocus = (currentFocusElement) => { + return this.isTrappingFocus && !this.contains(currentFocusElement); + }; + this.shouldTrapFocus = () => { + return this.trapFocus && !this.hidden; + }; + this.updateTrapFocus = (shouldTrapFocusOverride) => { + const shouldTrapFocus = shouldTrapFocusOverride === void 0 ? this.shouldTrapFocus() : shouldTrapFocusOverride; + if (shouldTrapFocus && !this.isTrappingFocus) { + this.isTrappingFocus = true; + document.addEventListener("focusin", this.handleDocumentFocus); + DOM.queueUpdate(() => { + if (this.shouldForceFocus(document.activeElement)) { + this.focusFirstElement(); + } + }); + } else if (!shouldTrapFocus && this.isTrappingFocus) { + this.isTrappingFocus = false; + document.removeEventListener("focusin", this.handleDocumentFocus); + } + }; + } + /** + * @internal + */ + dismiss() { + this.$emit("dismiss"); + this.$emit("cancel"); + } + /** + * The method to show the dialog. + * + * @public + */ + show() { + this.hidden = false; + } + /** + * The method to hide the dialog. + * + * @public + */ + hide() { + this.hidden = true; + this.$emit("close"); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + document.addEventListener("keydown", this.handleDocumentKeydown); + this.notifier = Observable.getNotifier(this); + this.notifier.subscribe(this, "hidden"); + this.updateTrapFocus(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.updateTrapFocus(false); + this.notifier.unsubscribe(this, "hidden"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "hidden": + this.updateTrapFocus(); + break; + default: + break; + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceTabbableItems(elements2, element) { + if (element.getAttribute("tabindex") === "-1") { + return elements2; + } + if (isTabbable(element) || _Dialog.isFocusableFastElement(element) && _Dialog.hasTabbableShadow(element)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Dialog.reduceTabbableItems, [])); + } + return elements2; + } + /** + * Test if element is focusable fast element + * + * @param element - The element to check + * + * @internal + */ + static isFocusableFastElement(element) { + var _a, _b; + return !!((_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus); + } + /** + * Test if the element has a focusable shadow + * + * @param element - The element to check + * + * @internal + */ + static hasTabbableShadow(element) { + var _a, _b; + return Array.from((_b = (_a = element.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll("*")) !== null && _b !== void 0 ? _b : []).some((x) => { + return isTabbable(x); + }); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "modal", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "hidden", void 0); + __decorate([ + attr({ attribute: "trap-focus", mode: "boolean" }) + ], Dialog.prototype, "trapFocus", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], Dialog.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], Dialog.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], Dialog.prototype, "ariaLabel", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js + var init_dialog2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js"() { + init_dialog_template(); + init_dialog(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js + var init_disclosure_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js + var Disclosure; + var init_disclosure = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Disclosure = class extends FoundationElement { + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.setup(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.details.removeEventListener("toggle", this.onToggle); + } + /** + * Show extra content. + */ + show() { + this.details.open = true; + } + /** + * Hide extra content. + */ + hide() { + this.details.open = false; + } + /** + * Toggle the current(expanded/collapsed) state. + */ + toggle() { + this.details.open = !this.details.open; + } + /** + * Register listener and set default disclosure mode + */ + setup() { + this.onToggle = this.onToggle.bind(this); + this.details.addEventListener("toggle", this.onToggle); + if (this.expanded) { + this.show(); + } + } + /** + * Update the aria attr and fire `toggle` event + */ + onToggle() { + this.expanded = this.details.open; + this.$emit("toggle"); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Disclosure.prototype, "expanded", void 0); + __decorate([ + attr + ], Disclosure.prototype, "title", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js + var init_disclosure2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js"() { + init_disclosure_template(); + init_disclosure(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js + var dividerTemplate; + var init_divider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js"() { + init_esm(); + dividerTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js + var DividerRole; + var init_divider_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js"() { + DividerRole = { + /** + * The divider semantically separates content + */ + separator: "separator", + /** + * The divider has no semantic value and is for visual presentation only. + */ + presentation: "presentation" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js + var Divider; + var init_divider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_divider_options(); + Divider = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = DividerRole.separator; + this.orientation = Orientation.horizontal; + } + }; + __decorate([ + attr + ], Divider.prototype, "role", void 0); + __decorate([ + attr + ], Divider.prototype, "orientation", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js + var init_divider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js"() { + init_divider_template(); + init_divider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js + var FlipperDirection; + var init_flipper_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js"() { + FlipperDirection = { + next: "next", + previous: "previous" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js + var init_flipper_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js + var Flipper; + var init_flipper = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_flipper_options(); + Flipper = class extends FoundationElement { + constructor() { + super(...arguments); + this.hiddenFromAT = true; + this.direction = FlipperDirection.next; + } + /** + * Simulate a click event when the flipper has focus and the user hits enter or space keys + * Blur focus if the user hits escape key + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + if (!this.hiddenFromAT) { + const key = e.key; + if (key === "Enter" || key === "Space") { + this.$emit("click", e); + } + if (key === "Escape") { + this.blur(); + } + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Flipper.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "aria-hidden", converter: booleanConverter }) + ], Flipper.prototype, "hiddenFromAT", void 0); + __decorate([ + attr + ], Flipper.prototype, "direction", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js + var init_flipper2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js"() { + init_flipper_template(); + init_flipper(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js + var init_form_associated2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js"() { + init_form_associated(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js + var init_foundation_element2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js"() { + init_foundation_element(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js + var listboxOptionTemplate; + var init_listbox_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js"() { + init_esm(); + init_start_end(); + listboxOptionTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js + var init_listbox_option2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js"() { + init_listbox_option(); + init_listbox_option_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js + var ListboxElement; + var init_listbox_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + ListboxElement = class extends Listbox { + constructor() { + super(...arguments); + this.activeIndex = -1; + this.rangeStartIndex = -1; + } + /** + * Returns the last checked option. + * + * @internal + */ + get activeOption() { + return this.options[this.activeIndex]; + } + /** + * Returns the list of checked options. + * + * @internal + */ + get checkedOptions() { + var _a; + return (_a = this.options) === null || _a === void 0 ? void 0 : _a.filter((o) => o.checked); + } + /** + * Returns the index of the first selected option. + * + * @internal + */ + get firstSelectedOptionIndex() { + return this.options.indexOf(this.firstSelectedOption); + } + /** + * Updates the `ariaActiveDescendant` property when the active index changes. + * + * @param prev - the previous active index + * @param next - the next active index + * + * @internal + */ + activeIndexChanged(prev, next) { + var _a, _b; + this.ariaActiveDescendant = (_b = (_a = this.options[next]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ""; + this.focusAndScrollOptionIntoView(); + } + /** + * Toggles the checked state for the currently active option. + * + * @remarks + * Multiple-selection mode only. + * + * @internal + */ + checkActiveIndex() { + if (!this.multiple) { + return; + } + const activeItem = this.activeOption; + if (activeItem) { + activeItem.checked = true; + } + } + /** + * Sets the active index to the first option and marks it as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkFirstOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex + 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and sets the matching option as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkLastOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.options.length); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = this.options.length - 1; + this.checkActiveIndex(); + } + /** + * @override + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("focusout", this.focusoutHandler); + } + /** + * @override + * @internal + */ + disconnectedCallback() { + this.removeEventListener("focusout", this.focusoutHandler); + super.disconnectedCallback(); + } + /** + * Increments the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkNextOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.activeIndex + 1); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex += this.activeIndex < this.options.length - 1 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkPreviousOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + if (this.checkedOptions.length === 1) { + this.rangeStartIndex += 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.activeIndex, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex -= this.activeIndex > 0 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Handles click events for listbox options. + * + * @param e - the event object + * + * @override + * @internal + */ + clickHandler(e) { + var _a; + if (!this.multiple) { + return super.clickHandler(e); + } + const captured = (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest(`[role=option]`); + if (!captured || captured.disabled) { + return; + } + this.uncheckAllOptions(); + this.activeIndex = this.options.indexOf(captured); + this.checkActiveIndex(); + this.toggleSelectedForAllCheckedOptions(); + return true; + } + /** + * @override + * @internal + */ + focusAndScrollOptionIntoView() { + super.focusAndScrollOptionIntoView(this.activeOption); + } + /** + * In multiple-selection mode: + * If any options are selected, the first selected option is checked when + * the listbox receives focus. If no options are selected, the first + * selectable option is checked. + * + * @override + * @internal + */ + focusinHandler(e) { + if (!this.multiple) { + return super.focusinHandler(e); + } + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.uncheckAllOptions(); + if (this.activeIndex === -1) { + this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0; + } + this.checkActiveIndex(); + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Unchecks all options when the listbox loses focus. + * + * @internal + */ + focusoutHandler(e) { + if (this.multiple) { + this.uncheckAllOptions(); + } + } + /** + * Handles keydown actions for listbox navigation and typeahead + * + * @override + * @internal + */ + keydownHandler(e) { + if (!this.multiple) { + return super.keydownHandler(e); + } + if (this.disabled) { + return true; + } + const { key, shiftKey } = e; + this.shouldSkipFocus = false; + switch (key) { + // Select the first available option + case keyHome: { + this.checkFirstOption(shiftKey); + return; + } + // Select the next selectable option + case keyArrowDown: { + this.checkNextOption(shiftKey); + return; + } + // Select the previous selectable option + case keyArrowUp: { + this.checkPreviousOption(shiftKey); + return; + } + // Select the last available option + case keyEnd: { + this.checkLastOption(shiftKey); + return; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEscape: { + this.uncheckAllOptions(); + this.checkActiveIndex(); + return true; + } + case keySpace: { + e.preventDefault(); + if (this.typeAheadExpired) { + this.toggleSelectedForAllCheckedOptions(); + return; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @override + * @internal + */ + mousedownHandler(e) { + if (e.offsetX >= 0 && e.offsetX <= this.scrollWidth) { + return super.mousedownHandler(e); + } + } + /** + * Switches between single-selection and multi-selection mode. + * + * @internal + */ + multipleChanged(prev, next) { + var _a; + this.ariaMultiSelectable = next ? "true" : null; + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + o.checked = next ? false : void 0; + }); + this.setSelectedOptions(); + } + /** + * Sets an option as selected and gives it focus. + * + * @override + * @public + */ + setSelectedOptions() { + if (!this.multiple) { + super.setSelectedOptions(); + return; + } + if (this.$fastController.isConnected && this.options) { + this.selectedOptions = this.options.filter((o) => o.selected); + this.focusAndScrollOptionIntoView(); + } + } + /** + * Ensures the size is a positive integer when the property is updated. + * + * @param prev - the previous size value + * @param next - the current size value + * + * @internal + */ + sizeChanged(prev, next) { + var _a; + const size = Math.max(0, parseInt((_a = next === null || next === void 0 ? void 0 : next.toFixed()) !== null && _a !== void 0 ? _a : "", 10)); + if (size !== next) { + DOM.queueUpdate(() => { + this.size = size; + }); + } + } + /** + * Toggles the selected state of the provided options. If any provided items + * are in an unselected state, all items are set to selected. If every + * provided item is selected, they are all unselected. + * + * @internal + */ + toggleSelectedForAllCheckedOptions() { + const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled); + const force = !enabledCheckedOptions.every((o) => o.selected); + enabledCheckedOptions.forEach((o) => o.selected = force); + this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]); + this.setSelectedOptions(); + } + /** + * @override + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (!this.multiple) { + super.typeaheadBufferChanged(prev, next); + return; + } + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + const activeIndex = this.options.indexOf(typeaheadMatches[0]); + if (activeIndex > -1) { + this.activeIndex = activeIndex; + this.uncheckAllOptions(); + this.checkActiveIndex(); + } + this.typeAheadExpired = false; + } + } + /** + * Unchecks all options. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - reset the rangeStartIndex + * + * @internal + */ + uncheckAllOptions(preserveChecked = false) { + this.options.forEach((o) => o.checked = this.multiple ? false : void 0); + if (!preserveChecked) { + this.rangeStartIndex = -1; + } + } + }; + __decorate([ + observable + ], ListboxElement.prototype, "activeIndex", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxElement.prototype, "multiple", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], ListboxElement.prototype, "size", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js + var init_listbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js + var init_listbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js"() { + init_listbox(); + init_listbox_element(); + init_listbox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js + var PickerMenu; + var init_picker_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js"() { + init_tslib_es6(); + init_dist2(); + init_esm(); + init_foundation_element(); + PickerMenu = class extends FoundationElement { + constructor() { + super(...arguments); + this.optionElements = []; + } + menuElementsChanged() { + this.updateOptions(); + } + headerElementsChanged() { + this.updateOptions(); + } + footerElementsChanged() { + this.updateOptions(); + } + updateOptions() { + this.optionElements.splice(0, this.optionElements.length); + this.addSlottedListItems(this.headerElements); + this.addSlottedListItems(this.menuElements); + this.addSlottedListItems(this.footerElements); + this.$emit("optionsupdated", { bubbles: false }); + } + addSlottedListItems(slotChildren) { + if (slotChildren === void 0) { + return; + } + slotChildren.forEach((child) => { + if (child.nodeType === 1 && child.getAttribute("role") === "listitem") { + child.id = child.id || uniqueId("option-"); + this.optionElements.push(child); + } + }); + } + }; + __decorate([ + observable + ], PickerMenu.prototype, "menuElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "headerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "footerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "suggestionsAvailableText", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js + var defaultContentsTemplate, PickerMenuOption; + var init_picker_menu_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + defaultContentsTemplate = html` + +`; + PickerMenuOption = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.disconnectView(); + } + handleClick(e) { + if (e.defaultPrevented) { + return false; + } + this.handleInvoked(); + return false; + } + handleInvoked() { + this.$emit("pickeroptioninvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerMenuOption.prototype, "value", void 0); + __decorate([ + observable + ], PickerMenuOption.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js + var init_picker_list = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js + var defaultContentsTemplate2, PickerListItem; + var init_picker_list_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + defaultContentsTemplate2 = html` + +`; + PickerListItem = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + this.disconnectView(); + super.disconnectedCallback(); + } + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + if (e.key === keyEnter) { + this.handleInvoke(); + return false; + } + return true; + } + handleClick(e) { + if (!e.defaultPrevented) { + this.handleInvoke(); + } + return false; + } + handleInvoke() { + this.$emit("pickeriteminvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate2.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerListItem.prototype, "value", void 0); + __decorate([ + observable + ], PickerListItem.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js + var init_picker_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js + var _Picker, FormAssociatedPicker; + var init_picker_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Picker = class extends FoundationElement { + }; + FormAssociatedPicker = class extends FormAssociated(_Picker) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js + var pickerInputTemplate, Picker; + var init_picker = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_anchored_region2(); + init_picker_menu_option(); + init_picker_list_item(); + init_picker_form_associated(); + pickerInputTemplate = html` + +`; + Picker = class extends FormAssociatedPicker { + constructor() { + super(...arguments); + this.selection = ""; + this.filterSelected = true; + this.filterQuery = true; + this.noSuggestionsText = "No suggestions available"; + this.suggestionsAvailableText = "Suggestions available"; + this.loadingText = "Loading suggestions"; + this.menuPlacement = "bottom-fill"; + this.showLoading = false; + this.optionsList = []; + this.filteredOptionsList = []; + this.flyoutOpen = false; + this.menuFocusIndex = -1; + this.showNoOptions = false; + this.selectedItems = []; + this.inputElementView = null; + this.handleTextInput = (e) => { + this.query = this.inputElement.value; + }; + this.handleInputClick = (e) => { + e.preventDefault(); + this.toggleFlyout(true); + }; + this.setRegionProps = () => { + if (!this.flyoutOpen) { + return; + } + if (this.region === null || this.region === void 0) { + DOM.queueUpdate(this.setRegionProps); + return; + } + this.region.anchorElement = this.inputElement; + }; + this.configLookup = { + top: FlyoutPosTop, + bottom: FlyoutPosBottom, + tallest: FlyoutPosTallest, + "top-fill": FlyoutPosTopFill, + "bottom-fill": FlyoutPosBottomFill, + "tallest-fill": FlyoutPosTallestFill + }; + } + selectionChanged() { + if (this.$fastController.isConnected) { + this.handleSelectionChange(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.value = this.selection; + this.validate(); + } + } + } + optionsChanged() { + this.optionsList = this.options.split(",").map((opt) => opt.trim()).filter((opt) => opt !== ""); + } + menuPlacementChanged() { + if (this.$fastController.isConnected) { + this.updateMenuConfig(); + } + } + showLoadingChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + listItemTemplateChanged() { + this.updateListItemTemplate(); + } + defaultListItemTemplateChanged() { + this.updateListItemTemplate(); + } + menuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + defaultMenuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + optionsListChanged() { + this.updateFilteredOptions(); + } + queryChanged() { + if (this.$fastController.isConnected) { + if (this.inputElement.value !== this.query) { + this.inputElement.value = this.query; + } + this.updateFilteredOptions(); + this.$emit("querychange", { bubbles: false }); + } + } + filteredOptionsListChanged() { + if (this.$fastController.isConnected) { + this.showNoOptions = this.filteredOptionsList.length === 0 && this.menuElement.querySelectorAll('[role="listitem"]').length === 0; + this.setFocusedOption(this.showNoOptions ? -1 : 0); + } + } + flyoutOpenChanged() { + if (this.flyoutOpen) { + DOM.queueUpdate(this.setRegionProps); + this.$emit("menuopening", { bubbles: false }); + } else { + this.$emit("menuclosing", { bubbles: false }); + } + } + showNoOptionsChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.listElement = document.createElement(this.selectedListTag); + this.appendChild(this.listElement); + this.itemsPlaceholderElement = document.createComment(""); + this.listElement.append(this.itemsPlaceholderElement); + this.inputElementView = pickerInputTemplate.render(this, this.listElement); + const match = this.menuTag.toUpperCase(); + this.menuElement = Array.from(this.children).find((element) => { + return element.tagName === match; + }); + if (this.menuElement === void 0) { + this.menuElement = document.createElement(this.menuTag); + this.appendChild(this.menuElement); + } + if (this.menuElement.id === "") { + this.menuElement.id = uniqueId("listbox-"); + } + this.menuId = this.menuElement.id; + this.optionsPlaceholder = document.createComment(""); + this.menuElement.append(this.optionsPlaceholder); + this.updateMenuConfig(); + DOM.queueUpdate(() => this.initialize()); + } + disconnectedCallback() { + super.disconnectedCallback(); + this.toggleFlyout(false); + this.inputElement.removeEventListener("input", this.handleTextInput); + this.inputElement.removeEventListener("click", this.handleInputClick); + if (this.inputElementView !== null) { + this.inputElementView.dispose(); + this.inputElementView = null; + } + } + /** + * Move focus to the input element + * @public + */ + focus() { + this.inputElement.focus(); + } + /** + * Initialize the component. This is delayed a frame to ensure children are connected as well. + */ + initialize() { + this.updateListItemTemplate(); + this.updateOptionTemplate(); + this.itemsRepeatBehavior = new RepeatDirective((x) => x.selectedItems, (x) => x.activeListItemTemplate, { positioning: true }).createBehavior(this.itemsPlaceholderElement); + this.inputElement.addEventListener("input", this.handleTextInput); + this.inputElement.addEventListener("click", this.handleInputClick); + this.$fastController.addBehaviors([this.itemsRepeatBehavior]); + this.menuElement.suggestionsAvailableText = this.suggestionsAvailableText; + this.menuElement.addEventListener("optionsupdated", this.handleMenuOptionsUpdated); + this.optionsRepeatBehavior = new RepeatDirective((x) => x.filteredOptionsList, (x) => x.activeMenuOptionTemplate, { positioning: true }).createBehavior(this.optionsPlaceholder); + this.$fastController.addBehaviors([this.optionsRepeatBehavior]); + this.handleSelectionChange(); + } + /** + * Toggles the menu flyout + */ + toggleFlyout(open) { + if (this.flyoutOpen === open) { + return; + } + if (open && document.activeElement === this.inputElement) { + this.flyoutOpen = open; + DOM.queueUpdate(() => { + if (this.menuElement !== void 0) { + this.setFocusedOption(0); + } else { + this.disableMenu(); + } + }); + return; + } + this.flyoutOpen = false; + this.disableMenu(); + return; + } + /** + * Handle the menu options updated event from the child menu + */ + handleMenuOptionsUpdated(e) { + e.preventDefault(); + if (this.flyoutOpen) { + this.setFocusedOption(0); + } + } + /** + * Handle key down events. + */ + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + // TODO: what should "home" and "end" keys do, exactly? + // + // case keyHome: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.setFocusedOption(0); + // } + // } + // return false; + // } + // case keyEnd: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.toggleFlyout(true); + // this.setFocusedOption(this.menuElement.optionElements.length - 1); + // } + // } + // return false; + // } + case keyArrowDown: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const nextFocusOptionIndex = this.flyoutOpen ? Math.min(this.menuFocusIndex + 1, this.menuElement.optionElements.length - 1) : 0; + this.setFocusedOption(nextFocusOptionIndex); + } + return false; + } + case keyArrowUp: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const previousFocusOptionIndex = this.flyoutOpen ? Math.max(this.menuFocusIndex - 1, 0) : 0; + this.setFocusedOption(previousFocusOptionIndex); + } + return false; + } + case keyEscape: { + this.toggleFlyout(false); + return false; + } + case keyEnter: { + if (this.menuFocusIndex !== -1 && this.menuElement.optionElements.length > this.menuFocusIndex) { + this.menuElement.optionElements[this.menuFocusIndex].click(); + } + return false; + } + case keyArrowRight: { + if (document.activeElement !== this.inputElement) { + this.incrementFocusedItem(1); + return false; + } + return true; + } + case keyArrowLeft: { + if (this.inputElement.selectionStart === 0) { + this.incrementFocusedItem(-1); + return false; + } + return true; + } + case keyDelete: + case keyBackspace: { + if (document.activeElement === null) { + return true; + } + if (document.activeElement === this.inputElement) { + if (this.inputElement.selectionStart === 0) { + this.selection = this.selectedItems.slice(0, this.selectedItems.length - 1).toString(); + this.toggleFlyout(false); + return false; + } + return true; + } + const selectedItems = Array.from(this.listElement.children); + const currentFocusedItemIndex = selectedItems.indexOf(document.activeElement); + if (currentFocusedItemIndex > -1) { + this.selection = this.selectedItems.splice(currentFocusedItemIndex, 1).toString(); + DOM.queueUpdate(() => { + selectedItems[Math.min(selectedItems.length, currentFocusedItemIndex)].focus(); + }); + return false; + } + return true; + } + } + this.toggleFlyout(true); + return true; + } + /** + * Handle focus in events. + */ + handleFocusIn(e) { + return false; + } + /** + * Handle focus out events. + */ + handleFocusOut(e) { + if (this.menuElement === void 0 || !this.menuElement.contains(e.relatedTarget)) { + this.toggleFlyout(false); + } + return false; + } + /** + * The list of selected items has changed + */ + handleSelectionChange() { + if (this.selectedItems.toString() === this.selection) { + return; + } + this.selectedItems = this.selection === "" ? [] : this.selection.split(","); + this.updateFilteredOptions(); + DOM.queueUpdate(() => { + this.checkMaxItems(); + }); + this.$emit("selectionchange", { bubbles: false }); + } + /** + * Anchored region is loaded, menu and options exist in the DOM. + */ + handleRegionLoaded(e) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + this.$emit("menuloaded", { bubbles: false }); + }); + } + /** + * Checks if the maximum number of items has been chosen and updates the ui. + */ + checkMaxItems() { + if (this.inputElement === void 0) { + return; + } + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + if (document.activeElement === this.inputElement) { + const selectedItemInstances = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + selectedItemInstances[selectedItemInstances.length - 1].focus(); + } + this.inputElement.hidden = true; + } else { + this.inputElement.hidden = false; + } + } + /** + * A list item has been invoked. + */ + handleItemInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerListItem) { + const listItems = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + const itemIndex = listItems.indexOf(e.target); + if (itemIndex !== -1) { + const newSelection = this.selectedItems.slice(); + newSelection.splice(itemIndex, 1); + this.selection = newSelection.toString(); + DOM.queueUpdate(() => this.incrementFocusedItem(0)); + } + return false; + } + return true; + } + /** + * A menu option has been invoked. + */ + handleOptionInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerMenuOption) { + if (e.target.value !== void 0) { + this.selection = `${this.selection}${this.selection === "" ? "" : ","}${e.target.value}`; + } + this.inputElement.value = ""; + this.query = ""; + this.inputElement.focus(); + this.toggleFlyout(false); + return false; + } + return true; + } + /** + * Increments the focused list item by the specified amount + */ + incrementFocusedItem(increment) { + if (this.selectedItems.length === 0) { + this.inputElement.focus(); + return; + } + const selectedItemsAsElements = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + if (document.activeElement !== null) { + let currentFocusedItemIndex = selectedItemsAsElements.indexOf(document.activeElement); + if (currentFocusedItemIndex === -1) { + currentFocusedItemIndex = selectedItemsAsElements.length; + } + const newFocusedItemIndex = Math.min(selectedItemsAsElements.length, Math.max(0, currentFocusedItemIndex + increment)); + if (newFocusedItemIndex === selectedItemsAsElements.length) { + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + selectedItemsAsElements[newFocusedItemIndex - 1].focus(); + } else { + this.inputElement.focus(); + } + } else { + selectedItemsAsElements[newFocusedItemIndex].focus(); + } + } + } + /** + * Disables the menu. Note that the menu can be open, just doens't have any valid options on display. + */ + disableMenu() { + var _a, _b, _c; + this.menuFocusIndex = -1; + this.menuFocusOptionId = void 0; + (_a = this.inputElement) === null || _a === void 0 ? void 0 : _a.removeAttribute("aria-activedescendant"); + (_b = this.inputElement) === null || _b === void 0 ? void 0 : _b.removeAttribute("aria-owns"); + (_c = this.inputElement) === null || _c === void 0 ? void 0 : _c.removeAttribute("aria-expanded"); + } + /** + * Sets the currently focused menu option by index + */ + setFocusedOption(optionIndex) { + if (!this.flyoutOpen || optionIndex === -1 || this.showNoOptions || this.showLoading) { + this.disableMenu(); + return; + } + if (this.menuElement.optionElements.length === 0) { + return; + } + this.menuElement.optionElements.forEach((element) => { + element.setAttribute("aria-selected", "false"); + }); + this.menuFocusIndex = optionIndex; + if (this.menuFocusIndex > this.menuElement.optionElements.length - 1) { + this.menuFocusIndex = this.menuElement.optionElements.length - 1; + } + this.menuFocusOptionId = this.menuElement.optionElements[this.menuFocusIndex].id; + this.inputElement.setAttribute("aria-owns", this.menuId); + this.inputElement.setAttribute("aria-expanded", "true"); + this.inputElement.setAttribute("aria-activedescendant", this.menuFocusOptionId); + const focusedOption = this.menuElement.optionElements[this.menuFocusIndex]; + focusedOption.setAttribute("aria-selected", "true"); + this.menuElement.scrollTo(0, focusedOption.offsetTop); + } + /** + * Updates the template used for the list item repeat behavior + */ + updateListItemTemplate() { + var _a; + this.activeListItemTemplate = (_a = this.listItemTemplate) !== null && _a !== void 0 ? _a : this.defaultListItemTemplate; + } + /** + * Updates the template used for the menu option repeat behavior + */ + updateOptionTemplate() { + var _a; + this.activeMenuOptionTemplate = (_a = this.menuOptionTemplate) !== null && _a !== void 0 ? _a : this.defaultMenuOptionTemplate; + } + /** + * Updates the filtered options array + */ + updateFilteredOptions() { + this.filteredOptionsList = this.optionsList.slice(0); + if (this.filterSelected) { + this.filteredOptionsList = this.filteredOptionsList.filter((el2) => this.selectedItems.indexOf(el2) === -1); + } + if (this.filterQuery && this.query !== "" && this.query !== void 0) { + this.filteredOptionsList = this.filteredOptionsList.filter((el2) => el2.indexOf(this.query) !== -1); + } + } + /** + * Updates the menu configuration + */ + updateMenuConfig() { + let newConfig = this.configLookup[this.menuPlacement]; + if (newConfig === null) { + newConfig = FlyoutPosBottomFill; + } + this.menuConfig = Object.assign(Object.assign({}, newConfig), { autoUpdateMode: "auto", fixedPlacement: true, horizontalViewportLock: false, verticalViewportLock: false }); + } + }; + __decorate([ + attr({ attribute: "selection" }) + ], Picker.prototype, "selection", void 0); + __decorate([ + attr({ attribute: "options" }) + ], Picker.prototype, "options", void 0); + __decorate([ + attr({ attribute: "filter-selected", mode: "boolean" }) + ], Picker.prototype, "filterSelected", void 0); + __decorate([ + attr({ attribute: "filter-query", mode: "boolean" }) + ], Picker.prototype, "filterQuery", void 0); + __decorate([ + attr({ attribute: "max-selected" }) + ], Picker.prototype, "maxSelected", void 0); + __decorate([ + attr({ attribute: "no-suggestions-text" }) + ], Picker.prototype, "noSuggestionsText", void 0); + __decorate([ + attr({ attribute: "suggestions-available-text" }) + ], Picker.prototype, "suggestionsAvailableText", void 0); + __decorate([ + attr({ attribute: "loading-text" }) + ], Picker.prototype, "loadingText", void 0); + __decorate([ + attr({ attribute: "label" }) + ], Picker.prototype, "label", void 0); + __decorate([ + attr({ attribute: "labelledby" }) + ], Picker.prototype, "labelledBy", void 0); + __decorate([ + attr({ attribute: "placeholder" }) + ], Picker.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "menu-placement" }) + ], Picker.prototype, "menuPlacement", void 0); + __decorate([ + observable + ], Picker.prototype, "showLoading", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "optionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "query", void 0); + __decorate([ + observable + ], Picker.prototype, "filteredOptionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "flyoutOpen", void 0); + __decorate([ + observable + ], Picker.prototype, "menuId", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedListTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusIndex", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusOptionId", void 0); + __decorate([ + observable + ], Picker.prototype, "showNoOptions", void 0); + __decorate([ + observable + ], Picker.prototype, "menuConfig", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js + var init_picker_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js + var init_picker_menu_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js + var init_picker_list_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js + var init_picker_list_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js + var init_picker2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js"() { + init_picker_template(); + init_picker(); + init_picker_menu_template(); + init_picker_menu(); + init_picker_menu_option_template(); + init_picker_menu_option(); + init_picker_list_template(); + init_picker_list(); + init_picker_list_item_template(); + init_picker_list_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js + var MenuItemRole, roleForMenuItem; + var init_menu_item_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js"() { + MenuItemRole = { + /** + * The menu item has a "menuitem" role + */ + menuitem: "menuitem", + /** + * The menu item has a "menuitemcheckbox" role + */ + menuitemcheckbox: "menuitemcheckbox", + /** + * The menu item has a "menuitemradio" role + */ + menuitemradio: "menuitemradio" + }; + roleForMenuItem = { + [MenuItemRole.menuitem]: "menuitem", + [MenuItemRole.menuitemcheckbox]: "menuitemcheckbox", + [MenuItemRole.menuitemradio]: "menuitemradio" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js + var MenuItem; + var init_menu_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_start_end(); + init_direction(); + init_apply_mixins(); + init_menu_item_options(); + MenuItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = MenuItemRole.menuitem; + this.hasSubmenu = false; + this.currentDirection = Direction.ltr; + this.focusSubmenuOnLoad = false; + this.handleMenuItemKeyDown = (e) => { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.invoke(); + return false; + case keyArrowRight: + this.expandAndFocus(); + return false; + case keyArrowLeft: + if (this.expanded) { + this.expanded = false; + this.focus(); + return false; + } + } + return true; + }; + this.handleMenuItemClick = (e) => { + if (e.defaultPrevented || this.disabled) { + return false; + } + this.invoke(); + return false; + }; + this.submenuLoaded = () => { + if (!this.focusSubmenuOnLoad) { + return; + } + this.focusSubmenuOnLoad = false; + if (this.hasSubmenu) { + this.submenu.focus(); + this.setAttribute("tabindex", "-1"); + } + }; + this.handleMouseOver = (e) => { + if (this.disabled || !this.hasSubmenu || this.expanded) { + return false; + } + this.expanded = true; + return false; + }; + this.handleMouseOut = (e) => { + if (!this.expanded || this.contains(document.activeElement)) { + return false; + } + this.expanded = false; + return false; + }; + this.expandAndFocus = () => { + if (!this.hasSubmenu) { + return; + } + this.focusSubmenuOnLoad = true; + this.expanded = true; + }; + this.invoke = () => { + if (this.disabled) { + return; + } + switch (this.role) { + case MenuItemRole.menuitemcheckbox: + this.checked = !this.checked; + break; + case MenuItemRole.menuitem: + this.updateSubmenu(); + if (this.hasSubmenu) { + this.expandAndFocus(); + } else { + this.$emit("change"); + } + break; + case MenuItemRole.menuitemradio: + if (!this.checked) { + this.checked = true; + } + break; + } + }; + this.updateSubmenu = () => { + this.submenu = this.domChildren().find((element) => { + return element.getAttribute("role") === "menu"; + }); + this.hasSubmenu = this.submenu === void 0 ? false : true; + }; + } + expandedChanged(oldValue) { + if (this.$fastController.isConnected) { + if (this.submenu === void 0) { + return; + } + if (this.expanded === false) { + this.submenu.collapseExpandedItem(); + } else { + this.currentDirection = getDirection(this); + } + this.$emit("expanded-change", this, { bubbles: false }); + } + } + checkedChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.$emit("change"); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.updateSubmenu(); + }); + if (!this.startColumnCount) { + this.startColumnCount = 1; + } + this.observer = new MutationObserver(this.updateSubmenu); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.submenu = void 0; + if (this.observer !== void 0) { + this.observer.disconnect(); + this.observer = void 0; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "disabled", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "expanded", void 0); + __decorate([ + observable + ], MenuItem.prototype, "startColumnCount", void 0); + __decorate([ + attr + ], MenuItem.prototype, "role", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "checked", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenuRegion", void 0); + __decorate([ + observable + ], MenuItem.prototype, "hasSubmenu", void 0); + __decorate([ + observable + ], MenuItem.prototype, "currentDirection", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenu", void 0); + applyMixins(MenuItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js + var init_menu_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js + var init_menu_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js"() { + init_menu_item_template(); + init_menu_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js + var init_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js + var Menu; + var init_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_menu_item2(); + init_foundation_element(); + Menu = class _Menu extends FoundationElement { + constructor() { + super(...arguments); + this.expandedItem = null; + this.focusIndex = -1; + this.isNestedMenu = () => { + return this.parentElement !== null && isHTMLElement(this.parentElement) && this.parentElement.getAttribute("role") === "menuitem"; + }; + this.handleFocusOut = (e) => { + if (!this.contains(e.relatedTarget) && this.menuItems !== void 0) { + this.collapseExpandedItem(); + const focusIndex = this.menuItems.findIndex(this.isFocusableElement); + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.menuItems[focusIndex].setAttribute("tabindex", "0"); + this.focusIndex = focusIndex; + } + }; + this.handleItemFocus = (e) => { + const targetItem = e.target; + if (this.menuItems !== void 0 && targetItem !== this.menuItems[this.focusIndex]) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.focusIndex = this.menuItems.indexOf(targetItem); + targetItem.setAttribute("tabindex", "0"); + } + }; + this.handleExpandedChanged = (e) => { + if (e.defaultPrevented || e.target === null || this.menuItems === void 0 || this.menuItems.indexOf(e.target) < 0) { + return; + } + e.preventDefault(); + const changedItem = e.target; + if (this.expandedItem !== null && changedItem === this.expandedItem && changedItem.expanded === false) { + this.expandedItem = null; + return; + } + if (changedItem.expanded) { + if (this.expandedItem !== null && this.expandedItem !== changedItem) { + this.expandedItem.expanded = false; + } + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.expandedItem = changedItem; + this.focusIndex = this.menuItems.indexOf(changedItem); + changedItem.setAttribute("tabindex", "0"); + } + }; + this.removeItemListeners = () => { + if (this.menuItems !== void 0) { + this.menuItems.forEach((item) => { + item.removeEventListener("expanded-change", this.handleExpandedChanged); + item.removeEventListener("focus", this.handleItemFocus); + }); + } + }; + this.setItems = () => { + const newItems = this.domChildren(); + this.removeItemListeners(); + this.menuItems = newItems; + const menuItems = this.menuItems.filter(this.isMenuItemElement); + if (menuItems.length) { + this.focusIndex = 0; + } + function elementIndent(el2) { + const role = el2.getAttribute("role"); + const startSlot = el2.querySelector("[slot=start]"); + if (role !== MenuItemRole.menuitem && startSlot === null) { + return 1; + } else if (role === MenuItemRole.menuitem && startSlot !== null) { + return 1; + } else if (role !== MenuItemRole.menuitem && startSlot !== null) { + return 2; + } else { + return 0; + } + } + const indent = menuItems.reduce((accum, current) => { + const elementValue = elementIndent(current); + return accum > elementValue ? accum : elementValue; + }, 0); + menuItems.forEach((item, index) => { + item.setAttribute("tabindex", index === 0 ? "0" : "-1"); + item.addEventListener("expanded-change", this.handleExpandedChanged); + item.addEventListener("focus", this.handleItemFocus); + if (item instanceof MenuItem || "startColumnCount" in item) { + item.startColumnCount = indent; + } + }); + }; + this.changeHandler = (e) => { + if (this.menuItems === void 0) { + return; + } + const changedMenuItem = e.target; + const changeItemIndex = this.menuItems.indexOf(changedMenuItem); + if (changeItemIndex === -1) { + return; + } + if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked === true) { + for (let i = changeItemIndex - 1; i >= 0; --i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + const maxIndex = this.menuItems.length - 1; + for (let i = changeItemIndex + 1; i <= maxIndex; ++i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + } + }; + this.isMenuItemElement = (el2) => { + return isHTMLElement(el2) && _Menu.focusableElementRoles.hasOwnProperty(el2.getAttribute("role")); + }; + this.isFocusableElement = (el2) => { + return this.isMenuItemElement(el2); + }; + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.menuItems !== void 0) { + this.setItems(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.setItems(); + }); + this.addEventListener("change", this.changeHandler); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeItemListeners(); + this.menuItems = void 0; + this.removeEventListener("change", this.changeHandler); + } + /** + * Focuses the first item in the menu. + * + * @public + */ + focus() { + this.setFocus(0, 1); + } + /** + * Collapses any expanded menu items. + * + * @public + */ + collapseExpandedItem() { + if (this.expandedItem !== null) { + this.expandedItem.expanded = false; + this.expandedItem = null; + } + } + /** + * @internal + */ + handleMenuKeyDown(e) { + if (e.defaultPrevented || this.menuItems === void 0) { + return; + } + switch (e.key) { + case keyArrowDown: + this.setFocus(this.focusIndex + 1, 1); + return; + case keyArrowUp: + this.setFocus(this.focusIndex - 1, -1); + return; + case keyEnd: + this.setFocus(this.menuItems.length - 1, -1); + return; + case keyHome: + this.setFocus(0, 1); + return; + default: + return true; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + setFocus(focusIndex, adjustment) { + if (this.menuItems === void 0) { + return; + } + while (focusIndex >= 0 && focusIndex < this.menuItems.length) { + const child = this.menuItems[focusIndex]; + if (this.isFocusableElement(child)) { + if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + } + this.focusIndex = focusIndex; + child.setAttribute("tabindex", "0"); + child.focus(); + break; + } + focusIndex += adjustment; + } + } + }; + Menu.focusableElementRoles = roleForMenuItem; + __decorate([ + observable + ], Menu.prototype, "items", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js + var init_menu2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js"() { + init_menu_template(); + init_menu(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js + var init_number_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js + var _TextField, FormAssociatedTextField; + var init_text_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextField = class extends FoundationElement { + }; + FormAssociatedTextField = class extends FormAssociated(_TextField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js + var TextFieldType; + var init_text_field_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js"() { + TextFieldType = { + /** + * An email TextField + */ + email: "email", + /** + * A password TextField + */ + password: "password", + /** + * A telephone TextField + */ + tel: "tel", + /** + * A text TextField + */ + text: "text", + /** + * A URL TextField + */ + url: "url" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js + var TextField, DelegatesARIATextbox; + var init_text_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_text_field_form_associated(); + init_text_field_options(); + TextField = class extends FormAssociatedTextField { + constructor() { + super(...arguments); + this.type = TextFieldType.text; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + typeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + this.validate(); + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the text field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], TextField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "autofocus", void 0); + __decorate([ + attr + ], TextField.prototype, "placeholder", void 0); + __decorate([ + attr + ], TextField.prototype, "type", void 0); + __decorate([ + attr + ], TextField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "minlength", void 0); + __decorate([ + attr + ], TextField.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextField.prototype, "defaultSlottedNodes", void 0); + DelegatesARIATextbox = class { + }; + applyMixins(DelegatesARIATextbox, ARIAGlobalStatesAndProperties); + applyMixins(TextField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js + var _NumberField, FormAssociatedNumberField; + var init_number_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _NumberField = class extends FoundationElement { + }; + FormAssociatedNumberField = class extends FormAssociated(_NumberField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js + var NumberField; + var init_number_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_text_field(); + init_number_field_form_associated(); + NumberField = class extends FormAssociatedNumberField { + constructor() { + super(...arguments); + this.hideStep = false; + this.step = 1; + this.isUserInput = false; + } + /** + * Ensures that the max is greater than the min and that the value + * is less than the max + * @param previous - the previous max value + * @param next - updated max value + * + * @internal + */ + maxChanged(previous, next) { + var _a; + this.max = Math.max(next, (_a = this.min) !== null && _a !== void 0 ? _a : next); + const min = Math.min(this.min, this.max); + if (this.min !== void 0 && this.min !== min) { + this.min = min; + } + this.value = this.getValidValue(this.value); + } + /** + * Ensures that the min is less than the max and that the value + * is greater than the min + * @param previous - previous min value + * @param next - updated min value + * + * @internal + */ + minChanged(previous, next) { + var _a; + this.min = Math.min(next, (_a = this.max) !== null && _a !== void 0 ? _a : next); + const max = Math.max(this.min, this.max); + if (this.max !== void 0 && this.max !== max) { + this.max = max; + } + this.value = this.getValidValue(this.value); + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * Validates that the value is a number between the min and max + * @param previous - previous stored value + * @param next - value being updated + * @param updateControl - should the text field be updated with value, defaults to true + * @internal + */ + valueChanged(previous, next) { + this.value = this.getValidValue(next); + if (next !== this.value) { + return; + } + if (this.control && !this.isUserInput) { + this.control.value = this.value; + } + super.valueChanged(previous, this.value); + if (previous !== void 0 && !this.isUserInput) { + this.$emit("input"); + this.$emit("change"); + } + this.isUserInput = false; + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Sets the internal value to a valid number between the min and max properties + * @param value - user input + * + * @internal + */ + getValidValue(value) { + var _a, _b; + let validValue = parseFloat(parseFloat(value).toPrecision(12)); + if (isNaN(validValue)) { + validValue = ""; + } else { + validValue = Math.min(validValue, (_a = this.max) !== null && _a !== void 0 ? _a : validValue); + validValue = Math.max(validValue, (_b = this.min) !== null && _b !== void 0 ? _b : validValue).toString(); + } + return validValue; + } + /** + * Increments the value using the step value + * + * @public + */ + stepUp() { + const value = parseFloat(this.value); + const stepUpValue = !isNaN(value) ? value + this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? this.step : 0; + this.value = stepUpValue.toString(); + } + /** + * Decrements the value using the step value + * + * @public + */ + stepDown() { + const value = parseFloat(this.value); + const stepDownValue = !isNaN(value) ? value - this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? 0 - this.step : 0; + this.value = stepDownValue.toString(); + } + /** + * Sets up the initial state of the number field + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "number"); + this.validate(); + this.control.value = this.value; + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the number field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, ""); + this.isUserInput = true; + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** + * Handles the internal control's `keydown` event + * @internal + */ + handleKeyDown(e) { + const key = e.key; + switch (key) { + case keyArrowUp: + this.stepUp(); + return false; + case keyArrowDown: + this.stepDown(); + return false; + } + return true; + } + /** + * Handles populating the input field with a validated value when + * leaving the input field. + * @internal + */ + handleBlur() { + this.control.value = this.value; + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], NumberField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], NumberField.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "hide-step", mode: "boolean" }) + ], NumberField.prototype, "hideStep", void 0); + __decorate([ + attr + ], NumberField.prototype, "placeholder", void 0); + __decorate([ + attr + ], NumberField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "minlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "size", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "step", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "min", void 0); + __decorate([ + observable + ], NumberField.prototype, "defaultSlottedNodes", void 0); + applyMixins(NumberField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js + var init_number_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js"() { + init_number_field_template(); + init_number_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js + var progressSegments, progressRingTemplate; + var init_progress_ring_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js"() { + init_esm(); + progressSegments = 44; + progressRingTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js + var init_progress_ring = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js"() { + init_progress_ring_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js + var BaseProgress; + var init_base_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + BaseProgress = class extends FoundationElement { + constructor() { + super(...arguments); + this.percentComplete = 0; + } + valueChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + minChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + maxChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updatePercentComplete(); + } + updatePercentComplete() { + const min = typeof this.min === "number" ? this.min : 0; + const max = typeof this.max === "number" ? this.max : 100; + const value = typeof this.value === "number" ? this.value : 0; + const range2 = max - min; + this.percentComplete = range2 === 0 ? 0 : Math.fround((value - min) / range2 * 100); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "value", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "max", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], BaseProgress.prototype, "paused", void 0); + __decorate([ + observable + ], BaseProgress.prototype, "percentComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js + var init_progress_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js + var init_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js"() { + init_base_progress(); + init_progress_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js + var radioGroupTemplate; + var init_radio_group_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js"() { + init_esm(); + init_dist2(); + radioGroupTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js + var RadioGroup; + var init_radio_group = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + RadioGroup = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = Orientation.horizontal; + this.radioChangeHandler = (e) => { + const changedRadio = e.target; + if (changedRadio.checked) { + this.slottedRadioButtons.forEach((radio) => { + if (radio !== changedRadio) { + radio.checked = false; + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + } + }); + this.selectedRadio = changedRadio; + this.value = changedRadio.value; + changedRadio.setAttribute("tabindex", "0"); + this.focusedRadio = changedRadio; + } + e.stopPropagation(); + }; + this.moveToRadioByIndex = (group, index) => { + const radio = group[index]; + if (!this.isInsideToolbar) { + radio.setAttribute("tabindex", "0"); + if (radio.readOnly) { + this.slottedRadioButtons.forEach((nextRadio) => { + if (nextRadio !== radio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + radio.checked = true; + this.selectedRadio = radio; + } + } + this.focusedRadio = radio; + radio.focus(); + }; + this.moveRightOffGroup = () => { + var _a; + (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.moveLeftOffGroup = () => { + var _a; + (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.focusOutHandler = (e) => { + const group = this.slottedRadioButtons; + const radio = e.target; + const index = radio !== null ? group.indexOf(radio) : 0; + const focusedIndex = this.focusedRadio ? group.indexOf(this.focusedRadio) : -1; + if (focusedIndex === 0 && index === focusedIndex || focusedIndex === group.length - 1 && focusedIndex === index) { + if (!this.selectedRadio) { + this.focusedRadio = group[0]; + this.focusedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.focusedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + this.focusedRadio = this.selectedRadio; + if (!this.isInsideFoundationToolbar) { + this.selectedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.selectedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } + } + } + return true; + }; + this.clickHandler = (e) => { + const radio = e.target; + if (radio) { + const group = this.slottedRadioButtons; + if (radio.checked || group.indexOf(radio) === 0) { + radio.setAttribute("tabindex", "0"); + this.selectedRadio = radio; + } else { + radio.setAttribute("tabindex", "-1"); + this.selectedRadio = null; + } + this.focusedRadio = radio; + } + e.preventDefault(); + }; + this.shouldMoveOffGroupToTheRight = (index, group, key) => { + return index === group.length && this.isInsideToolbar && key === keyArrowRight; + }; + this.shouldMoveOffGroupToTheLeft = (group, key) => { + const index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + return index < 0 && this.isInsideToolbar && key === keyArrowLeft; + }; + this.checkFocusedRadio = () => { + if (this.focusedRadio !== null && !this.focusedRadio.readOnly && !this.focusedRadio.checked) { + this.focusedRadio.checked = true; + this.focusedRadio.setAttribute("tabindex", "0"); + this.focusedRadio.focus(); + this.selectedRadio = this.focusedRadio; + } + }; + this.moveRight = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1; + if (this.shouldMoveOffGroupToTheRight(index, group, e.key)) { + this.moveRightOffGroup(); + return; + } else if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index + 1 >= group.length) { + if (this.isInsideToolbar) { + break; + } else { + index = 0; + } + } else { + index += 1; + } + } + }; + this.moveLeft = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + if (this.shouldMoveOffGroupToTheLeft(group, e.key)) { + this.moveLeftOffGroup(); + return; + } + while (index >= 0 && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.keydownHandler = (e) => { + const key = e.key; + if (key in ArrowKeys && this.isInsideFoundationToolbar) { + return true; + } + switch (key) { + case keyEnter: { + this.checkFocusedRadio(); + break; + } + case keyArrowRight: + case keyArrowDown: { + if (this.direction === Direction.ltr) { + this.moveRight(e); + } else { + this.moveLeft(e); + } + break; + } + case keyArrowLeft: + case keyArrowUp: { + if (this.direction === Direction.ltr) { + this.moveLeft(e); + } else { + this.moveRight(e); + } + break; + } + default: { + return true; + } + } + }; + } + readOnlyChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.readOnly) { + radio.readOnly = true; + } else { + radio.readOnly = false; + } + }); + } + } + disabledChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.disabled) { + radio.disabled = true; + } else { + radio.disabled = false; + } + }); + } + } + nameChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + radio.setAttribute("name", this.name); + }); + } + } + valueChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + if (radio.value === this.value) { + radio.checked = true; + this.selectedRadio = radio; + } + }); + } + this.$emit("change"); + } + slottedRadioButtonsChanged(oldValue, newValue) { + if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) { + this.setupRadioButtons(); + } + } + get parentToolbar() { + return this.closest('[role="toolbar"]'); + } + get isInsideToolbar() { + var _a; + return (_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false; + } + get isInsideFoundationToolbar() { + var _a; + return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + this.setupRadioButtons(); + } + disconnectedCallback() { + this.slottedRadioButtons.forEach((radio) => { + radio.removeEventListener("change", this.radioChangeHandler); + }); + } + setupRadioButtons() { + const checkedRadios = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0; + if (numberOfCheckedRadios > 1) { + const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1]; + lastCheckedRadio.checked = true; + } + let foundMatchingVal = false; + this.slottedRadioButtons.forEach((radio) => { + if (this.name !== void 0) { + radio.setAttribute("name", this.name); + } + if (this.disabled) { + radio.disabled = true; + } + if (this.readOnly) { + radio.readOnly = true; + } + if (this.value && this.value === radio.value) { + this.selectedRadio = radio; + this.focusedRadio = radio; + radio.checked = true; + radio.setAttribute("tabindex", "0"); + foundMatchingVal = true; + } else { + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + radio.checked = false; + } + radio.addEventListener("change", this.radioChangeHandler); + }); + if (this.value === void 0 && this.slottedRadioButtons.length > 0) { + const checkedRadios2 = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios2 = checkedRadios2 !== null ? checkedRadios2.length : 0; + if (numberOfCheckedRadios2 > 0 && !foundMatchingVal) { + const lastCheckedRadio = checkedRadios2[numberOfCheckedRadios2 - 1]; + lastCheckedRadio.checked = true; + this.focusedRadio = lastCheckedRadio; + lastCheckedRadio.setAttribute("tabindex", "0"); + } else { + this.slottedRadioButtons[0].setAttribute("tabindex", "0"); + this.focusedRadio = this.slottedRadioButtons[0]; + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], RadioGroup.prototype, "readOnly", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], RadioGroup.prototype, "disabled", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "name", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "value", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "orientation", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "childItems", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "slottedRadioButtons", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js + var init_radio_group2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js"() { + init_radio_group_template(); + init_radio_group(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js + var radioTemplate; + var init_radio_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js"() { + init_esm(); + radioTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js + var _Radio, FormAssociatedRadio; + var init_radio_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Radio = class extends FoundationElement { + }; + FormAssociatedRadio = class extends CheckableFormAssociated(_Radio) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js + var Radio; + var init_radio = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_radio_form_associated(); + Radio = class extends FormAssociatedRadio { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + switch (e.key) { + case keySpace: + if (!this.checked && !this.readOnly) { + this.checked = true; + } + return; + } + return true; + }; + this.proxy.setAttribute("type", "radio"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * @internal + */ + defaultCheckedChanged() { + var _a; + if (this.$fastController.isConnected && !this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_a = this.defaultChecked) !== null && _a !== void 0 ? _a : false; + this.dirtyChecked = false; + } + } + } + /** + * @internal + */ + connectedCallback() { + var _a, _b; + super.connectedCallback(); + this.validate(); + if (((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("role")) !== "radiogroup" && this.getAttribute("tabindex") === null) { + if (!this.disabled) { + this.setAttribute("tabindex", "0"); + } + } + if (this.checkedAttribute) { + if (!this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_b = this.defaultChecked) !== null && _b !== void 0 ? _b : false; + this.dirtyChecked = false; + } + } + } + } + isInsideRadioGroup() { + const parent = this.closest("[role=radiogroup]"); + return parent !== null; + } + /** + * @internal + */ + clickHandler(e) { + if (!this.disabled && !this.readOnly && !this.checked) { + this.checked = true; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Radio.prototype, "readOnly", void 0); + __decorate([ + observable + ], Radio.prototype, "name", void 0); + __decorate([ + observable + ], Radio.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js + var init_radio2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js"() { + init_radio_template(); + init_radio(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js + var HorizontalScroll; + var init_horizontal_scroll = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + HorizontalScroll = class extends FoundationElement { + constructor() { + super(...arguments); + this.framesPerSecond = 60; + this.updatingItems = false; + this.speed = 600; + this.easing = "ease-in-out"; + this.flippersHiddenFromAT = false; + this.scrolling = false; + this.resizeDetector = null; + } + /** + * The calculated duration for a frame. + * + * @internal + */ + get frameTime() { + return 1e3 / this.framesPerSecond; + } + /** + * Firing scrollstart and scrollend events + * @internal + */ + scrollingChanged(prev, next) { + if (this.scrollContainer) { + const event = this.scrolling == true ? "scrollstart" : "scrollend"; + this.$emit(event, this.scrollContainer.scrollLeft); + } + } + /** + * In RTL mode + * @internal + */ + get isRtl() { + return this.scrollItems.length > 1 && this.scrollItems[0].offsetLeft > this.scrollItems[1].offsetLeft; + } + connectedCallback() { + super.connectedCallback(); + this.initializeResizeDetector(); + } + disconnectedCallback() { + this.disconnectResizeDetector(); + super.disconnectedCallback(); + } + /** + * Updates scroll stops and flippers when scroll items change + * @param previous - current scroll items + * @param next - new updated scroll items + * @public + */ + scrollItemsChanged(previous, next) { + if (next && !this.updatingItems) { + DOM.queueUpdate(() => this.setStops()); + } + } + /** + * destroys the instance's resize observer + * @internal + */ + disconnectResizeDetector() { + if (this.resizeDetector) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + * @internal + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.resized.bind(this)); + this.resizeDetector.observe(this); + } + /** + * Looks for slots and uses child nodes instead + * @internal + */ + updateScrollStops() { + this.updatingItems = true; + const updatedItems = this.scrollItems.reduce((scrollItems, scrollItem) => { + if (scrollItem instanceof HTMLSlotElement) { + return scrollItems.concat(scrollItem.assignedElements()); + } + scrollItems.push(scrollItem); + return scrollItems; + }, []); + this.scrollItems = updatedItems; + this.updatingItems = false; + } + /** + * Finds all of the scroll stops between elements + * @internal + */ + setStops() { + this.updateScrollStops(); + const { scrollContainer: container } = this; + const { scrollLeft } = container; + const { width: containerWidth, left: containerLeft } = container.getBoundingClientRect(); + this.width = containerWidth; + let lastStop = 0; + let stops = this.scrollItems.map((item, index) => { + const { left, width } = item.getBoundingClientRect(); + const leftPosition = Math.round(left + scrollLeft - containerLeft); + const right = Math.round(leftPosition + width); + if (this.isRtl) { + return -right; + } + lastStop = right; + return index === 0 ? 0 : leftPosition; + }).concat(lastStop); + stops = this.fixScrollMisalign(stops); + stops.sort((a, b) => Math.abs(a) - Math.abs(b)); + this.scrollStops = stops; + this.setFlippers(); + } + /** + * Checks to see if the stops are returning values + * otherwise it will try to reinitialize them + * + * @returns boolean indicating that current scrollStops are valid non-zero values + * @internal + */ + validateStops(reinit = true) { + const hasStops = () => !!this.scrollStops.find((stop) => stop > 0); + if (!hasStops() && reinit) { + this.setStops(); + } + return hasStops(); + } + /** + * + */ + fixScrollMisalign(stops) { + if (this.isRtl && stops.some((stop) => stop > 0)) { + stops.sort((a, b) => b - a); + const offset = stops[0]; + stops = stops.map((stop) => stop - offset); + } + return stops; + } + /** + * Sets the controls view if enabled + * @internal + */ + setFlippers() { + var _a, _b; + const position = this.scrollContainer.scrollLeft; + (_a = this.previousFlipperContainer) === null || _a === void 0 ? void 0 : _a.classList.toggle("disabled", position === 0); + if (this.scrollStops) { + const lastStop = Math.abs(this.scrollStops[this.scrollStops.length - 1]); + (_b = this.nextFlipperContainer) === null || _b === void 0 ? void 0 : _b.classList.toggle("disabled", this.validateStops(false) && Math.abs(position) + this.width >= lastStop); + } + } + /** + * Function that can scroll an item into view. + * @param item - An item index, a scroll item or a child of one of the scroll items + * @param padding - Padding of the viewport where the active item shouldn't be + * @param rightPadding - Optional right padding. Uses the padding if not defined + * + * @public + */ + scrollInView(item, padding = 0, rightPadding) { + var _a; + if (typeof item !== "number" && item) { + item = this.scrollItems.findIndex((scrollItem) => scrollItem === item || scrollItem.contains(item)); + } + if (item !== void 0) { + rightPadding = rightPadding !== null && rightPadding !== void 0 ? rightPadding : padding; + const { scrollContainer: container, scrollStops, scrollItems: items } = this; + const { scrollLeft } = this.scrollContainer; + const { width: containerWidth } = container.getBoundingClientRect(); + const itemStart = scrollStops[item]; + const { width } = items[item].getBoundingClientRect(); + const itemEnd = itemStart + width; + const isBefore = scrollLeft + padding > itemStart; + if (isBefore || scrollLeft + containerWidth - rightPadding < itemEnd) { + const stops = [...scrollStops].sort((a, b) => isBefore ? b - a : a - b); + const scrollTo = (_a = stops.find((position) => isBefore ? position + padding < itemStart : position + containerWidth - (rightPadding !== null && rightPadding !== void 0 ? rightPadding : 0) > itemEnd)) !== null && _a !== void 0 ? _a : 0; + this.scrollToPosition(scrollTo); + } + } + } + /** + * Lets the user arrow left and right through the horizontal scroll + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + this.scrollToPrevious(); + break; + case "ArrowRight": + this.scrollToNext(); + break; + } + } + /** + * Scrolls items to the left + * @public + */ + scrollToPrevious() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop, index) => stop >= scrollPosition && (this.isRtl || index === this.scrollStops.length - 1 || this.scrollStops[index + 1] > scrollPosition)); + const right = Math.abs(this.scrollStops[current + 1]); + let nextIndex = this.scrollStops.findIndex((stop) => Math.abs(stop) + this.width > right); + if (nextIndex >= current || nextIndex === -1) { + nextIndex = current > 0 ? current - 1 : 0; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Scrolls items to the right + * @public + */ + scrollToNext() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop) => Math.abs(stop) >= Math.abs(scrollPosition)); + const outOfView = this.scrollStops.findIndex((stop) => Math.abs(scrollPosition) + this.width <= Math.abs(stop)); + let nextIndex = current; + if (outOfView > current + 2) { + nextIndex = outOfView - 2; + } else if (current < this.scrollStops.length - 2) { + nextIndex = current + 1; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Handles scrolling with easing + * @param position - starting position + * @param newPosition - position to scroll to + * @public + */ + scrollToPosition(newPosition, position = this.scrollContainer.scrollLeft) { + var _a; + if (this.scrolling) { + return; + } + this.scrolling = true; + const seconds = (_a = this.duration) !== null && _a !== void 0 ? _a : `${Math.abs(newPosition - position) / this.speed}s`; + this.content.style.setProperty("transition-duration", seconds); + const computedDuration = parseFloat(getComputedStyle(this.content).getPropertyValue("transition-duration")); + const transitionendHandler = (e) => { + if (e && e.target !== e.currentTarget) { + return; + } + this.content.style.setProperty("transition-duration", "0s"); + this.content.style.removeProperty("transform"); + this.scrollContainer.style.setProperty("scroll-behavior", "auto"); + this.scrollContainer.scrollLeft = newPosition; + this.setFlippers(); + this.content.removeEventListener("transitionend", transitionendHandler); + this.scrolling = false; + }; + if (computedDuration === 0) { + transitionendHandler(); + return; + } + this.content.addEventListener("transitionend", transitionendHandler); + const maxScrollValue = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth; + let transitionStop = this.scrollContainer.scrollLeft - Math.min(newPosition, maxScrollValue); + if (this.isRtl) { + transitionStop = this.scrollContainer.scrollLeft + Math.min(Math.abs(newPosition), maxScrollValue); + } + this.content.style.setProperty("transition-property", "transform"); + this.content.style.setProperty("transition-timing-function", this.easing); + this.content.style.setProperty("transform", `translateX(${transitionStop}px)`); + } + /** + * Monitors resize event on the horizontal-scroll element + * @public + */ + resized() { + if (this.resizeTimeout) { + this.resizeTimeout = clearTimeout(this.resizeTimeout); + } + this.resizeTimeout = setTimeout(() => { + this.width = this.scrollContainer.offsetWidth; + this.setFlippers(); + }, this.frameTime); + } + /** + * Monitors scrolled event on the content container + * @public + */ + scrolled() { + if (this.scrollTimeout) { + this.scrollTimeout = clearTimeout(this.scrollTimeout); + } + this.scrollTimeout = setTimeout(() => { + this.setFlippers(); + }, this.frameTime); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], HorizontalScroll.prototype, "speed", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "duration", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "easing", void 0); + __decorate([ + attr({ attribute: "flippers-hidden-from-at", converter: booleanConverter }) + ], HorizontalScroll.prototype, "flippersHiddenFromAT", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrolling", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrollItems", void 0); + __decorate([ + attr({ attribute: "view" }) + ], HorizontalScroll.prototype, "view", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js + var init_horizontal_scroll_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js + var init_horizontal_scroll2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js"() { + init_horizontal_scroll(); + init_horizontal_scroll_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js + function whitespaceFilter(value, index, array) { + return value.nodeType !== Node.TEXT_NODE ? true : typeof value.nodeValue === "string" && !!value.nodeValue.trim().length; + } + var init_whitespace_filter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js + var init_search_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js + var _Search, FormAssociatedSearch; + var init_search_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Search = class extends FoundationElement { + }; + FormAssociatedSearch = class extends FormAssociated(_Search) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.js + var Search, DelegatesARIASearch; + var init_search = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_search_form_associated(); + Search = class extends FormAssociatedSearch { + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Handles the control's clear value event + * @public + */ + handleClearInput() { + this.value = ""; + this.control.focus(); + this.handleChange(); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Search.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "autofocus", void 0); + __decorate([ + attr + ], Search.prototype, "placeholder", void 0); + __decorate([ + attr + ], Search.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "minlength", void 0); + __decorate([ + attr + ], Search.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "spellcheck", void 0); + __decorate([ + observable + ], Search.prototype, "defaultSlottedNodes", void 0); + DelegatesARIASearch = class { + }; + applyMixins(DelegatesARIASearch, ARIAGlobalStatesAndProperties); + applyMixins(Search, StartEnd, DelegatesARIASearch); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/index.js + var init_search2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/index.js"() { + init_search_template(); + init_search(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js + var _Select, FormAssociatedSelect; + var init_select_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js"() { + init_listbox_element(); + init_form_associated(); + _Select = class extends ListboxElement { + }; + FormAssociatedSelect = class extends FormAssociated(_Select) { + constructor() { + super(...arguments); + this.proxy = document.createElement("select"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.js + var Select, DelegatesARIASelect; + var init_select = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_apply_mixins(); + init_select_form_associated(); + init_select_options(); + Select = class extends FormAssociatedSelect { + constructor() { + super(...arguments); + this.open = false; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + } + /** + * Sets focus and synchronizes ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged(prev, next) { + if (!this.collapsible) { + return; + } + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + this.indexWhenOpened = this.selectedIndex; + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The component is collapsible when in single-selection mode with no size attribute. + * + * @internal + */ + get collapsible() { + return !(this.multiple || typeof this.size === "number"); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c, _d, _e, _f, _g; + const prev = `${this._value}`; + if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.length) { + const selectedIndex = this._options.findIndex((el2) => el2.value === next); + const prevSelectedValue = (_c = (_b = this._options[this.selectedIndex]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null; + const nextSelectedValue = (_e = (_d = this._options[selectedIndex]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : null; + if (selectedIndex === -1 || prevSelectedValue !== nextSelectedValue) { + next = ""; + this.selectedIndex = selectedIndex; + } + next = (_g = (_f = this.firstSelectedOption) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + this.updateDisplayValue(); + } + } + /** + * Sets the value and display value to match the first selected option. + * + * @param shouldEmit - if true, the input and change events will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a, _b; + if (this.$fastController.isConnected) { + this.value = (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : ""; + } + if (shouldEmit) { + this.$emit("input"); + this.$emit("change", this, { + bubbles: true, + composed: void 0 + }); + } + } + /** + * Updates the proxy value when the selected index changes. + * + * @param prev - the previous selected index + * @param next - the next selected index + * + * @internal + */ + selectedIndexChanged(prev, next) { + super.selectedIndexChanged(prev, next); + this.updateValue(); + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * The value displayed on the button. + * + * @public + */ + get displayValue() { + var _a, _b; + Observable.track(this, "displayValue"); + return (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : ""; + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + this.setProxyOptions(); + super.setDefaultSelectedOption(); + if (this.selectedIndex === -1) { + this.selectedIndex = 0; + } + } + /** + * Handle opening and closing the listbox when the select is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + if (this.disabled) { + return; + } + if (this.open) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && captured.disabled) { + return; + } + } + super.clickHandler(e); + this.open = this.collapsible && !this.open; + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + return true; + } + /** + * Handles focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + var _a; + super.focusoutHandler(e); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.includes(focusTarget))) { + this.open = false; + if (this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + } + } + /** + * Updates the value when an option's value changes. + * + * @param source - the source object + * @param propertyName - the property to evaluate + * + * @internal + * @override + */ + handleChange(source, propertyName) { + super.handleChange(source, propertyName); + if (propertyName === "value") { + this.updateValue(); + } + } + /** + * Synchronize the form-associated proxy and updates the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "value"); + }); + super.slottedOptionsChanged(prev, next); + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.subscribe(this, "value"); + }); + this.setProxyOptions(); + this.updateValue(); + } + /** + * Prevents focus when size is set and a scrollbar is clicked. + * + * @param e - the mouse event object + * + * @override + * @internal + */ + mousedownHandler(e) { + var _a; + if (e.offsetX >= 0 && e.offsetX <= ((_a = this.listbox) === null || _a === void 0 ? void 0 : _a.scrollWidth)) { + return super.mousedownHandler(e); + } + return this.collapsible; + } + /** + * Sets the multiple property on the proxy element. + * + * @param prev - the previous multiple value + * @param next - the current multiple value + */ + multipleChanged(prev, next) { + super.multipleChanged(prev, next); + if (this.proxy) { + this.proxy.multiple = next; + } + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @override + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + super.selectedOptionsChanged(prev, next); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o, i) => { + var _a2; + const proxyOption = (_a2 = this.proxy) === null || _a2 === void 0 ? void 0 : _a2.options.item(i); + if (proxyOption) { + proxyOption.selected = o.selected; + } + }); + } + /** + * Sets the selected index to match the first option with the selected attribute, or + * the first selectable option. + * + * @override + * @internal + */ + setDefaultSelectedOption() { + var _a; + const options = (_a = this.options) !== null && _a !== void 0 ? _a : Array.from(this.children).filter(Listbox.slottedOptionFilter); + const selectedIndex = options === null || options === void 0 ? void 0 : options.findIndex((el2) => el2.hasAttribute("selected") || el2.selected || el2.value === this.value); + if (selectedIndex !== -1) { + this.selectedIndex = selectedIndex; + return; + } + this.selectedIndex = 0; + } + /** + * Resets and fills the proxy to match the component's options. + * + * @internal + */ + setProxyOptions() { + if (this.proxy instanceof HTMLSelectElement && this.options) { + this.proxy.options.length = 0; + this.options.forEach((option) => { + const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null); + if (proxyOption) { + this.proxy.options.add(proxyOption); + } + }); + } + } + /** + * Handle keyboard interaction for the select. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + super.keydownHandler(e); + const key = e.key || e.key.charCodeAt(0); + switch (key) { + case keySpace: { + e.preventDefault(); + if (this.collapsible && this.typeAheadExpired) { + this.open = !this.open; + } + break; + } + case keyHome: + case keyEnd: { + e.preventDefault(); + break; + } + case keyEnter: { + e.preventDefault(); + this.open = !this.open; + break; + } + case keyEscape: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + break; + } + case keyTab: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + return true; + } + } + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + this.indexWhenOpened = this.selectedIndex; + } + return !(key === keyArrowDown || key === keyArrowUp); + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + this.addEventListener("contentchange", this.updateDisplayValue); + } + disconnectedCallback() { + this.removeEventListener("contentchange", this.updateDisplayValue); + super.disconnectedCallback(); + } + /** + * Updates the proxy's size property when the size attribute changes. + * + * @param prev - the previous size + * @param next - the current size + * + * @override + * @internal + */ + sizeChanged(prev, next) { + super.sizeChanged(prev, next); + if (this.proxy) { + this.proxy.size = next; + } + } + /** + * + * @internal + */ + updateDisplayValue() { + if (this.collapsible) { + Observable.notify(this, "displayValue"); + } + } + }; + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Select.prototype, "open", void 0); + __decorate([ + volatile + ], Select.prototype, "collapsible", null); + __decorate([ + observable + ], Select.prototype, "control", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Select.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Select.prototype, "position", void 0); + __decorate([ + observable + ], Select.prototype, "maxHeight", void 0); + DelegatesARIASelect = class { + }; + __decorate([ + observable + ], DelegatesARIASelect.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIASelect, DelegatesARIAListbox); + applyMixins(Select, StartEnd, DelegatesARIASelect); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js + var selectTemplate; + var init_select_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js"() { + init_esm(); + init_listbox(); + init_start_end(); + selectTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/index.js + var init_select2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/index.js"() { + init_select(); + init_select_options(); + init_select_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js + var init_skeleton_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js + var Skeleton; + var init_skeleton = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Skeleton = class extends FoundationElement { + constructor() { + super(...arguments); + this.shape = "rect"; + } + }; + __decorate([ + attr + ], Skeleton.prototype, "fill", void 0); + __decorate([ + attr + ], Skeleton.prototype, "shape", void 0); + __decorate([ + attr + ], Skeleton.prototype, "pattern", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Skeleton.prototype, "shimmer", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js + var init_skeleton2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js"() { + init_skeleton_template(); + init_skeleton(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js + var init_slider_label_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js + function convertPixelToPercent(pixelPos, minPosition, maxPosition, direction) { + let pct = limit(0, 1, (pixelPos - minPosition) / (maxPosition - minPosition)); + if (direction === Direction.rtl) { + pct = 1 - pct; + } + return pct; + } + var init_slider_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js"() { + init_dist2(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js + var defaultConfig, SliderLabel; + var init_slider_label = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_slider_utilities(); + init_foundation_element(); + defaultConfig = { + min: 0, + max: 0, + direction: Direction.ltr, + orientation: Orientation.horizontal, + disabled: false + }; + SliderLabel = class extends FoundationElement { + constructor() { + super(...arguments); + this.hideMark = false; + this.sliderDirection = Direction.ltr; + this.getSliderConfiguration = () => { + if (!this.isSliderConfig(this.parentNode)) { + this.sliderDirection = defaultConfig.direction || Direction.ltr; + this.sliderOrientation = defaultConfig.orientation || Orientation.horizontal; + this.sliderMaxPosition = defaultConfig.max; + this.sliderMinPosition = defaultConfig.min; + } else { + const parentSlider = this.parentNode; + const { min, max, direction, orientation, disabled } = parentSlider; + if (disabled !== void 0) { + this.disabled = disabled; + } + this.sliderDirection = direction || Direction.ltr; + this.sliderOrientation = orientation || Orientation.horizontal; + this.sliderMaxPosition = max; + this.sliderMinPosition = min; + } + }; + this.positionAsStyle = () => { + const direction = this.sliderDirection ? this.sliderDirection : Direction.ltr; + const pct = convertPixelToPercent(Number(this.position), Number(this.sliderMinPosition), Number(this.sliderMaxPosition)); + let rightNum = Math.round((1 - pct) * 100); + let leftNum = Math.round(pct * 100); + if (Number.isNaN(leftNum) && Number.isNaN(rightNum)) { + rightNum = 50; + leftNum = 50; + } + if (this.sliderOrientation === Orientation.horizontal) { + return direction === Direction.rtl ? `right: ${leftNum}%; left: ${rightNum}%;` : `left: ${leftNum}%; right: ${rightNum}%;`; + } else { + return `top: ${leftNum}%; bottom: ${rightNum}%;`; + } + }; + } + positionChanged() { + this.positionStyle = this.positionAsStyle(); + } + /** + * @internal + */ + sliderOrientationChanged() { + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.getSliderConfiguration(); + this.positionStyle = this.positionAsStyle(); + this.notifier = Observable.getNotifier(this.parentNode); + this.notifier.subscribe(this, "orientation"); + this.notifier.subscribe(this, "direction"); + this.notifier.subscribe(this, "max"); + this.notifier.subscribe(this, "min"); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.notifier.unsubscribe(this, "orientation"); + this.notifier.unsubscribe(this, "direction"); + this.notifier.unsubscribe(this, "max"); + this.notifier.unsubscribe(this, "min"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "direction": + this.sliderDirection = source.direction; + break; + case "orientation": + this.sliderOrientation = source.orientation; + break; + case "max": + this.sliderMaxPosition = source.max; + break; + case "min": + this.sliderMinPosition = source.min; + break; + default: + break; + } + this.positionStyle = this.positionAsStyle(); + } + isSliderConfig(node) { + return node.max !== void 0 && node.min !== void 0; + } + }; + __decorate([ + observable + ], SliderLabel.prototype, "positionStyle", void 0); + __decorate([ + attr + ], SliderLabel.prototype, "position", void 0); + __decorate([ + attr({ attribute: "hide-mark", mode: "boolean" }) + ], SliderLabel.prototype, "hideMark", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], SliderLabel.prototype, "disabled", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderOrientation", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMinPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMaxPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js + var init_slider_label2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js"() { + init_slider_label_template(); + init_slider_label(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js + var init_slider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js + var _Slider, FormAssociatedSlider; + var init_slider_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Slider = class extends FoundationElement { + }; + FormAssociatedSlider = class extends FormAssociated(_Slider) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js + var SliderMode, Slider; + var init_slider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_slider_utilities(); + init_slider_form_associated(); + SliderMode = { + singleValue: "single-value" + }; + Slider = class extends FormAssociatedSlider { + constructor() { + super(...arguments); + this.direction = Direction.ltr; + this.isDragging = false; + this.trackWidth = 0; + this.trackMinWidth = 0; + this.trackHeight = 0; + this.trackLeft = 0; + this.trackMinHeight = 0; + this.valueTextFormatter = () => null; + this.min = 0; + this.max = 10; + this.step = 1; + this.orientation = Orientation.horizontal; + this.mode = SliderMode.singleValue; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + if (e.key === keyHome) { + e.preventDefault(); + this.value = `${this.min}`; + } else if (e.key === keyEnd) { + e.preventDefault(); + this.value = `${this.max}`; + } else if (!e.shiftKey) { + switch (e.key) { + case keyArrowRight: + case keyArrowUp: + e.preventDefault(); + this.increment(); + break; + case keyArrowLeft: + case keyArrowDown: + e.preventDefault(); + this.decrement(); + break; + } + } + }; + this.setupTrackConstraints = () => { + const clientRect = this.track.getBoundingClientRect(); + this.trackWidth = this.track.clientWidth; + this.trackMinWidth = this.track.clientLeft; + this.trackHeight = clientRect.bottom; + this.trackMinHeight = clientRect.top; + this.trackLeft = this.getBoundingClientRect().left; + if (this.trackWidth === 0) { + this.trackWidth = 1; + } + }; + this.setupListeners = (remove = false) => { + const eventAction = `${remove ? "remove" : "add"}EventListener`; + this[eventAction]("keydown", this.keypressHandler); + this[eventAction]("mousedown", this.handleMouseDown); + this.thumb[eventAction]("mousedown", this.handleThumbMouseDown, { + passive: true + }); + this.thumb[eventAction]("touchstart", this.handleThumbMouseDown, { + passive: true + }); + if (remove) { + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + } + }; + this.initialValue = ""; + this.handleThumbMouseDown = (event) => { + if (event) { + if (this.readOnly || this.disabled || event.defaultPrevented) { + return; + } + event.target.focus(); + } + const eventAction = `${event !== null ? "add" : "remove"}EventListener`; + window[eventAction]("mouseup", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchmove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchend", this.handleWindowMouseUp); + this.isDragging = event !== null; + }; + this.handleMouseMove = (e) => { + if (this.readOnly || this.disabled || e.defaultPrevented) { + return; + } + const sourceEvent = window.TouchEvent && e instanceof TouchEvent ? e.touches[0] : e; + const eventValue = this.orientation === Orientation.horizontal ? sourceEvent.pageX - document.documentElement.scrollLeft - this.trackLeft : sourceEvent.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(eventValue)}`; + }; + this.calculateNewValue = (rawValue) => { + const newPosition = convertPixelToPercent(rawValue, this.orientation === Orientation.horizontal ? this.trackMinWidth : this.trackMinHeight, this.orientation === Orientation.horizontal ? this.trackWidth : this.trackHeight, this.direction); + const newValue = (this.max - this.min) * newPosition + this.min; + return this.convertToConstrainedValue(newValue); + }; + this.handleWindowMouseUp = (event) => { + this.stopDragging(); + }; + this.stopDragging = () => { + this.isDragging = false; + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + }; + this.handleMouseDown = (e) => { + const eventAction = `${e !== null ? "add" : "remove"}EventListener`; + if (e === null || !this.disabled && !this.readOnly) { + window[eventAction]("mouseup", this.handleWindowMouseUp); + window.document[eventAction]("mouseleave", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove); + if (e) { + e.preventDefault(); + this.setupTrackConstraints(); + e.target.focus(); + const controlValue = this.orientation === Orientation.horizontal ? e.pageX - document.documentElement.scrollLeft - this.trackLeft : e.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(controlValue)}`; + } + } + }; + this.convertToConstrainedValue = (value) => { + if (isNaN(value)) { + value = this.min; + } + let constrainedValue = value - this.min; + const roundedConstrainedValue = Math.round(constrainedValue / this.step); + const remainderValue = constrainedValue - roundedConstrainedValue * (this.stepMultiplier * this.step) / this.stepMultiplier; + constrainedValue = remainderValue >= Number(this.step) / 2 ? constrainedValue - remainderValue + Number(this.step) : constrainedValue - remainderValue; + return constrainedValue + this.min; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * @internal + */ + valueChanged(previous, next) { + super.valueChanged(previous, next); + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + this.$emit("change"); + } + minChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.min = `${this.min}`; + } + this.validate(); + } + maxChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.max = `${this.max}`; + } + this.validate(); + } + stepChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.step = `${this.step}`; + } + this.updateStepMultiplier(); + this.validate(); + } + orientationChanged() { + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "range"); + this.direction = getDirection(this); + this.updateStepMultiplier(); + this.setupTrackConstraints(); + this.setupListeners(); + this.setupDefaultValue(); + this.setThumbPositionForOrientation(this.direction); + } + /** + * @internal + */ + disconnectedCallback() { + this.setupListeners(true); + } + /** + * Increment the value by the step + * + * @public + */ + increment() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) + Number(this.step) : Number(this.value) - Number(this.step); + const incrementedVal = this.convertToConstrainedValue(newVal); + const incrementedValString = incrementedVal < Number(this.max) ? `${incrementedVal}` : `${this.max}`; + this.value = incrementedValString; + } + /** + * Decrement the value by the step + * + * @public + */ + decrement() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) - Number(this.step) : Number(this.value) + Number(this.step); + const decrementedVal = this.convertToConstrainedValue(newVal); + const decrementedValString = decrementedVal > Number(this.min) ? `${decrementedVal}` : `${this.min}`; + this.value = decrementedValString; + } + /** + * Places the thumb based on the current value + * + * @public + * @param direction - writing mode + */ + setThumbPositionForOrientation(direction) { + const newPct = convertPixelToPercent(Number(this.value), Number(this.min), Number(this.max), direction); + const percentage = (1 - newPct) * 100; + if (this.orientation === Orientation.horizontal) { + this.position = this.isDragging ? `right: ${percentage}%; transition: none;` : `right: ${percentage}%; transition: all 0.2s ease;`; + } else { + this.position = this.isDragging ? `bottom: ${percentage}%; transition: none;` : `bottom: ${percentage}%; transition: all 0.2s ease;`; + } + } + /** + * Update the step multiplier used to ensure rounding errors from steps that + * are not whole numbers + */ + updateStepMultiplier() { + const stepString = this.step + ""; + const decimalPlacesOfStep = !!(this.step % 1) ? stepString.length - stepString.indexOf(".") - 1 : 0; + this.stepMultiplier = Math.pow(10, decimalPlacesOfStep); + } + get midpoint() { + return `${this.convertToConstrainedValue((this.max + this.min) / 2)}`; + } + setupDefaultValue() { + if (typeof this.value === "string") { + if (this.value.length === 0) { + this.initialValue = this.midpoint; + } else { + const value = parseFloat(this.value); + if (!Number.isNaN(value) && (value < this.min || value > this.max)) { + this.value = this.midpoint; + } + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Slider.prototype, "readOnly", void 0); + __decorate([ + observable + ], Slider.prototype, "direction", void 0); + __decorate([ + observable + ], Slider.prototype, "isDragging", void 0); + __decorate([ + observable + ], Slider.prototype, "position", void 0); + __decorate([ + observable + ], Slider.prototype, "trackWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "trackLeft", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "valueTextFormatter", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "step", void 0); + __decorate([ + attr + ], Slider.prototype, "orientation", void 0); + __decorate([ + attr + ], Slider.prototype, "mode", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js + var init_slider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js"() { + init_slider_template(); + init_slider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js + var init_switch_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js + var _Switch, FormAssociatedSwitch; + var init_switch_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Switch = class extends FoundationElement { + }; + FormAssociatedSwitch = class extends CheckableFormAssociated(_Switch) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js + var Switch; + var init_switch = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_switch_form_associated(); + Switch = class extends FormAssociatedSwitch { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + this.readOnly ? this.classList.add("readonly") : this.classList.remove("readonly"); + } + /** + * @internal + */ + checkedChanged(prev, next) { + super.checkedChanged(prev, next); + this.checked ? this.classList.add("checked") : this.classList.remove("checked"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Switch.prototype, "readOnly", void 0); + __decorate([ + observable + ], Switch.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js + var init_switch2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js"() { + init_switch_template(); + init_switch(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js + var tabPanelTemplate; + var init_tab_panel_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js"() { + init_esm(); + tabPanelTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js + var TabPanel; + var init_tab_panel = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js"() { + init_foundation_element(); + TabPanel = class extends FoundationElement { + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js + var init_tab_panel2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js"() { + init_tab_panel_template(); + init_tab_panel(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js + var tabTemplate; + var init_tab_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js"() { + init_esm(); + tabTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js + var Tab; + var init_tab = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Tab = class extends FoundationElement { + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tab.prototype, "disabled", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js + var init_tab2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js"() { + init_tab_template(); + init_tab(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js + var tabsTemplate; + var init_tabs_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js"() { + init_esm(); + init_start_end(); + tabsTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js + var TabsOrientation, Tabs; + var init_tabs = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TabsOrientation = { + vertical: "vertical", + horizontal: "horizontal" + }; + Tabs = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = TabsOrientation.horizontal; + this.activeindicator = true; + this.showActiveIndicator = true; + this.prevActiveTabIndex = 0; + this.activeTabIndex = 0; + this.ticking = false; + this.change = () => { + this.$emit("change", this.activetab); + }; + this.isDisabledElement = (el2) => { + return el2.getAttribute("aria-disabled") === "true"; + }; + this.isHiddenElement = (el2) => { + return el2.hasAttribute("hidden"); + }; + this.isFocusableElement = (el2) => { + return !this.isDisabledElement(el2) && !this.isHiddenElement(el2); + }; + this.setTabs = () => { + const gridHorizontalProperty = "gridColumn"; + const gridVerticalProperty = "gridRow"; + const gridProperty = this.isHorizontal() ? gridHorizontalProperty : gridVerticalProperty; + this.activeTabIndex = this.getActiveIndex(); + this.showActiveIndicator = false; + this.tabs.forEach((tab, index) => { + if (tab.slot === "tab") { + const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab); + if (this.activeindicator && this.isFocusableElement(tab)) { + this.showActiveIndicator = true; + } + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tab.setAttribute("id", tabId); + tab.setAttribute("aria-selected", isActiveTab ? "true" : "false"); + tab.setAttribute("aria-controls", tabpanelId); + tab.addEventListener("click", this.handleTabClick); + tab.addEventListener("keydown", this.handleTabKeyDown); + tab.setAttribute("tabindex", isActiveTab ? "0" : "-1"); + if (isActiveTab) { + this.activetab = tab; + this.activeid = tabId; + } + } + tab.style[gridHorizontalProperty] = ""; + tab.style[gridVerticalProperty] = ""; + tab.style[gridProperty] = `${index + 1}`; + !this.isHorizontal() ? tab.classList.add("vertical") : tab.classList.remove("vertical"); + }); + }; + this.setTabPanels = () => { + this.tabpanels.forEach((tabpanel, index) => { + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tabpanel.setAttribute("id", tabpanelId); + tabpanel.setAttribute("aria-labelledby", tabId); + this.activeTabIndex !== index ? tabpanel.setAttribute("hidden", "") : tabpanel.removeAttribute("hidden"); + }); + }; + this.handleTabClick = (event) => { + const selectedTab = event.currentTarget; + if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) { + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = this.tabs.indexOf(selectedTab); + this.setComponent(); + } + }; + this.handleTabKeyDown = (event) => { + if (this.isHorizontal()) { + switch (event.key) { + case keyArrowLeft: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowRight: + event.preventDefault(); + this.adjustForward(event); + break; + } + } else { + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowDown: + event.preventDefault(); + this.adjustForward(event); + break; + } + } + switch (event.key) { + case keyHome: + event.preventDefault(); + this.adjust(-this.activeTabIndex); + break; + case keyEnd: + event.preventDefault(); + this.adjust(this.tabs.length - this.activeTabIndex - 1); + break; + } + }; + this.adjustForward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) + 1 : 1; + if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (this.activetab && index === group.indexOf(this.activetab)) { + break; + } else if (index + 1 >= group.length) { + index = 0; + } else { + index += 1; + } + } + }; + this.adjustBackward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + while (index >= 0 && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.moveToTabByIndex = (group, index) => { + const tab = group[index]; + this.activetab = tab; + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = index; + tab.focus(); + this.setComponent(); + }; + } + /** + * @internal + */ + orientationChanged() { + if (this.$fastController.isConnected) { + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + activeidChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabsChanged() { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabpanelsChanged() { + if (this.$fastController.isConnected && this.tabpanels.length <= this.tabs.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + getActiveIndex() { + const id = this.activeid; + if (id !== void 0) { + return this.tabIds.indexOf(this.activeid) === -1 ? 0 : this.tabIds.indexOf(this.activeid); + } else { + return 0; + } + } + getTabIds() { + return this.tabs.map((tab) => { + var _a; + return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`; + }); + } + getTabPanelIds() { + return this.tabpanels.map((tabPanel) => { + var _a; + return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`; + }); + } + setComponent() { + if (this.activeTabIndex !== this.prevActiveTabIndex) { + this.activeid = this.tabIds[this.activeTabIndex]; + this.focusTab(); + this.change(); + } + } + isHorizontal() { + return this.orientation === TabsOrientation.horizontal; + } + handleActiveIndicatorPosition() { + if (this.showActiveIndicator && this.activeindicator && this.activeTabIndex !== this.prevActiveTabIndex) { + if (this.ticking) { + this.ticking = false; + } else { + this.ticking = true; + this.animateActiveIndicator(); + } + } + } + animateActiveIndicator() { + this.ticking = true; + const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow"; + const translateProperty = this.isHorizontal() ? "translateX" : "translateY"; + const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop"; + const prev = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + const next = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`; + const dif = next - prev; + this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`; + this.activeIndicatorRef.classList.add("activeIndicatorTransition"); + this.activeIndicatorRef.addEventListener("transitionend", () => { + this.ticking = false; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`; + this.activeIndicatorRef.classList.remove("activeIndicatorTransition"); + }); + } + /** + * The adjust method for FASTTabs + * @public + * @remarks + * This method allows the active index to be adjusted by numerical increments + */ + adjust(adjustment) { + const focusableTabs = this.tabs.filter((t) => this.isFocusableElement(t)); + const currentActiveTabIndex = focusableTabs.indexOf(this.activetab); + const nextTabIndex = limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment); + const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]); + if (nextIndex > -1) { + this.moveToTabByIndex(this.tabs, nextIndex); + } + } + focusTab() { + this.tabs[this.activeTabIndex].focus(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.activeTabIndex = this.getActiveIndex(); + } + }; + __decorate([ + attr + ], Tabs.prototype, "orientation", void 0); + __decorate([ + attr + ], Tabs.prototype, "activeid", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabs", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabpanels", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Tabs.prototype, "activeindicator", void 0); + __decorate([ + observable + ], Tabs.prototype, "activeIndicatorRef", void 0); + __decorate([ + observable + ], Tabs.prototype, "showActiveIndicator", void 0); + applyMixins(Tabs, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js + var init_tabs2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js"() { + init_tabs_template(); + init_tabs(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js + var _TextArea, FormAssociatedTextArea; + var init_text_area_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextArea = class extends FoundationElement { + }; + FormAssociatedTextArea = class extends FormAssociated(_TextArea) { + constructor() { + super(...arguments); + this.proxy = document.createElement("textarea"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js + var TextAreaResize; + var init_text_area_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js"() { + TextAreaResize = { + /** + * No resize. + */ + none: "none", + /** + * Resize vertically and horizontally. + */ + both: "both", + /** + * Resize horizontally. + */ + horizontal: "horizontal", + /** + * Resize vertically. + */ + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js + var TextArea; + var init_text_area = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js"() { + init_tslib_es6(); + init_esm(); + init_text_field(); + init_apply_mixins(); + init_text_area_form_associated(); + init_text_area_options(); + TextArea = class extends FormAssociatedTextArea { + constructor() { + super(...arguments); + this.resize = TextAreaResize.none; + this.cols = 20; + this.handleTextInput = () => { + this.value = this.control.value; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.readOnly = this.readOnly; + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.autofocus = this.autofocus; + } + } + listChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.setAttribute("list", this.list); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.maxLength = this.maxlength; + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.minLength = this.minlength; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * Selects all the text in the text area + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "readOnly", void 0); + __decorate([ + attr + ], TextArea.prototype, "resize", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], TextArea.prototype, "formId", void 0); + __decorate([ + attr + ], TextArea.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "minlength", void 0); + __decorate([ + attr + ], TextArea.prototype, "name", void 0); + __decorate([ + attr + ], TextArea.prototype, "placeholder", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "cols", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "rows", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextArea.prototype, "defaultSlottedNodes", void 0); + applyMixins(TextArea, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js + var textAreaTemplate; + var init_text_area_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js"() { + init_esm(); + init_text_area(); + textAreaTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js + var init_text_area2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js"() { + init_text_area_template(); + init_text_area(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js + var textFieldTemplate; + var init_text_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js"() { + init_esm(); + init_start_end(); + init_whitespace_filter(); + textFieldTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js + var init_text_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js"() { + init_text_field_template(); + init_text_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js + var init_toolbar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js + function getRootActiveElement(element) { + const rootNode = element.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.activeElement; + } + return document.activeElement; + } + var init_root_active_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js + var ToolbarArrowKeyMap, Toolbar, DelegatesARIAToolbar; + var init_toolbar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + init_direction(); + init_root_active_element(); + ToolbarArrowKeyMap = Object.freeze({ + [ArrowKeys.ArrowUp]: { + [Orientation.vertical]: -1 + }, + [ArrowKeys.ArrowDown]: { + [Orientation.vertical]: 1 + }, + [ArrowKeys.ArrowLeft]: { + [Orientation.horizontal]: { + [Direction.ltr]: -1, + [Direction.rtl]: 1 + } + }, + [ArrowKeys.ArrowRight]: { + [Orientation.horizontal]: { + [Direction.ltr]: 1, + [Direction.rtl]: -1 + } + } + }); + Toolbar = class _Toolbar extends FoundationElement { + constructor() { + super(...arguments); + this._activeIndex = 0; + this.direction = Direction.ltr; + this.orientation = Orientation.horizontal; + } + /** + * The index of the currently focused element, clamped between 0 and the last element. + * + * @internal + */ + get activeIndex() { + Observable.track(this, "activeIndex"); + return this._activeIndex; + } + set activeIndex(value) { + if (this.$fastController.isConnected) { + this._activeIndex = limit(0, this.focusableElements.length - 1, value); + Observable.notify(this, "activeIndex"); + } + } + slottedItemsChanged() { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * Set the activeIndex when a focusable element in the toolbar is clicked. + * + * @internal + */ + mouseDownHandler(e) { + var _a; + const activeIndex = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a.findIndex((x) => x.contains(e.target)); + if (activeIndex > -1 && this.activeIndex !== activeIndex) { + this.setFocusedElement(activeIndex); + } + return true; + } + childItemsChanged(prev, next) { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + } + /** + * When the toolbar receives focus, set the currently active element as focused. + * + * @internal + */ + focusinHandler(e) { + const relatedTarget = e.relatedTarget; + if (!relatedTarget || this.contains(relatedTarget)) { + return; + } + this.setFocusedElement(); + } + /** + * Determines a value that can be used to iterate a list with the arrow keys. + * + * @param this - An element with an orientation and direction + * @param key - The event key value + * @internal + */ + getDirectionalIncrementer(key) { + var _a, _b, _c, _d, _e; + return (_e = (_c = (_b = (_a = ToolbarArrowKeyMap[key]) === null || _a === void 0 ? void 0 : _a[this.orientation]) === null || _b === void 0 ? void 0 : _b[this.direction]) !== null && _c !== void 0 ? _c : (_d = ToolbarArrowKeyMap[key]) === null || _d === void 0 ? void 0 : _d[this.orientation]) !== null && _e !== void 0 ? _e : 0; + } + /** + * Handle keyboard events for the toolbar. + * + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (!(key in ArrowKeys) || e.defaultPrevented || e.shiftKey) { + return true; + } + const incrementer = this.getDirectionalIncrementer(key); + if (!incrementer) { + return !e.target.closest("[role=radiogroup]"); + } + const nextIndex = this.activeIndex + incrementer; + if (this.focusableElements[nextIndex]) { + e.preventDefault(); + } + this.setFocusedElement(nextIndex); + return true; + } + /** + * get all the slotted elements + * @internal + */ + get allSlottedItems() { + return [ + ...this.start.assignedElements(), + ...this.slottedItems, + ...this.end.assignedElements() + ]; + } + /** + * Prepare the slotted elements which can be focusable. + * + * @internal + */ + reduceFocusableElements() { + var _a; + const previousFocusedElement = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a[this.activeIndex]; + this.focusableElements = this.allSlottedItems.reduce(_Toolbar.reduceFocusableItems, []); + const adjustedActiveIndex = this.focusableElements.indexOf(previousFocusedElement); + this.activeIndex = Math.max(0, adjustedActiveIndex); + this.setFocusableElements(); + } + /** + * Set the activeIndex and focus the corresponding control. + * + * @param activeIndex - The new index to set + * @internal + */ + setFocusedElement(activeIndex = this.activeIndex) { + this.activeIndex = activeIndex; + this.setFocusableElements(); + if (this.focusableElements[this.activeIndex] && // Don't focus the toolbar element if some event handlers moved + // the focus on another element in the page. + this.contains(getRootActiveElement(this))) { + this.focusableElements[this.activeIndex].focus(); + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceFocusableItems(elements2, element) { + var _a, _b, _c, _d; + const isRoleRadio = element.getAttribute("role") === "radio"; + const isFocusableFastElement = (_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus; + const hasFocusableShadow = Array.from((_d = (_c = element.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll("*")) !== null && _d !== void 0 ? _d : []).some((x) => isFocusable(x)); + if (!element.hasAttribute("disabled") && !element.hasAttribute("hidden") && (isFocusable(element) || isRoleRadio || isFocusableFastElement || hasFocusableShadow)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Toolbar.reduceFocusableItems, [])); + } + return elements2; + } + /** + * @internal + */ + setFocusableElements() { + if (this.$fastController.isConnected && this.focusableElements.length > 0) { + this.focusableElements.forEach((element, index) => { + element.tabIndex = this.activeIndex === index ? 0 : -1; + }); + } + } + }; + __decorate([ + observable + ], Toolbar.prototype, "direction", void 0); + __decorate([ + attr + ], Toolbar.prototype, "orientation", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedItems", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedLabel", void 0); + __decorate([ + observable + ], Toolbar.prototype, "childItems", void 0); + DelegatesARIAToolbar = class { + }; + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], DelegatesARIAToolbar.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], DelegatesARIAToolbar.prototype, "ariaLabel", void 0); + applyMixins(DelegatesARIAToolbar, ARIAGlobalStatesAndProperties); + applyMixins(Toolbar, StartEnd, DelegatesARIAToolbar); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js + var init_toolbar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js"() { + init_toolbar_template(); + init_toolbar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js + var init_tooltip_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js + var TooltipPosition; + var init_tooltip_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js"() { + TooltipPosition = { + /** + * The tooltip is positioned above the element + */ + top: "top", + /** + * The tooltip is positioned to the right of the element + */ + right: "right", + /** + * The tooltip is positioned below the element + */ + bottom: "bottom", + /** + * The tooltip is positioned to the left of the element + */ + left: "left", + /** + * The tooltip is positioned before the element + */ + start: "start", + /** + * The tooltip is positioned after the element + */ + end: "end", + /** + * The tooltip is positioned above the element and to the left + */ + topLeft: "top-left", + /** + * The tooltip is positioned above the element and to the right + */ + topRight: "top-right", + /** + * The tooltip is positioned below the element and to the left + */ + bottomLeft: "bottom-left", + /** + * The tooltip is positioned below the element and to the right + */ + bottomRight: "bottom-right", + /** + * The tooltip is positioned above the element and to the left + */ + topStart: "top-start", + /** + * The tooltip is positioned above the element and to the right + */ + topEnd: "top-end", + /** + * The tooltip is positioned below the element and to the left + */ + bottomStart: "bottom-start", + /** + * The tooltip is positioned below the element and to the right + */ + bottomEnd: "bottom-end" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js + var Tooltip; + var init_tooltip = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + init_tooltip_options(); + Tooltip = class extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.delay = 300; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.horizontalInset = "false"; + this.verticalInset = "false"; + this.horizontalScaling = "content"; + this.verticalScaling = "content"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = void 0; + this.tooltipVisible = false; + this.currentDirection = Direction.ltr; + this.showDelayTimer = null; + this.hideDelayTimer = null; + this.isAnchorHoveredFocused = false; + this.isRegionHovered = false; + this.handlePositionChange = (ev) => { + this.classList.toggle("top", this.region.verticalPosition === "start"); + this.classList.toggle("bottom", this.region.verticalPosition === "end"); + this.classList.toggle("inset-top", this.region.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.region.verticalPosition === "insetEnd"); + this.classList.toggle("center-vertical", this.region.verticalPosition === "center"); + this.classList.toggle("left", this.region.horizontalPosition === "start"); + this.classList.toggle("right", this.region.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.region.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.region.horizontalPosition === "insetEnd"); + this.classList.toggle("center-horizontal", this.region.horizontalPosition === "center"); + }; + this.handleRegionMouseOver = (ev) => { + this.isRegionHovered = true; + }; + this.handleRegionMouseOut = (ev) => { + this.isRegionHovered = false; + this.startHideDelayTimer(); + }; + this.handleAnchorMouseOver = (ev) => { + if (this.tooltipVisible) { + this.isAnchorHoveredFocused = true; + return; + } + this.startShowDelayTimer(); + }; + this.handleAnchorMouseOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.handleAnchorFocusIn = (ev) => { + this.startShowDelayTimer(); + }; + this.handleAnchorFocusOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.startHideDelayTimer = () => { + this.clearHideDelayTimer(); + if (!this.tooltipVisible) { + return; + } + this.hideDelayTimer = window.setTimeout(() => { + this.updateTooltipVisibility(); + }, 60); + }; + this.clearHideDelayTimer = () => { + if (this.hideDelayTimer !== null) { + clearTimeout(this.hideDelayTimer); + this.hideDelayTimer = null; + } + }; + this.startShowDelayTimer = () => { + if (this.isAnchorHoveredFocused) { + return; + } + if (this.delay > 1) { + if (this.showDelayTimer === null) + this.showDelayTimer = window.setTimeout(() => { + this.startHover(); + }, this.delay); + return; + } + this.startHover(); + }; + this.startHover = () => { + this.isAnchorHoveredFocused = true; + this.updateTooltipVisibility(); + }; + this.clearShowDelayTimer = () => { + if (this.showDelayTimer !== null) { + clearTimeout(this.showDelayTimer); + this.showDelayTimer = null; + } + }; + this.getAnchor = () => { + const rootNode = this.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.getElementById(this.anchor); + } + return document.getElementById(this.anchor); + }; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && this.tooltipVisible) { + switch (e.key) { + case keyEscape: + this.isAnchorHoveredFocused = false; + this.updateTooltipVisibility(); + this.$emit("dismiss"); + break; + } + } + }; + this.updateTooltipVisibility = () => { + if (this.visible === false) { + this.hideTooltip(); + } else if (this.visible === true) { + this.showTooltip(); + return; + } else { + if (this.isAnchorHoveredFocused || this.isRegionHovered) { + this.showTooltip(); + return; + } + this.hideTooltip(); + } + }; + this.showTooltip = () => { + if (this.tooltipVisible) { + return; + } + this.currentDirection = getDirection(this); + this.tooltipVisible = true; + document.addEventListener("keydown", this.handleDocumentKeydown); + DOM.queueUpdate(this.setRegionProps); + }; + this.hideTooltip = () => { + if (!this.tooltipVisible) { + return; + } + this.clearHideDelayTimer(); + if (this.region !== null && this.region !== void 0) { + this.region.removeEventListener("positionchange", this.handlePositionChange); + this.region.viewportElement = null; + this.region.anchorElement = null; + this.region.removeEventListener("mouseover", this.handleRegionMouseOver); + this.region.removeEventListener("mouseout", this.handleRegionMouseOut); + } + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.tooltipVisible = false; + }; + this.setRegionProps = () => { + if (!this.tooltipVisible) { + return; + } + this.region.viewportElement = this.viewportElement; + this.region.anchorElement = this.anchorElement; + this.region.addEventListener("positionchange", this.handlePositionChange); + this.region.addEventListener("mouseover", this.handleRegionMouseOver, { + passive: true + }); + this.region.addEventListener("mouseout", this.handleRegionMouseOut, { + passive: true + }); + }; + } + visibleChanged() { + if (this.$fastController.isConnected) { + this.updateTooltipVisibility(); + this.updateLayout(); + } + } + anchorChanged() { + if (this.$fastController.isConnected) { + this.anchorElement = this.getAnchor(); + } + } + positionChanged() { + if (this.$fastController.isConnected) { + this.updateLayout(); + } + } + anchorElementChanged(oldValue) { + if (this.$fastController.isConnected) { + if (oldValue !== null && oldValue !== void 0) { + oldValue.removeEventListener("mouseover", this.handleAnchorMouseOver); + oldValue.removeEventListener("mouseout", this.handleAnchorMouseOut); + oldValue.removeEventListener("focusin", this.handleAnchorFocusIn); + oldValue.removeEventListener("focusout", this.handleAnchorFocusOut); + } + if (this.anchorElement !== null && this.anchorElement !== void 0) { + this.anchorElement.addEventListener("mouseover", this.handleAnchorMouseOver, { passive: true }); + this.anchorElement.addEventListener("mouseout", this.handleAnchorMouseOut, { passive: true }); + this.anchorElement.addEventListener("focusin", this.handleAnchorFocusIn, { + passive: true + }); + this.anchorElement.addEventListener("focusout", this.handleAnchorFocusOut, { passive: true }); + const anchorId = this.anchorElement.id; + if (this.anchorElement.parentElement !== null) { + this.anchorElement.parentElement.querySelectorAll(":hover").forEach((element) => { + if (element.id === anchorId) { + this.startShowDelayTimer(); + } + }); + } + } + if (this.region !== null && this.region !== void 0 && this.tooltipVisible) { + this.region.anchorElement = this.anchorElement; + } + this.updateLayout(); + } + } + viewportElementChanged() { + if (this.region !== null && this.region !== void 0) { + this.region.viewportElement = this.viewportElement; + } + this.updateLayout(); + } + connectedCallback() { + super.connectedCallback(); + this.anchorElement = this.getAnchor(); + this.updateTooltipVisibility(); + } + disconnectedCallback() { + this.hideTooltip(); + this.clearShowDelayTimer(); + this.clearHideDelayTimer(); + super.disconnectedCallback(); + } + /** + * updated the properties being passed to the anchored region + */ + updateLayout() { + this.verticalPositioningMode = "locktodefault"; + this.horizontalPositioningMode = "locktodefault"; + switch (this.position) { + case TooltipPosition.top: + case TooltipPosition.bottom: + this.verticalDefaultPosition = this.position; + this.horizontalDefaultPosition = "center"; + break; + case TooltipPosition.right: + case TooltipPosition.left: + case TooltipPosition.start: + case TooltipPosition.end: + this.verticalDefaultPosition = "center"; + this.horizontalDefaultPosition = this.position; + break; + case TooltipPosition.topLeft: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.topRight: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.bottomLeft: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.bottomRight: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.topStart: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.topEnd: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "end"; + break; + case TooltipPosition.bottomStart: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.bottomEnd: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "end"; + break; + default: + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = "center"; + break; + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tooltip.prototype, "visible", void 0); + __decorate([ + attr + ], Tooltip.prototype, "anchor", void 0); + __decorate([ + attr + ], Tooltip.prototype, "delay", void 0); + __decorate([ + attr + ], Tooltip.prototype, "position", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], Tooltip.prototype, "autoUpdateMode", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock" }) + ], Tooltip.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock" }) + ], Tooltip.prototype, "verticalViewportLock", void 0); + __decorate([ + observable + ], Tooltip.prototype, "anchorElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "viewportElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "tooltipVisible", void 0); + __decorate([ + observable + ], Tooltip.prototype, "currentDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js + var init_tooltip2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js"() { + init_tooltip_template(); + init_tooltip(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js + var init_tree_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js + function isTreeItemElement(el2) { + return isHTMLElement(el2) && el2.getAttribute("role") === "treeitem"; + } + var TreeItem; + var init_tree_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TreeItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.expanded = false; + this.focusable = false; + this.isNestedItem = () => { + return isTreeItemElement(this.parentElement); + }; + this.handleExpandCollapseButtonClick = (e) => { + if (!this.disabled && !e.defaultPrevented) { + this.expanded = !this.expanded; + } + }; + this.handleFocus = (e) => { + this.setAttribute("tabindex", "0"); + }; + this.handleBlur = (e) => { + this.setAttribute("tabindex", "-1"); + }; + } + expandedChanged() { + if (this.$fastController.isConnected) { + this.$emit("expanded-change", this); + } + } + selectedChanged() { + if (this.$fastController.isConnected) { + this.$emit("selected-change", this); + } + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.items.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = true; + } + }); + } + } + /** + * Places document focus on a tree item + * + * @public + * @param el - the element to focus + */ + static focusItem(el2) { + el2.focusable = true; + el2.focus(); + } + /** + * Gets number of children + * + * @internal + */ + childItemLength() { + const treeChildren = this.childItems.filter((item) => { + return isTreeItemElement(item); + }); + return treeChildren ? treeChildren.length : 0; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "expanded", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "selected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "disabled", void 0); + __decorate([ + observable + ], TreeItem.prototype, "focusable", void 0); + __decorate([ + observable + ], TreeItem.prototype, "childItems", void 0); + __decorate([ + observable + ], TreeItem.prototype, "items", void 0); + __decorate([ + observable + ], TreeItem.prototype, "nested", void 0); + __decorate([ + observable + ], TreeItem.prototype, "renderCollapsedChildren", void 0); + applyMixins(TreeItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js + var init_tree_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js"() { + init_tree_item_template(); + init_tree_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js + var init_tree_view_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js + var TreeView; + var init_tree_view = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_tree_item(); + init_foundation_element(); + TreeView = class extends FoundationElement { + constructor() { + super(...arguments); + this.currentFocused = null; + this.handleFocus = (e) => { + if (this.slottedTreeItems.length < 1) { + return; + } + if (e.target === this) { + if (this.currentFocused === null) { + this.currentFocused = this.getValidFocusableItem(); + } + if (this.currentFocused !== null) { + TreeItem.focusItem(this.currentFocused); + } + return; + } + if (this.contains(e.target)) { + this.setAttribute("tabindex", "-1"); + this.currentFocused = e.target; + } + }; + this.handleBlur = (e) => { + if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) { + this.setAttribute("tabindex", "0"); + } + }; + this.handleKeyDown = (e) => { + if (e.defaultPrevented) { + return; + } + if (this.slottedTreeItems.length < 1) { + return true; + } + const treeItems = this.getVisibleNodes(); + switch (e.key) { + case keyHome: + if (treeItems.length) { + TreeItem.focusItem(treeItems[0]); + } + return; + case keyEnd: + if (treeItems.length) { + TreeItem.focusItem(treeItems[treeItems.length - 1]); + } + return; + case keyArrowLeft: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) { + item.expanded = false; + } else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) { + TreeItem.focusItem(item.parentElement); + } + } + return false; + case keyArrowRight: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) { + item.expanded = true; + } else if (item instanceof TreeItem && item.childItemLength() > 0) { + this.focusNextNode(1, e.target); + } + } + return; + case keyArrowDown: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(1, e.target); + } + return; + case keyArrowUp: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(-1, e.target); + } + return; + case keyEnter: + this.handleClick(e); + return; + } + return true; + }; + this.handleSelectedChange = (e) => { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (item.selected) { + if (this.currentSelected && this.currentSelected !== item) { + this.currentSelected.selected = false; + } + this.currentSelected = item; + } else if (!item.selected && this.currentSelected === item) { + this.currentSelected = null; + } + return; + }; + this.setItems = () => { + const selectedItem = this.treeView.querySelector("[aria-selected='true']"); + this.currentSelected = selectedItem; + if (this.currentFocused === null || !this.contains(this.currentFocused)) { + this.currentFocused = this.getValidFocusableItem(); + } + this.nested = this.checkForNestedItems(); + const treeItems = this.getVisibleNodes(); + treeItems.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = this.nested; + } + }); + }; + this.isFocusableElement = (el2) => { + return isTreeItemElement(el2); + }; + this.isSelectedElement = (el2) => { + return el2.selected; + }; + } + slottedTreeItemsChanged() { + if (this.$fastController.isConnected) { + this.setItems(); + } + } + connectedCallback() { + super.connectedCallback(); + this.setAttribute("tabindex", "0"); + DOM.queueUpdate(() => { + this.setItems(); + }); + } + /** + * Handles click events bubbling up + * + * @internal + */ + handleClick(e) { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (!item.disabled) { + item.selected = !item.selected; + } + return; + } + /** + * Move focus to a tree item based on its offset from the provided item + */ + focusNextNode(delta, item) { + const visibleNodes = this.getVisibleNodes(); + if (!visibleNodes) { + return; + } + const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta]; + if (isHTMLElement(focusItem)) { + TreeItem.focusItem(focusItem); + } + } + /** + * checks if there are any nested tree items + */ + getValidFocusableItem() { + const treeItems = this.getVisibleNodes(); + let focusIndex = treeItems.findIndex(this.isSelectedElement); + if (focusIndex === -1) { + focusIndex = treeItems.findIndex(this.isFocusableElement); + } + if (focusIndex !== -1) { + return treeItems[focusIndex]; + } + return null; + } + /** + * checks if there are any nested tree items + */ + checkForNestedItems() { + return this.slottedTreeItems.some((node) => { + return isTreeItemElement(node) && node.querySelector("[role='treeitem']"); + }); + } + getVisibleNodes() { + return getDisplayedNodes(this, "[role='treeitem']") || []; + } + }; + __decorate([ + attr({ attribute: "render-collapsed-nodes" }) + ], TreeView.prototype, "renderCollapsedNodes", void 0); + __decorate([ + observable + ], TreeView.prototype, "currentSelected", void 0); + __decorate([ + observable + ], TreeView.prototype, "slottedTreeItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js + var init_tree_view2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js"() { + init_tree_view_template(); + init_tree_view(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js + var MatchMediaBehavior, MatchMediaStyleSheetBehavior, forcedColorsStylesheetBehavior, darkModeStylesheetBehavior, lightModeStylesheetBehavior; + var init_match_media_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js"() { + MatchMediaBehavior = class { + /** + * + * @param query - The media query to operate from. + */ + constructor(query) { + this.listenerCache = /* @__PURE__ */ new WeakMap(); + this.query = query; + } + /** + * Binds the behavior to the element. + * @param source - The element for which the behavior is bound. + */ + bind(source) { + const { query } = this; + const listener = this.constructListener(source); + listener.bind(query)(); + query.addListener(listener); + this.listenerCache.set(source, listener); + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + */ + unbind(source) { + const listener = this.listenerCache.get(source); + if (listener) { + this.query.removeListener(listener); + this.listenerCache.delete(source); + } + } + }; + MatchMediaStyleSheetBehavior = class _MatchMediaStyleSheetBehavior extends MatchMediaBehavior { + /** + * Constructs a {@link MatchMediaStyleSheetBehavior} instance. + * @param query - The media query to operate from. + * @param styles - The styles to coordinate with the query. + */ + constructor(query, styles) { + super(query); + this.styles = styles; + } + /** + * Defines a function to construct {@link MatchMediaStyleSheetBehavior | MatchMediaStyleSheetBehaviors} for + * a provided query. + * @param query - The media query to operate from. + * + * @public + * @example + * + * ```ts + * import { css } from "@microsoft/fast-element"; + * import { MatchMediaStyleSheetBehavior } from "@microsoft/fast-foundation"; + * + * const landscapeBehavior = MatchMediaStyleSheetBehavior.with( + * window.matchMedia("(orientation: landscape)") + * ); + * const styles = css` + * :host { + * width: 200px; + * height: 400px; + * } + * ` + * .withBehaviors(landscapeBehavior(css` + * :host { + * width: 400px; + * height: 200px; + * } + * `)) + * ``` + */ + static with(query) { + return (styles) => { + return new _MatchMediaStyleSheetBehavior(query, styles); + }; + } + /** + * Constructs a match-media listener for a provided element. + * @param source - the element for which to attach or detach styles. + * @internal + */ + constructListener(source) { + let attached = false; + const styles = this.styles; + return function listener() { + const { matches: matches2 } = this; + if (matches2 && !attached) { + source.$fastController.addStyles(styles); + attached = matches2; + } else if (!matches2 && attached) { + source.$fastController.removeStyles(styles); + attached = matches2; + } + }; + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + * @internal + */ + unbind(source) { + super.unbind(source); + source.$fastController.removeStyles(this.styles); + } + }; + forcedColorsStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(forced-colors)")); + darkModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: dark)")); + lightModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: light)")); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js + var init_property_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js + var disabledCursor; + var init_disabled = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js"() { + disabledCursor = "not-allowed"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js + function display(displayValue) { + return `${hidden}:host{display:${displayValue}}`; + } + var hidden; + var init_display = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js"() { + hidden = `:host([hidden]){display:none}`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js + var focusVisible; + var init_focus = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js"() { + init_dist2(); + focusVisible = canUseFocusVisible() ? "focus-visible" : "focus"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js + var init_style = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js"() { + init_disabled(); + init_display(); + init_focus(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js + var init_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js"() { + init_apply_mixins(); + init_composed_parent(); + init_match_media_stylesheet_behavior(); + init_property_stylesheet_behavior(); + init_style(); + init_direction(); + init_whitespace_filter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/index.js + var init_esm2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/index.js"() { + init_accordion_item2(); + init_accordion2(); + init_anchor2(); + init_anchored_region2(); + init_avatar2(); + init_badge2(); + init_breadcrumb_item2(); + init_breadcrumb2(); + init_button2(); + init_calendar2(); + init_card2(); + init_checkbox2(); + init_combobox2(); + init_data_grid2(); + init_design_system2(); + init_design_token(); + init_di2(); + init_dialog2(); + init_disclosure2(); + init_divider2(); + init_flipper2(); + init_form_associated2(); + init_foundation_element2(); + init_listbox_option2(); + init_listbox2(); + init_picker2(); + init_menu_item2(); + init_menu2(); + init_number_field2(); + init_patterns(); + init_progress_ring(); + init_progress(); + init_radio_group2(); + init_radio2(); + init_horizontal_scroll2(); + init_search2(); + init_select2(); + init_skeleton2(); + init_slider_label2(); + init_slider2(); + init_switch2(); + init_tab_panel2(); + init_tab2(); + init_tabs2(); + init_text_area2(); + init_text_field2(); + init_toolbar2(); + init_tooltip2(); + init_tree_item2(); + init_tree_view2(); + init_utilities(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js + function provideVSCodeDesignSystem(element) { + return DesignSystem.getOrCreate(element).withPrefix("vscode"); + } + var init_vscode_design_system = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js"() { + init_esm2(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js + function initThemeChangeListener(tokenMappings2) { + window.addEventListener("load", () => { + const observer = new MutationObserver(() => { + applyCurrentTheme(tokenMappings2); + }); + observer.observe(document.body, { + attributes: true, + attributeFilter: ["class"] + }); + applyCurrentTheme(tokenMappings2); + }); + } + function applyCurrentTheme(tokenMappings2) { + const styles = getComputedStyle(document.body); + const body = document.querySelector("body"); + if (body) { + const themeKind = body.getAttribute("data-vscode-theme-kind"); + for (const [vscodeTokenName, toolkitToken] of tokenMappings2) { + let value = styles.getPropertyValue(vscodeTokenName).toString(); + if (themeKind === "vscode-high-contrast") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + value = "transparent"; + } + if (toolkitToken.name === "button-icon-hover-background") { + value = "transparent"; + } + } else if (themeKind === "vscode-high-contrast-light") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + switch (toolkitToken.name) { + case "button-primary-hover-background": + value = "#0F4A85"; + break; + case "button-secondary-hover-background": + value = "transparent"; + break; + case "button-icon-hover-background": + value = "transparent"; + break; + } + } + } else { + if (toolkitToken.name === "contrast-active-border") { + value = "transparent"; + } + } + toolkitToken.setValueFor(body, value); + } + } + } + var init_applyTheme = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js + function create2(name, vscodeThemeVar) { + const designToken = DesignToken.create(name); + if (vscodeThemeVar) { + if (vscodeThemeVar.includes("--fake-vscode-token")) { + const uniqueId2 = "id" + Math.random().toString(16).slice(2); + vscodeThemeVar = `${vscodeThemeVar}-${uniqueId2}`; + } + tokenMappings.set(vscodeThemeVar, designToken); + } + if (!isThemeListenerInitialized) { + initThemeChangeListener(tokenMappings); + isThemeListenerInitialized = true; + } + return designToken; + } + var tokenMappings, isThemeListenerInitialized; + var init_create = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js"() { + init_esm2(); + init_applyTheme(); + tokenMappings = /* @__PURE__ */ new Map(); + isThemeListenerInitialized = false; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js + var background, borderWidth, contrastActiveBorder, contrastBorder, cornerRadius, cornerRadiusRound, designUnit, disabledOpacity, focusBorder, fontFamily, fontWeight, foreground, inputHeight, inputMinWidth, typeRampBaseFontSize, typeRampBaseLineHeight, typeRampMinus1FontSize, typeRampMinus1LineHeight, typeRampMinus2FontSize, typeRampMinus2LineHeight, typeRampPlus1FontSize, typeRampPlus1LineHeight, scrollbarWidth, scrollbarHeight, scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, badgeBackground, badgeForeground, buttonBorder, buttonIconBackground, buttonIconCornerRadius, buttonIconFocusBorderOffset, buttonIconHoverBackground, buttonIconPadding, buttonPrimaryBackground, buttonPrimaryForeground, buttonPrimaryHoverBackground, buttonSecondaryBackground, buttonSecondaryForeground, buttonSecondaryHoverBackground, buttonPaddingHorizontal, buttonPaddingVertical, checkboxBackground, checkboxBorder, checkboxCornerRadius, checkboxForeground, listActiveSelectionBackground, listActiveSelectionForeground, listHoverBackground, dividerBackground, dropdownBackground, dropdownBorder, dropdownForeground, dropdownListMaxHeight, inputBackground, inputForeground, inputPlaceholderForeground, linkActiveForeground, linkForeground, progressBackground, panelTabActiveBorder, panelTabActiveForeground, panelTabForeground, panelViewBackground, panelViewBorder, tagCornerRadius; + var init_design_tokens = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js"() { + init_create(); + background = create2("background", "--vscode-editor-background").withDefault("#1e1e1e"); + borderWidth = create2("border-width").withDefault(1); + contrastActiveBorder = create2("contrast-active-border", "--vscode-contrastActiveBorder").withDefault("#f38518"); + contrastBorder = create2("contrast-border", "--vscode-contrastBorder").withDefault("#6fc3df"); + cornerRadius = create2("corner-radius").withDefault(0); + cornerRadiusRound = create2("corner-radius-round").withDefault(2); + designUnit = create2("design-unit").withDefault(4); + disabledOpacity = create2("disabled-opacity").withDefault(0.4); + focusBorder = create2("focus-border", "--vscode-focusBorder").withDefault("#007fd4"); + fontFamily = create2("font-family", "--vscode-font-family").withDefault("-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol"); + fontWeight = create2("font-weight", "--vscode-font-weight").withDefault("400"); + foreground = create2("foreground", "--vscode-foreground").withDefault("#cccccc"); + inputHeight = create2("input-height").withDefault("26"); + inputMinWidth = create2("input-min-width").withDefault("100px"); + typeRampBaseFontSize = create2("type-ramp-base-font-size", "--vscode-font-size").withDefault("13px"); + typeRampBaseLineHeight = create2("type-ramp-base-line-height").withDefault("normal"); + typeRampMinus1FontSize = create2("type-ramp-minus1-font-size").withDefault("11px"); + typeRampMinus1LineHeight = create2("type-ramp-minus1-line-height").withDefault("16px"); + typeRampMinus2FontSize = create2("type-ramp-minus2-font-size").withDefault("9px"); + typeRampMinus2LineHeight = create2("type-ramp-minus2-line-height").withDefault("16px"); + typeRampPlus1FontSize = create2("type-ramp-plus1-font-size").withDefault("16px"); + typeRampPlus1LineHeight = create2("type-ramp-plus1-line-height").withDefault("24px"); + scrollbarWidth = create2("scrollbarWidth").withDefault("10px"); + scrollbarHeight = create2("scrollbarHeight").withDefault("10px"); + scrollbarSliderBackground = create2("scrollbar-slider-background", "--vscode-scrollbarSlider-background").withDefault("#79797966"); + scrollbarSliderHoverBackground = create2("scrollbar-slider-hover-background", "--vscode-scrollbarSlider-hoverBackground").withDefault("#646464b3"); + scrollbarSliderActiveBackground = create2("scrollbar-slider-active-background", "--vscode-scrollbarSlider-activeBackground").withDefault("#bfbfbf66"); + badgeBackground = create2("badge-background", "--vscode-badge-background").withDefault("#4d4d4d"); + badgeForeground = create2("badge-foreground", "--vscode-badge-foreground").withDefault("#ffffff"); + buttonBorder = create2("button-border", "--vscode-button-border").withDefault("transparent"); + buttonIconBackground = create2("button-icon-background").withDefault("transparent"); + buttonIconCornerRadius = create2("button-icon-corner-radius").withDefault("5px"); + buttonIconFocusBorderOffset = create2("button-icon-outline-offset").withDefault(0); + buttonIconHoverBackground = create2("button-icon-hover-background", "--fake-vscode-token").withDefault("rgba(90, 93, 94, 0.31)"); + buttonIconPadding = create2("button-icon-padding").withDefault("3px"); + buttonPrimaryBackground = create2("button-primary-background", "--vscode-button-background").withDefault("#0e639c"); + buttonPrimaryForeground = create2("button-primary-foreground", "--vscode-button-foreground").withDefault("#ffffff"); + buttonPrimaryHoverBackground = create2("button-primary-hover-background", "--vscode-button-hoverBackground").withDefault("#1177bb"); + buttonSecondaryBackground = create2("button-secondary-background", "--vscode-button-secondaryBackground").withDefault("#3a3d41"); + buttonSecondaryForeground = create2("button-secondary-foreground", "--vscode-button-secondaryForeground").withDefault("#ffffff"); + buttonSecondaryHoverBackground = create2("button-secondary-hover-background", "--vscode-button-secondaryHoverBackground").withDefault("#45494e"); + buttonPaddingHorizontal = create2("button-padding-horizontal").withDefault("11px"); + buttonPaddingVertical = create2("button-padding-vertical").withDefault("4px"); + checkboxBackground = create2("checkbox-background", "--vscode-checkbox-background").withDefault("#3c3c3c"); + checkboxBorder = create2("checkbox-border", "--vscode-checkbox-border").withDefault("#3c3c3c"); + checkboxCornerRadius = create2("checkbox-corner-radius").withDefault(3); + checkboxForeground = create2("checkbox-foreground", "--vscode-checkbox-foreground").withDefault("#f0f0f0"); + listActiveSelectionBackground = create2("list-active-selection-background", "--vscode-list-activeSelectionBackground").withDefault("#094771"); + listActiveSelectionForeground = create2("list-active-selection-foreground", "--vscode-list-activeSelectionForeground").withDefault("#ffffff"); + listHoverBackground = create2("list-hover-background", "--vscode-list-hoverBackground").withDefault("#2a2d2e"); + dividerBackground = create2("divider-background", "--vscode-settings-dropdownListBorder").withDefault("#454545"); + dropdownBackground = create2("dropdown-background", "--vscode-dropdown-background").withDefault("#3c3c3c"); + dropdownBorder = create2("dropdown-border", "--vscode-dropdown-border").withDefault("#3c3c3c"); + dropdownForeground = create2("dropdown-foreground", "--vscode-dropdown-foreground").withDefault("#f0f0f0"); + dropdownListMaxHeight = create2("dropdown-list-max-height").withDefault("200px"); + inputBackground = create2("input-background", "--vscode-input-background").withDefault("#3c3c3c"); + inputForeground = create2("input-foreground", "--vscode-input-foreground").withDefault("#cccccc"); + inputPlaceholderForeground = create2("input-placeholder-foreground", "--vscode-input-placeholderForeground").withDefault("#cccccc"); + linkActiveForeground = create2("link-active-foreground", "--vscode-textLink-activeForeground").withDefault("#3794ff"); + linkForeground = create2("link-foreground", "--vscode-textLink-foreground").withDefault("#3794ff"); + progressBackground = create2("progress-background", "--vscode-progressBar-background").withDefault("#0e70c0"); + panelTabActiveBorder = create2("panel-tab-active-border", "--vscode-panelTitle-activeBorder").withDefault("#e7e7e7"); + panelTabActiveForeground = create2("panel-tab-active-foreground", "--vscode-panelTitle-activeForeground").withDefault("#e7e7e7"); + panelTabForeground = create2("panel-tab-foreground", "--vscode-panelTitle-inactiveForeground").withDefault("#e7e7e799"); + panelViewBackground = create2("panel-view-background", "--vscode-panel-background").withDefault("#1e1e1e"); + panelViewBorder = create2("panel-view-border", "--vscode-panel-border").withDefault("#80808059"); + tagCornerRadius = create2("tag-corner-radius").withDefault("2px"); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js + var badgeStyles; + var init_badge_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + badgeStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + text-align: center; + } + .control { + align-items: center; + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: 11px; + box-sizing: border-box; + color: ${badgeForeground}; + display: flex; + height: calc(${designUnit} * 4px); + justify-content: center; + min-width: calc(${designUnit} * 4px + 2px); + min-height: calc(${designUnit} * 4px + 2px); + padding: 3px 6px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js + var Badge2, vsCodeBadge; + var init_badge3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js"() { + init_esm2(); + init_badge_styles(); + Badge2 = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.circular) { + this.circular = true; + } + } + }; + vsCodeBadge = Badge2.compose({ + baseName: "badge", + template: badgeTemplate, + styles: badgeStyles + }); + } + }); + + // node_modules/tslib/tslib.es6.mjs + function __decorate2(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es62 = __esm({ + "node_modules/tslib/tslib.es6.mjs"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js + var BaseButtonStyles, PrimaryButtonStyles, SecondaryButtonStyles, IconButtonStyles, buttonStyles; + var init_button_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + BaseButtonStyles = css` + ${display("inline-flex")} :host { + outline: none; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${buttonPrimaryForeground}; + background: ${buttonPrimaryBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + fill: currentColor; + cursor: pointer; + } + .control { + background: transparent; + height: inherit; + flex-grow: 1; + box-sizing: border-box; + display: inline-flex; + justify-content: center; + align-items: center; + padding: ${buttonPaddingVertical} ${buttonPaddingHorizontal}; + white-space: wrap; + outline: none; + text-decoration: none; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + color: inherit; + border-radius: inherit; + fill: inherit; + cursor: inherit; + font-family: inherit; + } + :host(:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host(:active) { + background: ${buttonPrimaryBackground}; + } + .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + .control::-moz-focus-inner { + border: 0; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + background: ${buttonPrimaryBackground}; + cursor: ${disabledCursor}; + } + .content { + display: flex; + } + .start { + display: flex; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-end: 8px; + } +`; + PrimaryButtonStyles = css` + :host([appearance='primary']) { + background: ${buttonPrimaryBackground}; + color: ${buttonPrimaryForeground}; + } + :host([appearance='primary']:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host([appearance='primary']:active) .control:active { + background: ${buttonPrimaryBackground}; + } + :host([appearance='primary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='primary'][disabled]) { + background: ${buttonPrimaryBackground}; + } +`; + SecondaryButtonStyles = css` + :host([appearance='secondary']) { + background: ${buttonSecondaryBackground}; + color: ${buttonSecondaryForeground}; + } + :host([appearance='secondary']:hover) { + background: ${buttonSecondaryHoverBackground}; + } + :host([appearance='secondary']:active) .control:active { + background: ${buttonSecondaryBackground}; + } + :host([appearance='secondary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='secondary'][disabled]) { + background: ${buttonSecondaryBackground}; + } +`; + IconButtonStyles = css` + :host([appearance='icon']) { + background: ${buttonIconBackground}; + border-radius: ${buttonIconCornerRadius}; + color: ${foreground}; + } + :host([appearance='icon']:hover) { + background: ${buttonIconHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } + :host([appearance='icon']) .control { + padding: ${buttonIconPadding}; + border: none; + } + :host([appearance='icon']:active) .control:active { + background: ${buttonIconHoverBackground}; + } + :host([appearance='icon']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: ${buttonIconFocusBorderOffset}; + } + :host([appearance='icon'][disabled]) { + background: ${buttonIconBackground}; + } +`; + buttonStyles = (context, definition) => css` + ${BaseButtonStyles} + ${PrimaryButtonStyles} + ${SecondaryButtonStyles} + ${IconButtonStyles} +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/index.js + var Button2, vsCodeButton; + var init_button3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/index.js"() { + init_tslib_es62(); + init_esm(); + init_esm2(); + init_button_styles(); + Button2 = class extends Button { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.appearance) { + const appearanceValue = this.getAttribute("appearance"); + this.appearance = appearanceValue; + } + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "appearance" && newVal === "icon") { + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.ariaLabel = "Icon Button"; + } + } + if (attrName === "aria-label") { + this.ariaLabel = newVal; + } + if (attrName === "disabled") { + this.disabled = newVal !== null; + } + } + }; + __decorate2([ + attr + ], Button2.prototype, "appearance", void 0); + vsCodeButton = Button2.compose({ + baseName: "button", + template: buttonTemplate, + styles: buttonStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js + var checkboxStyles; + var init_checkbox_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + checkboxStyles = (context, defintiion) => css` + ${display("inline-flex")} :host { + align-items: center; + outline: none; + margin: calc(${designUnit} * 1px) 0; + user-select: none; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control { + position: relative; + width: calc(${designUnit} * 4px + 2px); + height: calc(${designUnit} * 4px + 2px); + box-sizing: border-box; + border-radius: calc(${checkboxCornerRadius} * 1px); + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + background: ${checkboxBackground}; + outline: none; + cursor: pointer; + } + .label { + font-family: ${fontFamily}; + color: ${foreground}; + padding-inline-start: calc(${designUnit} * 2px + 2px); + margin-inline-end: calc(${designUnit} * 2px + 2px); + cursor: pointer; + } + .label__hidden { + display: none; + visibility: hidden; + } + .checked-indicator { + width: 100%; + height: 100%; + display: block; + fill: ${foreground}; + opacity: 0; + pointer-events: none; + } + .indeterminate-indicator { + border-radius: 2px; + background: ${foreground}; + position: absolute; + top: 50%; + left: 50%; + width: 50%; + height: 50%; + transform: translate(-50%, -50%); + opacity: 0; + } + :host(:enabled) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:enabled) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host(.disabled) .label, + :host(.readonly) .label, + :host(.readonly) .control, + :host(.disabled) .control { + cursor: ${disabledCursor}; + } + :host(.checked:not(.indeterminate)) .checked-indicator, + :host(.indeterminate) .indeterminate-indicator { + opacity: 1; + } + :host(.disabled) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js + var Checkbox2, vsCodeCheckbox; + var init_checkbox3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js"() { + init_esm2(); + init_checkbox_styles(); + Checkbox2 = class extends Checkbox { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Checkbox"); + } + } + }; + vsCodeCheckbox = Checkbox2.compose({ + baseName: "checkbox", + template: checkboxTemplate, + styles: checkboxStyles, + checkedIndicator: ` + + + + `, + indeterminateIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js + var dataGridStyles; + var init_data_grid_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js"() { + init_esm(); + dataGridStyles = (context, definition) => css` + :host { + display: flex; + position: relative; + flex-direction: column; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js + var dataGridRowStyles; + var init_data_grid_row_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js"() { + init_esm(); + init_design_tokens(); + dataGridRowStyles = (context, definition) => css` + :host { + display: grid; + padding: calc((${designUnit} / 4) * 1px) 0; + box-sizing: border-box; + width: 100%; + background: transparent; + } + :host(.header) { + } + :host(.sticky-header) { + background: ${background}; + position: sticky; + top: 0; + } + :host(:hover) { + background: ${listHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js + var dataGridCellStyles; + var init_data_grid_cell_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dataGridCellStyles = (context, definition) => css` + :host { + padding: calc(${designUnit} * 1px) calc(${designUnit} * 3px); + color: ${foreground}; + opacity: 1; + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + font-weight: 400; + border: solid calc(${borderWidth} * 1px) transparent; + border-radius: calc(${cornerRadius} * 1px); + white-space: wrap; + overflow-wrap: anywhere; + } + :host(.column-header) { + font-weight: 600; + } + :host(:${focusVisible}), + :host(:focus), + :host(:active) { + background: ${listActiveSelectionBackground}; + border: solid calc(${borderWidth} * 1px) ${focusBorder}; + color: ${listActiveSelectionForeground}; + outline: none; + } + :host(:${focusVisible}) ::slotted(*), + :host(:focus) ::slotted(*), + :host(:active) ::slotted(*) { + color: ${listActiveSelectionForeground} !important; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js + var DataGrid2, vsCodeDataGrid, DataGridRow2, vsCodeDataGridRow, DataGridCell2, vsCodeDataGridCell; + var init_data_grid3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js"() { + init_esm2(); + init_data_grid_styles(); + init_data_grid_row_styles(); + init_data_grid_cell_styles(); + DataGrid2 = class extends DataGrid { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Data Grid"); + } + } + }; + vsCodeDataGrid = DataGrid2.compose({ + baseName: "data-grid", + baseClass: DataGrid, + template: dataGridTemplate, + styles: dataGridStyles + }); + DataGridRow2 = class extends DataGridRow { + }; + vsCodeDataGridRow = DataGridRow2.compose({ + baseName: "data-grid-row", + baseClass: DataGridRow, + template: dataGridRowTemplate, + styles: dataGridRowStyles + }); + DataGridCell2 = class extends DataGridCell { + }; + vsCodeDataGridCell = DataGridCell2.compose({ + baseName: "data-grid-cell", + baseClass: DataGridCell, + template: dataGridCellTemplate, + styles: dataGridCellStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js + var dividerStyles; + var init_divider_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dividerStyles = (context, definition) => css` + ${display("block")} :host { + border: none; + border-top: calc(${borderWidth} * 1px) solid ${dividerBackground}; + box-sizing: content-box; + height: 0; + margin: calc(${designUnit} * 1px) 0; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js + var Divider2, vsCodeDivider; + var init_divider3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js"() { + init_esm2(); + init_divider_styles(); + Divider2 = class extends Divider { + }; + vsCodeDivider = Divider2.compose({ + baseName: "divider", + template: dividerTemplate, + styles: dividerStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js + var dropdownStyles; + var init_dropdown_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dropdownStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: ${dropdownBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + color: ${foreground}; + contain: contents; + font-family: ${fontFamily}; + height: calc(${inputHeight} * 1px); + position: relative; + user-select: none; + min-width: ${inputMinWidth}; + outline: none; + vertical-align: top; + } + .control { + align-items: center; + box-sizing: border-box; + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + cursor: pointer; + display: flex; + font-family: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + min-height: 100%; + padding: 2px 6px 2px 8px; + width: 100%; + } + .listbox { + background: ${dropdownBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + display: inline-flex; + flex-direction: column; + left: 0; + max-height: ${dropdownListMaxHeight}; + padding: 0; + overflow-y: auto; + position: absolute; + width: 100%; + z-index: 1; + } + .listbox[hidden] { + display: none; + } + :host(:${focusVisible}) .control { + border-color: ${focusBorder}; + } + :host(:not([disabled]):hover) { + background: ${dropdownBackground}; + border-color: ${dropdownBorder}; + } + :host(:${focusVisible}) ::slotted([aria-selected="true"][role="option"]:not([disabled])) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + cursor: ${disabledCursor}; + user-select: none; + } + :host([disabled]:hover) { + background: ${dropdownBackground}; + color: ${foreground}; + fill: currentcolor; + } + :host(:not([disabled])) .control:active { + border-color: ${focusBorder}; + } + :host(:empty) .listbox { + display: none; + } + :host([open]) .control { + border-color: ${focusBorder}; + } + :host([open][position='above']) .listbox { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + :host([open][position='below']) .listbox { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + :host([open][position='above']) .listbox { + bottom: calc(${inputHeight} * 1px); + } + :host([open][position='below']) .listbox { + top: calc(${inputHeight} * 1px); + } + .selected-value { + flex: 1 1 auto; + font-family: inherit; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + } + .indicator { + flex: 0 0 auto; + margin-inline-start: 1em; + } + slot[name='listbox'] { + display: none; + width: 100%; + } + :host([open]) slot[name='listbox'] { + display: flex; + position: absolute; + } + .end { + margin-inline-start: auto; + } + .start, + .end, + .indicator, + .select-indicator, + ::slotted(svg), + ::slotted(span) { + fill: currentcolor; + height: 1em; + min-height: calc(${designUnit} * 4px); + min-width: calc(${designUnit} * 4px); + width: 1em; + } + ::slotted([role='option']), + ::slotted(option) { + flex: 0 0 auto; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js + var Dropdown, vsCodeDropdown; + var init_dropdown = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js"() { + init_esm2(); + init_dropdown_styles(); + Dropdown = class extends Select { + }; + vsCodeDropdown = Dropdown.compose({ + baseName: "dropdown", + template: selectTemplate, + styles: dropdownStyles, + indicator: ` + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js + var linkStyles; + var init_link_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + linkStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: transparent; + box-sizing: border-box; + color: ${linkForeground}; + cursor: pointer; + fill: currentcolor; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + outline: none; + } + .control { + background: transparent; + border: calc(${borderWidth} * 1px) solid transparent; + border-radius: calc(${cornerRadius} * 1px); + box-sizing: border-box; + color: inherit; + cursor: inherit; + fill: inherit; + font-family: inherit; + height: inherit; + padding: 0; + outline: none; + text-decoration: none; + word-break: break-word; + } + .control::-moz-focus-inner { + border: 0; + } + :host(:hover) { + color: ${linkActiveForeground}; + } + :host(:hover) .content { + text-decoration: underline; + } + :host(:active) { + background: transparent; + color: ${linkActiveForeground}; + } + :host(:${focusVisible}) .control, + :host(:focus) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/index.js + var Link, vsCodeLink; + var init_link = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/index.js"() { + init_esm2(); + init_link_styles(); + Link = class extends Anchor { + }; + vsCodeLink = Link.compose({ + baseName: "link", + template: anchorTemplate, + styles: linkStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js + var optionStyles; + var init_option_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + optionStyles = (context, definition) => css` + ${display("inline-flex")} :host { + font-family: var(--body-font); + border-radius: ${cornerRadius}; + border: calc(${borderWidth} * 1px) solid transparent; + box-sizing: border-box; + color: ${foreground}; + cursor: pointer; + fill: currentcolor; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: 0; + outline: none; + overflow: hidden; + padding: 0 calc((${designUnit} / 2) * 1px) + calc((${designUnit} / 4) * 1px); + user-select: none; + white-space: nowrap; + } + :host(:${focusVisible}) { + border-color: ${focusBorder}; + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([aria-selected='true']) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:active) { + background: ${listActiveSelectionBackground}; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):hover) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):active) { + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]:hover) { + background-color: inherit; + } + .content { + grid-column-start: 2; + justify-self: start; + overflow: hidden; + text-overflow: ellipsis; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/index.js + var Option2, vsCodeOption; + var init_option = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/index.js"() { + init_esm2(); + init_option_styles(); + Option2 = class extends ListboxOption { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Option"); + } + } + }; + vsCodeOption = Option2.compose({ + baseName: "option", + template: listboxOptionTemplate, + styles: optionStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js + var panelsStyles; + var init_panels_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelsStyles = (context, definition) => css` + ${display("grid")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${foreground}; + grid-template-columns: auto 1fr auto; + grid-template-rows: auto 1fr; + overflow-x: auto; + } + .tablist { + display: grid; + grid-template-rows: auto auto; + grid-template-columns: auto; + column-gap: calc(${designUnit} * 8px); + position: relative; + width: max-content; + align-self: end; + padding: calc(${designUnit} * 1px) calc(${designUnit} * 1px) 0; + box-sizing: border-box; + } + .start, + .end { + align-self: center; + } + .activeIndicator { + grid-row: 2; + grid-column: 1; + width: 100%; + height: calc((${designUnit} / 4) * 1px); + justify-self: center; + background: ${panelTabActiveForeground}; + margin: 0; + border-radius: calc(${cornerRadius} * 1px); + } + .activeIndicatorTransition { + transition: transform 0.01s linear; + } + .tabpanel { + grid-row: 2; + grid-column-start: 1; + grid-column-end: 4; + position: relative; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js + var panelTabStyles; + var init_panel_tab_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelTabStyles = (context, definition) => css` + ${display("inline-flex")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + height: calc(${designUnit} * 7px); + padding: calc(${designUnit} * 1px) 0; + color: ${panelTabForeground}; + fill: currentcolor; + border-radius: calc(${cornerRadius} * 1px); + border: solid calc(${borderWidth} * 1px) transparent; + align-items: center; + justify-content: center; + grid-row: 1; + cursor: pointer; + } + :host(:hover) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:active) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:hover) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:active) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:${focusVisible}) { + outline: none; + border: solid calc(${borderWidth} * 1px) ${panelTabActiveBorder}; + } + :host(:focus) { + outline: none; + } + ::slotted(vscode-badge) { + margin-inline-start: calc(${designUnit} * 2px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js + var panelViewStyles; + var init_panel_view_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelViewStyles = (context, definition) => css` + ${display("flex")} :host { + color: inherit; + background-color: transparent; + border: solid calc(${borderWidth} * 1px) transparent; + box-sizing: border-box; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: 10px calc((${designUnit} + 2) * 1px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js + var Panels, vsCodePanels, PanelTab, vsCodePanelTab, PanelView, vsCodePanelView; + var init_panels = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js"() { + init_esm2(); + init_panels_styles(); + init_panel_tab_styles(); + init_panel_view_styles(); + Panels = class extends Tabs { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.orientation) { + this.orientation = TabsOrientation.horizontal; + } + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Panels"); + } + } + }; + vsCodePanels = Panels.compose({ + baseName: "panels", + template: tabsTemplate, + styles: panelsStyles + }); + PanelTab = class extends Tab { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.disabled) { + this.disabled = false; + } + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } + } + }; + vsCodePanelTab = PanelTab.compose({ + baseName: "panel-tab", + template: tabTemplate, + styles: panelTabStyles + }); + PanelView = class extends TabPanel { + }; + vsCodePanelView = PanelView.compose({ + baseName: "panel-view", + template: tabPanelTemplate, + styles: panelViewStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js + var progressRingStyles; + var init_progress_ring_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + progressRingStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: center; + outline: none; + height: calc(${designUnit} * 7px); + width: calc(${designUnit} * 7px); + margin: 0; + } + .progress { + height: 100%; + width: 100%; + } + .background { + fill: none; + stroke: transparent; + stroke-width: calc(${designUnit} / 2 * 1px); + } + .indeterminate-indicator-1 { + fill: none; + stroke: ${progressBackground}; + stroke-width: calc(${designUnit} / 2 * 1px); + stroke-linecap: square; + transform-origin: 50% 50%; + transform: rotate(-90deg); + transition: all 0.2s ease-in-out; + animation: spin-infinite 2s linear infinite; + } + @keyframes spin-infinite { + 0% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(0deg); + } + 50% { + stroke-dasharray: 21.99px 21.99px; + transform: rotate(450deg); + } + 100% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(1080deg); + } + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js + var ProgressRing, vsCodeProgressRing; + var init_progress_ring2 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js"() { + init_esm2(); + init_progress_ring_styles(); + ProgressRing = class extends BaseProgress { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.paused) { + this.paused = false; + } + this.setAttribute("aria-label", "Loading"); + this.setAttribute("aria-live", "assertive"); + this.setAttribute("role", "alert"); + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "value") { + this.removeAttribute("value"); + } + } + }; + vsCodeProgressRing = ProgressRing.compose({ + baseName: "progress-ring", + template: progressRingTemplate, + styles: progressRingStyles, + indeterminateIndicator: ` + + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js + var radioGroupStyles; + var init_radio_group_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioGroupStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: flex-start; + margin: calc(${designUnit} * 1px) 0; + flex-direction: column; + } + .positioning-region { + display: flex; + flex-wrap: wrap; + } + :host([orientation='vertical']) .positioning-region { + flex-direction: column; + } + :host([orientation='horizontal']) .positioning-region { + flex-direction: row; + } + ::slotted([slot='label']) { + color: ${foreground}; + font-size: ${typeRampBaseFontSize}; + margin: calc(${designUnit} * 1px) 0; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js + var RadioGroup2, vsCodeRadioGroup; + var init_radio_group3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js"() { + init_dist2(); + init_esm2(); + init_radio_group_styles(); + RadioGroup2 = class extends RadioGroup { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const label = this.querySelector("label"); + if (label) { + const id = "radio-group-" + Math.random().toString(16).slice(2); + label.setAttribute("id", id); + this.setAttribute("aria-labelledby", id); + } + } + }; + vsCodeRadioGroup = RadioGroup2.compose({ + baseName: "radio-group", + template: radioGroupTemplate, + styles: radioGroupStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js + var radioStyles; + var init_radio_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioStyles = (context, definition) => css` + ${display("inline-flex")} :host { + align-items: center; + flex-direction: row; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: calc(${designUnit} * 1px) 0; + outline: none; + position: relative; + transition: all 0.2s ease-in-out; + user-select: none; + } + .control { + background: ${checkboxBackground}; + border-radius: 999px; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + box-sizing: border-box; + cursor: pointer; + height: calc(${designUnit} * 4px); + position: relative; + outline: none; + width: calc(${designUnit} * 4px); + } + .label { + color: ${foreground}; + cursor: pointer; + font-family: ${fontFamily}; + margin-inline-end: calc(${designUnit} * 2px + 2px); + padding-inline-start: calc(${designUnit} * 2px + 2px); + } + .label__hidden { + display: none; + visibility: hidden; + } + .control, + .checked-indicator { + flex-shrink: 0; + } + .checked-indicator { + background: ${foreground}; + border-radius: 999px; + display: inline-block; + inset: calc(${designUnit} * 1px); + opacity: 0; + pointer-events: none; + position: absolute; + } + :host(:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:not([disabled])) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked='true']) .control { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:active { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked="true"]:${focusVisible}:not([disabled])) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([aria-checked='true']) .checked-indicator { + opacity: 1; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js + var Radio2, vsCodeRadio; + var init_radio3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js"() { + init_esm2(); + init_radio_styles(); + Radio2 = class extends Radio { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Radio"); + } + } + }; + vsCodeRadio = Radio2.compose({ + baseName: "radio", + template: radioTemplate, + styles: radioStyles, + checkedIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js + var tagStyles; + var init_tag_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + tagStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + } + .control { + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: ${tagCornerRadius}; + color: ${badgeForeground}; + padding: calc(${designUnit} * 0.5px) calc(${designUnit} * 1px); + text-transform: uppercase; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js + var Tag, vsCodeTag; + var init_tag = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js"() { + init_esm2(); + init_tag_styles(); + Tag = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.circular) { + this.circular = false; + } + } + }; + vsCodeTag = Tag.compose({ + baseName: "tag", + template: badgeTemplate, + styles: tagStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js + var textAreaStyles; + var init_text_area_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textAreaStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .control { + box-sizing: border-box; + position: relative; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + font: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: calc(${designUnit} * 2px + 1px); + width: 100%; + min-width: ${inputMinWidth}; + resize: none; + } + .control:hover:enabled { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + .control:active:enabled { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .control::-webkit-scrollbar { + width: ${scrollbarWidth}; + height: ${scrollbarHeight}; + } + .control::-webkit-scrollbar-corner { + background: ${inputBackground}; + } + .control::-webkit-scrollbar-thumb { + background: ${scrollbarSliderBackground}; + } + .control::-webkit-scrollbar-thumb:hover { + background: ${scrollbarSliderHoverBackground}; + } + .control::-webkit-scrollbar-thumb:active { + background: ${scrollbarSliderActiveBackground}; + } + :host(:focus-within:not([disabled])) .control { + border-color: ${focusBorder}; + } + :host([resize='both']) .control { + resize: both; + } + :host([resize='horizontal']) .control { + resize: horizontal; + } + :host([resize='vertical']) .control { + resize: vertical; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js + var TextArea2, vsCodeTextArea; + var init_text_area3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js"() { + init_esm2(); + init_text_area_styles(); + TextArea2 = class extends TextArea { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text area"); + } + } + }; + vsCodeTextArea = TextArea2.compose({ + baseName: "text-area", + template: textAreaTemplate, + styles: textAreaStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js + var textFieldStyles; + var init_text_field_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textFieldStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .root { + box-sizing: border-box; + position: relative; + display: flex; + flex-direction: row; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + height: calc(${inputHeight} * 1px); + min-width: ${inputMinWidth}; + } + .control { + -webkit-appearance: none; + font: inherit; + background: transparent; + border: 0; + color: inherit; + height: calc(100% - (${designUnit} * 1px)); + width: 100%; + margin-top: auto; + margin-bottom: auto; + border: none; + padding: 0 calc(${designUnit} * 2px + 1px); + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + .start, + .end { + display: flex; + margin: auto; + fill: currentcolor; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-start: calc(${designUnit} * 2px); + } + .end { + margin-inline-end: calc(${designUnit} * 2px); + } + :host(:hover:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + :host(:active:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + :host(:focus-within:not([disabled])) .root { + border-color: ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js + var TextField2, vsCodeTextField; + var init_text_field3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js"() { + init_esm2(); + init_text_field_styles(); + TextField2 = class extends TextField { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text field"); + } + } + }; + vsCodeTextField = TextField2.compose({ + baseName: "text-field", + template: textFieldTemplate, + styles: textFieldStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js + var allComponents; + var init_custom_elements = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js"() { + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + allComponents = { + vsCodeBadge, + vsCodeButton, + vsCodeCheckbox, + vsCodeDataGrid, + vsCodeDataGridCell, + vsCodeDataGridRow, + vsCodeDivider, + vsCodeDropdown, + vsCodeLink, + vsCodeOption, + vsCodePanels, + vsCodePanelTab, + vsCodePanelView, + vsCodeProgressRing, + vsCodeRadioGroup, + vsCodeRadio, + vsCodeTag, + vsCodeTextArea, + vsCodeTextField, + register(container, ...rest) { + if (!container) { + return; + } + for (const key in this) { + if (key === "register") { + continue; + } + this[key]().register(container, ...rest); + } + } + }; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/index.js + var dist_exports = {}; + __export(dist_exports, { + Badge: () => Badge2, + Button: () => Button2, + Checkbox: () => Checkbox2, + DataGrid: () => DataGrid2, + DataGridCell: () => DataGridCell2, + DataGridCellTypes: () => DataGridCellTypes, + DataGridRow: () => DataGridRow2, + DataGridRowTypes: () => DataGridRowTypes, + Divider: () => Divider2, + DividerRole: () => DividerRole, + Dropdown: () => Dropdown, + DropdownPosition: () => SelectPosition, + GenerateHeaderOptions: () => GenerateHeaderOptions, + Link: () => Link, + Option: () => Option2, + PanelTab: () => PanelTab, + PanelView: () => PanelView, + Panels: () => Panels, + ProgressRing: () => ProgressRing, + Radio: () => Radio2, + RadioGroup: () => RadioGroup2, + RadioGroupOrientation: () => Orientation, + Tag: () => Tag, + TextArea: () => TextArea2, + TextAreaResize: () => TextAreaResize, + TextField: () => TextField2, + TextFieldType: () => TextFieldType, + allComponents: () => allComponents, + provideVSCodeDesignSystem: () => provideVSCodeDesignSystem, + vsCodeBadge: () => vsCodeBadge, + vsCodeButton: () => vsCodeButton, + vsCodeCheckbox: () => vsCodeCheckbox, + vsCodeDataGrid: () => vsCodeDataGrid, + vsCodeDataGridCell: () => vsCodeDataGridCell, + vsCodeDataGridRow: () => vsCodeDataGridRow, + vsCodeDivider: () => vsCodeDivider, + vsCodeDropdown: () => vsCodeDropdown, + vsCodeLink: () => vsCodeLink, + vsCodeOption: () => vsCodeOption, + vsCodePanelTab: () => vsCodePanelTab, + vsCodePanelView: () => vsCodePanelView, + vsCodePanels: () => vsCodePanels, + vsCodeProgressRing: () => vsCodeProgressRing, + vsCodeRadio: () => vsCodeRadio, + vsCodeRadioGroup: () => vsCodeRadioGroup, + vsCodeTag: () => vsCodeTag, + vsCodeTextArea: () => vsCodeTextArea, + vsCodeTextField: () => vsCodeTextField + }); + var init_dist3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/index.js"() { + init_vscode_design_system(); + init_custom_elements(); + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + } + }); + + // src/webview/shared/domUtils.ts + function el(tag, className, text) { + const node = document.createElement(tag); + if (className) { + node.className = className; + } + if (text !== void 0) { + node.textContent = text; + } + return node; + } + + // src/webview/shared/buttonConfig.ts + var BUTTONS = { + "btn-refresh": { + id: "btn-refresh", + label: "\u{1F504} Refresh", + appearance: "primary" + }, + "btn-details": { + id: "btn-details", + label: "\u{1F916} Details" + }, + "btn-chart": { + id: "btn-chart", + label: "\u{1F4C8} Chart" + }, + "btn-usage": { + id: "btn-usage", + label: "\u{1F4CA} Usage Analysis" + }, + "btn-diagnostics": { + id: "btn-diagnostics", + label: "\u{1F50D} Diagnostics" + }, + "btn-maturity": { + id: "btn-maturity", + label: "\u{1F3AF} Fluency Score" + }, + "btn-dashboard": { + id: "btn-dashboard", + label: "\u{1F4CA} Team Dashboard" + }, + "btn-level-viewer": { + id: "btn-level-viewer", + label: "\u{1F50D} Level Viewer" + }, + "btn-environmental": { + id: "btn-environmental", + label: "\u{1F33F} Environmental Impact" + } + }; + function buttonHtml(id) { + const config = BUTTONS[id]; + const appearance = config.appearance ? ` appearance="${config.appearance}"` : ""; + return `${config.label}`; + } + + // src/webview/shared/contextRefUtils.ts + function getTotalContextRefs(refs) { + return refs.file + refs.selection + refs.implicitSelection + refs.symbol + refs.codebase + refs.workspace + refs.terminal + refs.vscode + refs.copilotInstructions + refs.agentsMd + (refs.terminalLastCommand || 0) + (refs.terminalSelection || 0) + (refs.clipboard || 0) + (refs.changes || 0) + (refs.outputPanel || 0) + (refs.problemsPanel || 0); + } + + // src/tokenEstimators.json + var tokenEstimators_default = { + $schema: "http://json-schema.org/draft-07/schema#", + description: "Character-to-token ratio estimators for different AI models. Used to estimate token counts from text length.", + estimators: { + "gpt-4": 0.25, + "gpt-4.1": 0.25, + "gpt-4.1-mini": 0.25, + "gpt-4o": 0.25, + "gpt-4o-mini": 0.25, + "gpt-4-turbo": 0.25, + "gpt-3.5-turbo": 0.25, + "gpt-5": 0.25, + "gpt-5-codex": 0.25, + "gpt-5-mini": 0.25, + "gpt-5.1": 0.25, + "gpt-5.1-codex": 0.25, + "gpt-5.1-codex-max": 0.25, + "gpt-5.1-codex-mini": 0.25, + "gpt-5.2": 0.25, + "gpt-5.2-codex": 0.25, + "gpt-5.2-pro": 0.25, + "gpt-5.3-codex": 0.25, + "gpt-5.4": 0.25, + "gpt-4.1-nano": 0.25, + "gemini-2.0-flash": 0.25, + "gemini-2.0-flash-lite": 0.25, + "gemini-2.5-flash": 0.25, + "gemini-2.5-flash-lite": 0.25, + "claude-sonnet-3.5": 0.24, + "claude-sonnet-3.7": 0.24, + "claude-sonnet-4": 0.24, + "claude-sonnet-4.5": 0.24, + "claude-sonnet-4.6": 0.24, + "claude-haiku": 0.24, + "claude-haiku-4.5": 0.24, + "claude-opus-4.1": 0.24, + "claude-opus-4.5": 0.24, + "claude-opus-4.6": 0.24, + "claude-opus-4.6-(fast-mode)-(preview)": 0.24, + "claude-opus-4.6-fast": 0.24, + "gemini-2.5-pro": 0.25, + "gemini-3-flash": 0.25, + "gemini-3-pro": 0.25, + "gemini-3-pro-preview": 0.25, + "gemini-3.1-pro": 0.25, + "grok-code-fast-1": 0.25, + "raptor-mini": 0.25, + goldeneye: 0.25, + "o1-preview": 0.25, + "o1-mini": 0.25, + "o3-mini": 0.25, + "o4-mini": 0.25 + } + }; + + // src/webview/shared/formatUtils.ts + var tokenEstimators = tokenEstimators_default.estimators; + var currentLocale; + function setFormatLocale(locale) { + currentLocale = locale; + } + function formatFixed(value, digits) { + return new Intl.NumberFormat(currentLocale, { + minimumFractionDigits: digits, + maximumFractionDigits: digits + }).format(value); + } + function formatPercent(value, digits = 1) { + return `${formatFixed(value, digits)}%`; + } + function formatNumber(value) { + return value.toLocaleString(currentLocale); + } + + // src/webview/shared/theme.css + var theme_default = '/**\n * Shared theme variables for all webview panels\n * Uses VS Code theme tokens for automatic light/dark theme support\n */\n\n:root {\n /* VS Code base colors */\n --bg-primary: var(--vscode-editor-background);\n --bg-secondary: var(--vscode-sideBar-background);\n --bg-tertiary: var(--vscode-editorWidget-background);\n --text-primary: var(--vscode-editor-foreground);\n --text-secondary: var(--vscode-descriptionForeground);\n --text-muted: var(--vscode-disabledForeground);\n --border-color: var(--vscode-panel-border);\n --border-subtle: var(--vscode-widget-border);\n \n /* Button colors */\n --button-bg: var(--vscode-button-background);\n --button-fg: var(--vscode-button-foreground);\n --button-hover-bg: var(--vscode-button-hoverBackground);\n --button-secondary-bg: var(--vscode-button-secondaryBackground);\n --button-secondary-fg: var(--vscode-button-secondaryForeground);\n --button-secondary-hover-bg: var(--vscode-button-secondaryHoverBackground);\n \n /* Input colors */\n --input-bg: var(--vscode-input-background);\n --input-fg: var(--vscode-input-foreground);\n --input-border: var(--vscode-input-border);\n \n /* List/card colors */\n --list-hover-bg: var(--vscode-list-hoverBackground);\n --list-active-bg: var(--vscode-list-activeSelectionBackground);\n --list-active-fg: var(--vscode-list-activeSelectionForeground);\n --list-inactive-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Alternating row colors for better readability */\n --row-alternate-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Badge colors */\n --badge-bg: var(--vscode-badge-background);\n --badge-fg: var(--vscode-badge-foreground);\n \n /* Focus colors */\n --focus-border: var(--vscode-focusBorder);\n \n /* Link colors */\n --link-color: var(--vscode-textLink-foreground);\n --link-hover-color: var(--vscode-textLink-activeForeground);\n \n /* Status colors */\n --error-fg: var(--vscode-errorForeground);\n --warning-fg: var(--vscode-editorWarning-foreground);\n --success-fg: var(--vscode-terminal-ansiGreen);\n \n /* Shadow for cards */\n --shadow-color: rgb(0, 0, 0, 0.16);\n --shadow-hover-color: rgb(0, 0, 0, 0.24);\n}\n\n/* Light theme adjustments */\nbody[data-vscode-theme-kind="vscode-light"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --shadow-color: rgb(0, 0, 0, 0.08);\n --shadow-hover-color: rgb(0, 0, 0, 0.12);\n}\n\n/* High contrast mode adjustments */\nbody[data-vscode-theme-kind="vscode-high-contrast"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --border-color: var(--vscode-contrastBorder);\n --border-subtle: var(--vscode-contrastBorder);\n}\n'; + + // src/webview/usage/styles.css + var styles_default = "* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: var(--bg-primary);\n color: var(--text-primary);\n padding: 16px;\n line-height: 1.5;\n min-width: 320px;\n}\n\n.container {\n background: var(--bg-secondary);\n border: 1px solid var(--border-color);\n border-radius: 10px;\n padding: 16px;\n box-shadow: 0 4px 10px var(--shadow-color);\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n margin-bottom: 14px;\n padding-bottom: 4px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.header-icon {\n font-size: 20px;\n}\n\n.header-title {\n font-size: 16px;\n font-weight: 700;\n color: var(--text-primary);\n letter-spacing: 0.2px;\n}\n\n.button-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.nav-button {\n background: var(--button-secondary-bg);\n border: 1px solid var(--border-subtle);\n color: var(--text-primary);\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.nav-button:hover {\n background: var(--button-secondary-hover-bg);\n}\n\n.nav-button.primary {\n background: var(--button-bg);\n border-color: var(--button-bg);\n color: var(--button-fg);\n}\n\n.nav-button.primary:hover {\n background: var(--button-hover-bg);\n}\n\n.section {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-color);\n border-radius: 8px;\n padding: 12px;\n margin-bottom: 16px;\n box-shadow: 0 2px 6px var(--shadow-color);\n}\n\n.section-title {\n font-size: 14px;\n font-weight: 700;\n color: var(--text-primary);\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 6px;\n letter-spacing: 0.2px;\n}\n\n.section-subtitle {\n font-size: 12px;\n color: var(--text-secondary);\n margin-bottom: 12px;\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.stat-card {\n background: var(--list-hover-bg);\n border: 1px solid var(--border-color);\n border-radius: 6px;\n padding: 12px;\n box-shadow: 0 2px 4px var(--shadow-color);\n}\n\n.stat-card[title] {\n cursor: help;\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-secondary);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 20px;\n font-weight: 700;\n color: var(--text-primary);\n}\n\n.bar-chart {\n background: var(--list-hover-bg);\n border: 1px solid var(--border-color);\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 12px;\n}\n\n.bar-item {\n margin-bottom: 8px;\n}\n\n.bar-label {\n display: flex;\n justify-content: space-between;\n font-size: 12px;\n margin-bottom: 4px;\n color: var(--text-primary);\n}\n\n.bar-track {\n background: var(--row-alternate-bg);\n height: 8px;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.bar-fill {\n height: 100%;\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.list {\n background: var(--list-hover-bg);\n border: 1px solid var(--border-color);\n border-radius: 6px;\n padding: 12px 16px;\n}\n\n.list ul {\n list-style: none;\n padding: 0;\n}\n\n.list li {\n padding: 4px 0;\n font-size: 13px;\n}\n\n/* Customization matrix styles */\n.customization-matrix-container {\n overflow-x: auto;\n max-width: 100%;\n}\n\n.customization-matrix {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.customization-matrix th {\n background: var(--list-hover-bg);\n color: var(--text-primary);\n font-weight: 600;\n font-size: 11px;\n white-space: nowrap;\n}\n\n.customization-matrix td {\n background: var(--bg-tertiary);\n}\n\n.customization-matrix tbody tr:hover td {\n background: var(--list-hover-bg);\n}\n\n.stale-warning {\n color: #f59e0b;\n font-weight: 600;\n}\n\n.two-column {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n}\n\n.three-column {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 16px;\n align-items: stretch;\n}\n\n.three-column > div {\n display: flex;\n flex-direction: column;\n}\n\n.three-column > div > .list {\n flex: 1;\n}\n\n.info-box {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-color);\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 16px;\n font-size: 12px;\n color: var(--text-secondary);\n}\n\n.info-box-title {\n font-weight: 600;\n color: var(--text-primary);\n margin-bottom: 6px;\n}\n\n\n.repo-hygiene-results {\n margin-top: 4px;\n}\n\n.repo-analysis-card {\n margin: 0;\n}\n\n.repo-hygiene-pane {\n border: 1px solid var(--border-color);\n border-radius: 6px;\n margin-bottom: 12px;\n background: var(--bg-secondary);\n}\n\n.repo-hygiene-pane-header {\n padding: 8px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n border-bottom: 1px solid var(--border-color);\n background: var(--list-hover-bg);\n}\n\n.repo-hygiene-pane-body {\n display: block;\n}\n\n.repo-hygiene-pane-collapsed {\n display: none;\n}\n\n.repo-hygiene-pane-collapsed .repo-hygiene-pane-body {\n display: none;\n}\n\n.btn-repo-action[disabled] {\n opacity: 0.7;\n}\n\n.footer {\n margin-top: 6px;\n padding-top: 12px;\n border-top: 1px solid var(--border-subtle);\n text-align: left;\n font-size: 11px;\n color: var(--text-muted);\n}\n\n@media (width <= 768px) {\n .two-column {\n grid-template-columns: 1fr;\n }\n\n .three-column {\n grid-template-columns: 1fr;\n }\n}\n"; + + // src/toolNames.json + var toolNames_default = { + unknown: "Unknown", + run_in_terminal: "Run In Terminal", + "mcp.io.github.git.assign_copilot_to_issue": "GitHub MCP (Local): Assign Copilot to Issue", + "mcp.io.github.git.create_or_update_file": "GitHub MCP (Local): Create/Update File", + mcp_io_github_git_create_or_update_file: "GitHub MCP (Local): Create/Update File", + mcp_io_github_git_assign_copilot_to_issue: "GitHub MCP (Local): Assign Copilot to Issue", + mcp_io_github_git_pull_request_read: "GitHub MCP (Local): Pull Request Read", + mcp_io_github_git_issue_read: "GitHub MCP (Local): Issue Read", + mcp_io_github_git_issue_write: "GitHub MCP (Local): Issue Write", + mcp_io_github_git_list_issues: "GitHub MCP (Local): List Issues", + mcp_io_github_git_create_pull_request: "GitHub MCP (Local): Create Pull Request", + mcp_io_github_git_get_file_contents: "GitHub MCP (Local): Get File Contents", + mcp_io_github_git_search_code: "GitHub MCP (Local): Search Code", + mcp_io_github_git_search_pull_requests: "GitHub MCP (Local): Search Pull Requests", + mcp_io_github_git_get_release_by_tag: "GitHub MCP (Local): Get Release By Tag", + mcp_io_github_git_search_issues: "GitHub MCP (Local): Search Issues", + mcp_io_github_git_add_issue_comment: "GitHub MCP (Local): Add Issue Comment", + mcp_io_github_git_list_pull_requests: "GitHub MCP (Local): List Pull Requests", + mcp_io_github_git_list_code_scanning_alerts: "GitHub MCP (Local): List Code Scanning Alerts", + mcp_github_github_assign_copilot_to_issue: "GitHub MCP (Remote): Assign Copilot to Issue", + mcp_github_github_issue_read: "GitHub MCP (Remote): Issue Read", + mcp_github_github_issue_write: "GitHub MCP (Remote): Issue Write", + mcp_github_github_list_issues: "GitHub MCP (Remote): List Issues", + mcp_github_get_file_contents: "GitHub MCP (Remote): Get File Contents", + mcp_github_get_latest_release: "GitHub MCP (Remote): Get Latest Release", + mcp_github_get_release_by_tag: "GitHub MCP (Remote): Get Release By Tag", + mcp_github_list_releases: "GitHub MCP (Remote): List Releases", + mcp_github_list_tags: "GitHub MCP (Remote): List Tags", + mcp_github_search_code: "GitHub MCP (Remote): Search Code", + mcp_github_search_issues: "GitHub MCP (Remote): Search Issues", + mcp_github_create_pull_request: "GitHub MCP (Remote): Create Pull Request", + "mcp_github-code-s_get_code_scanning_alert": "GitHub MCP (Code Scanning): Get Alert", + "mcp_github-code-s_list_code_scanning_alerts": "GitHub MCP (Code Scanning): List Alerts", + mcp_com_microsoft_get_bestpractices: "GitHub MCP: Get Best Practices", + mcp_microsoft_doc_microsoft_code_sample_search: "Microsoft Docs MCP: Code Sample Search", + mcp_microsoft_doc_microsoft_docs_search: "Microsoft Docs MCP: Docs Search", + mcp_gitkraken_git_add_or_commit: "GitKraken MCP: Git Add or Commit", + mcp_gitkraken_git_status: "GitKraken MCP: Git Status", + mcp_gitkraken_git_branch: "GitKraken MCP: Git Branch", + mcp_gitkraken_git_checkout: "GitKraken MCP: Git Checkout", + mcp_gitkraken_gitkraken_workspace_list: "GitKraken MCP: List Workspaces", + mcp_azure_aks: "Azure MCP: AKS", + mcp_azure_mcp_azureterraformbestpractices: "Azure MCP: Azure Terraform Best Practices", + mcp_azure_mcp_documentation: "Azure MCP: Documentation", + mcp_bicep_format_bicep_file: "Bicep MCP: Format Bicep File", + mcp_bicep_get_az_resource_type_schema: "Bicep MCP: Get Az Resource Type Schema", + mcp_bicep_get_bicep_best_practices: "Bicep MCP: Get Bicep Best Practices", + mcp_bicep_get_bicep_file_diagnostics: "Bicep MCP: Get Bicep File Diagnostics", + mcp_bicep_list_az_resource_types_for_provider: "Bicep MCP: List Az Resource Types For Provider", + "azure_bicep-get_azure_verified_module": "Azure Bicep: Get Azure Verified Module", + "azure_development-recommend_custom_modes": "Azure Development: Recommend Custom Modes", + "azure_resources-query_azure_resource_graph": "Azure Resources: Query Azure Resource Graph", + manage_todo_list: "Manage TODO List", + copilot_readFile: "Read File", + copilot_viewImage: "Copilot View Image", + opilot_findFiles: "Find Files", + copilot_writeFile: "Write File", + copilot_applyPatch: "Apply Patch", + copilot_findTextInFiles: "Find Text In Files", + copilot_findFiles: "Find Files", + copilot_replaceString: "Replace String", + copilot_createFile: "Create File", + copilot_listDirectory: "List Directory", + copilot_fetchWebPage: "Fetch Web Page", + copilot_getErrors: "Get Errors", + copilot_multiReplaceString: "Multi Replace String", + copilot_searchCodebase: "Search Codebase", + get_terminal_output: "Get Terminal Output", + run_task: "Run Task: Investigate", + await_terminal: "Await Terminal command", + "github.copilot.editsAgent": "GitHub Copilot Edits Agent", + todoList: "TODO List", + terminal: "Terminal", + terminal_last_command: "Terminal Last Command", + github_pull_request: "GitHub Pull Request", + github_repo: "GitHub Repository", + editFiles: "Edit Files", + listFiles: "List Files", + search_subagent: "Search Subagent", + execution_subagent: "Execution Subagent", + apply_patch: "Apply Patch", + ask_questions: "Ask Questions", + copilot_askQuestions: "Ask Questions", + copilot_createAndRunTask: "Create And Run Task", + copilot_createDirectory: "Create Directory", + copilot_createNewJupyterNotebook: "Create New Jupyter Notebook", + copilot_createNewWorkspace: "Create New Workspace", + copilot_editFiles: "Edit Files", + copilot_editNotebook: "Edit Notebook", + copilot_findTestFiles: "Find Test Files", + copilot_getChangedFiles: "Get Changed Files", + copilot_getDocInfo: "Get Doc Info", + copilot_getNotebookSummary: "Get Notebook Summary", + copilot_getProjectSetupInfo: "Get Project Setup Info", + copilot_getSearchResults: "Get Search Results", + copilot_getVSCodeAPI: "Get VSCode API", + copilot_githubRepo: "GitHub Repository", + copilot_insertEdit: "Insert Edit", + copilot_installExtension: "Install Extension", + copilot_memory: "Memory", + copilot_openIntegratedBrowser: "Open Integrated Browser", + copilot_openSimpleBrowser: "Open Simple Browser", + copilot_readNotebookCellOutput: "Read Notebook Cell Output", + copilot_readProjectStructure: "Read Project Structure", + copilot_runNotebookCell: "Run Notebook Cell", + copilot_runTests1: "Run Tests", + copilot_runVscodeCommand: "Run VSCode Command", + copilot_searchWorkspaceSymbols: "Search Workspace Symbols", + copilot_switchAgent: "Switch Agent", + copilot_testFailure: "Test Failure", + copilot_toolReplay: "Tool Replay", + create_and_run_task: "Create And Run Task", + create_directory: "Create Directory", + create_file: "Create File", + create_new_jupyter_notebook: "Create New Jupyter Notebook", + create_new_workspace: "Create New Workspace", + create_virtual_environment: "Create Virtual Environment", + edit_files: "Edit Files", + edit_notebook_file: "Edit Notebook File", + fetch_webpage: "Fetch Webpage", + file_search: "File Search", + get_changed_files: "Get Changed Files", + get_doc_info: "Get Doc Info", + get_errors: "Get Errors", + get_project_setup_info: "Get Project Setup Info", + configure_python_environment: "Configure Python Environment", + get_search_view_results: "Get Search View Results", + get_task_output: "Get Task Output", + job_output: "Job Output", + get_vscode_api: "Get VSCode API", + grep_search: "Grep Search", + insert_edit_into_file: "Insert Edit Into File", + install_extension: "Install Extension", + install_python_packages: "Install Python Packages", + list_dir: "List Dir", + ls: "Ls", + memory: "Memory", + multi_replace_string_in_file: "Multi Replace String In File", + open_integrated_browser: "Open Integrated Browser", + open_simple_browser: "Open Simple Browser", + read_file: "Read File", + view_image: "View Image", + read_notebook_cell_output: "Read Notebook Cell Output", + read_project_structure: "Read Project Structure", + replace_string_in_file: "Replace String In File", + "setup.agent": "Setup Agent", + selectEnvironment: "Select Environment", + run_notebook_cell: "Run Notebook Cell", + run_vscode_command: "Run VSCode Command", + runSubagent: "Run Subagent", + renderMermaidDiagram: "Render Mermaid Diagram", + runTests: "Run Tests", + search_workspace_symbols: "Search Workspace Symbols", + semantic_search: "Semantic Search", + switch_agent: "Switch Agent", + terminal_selection: "Terminal Selection", + test_failure: "Test Failure", + test_search: "Test Search", + tool_replay: "Tool Replay", + tool_search: "Tool Search", + vscode_askQuestions: "VSCode Ask Questions", + vscode_get_confirmation: "VSCode Get Confirmation", + vscode_get_confirmation_with_options: "VSCode Get Confirmation With Options", + vscode_get_terminal_confirmation: "VSCode Get Terminal Confirmation", + vscode_listCodeUsages: "VSCode List Code Usages", + vscode_renameSymbol: "VSCode Rename Symbol", + "mcp_io_github_ups_get-library-docs": "Context7 MCP: Get Library Docs", + "mcp_io_github_ups_query-docs": "Context7 MCP: Query Docs", + "mcp_io_github_ups_resolve-library-id": "Context7 MCP: Resolve Library ID", + "mcp_context7_query-docs": "Context7 MCP: Query Docs", + "mcp_context7_resolve-library-id": "Context7 MCP: Resolve Library ID", + mcp_microsoft_pla_browser_evaluate: "Playwright MCP: Browser Evaluate", + mcp_microsoft_pla_browser_install: "Playwright MCP: Browser Install", + mcp_microsoft_pla_browser_navigate: "Playwright MCP: Browser Navigate", + mcp_microsoft_pla_browser_run_code: "Playwright MCP: Browser Run Code", + mcp_microsoft_pla_browser_click: "Playwright MCP: Browser Click", + mcp_microsoft_pla_browser_fill_form: "Playwright MCP: Browser Fill Form", + mcp_microsoft_pla_browser_press_key: "Playwright MCP: Browser Press Key", + mcp_microsoft_pla_browser_resize: "Playwright MCP: Browser Resize", + mcp_microsoft_pla_browser_snapshot: "Playwright MCP: Browser Snapshot", + mcp_microsoft_pla_browser_tabs: "Playwright MCP: Browser Tabs", + mcp_microsoft_pla_browser_take_screenshot: "Playwright MCP: Browser Take Screenshot", + mcp_microsoft_pla_browser_type: "Playwright MCP: Browser Type", + mcp_playwright_browser_click: "Playwright MCP: Browser Click", + mcp_playwright_browser_navigate: "Playwright MCP: Browser Navigate", + mcp_playwright_browser_snapshot: "Playwright MCP: Browser Snapshot", + mcp_playwright_browser_take_screenshot: "Playwright MCP: Browser Take Screenshot", + mcp_pylance_mcp_s_pylanceDocString: "Pylance MCP: Pylance Doc String", + "mcp_chrome-devtoo_click": "Chrome DevTools MCP: Click", + "mcp_chrome-devtoo_evaluate_script": "Chrome DevTools MCP: Evaluate Script", + "mcp_chrome-devtoo_fill": "Chrome DevTools MCP: Fill", + "mcp_chrome-devtoo_get_network_request": "Chrome DevTools MCP: Get Network Request", + "mcp_chrome-devtoo_list_console_messages": "Chrome DevTools MCP: List Console Messages", + "mcp_chrome-devtoo_list_pages": "Chrome DevTools MCP: List Pages", + "mcp_chrome-devtoo_navigate_page": "Chrome DevTools MCP: Navigate Page", + "mcp_chrome-devtoo_new_page": "Chrome DevTools MCP: New Page", + "mcp_chrome-devtoo_select_page": "Chrome DevTools MCP: Select Page", + "mcp_chrome-devtoo_take_screenshot": "Chrome DevTools MCP: Take Screenshot", + "mcp_chrome-devtoo_fill_form": "Chrome DevTools MCP: Fill Form", + "mcp_chrome-devtoo_hover": "Chrome DevTools MCP: Hover", + "mcp_chrome-devtoo_list_network_requests": "Chrome DevTools MCP: List Network Requests", + "mcp_chrome-devtoo_press_key": "Chrome DevTools MCP: Press Key", + "mcp_chrome-devtoo_take_snapshot": "Chrome DevTools MCP: Take Snapshot", + "mcp_chrome-devtoo_wait_for": "Chrome DevTools MCP: Wait For", + mcp_chrome_devtoo_click: "Chrome DevTools MCP: Click", + mcp_chrome_devtoo_evaluate_script: "Chrome DevTools MCP: Evaluate Script", + mcp_chrome_devtoo_fill: "Chrome DevTools MCP: Fill", + mcp_chrome_devtoo_get_console_message: "Chrome DevTools MCP: Get Console Message", + mcp_chrome_devtoo_get_network_request: "Chrome DevTools MCP: Get Network Request", + mcp_chrome_devtoo_list_console_messages: "Chrome DevTools MCP: List Console Messages", + mcp_chrome_devtoo_list_network_requests: "Chrome DevTools MCP: List Network Requests", + mcp_chrome_devtoo_list_pages: "Chrome DevTools MCP: List Pages", + mcp_chrome_devtoo_navigate_page: "Chrome DevTools MCP: Navigate Page", + mcp_chrome_devtoo_new_page: "Chrome DevTools MCP: New Page", + mcp_chrome_devtoo_take_snapshot: "Chrome DevTools MCP: Take Snapshot", + mcp_chrome_devtoo_wait_for: "Chrome DevTools MCP: Wait For", + mcp_io_github_chr_click: "Chrome DevTools MCP: Click", + mcp_io_github_chr_emulate: "Chrome DevTools MCP: Emulate", + mcp_io_github_chr_evaluate_script: "Chrome DevTools MCP: Evaluate Script", + mcp_io_github_chr_list_network_requests: "Chrome DevTools MCP: List Network Requests", + mcp_io_github_chr_list_pages: "Chrome DevTools MCP: List Pages", + mcp_io_github_chr_navigate_page: "Chrome DevTools MCP: Navigate Page", + mcp_io_github_chr_new_page: "Chrome DevTools MCP: New Page", + mcp_io_github_chr_resize_page: "Chrome DevTools MCP: Resize Page", + mcp_io_github_chr_select_page: "Chrome DevTools MCP: Select Page", + mcp_io_github_chr_take_snapshot: "Chrome DevTools MCP: Take Snapshot", + mcp_oraios_serena_activate_project: "Serena: Activate Project", + mcp_oraios_serena_check_onboarding_performed: "Serena: Check Onboarding Performed", + mcp_oraios_serena_create_text_file: "Serena: Create Text File", + mcp_oraios_serena_delete_lines: "Serena: Delete Lines", + mcp_oraios_serena_delete_memory: "Serena: Delete Memory", + mcp_oraios_serena_edit_memory: "Serena: Edit Memory", + mcp_oraios_serena_execute_shell_command: "Serena: Execute Shell Command", + mcp_oraios_serena_find_file: "Serena: Find File", + mcp_oraios_serena_find_referencing_symbols: "Serena: Find Referencing Symbols", + mcp_oraios_serena_find_symbol: "Serena: Find Symbol", + mcp_oraios_serena_get_current_config: "Serena: Get Current Config", + mcp_oraios_serena_get_symbols_overview: "Serena: Get Symbols Overview", + mcp_oraios_serena_initial_instructions: "Serena: Initial Instructions", + mcp_oraios_serena_insert_after_symbol: "Serena: Insert After Symbol", + mcp_oraios_serena_insert_at_line: "Serena: Insert At Line", + mcp_oraios_serena_insert_before_symbol: "Serena: Insert Before Symbol", + mcp_oraios_serena_jet_brains_find_referencing_symbols: "Serena: JetBrains Find Referencing Symbols", + mcp_oraios_serena_jet_brains_find_symbol: "Serena: JetBrains Find Symbol", + mcp_oraios_serena_jet_brains_get_symbols_overview: "Serena: JetBrains Get Symbols Overview", + mcp_oraios_serena_jet_brains_type_hierarchy: "Serena: JetBrains Type Hierarchy", + mcp_oraios_serena_list_dir: "Serena: List Dir", + mcp_oraios_serena_list_memories: "Serena: List Memories", + mcp_oraios_serena_onboarding: "Serena: Onboarding", + mcp_oraios_serena_open_dashboard: "Serena: Open Dashboard", + mcp_oraios_serena_prepare_for_new_conversation: "Serena: Prepare For New Conversation", + mcp_oraios_serena_read_file: "Serena: Read File", + mcp_oraios_serena_read_memory: "Serena: Read Memory", + mcp_oraios_serena_remove_project: "Serena: Remove Project", + mcp_oraios_serena_rename_symbol: "Serena: Rename Symbol", + mcp_oraios_serena_replace_content: "Serena: Replace Content", + mcp_oraios_serena_replace_lines: "Serena: Replace Lines", + mcp_oraios_serena_replace_symbol_body: "Serena: Replace Symbol Body", + mcp_oraios_serena_restart_language_server: "Serena: Restart Language Server", + mcp_oraios_serena_search_for_pattern: "Serena: Search For Pattern", + mcp_oraios_serena_summarize_changes: "Serena: Summarize Changes", + mcp_oraios_serena_switch_modes: "Serena: Switch Modes", + mcp_oraios_serena_think_about_collected_information: "Serena: Think About Collected Information", + mcp_oraios_serena_think_about_task_adherence: "Serena: Think About Task Adherence", + mcp_oraios_serena_think_about_whether_you_are_done: "Serena: Think About Whether You Are Done", + mcp_oraios_serena_write_memory: "Serena: Write Memory", + "mcp_visuals-mcp_display_image": "Visuals MCP: Display Image", + bash: "Bash", + "claude-code": "Claude Code", + "copilot-cloud-agent": "Copilot Cloud Agent", + agent: "Agent", + copilotcli: "Copilot CLI", + "github.copilot.default": "GitHub Copilot Default", + "github.copilot.workspace": "GitHub Copilot Workspace", + "github.copilot.vscode": "GitHub Copilot VSCode", + glob: "Glob", + file_glob_search: "File Glob Search", + grep: "Grep", + kill_terminal: "Kill Terminal", + read: "Read", + view: "View", + vscode_editFile_internal: "VSCode Edit File (Internal)", + vscode_fetchWebPage_internal: "VSCode Fetch Web Page (Internal)", + vscode_searchExtensions_internal: "VSCode Search Extensions (Internal)", + "vscode-websearchforcopilot_webSearch": "VSCode WebSearch for Copilot: Web Search", + webfetch: "Web Fetch", + write: "Write", + edit: "Edit", + multiedit: "Multi Edit", + question: "Question", + skill: "Skill", + read_skill: "Read Skill", + task: "Task", + todowrite: "Todo Write", + todos: "Todos", + websearch: "Web Search", + navigate_page: "Navigate Page", + open_browser_page: "Open Browser Page", + read_page: "Read Page", + run_playwright_code: "Run Playwright Code", + screenshot_page: "Screenshot Page", + task_complete: "Task Complete", + "pdf-utilities.pdf": "PDF Utilities: PDF" + }; + + // src/webview/usage/main.ts + var vscode = acquireVsCodeApi(); + var initialData = window.__INITIAL_USAGE__; + var hygieneMatrixState = null; + var repoAnalysisState = /* @__PURE__ */ new Map(); + var selectedRepoPath = null; + var isSwitchingRepository = false; + var isBatchAnalysisInProgress = false; + var currentWorkspacePaths = []; + function escapeHtml(text) { + return text.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); + } + var TOOL_NAME_MAP = toolNames_default || null; + function lookupToolName(id) { + if (!TOOL_NAME_MAP) { + return id; + } + return TOOL_NAME_MAP[id] || id; + } + function lookupMcpToolName(id) { + const full = lookupToolName(id); + const colonIdx = full.indexOf(":"); + if (colonIdx !== -1) { + return full.substring(colonIdx + 1).trim(); + } + return full; + } + function getUnknownMcpTools(stats) { + const allTools = /* @__PURE__ */ new Set(); + Object.entries(stats.today.mcpTools.byTool).forEach(([tool]) => allTools.add(tool)); + Object.entries(stats.last30Days.mcpTools.byTool).forEach(([tool]) => allTools.add(tool)); + Object.entries(stats.month.mcpTools.byTool).forEach(([tool]) => allTools.add(tool)); + Object.entries(stats.today.toolCalls.byTool).forEach(([tool]) => allTools.add(tool)); + Object.entries(stats.last30Days.toolCalls.byTool).forEach(([tool]) => allTools.add(tool)); + Object.entries(stats.month.toolCalls.byTool).forEach(([tool]) => allTools.add(tool)); + return Array.from(allTools).filter((tool) => lookupToolName(tool) === tool).sort(); + } + function createMcpToolIssueUrl(unknownTools) { + const repoUrl = "https://github.com/rajbos/github-copilot-token-usage"; + const title = encodeURIComponent("Add missing friendly names for tools"); + const toolList = unknownTools.map((tool) => `- \`${tool}\``).join("\n"); + const body = encodeURIComponent( + `## Unknown Tools Found + +The following tools were detected but don't have friendly display names: + +${toolList} + +Please add friendly names for these tools to improve the user experience.` + ); + const labels = encodeURIComponent("MCP Toolnames"); + return `${repoUrl}/issues/new?title=${title}&body=${body}&labels=${labels}`; + } + function renderMissedPotential(stats) { + const missed = stats.missedPotential || window.__INITIAL_USAGE__?.missedPotential || []; + if (missed.length === 0) { + return ` +
+
+ \u2705 No other AI tool configs missing a Copilot counterpart +
+
+ All active workspaces that contain instruction files for other AI tools (e.g. .cursorrules, CLAUDE.md, AGENTS.md) also have Copilot customization files configured. +
+
+ A workspace appears here when it has instruction files for other AI tools but no Copilot customization files \u2014 indicating Copilot may be under-configured compared to other tools. Learn how to add Copilot instructions. +
+
+ `; + } + return ` +
+
+ \u26A0\uFE0F Missed Potential: Non-Copilot Instruction Files +
+
+ These active workspaces use other AI tools but lack Copilot customizations. Learn how to add Copilot instructions. +
+
+ + + + + + + + + + + ${missed.map((ws) => ` + + + + + + + `).join("")} + +
\u{1F4C2} WorkspaceSessionsInteractionsNon-Copilot Files Found
+ ${escapeHtml(ws.workspaceName)} + + ${formatNumber(ws.sessionCount)} + + ${formatNumber(ws.interactionCount)} + +
+ ${ws.nonCopilotFiles.map((f) => ` +
+ ${f.icon || "\u{1F4C4}"} + ${escapeHtml(f.label || "")}: + ${escapeHtml(f.relativePath)} +
+ `).join("")} +
+
+
+
+ `; + } + function renderToolsTable(byTool, limit2 = 10, nameResolver = lookupToolName) { + const sortedTools = Object.entries(byTool).sort(([, a], [, b]) => b - a).slice(0, limit2); + if (sortedTools.length === 0) { + return '
No tools used yet
'; + } + const rows = sortedTools.map(([tool, count], idx) => { + const friendly = escapeHtml(nameResolver(tool)); + const idEscaped = escapeHtml(tool); + return ` + + ${idx + 1} + ${friendly} + ${formatNumber(count)} + `; + }).join(""); + return ` + + + + + + + + + + ${rows} + +
#ToolCalls
`; + } + function sanitizeStats(raw) { + if (!raw || typeof raw !== "object") { + return null; + } + const coerceNumber = (value) => { + const n = Number(value); + return Number.isFinite(n) ? n : 0; + }; + const sanitizeModeUsage = (mode) => ({ + ask: coerceNumber(mode?.ask), + edit: coerceNumber(mode?.edit), + agent: coerceNumber(mode?.agent), + plan: coerceNumber(mode?.plan), + customAgent: coerceNumber(mode?.customAgent) + }); + const sanitizeContextRefs = (refs) => ({ + file: coerceNumber(refs?.file), + selection: coerceNumber(refs?.selection), + implicitSelection: coerceNumber(refs?.implicitSelection), + symbol: coerceNumber(refs?.symbol), + codebase: coerceNumber(refs?.codebase), + workspace: coerceNumber(refs?.workspace), + terminal: coerceNumber(refs?.terminal), + vscode: coerceNumber(refs?.vscode), + terminalLastCommand: coerceNumber(refs?.terminalLastCommand), + terminalSelection: coerceNumber(refs?.terminalSelection), + clipboard: coerceNumber(refs?.clipboard), + changes: coerceNumber(refs?.changes), + outputPanel: coerceNumber(refs?.outputPanel), + problemsPanel: coerceNumber(refs?.problemsPanel), + byKind: refs?.byKind ?? {}, + copilotInstructions: coerceNumber(refs?.copilotInstructions), + agentsMd: coerceNumber(refs?.agentsMd), + byPath: refs?.byPath ?? {} + }); + const sanitizePeriod = (period) => ({ + sessions: coerceNumber(period?.sessions), + modeUsage: sanitizeModeUsage(period?.modeUsage ?? {}), + contextReferences: sanitizeContextRefs(period?.contextReferences ?? {}), + toolCalls: { + total: coerceNumber(period?.toolCalls?.total), + byTool: period?.toolCalls?.byTool ?? {} + }, + mcpTools: { + total: coerceNumber(period?.mcpTools?.total), + byServer: period?.mcpTools?.byServer ?? {}, + byTool: period?.mcpTools?.byTool ?? {} + }, + modelSwitching: period?.modelSwitching ?? { + modelsPerSession: [], + totalSessions: 0, + averageModelsPerSession: 0, + maxModelsPerSession: 0, + minModelsPerSession: 0, + switchingFrequency: 0, + standardModels: [], + premiumModels: [], + unknownModels: [], + mixedTierSessions: 0, + standardRequests: 0, + premiumRequests: 0, + unknownRequests: 0, + totalRequests: 0 + } + }); + try { + const sanitized = { + today: sanitizePeriod(raw.today), + last30Days: sanitizePeriod(raw.last30Days), + month: sanitizePeriod(raw.month), + lastUpdated: typeof raw.lastUpdated === "string" ? raw.lastUpdated : "", + backendConfigured: !!raw.backendConfigured + }; + return sanitized; + } catch { + return null; + } + } + function renderLayout(stats) { + const root = document.getElementById("root"); + if (!root) { + return; + } + const matrix = stats?.customizationMatrix ?? window.__INITIAL_USAGE__?.customizationMatrix; + hygieneMatrixState = matrix ?? null; + if (!hygieneMatrixState || hygieneMatrixState.workspaces.length === 0) { + selectedRepoPath = null; + } + if (Array.isArray(stats.currentWorkspacePaths)) { + currentWorkspacePaths = stats.currentWorkspacePaths; + } + let customizationHtml = ""; + if (!matrix || !matrix.workspaces || matrix.workspaces.length === 0) { + customizationHtml = ` +
+
\u{1F6E0}\uFE0FCopilot Customization Files
+
Showing workspace customization status for active workspaces
+
No workspaces with customization files detected in the last 30 days.
+
`; + } else { + customizationHtml = ` +
+
+ \u{1F6E0}\uFE0F Copilot Customization Files +
+
+ Showing ${matrix.totalWorkspaces} workspace(s) with Copilot activity in the last 30 days. + ${matrix.workspacesWithIssues > 0 ? `\u26A0\uFE0F ${matrix.workspacesWithIssues} workspace(s) have no customization files.` : "\u2705 All workspaces have up-to-date customizations."} +
+
+ + + + + + ${matrix.customizationTypes.map((type) => ` + + `).join("")} + + + + ${matrix.workspaces.map((ws) => { + const hasNoCustomization = Object.values(ws.typeStatuses).every((s) => s === "\u274C"); + return ` + + + + ${matrix.customizationTypes.map((type) => { + const status = ws.typeStatuses[type.id] || "\u2753"; + const statusLabel = status === "\u2705" ? "Present and fresh" : status === "\u26A0\uFE0F" ? "Present but stale" : status === "\u274C" ? "Missing" : "Status unknown"; + return ` + + `; + }).join("")} + + `; + }).join("")} + +
\u{1F4C2} WorkspaceSessions + ${escapeHtml(type.icon)} +
+ ${escapeHtml(ws.workspaceName)}${hasNoCustomization ? ' \u26A0\uFE0F' : ""} + + ${ws.sessionCount} + + + ${statusLabel} +
+
+
+
+ ${matrix.customizationTypes.map((type) => ` + ${escapeHtml(type.icon)} ${escapeHtml(type.label)} + `).join("")} +
+
+ \u2705 = Present & Fresh  \u2022  \u26A0\uFE0F = Present but Stale  \u2022  \u274C = Missing +
+
+
`; + } + const todayTotalRefs = getTotalContextRefs(stats.today.contextReferences); + const last30DaysTotalRefs = getTotalContextRefs(stats.last30Days.contextReferences); + const todayTotalModes = stats.today.modeUsage.ask + stats.today.modeUsage.edit + stats.today.modeUsage.agent + stats.today.modeUsage.plan + stats.today.modeUsage.customAgent; + const last30DaysTotalModes = stats.last30Days.modeUsage.ask + stats.last30Days.modeUsage.edit + stats.last30Days.modeUsage.agent + stats.last30Days.modeUsage.plan + stats.last30Days.modeUsage.customAgent; + root.innerHTML = ` + + +
+
+
+ \u{1F4CA} + Usage Analysis +
+
+ ${buttonHtml("btn-refresh")} + ${buttonHtml("btn-details")} + ${buttonHtml("btn-chart")} + ${buttonHtml("btn-environmental")} + ${buttonHtml("btn-diagnostics")} + ${buttonHtml("btn-maturity")} + ${stats.backendConfigured ? buttonHtml("btn-dashboard") : ""} +
+
+ +
+
\u{1F4CB} About This Dashboard
+
+ This dashboard analyzes your GitHub Copilot usage patterns by examining session log files. + It tracks modes (ask/edit/agent), tool usage, context references (#file, @workspace, etc.), + and MCP (Model Context Protocol) tools to help you understand how you interact with Copilot. +
+
+ + +
+
\u{1F3AF}Interaction Modes
+
How you're using Copilot: Ask (chat), Edit (code edits), or Agent (autonomous tasks)
+
+
+

\u{1F4C5} Today

+
+
+
\u{1F4AC} Ask Mode${formatNumber(stats.today.modeUsage.ask)} (${formatPercent(todayTotalModes > 0 ? stats.today.modeUsage.ask / todayTotalModes * 100 : 0, 0)})
+
+
+
+
\u270F\uFE0F Edit Mode${formatNumber(stats.today.modeUsage.edit)} (${formatPercent(todayTotalModes > 0 ? stats.today.modeUsage.edit / todayTotalModes * 100 : 0, 0)})
+
+
+
+
\u{1F916} Agent Mode${formatNumber(stats.today.modeUsage.agent)} (${formatPercent(todayTotalModes > 0 ? stats.today.modeUsage.agent / todayTotalModes * 100 : 0, 0)})
+
+
+
\u{1F4CB} Plan Mode${formatNumber(stats.today.modeUsage.plan)} (${formatPercent(todayTotalModes > 0 ? stats.today.modeUsage.plan / todayTotalModes * 100 : 0, 0)})
+
+
+
+
\u26A1 Custom Agent${formatNumber(stats.today.modeUsage.customAgent)} (${formatPercent(todayTotalModes > 0 ? stats.today.modeUsage.customAgent / todayTotalModes * 100 : 0, 0)})
+
+
+
+
+

\u{1F4CA} Last 30 Days

+
+
+
\u{1F4AC} Ask Mode${formatNumber(stats.last30Days.modeUsage.ask)} (${formatPercent(last30DaysTotalModes > 0 ? stats.last30Days.modeUsage.ask / last30DaysTotalModes * 100 : 0, 0)})
+
+
+
+
\u270F\uFE0F Edit Mode${formatNumber(stats.last30Days.modeUsage.edit)} (${formatPercent(last30DaysTotalModes > 0 ? stats.last30Days.modeUsage.edit / last30DaysTotalModes * 100 : 0, 0)})
+
+
+
+
\u{1F916} Agent Mode${formatNumber(stats.last30Days.modeUsage.agent)} (${formatPercent(last30DaysTotalModes > 0 ? stats.last30Days.modeUsage.agent / last30DaysTotalModes * 100 : 0, 0)})
+
+
+
\u{1F4CB} Plan Mode${formatNumber(stats.last30Days.modeUsage.plan)} (${formatPercent(last30DaysTotalModes > 0 ? stats.last30Days.modeUsage.plan / last30DaysTotalModes * 100 : 0, 0)})
+
+
+
+
\u26A1 Custom Agent${formatNumber(stats.last30Days.modeUsage.customAgent)} (${formatPercent(last30DaysTotalModes > 0 ? stats.last30Days.modeUsage.customAgent / last30DaysTotalModes * 100 : 0, 0)})
+
+
+
+
+
+ + +
+
\u{1F517}Context References
+
How often you reference files, selections, symbols, and workspace context
+
+
\u{1F4C4} #file
${stats.last30Days.contextReferences.file}
Today: ${stats.today.contextReferences.file}
+
\u2702\uFE0F #selection
${stats.last30Days.contextReferences.selection}
Today: ${stats.today.contextReferences.selection}
+
\u2728 Implicit Selection
${stats.last30Days.contextReferences.implicitSelection}
Today: ${stats.today.contextReferences.implicitSelection}
+
\u{1F524} #symbol
${stats.last30Days.contextReferences.symbol}
Today: ${stats.today.contextReferences.symbol}
+
\u{1F5C2}\uFE0F #codebase
${stats.last30Days.contextReferences.codebase}
Today: ${stats.today.contextReferences.codebase}
+
\u{1F4C1} @workspace
${stats.last30Days.contextReferences.workspace}
Today: ${stats.today.contextReferences.workspace}
+
\u{1F4BB} @terminal
${stats.last30Days.contextReferences.terminal}
Today: ${stats.today.contextReferences.terminal}
+
\u{1F527} @vscode
${stats.last30Days.contextReferences.vscode}
Today: ${stats.today.contextReferences.vscode}
+
\u2328\uFE0F #terminalLastCommand
${stats.last30Days.contextReferences.terminalLastCommand || 0}
Today: ${stats.today.contextReferences.terminalLastCommand || 0}
+
\u{1F5B1}\uFE0F #terminalSelection
${stats.last30Days.contextReferences.terminalSelection || 0}
Today: ${stats.today.contextReferences.terminalSelection || 0}
+
\u{1F4CB} #clipboard
${stats.last30Days.contextReferences.clipboard || 0}
Today: ${stats.today.contextReferences.clipboard || 0}
+
\u{1F4DD} #changes
${stats.last30Days.contextReferences.changes || 0}
Today: ${stats.today.contextReferences.changes || 0}
+
\u{1F4E4} #outputPanel
${stats.last30Days.contextReferences.outputPanel || 0}
Today: ${stats.today.contextReferences.outputPanel || 0}
+
\u26A0\uFE0F #problemsPanel
${stats.last30Days.contextReferences.problemsPanel || 0}
Today: ${stats.today.contextReferences.problemsPanel || 0}
+
\u{1F4CB} Copilot Instructions
${stats.last30Days.contextReferences.copilotInstructions}
Today: ${stats.today.contextReferences.copilotInstructions}
+
\u{1F916} Agents.md
${stats.last30Days.contextReferences.agentsMd}
Today: ${stats.today.contextReferences.agentsMd}
+
\u{1F4CA} Total References
${last30DaysTotalRefs}
Today: ${todayTotalRefs}
+
+ ${Object.keys(stats.last30Days.contextReferences.byKind).length > 0 ? ` +
+
\u{1F4CE} Attached Files by Type (Last 30 Days)
+
+ ${Object.entries(stats.last30Days.contextReferences.byKind).sort(([, a], [, b]) => b - a).slice(0, 5).map(([kind, count]) => `
${escapeHtml(kind)}: ${count}
`).join("")} +
+
+ ` : ""} + ${Object.keys(stats.last30Days.contextReferences.byPath).length > 0 ? ` +
+
\u{1F4C1} Most Referenced Files (Last 30 Days)
+
+ ${Object.entries(stats.last30Days.contextReferences.byPath).sort(([, a], [, b]) => b - a).slice(0, 10).map(([path, count]) => `
${count}\xD7 ${escapeHtml(path)}
`).join("")} +
+
+ ` : ""} +
+ + ${customizationHtml} + ${renderMissedPotential(stats)} + + +
+
+ \u{1F3D7}\uFE0F Repository Hygiene Analysis +
+
+ Analyze repository hygiene and structure to identify missing configuration files and best practices. +
+ ${matrix && matrix.workspaces && matrix.workspaces.length > 0 ? ` +
+ Analyze All Repositories (${matrix.workspaces.length}) +
+
+
\u{1F4C1} Repository List
+
+
+
+
\u{1F4CA} Repository Details
+
+
+ ` : ` + Analyze Repo for Best Practices +
+ `} +
+ + +
+
\u{1F527}Tool Usage
+
Functions and tools invoked by Copilot during interactions
+
+
+

\u{1F4C5} Today

+
+
Total Tool Calls: ${formatNumber(stats.today.toolCalls.total)}
+ ${renderToolsTable(stats.today.toolCalls.byTool, 10)} +
+
+
+

\u{1F4C6} Last 30 Days

+
+
Total Tool Calls: ${formatNumber(stats.last30Days.toolCalls.total)}
+ ${renderToolsTable(stats.last30Days.toolCalls.byTool, 10)} +
+
+
+

\u{1F4C5} Previous Month

+
+
Total Tool Calls: ${formatNumber(stats.month.toolCalls.total)}
+ ${renderToolsTable(stats.month.toolCalls.byTool, 10)} +
+
+
+
+ + +
+
\u{1F50C}MCP Tools
+
Model Context Protocol (MCP) server and tool usage
+ ${(() => { + const unknownTools = getUnknownMcpTools(stats); + if (unknownTools.length > 0) { + const issueUrl = createMcpToolIssueUrl(unknownTools); + const toolListHtml = unknownTools.map((tool) => { + const todayCount = (stats.today.toolCalls.byTool[tool] || 0) + (stats.today.mcpTools.byTool[tool] || 0); + const last30Count = (stats.last30Days.toolCalls.byTool[tool] || 0) + (stats.last30Days.mcpTools.byTool[tool] || 0); + const monthCount = (stats.month.toolCalls.byTool[tool] || 0) + (stats.month.mcpTools.byTool[tool] || 0); + const countParts = []; + if (todayCount > 0) { + countParts.push(`${todayCount} today`); + } + if (last30Count > todayCount) { + countParts.push(`${last30Count} in the last 30d`); + } + if (monthCount > last30Count) { + countParts.push(`${monthCount} this month`); + } + const countHtml = countParts.length > 0 ? ` (${countParts.join(" | ")})` : ""; + return `${escapeHtml(tool)}${countHtml}`; + }).join(" "); + return ` +
+
+ Found ${unknownTools.length} tool${unknownTools.length > 1 ? "s" : ""} without friendly names \u2014 might not be included in the top-10 tables above +
+
+ ${toolListHtml} +
+ + \u{1F4DD} + Report Unknown Tools + +
+ `; + } + return ""; + })()} +
+
+

\u{1F4C5} Today

+
+
Total MCP Calls: ${formatNumber(stats.today.mcpTools.total)}
+ ${stats.today.mcpTools.total > 0 ? ` +
By Server:
${renderToolsTable(stats.today.mcpTools.byServer, 8)}
+ ` : '
No MCP tools used yet
'} +
+
+
+

\u{1F4C6} Last 30 Days

+
+
Total MCP Calls: ${formatNumber(stats.last30Days.mcpTools.total)}
+ ${stats.last30Days.mcpTools.total > 0 ? ` +
By Server:
${renderToolsTable(stats.last30Days.mcpTools.byServer, 8)}
+ ` : '
No MCP tools used yet
'} +
+
+
+

\u{1F4C5} Previous Month

+
+
Total MCP Calls: ${formatNumber(stats.month.mcpTools.total)}
+ ${stats.month.mcpTools.total > 0 ? ` +
By Server:
${renderToolsTable(stats.month.mcpTools.byServer, 8)}
+ ` : '
No MCP tools used yet
'} +
+
+
+
+
+ ${stats.today.mcpTools.total > 0 ? ` +
+
By Tool:
${renderToolsTable(stats.today.mcpTools.byTool, 8, lookupMcpToolName)}
+
+ ` : ""} +
+
+ ${stats.last30Days.mcpTools.total > 0 ? ` +
+
By Tool:
${renderToolsTable(stats.last30Days.mcpTools.byTool, 8, lookupMcpToolName)}
+
+ ` : ""} +
+
+ ${stats.month.mcpTools.total > 0 ? ` +
+
By Tool:
${renderToolsTable(stats.month.mcpTools.byTool, 8, lookupMcpToolName)}
+
+ ` : ""} +
+
+
+ + +
+
\u{1F500}Multi-Model Usage
+
Track model diversity and switching patterns in your conversations
+
+
+

\u{1F4C5} Today

+
+
+
\u{1F4CA} Avg Models per Conversation
+
${formatFixed(stats.today.modelSwitching.averageModelsPerSession, 1)}
+
+
+
\u{1F504} Switching Frequency
+
${formatPercent(stats.today.modelSwitching.switchingFrequency, 0)}
+
Sessions with >1 model
+
+
+
\u{1F4C8} Max Models in Session
+
${formatNumber(stats.today.modelSwitching.maxModelsPerSession || 0)}
+
+
+
+
Models by Tier:
+
+ ${stats.today.modelSwitching.standardModels.length > 0 ? ` +
+ \u{1F535} Standard: + ${stats.today.modelSwitching.standardModels.map(escapeHtml).join(", ")} +
+ ` : '
'} + ${stats.today.modelSwitching.premiumModels.length > 0 ? ` +
+ \u2B50 Premium: + ${stats.today.modelSwitching.premiumModels.map(escapeHtml).join(", ")} +
+ ` : '
'} + ${stats.today.modelSwitching.unknownModels.length > 0 ? ` +
+ \u2753 Unknown: + ${stats.today.modelSwitching.unknownModels.map(escapeHtml).join(", ")} +
+ ` : ""} +
+ ${stats.today.modelSwitching.totalRequests > 0 ? ` +
+
Request Count:
+ ${stats.today.modelSwitching.standardRequests > 0 ? ` +
+ \u{1F535} Standard: + ${formatNumber(stats.today.modelSwitching.standardRequests)} (${formatPercent(stats.today.modelSwitching.standardRequests / stats.today.modelSwitching.totalRequests * 100)}) +
+ ` : ""} + ${stats.today.modelSwitching.premiumRequests > 0 ? ` +
+ \u2B50 Premium: + ${formatNumber(stats.today.modelSwitching.premiumRequests)} (${formatPercent(stats.today.modelSwitching.premiumRequests / stats.today.modelSwitching.totalRequests * 100)}) +
+ ` : ""} + ${stats.today.modelSwitching.unknownRequests > 0 ? ` +
+ \u2753 Unknown: + ${formatNumber(stats.today.modelSwitching.unknownRequests)} (${formatPercent(stats.today.modelSwitching.unknownRequests / stats.today.modelSwitching.totalRequests * 100)}) +
+ ` : ""} +
+ ` : ""} + ${stats.today.modelSwitching.mixedTierSessions > 0 ? ` +
+ \u{1F500} Mixed tier sessions: ${formatNumber(stats.today.modelSwitching.mixedTierSessions)} +
+ ` : ""} +
+
+
+

\u{1F4C6} Last 30 Days

+
+
+
\u{1F4CA} Avg Models per Conversation
+
${formatFixed(stats.last30Days.modelSwitching.averageModelsPerSession, 1)}
+
+
+
\u{1F504} Switching Frequency
+
${formatPercent(stats.last30Days.modelSwitching.switchingFrequency, 0)}
+
Sessions with >1 model
+
+
+
\u{1F4C8} Max Models in Session
+
${formatNumber(stats.last30Days.modelSwitching.maxModelsPerSession || 0)}
+
+
+
+
Models by Tier:
+
+ ${stats.last30Days.modelSwitching.standardModels.length > 0 ? ` +
+ \u{1F535} Standard: + ${stats.last30Days.modelSwitching.standardModels.map(escapeHtml).join(", ")} +
+ ` : '
'} + ${stats.last30Days.modelSwitching.premiumModels.length > 0 ? ` +
+ \u2B50 Premium: + ${stats.last30Days.modelSwitching.premiumModels.map(escapeHtml).join(", ")} +
+ ` : '
'} + ${stats.last30Days.modelSwitching.unknownModels.length > 0 ? ` +
+ \u2753 Unknown: + ${stats.last30Days.modelSwitching.unknownModels.map(escapeHtml).join(", ")} +
+ ` : ""} +
+ ${stats.last30Days.modelSwitching.totalRequests > 0 ? ` +
+
Request Count:
+ ${stats.last30Days.modelSwitching.standardRequests > 0 ? ` +
+ \u{1F535} Standard: + ${formatNumber(stats.last30Days.modelSwitching.standardRequests)} (${formatPercent(stats.last30Days.modelSwitching.standardRequests / stats.last30Days.modelSwitching.totalRequests * 100)}) +
+ ` : ""} + ${stats.last30Days.modelSwitching.premiumRequests > 0 ? ` +
+ \u2B50 Premium: + ${formatNumber(stats.last30Days.modelSwitching.premiumRequests)} (${formatPercent(stats.last30Days.modelSwitching.premiumRequests / stats.last30Days.modelSwitching.totalRequests * 100)}) +
+ ` : ""} + ${stats.last30Days.modelSwitching.unknownRequests > 0 ? ` +
+ \u2753 Unknown: + ${formatNumber(stats.last30Days.modelSwitching.unknownRequests)} (${formatPercent(stats.last30Days.modelSwitching.unknownRequests / stats.last30Days.modelSwitching.totalRequests * 100)}) +
+ ` : ""} +
+ ` : ""} + ${stats.last30Days.modelSwitching.mixedTierSessions > 0 ? ` +
+ \u{1F500} Mixed tier sessions: ${formatNumber(stats.last30Days.modelSwitching.mixedTierSessions)} +
+ ` : ""} +
+
+
+

\u{1F4C5} Previous Month

+
+
+
\u{1F4CA} Avg Models per Conversation
+
${formatFixed(stats.month.modelSwitching.averageModelsPerSession, 1)}
+
+
+
\u{1F504} Switching Frequency
+
${formatPercent(stats.month.modelSwitching.switchingFrequency, 0)}
+
Sessions with >1 model
+
+
+
\u{1F4C8} Max Models in Session
+
${formatNumber(stats.month.modelSwitching.maxModelsPerSession || 0)}
+
+
+
+
Models by Tier:
+
+ ${stats.month.modelSwitching.standardModels.length > 0 ? ` +
+ \u{1F535} Standard: + ${stats.month.modelSwitching.standardModels.map(escapeHtml).join(", ")} +
+ ` : '
'} + ${stats.month.modelSwitching.premiumModels.length > 0 ? ` +
+ \u2B50 Premium: + ${stats.month.modelSwitching.premiumModels.map(escapeHtml).join(", ")} +
+ ` : '
'} + ${stats.month.modelSwitching.unknownModels.length > 0 ? ` +
+ \u2753 Unknown: + ${stats.month.modelSwitching.unknownModels.map(escapeHtml).join(", ")} +
+ ` : ""} +
+ ${stats.month.modelSwitching.totalRequests > 0 ? ` +
+
Request Count:
+ ${stats.month.modelSwitching.standardRequests > 0 ? ` +
+ \u{1F535} Standard: + ${formatNumber(stats.month.modelSwitching.standardRequests)} (${formatPercent(stats.month.modelSwitching.standardRequests / stats.month.modelSwitching.totalRequests * 100)}) +
+ ` : ""} + ${stats.month.modelSwitching.premiumRequests > 0 ? ` +
+ \u2B50 Premium: + ${formatNumber(stats.month.modelSwitching.premiumRequests)} (${formatPercent(stats.month.modelSwitching.premiumRequests / stats.month.modelSwitching.totalRequests * 100)}) +
+ ` : ""} + ${stats.month.modelSwitching.unknownRequests > 0 ? ` +
+ \u2753 Unknown: + ${formatNumber(stats.month.modelSwitching.unknownRequests)} (${formatPercent(stats.month.modelSwitching.unknownRequests / stats.month.modelSwitching.totalRequests * 100)}) +
+ ` : ""} +
+ ` : ""} + ${stats.month.modelSwitching.mixedTierSessions > 0 ? ` +
+ \u{1F500} Mixed tier sessions: ${formatNumber(stats.month.modelSwitching.mixedTierSessions)} +
+ ` : ""} +
+
+
+
+ + +
+
\u{1F4C8}Sessions Summary
+
+
\u{1F4C5} Today Sessions
${formatNumber(stats.today.sessions)}
+
\u{1F4C6} Last 30 Days Sessions
${formatNumber(stats.last30Days.sessions)}
+
\u{1F4C5} Previous Month Sessions
${formatNumber(stats.month.sessions)}
+
+
+ + +
+ `; + document.getElementById("btn-refresh")?.addEventListener("click", () => { + vscode.postMessage({ command: "refresh" }); + }); + document.getElementById("btn-details")?.addEventListener("click", () => { + vscode.postMessage({ command: "showDetails" }); + }); + document.getElementById("btn-chart")?.addEventListener("click", () => { + vscode.postMessage({ command: "showChart" }); + }); + document.getElementById("btn-diagnostics")?.addEventListener("click", () => { + vscode.postMessage({ command: "showDiagnostics" }); + }); + document.getElementById("btn-maturity")?.addEventListener("click", () => { + vscode.postMessage({ command: "showMaturity" }); + }); + document.getElementById("btn-dashboard")?.addEventListener("click", () => { + vscode.postMessage({ command: "showDashboard" }); + }); + document.getElementById("btn-environmental")?.addEventListener("click", () => { + vscode.postMessage({ command: "showEnvironmental" }); + }); + document.getElementById("btn-analyse-repo")?.addEventListener("click", () => { + const btn = document.getElementById("btn-analyse-repo"); + if (btn) { + btn.disabled = true; + btn.textContent = "Analyzing..."; + } + vscode.postMessage({ command: "analyseRepository" }); + }); + document.getElementById("btn-analyse-all")?.addEventListener("click", () => { + const btn = document.getElementById("btn-analyse-all"); + if (btn) { + btn.disabled = true; + btn.textContent = "Analyzing All..."; + } + isBatchAnalysisInProgress = true; + isSwitchingRepository = true; + selectedRepoPath = null; + renderRepositoryHygienePanels(); + vscode.postMessage({ command: "analyseAllRepositories" }); + }); + document.getElementById("repo-list-pane")?.addEventListener("click", (e) => { + const target = e.target; + const actionButton = target.closest(".btn-repo-action"); + if (!actionButton) { + return; + } + const workspacePath = actionButton.getAttribute("data-workspace-path"); + const action = actionButton.getAttribute("data-action"); + if (!workspacePath || !action) { + return; + } + if (action === "details") { + selectedRepoPath = workspacePath; + isSwitchingRepository = false; + renderRepositoryHygienePanels(); + return; + } + if (action === "analyze") { + actionButton.disabled = true; + actionButton.textContent = "Analyzing..."; + isBatchAnalysisInProgress = false; + vscode.postMessage({ command: "analyseRepository", workspacePath }); + } + }); + document.getElementById("repo-details-pane")?.addEventListener("click", (e) => { + const target = e.target; + if (target.closest("#btn-switch-repository")) { + isSwitchingRepository = true; + renderRepositoryHygienePanels(); + } + }); + renderRepositoryHygienePanels(); + Array.from(document.getElementsByClassName("cf-copy")).forEach((el2) => { + el2.addEventListener("click", (ev) => { + const target = ev.currentTarget; + const path = target.getAttribute("data-path") || ""; + if (navigator.clipboard && path) { + navigator.clipboard.writeText(path).then(() => { + target.textContent = "Copied"; + setTimeout(() => { + target.textContent = "Copy"; + }, 1200); + }).catch(() => { + vscode.postMessage({ command: "copyFailed", path }); + }); + } + }); + }); + } + window.addEventListener("message", (event) => { + const message = event.data; + switch (message.command) { + case "repoAnalysisResults": + displayRepoAnalysisResults(message.data, message.workspacePath); + break; + case "repoAnalysisError": + displayRepoAnalysisError(message.error, message.workspacePath); + break; + case "repoAnalysisBatchComplete": + handleBatchAnalysisComplete(); + break; + case "updateStats": + if (message.data?.locale) { + setFormatLocale(message.data.locale); + } + { + const sanitized = sanitizeStats(message.data); + if (sanitized) { + renderLayout(sanitized); + renderRepositoryHygienePanels(); + } + } + break; + case "highlightUnknownTools": { + const el2 = document.getElementById("unknown-mcp-tools-section"); + if (el2) { + el2.scrollIntoView({ behavior: "smooth", block: "center" }); + el2.style.transition = "box-shadow 0.3s ease"; + el2.style.boxShadow = "0 0 0 3px var(--vscode-focusBorder)"; + setTimeout(() => { + el2.style.boxShadow = ""; + }, 2e3); + } + break; + } + } + }); + function getWorkspaceName(workspacePath) { + const workspace = hygieneMatrixState?.workspaces.find((ws) => ws.workspacePath === workspacePath); + return workspace?.workspaceName || workspacePath; + } + function getScoreLabel(workspacePath) { + const record = repoAnalysisState.get(workspacePath); + if (record?.data?.summary) { + const percentage = toFiniteNumber(record.data.summary.percentage); + return `${Math.round(percentage)}%`; + } + if (record?.error) { + return "Error"; + } + return "\u2014"; + } + function toFiniteNumber(value) { + const numeric = typeof value === "number" ? value : Number(value); + return Number.isFinite(numeric) ? numeric : 0; + } + function buildRepoAnalysisBodyElement(data, workspacePath) { + const summary = data?.summary || {}; + const checks = Array.isArray(data?.checks) ? data.checks : []; + const recommendations = Array.isArray(data?.recommendations) ? [...data.recommendations] : []; + const docsLinks = { + "git-repo": "https://docs.github.com/en/get-started/using-git/about-git", + "gitignore": "https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files", + "env-example": "https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions", + "editorconfig": "https://editorconfig.org/", + "linter": "https://docs.github.com/en/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning", + "formatter": "https://docs.github.com/en/contributing/style-guide-and-content-model/style-guide", + "type-safety": "https://docs.github.com/en/code-security/code-scanning/reference/code-ql-built-in-queries/javascript-typescript-built-in-queries", + "commit-messages": "https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits", + "conventional-commits": "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets", + "ci-config": "https://docs.github.com/en/actions/about-github-actions/understanding-github-actions", + "scripts": "https://docs.github.com/en/actions/tutorials/build-and-test-code/nodejs", + "task-runner": "https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/add-scripts", + "devcontainer": "https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration", + "dockerfile": "https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry", + "version-pinning": "https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-nodejs-project-for-codespaces", + "license": "https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository" + }; + const container = el("div"); + const header = el("div"); + header.setAttribute("style", "display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;"); + const title = el("div"); + title.setAttribute("style", "font-size: 14px; font-weight: 600; color: var(--text-primary);"); + title.textContent = "\u{1F4CA} Repository Hygiene Score"; + const score = el("div"); + score.setAttribute("style", "font-size: 24px; font-weight: 700; color: var(--link-color);"); + score.textContent = `${Math.round(toFiniteNumber(summary.percentage))}%`; + header.append(title, score); + container.appendChild(header); + const statsGrid = el("div"); + statsGrid.setAttribute("style", "display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 12px;"); + const statCards = [ + { + count: summary.passedChecks, + label: "Passed", + cardStyle: "text-align: center; padding: 8px; background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 4px;", + countStyle: "font-size: 18px; font-weight: 600; color: var(--success-fg);" + }, + { + count: summary.warningChecks, + label: "Warnings", + cardStyle: "text-align: center; padding: 8px; background: rgba(245, 158, 11, 0.1); border: 1px solid rgba(245, 158, 11, 0.3); border-radius: 4px;", + countStyle: "font-size: 18px; font-weight: 600; color: var(--warning-fg);" + }, + { + count: summary.failedChecks, + label: "Failed", + cardStyle: "text-align: center; padding: 8px; background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); border-radius: 4px;", + countStyle: "font-size: 18px; font-weight: 600; color: #ef4444;" + } + ]; + for (const statCard of statCards) { + const card = el("div"); + card.setAttribute("style", statCard.cardStyle); + const count = el("div"); + count.setAttribute("style", statCard.countStyle); + count.textContent = String(toFiniteNumber(statCard.count)); + const label = el("div"); + label.setAttribute("style", "font-size: 10px; color: var(--text-secondary);"); + label.textContent = statCard.label; + card.append(count, label); + statsGrid.appendChild(card); + } + container.appendChild(statsGrid); + const scoreSummary = el("div"); + scoreSummary.setAttribute("style", "font-size: 11px; color: var(--text-muted); text-align: center; margin-bottom: 16px;"); + scoreSummary.textContent = `Score: ${toFiniteNumber(summary.totalScore)} / ${toFiniteNumber(summary.maxScore)} points`; + container.appendChild(scoreSummary); + const priorityOrder = { high: 1, medium: 2, low: 3 }; + recommendations.sort((a, b) => (priorityOrder[a?.priority] || 99) - (priorityOrder[b?.priority] || 99)); + const categories = {}; + for (const check of checks) { + const categoryId = typeof check?.category === "string" && check.category.length > 0 ? check.category : "other"; + if (!categories[categoryId]) { + categories[categoryId] = []; + } + categories[categoryId].push(check); + } + const categoryLabels = { + versionControl: "\u{1F504} Version Control", + codeQuality: "\u2728 Code Quality", + cicd: "\u{1F680} CI/CD", + environment: "\u{1F527} Environment", + documentation: "\u{1F4DA} Documentation" + }; + for (const [categoryId, categoryChecks] of Object.entries(categories)) { + const section = el("div"); + section.setAttribute("style", "margin-bottom: 12px; background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: 4px; overflow: hidden;"); + const sectionHeader = el("div"); + sectionHeader.setAttribute("style", "padding: 8px 12px; background: var(--list-hover-bg); border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center;"); + const categoryName = el("span"); + categoryName.setAttribute("style", "font-size: 12px; font-weight: 600; color: var(--text-primary);"); + categoryName.textContent = categoryLabels[categoryId] || categoryId; + const categorySummary = summary?.categories?.[categoryId]; + const categoryPct = el("span"); + categoryPct.setAttribute("style", "font-size: 11px; color: var(--link-color); font-weight: 600;"); + categoryPct.textContent = `${Math.round(toFiniteNumber(categorySummary?.percentage))}%`; + sectionHeader.append(categoryName, categoryPct); + section.appendChild(sectionHeader); + for (const check of categoryChecks) { + const status = check?.status === "pass" || check?.status === "warning" ? check.status : "fail"; + const statusIcon = status === "pass" ? "\u2705" : status === "warning" ? "\u26A0\uFE0F" : "\u274C"; + const statusColor = status === "pass" ? "#22c55e" : status === "warning" ? "#f59e0b" : "#ef4444"; + const checkRow = el("div"); + checkRow.setAttribute("style", "padding: 8px; border-bottom: 1px solid var(--border-subtle); display: flex; align-items: flex-start; gap: 8px;"); + const icon = el("span"); + icon.setAttribute("style", "font-size: 16px;"); + icon.textContent = statusIcon; + const content = el("div"); + content.setAttribute("style", "flex: 1;"); + const checkLabel = el("div"); + checkLabel.setAttribute("style", `font-size: 12px; font-weight: 600; color: ${statusColor};`); + checkLabel.textContent = typeof check?.label === "string" ? check.label : ""; + const checkDetail = el("div"); + checkDetail.setAttribute("style", "font-size: 11px; color: var(--text-secondary); margin-top: 2px;"); + checkDetail.textContent = typeof check?.detail === "string" ? check.detail : ""; + content.append(checkLabel, checkDetail); + if (typeof check?.hint === "string" && check.hint.length > 0) { + const hint = el("div"); + hint.setAttribute("style", "font-size: 10px; color: var(--link-color); margin-top: 4px; font-style: italic;"); + hint.textContent = `\u{1F4A1} ${check.hint}`; + content.appendChild(hint); + } + const checkId = typeof check?.id === "string" ? check.id : ""; + const docUrl = docsLinks[checkId]; + if (docUrl) { + const docLink = el("a"); + docLink.setAttribute("href", docUrl); + docLink.setAttribute("style", "font-size: 10px; color: var(--link-color); margin-top: 4px; display: inline-block;"); + docLink.setAttribute("title", "View official documentation"); + docLink.textContent = "\u{1F4D6} View documentation"; + content.appendChild(docLink); + } + const weight = el("span"); + weight.setAttribute("style", "font-size: 10px; color: var(--text-muted); min-width: 30px; text-align: right;"); + weight.textContent = `+${toFiniteNumber(check?.weight)}`; + checkRow.append(icon, content, weight); + section.appendChild(checkRow); + } + container.appendChild(section); + } + if (recommendations.length > 0) { + const recommendationsSection = el("div"); + recommendationsSection.setAttribute("style", "margin-top: 16px; background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: 4px; overflow: hidden;"); + const recommendationsHeader = el("div"); + recommendationsHeader.setAttribute("style", "padding: 8px 12px; background: var(--list-hover-bg); border-bottom: 1px solid var(--border-color);"); + const recommendationsTitle = el("span"); + recommendationsTitle.setAttribute("style", "font-size: 12px; font-weight: 600; color: var(--text-primary);"); + recommendationsTitle.textContent = "\u{1F4A1} Top Recommendations"; + recommendationsHeader.appendChild(recommendationsTitle); + recommendationsSection.appendChild(recommendationsHeader); + for (const recommendation of recommendations.slice(0, 5)) { + const priority = recommendation?.priority === "high" || recommendation?.priority === "medium" ? recommendation.priority : "low"; + const priorityColor = priority === "high" ? "#ef4444" : priority === "medium" ? "#f59e0b" : "#60a5fa"; + const row = el("div"); + row.setAttribute("style", "padding: 8px; border-bottom: 1px solid var(--border-subtle); display: flex; gap: 8px;"); + const priorityLabel = el("span"); + priorityLabel.setAttribute("style", `font-size: 10px; font-weight: 600; color: ${priorityColor}; min-width: 50px;`); + priorityLabel.textContent = String(priority).toUpperCase(); + const content = el("div"); + content.setAttribute("style", "flex: 1;"); + const action = el("div"); + action.setAttribute("style", "font-size: 11px; color: var(--text-primary);"); + action.textContent = typeof recommendation?.action === "string" ? recommendation.action : ""; + const impact = el("div"); + impact.setAttribute("style", "font-size: 10px; color: var(--text-muted); margin-top: 2px;"); + impact.textContent = typeof recommendation?.impact === "string" ? recommendation.impact : ""; + content.append(action, impact); + const weight = el("span"); + weight.setAttribute("style", "font-size: 10px; color: var(--text-muted); min-width: 30px; text-align: right;"); + weight.textContent = `+${toFiniteNumber(recommendation?.weight)}`; + row.append(priorityLabel, content, weight); + recommendationsSection.appendChild(row); + } + container.appendChild(recommendationsSection); + } + const failedChecks = checks.filter((c) => c?.status === "fail" || c?.status === "warning"); + if (failedChecks.length > 0) { + const copilotSection = el("div"); + copilotSection.setAttribute("style", "margin-top: 16px; padding: 12px; background: rgba(96, 165, 250, 0.07); border: 1px solid rgba(96, 165, 250, 0.3); border-radius: 4px; display: flex; align-items: center; justify-content: space-between; gap: 12px;"); + const copilotText = el("div"); + copilotText.setAttribute("style", "font-size: 11px; color: var(--text-secondary); flex: 1;"); + copilotText.textContent = "Let Copilot help you fix the identified issues in this repository."; + const copilotBtn = document.createElement("vscode-button"); + copilotBtn.setAttribute("style", "min-width: 180px;"); + copilotBtn.textContent = "\u{1F916} Ask Copilot to Improve"; + copilotBtn.addEventListener("click", () => { + const failedLines = failedChecks.map((c) => `- ${c.label}: ${c.detail || ""}${c.hint ? ` (${c.hint})` : ""}`).join("\n"); + const prompt = `Please help me improve this repository by addressing the following best practice issues: + +${failedLines} + +For each issue, please provide specific steps or code changes to fix it.`; + const isRepoOpen = !workspacePath || currentWorkspacePaths.some( + (p) => p.toLowerCase() === workspacePath.toLowerCase() + ); + if (isRepoOpen) { + vscode.postMessage({ command: "openCopilotChatWithPrompt", prompt }); + } else { + const repoFolderName = workspacePath.split(/[/\\]/).filter(Boolean).pop() ?? workspacePath; + copilotSection.replaceChildren(); + copilotSection.setAttribute("style", "margin-top: 16px; padding: 12px; background: rgba(251, 191, 36, 0.07); border: 1px solid rgba(251, 191, 36, 0.4); border-radius: 4px; display: flex; flex-direction: column; gap: 8px;"); + const instructions = el("div"); + instructions.setAttribute("style", "font-size: 11px; color: var(--warning-fg);"); + instructions.textContent = `\u26A0\uFE0F Open "${repoFolderName}" in VS Code first, then paste this prompt into Copilot Chat:`; + const promptBox = el("pre"); + promptBox.setAttribute("style", "font-size: 10px; color: var(--text-secondary); background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: 4px; padding: 8px; white-space: pre-wrap; word-break: break-word; max-height: 120px; overflow-y: auto; font-family: monospace; margin: 0;"); + promptBox.textContent = prompt; + const copyBtn = document.createElement("vscode-button"); + copyBtn.setAttribute("appearance", "secondary"); + copyBtn.textContent = "\u{1F4CB} Copy prompt"; + copyBtn.addEventListener("click", () => { + navigator.clipboard.writeText(prompt).then(() => { + copyBtn.textContent = "\u2705 Copied!"; + setTimeout(() => { + copyBtn.textContent = "\u{1F4CB} Copy prompt"; + }, 2e3); + }); + }); + copilotSection.append(instructions, promptBox, copyBtn); + } + }); + copilotSection.append(copilotText, copilotBtn); + container.appendChild(copilotSection); + } + return container; + } + function renderRepositoryHygienePanels() { + const listPane = document.getElementById("repo-list-pane"); + const listContainer = document.getElementById("repo-list-pane-container"); + const detailsPane = document.getElementById("repo-details-pane"); + const detailsContainer = document.getElementById("repo-details-pane-container"); + if (!listPane || !listContainer || !detailsPane || !detailsContainer || !hygieneMatrixState) { + return; + } + const hasSelectedRepository = !!selectedRepoPath && !isSwitchingRepository; + const visibleWorkspaces = hasSelectedRepository ? hygieneMatrixState.workspaces.filter((ws) => ws.workspacePath === selectedRepoPath) : hygieneMatrixState.workspaces; + listContainer.classList.remove("repo-hygiene-pane-collapsed"); + detailsContainer.classList.toggle("repo-hygiene-pane-collapsed", !hasSelectedRepository); + listPane.innerHTML = visibleWorkspaces.map((ws, idx) => { + const record2 = repoAnalysisState.get(ws.workspacePath); + const hasResult = !!record2?.data?.summary; + const scoreLabel = getScoreLabel(ws.workspacePath); + const buttonLabel = hasResult ? "Details" : "Analyze"; + const buttonAction = hasResult ? "details" : "analyze"; + const isCurrentSelection = selectedRepoPath === ws.workspacePath && hasSelectedRepository; + return ` +
+
+
+ ${escapeHtml(ws.workspaceName)} +
+
+ ${Number(ws.sessionCount) || 0} ${ws.sessionCount === 1 ? "session" : "sessions"} \xB7 ${Number(ws.interactionCount) || 0} ${ws.interactionCount === 1 ? "interaction" : "interactions"} \xB7 Score: ${escapeHtml(scoreLabel)} +
+
+ + ${buttonLabel} + +
+ `; + }).join(""); + if (!hasSelectedRepository || !selectedRepoPath) { + detailsPane.replaceChildren(); + return; + } + const workspaceName = getWorkspaceName(selectedRepoPath); + const record = repoAnalysisState.get(selectedRepoPath); + if (record?.data) { + detailsPane.replaceChildren(); + const card = el("div", "repo-details-card"); + card.setAttribute("style", "padding: 12px; background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: 6px;"); + const header = el("div", "repo-details-card-header"); + header.setAttribute("style", "display: flex; justify-content: space-between; align-items: center; gap: 8px; margin-bottom: 10px;"); + const label = el("div"); + label.setAttribute("style", "font-size: 12px; color: var(--text-secondary);"); + label.textContent = "Repository: "; + const repoName = el("span"); + repoName.setAttribute("style", "color: var(--text-primary); font-weight: 600; font-family: 'Courier New', monospace;"); + repoName.textContent = workspaceName; + label.appendChild(repoName); + const switchButton = document.createElement("vscode-button"); + switchButton.id = "btn-switch-repository"; + switchButton.setAttribute("style", "min-width: 120px;"); + switchButton.textContent = "Switch Repository"; + header.append(label, switchButton); + card.append(header, buildRepoAnalysisBodyElement(record.data, selectedRepoPath ?? void 0)); + detailsPane.appendChild(card); + return; + } + if (record?.error) { + detailsPane.innerHTML = ` +
+
+
Repository: ${escapeHtml(workspaceName)}
+ Switch Repository +
+
\u274C Analysis Failed
+
${escapeHtml(record.error)}
+
+ `; + return; + } + detailsPane.innerHTML = ` +
+
+
Repository: ${escapeHtml(workspaceName)}
+ Switch Repository +
+
No analysis data yet. Click Analyze in the list.
+
+ `; + } + function displayRepoAnalysisResults(data, workspacePath) { + if (workspacePath) { + repoAnalysisState.set(workspacePath, { data, error: void 0 }); + if (!isBatchAnalysisInProgress) { + selectedRepoPath = workspacePath; + isSwitchingRepository = false; + } + renderRepositoryHygienePanels(); + return; + } + const btn = document.getElementById("btn-analyse-repo"); + if (btn) { + btn.disabled = false; + btn.textContent = "Analyze Repo for Best Practices"; + } + const resultsHost = document.getElementById("repo-analysis-results"); + if (resultsHost) { + resultsHost.replaceChildren(); + const card = el("div", "repo-analysis-card"); + card.setAttribute("style", "padding: 12px; background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: 6px; margin-bottom: 12px;"); + card.appendChild(buildRepoAnalysisBodyElement(data, workspacePath)); + resultsHost.appendChild(card); + } + } + function displayRepoAnalysisError(error, workspacePath) { + if (workspacePath) { + repoAnalysisState.set(workspacePath, { data: void 0, error }); + if (!isBatchAnalysisInProgress) { + selectedRepoPath = workspacePath; + isSwitchingRepository = false; + } + renderRepositoryHygienePanels(); + return; + } + const btn = document.getElementById("btn-analyse-repo"); + if (btn) { + btn.disabled = false; + btn.textContent = "Analyze Repo for Best Practices"; + } + const resultsHost = document.getElementById("repo-analysis-results"); + if (resultsHost) { + resultsHost.innerHTML = ` +
+
\u274C Analysis Failed
+
${escapeHtml(error)}
+
+ `; + } + } + function handleBatchAnalysisComplete() { + isBatchAnalysisInProgress = false; + isSwitchingRepository = true; + selectedRepoPath = null; + renderRepositoryHygienePanels(); + const btn = document.getElementById("btn-analyse-all"); + if (btn) { + btn.disabled = false; + const matrix = initialData?.customizationMatrix; + const count = matrix?.workspaces?.length || 0; + btn.textContent = `Analyze All Repositories (${count})`; + } + } + async function bootstrap() { + const { provideVSCodeDesignSystem: provideVSCodeDesignSystem2, vsCodeButton: vsCodeButton2 } = await Promise.resolve().then(() => (init_dist3(), dist_exports)); + provideVSCodeDesignSystem2().register(vsCodeButton2()); + if (!initialData) { + const root = document.getElementById("root"); + if (root) { + root.textContent = "No data available."; + } + return; + } + console.log("[Usage Analysis] Browser default locale:", Intl.DateTimeFormat().resolvedOptions().locale); + console.log("[Usage Analysis] Received locale from extension:", initialData.locale); + console.log("[Usage Analysis] Test format 1234567.89 with received locale:", new Intl.NumberFormat(initialData.locale).format(123456789e-2)); + setFormatLocale(initialData.locale); + renderLayout(initialData); + } + void bootstrap(); +})(); +/*! Bundled license information: + +tslib/tslib.es6.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) + +tabbable/dist/index.esm.js: + (*! + * tabbable 5.3.3 + * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE + *) +*/ +//# sourceMappingURL=usage.js.map diff --git a/visualstudio-extension/src/CopilotTokenTrackerRunner/CopilotTokenTrackerRunner.csproj b/visualstudio-extension/src/CopilotTokenTrackerRunner/CopilotTokenTrackerRunner.csproj new file mode 100644 index 00000000..1dbcdd83 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTrackerRunner/CopilotTokenTrackerRunner.csproj @@ -0,0 +1,16 @@ + + + + Exe + net472 + latest + enable + CopilotTokenTrackerRunner + CopilotTokenTrackerRunner + + + + + + + diff --git a/visualstudio-extension/src/CopilotTokenTrackerRunner/Program.cs b/visualstudio-extension/src/CopilotTokenTrackerRunner/Program.cs new file mode 100644 index 00000000..d1096d67 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTrackerRunner/Program.cs @@ -0,0 +1,17 @@ +using System; + +namespace CopilotTokenTrackerRunner +{ + internal static class Program + { + private static int Main(string[] args) + { + Console.WriteLine( + "CopilotTokenTracker is a Visual Studio extension (VSIX)." + Environment.NewLine + + "Build the solution, then run/debug the extension via Visual Studio experimental instance." + Environment.NewLine + + "This runner project exists only so the solution can be started without errors."); + + return 0; + } + } +} From 1aa9250ac7ce5838f4d0031d4e27a7b3b9b8207f Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Tue, 24 Mar 2026 23:00:24 +0100 Subject: [PATCH 06/15] First working draft of the exteion --- visualstudio-extension/DEBUGGING-GUIDE.md | 101 +++++++++++++ .../CopilotTokenTracker.csproj.dtbcache.json | 1 + .../Commands/ShowTokenTrackerCommand.cs | 9 ++ .../Commands/ToolbarInfoCommand.cs | 135 ++++++++++++++++++ .../CopilotTokenTracker.csproj | 15 +- .../CopilotTokenTrackerPackage.cs | 32 ++++- .../CopilotTokenTrackerPackage.vsct | 44 +++++- .../Data/SessionDiscovery.cs | 22 ++- .../CopilotTokenTracker/Data/StatsBuilder.cs | 84 +++++++---- .../Utilities/OutputLogger.cs | 87 +++++++++++ .../source.extension.vsixmanifest | 7 + 11 files changed, 484 insertions(+), 53 deletions(-) create mode 100644 visualstudio-extension/DEBUGGING-GUIDE.md create mode 100644 visualstudio-extension/src/CopilotTokenTracker/.vs/CopilotTokenTracker.csproj.dtbcache.json create mode 100644 visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs create mode 100644 visualstudio-extension/src/CopilotTokenTracker/Utilities/OutputLogger.cs diff --git a/visualstudio-extension/DEBUGGING-GUIDE.md b/visualstudio-extension/DEBUGGING-GUIDE.md new file mode 100644 index 00000000..13305474 --- /dev/null +++ b/visualstudio-extension/DEBUGGING-GUIDE.md @@ -0,0 +1,101 @@ +# Debugging the Extension - Zero Token Count Issue + +## How to View Logs + +1. **Press F5** to start debugging (or use the experimental instance if already running) +2. In the experimental instance: + - Go to **View > Output** (or press `Ctrl+Alt+O`) + - In the dropdown **"Show output from:"**, select **"Copilot Token Tracker"** + +## What the Logs Will Tell You + +When the toolbar shows "0 | 0", check these log entries: + +### 1. Extension Initialization +``` +[HH:mm:ss] === Copilot Token Tracker Extension Starting === +[HH:mm:ss] Package GUID: 6B8CA5B3-1A9F-4C2E-8F3D-7E2A1B4C9D0F +[HH:mm:ss] Initializing commands... +[HH:mm:ss] === Extension Initialized Successfully === +``` +✅ **Good**: Extension loaded properly + +### 2. Session Discovery +``` +[HH:mm:ss] Refreshing token stats... +[HH:mm:ss] Starting stats build... +[HH:mm:ss] Discovering sessions from logs... +[HH:mm:ss] Checking log directory: C:\Users\[username]\AppData\Local\Temp\VSGitHubCopilotLogs +[HH:mm:ss] Found X log files +[HH:mm:ss] Found Y sessions from logs +``` + +**Possible Issues:** +- ❌ **"Log directory not found"**: Visual Studio hasn't created Copilot Chat logs yet +- ❌ **"Found 0 log files"**: No recent Copilot Chat activity +- ❌ **"Found 0 sessions from logs"**: Log files don't contain session paths + +### 3. Filesystem Discovery +``` +[HH:mm:ss] Discovering sessions from filesystem... +[HH:mm:ss] Scanning filesystem starting from home: C:\Users\[username] +[HH:mm:ss] Added scan root: C:\repos +[HH:mm:ss] Added scan root: C:\code +[HH:mm:ss] Found copilot-chat dir: C:\path\to\.vs\solution\copilot-chat +[HH:mm:ss] Found Z session files in: C:\path\to\.vs\solution\copilot-chat\hash\sessions +[HH:mm:ss] Found N additional sessions from filesystem +``` + +**Possible Issues:** +- ❌ **No "Found copilot-chat dir" messages**: No Visual Studio solutions with Copilot Chat usage +- ❌ **"Found 0 session files"**: The sessions directory exists but is empty + +### 4. Stats Aggregation +``` +[HH:mm:ss] Discovered M session files +[HH:mm:ss] Successfully parsed P sessions +[HH:mm:ss] Stats aggregated - Today: 1,234, Last30Days: 45,678 +[HH:mm:ss] Stats updated: Today=1234, Last30Days=45678 +``` + +**Possible Issues:** +- ❌ **"Discovered 0 session files"**: No sessions found anywhere +- ❌ **"Successfully parsed 0 sessions"**: Session files exist but couldn't be parsed (wrong format/corrupted) +- ❌ **"Today: 0, Last30Days: 0"**: Sessions parsed but all are older than 30 days OR token data missing + +## Common Causes of "0 | 0" + +### 1. Never Used Visual Studio Copilot Chat +The extension only tracks **Visual Studio Copilot Chat** sessions, not VS Code or GitHub.com. + +**Solution**: Use Copilot Chat in Visual Studio at least once: +- Open Copilot Chat pane: **View > Copilot Chat** +- Ask a question +- Wait 5 minutes for the extension to refresh stats + +### 2. Session Files in Unexpected Location +The extension looks for session files in: +- Log path: `%LOCALAPPDATA%\Temp\VSGitHubCopilotLogs\*.chat.log` +- Filesystem: `.vs\{solution}\copilot-chat\{hash}\sessions\` + +**Solution**: Check the log output to see what paths it's scanning and compare with where your session files actually are. + +### 3. Old Session Files +If all your Copilot Chat usage is older than 30 days, both "Today" and "Last30Days" will be zero. + +**Solution**: Use Copilot Chat in the current Visual Studio session. + +### 4. Parsing Failures +Session files might exist but fail to parse (format changes, corruption, etc.). + +**Solution**: Look for ERROR messages in the logs about parsing failures. + +## Next Steps + +After reviewing the logs, you'll know: +1. ✅ Are session files being discovered? +2. ✅ Are they being parsed successfully? +3. ✅ Are they within the 30-day window? +4. ✅ Do they contain token usage data? + +Share the relevant log entries and I can help debug further! diff --git a/visualstudio-extension/src/CopilotTokenTracker/.vs/CopilotTokenTracker.csproj.dtbcache.json b/visualstudio-extension/src/CopilotTokenTracker/.vs/CopilotTokenTracker.csproj.dtbcache.json new file mode 100644 index 00000000..a793baef --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/.vs/CopilotTokenTracker.csproj.dtbcache.json @@ -0,0 +1 @@ +{"RootPath":"C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker","ProjectFileName":"CopilotTokenTracker.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"CopilotTokenTrackerPackage.cs"},{"SourceFile":"Commands\\ShowTokenTrackerCommand.cs"},{"SourceFile":"Data\\Models.cs"},{"SourceFile":"Data\\SessionDiscovery.cs"},{"SourceFile":"Data\\SessionParser.cs"},{"SourceFile":"Data\\StatsBuilder.cs"},{"SourceFile":"Data\\TokenEstimator.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"ToolWindow\\TokenTrackerToolWindow.cs"},{"SourceFile":"WebBridge\\ThemedHtmlBuilder.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"ToolWindow\\TokenTrackerControl.xaml.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"},{"SourceFile":"C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\obj\\Debug\\ToolWindow\\TokenTrackerControl.g.cs"}],"References":[{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\envdte\\17.6.36389\\lib\\net472\\envdte.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\envdte100\\17.6.36389\\lib\\net472\\envdte100.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\envdte80\\17.6.36389\\lib\\net472\\envdte80.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\envdte90\\17.6.36389\\lib\\net472\\envdte90.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\envdte90a\\17.6.36389\\lib\\net472\\envdte90a.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\messagepack.annotations\\2.5.187\\lib\\netstandard2.0\\MessagePack.Annotations.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\messagepack\\2.5.187\\lib\\net472\\MessagePack.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\8.0.0\\lib\\net462\\Microsoft.Bcl.AsyncInterfaces.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.build.framework\\17.6.3\\ref\\net472\\Microsoft.Build.Framework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.io.redist\\6.0.0\\lib\\net472\\Microsoft.IO.Redist.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.servicehub.framework\\4.2.102\\lib\\net472\\Microsoft.ServiceHub.Framework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.servicehub.resources\\4.2.8\\lib\\net472\\Microsoft.ServiceHub.Resources.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.commandbars\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.CommandBars.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.componentmodelhost\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.ComponentModelHost.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.composition\\17.6.17\\lib\\net472\\Microsoft.VisualStudio.Composition.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.coreutility\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.CoreUtility.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.debugger.interop.12.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Debugger.Interop.12.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.debugger.interop.14.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Debugger.Interop.14.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.debugger.interop.15.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Debugger.Interop.15.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.debugger.interop.16.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Debugger.Interop.16.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.designer.interfaces\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Designer.Interfaces.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.editor\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Editor.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.graphmodel\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.GraphModel.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.imagecatalog\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.ImageCatalog.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.imaging\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Imaging.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.imaging.interop.14.0.designtime\\17.6.36387\\lib\\net472\\Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.interop\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Interop.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.language\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Language.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.language.intellisense\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Language.Intellisense.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.language.navigateto.interfaces\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.language.standardclassification\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Language.StandardClassification.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.languageserver.client\\17.6.42\\lib\\net472\\Microsoft.VisualStudio.LanguageServer.Client.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.ole.interop\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.OLE.Interop.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.package.languageservice.15.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Package.LanguageService.15.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.projectaggregator\\17.6.36387\\lib\\net472\\Microsoft.VisualStudio.ProjectAggregator.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.remotecontrol\\16.3.52\\lib\\net45\\Microsoft.VisualStudio.RemoteControl.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.rpccontracts\\17.6.13\\lib\\netstandard2.0\\Microsoft.VisualStudio.RpcContracts.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.setup.configuration.interop\\3.6.2115\\lib\\net35\\Microsoft.VisualStudio.Setup.Configuration.Interop.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.15.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.15.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.design\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.Design.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.framework\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.Framework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.10.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.Interop.10.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.11.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.Interop.11.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.12.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.Interop.12.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.8.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.Interop.8.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop.9.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.Interop.9.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.shell.interop\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Shell.Interop.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.taskrunnerexplorer.14.0\\14.0.0\\lib\\net40\\Microsoft.VisualStudio.TaskRunnerExplorer.14.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.telemetry\\17.6.46\\lib\\net45\\Microsoft.VisualStudio.Telemetry.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.text.data\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Text.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.text.logic\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Text.Logic.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.text.ui\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Text.UI.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.text.ui.wpf\\17.6.268\\lib\\net472\\Microsoft.VisualStudio.Text.UI.Wpf.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.10.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.TextManager.Interop.10.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.11.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.TextManager.Interop.11.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.12.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.TextManager.Interop.12.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.8.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.TextManager.Interop.8.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop.9.0\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.TextManager.Interop.9.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.textmanager.interop\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.TextManager.Interop.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.texttemplating.vshost\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.TextTemplating.VSHost.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.threading\\17.6.40\\lib\\net472\\Microsoft.VisualStudio.Threading.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.utilities\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.Utilities.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.validation\\17.6.11\\lib\\netstandard2.0\\Microsoft.VisualStudio.Validation.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.vcprojectengine\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.VCProjectEngine.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.vshelp\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.VSHelp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.vshelp80\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.VSHelp80.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.wcfreference.interop\\17.6.36389\\lib\\net472\\Microsoft.VisualStudio.WCFReference.Interop.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.visualstudio.web.browserlink.12.0\\12.0.0\\lib\\net40\\Microsoft.VisualStudio.Web.BrowserLink.12.0.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.web.webview2\\1.0.2478.35\\lib\\net45\\Microsoft.Web.WebView2.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.web.webview2\\1.0.2478.35\\lib\\net45\\Microsoft.Web.WebView2.WinForms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.web.webview2\\1.0.2478.35\\lib\\net45\\Microsoft.Web.WebView2.Wpf.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Facades\\Microsoft.Win32.Primitives.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\microsoft.win32.registry\\5.0.0\\ref\\net461\\Microsoft.Win32.Registry.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\nerdbank.streams\\2.9.112\\lib\\netstandard2.0\\Nerdbank.Streams.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\newtonsoft.json\\13.0.3\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationFramework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\stdole\\17.6.36389\\lib\\net472\\stdole.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\streamjsonrpc\\2.15.29\\lib\\netstandard2.0\\StreamJsonRpc.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.buffers\\4.5.1\\ref\\net45\\System.Buffers.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.collections.immutable\\7.0.0\\lib\\net462\\System.Collections.Immutable.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.composition.attributedmodel\\7.0.0\\lib\\net462\\System.Composition.AttributedModel.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.composition.convention\\7.0.0\\lib\\net462\\System.Composition.Convention.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.composition.hosting\\7.0.0\\lib\\net462\\System.Composition.Hosting.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.composition.runtime\\7.0.0\\lib\\net462\\System.Composition.Runtime.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.composition.typedparts\\7.0.0\\lib\\net462\\System.Composition.TypedParts.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Design.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.diagnostics.diagnosticsource\\7.0.1\\lib\\net462\\System.Diagnostics.DiagnosticSource.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.IO.Compression.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.IO.Compression.FileSystem.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.io.pipelines\\7.0.0\\lib\\net462\\System.IO.Pipelines.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.memory\\4.5.5\\lib\\net461\\System.Memory.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Numerics.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.numerics.vectors\\4.5.0\\ref\\net46\\System.Numerics.Vectors.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.metadata\\7.0.0\\lib\\net462\\System.Reflection.Metadata.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.typeextensions\\4.7.0\\ref\\net472\\System.Reflection.TypeExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\lib\\net461\\System.Runtime.CompilerServices.Unsafe.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.security.accesscontrol\\6.0.0\\lib\\net461\\System.Security.AccessControl.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.security.principal.windows\\5.0.0\\ref\\net461\\System.Security.Principal.Windows.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.text.encodings.web\\8.0.0\\lib\\net462\\System.Text.Encodings.Web.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.text.json\\8.0.5\\lib\\net462\\System.Text.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.threading.accesscontrol\\7.0.0\\lib\\net462\\System.Threading.AccessControl.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.threading.tasks.dataflow\\7.0.0\\lib\\net462\\System.Threading.Tasks.Dataflow.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\lib\\net461\\System.Threading.Tasks.Extensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\system.valuetuple\\4.5.0\\ref\\net47\\System.ValueTuple.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xaml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj\\17.6.36389\\lib\\net472\\VSLangProj.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj100\\17.6.36389\\lib\\net472\\VSLangProj100.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj110\\17.6.36389\\lib\\net472\\VSLangProj110.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj140\\17.6.36389\\lib\\net472\\VSLangProj140.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj150\\17.6.36389\\lib\\net472\\VSLangProj150.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj157\\17.6.36389\\lib\\net472\\VSLangProj157.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj158\\17.6.36389\\lib\\net472\\VSLangProj158.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj165\\17.6.36389\\lib\\net472\\VSLangProj165.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj2\\17.6.36389\\lib\\net472\\VSLangProj2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj80\\17.6.36389\\lib\\net472\\VSLangProj80.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\RobBos\\.nuget\\packages\\vslangproj90\\17.6.36389\\lib\\net472\\VSLangProj90.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\bin\\Debug\\CopilotTokenTracker.dll","OutputItemRelativePath":"CopilotTokenTracker.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]} \ No newline at end of file diff --git a/visualstudio-extension/src/CopilotTokenTracker/Commands/ShowTokenTrackerCommand.cs b/visualstudio-extension/src/CopilotTokenTracker/Commands/ShowTokenTrackerCommand.cs index 471b865c..47e4d5b8 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Commands/ShowTokenTrackerCommand.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Commands/ShowTokenTrackerCommand.cs @@ -37,6 +37,9 @@ public static async Task InitializeAsync(AsyncPackage package) private void Execute(object sender, EventArgs e) { + ThreadHelper.ThrowIfNotOnUIThread(); + Utilities.OutputLogger.Log("ShowTokenTrackerCommand executed - opening tool window"); + _ = _package.JoinableTaskFactory.RunAsync(async () => { var window = await _package.ShowToolWindowAsync( @@ -47,7 +50,13 @@ private void Execute(object sender, EventArgs e) if (window is ToolWindow.TokenTrackerToolWindow trackerWindow) { + Utilities.OutputLogger.Log("Tool window opened, refreshing data..."); await trackerWindow.RefreshAsync(); + Utilities.OutputLogger.Log("Data refresh completed"); + } + else + { + Utilities.OutputLogger.LogWarning("Tool window opened but type cast failed"); } }); } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs b/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs new file mode 100644 index 00000000..631df14f --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs @@ -0,0 +1,135 @@ +using System; +using System.ComponentModel.Design; +using System.Globalization; +using System.Threading; +using CopilotTokenTracker.Data; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Task = System.Threading.Tasks.Task; + +namespace CopilotTokenTracker.Commands +{ + /// + /// Shows token usage in both the VS status bar (bottom) and the custom toolbar. + /// + /// The status bar text is re-applied every 10 seconds because VS frequently + /// overwrites it with "Ready". Stats are fetched every 5 minutes; the cached + /// text is written to the status bar on the faster cadence. + /// + internal sealed class ToolbarInfoCommand + { + public static readonly Guid CommandSet = new Guid(ShowTokenTrackerCommand.CommandSetGuidString); + public const int CommandId = 0x0200; + + private static readonly TimeSpan StatsRefreshInterval = TimeSpan.FromMinutes(5); + private static readonly TimeSpan StatusBarTickInterval = TimeSpan.FromSeconds(10); + + private readonly AsyncPackage _package; + private readonly OleMenuCommand _menuCommand; + private Timer? _statsTimer; + private Timer? _statusBarTimer; + + /// Cached text written to the status bar on every tick. + private volatile string _statusText = "Copilot: loading\u2026"; + + private ToolbarInfoCommand(AsyncPackage package, OleMenuCommandService commandService) + { + _package = package ?? throw new ArgumentNullException(nameof(package)); + + var id = new CommandID(CommandSet, CommandId); + _menuCommand = new OleMenuCommand(OnClick, id); + commandService.AddCommand(_menuCommand); + + // Fetch stats after a short delay, then every 5 minutes + _statsTimer = new Timer( + _ => _package.JoinableTaskFactory.RunAsync(async () => await RefreshStatsAsync()), + null, + TimeSpan.FromSeconds(3), + StatsRefreshInterval); + + // Re-apply cached text to the status bar every 10 seconds + _statusBarTimer = new Timer( + _ => _package.JoinableTaskFactory.RunAsync(async () => await WriteStatusBarAsync()), + null, + TimeSpan.FromSeconds(5), + StatusBarTickInterval); + } + + public static async Task InitializeAsync(AsyncPackage package) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(package.DisposalToken); + Utilities.OutputLogger.Log("Initializing ToolbarInfoCommand..."); + var svc = await package.GetServiceAsync(typeof(IMenuCommandService)) as OleMenuCommandService + ?? throw new InvalidOperationException("IMenuCommandService unavailable."); + _ = new ToolbarInfoCommand(package, svc); + Utilities.OutputLogger.Log("ToolbarInfoCommand initialized - timers started"); + } + + /// Fetch fresh stats and update both toolbar button and cached status text. + private async Task RefreshStatsAsync() + { + try + { + var stats = await StatsBuilder.BuildAsync(); + var today = FormatTokenCount(stats.Today.Tokens); + var last30 = FormatTokenCount(stats.Last30Days.Tokens); + var text = $"Copilot: {today} | {last30}"; + + _statusText = text; + + await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); + _menuCommand.Text = text; + } + catch + { + _statusText = "Copilot: error"; + try + { + await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); + _menuCommand.Text = _statusText; + } + catch { /* package may be disposed */ } + } + } + + /// Write the cached status text to the VS status bar. + private async Task WriteStatusBarAsync() + { + try + { + await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); + if (await _package.GetServiceAsync(typeof(SVsStatusbar)) is IVsStatusbar statusBar) + { + statusBar.SetText(_statusText); + } + } + catch { /* ignore — VS may be shutting down or package disposed */ } + } + + private static string FormatTokenCount(long tokens) + { + if (tokens >= 1_000_000) + return (tokens / 1_000_000.0).ToString("0.#", CultureInfo.InvariantCulture) + "M"; + if (tokens >= 1_000) + return (tokens / 1_000.0).ToString("0.#", CultureInfo.InvariantCulture) + "K"; + return tokens.ToString("N0", CultureInfo.InvariantCulture); + } + + private void OnClick(object sender, EventArgs e) + { + _ = _package.JoinableTaskFactory.RunAsync(async () => + { + var window = await _package.ShowToolWindowAsync( + typeof(ToolWindow.TokenTrackerToolWindow), + id: 0, + create: true, + cancellationToken: _package.DisposalToken); + + if (window is ToolWindow.TokenTrackerToolWindow trackerWindow) + { + await trackerWindow.RefreshAsync(); + } + }); + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj index 77a4d797..0b5c49d3 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj @@ -47,11 +47,11 @@ prompt 4 - + @@ -63,10 +63,10 @@ Settings.settings + - @@ -77,7 +77,6 @@ TokenTrackerControl.xaml - @@ -88,19 +87,16 @@ Designer - Menus.ctmenu - - @@ -111,7 +107,6 @@ - @@ -121,10 +116,8 @@ - - @@ -150,5 +142,4 @@ PreserveNewest - - + \ No newline at end of file diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs index 38f7228d..15433922 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs @@ -1,6 +1,7 @@ using System; using System.Runtime.InteropServices; using System.Threading; +using Microsoft.VisualStudio; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Task = System.Threading.Tasks.Task; @@ -22,6 +23,7 @@ namespace CopilotTokenTracker Window = ToolWindowGuids80.SolutionExplorer, Orientation = ToolWindowOrientation.Right, Transient = false)] + [ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string, PackageAutoLoadFlags.BackgroundLoad)] [ProvideAutoLoad(UIContextGuids80.SolutionExists, PackageAutoLoadFlags.BackgroundLoad)] public sealed class CopilotTokenTrackerPackage : AsyncPackage { @@ -33,13 +35,31 @@ protected override async Task InitializeAsync( IProgress progress) { await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); - await Commands.ShowTokenTrackerCommand.InitializeAsync(this); - await this.ShowToolWindowAsync( - typeof(ToolWindow.TokenTrackerToolWindow), - id: 0, - create: true, - cancellationToken: cancellationToken); + try + { + // Initialize logging + Utilities.OutputLogger.Initialize(this); + Utilities.OutputLogger.Log("=== Copilot Token Tracker Extension Starting ==="); + Utilities.OutputLogger.Log($"Package GUID: {PackageGuidString}"); + Utilities.OutputLogger.Log($"Visual Studio Version: {this.ApplicationRegistryRoot}"); + + // Initialize commands + Utilities.OutputLogger.Log("Initializing commands..."); + await Commands.ShowTokenTrackerCommand.InitializeAsync(this); + await Commands.ToolbarInfoCommand.InitializeAsync(this); + Utilities.OutputLogger.Log("Commands initialized successfully"); + + Utilities.OutputLogger.Log("=== Extension Initialized Successfully ==="); + + // Don't auto-show the tool window during init — it can crash if + // WebView2 isn't ready yet. Users open it via View > Copilot Token Tracker. + } + catch (Exception ex) + { + Utilities.OutputLogger.LogError("Failed to initialize extension", ex); + throw; + } } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct index 4f7abc2d..614950e9 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct @@ -1,11 +1,8 @@ @@ -15,14 +12,30 @@ + + + + + Copilot Token Tracker + + + + - + + + + + + + + + + @@ -44,8 +71,11 @@ - + + + + diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs index 6fe5911b..2ed09c90 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text.RegularExpressions; namespace CopilotTokenTracker.Data @@ -50,9 +51,18 @@ private static void DiscoverFromLogs(HashSet seen, List results) "AppData", "Local"); var logDir = Path.Combine(localAppData, "Temp", "VSGitHubCopilotLogs"); - if (!Directory.Exists(logDir)) { return; } + Utilities.OutputLogger.Log($"Checking log directory: {logDir}"); - foreach (var logFile in SafeEnumerateFiles(logDir, "*.chat.log")) + if (!Directory.Exists(logDir)) + { + Utilities.OutputLogger.LogWarning($"Log directory not found: {logDir}"); + return; + } + + var logFiles = SafeEnumerateFiles(logDir, "*.chat.log").ToList(); + Utilities.OutputLogger.Log($"Found {logFiles.Count} log files"); + + foreach (var logFile in logFiles) { try { @@ -80,13 +90,19 @@ private static void DiscoverFromFilesystem(HashSet seen, List re var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var roots = new List { home }; + Utilities.OutputLogger.Log($"Scanning filesystem starting from home: {home}"); + // Well-known code root conventions on Windows foreach (var drive in new[] { "C", "D" }) { foreach (var folder in new[] { "repos", "code", "src", "projects", "dev" }) { var p = $"{drive}:\\{folder}"; - if (Directory.Exists(p)) { roots.Add(p); } + if (Directory.Exists(p)) + { + roots.Add(p); + Utilities.OutputLogger.Log($"Added scan root: {p}"); + } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs index d69c1d26..c308abf9 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading.Tasks; @@ -25,30 +26,45 @@ public static Task BuildAsync() private static DetailedStats Build() { - var sessionFiles = SessionDiscovery.DiscoverSessions(); - - // Parse in parallel for speed; null = unreadable / no data - var sessions = sessionFiles - .AsParallel() - .Select(ParseSession) - .Where(s => s != null) - .ToList(); - - var now = DateTime.UtcNow; - var todayStart = now.Date; - var monthStart = new DateTime(now.Year, now.Month, 1, 0, 0, 0, DateTimeKind.Utc); - var lastMonStart = monthStart.AddMonths(-1); - var minus30Days = now.AddDays(-30); + try + { + Utilities.OutputLogger.Log("Starting stats build..."); + var sessionFiles = SessionDiscovery.DiscoverSessions(); + Utilities.OutputLogger.Log($"Discovered {sessionFiles.Count} session files"); + + // Parse in parallel for speed; null = unreadable / no data + var sessions = sessionFiles + .AsParallel() + .Select(ParseSession) + .Where(s => s != null) + .ToList(); + + Utilities.OutputLogger.Log($"Successfully parsed {sessions.Count} sessions"); + + var now = DateTime.UtcNow; + var todayStart = now.Date; + var monthStart = new DateTime(now.Year, now.Month, 1, 0, 0, 0, DateTimeKind.Utc); + var lastMonStart = monthStart.AddMonths(-1); + var minus30Days = now.AddDays(-30); + + var stats = new DetailedStats + { + Today = Aggregate(sessions, todayStart, now), + Month = Aggregate(sessions, monthStart, now), + LastMonth = Aggregate(sessions, lastMonStart, monthStart), + Last30Days = Aggregate(sessions, minus30Days, now), + LastUpdated = now.ToString("o"), + BackendConfigured = false, + }; - return new DetailedStats + Utilities.OutputLogger.Log($"Stats aggregated - Today: {stats.Today.Tokens:N0}, Last30Days: {stats.Last30Days.Tokens:N0}"); + return stats; + } + catch (Exception ex) { - Today = Aggregate(sessions, todayStart, now), - Month = Aggregate(sessions, monthStart, now), - LastMonth = Aggregate(sessions, lastMonStart, monthStart), - Last30Days = Aggregate(sessions, minus30Days, now), - LastUpdated = now.ToString("o"), - BackendConfigured = false, - }; + Utilities.OutputLogger.LogError("Stats build failed", ex); + throw; + } } // ── Session parsing ──────────────────────────────────────────────────── @@ -57,18 +73,33 @@ private static DetailedStats Build() { try { + Utilities.OutputLogger.Log($"Parsing session file: {Path.GetFileName(filePath)}"); + var objects = SessionParser.DecodeSessionFile(filePath); - if (objects.Count == 0) { return null; } + if (objects.Count == 0) + { + Utilities.OutputLogger.LogWarning($"Session file has no objects: {Path.GetFileName(filePath)}"); + return null; + } + + Utilities.OutputLogger.Log($" Decoded {objects.Count} objects from session file"); var (created, _) = SessionParser.GetTimestamps(objects); - if (created == null) { return null; } + if (created == null) + { + Utilities.OutputLogger.LogWarning($" No timestamp found in session file: {Path.GetFileName(filePath)}"); + return null; + } if (!DateTime.TryParse(created, null, System.Globalization.DateTimeStyles.RoundtripKind, out var sessionDate)) { + Utilities.OutputLogger.LogWarning($" Invalid timestamp format '{created}' in session file: {Path.GetFileName(filePath)}"); return null; } + Utilities.OutputLogger.Log($" Session date: {sessionDate:yyyy-MM-dd HH:mm:ss}"); + var modelUsage = new Dictionary(StringComparer.OrdinalIgnoreCase); var totalTokens = 0L; var interactions = 0; @@ -99,6 +130,8 @@ private static DetailedStats Build() : (existing.Input, existing.Output + tokens); } + Utilities.OutputLogger.Log($" ✓ Parsed successfully: {interactions} interactions, {totalTokens:N0} tokens"); + return new ParsedSession { FilePath = filePath, @@ -108,8 +141,9 @@ private static DetailedStats Build() ModelUsage = modelUsage, }; } - catch + catch (Exception ex) { + Utilities.OutputLogger.LogError($" Failed to parse session file: {Path.GetFileName(filePath)}", ex); return null; } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Utilities/OutputLogger.cs b/visualstudio-extension/src/CopilotTokenTracker/Utilities/OutputLogger.cs new file mode 100644 index 00000000..2df333d5 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Utilities/OutputLogger.cs @@ -0,0 +1,87 @@ +using System; +using Microsoft.VisualStudio; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; + +namespace CopilotTokenTracker.Utilities +{ + /// + /// Writes log messages to a custom pane in Visual Studio's Output window. + /// + public static class OutputLogger + { + private static IVsOutputWindowPane? _pane; + private static readonly Guid PaneGuid = new Guid("A1B2C3D4-5E6F-7A8B-9C0D-1E2F3A4B5C6D"); + private const string PaneName = "Copilot Token Tracker"; + + /// + /// Initializes the output pane. Call this during package initialization. + /// + public static void Initialize(IServiceProvider serviceProvider) + { + ThreadHelper.ThrowIfNotOnUIThread(); + + if (_pane != null) return; + + var outputWindow = serviceProvider.GetService(typeof(SVsOutputWindow)) as IVsOutputWindow; + if (outputWindow == null) + { + return; + } + + // Try to get existing pane or create a new one + Guid paneGuid = PaneGuid; + int hr = outputWindow.GetPane(ref paneGuid, out _pane); + if (ErrorHandler.Failed(hr) || _pane == null) + { + paneGuid = PaneGuid; + outputWindow.CreatePane(ref paneGuid, PaneName, fInitVisible: 1, fClearWithSolution: 0); + paneGuid = PaneGuid; + outputWindow.GetPane(ref paneGuid, out _pane); + } + + _pane?.Activate(); + } + + /// + /// Logs an informational message to the output pane. + /// Thread-safe: can be called from any thread. + /// + public static void Log(string message) + { + WriteToPane($"[{DateTime.Now:HH:mm:ss}] {message}"); + } + + /// + /// Logs an error message to the output pane. + /// Thread-safe: can be called from any thread. + /// + public static void LogError(string message, Exception? ex = null) + { + var errorMsg = ex != null ? $"{message}: {ex.Message}" : message; + WriteToPane($"[{DateTime.Now:HH:mm:ss}] ERROR: {errorMsg}"); + } + + /// + /// Logs a warning message to the output pane. + /// Thread-safe: can be called from any thread. + /// + public static void LogWarning(string message) + { + WriteToPane($"[{DateTime.Now:HH:mm:ss}] WARNING: {message}"); + } + + private static void WriteToPane(string message) + { + try + { + // OutputStringThreadSafe is already thread-safe, but we need to ensure _pane is not null + _pane?.OutputStringThreadSafe(message + Environment.NewLine); + } + catch + { + // Silently fail if logging doesn't work - don't break the extension + } + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest b/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest index 5fe7a073..b64b1bc3 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest +++ b/visualstudio-extension/src/CopilotTokenTracker/source.extension.vsixmanifest @@ -18,9 +18,16 @@ + amd64 + + amd64 + + + amd64 + From c7593894e716148d616f9ae7779bdff5871a387a Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Tue, 24 Mar 2026 23:08:45 +0100 Subject: [PATCH 07/15] Add timestamp decoding for MessagePack extension in SessionParser --- .../CopilotTokenTracker/Data/SessionParser.cs | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs index f40dbb10..365a784b 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs @@ -1,4 +1,5 @@ using System; +using System.Buffers; using System.Collections.Generic; using System.IO; using System.Text; @@ -160,6 +161,57 @@ public static string ExtractText(object? contentObj) // ── Low-level MessagePack reader ─────────────────────────────────────── + /// + /// Decodes a MessagePack Timestamp extension (type code -1) into an ISO-8601 string. + /// Handles all three timestamp formats: 32-bit, 64-bit, and 96-bit. + /// + private static string? DecodeTimestamp(ReadOnlySequence data) + { + try + { + long seconds; + uint nanoseconds; + var bytes = data.ToArray(); + + switch (bytes.Length) + { + case 4: // Timestamp32: seconds in uint32 + seconds = ((uint)bytes[0] << 24) | ((uint)bytes[1] << 16) + | ((uint)bytes[2] << 8) | bytes[3]; + nanoseconds = 0; + break; + + case 8: // Timestamp64: upper 30 bits = nanoseconds, lower 34 bits = seconds + ulong val = 0; + for (int i = 0; i < 8; i++) + val = (val << 8) | bytes[i]; + nanoseconds = (uint)(val >> 34); + seconds = (long)(val & 0x3FFFFFFFFUL); + break; + + case 12: // Timestamp96: 4 bytes nanoseconds + 8 bytes signed seconds + nanoseconds = ((uint)bytes[0] << 24) | ((uint)bytes[1] << 16) + | ((uint)bytes[2] << 8) | bytes[3]; + seconds = 0; + for (int i = 4; i < 12; i++) + seconds = (seconds << 8) | bytes[i]; + break; + + default: + return null; + } + + var dt = DateTimeOffset.FromUnixTimeSeconds(seconds) + .AddTicks(nanoseconds / 100) + .UtcDateTime; + return dt.ToString("o"); + } + catch + { + return null; + } + } + private static object? ReadValue(ref MessagePackReader reader) { switch (reader.NextMessagePackType) @@ -213,7 +265,11 @@ public static string ExtractText(object? contentObj) return null; case MessagePackType.Extension: - reader.ReadExtensionFormat(); + var ext = reader.ReadExtensionFormat(); + if (ext.TypeCode == -1) // MessagePack Timestamp + { + return DecodeTimestamp(ext.Data); + } return null; default: From 7fa3f72517243f4d82cd954ab7375dd510d381dc Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Wed, 25 Mar 2026 00:43:58 +0100 Subject: [PATCH 08/15] Toolbar works --- .gitignore | 7 + build.ps1 | 63 +++- cli/bundle-exe.ps1 | 71 +++++ cli/package.json | 1 + cli/sea-config.json | 10 + cli/src/cli.ts | 16 +- cli/src/cliCache.ts | 119 ++++++++ cli/src/commands/stats.ts | 6 +- cli/src/commands/usage.ts | 63 +++- cli/src/helpers.ts | 42 ++- .../Commands/ShowTokenTrackerCommand.cs | 35 ++- .../Commands/ToolbarInfoCommand.cs | 80 ++--- .../CopilotTokenTracker.csproj | 31 +- .../CopilotTokenTrackerPackage.cs | 35 +++ .../CopilotTokenTrackerPackage.vsct | 8 + .../src/CopilotTokenTracker/Data/CliBridge.cs | 138 +++++++++ .../src/CopilotTokenTracker/Data/Models.cs | 12 - .../Data/SessionDiscovery.cs | 177 ----------- .../CopilotTokenTracker/Data/SessionParser.cs | 281 ------------------ .../CopilotTokenTracker/Data/StatsBuilder.cs | 221 +------------- .../Data/TokenEstimator.cs | 63 ---- ...pilotTokenTracker.csproj.nuget.dgspec.json | 4 - .../obj/project.assets.json | 255 +++++++++++----- .../obj/project.nuget.cache | 7 +- 24 files changed, 836 insertions(+), 909 deletions(-) create mode 100644 cli/bundle-exe.ps1 create mode 100644 cli/sea-config.json create mode 100644 cli/src/cliCache.ts create mode 100644 visualstudio-extension/src/CopilotTokenTracker/Data/CliBridge.cs delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs delete mode 100644 visualstudio-extension/src/CopilotTokenTracker/Data/TokenEstimator.cs diff --git a/.gitignore b/.gitignore index f80d7a32..10ba0557 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,10 @@ visualstudio-extension/**/bin/** visualstudio-extension/visualstudio-extension/ visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/MessagePack.Annotations.dll visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Buffers.dll + +# Bundled CLI exe (build artifact copied from cli/dist/) +visualstudio-extension/src/CopilotTokenTracker/cli-bundle/ + +# Node.js SEA build artifacts +cli/dist/sea-prep.blob +cli/dist/copilot-token-tracker.exe diff --git a/build.ps1 b/build.ps1 index 36c4c3f3..0ec3167d 100644 --- a/build.ps1 +++ b/build.ps1 @@ -69,7 +69,7 @@ function Build-Cli { try { switch ($Target) { 'build' { npm ci; npm run build } - 'package' { npm ci; npm run build:production } + 'package' { npm ci; npm run build:production; & pwsh -NoProfile -File bundle-exe.ps1 -SkipBuild } 'test' { Write-Host " (no CLI tests yet)" } 'clean' { Remove-Item -Recurse -Force dist -ErrorAction SilentlyContinue } } @@ -79,7 +79,22 @@ function Build-Cli { } # --------------------------------------------------------------------------- -# Visual Studio Extension (placeholder — C#/.NET not yet scaffolded) +# CLI Bundled Executable (for embedding in Visual Studio extension) +# --------------------------------------------------------------------------- +function Build-CliExe { + Write-Step "cli: bundle-exe" + Push-Location "$PSScriptRoot/cli" + try { + npm ci + & pwsh -NoProfile -File bundle-exe.ps1 + if ($LASTEXITCODE -ne 0) { throw "CLI exe bundling failed" } + Write-Ok "cli exe bundled." + } + finally { Pop-Location } +} + +# --------------------------------------------------------------------------- +# Visual Studio Extension # --------------------------------------------------------------------------- function Build-VisualStudio { Write-Step "visualstudio-extension: $Target" @@ -88,12 +103,48 @@ function Build-VisualStudio { Write-Host " (visualstudio-extension not yet scaffolded – skipping)" -ForegroundColor Yellow return } + + # Ensure the bundled CLI exe exists (needed at runtime by the C# bridge) + $cliExe = Join-Path $PSScriptRoot 'cli' 'dist' 'copilot-token-tracker.exe' + if (-not (Test-Path $cliExe)) { + Write-Host " Bundled CLI exe not found — building it first..." -ForegroundColor Yellow + Build-CliExe + } + + # Copy the CLI exe and its runtime assets into the VS extension project + $vsCliDir = Join-Path $PSScriptRoot 'visualstudio-extension' 'src' 'CopilotTokenTracker' 'cli-bundle' + if (-not (Test-Path $vsCliDir)) { New-Item -ItemType Directory -Path $vsCliDir -Force | Out-Null } + Copy-Item $cliExe (Join-Path $vsCliDir 'copilot-token-tracker.exe') -Force + # sql.js WASM binary is loaded at runtime from the same directory as the exe + $wasmSrc = Join-Path $PSScriptRoot 'cli' 'dist' 'sql-wasm.wasm' + if (Test-Path $wasmSrc) { + Copy-Item $wasmSrc (Join-Path $vsCliDir 'sql-wasm.wasm') -Force + } + Write-Host " Copied CLI exe + sql-wasm.wasm to cli-bundle/" + $sln = $slnFiles[0].FullName + + # VSIX projects require Visual Studio's MSBuild (not dotnet build) because + # the VSSDK build targets depend on VS-specific assemblies. + $msbuild = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" ` + -latest -requires Microsoft.Component.MSBuild ` + -find 'MSBuild\**\Bin\MSBuild.exe' 2>$null | Select-Object -First 1 + + if (-not $msbuild) { + # Fallback: try the well-known VS 18 (2024+) path + $msbuild = "${env:ProgramFiles}\Microsoft Visual Studio\18\Enterprise\MSBuild\Current\Bin\MSBuild.exe" + } + + if (-not (Test-Path $msbuild)) { + Write-Err "MSBuild not found — install the Visual Studio 'VSIX development' workload" + return + } + switch ($Target) { - 'build' { dotnet build $sln --configuration Release } - 'package' { dotnet publish $sln --configuration Release } - 'test' { dotnet test $sln --configuration Release } - 'clean' { dotnet clean $sln } + 'build' { & $msbuild $sln /p:Configuration=Release /t:Build /v:minimal } + 'package' { & $msbuild $sln /p:Configuration=Release /t:Rebuild /v:minimal } + 'test' { Write-Host " (no VS extension tests yet)" } + 'clean' { & $msbuild $sln /p:Configuration=Release /t:Clean /v:minimal } } Write-Ok "visualstudio-extension done." } diff --git a/cli/bundle-exe.ps1 b/cli/bundle-exe.ps1 new file mode 100644 index 00000000..730699d8 --- /dev/null +++ b/cli/bundle-exe.ps1 @@ -0,0 +1,71 @@ +#!/usr/bin/env pwsh +<# +.SYNOPSIS + Bundles the CLI into a single Windows executable using Node.js SEA + (Single Executable Applications). + +.DESCRIPTION + Steps: + 1. Build cli.js via esbuild (production mode) + 2. Generate a SEA preparation blob from the bundle + 3. Copy the current node.exe and inject the blob via postject + Output: cli/dist/copilot-token-tracker.exe +#> +param( + [switch] $SkipBuild # skip the esbuild step (use existing dist/cli.js) +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$cliRoot = $PSScriptRoot +$distDir = Join-Path $cliRoot 'dist' +$seaBlob = Join-Path $distDir 'sea-prep.blob' +$exeName = 'copilot-token-tracker.exe' +$exePath = Join-Path $distDir $exeName + +Write-Host "==> Bundling CLI as single executable" -ForegroundColor Cyan + +# 1. Build with esbuild +if (-not $SkipBuild) { + Write-Host " Building cli.js (production)..." + Push-Location $cliRoot + try { + npm run build:production + if ($LASTEXITCODE -ne 0) { throw "esbuild failed" } + } finally { Pop-Location } +} else { + Write-Host " Skipping esbuild (using existing dist/cli.js)" +} + +if (-not (Test-Path (Join-Path $distDir 'cli.js'))) { + throw "dist/cli.js not found — run esbuild first" +} + +# 2. Generate the SEA preparation blob +Write-Host " Generating SEA blob..." +& node --experimental-sea-config (Join-Path $cliRoot 'sea-config.json') +if ($LASTEXITCODE -ne 0) { throw "SEA blob generation failed" } + +# 3. Copy node.exe and inject the blob +Write-Host " Copying node.exe..." +$nodeExe = (Get-Command node).Source +Copy-Item $nodeExe $exePath -Force + +# Remove the code signature so postject can write to the binary +Write-Host " Removing code signature..." +try { + # signtool is not always available; use PowerShell to strip Authenticode + Set-AuthenticodeSignature -FilePath $exePath -Certificate $null -ErrorAction SilentlyContinue 2>$null +} catch { + # If that didn't work, just continue — postject will handle unsigned binaries fine +} + +Write-Host " Injecting SEA blob with postject..." +& npx --yes postject $exePath NODE_SEA_BLOB $seaBlob ` + --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 +if ($LASTEXITCODE -ne 0) { throw "postject injection failed" } + +# Verify +$fileSize = (Get-Item $exePath).Length / 1MB +Write-Host " ✓ Built: $exePath ($([math]::Round($fileSize, 1)) MB)" -ForegroundColor Green diff --git a/cli/package.json b/cli/package.json index fb5263c4..be457ab7 100644 --- a/cli/package.json +++ b/cli/package.json @@ -25,6 +25,7 @@ "scripts": { "build": "node esbuild.js", "build:production": "node esbuild.js --production", + "bundle-exe": "pwsh -NoProfile -File bundle-exe.ps1", "lint": "eslint src", "check-types": "tsc --noEmit", "test": "node dist/cli.js --help && node dist/cli.js --version" diff --git a/cli/sea-config.json b/cli/sea-config.json new file mode 100644 index 00000000..0739deb6 --- /dev/null +++ b/cli/sea-config.json @@ -0,0 +1,10 @@ +{ + "main": "dist/cli.js", + "output": "dist/sea-prep.blob", + "disableExperimentalSEAWarning": true, + "useSnapshot": false, + "useCodeCache": true, + "assets": { + "sql-wasm.wasm": "dist/sql-wasm.wasm" + } +} diff --git a/cli/src/cli.ts b/cli/src/cli.ts index a947dbca..960fd120 100644 --- a/cli/src/cli.ts +++ b/cli/src/cli.ts @@ -10,6 +10,7 @@ import { usageCommand } from './commands/usage'; import { environmentalCommand } from './commands/environmental'; import { fluencyCommand } from './commands/fluency'; import { diagnosticsCommand } from './commands/diagnostics'; +import { loadCache, saveCache, disableCache } from './helpers'; // eslint-disable-next-line @typescript-eslint/no-require-imports const packageJson = require('../package.json'); @@ -19,7 +20,20 @@ const program = new Command(); program .name('copilot-token-tracker') .description('Analyze GitHub Copilot token usage from local session files') - .version(packageJson.version); + .version(packageJson.version) + .option('--no-cache', 'Bypass the session file cache and re-parse everything'); + +// Initialise / tear-down cache around every sub-command +program.hook('preAction', () => { + if (program.opts().cache === false) { + disableCache(); + } else { + loadCache(); + } +}); +program.hook('postAction', () => { + saveCache(); +}); program.addCommand(statsCommand); program.addCommand(usageCommand); diff --git a/cli/src/cliCache.ts b/cli/src/cliCache.ts new file mode 100644 index 00000000..722ed53a --- /dev/null +++ b/cli/src/cliCache.ts @@ -0,0 +1,119 @@ +/** + * File-based session cache for the CLI. + * Stores parsed SessionData on disk so subsequent runs skip unchanged files. + * + * Cache file: ~/.copilot-token-tracker/cli-cache.json + */ +import * as fs from 'fs'; +import * as path from 'path'; +import * as os from 'os'; +import type { SessionData } from './helpers'; + +/** Bump this when the SessionData shape changes to force a full re-parse. */ +const CACHE_VERSION = 1; + +/** Maximum number of entries to keep in the cache file. */ +const MAX_CACHE_ENTRIES = 2000; + +interface CacheEntry { + /** File modification time (ms since epoch) */ + mtime: number; + /** File size in bytes */ + size: number; + /** Parsed session data (lastModified stored as ISO string) */ + data: Omit & { lastModified: string }; +} + +interface CacheFile { + version: number; + entries: Record; +} + +const CACHE_DIR = path.join(os.homedir(), '.copilot-token-tracker'); +const CACHE_PATH = path.join(CACHE_DIR, 'cli-cache.json'); + +let cache: Map = new Map(); +let cacheEnabled = true; +let dirty = false; + +/** Disable caching (e.g. when --no-cache is passed). */ +export function disableCache(): void { + cacheEnabled = false; + cache.clear(); +} + +/** Load cache from disk. Safe to call multiple times — only loads once. */ +export function loadCache(): void { + if (!cacheEnabled) { return; } + try { + if (!fs.existsSync(CACHE_PATH)) { return; } + const raw = fs.readFileSync(CACHE_PATH, 'utf-8'); + const parsed: CacheFile = JSON.parse(raw); + if (parsed.version !== CACHE_VERSION) { + // Version mismatch — discard stale cache + cache.clear(); + return; + } + cache = new Map(Object.entries(parsed.entries)); + } catch { + // Corrupt / unreadable — start fresh + cache.clear(); + } +} + +/** Save cache to disk (only if entries were added/updated). */ +export function saveCache(): void { + if (!cacheEnabled || !dirty) { return; } + try { + // Prune to MAX_CACHE_ENTRIES, keeping the most recently modified files + if (cache.size > MAX_CACHE_ENTRIES) { + const sorted = [...cache.entries()].sort((a, b) => b[1].mtime - a[1].mtime); + cache = new Map(sorted.slice(0, MAX_CACHE_ENTRIES)); + } + + fs.mkdirSync(CACHE_DIR, { recursive: true }); + const payload: CacheFile = { + version: CACHE_VERSION, + entries: Object.fromEntries(cache), + }; + fs.writeFileSync(CACHE_PATH, JSON.stringify(payload), 'utf-8'); + } catch { + // Best-effort — don't crash the CLI if cache write fails + } +} + +/** + * Look up a cached result for a session file. + * Returns the SessionData if the cache entry matches the file's current mtime and size, + * or null if the file needs to be re-parsed. + */ +export function getCached(filePath: string, mtime: number, size: number): SessionData | null { + if (!cacheEnabled) { return null; } + const entry = cache.get(filePath); + if (!entry) { return null; } + if (entry.mtime !== mtime || entry.size !== size) { return null; } + // Rehydrate the Date + return { + ...entry.data, + lastModified: new Date(entry.data.lastModified), + }; +} + +/** Store a parsed result in the cache. */ +export function setCached(filePath: string, mtime: number, size: number, data: SessionData): void { + if (!cacheEnabled) { return; } + dirty = true; + cache.set(filePath, { + mtime, + size, + data: { + ...data, + lastModified: data.lastModified.toISOString(), + }, + }); +} + +/** Return cache hit/miss stats for display. */ +export function getCacheStats(): { entries: number; enabled: boolean } { + return { entries: cache.size, enabled: cacheEnabled }; +} diff --git a/cli/src/commands/stats.ts b/cli/src/commands/stats.ts index cde69845..245ed8bf 100644 --- a/cli/src/commands/stats.ts +++ b/cli/src/commands/stats.ts @@ -3,7 +3,7 @@ */ import { Command } from 'commander'; import chalk from 'chalk'; -import { discoverSessionFiles, processSessionFile, getDiagnosticPaths, fmt, formatTokens } from '../helpers'; +import { discoverSessionFiles, processSessionFile, getDiagnosticPaths, fmt, formatTokens, getCacheStats } from '../helpers'; export const statsCommand = new Command('stats') .description('Show overview of discovered session files, sessions, chat turns, and tokens') @@ -94,6 +94,10 @@ export const statsCommand = new Command('stats') if (totalThinkingTokens > 0) { console.log(` Thinking tokens (included): ${chalk.dim(formatTokens(totalThinkingTokens))}`); } + const cacheInfo = getCacheStats(); + if (cacheInfo.enabled && cacheInfo.entries > 0) { + console.log(chalk.dim(` Cache: ${fmt(cacheInfo.entries)} entries loaded`)); + } console.log(); // Editor breakdown diff --git a/cli/src/commands/usage.ts b/cli/src/commands/usage.ts index f5c6de1b..c844d2bd 100644 --- a/cli/src/commands/usage.ts +++ b/cli/src/commands/usage.ts @@ -11,25 +11,30 @@ export const usageCommand = new Command('usage') .description('Show token usage for today, current month, last month, and last 30 days') .option('-m, --models', 'Show per-model token breakdown') .option('-c, --cost', 'Show estimated cost breakdown') + .option('--json', 'Output raw JSON (for machine consumption)') .action(async (options) => { - console.log(chalk.bold.cyan('\n📊 Copilot Token Tracker - Usage Report\n')); + const files = await discoverFiles(options); + if (!files) { return; } - process.stdout.write(chalk.dim('Scanning for session files...')); - const files = await discoverSessionFiles(); - process.stdout.write('\r' + ' '.repeat(50) + '\r'); + const stats = await calculateStats(files, options); - if (files.length === 0) { - console.log(chalk.yellow('⚠️ No session files found.')); + if (options.json) { + // Machine-readable output: emit pure JSON to stdout and exit + const payload = { + today: stats.today, + month: stats.month, + lastMonth: stats.lastMonth, + last30Days: stats.last30Days, + lastUpdated: stats.lastUpdated.toISOString(), + backendConfigured: false, + }; + process.stdout.write(JSON.stringify(payload)); return; } - process.stdout.write(chalk.dim('Calculating token usage...')); - const stats = await calculateDetailedStats(files, (completed, total) => { - process.stdout.write(`\r${chalk.dim(`Processing: ${completed}/${total} files`)}`); - }); - process.stdout.write('\r' + ' '.repeat(50) + '\r'); + // Human-readable output + console.log(chalk.bold.cyan('\n📊 Copilot Token Tracker - Usage Report\n')); - // Display each period const periods: { label: string; emoji: string; stats: PeriodStats }[] = [ { label: 'Today', emoji: '📅', stats: stats.today }, { label: 'This Month', emoji: '📆', stats: stats.month }, @@ -44,6 +49,40 @@ export const usageCommand = new Command('usage') console.log(chalk.dim(`Last updated: ${stats.lastUpdated.toLocaleString()}\n`)); }); +/** Discover session files (quiet when --json is set). */ +async function discoverFiles(options: { json?: boolean }) { + if (!options.json) { + process.stdout.write(chalk.dim('Scanning for session files...')); + } + const files = await discoverSessionFiles(); + if (!options.json) { + process.stdout.write('\r' + ' '.repeat(50) + '\r'); + } + if (files.length === 0) { + if (options.json) { + process.stdout.write('{}'); + } else { + console.log(chalk.yellow('⚠️ No session files found.')); + } + return null; + } + return files; +} + +/** Calculate detailed stats (quiet when --json is set). */ +async function calculateStats(files: string[], options: { json?: boolean }) { + if (!options.json) { + process.stdout.write(chalk.dim('Calculating token usage...')); + } + const stats = await calculateDetailedStats(files, options.json ? undefined : (completed, total) => { + process.stdout.write(`\r${chalk.dim(`Processing: ${completed}/${total} files`)}`); + }); + if (!options.json) { + process.stdout.write('\r' + ' '.repeat(50) + '\r'); + } + return stats; +} + function printPeriodStats( label: string, emoji: string, diff --git a/cli/src/helpers.ts b/cli/src/helpers.ts index 75a27320..c89c0b54 100644 --- a/cli/src/helpers.ts +++ b/cli/src/helpers.ts @@ -17,6 +17,7 @@ import type { DetailedStats, PeriodStats, ModelUsage, EditorUsage, SessionFileCa import { analyzeSessionUsage, mergeUsageAnalysis, calculateModelSwitching, trackEnhancedMetrics } from '../../vscode-extension/src/usageAnalysis'; import { createEmptyContextRefs } from '../../vscode-extension/src/tokenEstimation'; import * as vscodeStub from './vscode-stub'; +import { loadCache, saveCache, disableCache, getCached, setCached, getCacheStats } from './cliCache'; // Import JSON data files import tokenEstimatorsData from '../../vscode-extension/src/tokenEstimators.json'; @@ -157,20 +158,28 @@ export async function processSessionFile(filePath: string): Promise { - var window = await _package.ShowToolWindowAsync( - typeof(ToolWindow.TokenTrackerToolWindow), - id: 0, - create: true, - cancellationToken: _package.DisposalToken); - - if (window is ToolWindow.TokenTrackerToolWindow trackerWindow) + try { - Utilities.OutputLogger.Log("Tool window opened, refreshing data..."); - await trackerWindow.RefreshAsync(); - Utilities.OutputLogger.Log("Data refresh completed"); + await _package.ShowToolWindowAsync( + typeof(ToolWindow.TokenTrackerToolWindow), + id: 0, + create: true, + cancellationToken: _package.DisposalToken); + + await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); + var pane = _package.FindToolWindow( + typeof(ToolWindow.TokenTrackerToolWindow), 0, false); + + if (pane is ToolWindow.TokenTrackerToolWindow trackerWindow) + { + Utilities.OutputLogger.Log("Tool window opened, refreshing data..."); + await trackerWindow.RefreshAsync(); + Utilities.OutputLogger.Log("Data refresh completed"); + } + else + { + Utilities.OutputLogger.LogWarning("Tool window pane not found after show"); + } } - else + catch (Exception ex) { - Utilities.OutputLogger.LogWarning("Tool window opened but type cast failed"); + Utilities.OutputLogger.LogError("ShowTokenTrackerCommand failed", ex); } }); } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs b/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs index 631df14f..9bd95931 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs @@ -4,7 +4,6 @@ using System.Threading; using CopilotTokenTracker.Data; using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; using Task = System.Threading.Tasks.Task; namespace CopilotTokenTracker.Commands @@ -22,15 +21,10 @@ internal sealed class ToolbarInfoCommand public const int CommandId = 0x0200; private static readonly TimeSpan StatsRefreshInterval = TimeSpan.FromMinutes(5); - private static readonly TimeSpan StatusBarTickInterval = TimeSpan.FromSeconds(10); private readonly AsyncPackage _package; private readonly OleMenuCommand _menuCommand; private Timer? _statsTimer; - private Timer? _statusBarTimer; - - /// Cached text written to the status bar on every tick. - private volatile string _statusText = "Copilot: loading\u2026"; private ToolbarInfoCommand(AsyncPackage package, OleMenuCommandService commandService) { @@ -38,6 +32,10 @@ private ToolbarInfoCommand(AsyncPackage package, OleMenuCommandService commandSe var id = new CommandID(CommandSet, CommandId); _menuCommand = new OleMenuCommand(OnClick, id); + _menuCommand.BeforeQueryStatus += OnBeforeQueryStatus; + _menuCommand.Enabled = true; + _menuCommand.Visible = true; + _menuCommand.Supported = true; commandService.AddCommand(_menuCommand); // Fetch stats after a short delay, then every 5 minutes @@ -46,13 +44,6 @@ private ToolbarInfoCommand(AsyncPackage package, OleMenuCommandService commandSe null, TimeSpan.FromSeconds(3), StatsRefreshInterval); - - // Re-apply cached text to the status bar every 10 seconds - _statusBarTimer = new Timer( - _ => _package.JoinableTaskFactory.RunAsync(async () => await WriteStatusBarAsync()), - null, - TimeSpan.FromSeconds(5), - StatusBarTickInterval); } public static async Task InitializeAsync(AsyncPackage package) @@ -65,7 +56,7 @@ public static async Task InitializeAsync(AsyncPackage package) Utilities.OutputLogger.Log("ToolbarInfoCommand initialized - timers started"); } - /// Fetch fresh stats and update both toolbar button and cached status text. + /// Fetch fresh stats and update the toolbar button text. private async Task RefreshStatsAsync() { try @@ -75,37 +66,20 @@ private async Task RefreshStatsAsync() var last30 = FormatTokenCount(stats.Last30Days.Tokens); var text = $"Copilot: {today} | {last30}"; - _statusText = text; - await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); _menuCommand.Text = text; } catch { - _statusText = "Copilot: error"; try { await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); - _menuCommand.Text = _statusText; + _menuCommand.Text = "Copilot: error"; } catch { /* package may be disposed */ } } } - /// Write the cached status text to the VS status bar. - private async Task WriteStatusBarAsync() - { - try - { - await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); - if (await _package.GetServiceAsync(typeof(SVsStatusbar)) is IVsStatusbar statusBar) - { - statusBar.SetText(_statusText); - } - } - catch { /* ignore — VS may be shutting down or package disposed */ } - } - private static string FormatTokenCount(long tokens) { if (tokens >= 1_000_000) @@ -115,19 +89,47 @@ private static string FormatTokenCount(long tokens) return tokens.ToString("N0", CultureInfo.InvariantCulture); } + private void OnBeforeQueryStatus(object sender, EventArgs e) + { + if (sender is OleMenuCommand cmd) + { + cmd.Enabled = true; + cmd.Visible = true; + } + } + private void OnClick(object sender, EventArgs e) { _ = _package.JoinableTaskFactory.RunAsync(async () => { - var window = await _package.ShowToolWindowAsync( - typeof(ToolWindow.TokenTrackerToolWindow), - id: 0, - create: true, - cancellationToken: _package.DisposalToken); + try + { + Utilities.OutputLogger.Log("Toolbar click - opening tool window"); + + // ShowToolWindowAsync creates/shows the frame; FindToolWindow returns the pane + await _package.ShowToolWindowAsync( + typeof(ToolWindow.TokenTrackerToolWindow), + id: 0, + create: true, + cancellationToken: _package.DisposalToken); - if (window is ToolWindow.TokenTrackerToolWindow trackerWindow) + await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); + var pane = _package.FindToolWindow( + typeof(ToolWindow.TokenTrackerToolWindow), 0, false); + + if (pane is ToolWindow.TokenTrackerToolWindow trackerWindow) + { + Utilities.OutputLogger.Log("Tool window found, refreshing..."); + await trackerWindow.RefreshAsync(); + } + else + { + Utilities.OutputLogger.LogWarning("Tool window pane not found after show"); + } + } + catch (Exception ex) { - await trackerWindow.RefreshAsync(); + Utilities.OutputLogger.LogError("Toolbar click failed", ex); } }); } diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj index 0b5c49d3..39ad9bd4 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj @@ -53,10 +53,8 @@ - - + - True True @@ -102,6 +100,7 @@ + @@ -112,12 +111,23 @@ - + + + + + + + + + true + cli-bundle\ + PreserveNewest + + + true + cli-bundle\ + PreserveNewest + + \ No newline at end of file diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs index 15433922..159d83a8 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.cs @@ -50,6 +50,10 @@ protected override async Task InitializeAsync( await Commands.ToolbarInfoCommand.InitializeAsync(this); Utilities.OutputLogger.Log("Commands initialized successfully"); + // Force-show our custom toolbar (VS caches visibility state from + // previous sessions; this ensures it always appears). + ShowCustomToolbar(); + Utilities.OutputLogger.Log("=== Extension Initialized Successfully ==="); // Don't auto-show the tool window during init — it can crash if @@ -61,5 +65,36 @@ protected override async Task InitializeAsync( throw; } } + + /// + /// Make the "Copilot Token Tracker" toolbar visible via DTE CommandBars. + /// Uses late-binding (dynamic) to avoid a hard reference on the + /// CommandBars interop assembly. + /// + private void ShowCustomToolbar() + { + try + { + Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread(); + if (GetService(typeof(EnvDTE.DTE)) is EnvDTE80.DTE2 dte) + { + dynamic bars = dte.CommandBars; + dynamic toolbar = bars["Copilot Token Tracker"]; + if (!(bool)toolbar.Visible) + { + toolbar.Visible = true; + Utilities.OutputLogger.Log("Custom toolbar forced visible"); + } + else + { + Utilities.OutputLogger.Log("Custom toolbar already visible"); + } + } + } + catch (Exception ex) + { + Utilities.OutputLogger.LogWarning($"Could not auto-show toolbar: {ex.Message}"); + } + } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct index 614950e9..f9441dec 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct @@ -9,6 +9,7 @@ + @@ -16,6 +17,8 @@ + DefaultDocked + AlwaysCreate Copilot Token Tracker @@ -41,6 +44,8 @@ priority="0x0100" type="Button"> + + IconIsMoniker Copilot Token Tracker View.CopilotTokenTracker @@ -54,7 +59,10 @@ priority="0x0100" type="Button"> + + IconIsMoniker TextChanges + IconAndText Copilot: loading… CopilotTokenTracker.ToolbarInfo diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/CliBridge.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/CliBridge.cs new file mode 100644 index 00000000..2f123ded --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/CliBridge.cs @@ -0,0 +1,138 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text.Json; +using System.Threading.Tasks; + +namespace CopilotTokenTracker.Data +{ + /// + /// Bridges to the bundled CLI executable (copilot-token-tracker.exe) to + /// retrieve token usage stats. This avoids duplicating session discovery, parsing, + /// and aggregation logic that already lives in the shared TypeScript codebase. + /// + /// The CLI exe is a Node.js SEA (Single Executable Application) built from + /// cli/ and copied into cli-bundle/ at build time. + /// + internal static class CliBridge + { + private const string ExeName = "copilot-token-tracker.exe"; + private const int TimeoutMs = 60_000; // 60 seconds — session scanning can be slow + + // ── Public API ───────────────────────────────────────────────────────── + + /// + /// Runs the CLI usage --json command and deserializes the result + /// into a instance. + /// Returns null when the CLI exe is missing or the command fails. + /// + public static async Task GetUsageStatsAsync() + { + var exePath = FindCliExe(); + if (exePath == null) + { + Utilities.OutputLogger.LogWarning("CLI bridge: bundled exe not found — falling back to built-in parser"); + return null; + } + + Utilities.OutputLogger.Log($"CLI bridge: running {exePath} usage --json"); + + var (exitCode, stdout, stderr) = await RunProcessAsync(exePath, "usage --json"); + + if (exitCode != 0) + { + Utilities.OutputLogger.LogWarning($"CLI bridge: exit code {exitCode}"); + if (!string.IsNullOrWhiteSpace(stderr)) + { + Utilities.OutputLogger.LogWarning($"CLI bridge stderr: {stderr}"); + } + return null; + } + + if (string.IsNullOrWhiteSpace(stdout)) + { + Utilities.OutputLogger.LogWarning("CLI bridge: empty stdout"); + return null; + } + + try + { + var options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + }; + var result = JsonSerializer.Deserialize(stdout, options); + if (result != null) + { + Utilities.OutputLogger.Log("CLI bridge: stats deserialized successfully"); + } + return result; + } + catch (JsonException ex) + { + Utilities.OutputLogger.LogError("CLI bridge: JSON parse error", ex); + return null; + } + } + + /// Returns true when the bundled CLI exe is available. + public static bool IsAvailable() => FindCliExe() != null; + + // ── Internals ────────────────────────────────────────────────────────── + + /// + /// Looks for the CLI exe next to this assembly (inside the VSIX install folder) + /// under the cli-bundle/ subfolder. + /// + private static string? FindCliExe() + { + var asmDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + if (asmDir == null) { return null; } + + var candidate = Path.Combine(asmDir, "cli-bundle", ExeName); + return File.Exists(candidate) ? candidate : null; + } + + /// + /// Starts a process, captures stdout and stderr, and waits up to . + /// Uses event-based output reading to avoid the classic ReadToEnd/WaitForExit deadlock. + /// + private static Task<(int ExitCode, string Stdout, string Stderr)> RunProcessAsync( + string fileName, string arguments) + { + return Task.Run(() => + { + var stdoutBuilder = new System.Text.StringBuilder(); + var stderrBuilder = new System.Text.StringBuilder(); + + using var proc = new Process(); + proc.StartInfo = new ProcessStartInfo + { + FileName = fileName, + Arguments = arguments, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true, + }; + + proc.OutputDataReceived += (_, e) => { if (e.Data != null) stdoutBuilder.AppendLine(e.Data); }; + proc.ErrorDataReceived += (_, e) => { if (e.Data != null) stderrBuilder.AppendLine(e.Data); }; + + proc.Start(); + proc.BeginOutputReadLine(); + proc.BeginErrorReadLine(); + + if (!proc.WaitForExit(TimeoutMs)) + { + try { proc.Kill(); } catch { /* best effort */ } + Utilities.OutputLogger.LogWarning($"CLI bridge: process killed after {TimeoutMs / 1000}s timeout"); + return (-1, string.Empty, "Process timed out"); + } + + return (proc.ExitCode, stdoutBuilder.ToString(), stderrBuilder.ToString()); + }); + } + } +} diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs index 7130e414..a9bced0b 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs @@ -91,16 +91,4 @@ internal sealed class EditorStats [JsonPropertyName("sessions")] public int Sessions { get; set; } } - - // ── Internal-only parsed session record ───────────────────────────────────── - - internal sealed class ParsedSession - { - public string FilePath { get; set; } = string.Empty; - public System.DateTime Date { get; set; } - public long Tokens { get; set; } - public int Interactions { get; set; } - public Dictionary ModelUsage { get; set; } - = new Dictionary(System.StringComparer.OrdinalIgnoreCase); - } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs deleted file mode 100644 index 2ed09c90..00000000 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionDiscovery.cs +++ /dev/null @@ -1,177 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; - -namespace CopilotTokenTracker.Data -{ - /// - /// Discovers Visual Studio Copilot Chat session binary files on the local machine. - /// - /// Strategy (mirrors vscode-extension/src/visualstudio.ts): - /// 1. Parse recent VS Copilot log files in %LOCALAPPDATA%\Temp\VSGitHubCopilotLogs\ - /// for "Updating session file '...'" lines to find active paths quickly. - /// 2. Walk the filesystem under %USERPROFILE% and common code roots, looking for - /// .vs\{solution}\copilot-chat\{hash}\sessions\ directories. - /// - internal static class SessionDiscovery - { - private static readonly HashSet SkipDirNames = new HashSet(StringComparer.OrdinalIgnoreCase) - { - "node_modules", ".git", ".github", "bin", "obj", "out", "dist", "build", - "target", "packages", "vendor", "__pycache__", ".tox", ".venv", "venv", - "env", "Windows", "Program Files", "Program Files (x86)", "ProgramData", - "$Recycle.Bin", "System Volume Information", "Recovery", - }; - - private static readonly Regex LogLinePattern = - new Regex(@"Updating session file '([^']+)'", RegexOptions.Compiled); - - // ── Public API ───────────────────────────────────────────────────────── - - /// Returns deduplicated paths of all discoverable VS session files. - public static List DiscoverSessions() - { - var seen = new HashSet(StringComparer.OrdinalIgnoreCase); - var results = new List(); - - DiscoverFromLogs(seen, results); - DiscoverFromFilesystem(seen, results); - - return results; - } - - // ── Log-based discovery ──────────────────────────────────────────────── - - private static void DiscoverFromLogs(HashSet seen, List results) - { - var localAppData = Environment.GetEnvironmentVariable("LOCALAPPDATA") - ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), - "AppData", "Local"); - - var logDir = Path.Combine(localAppData, "Temp", "VSGitHubCopilotLogs"); - Utilities.OutputLogger.Log($"Checking log directory: {logDir}"); - - if (!Directory.Exists(logDir)) - { - Utilities.OutputLogger.LogWarning($"Log directory not found: {logDir}"); - return; - } - - var logFiles = SafeEnumerateFiles(logDir, "*.chat.log").ToList(); - Utilities.OutputLogger.Log($"Found {logFiles.Count} log files"); - - foreach (var logFile in logFiles) - { - try - { - foreach (var line in File.ReadLines(logFile)) - { - var m = LogLinePattern.Match(line); - if (!m.Success) { continue; } - - var sessionPath = m.Groups[1].Value; - if (!seen.Add(sessionPath)) { continue; } - if (File.Exists(sessionPath)) - { - results.Add(sessionPath); - } - } - } - catch { /* skip unreadable log files */ } - } - } - - // ── Filesystem walk ──────────────────────────────────────────────────── - - private static void DiscoverFromFilesystem(HashSet seen, List results) - { - var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); - var roots = new List { home }; - - Utilities.OutputLogger.Log($"Scanning filesystem starting from home: {home}"); - - // Well-known code root conventions on Windows - foreach (var drive in new[] { "C", "D" }) - { - foreach (var folder in new[] { "repos", "code", "src", "projects", "dev" }) - { - var p = $"{drive}:\\{folder}"; - if (Directory.Exists(p)) - { - roots.Add(p); - Utilities.OutputLogger.Log($"Added scan root: {p}"); - } - } - } - - foreach (var root in roots) - { - var maxDepth = root == home ? 7 : 5; - ScanForVsDirs(root, 0, maxDepth, seen, results); - } - } - - private static void ScanForVsDirs( - string dir, int depth, int maxDepth, - HashSet seen, List results) - { - if (depth > maxDepth) { return; } - - foreach (var entry in SafeEnumerateDirectories(dir)) - { - var name = Path.GetFileName(entry); - - if (SkipDirNames.Contains(name)) { continue; } - if (name.StartsWith(".", StringComparison.Ordinal) && name != ".vs") { continue; } - - if (name == ".vs") - { - FindSessionsUnderVsDir(entry, seen, results); - } - else - { - ScanForVsDirs(entry, depth + 1, maxDepth, seen, results); - } - } - } - - private static void FindSessionsUnderVsDir( - string vsDir, HashSet seen, List results) - { - // .vs/{solution-name}/copilot-chat/{hash}/sessions/ - foreach (var solutionDir in SafeEnumerateDirectories(vsDir)) - { - var copilotChatDir = Path.Combine(solutionDir, "copilot-chat"); - if (!Directory.Exists(copilotChatDir)) { continue; } - - foreach (var hashDir in SafeEnumerateDirectories(copilotChatDir)) - { - var sessionsDir = Path.Combine(hashDir, "sessions"); - if (!Directory.Exists(sessionsDir)) { continue; } - - foreach (var sessionFile in SafeEnumerateFiles(sessionsDir)) - { - if (!seen.Add(sessionFile)) { continue; } - results.Add(sessionFile); - } - } - } - } - - // ── Helpers ──────────────────────────────────────────────────────────── - - private static IEnumerable SafeEnumerateDirectories(string path) - { - try { return Directory.EnumerateDirectories(path); } - catch { return Array.Empty(); } - } - - private static IEnumerable SafeEnumerateFiles(string path, string pattern = "*") - { - try { return Directory.EnumerateFiles(path, pattern); } - catch { return Array.Empty(); } - } - } -} diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs deleted file mode 100644 index 365a784b..00000000 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/SessionParser.cs +++ /dev/null @@ -1,281 +0,0 @@ -using System; -using System.Buffers; -using System.Collections.Generic; -using System.IO; -using System.Text; -using MessagePack; - -namespace CopilotTokenTracker.Data -{ - /// - /// Parses Visual Studio Copilot Chat session binary files (MessagePack stream format). - /// - /// File layout (mirrors vscode-extension/src/visualstudio.ts): - /// Byte 0 : version (0x01) — skip - /// Byte 1… : stream of MessagePack objects - /// - /// Object 0 : header → { TimeCreated: string, TimeUpdated: string, ConversationMode: string } - /// Object 1 : request → [ version, { Content: […], Model: { ModelId: string } } ] - /// Object 2 : response → [ version, { Content: […], Model: [version, { Id: string }] } ] - /// Object 3 : request → … (odd = request, even ≥2 = response) - /// - /// Content items are: [ typeTag, { Content: string } ] - /// - internal static class SessionParser - { - // ── Public API ───────────────────────────────────────────────────────── - - /// - /// Reads the MessagePack stream from and returns - /// all decoded objects. Returns an empty list on any read or decode error. - /// - public static List DecodeSessionFile(string filePath) - { - try - { - var bytes = File.ReadAllBytes(filePath); - if (bytes.Length < 2) { return new List(); } - - // Skip the single version-prefix byte - var mem = new ReadOnlyMemory(bytes, 1, bytes.Length - 1); - var reader = new MessagePackReader(mem); - var result = new List(); - - while (!reader.End) - { - result.Add(ReadValue(ref reader)); - } - - return result; - } - catch - { - return new List(); - } - } - - /// Returns the number of user interaction turns (odd-indexed objects). - public static int CountInteractions(List objects) - { - var count = 0; - for (var i = 1; i < objects.Count; i++) - { - if (i % 2 == 1) { count++; } - } - return count; - } - - /// - /// Extracts ISO-8601 TimeCreated / TimeUpdated strings from the session header. - /// - public static (string? Created, string? Updated) GetTimestamps(List objects) - { - if (objects.Count == 0) { return (null, null); } - - if (objects[0] is not Dictionary header) - { - return (null, null); - } - - return ( - header.TryGetValue("TimeCreated", out var c) ? c as string : null, - header.TryGetValue("TimeUpdated", out var u) ? u as string : null - ); - } - - /// - /// Returns the model identifier for the given message's inner data dictionary. - /// Requests store it at Model.ModelId; responses store it at Model[1].Id. - /// - public static string? GetModelId(Dictionary msgData, bool isRequest) - { - if (isRequest) - { - if (msgData.TryGetValue("Model", out var modelObj) - && modelObj is Dictionary model - && model.TryGetValue("ModelId", out var idObj)) - { - return idObj as string; - } - } - else - { - // Response: Model is [version, { Id, Name, … }] - if (msgData.TryGetValue("Model", out var modelObj) - && modelObj is object?[] modelArr - && modelArr.Length >= 2 - && modelArr[1] is Dictionary modelInfo - && modelInfo.TryGetValue("Id", out var idObj)) - { - return idObj as string; - } - } - - return null; - } - - /// - /// Concatenates all text segments from a VS Copilot Content array. - /// Content arrays have the shape: [ [typeTag, { Content: string }], … ] - /// - public static string ExtractText(object? contentObj) - { - if (contentObj is not object?[] arr) { return string.Empty; } - - var sb = new StringBuilder(); - - foreach (var c in arr) - { - Dictionary? inner = null; - - if (c is object?[] tuple && tuple.Length >= 2) - { - inner = tuple[1] as Dictionary; - } - - if (inner == null) { continue; } - - if (inner.TryGetValue("Content", out var textObj) && textObj is string text && text.Length > 0) - { - if (sb.Length > 0) { sb.Append('\n'); } - sb.Append(text); - } - } - - return sb.ToString(); - } - - /// - /// Gets the inner data dictionary [ version, dict ] → dict for a message object. - /// Returns null if the structure doesn't match. - /// - public static Dictionary? GetMessageData(object? msgObj) - { - if (msgObj is object?[] arr && arr.Length >= 2) - { - return arr[1] as Dictionary; - } - - return null; - } - - // ── Low-level MessagePack reader ─────────────────────────────────────── - - /// - /// Decodes a MessagePack Timestamp extension (type code -1) into an ISO-8601 string. - /// Handles all three timestamp formats: 32-bit, 64-bit, and 96-bit. - /// - private static string? DecodeTimestamp(ReadOnlySequence data) - { - try - { - long seconds; - uint nanoseconds; - var bytes = data.ToArray(); - - switch (bytes.Length) - { - case 4: // Timestamp32: seconds in uint32 - seconds = ((uint)bytes[0] << 24) | ((uint)bytes[1] << 16) - | ((uint)bytes[2] << 8) | bytes[3]; - nanoseconds = 0; - break; - - case 8: // Timestamp64: upper 30 bits = nanoseconds, lower 34 bits = seconds - ulong val = 0; - for (int i = 0; i < 8; i++) - val = (val << 8) | bytes[i]; - nanoseconds = (uint)(val >> 34); - seconds = (long)(val & 0x3FFFFFFFFUL); - break; - - case 12: // Timestamp96: 4 bytes nanoseconds + 8 bytes signed seconds - nanoseconds = ((uint)bytes[0] << 24) | ((uint)bytes[1] << 16) - | ((uint)bytes[2] << 8) | bytes[3]; - seconds = 0; - for (int i = 4; i < 12; i++) - seconds = (seconds << 8) | bytes[i]; - break; - - default: - return null; - } - - var dt = DateTimeOffset.FromUnixTimeSeconds(seconds) - .AddTicks(nanoseconds / 100) - .UtcDateTime; - return dt.ToString("o"); - } - catch - { - return null; - } - } - - private static object? ReadValue(ref MessagePackReader reader) - { - switch (reader.NextMessagePackType) - { - case MessagePackType.Map: - { - var count = reader.ReadMapHeader(); - var dict = new Dictionary(count); - - for (var i = 0; i < count; i++) - { - var key = ReadValue(ref reader)?.ToString() ?? string.Empty; - var val = ReadValue(ref reader); - dict[key] = val; - } - - return dict; - } - - case MessagePackType.Array: - { - var count = reader.ReadArrayHeader(); - var arr = new object?[count]; - - for (var i = 0; i < count; i++) - { - arr[i] = ReadValue(ref reader); - } - - return arr; - } - - case MessagePackType.String: - return reader.ReadString(); - - case MessagePackType.Integer: - return reader.ReadInt64(); - - case MessagePackType.Float: - return reader.ReadDouble(); - - case MessagePackType.Boolean: - return reader.ReadBoolean(); - - case MessagePackType.Nil: - reader.ReadNil(); - return null; - - case MessagePackType.Binary: - reader.ReadBytes(); // consume and discard — not used in session analysis - return null; - - case MessagePackType.Extension: - var ext = reader.ReadExtensionFormat(); - if (ext.TypeCode == -1) // MessagePack Timestamp - { - return DecodeTimestamp(ext.Data); - } - return null; - - default: - reader.Skip(); - return null; - } - } - } -} diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs index c308abf9..0b67ba6b 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs @@ -1,229 +1,24 @@ using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; using System.Threading.Tasks; namespace CopilotTokenTracker.Data { /// - /// Discovers all local VS Copilot Chat sessions, parses them, and aggregates the - /// token usage into a object ready for the webview. + /// Delegates token usage stats to the bundled CLI executable. + /// All session discovery, parsing, and aggregation live in the shared TypeScript codebase. /// internal static class StatsBuilder { - // Environmental-impact constants (kept consistent with the VS Code extension) - private const double Co2GramsPerThousandTokens = 0.2; - private const double WaterMlPerThousandTokens = 0.3; - private const double Co2GramsAbsorbedPerTreePerYear = 21_000.0; - - // ── Public API ───────────────────────────────────────────────────────── - - public static Task BuildAsync() - => Task.Run(Build); - - // ── Core build logic ─────────────────────────────────────────────────── - - private static DetailedStats Build() - { - try - { - Utilities.OutputLogger.Log("Starting stats build..."); - var sessionFiles = SessionDiscovery.DiscoverSessions(); - Utilities.OutputLogger.Log($"Discovered {sessionFiles.Count} session files"); - - // Parse in parallel for speed; null = unreadable / no data - var sessions = sessionFiles - .AsParallel() - .Select(ParseSession) - .Where(s => s != null) - .ToList(); - - Utilities.OutputLogger.Log($"Successfully parsed {sessions.Count} sessions"); - - var now = DateTime.UtcNow; - var todayStart = now.Date; - var monthStart = new DateTime(now.Year, now.Month, 1, 0, 0, 0, DateTimeKind.Utc); - var lastMonStart = monthStart.AddMonths(-1); - var minus30Days = now.AddDays(-30); - - var stats = new DetailedStats - { - Today = Aggregate(sessions, todayStart, now), - Month = Aggregate(sessions, monthStart, now), - LastMonth = Aggregate(sessions, lastMonStart, monthStart), - Last30Days = Aggregate(sessions, minus30Days, now), - LastUpdated = now.ToString("o"), - BackendConfigured = false, - }; - - Utilities.OutputLogger.Log($"Stats aggregated - Today: {stats.Today.Tokens:N0}, Last30Days: {stats.Last30Days.Tokens:N0}"); - return stats; - } - catch (Exception ex) - { - Utilities.OutputLogger.LogError("Stats build failed", ex); - throw; - } - } - - // ── Session parsing ──────────────────────────────────────────────────── - - private static ParsedSession? ParseSession(string filePath) - { - try - { - Utilities.OutputLogger.Log($"Parsing session file: {Path.GetFileName(filePath)}"); - - var objects = SessionParser.DecodeSessionFile(filePath); - if (objects.Count == 0) - { - Utilities.OutputLogger.LogWarning($"Session file has no objects: {Path.GetFileName(filePath)}"); - return null; - } - - Utilities.OutputLogger.Log($" Decoded {objects.Count} objects from session file"); - - var (created, _) = SessionParser.GetTimestamps(objects); - if (created == null) - { - Utilities.OutputLogger.LogWarning($" No timestamp found in session file: {Path.GetFileName(filePath)}"); - return null; - } - - if (!DateTime.TryParse(created, null, - System.Globalization.DateTimeStyles.RoundtripKind, out var sessionDate)) - { - Utilities.OutputLogger.LogWarning($" Invalid timestamp format '{created}' in session file: {Path.GetFileName(filePath)}"); - return null; - } - - Utilities.OutputLogger.Log($" Session date: {sessionDate:yyyy-MM-dd HH:mm:ss}"); - - var modelUsage = new Dictionary(StringComparer.OrdinalIgnoreCase); - var totalTokens = 0L; - var interactions = 0; - - for (var i = 1; i < objects.Count; i++) - { - var msgData = SessionParser.GetMessageData(objects[i]); - if (msgData == null) { continue; } - - var isRequest = i % 2 == 1; - if (isRequest) { interactions++; } - - _ = msgData.TryGetValue("Content", out var contentObj); - var text = SessionParser.ExtractText(contentObj); - if (string.IsNullOrEmpty(text)) { continue; } - - var model = SessionParser.GetModelId(msgData, isRequest) ?? "unknown"; - var tokens = TokenEstimator.Estimate(text, model); - totalTokens += tokens; - - if (!modelUsage.TryGetValue(model, out var existing)) - { - existing = (0L, 0L); - } - - modelUsage[model] = isRequest - ? (existing.Input + tokens, existing.Output) - : (existing.Input, existing.Output + tokens); - } - - Utilities.OutputLogger.Log($" ✓ Parsed successfully: {interactions} interactions, {totalTokens:N0} tokens"); - - return new ParsedSession - { - FilePath = filePath, - Date = sessionDate, - Tokens = totalTokens, - Interactions = interactions, - ModelUsage = modelUsage, - }; - } - catch (Exception ex) - { - Utilities.OutputLogger.LogError($" Failed to parse session file: {Path.GetFileName(filePath)}", ex); - return null; - } - } - - // ── Aggregation ──────────────────────────────────────────────────────── - - private static PeriodStats Aggregate( - List sessions, DateTime from, DateTime to) + public static async Task BuildAsync() { - var inPeriod = sessions - .Where(s => s != null && s!.Date >= from && s.Date < to) - .ToList(); + var stats = await CliBridge.GetUsageStatsAsync(); + if (stats != null) { return stats; } - var totalTokens = inPeriod.Sum(s => s!.Tokens); - var totalInteractions = inPeriod.Sum(s => s!.Interactions); - var totalSessions = inPeriod.Count; - - // Merge per-model usage across all sessions in the period - var merged = new Dictionary(StringComparer.OrdinalIgnoreCase); - - foreach (var s in inPeriod) - { - foreach (var kvp in s!.ModelUsage) - { - if (!merged.TryGetValue(kvp.Key, out var existing)) - { - existing = (0L, 0L); - } - merged[kvp.Key] = (existing.Input + kvp.Value.Input, - existing.Output + kvp.Value.Output); - } - } - - var co2 = totalTokens / 1_000.0 * Co2GramsPerThousandTokens; - var water = totalTokens / 1_000.0 * WaterMlPerThousandTokens; - - return new PeriodStats + Utilities.OutputLogger.LogWarning("CLI bridge returned no data — is the bundled CLI exe present?"); + return new DetailedStats { - Tokens = totalTokens, - ThinkingTokens = 0L, - EstimatedTokens = totalTokens, - ActualTokens = 0L, - Sessions = totalSessions, - AvgInteractionsPerSession = totalSessions > 0 - ? (double)totalInteractions / totalSessions - : 0.0, - AvgTokensPerSession = totalSessions > 0 - ? (double)totalTokens / totalSessions - : 0.0, - ModelUsage = BuildModelUsageDict(merged), - EditorUsage = new Dictionary - { - ["Visual Studio"] = new EditorStats - { - Tokens = totalTokens, - Sessions = totalSessions, - }, - }, - Co2 = co2, - TreesEquivalent = co2 / Co2GramsAbsorbedPerTreePerYear, - WaterUsage = water, - EstimatedCost = 0.0, + LastUpdated = DateTime.UtcNow.ToString("o"), }; } - - private static Dictionary BuildModelUsageDict( - Dictionary merged) - { - var dict = new Dictionary(merged.Count, StringComparer.OrdinalIgnoreCase); - - foreach (var kvp in merged) - { - dict[kvp.Key] = new ModelStats - { - InputTokens = kvp.Value.Input, - OutputTokens = kvp.Value.Output, - }; - } - - return dict; - } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/TokenEstimator.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/TokenEstimator.cs deleted file mode 100644 index ebdd99ea..00000000 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/TokenEstimator.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace CopilotTokenTracker.Data -{ - /// - /// Estimates token counts from plain text using character-to-token ratios. - /// - /// Different model families tokenise text at different densities. - /// Unknown models fall back to the industry-standard 4 chars ≈ 1 token. - /// - /// Mirrors the logic in vscode-extension/src/tokenEstimation.ts. - /// - internal static class TokenEstimator - { - // Approximate characters-per-token by model family (ascending priority order). - // Substring-matched case-insensitively against the full model id. - private static readonly (string Key, double Ratio)[] Ratios = - { - ("gpt-3.5", 3.8), - ("gpt-4o", 4.0), - ("gpt-4", 3.8), - ("o1", 4.0), - ("o3", 4.0), - ("claude-3-7", 3.6), - ("claude-3-5", 3.6), - ("claude-3", 3.6), - ("claude", 3.5), - ("gemini", 4.2), - }; - - private const double DefaultRatio = 4.0; - - /// - /// Returns the estimated token count for - /// with the named (may be null or empty). - /// - public static long Estimate(string text, string? modelId = null) - { - if (string.IsNullOrEmpty(text)) { return 0L; } - - var ratio = GetRatio(modelId); - return (long)Math.Ceiling(text.Length / ratio); - } - - // ── Helpers ──────────────────────────────────────────────────────────── - - private static double GetRatio(string? modelId) - { - if (string.IsNullOrEmpty(modelId)) { return DefaultRatio; } - - foreach (var (key, ratio) in Ratios) - { - if (modelId!.IndexOf(key, StringComparison.OrdinalIgnoreCase) >= 0) - { - return ratio; - } - } - - return DefaultRatio; - } - } -} diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json index 85ff5aa4..6483fc02 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/CopilotTokenTracker.csproj.nuget.dgspec.json @@ -44,10 +44,6 @@ "frameworks": { "net472": { "dependencies": { - "MessagePack": { - "target": "Package", - "version": "[2.5.187, )" - }, "Microsoft.VSSDK.BuildTools": { "target": "Package", "version": "[17.6.2164, )", diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json b/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json index 469671e9..f50684fe 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/project.assets.json @@ -82,28 +82,30 @@ } } }, - "MessagePack/2.5.187": { + "MessagePack/2.5.108": { "type": "package", "dependencies": { - "MessagePack.Annotations": "2.5.187", + "MessagePack.Annotations": "2.5.108", "Microsoft.Bcl.AsyncInterfaces": "6.0.0", - "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.NET.StringTools": "17.4.0", "System.Collections.Immutable": "6.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Emit.Lightweight": "4.7.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", "System.Threading.Tasks.Extensions": "4.5.4" }, "compile": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/MessagePack.dll": { "related": ".xml" } }, "runtime": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } }, - "MessagePack.Annotations/2.5.187": { + "MessagePack.Annotations/2.5.108": { "type": "package", "compile": { "lib/netstandard2.0/MessagePack.Annotations.dll": { @@ -111,7 +113,7 @@ } }, "runtime": { - "lib/netstandard2.0/MessagePack.Annotations.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } @@ -197,7 +199,7 @@ } }, "runtime": { - "lib/net472/Microsoft.NET.StringTools.dll": { + "lib/net472/_._": { "related": ".pdb;.xml" } } @@ -1813,7 +1815,7 @@ } }, "runtime": { - "lib/net462/System.Collections.Immutable.dll": { + "lib/net462/_._": { "related": ".xml" } }, @@ -2039,6 +2041,15 @@ "lib/net45/_._": {} } }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, "System.Reflection.Metadata/7.0.0": { "type": "package", "dependencies": { @@ -2502,28 +2513,30 @@ } } }, - "MessagePack/2.5.187": { + "MessagePack/2.5.108": { "type": "package", "dependencies": { - "MessagePack.Annotations": "2.5.187", + "MessagePack.Annotations": "2.5.108", "Microsoft.Bcl.AsyncInterfaces": "6.0.0", - "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.NET.StringTools": "17.4.0", "System.Collections.Immutable": "6.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Emit.Lightweight": "4.7.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", "System.Threading.Tasks.Extensions": "4.5.4" }, "compile": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/MessagePack.dll": { "related": ".xml" } }, "runtime": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } }, - "MessagePack.Annotations/2.5.187": { + "MessagePack.Annotations/2.5.108": { "type": "package", "compile": { "lib/netstandard2.0/MessagePack.Annotations.dll": { @@ -2531,7 +2544,7 @@ } }, "runtime": { - "lib/netstandard2.0/MessagePack.Annotations.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } @@ -2617,7 +2630,7 @@ } }, "runtime": { - "lib/net472/Microsoft.NET.StringTools.dll": { + "lib/net472/_._": { "related": ".pdb;.xml" } } @@ -4225,7 +4238,7 @@ } }, "runtime": { - "lib/net462/System.Collections.Immutable.dll": { + "lib/net462/_._": { "related": ".xml" } }, @@ -4451,6 +4464,15 @@ "lib/net45/_._": {} } }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, "System.Reflection.Metadata/7.0.0": { "type": "package", "dependencies": { @@ -4902,28 +4924,30 @@ } } }, - "MessagePack/2.5.187": { + "MessagePack/2.5.108": { "type": "package", "dependencies": { - "MessagePack.Annotations": "2.5.187", + "MessagePack.Annotations": "2.5.108", "Microsoft.Bcl.AsyncInterfaces": "6.0.0", - "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.NET.StringTools": "17.4.0", "System.Collections.Immutable": "6.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Emit.Lightweight": "4.7.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", "System.Threading.Tasks.Extensions": "4.5.4" }, "compile": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/MessagePack.dll": { "related": ".xml" } }, "runtime": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } }, - "MessagePack.Annotations/2.5.187": { + "MessagePack.Annotations/2.5.108": { "type": "package", "compile": { "lib/netstandard2.0/MessagePack.Annotations.dll": { @@ -4931,7 +4955,7 @@ } }, "runtime": { - "lib/netstandard2.0/MessagePack.Annotations.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } @@ -5017,7 +5041,7 @@ } }, "runtime": { - "lib/net472/Microsoft.NET.StringTools.dll": { + "lib/net472/_._": { "related": ".pdb;.xml" } } @@ -6613,7 +6637,7 @@ } }, "runtime": { - "lib/net462/System.Collections.Immutable.dll": { + "lib/net462/_._": { "related": ".xml" } }, @@ -6839,6 +6863,15 @@ "lib/net45/_._": {} } }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, "System.Reflection.Metadata/7.0.0": { "type": "package", "dependencies": { @@ -7290,28 +7323,30 @@ } } }, - "MessagePack/2.5.187": { + "MessagePack/2.5.108": { "type": "package", "dependencies": { - "MessagePack.Annotations": "2.5.187", + "MessagePack.Annotations": "2.5.108", "Microsoft.Bcl.AsyncInterfaces": "6.0.0", - "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.NET.StringTools": "17.4.0", "System.Collections.Immutable": "6.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Emit.Lightweight": "4.7.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", "System.Threading.Tasks.Extensions": "4.5.4" }, "compile": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/MessagePack.dll": { "related": ".xml" } }, "runtime": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } }, - "MessagePack.Annotations/2.5.187": { + "MessagePack.Annotations/2.5.108": { "type": "package", "compile": { "lib/netstandard2.0/MessagePack.Annotations.dll": { @@ -7319,7 +7354,7 @@ } }, "runtime": { - "lib/netstandard2.0/MessagePack.Annotations.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } @@ -7405,7 +7440,7 @@ } }, "runtime": { - "lib/net472/Microsoft.NET.StringTools.dll": { + "lib/net472/_._": { "related": ".pdb;.xml" } } @@ -9004,7 +9039,7 @@ } }, "runtime": { - "lib/net462/System.Collections.Immutable.dll": { + "lib/net462/_._": { "related": ".xml" } }, @@ -9230,6 +9265,15 @@ "lib/net45/_._": {} } }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, "System.Reflection.Metadata/7.0.0": { "type": "package", "dependencies": { @@ -9681,28 +9725,30 @@ } } }, - "MessagePack/2.5.187": { + "MessagePack/2.5.108": { "type": "package", "dependencies": { - "MessagePack.Annotations": "2.5.187", + "MessagePack.Annotations": "2.5.108", "Microsoft.Bcl.AsyncInterfaces": "6.0.0", - "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.NET.StringTools": "17.4.0", "System.Collections.Immutable": "6.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Emit.Lightweight": "4.7.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", "System.Threading.Tasks.Extensions": "4.5.4" }, "compile": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/MessagePack.dll": { "related": ".xml" } }, "runtime": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } }, - "MessagePack.Annotations/2.5.187": { + "MessagePack.Annotations/2.5.108": { "type": "package", "compile": { "lib/netstandard2.0/MessagePack.Annotations.dll": { @@ -9710,7 +9756,7 @@ } }, "runtime": { - "lib/netstandard2.0/MessagePack.Annotations.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } @@ -9796,7 +9842,7 @@ } }, "runtime": { - "lib/net472/Microsoft.NET.StringTools.dll": { + "lib/net472/_._": { "related": ".pdb;.xml" } } @@ -11407,7 +11453,7 @@ } }, "runtime": { - "lib/net462/System.Collections.Immutable.dll": { + "lib/net462/_._": { "related": ".xml" } }, @@ -11633,6 +11679,15 @@ "lib/net45/_._": {} } }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, "System.Reflection.Metadata/7.0.0": { "type": "package", "dependencies": { @@ -12084,28 +12139,30 @@ } } }, - "MessagePack/2.5.187": { + "MessagePack/2.5.108": { "type": "package", "dependencies": { - "MessagePack.Annotations": "2.5.187", + "MessagePack.Annotations": "2.5.108", "Microsoft.Bcl.AsyncInterfaces": "6.0.0", - "Microsoft.NET.StringTools": "17.6.3", + "Microsoft.NET.StringTools": "17.4.0", "System.Collections.Immutable": "6.0.0", + "System.Reflection.Emit": "4.7.0", + "System.Reflection.Emit.Lightweight": "4.7.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", "System.Threading.Tasks.Extensions": "4.5.4" }, "compile": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/MessagePack.dll": { "related": ".xml" } }, "runtime": { - "lib/net472/MessagePack.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } }, - "MessagePack.Annotations/2.5.187": { + "MessagePack.Annotations/2.5.108": { "type": "package", "compile": { "lib/netstandard2.0/MessagePack.Annotations.dll": { @@ -12113,7 +12170,7 @@ } }, "runtime": { - "lib/netstandard2.0/MessagePack.Annotations.dll": { + "lib/netstandard2.0/_._": { "related": ".xml" } } @@ -12199,7 +12256,7 @@ } }, "runtime": { - "lib/net472/Microsoft.NET.StringTools.dll": { + "lib/net472/_._": { "related": ".pdb;.xml" } } @@ -13810,7 +13867,7 @@ } }, "runtime": { - "lib/net462/System.Collections.Immutable.dll": { + "lib/net462/_._": { "related": ".xml" } }, @@ -14036,6 +14093,15 @@ "lib/net45/_._": {} } }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "type": "package", + "compile": { + "ref/net45/_._": {} + }, + "runtime": { + "lib/net45/_._": {} + } + }, "System.Reflection.Metadata/7.0.0": { "type": "package", "dependencies": { @@ -14523,33 +14589,31 @@ "lib/netstandard2.0/envdte90a.xml" ] }, - "MessagePack/2.5.187": { - "sha512": "uW4j8m4Nc+2Mk5n6arOChavJ9bLjkis0qWASOj2h2OwmfINuzYv+mjCHUymrYhmyyKTu3N+ObtTXAY4uQ7jIhg==", + "MessagePack/2.5.108": { + "sha512": "kcVRbdWP3xNWLZmmpm4DFO+kuXf6mUR2mHZ27WoZIEFIv9hazuUd80injXhNrZnlq/FklAdCsLOil5M76I4Ndg==", "type": "package", - "path": "messagepack/2.5.187", + "path": "messagepack/2.5.108", "files": [ ".nupkg.metadata", ".signature.p7s", - "lib/net472/MessagePack.dll", - "lib/net472/MessagePack.xml", "lib/net6.0/MessagePack.dll", "lib/net6.0/MessagePack.xml", "lib/netstandard2.0/MessagePack.dll", "lib/netstandard2.0/MessagePack.xml", - "messagepack.2.5.187.nupkg.sha512", + "messagepack.2.5.108.nupkg.sha512", "messagepack.nuspec" ] }, - "MessagePack.Annotations/2.5.187": { - "sha512": "/IvvMMS8opvlHjEJ/fR2Cal4Co726Kj77Z8KiohFhuHfLHHmb9uUxW5+tSCL4ToKFfkQlrS3HD638mRq83ySqA==", + "MessagePack.Annotations/2.5.108": { + "sha512": "28aNCvfJClgwaKr26gf2S6LT+C1PNyPxiG+ihYpy8uCJsRLJEDoCt2I0Uk5hqOPQ8P8hI0ESy520oMkZkPmsOQ==", "type": "package", - "path": "messagepack.annotations/2.5.187", + "path": "messagepack.annotations/2.5.108", "files": [ ".nupkg.metadata", ".signature.p7s", "lib/netstandard2.0/MessagePack.Annotations.dll", "lib/netstandard2.0/MessagePack.Annotations.xml", - "messagepack.annotations.2.5.187.nupkg.sha512", + "messagepack.annotations.2.5.108.nupkg.sha512", "messagepack.annotations.nuspec" ] }, @@ -17338,6 +17402,64 @@ "version.txt" ] }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "sha512": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA==", + "type": "package", + "path": "system.reflection.emit.lightweight/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.Lightweight.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard1.0/System.Reflection.Emit.Lightweight.xml", + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard2.0/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard2.0/System.Reflection.Emit.Lightweight.xml", + "lib/netstandard2.1/_._", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard2.0/System.Reflection.Emit.Lightweight.dll", + "ref/netstandard2.0/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard2.1/_._", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.Lightweight.dll", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.Lightweight.xml", + "system.reflection.emit.lightweight.4.7.0.nupkg.sha512", + "system.reflection.emit.lightweight.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, "System.Reflection.Metadata/7.0.0": { "sha512": "MclTG61lsD9sYdpNz9xsKBzjsmsfCtcMZYXz/IUr2zlhaTaABonlr1ESeompTgM+Xk+IwtGYU7/voh3YWB/fWw==", "type": "package", @@ -18053,7 +18175,6 @@ }, "projectFileDependencyGroups": { ".NETFramework,Version=v4.7.2": [ - "MessagePack >= 2.5.187", "Microsoft.VSSDK.BuildTools >= 17.6.2164", "Microsoft.VisualStudio.SDK >= 17.6.36389", "Microsoft.Web.WebView2 >= 1.0.2478.35", @@ -18105,10 +18226,6 @@ "frameworks": { "net472": { "dependencies": { - "MessagePack": { - "target": "Package", - "version": "[2.5.187, )" - }, "Microsoft.VSSDK.BuildTools": { "target": "Package", "version": "[17.6.2164, )", diff --git a/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache b/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache index e1fd33ee..e7dbfd2d 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache +++ b/visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "LsYvHT6cvxI=", + "dgSpecHash": "5Hm9IbDP0Hc=", "success": true, "projectFilePath": "C:\\Users\\RobBos\\code\\repos\\rajbos\\github-copilot-token-usage\\visualstudio-extension\\src\\CopilotTokenTracker\\CopilotTokenTracker.csproj", "expectedPackageFiles": [ @@ -9,8 +9,8 @@ "C:\\Users\\RobBos\\.nuget\\packages\\envdte80\\17.6.36389\\envdte80.17.6.36389.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\envdte90\\17.6.36389\\envdte90.17.6.36389.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\envdte90a\\17.6.36389\\envdte90a.17.6.36389.nupkg.sha512", - "C:\\Users\\RobBos\\.nuget\\packages\\messagepack\\2.5.187\\messagepack.2.5.187.nupkg.sha512", - "C:\\Users\\RobBos\\.nuget\\packages\\messagepack.annotations\\2.5.187\\messagepack.annotations.2.5.187.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\messagepack\\2.5.108\\messagepack.2.5.108.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\messagepack.annotations\\2.5.108\\messagepack.annotations.2.5.108.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\8.0.0\\microsoft.bcl.asyncinterfaces.8.0.0.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.build.framework\\17.6.3\\microsoft.build.framework.17.6.3.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\microsoft.codeanalysis.bannedapianalyzers\\3.3.2\\microsoft.codeanalysis.bannedapianalyzers.3.3.2.nupkg.sha512", @@ -108,6 +108,7 @@ "C:\\Users\\RobBos\\.nuget\\packages\\system.numerics.vectors\\4.5.0\\system.numerics.vectors.4.5.0.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\system.private.uri\\4.3.2\\system.private.uri.4.3.2.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.emit\\4.7.0\\system.reflection.emit.4.7.0.nupkg.sha512", + "C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.emit.lightweight\\4.7.0\\system.reflection.emit.lightweight.4.7.0.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.metadata\\7.0.0\\system.reflection.metadata.7.0.0.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\system.reflection.typeextensions\\4.7.0\\system.reflection.typeextensions.4.7.0.nupkg.sha512", "C:\\Users\\RobBos\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", From 6f28d90cc67add354bb62ec38e87bc17caee1381 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Wed, 25 Mar 2026 00:50:13 +0100 Subject: [PATCH 09/15] Use writable user-data folder for WebView2 in experimental instance --- .../ToolWindow/TokenTrackerControl.xaml.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs index 61a9735e..d087d855 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs @@ -40,7 +40,15 @@ private async Task InitWebViewAsync() { try { - await WebView.EnsureCoreWebView2Async(null); + // Use a writable user-data folder so WebView2 works inside the + // VS experimental instance (the default location is often denied). + var userDataFolder = Path.Combine( + Path.GetTempPath(), + "CopilotTokenTracker-WebView2"); + var env = await CoreWebView2Environment.CreateAsync( + userDataFolder: userDataFolder); + + await WebView.EnsureCoreWebView2Async(env); // Disable unnecessary browser chrome WebView.CoreWebView2.Settings.IsStatusBarEnabled = false; From a98a04d7e88abf8e85be5240d40baa1083663824 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Mar 2026 02:54:49 +0100 Subject: [PATCH 10/15] Add Environmental Impact and Fluency Score views to Visual Studio extension (#483) * Initial plan * Implement environmental and maturity views for Visual Studio extension Co-authored-by: rajbos <6085745+rajbos@users.noreply.github.com> Agent-Logs-Url: https://github.com/rajbos/github-copilot-token-usage/sessions/07d7e46e-e18f-417b-9794-3e80d4083899 * Add Environmental Impact and Fluency Score views to Visual Studio extension Co-authored-by: rajbos <6085745+rajbos@users.noreply.github.com> Agent-Logs-Url: https://github.com/rajbos/github-copilot-token-usage/sessions/07d7e46e-e18f-417b-9794-3e80d4083899 * update gitignore to fix merge conflicts * Add maturity.js to CopilotTokenTracker webview for enhanced functionality * Enhance error handling in CLI bridge and stats retrieval for improved robustness * Implement structure for code changes tracking * Refactor GetUsageStatsAsync to prevent duplicate CLI calls by reusing in-flight tasks * Add dashboard view fallback in TokenTrackerControl and update postMessage handling in vscode-shim * Bump cache version and enhance SessionData structure; add loading and error HTML builders for improved user feedback * feat: Enhance Copilot Token Tracker with new CLI commands and UI improvements - Added `chart` command to output daily token usage data in JSON format. - Introduced `usage-analysis` command for detailed usage analysis stats. - Updated ToolbarInfoCommand to reset the view to details instead of refreshing. - Modified CopilotTokenTrackerPackage.vsct to reflect changes in tooltip text. - Implemented caching mechanism in TokenTrackerControl to improve loading times. - Added methods to fetch chart and usage analysis data from the CLI. - Enhanced error handling and logging in TokenTrackerControl. - Improved HTML rendering in ThemedHtmlBuilder to hide unsupported views in Visual Studio. - Created GitHub Actions workflow for building and packaging the Visual Studio extension. * feat: Add npm build and compile commands to auto-approve settings * feat: Enhance usage analysis with model tier classification and unified tool display across periods * Docs updates * Fix initial load --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: rajbos <6085745+rajbos@users.noreply.github.com> Co-authored-by: Rob Bos --- .../visualstudio-extension.instructions.md | 33 + .github/workflows/cli-build.yml | 8 + .github/workflows/visualstudio-build.yml | 212 + .gitignore | 24 +- .vscode/settings.json | 6 +- README.md | 285 +- cli/README.md | 92 +- cli/src/commands/chart.ts | 26 + cli/src/commands/fluency.ts | 97 +- cli/src/commands/usage-analysis.ts | 36 + docs/cli/README.md | 187 + docs/images/VS-Overview.png | Bin 0 -> 47061 bytes docs/images/VS-Toolbar.png | Bin 0 -> 1561 bytes docs/visual-studio/README.md | 69 + docs/vscode-extension/README.md | 260 + .../Commands/ToolbarInfoCommand.cs | 25 +- .../CopilotTokenTracker.csproj | 2 + .../CopilotTokenTrackerPackage.vsct | 2 +- .../src/CopilotTokenTracker/Data/CliBridge.cs | 205 +- .../src/CopilotTokenTracker/Data/Models.cs | 175 + .../CopilotTokenTracker/Data/StatsBuilder.cs | 57 +- .../ToolWindow/TokenTrackerControl.xaml.cs | 201 +- .../ToolWindow/TokenTrackerToolWindow.cs | 10 + .../WebBridge/ThemedHtmlBuilder.cs | 212 +- .../WebBridge/vscode-shim.js | 8 +- .../webview/environmental.js | 20527 +++++++++++ .../CopilotTokenTracker/webview/maturity.js | 29532 ++++++++++++++++ .../src/CopilotTokenTracker/webview/usage.js | 108 +- vscode-extension/src/sessionParser.ts | 26 +- vscode-extension/src/usageAnalysis.ts | 96 +- vscode-extension/src/webview/usage/main.ts | 115 +- .../test/unit/sessionParser.test.ts | 78 + 32 files changed, 52193 insertions(+), 521 deletions(-) create mode 100644 .github/workflows/visualstudio-build.yml create mode 100644 cli/src/commands/chart.ts create mode 100644 cli/src/commands/usage-analysis.ts create mode 100644 docs/cli/README.md create mode 100644 docs/images/VS-Overview.png create mode 100644 docs/images/VS-Toolbar.png create mode 100644 docs/visual-studio/README.md create mode 100644 docs/vscode-extension/README.md create mode 100644 visualstudio-extension/src/CopilotTokenTracker/webview/environmental.js create mode 100644 visualstudio-extension/src/CopilotTokenTracker/webview/maturity.js diff --git a/.github/instructions/visualstudio-extension.instructions.md b/.github/instructions/visualstudio-extension.instructions.md index 75650a99..56ae460c 100644 --- a/.github/instructions/visualstudio-extension.instructions.md +++ b/.github/instructions/visualstudio-extension.instructions.md @@ -29,6 +29,39 @@ Or from the repo root: ./build.ps1 -Project visualstudio ``` +## Build Validation + +VSIX projects require Visual Studio's MSBuild toolchain — **not `dotnet build`**. + +### Correct way: use `build.ps1` + +Always build the VS extension via the root orchestrator: +```powershell +# From the repo root: +./build.ps1 -Project visualstudio +``` + +This uses `vswhere.exe` to locate the correct `MSBuild.exe` from the Visual Studio install. Running `dotnet build` against the `.csproj` directly **always fails** with: +``` +error MSB4018: The "GenerateResourceAndCtoFileManifests" task failed unexpectedly. +``` +That error is a `dotnet build` / VSSDK incompatibility, **not a code error** — ignore it if seen. + +### Checking for C# compiler errors without a full build + +```powershell +# From the repo root: +./build.ps1 -Project visualstudio 2>&1 | Select-String -Pattern "error CS|FAILED" +# No "error CS" lines = no compiler errors +``` + +- The language server (Roslyn / `get_errors` tool) surfaces C# errors in the IDE without a build run. +- After editing C# files, call `get_errors` on the changed files first, then run `./build.ps1 -Project visualstudio` to confirm a clean MSBuild result. + +### C# interpolated verbatim strings (`$@"..."`) — escaping `{` / `}` + +HTML templates in `ThemedHtmlBuilder.cs` use C# `$@"..."` strings. Literal `{` and `}` characters inside embedded JavaScript **must** be doubled (`{{` / `}}`) to avoid being treated as interpolation holes. Forgetting this produces `CS1073`, `CS1012`, `CS1011` errors at the JS lines. + ## Session File Discovery Visual Studio Copilot Chat stores sessions as MessagePack-encoded binary files: diff --git a/.github/workflows/cli-build.yml b/.github/workflows/cli-build.yml index db1034c3..59742772 100644 --- a/.github/workflows/cli-build.yml +++ b/.github/workflows/cli-build.yml @@ -111,6 +111,14 @@ jobs: working-directory: cli run: node dist/cli.js diagnostics + - name: Validate chart command + working-directory: cli + run: node dist/cli.js chart --json + + - name: Validate usage-analysis command + working-directory: cli + run: node dist/cli.js usage-analysis --json + - name: Build production bundle working-directory: cli run: npm run build:production diff --git a/.github/workflows/visualstudio-build.yml b/.github/workflows/visualstudio-build.yml new file mode 100644 index 00000000..942a48da --- /dev/null +++ b/.github/workflows/visualstudio-build.yml @@ -0,0 +1,212 @@ +name: Visual Studio Extension - Build & Package + +on: + push: + branches: [ main, develop ] + paths: + - 'visualstudio-extension/**' + - 'cli/**' + - 'vscode-extension/src/sessionDiscovery.ts' + - 'vscode-extension/src/sessionParser.ts' + - 'vscode-extension/src/tokenEstimation.ts' + - 'vscode-extension/src/maturityScoring.ts' + - 'vscode-extension/src/usageAnalysis.ts' + - 'vscode-extension/src/opencode.ts' + - 'vscode-extension/src/visualstudio.ts' + - 'vscode-extension/src/types.ts' + - 'vscode-extension/src/tokenEstimators.json' + - 'vscode-extension/src/modelPricing.json' + - 'vscode-extension/src/toolNames.json' + - '.github/workflows/visualstudio-build.yml' + pull_request: + branches: [ main, develop ] + paths: + - 'visualstudio-extension/**' + - 'cli/**' + - 'vscode-extension/src/sessionDiscovery.ts' + - 'vscode-extension/src/sessionParser.ts' + - 'vscode-extension/src/tokenEstimation.ts' + - 'vscode-extension/src/maturityScoring.ts' + - 'vscode-extension/src/usageAnalysis.ts' + - 'vscode-extension/src/opencode.ts' + - 'vscode-extension/src/visualstudio.ts' + - 'vscode-extension/src/types.ts' + - 'vscode-extension/src/tokenEstimators.json' + - 'vscode-extension/src/modelPricing.json' + - 'vscode-extension/src/toolNames.json' + - '.github/workflows/visualstudio-build.yml' + workflow_dispatch: + inputs: + publish_marketplace: + description: 'Publish to VS Marketplace after packaging' + required: false + default: false + type: boolean + +permissions: + contents: read + +jobs: + build: + name: Build & Package + # Windows required: Node.js SEA (bundle-exe.ps1) and MSBuild/VSSDK are Windows-only + runs-on: windows-latest + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + with: + egress-policy: audit + + - name: Checkout code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Setup Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: '22.x' + + # ── Install dependencies ──────────────────────────────────────────────── + + - name: Install vscode-extension dependencies + run: npm ci + working-directory: vscode-extension + + - name: Install CLI dependencies + run: npm ci + working-directory: cli + + # ── Build & validate CLI (js bundle) ─────────────────────────────────── + + - name: Build CLI (production bundle) + working-directory: cli + run: npm run build:production + + - name: Validate CLI --help + working-directory: cli + run: node dist/cli.js --help + + - name: Validate CLI new commands + working-directory: cli + run: | + node dist/cli.js chart --json + node dist/cli.js usage-analysis --json + + # ── Bundle CLI as Windows .exe (Node.js SEA) ─────────────────────────── + + - name: Bundle CLI as single executable + working-directory: cli + shell: pwsh + run: | + & pwsh -NoProfile -File bundle-exe.ps1 -SkipBuild + if ($LASTEXITCODE -ne 0) { throw "bundle-exe.ps1 failed" } + + - name: Verify CLI exe was produced + working-directory: cli + shell: pwsh + run: | + $exe = "dist\copilot-token-tracker.exe" + if (-not (Test-Path $exe)) { throw "CLI exe not found at $exe" } + $sizeMB = [math]::Round((Get-Item $exe).Length / 1MB, 1) + Write-Host "✅ CLI exe: $exe ($sizeMB MB)" + + # ── Copy CLI bundle into VS extension project ────────────────────────── + + - name: Copy CLI exe + wasm to cli-bundle/ + shell: pwsh + run: | + $vsCliDir = "visualstudio-extension\src\CopilotTokenTracker\cli-bundle" + New-Item -ItemType Directory -Path $vsCliDir -Force | Out-Null + Copy-Item "cli\dist\copilot-token-tracker.exe" "$vsCliDir\copilot-token-tracker.exe" -Force + Copy-Item "cli\dist\sql-wasm.wasm" "$vsCliDir\sql-wasm.wasm" -Force + Write-Host "✅ Copied cli-bundle assets" + + # ── Build webview bundles (chart.js, usage.js, etc.) ────────────────── + + - name: Build VS Code extension webview bundles + working-directory: vscode-extension + run: npm run package + + - name: Copy webview bundles to VS extension project + shell: pwsh + run: | + $src = "vscode-extension\dist\webview" + $dst = "visualstudio-extension\src\CopilotTokenTracker\webview" + if (Test-Path $dst) { Remove-Item $dst -Recurse -Force } + Copy-Item $src $dst -Recurse -Force + Write-Host "✅ Copied webview bundles:" + Get-ChildItem $dst -Filter "*.js" | ForEach-Object { Write-Host " $($_.Name)" } + + # ── Build Visual Studio extension (MSBuild / VSSDK) ─────────────────── + + - name: Add MSBuild to PATH + uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0 + + - name: Restore NuGet packages + working-directory: visualstudio-extension + run: nuget restore CopilotTokenTracker.sln + + - name: Build solution (Release) + working-directory: visualstudio-extension + run: msbuild CopilotTokenTracker.sln /p:Configuration=Release /t:Build /v:minimal + + # ── Collect the produced .vsix ───────────────────────────────────────── + + - name: Find .vsix artifact + id: vsix + shell: pwsh + run: | + $vsix = Get-ChildItem -Path "visualstudio-extension" -Filter "*.vsix" -Recurse | + Sort-Object LastWriteTime -Descending | + Select-Object -First 1 + if (-not $vsix) { throw "No .vsix file produced" } + $sizeMB = [math]::Round($vsix.Length / 1MB, 1) + Write-Host "✅ VSIX: $($vsix.FullName) ($sizeMB MB)" + echo "vsix_path=$($vsix.FullName)" >> $env:GITHUB_OUTPUT + echo "vsix_name=$($vsix.Name)" >> $env:GITHUB_OUTPUT + + - name: Upload .vsix as artifact + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: copilot-token-tracker-vs-${{ github.sha }} + path: ${{ steps.vsix.outputs.vsix_path }} + retention-days: 30 + + # ── (Optional) Publish to VS Marketplace ────────────────────────────── + + - name: Publish to Visual Studio Marketplace + if: github.event_name == 'workflow_dispatch' && inputs.publish_marketplace == true + shell: pwsh + env: + VS_MARKETPLACE_PAT: ${{ secrets.VS_MARKETPLACE_PAT }} + run: | + if (-not $env:VS_MARKETPLACE_PAT) { + Write-Error "❌ VS_MARKETPLACE_PAT secret is not configured." + exit 1 + } + $vsix = "${{ steps.vsix.outputs.vsix_path }}" + Write-Host "Publishing $vsix to Visual Studio Marketplace..." + & npx @vscode/vsce publish --packagePath $vsix --pat $env:VS_MARKETPLACE_PAT + if ($LASTEXITCODE -ne 0) { throw "Marketplace publish failed" } + Write-Host "✅ Published to Visual Studio Marketplace" + + # ── Summary ──────────────────────────────────────────────────────────── + + - name: Build summary + if: always() + shell: pwsh + run: | + $vsixName = "${{ steps.vsix.outputs.vsix_name }}" + if ($vsixName) { + @" + ## ✅ Visual Studio Extension Built Successfully + + | Item | Value | + |------|-------| + | VSIX | ``$vsixName`` | + | Trigger | ``${{ github.event_name }}`` | + | Commit | ``${{ github.sha }}`` | + "@ >> $env:GITHUB_STEP_SUMMARY + } else { + "## ❌ Build failed — no .vsix produced" >> $env:GITHUB_STEP_SUMMARY + } diff --git a/.gitignore b/.gitignore index 10ba0557..8ffe0293 100644 --- a/.gitignore +++ b/.gitignore @@ -9,22 +9,12 @@ node_modules .github/scripts/scraped-models.json example.json log-example.txt - -# Visual Studio extension generated files -visualstudio-extension/**/obj/ -visualstudio-extension/**/bin/ visualstudio-extension/.vs/ -visualstudio-extension/**/obj/** -visualstudio-extension/**/bin/** - -# Accidental nested Visual Studio extension workspace/build output -visualstudio-extension/visualstudio-extension/ -visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/MessagePack.Annotations.dll -visualstudio-extension/src/CopilotTokenTracker/bin/Release/net472/System.Buffers.dll - -# Bundled CLI exe (build artifact copied from cli/dist/) +visualstudio-extension/src/CopilotTokenTracker/bin/ +visualstudio-extension/src/CopilotTokenTracker/obj/ visualstudio-extension/src/CopilotTokenTracker/cli-bundle/ - -# Node.js SEA build artifacts -cli/dist/sea-prep.blob -cli/dist/copilot-token-tracker.exe +visualstudio-extension/src/CopilotTokenTrackerRunner/bin/ +visualstudio-extension/src/CopilotTokenTrackerRunner/obj/ +visualstudio-extension/src/CopilotTokenTrackerRunner/cli-bundle/ +visualstudio-extension/visualstudio-extension/src/CopilotTokenTrackerRunner/obj/ +visualstudio-extension/src/CopilotTokenTracker/obj/project.nuget.cache diff --git a/.vscode/settings.json b/.vscode/settings.json index dfa27523..c6be1d3b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,6 +24,10 @@ "approve": true, "matchCommandLine": true }, - "npx eslint": true + "npx eslint": true, + "dotnet build": true, + ".\\build.ps1": true, + "npm run build": true, + "npm run compile": true } } \ No newline at end of file diff --git a/README.md b/README.md index 5c95635f..4138fd35 100644 --- a/README.md +++ b/README.md @@ -1,283 +1,64 @@ # GitHub Copilot Token Tracker -A VS Code extension that shows your daily and monthly GitHub Copilot estimated token usage and AI Fluency. It reads the local session logs and computes local aggregates. +Track your GitHub Copilot token usage and AI Fluency across VS Code, Visual Studio, and the command line. All data is read from local session logs — nothing leaves your machine unless you opt in to cloud sync. -## Supported AI engineering tools: +[![Build](https://github.com/rajbos/github-copilot-token-usage/actions/workflows/build.yml/badge.svg)](https://github.com/rajbos/github-copilot-token-usage/actions/workflows/build.yml) + +## Supported AI engineering tools -- VS Code + GitHub Copilot -- VS Code Insiders + GitHub Copilot +- VS Code + GitHub Copilot (Stable, Insiders, Exploration) +- VSCodium / Cursor - GitHub Copilot CLI -- OpenCode + GitHub Copilot (not tested with other AI tooling) +- OpenCode + GitHub Copilot - Crush + GitHub Copilot - Visual Studio + GitHub Copilot -### CLI - -We also added a CLI that you can run as an npx package: -```bash -npx copilot-token-tracker usage -``` - -For screenshots and examples of the CLI output, see the [CLI README](cli/README.md). - -## Features - -- **Real-time Token Tracking**: Displays current day and month token usage in the status bar -- **Copilot Fluency Score**: Maturity model dashboard with 4 stages across 6 categories to track your Copilot mastery -- **Export Fluency Score**: Export your Fluency Score as a PNG image or comprehensive multi-page PDF report -- **Social Media Sharing**: Share your Fluency Score achievements on LinkedIn, Bluesky, and Mastodon with #CopilotFluencyScore -- **Usage Analysis Dashboard**: Comprehensive analytics on how you use Copilot (modes, tool calls, context references, MCP tools) -- **Copilot Fluency Score**: Evaluate your proficiency across 6 categories with actionable tips for improvement -- **Fluency Level Viewer**: Debug-only tool to explore all scoring rules and thresholds (requires active debugger) -- **Automatic Updates**: Refreshes every 5 minutes to show the latest usage -- **Click to Refresh**: Click the status bar item to manually refresh the token count -- **Smart Estimation**: Uses character-based analysis with model-specific ratios for token estimation -- **Intelligent Caching**: Caches processed session files to speed up subsequent updates when files haven't changed -- **Diagnostic Reporting**: Generate comprehensive diagnostic reports to help troubleshoot issues - -### Cloud Backend (Opt-in) - -- **Cross-device analytics**: Syncs daily aggregates from all machines into a user-owned Azure Storage account -- **Azure Storage Tables backend**: Stores/query pre-aggregated rollups (not raw prompts) -- **Secure by default**: Uses **Microsoft Entra ID (Azure RBAC)** via `DefaultAzureCredential` (no secrets in settings) -- **Advanced auth option**: Optional Storage **Shared Key** mode stored in VS Code SecretStorage (never in Settings Sync) -- **Graceful fallback**: If Azure is unavailable or permissions are missing, local-only mode keeps working - -### Reporting & Filtering - -- **Details view filters**: Lookback window + Model + Workspace + Machine + (optional) User filters -- **Export**: Export the current filtered view as JSON (for spreadsheets / dashboards / scripts) -- **Status bar scope selector** *(Planned)*: Toggle **All machines** | **This machine** | **Current workspace** - -### Team / Multi-user (Optional) - -- **Shared storage for teams**: Multiple developers can write to the same Azure Storage account/dataset for centralized reporting -- **Explicit consent gating**: No per-user identifier is written unless you explicitly enable team sharing -- **Governed identity modes**: Pseudonymous hashing, validated team aliases, or Entra object IDs -- **User filtering**: When enabled, aggregates can be filtered by user in the details view - - -## Status Bar Display - -The extension shows token usage in the format: `# | ` in the status bar: - -![Status Bar Display](docs/images/01%20Toolbar%20info.png) +--- -Hovering on the status bar item shows a detailed breakdown of token usage: -![Hover Details](docs/images/02%20Popup.png) +## Pick your tool -Clicking the status bar item opens a detailed view with comprehensive statistics: -![Detailed View](docs/images/03%20Detail%20panel.png) +### 🖥️ VS Code Extension -Chart overview per day, with option to view per model as well: -![Chart View](docs/images/04%20Chart.png) +Real-time token usage in the status bar, fluency score dashboard, usage analysis, cloud sync, and more. -Or per supported editor: -![Chart View](docs/images/04%20Chart_02.png) -Supported editors are: - -- `Code` — Stable VS Code release -- `Code - Insiders` — VS Code Insiders (preview) builds -- `Code - Exploration` — Exploration/pre-release builds -- `VSCodium` — Community-built VS Code distribution -- `Cursor` — Cursor editor -- `OpenCode` — Terminal-based coding agent -- `Crush` — Terminal-based coding agent -- `Visual Studio` — Visual Studio IDE (2022+); token counts are **estimated** from prompt and response text length — actual LLM token usage is not stored in VS session files - -## Performance Optimization - -The extension uses intelligent caching to improve performance: - -- **File Modification Tracking**: Only re-processes session files when they have been modified since the last read -- **Efficient Cache Management**: Stores calculated token counts, interaction counts, and model usage data for each file -- **Memory Management**: Automatically limits cache size to prevent memory issues (maximum 1000 cached files) -- **Cache Statistics**: Logs cache hit/miss rates to help monitor performance improvements - -This caching significantly reduces the time needed for periodic updates, especially when you have many chat session files. - -## Cloud Backend (Azure Storage) - -The cloud backend is **disabled by default**. When enabled, the extension periodically uploads daily aggregates to Azure Storage Tables and queries them for cross-device reporting. - -### Session Log Upload (Optional) - -The extension can also upload your local session log files to Azure Blob Storage. This enables: -- **Team collaboration**: Share logs with your team for analysis -- **Persistent storage**: Keep logs beyond local VS Code limits -- **Coding agent access**: Make logs available to GitHub Copilot Coding Agent as reference material - -To enable log file uploads: -```json -{ - "copilotTokenTracker.backend.blobUploadEnabled": true, - "copilotTokenTracker.backend.blobContainerName": "copilot-session-logs", - "copilotTokenTracker.backend.blobUploadFrequencyHours": 24 -} +```bash +# Install from the VS Code Marketplace +ext install RobBos.copilot-token-tracker ``` -See [Blob Upload Guide](docs/BLOB-UPLOAD.md) for detailed setup instructions and security considerations. - -### Authentication - -- **Recommended**: Entra ID (Azure RBAC) using `DefaultAzureCredential` (Azure CLI / VS Code Azure Account / Managed Identity) -- **Advanced**: Storage Shared Key (stored in VS Code SecretStorage, per-machine, does not sync) - -### Required Azure Roles (Typical) - -Data-plane (tables): -- **Storage Table Data Contributor** (sync/write) -- **Storage Table Data Reader** (read-only reporting) - -Management-plane (wizard/provisioning): -- **Contributor** (or a more scoped role) at subscription or resource group scope - -Important: management roles do not automatically grant data-plane access. +📖 [Full VS Code extension documentation](docs/vscode-extension/README.md) -### Team Sharing with a Shared Storage Account +--- -To share usage with team members, configure all participants to point at the same Azure Storage account and `datasetId`. +### 🏗️ Visual Studio Extension -- **Team lead / admins**: typically provision the storage account and tables, and grant data-plane roles. -- **Contributors (writers)**: need **Storage Table Data Contributor** to upload aggregates. -- **Readers (reporting)**: can be granted **Storage Table Data Reader** for read-only reporting. -- **Privacy guardrail**: per-user identity is only included when the developer has explicitly enabled team sharing; otherwise their aggregates are stored without a user identifier. +Token usage tracking inside Visual Studio 2022+, reading Copilot Chat session files directly. -### Commands +> Counts are **estimated** — VS session files do not store raw LLM token counts. -- `Copilot Token Tracker: Configure Backend` — guided setup wizard for Azure resources and settings -- `Copilot Token Tracker: Copy Backend Config` — copies shareable config without secrets -- `Copilot Token Tracker: Export Current View` — exports filtered backend/local view as JSON +📖 [Full Visual Studio extension documentation](docs/visual-studio/README.md) -Shared Key management (only if using shared-key auth): -- `Copilot Token Tracker: Set Backend Shared Key` -- `Copilot Token Tracker: Rotate Backend Shared Key` -- `Copilot Token Tracker: Clear Backend Shared Key` +--- -Ask: -- `Copilot Token Tracker: Ask About Usage` +### ⌨️ CLI -### Backend settings configurator +Run anywhere with Node.js — no editor required. Get usage stats, fluency scores, and environmental impact from the terminal. -Use **Copilot Token Tracker: Configure Backend** to open the settings panel with five sections: Overview, Sharing, Azure, Advanced, and Review & Apply. - -**Privacy profiles** (Sharing section): -- **Off** – All data stays local; nothing syncs to Azure -- **Solo** – Private cloud storage; only you can access your data -- **Team Anonymized** – Hashed workspace/machine IDs; no names stored; suitable for privacy-first team analytics -- **Team Pseudonymous** – Stable alias (e.g., "dev-001") with hashed IDs; no real names -- **Team Identified** – Team alias or Entra object ID included; full workspace names available - -**Guided setup workflow**: -1. Run **Copilot Token Tracker: Configure Backend** command -2. Navigate to Sharing section to choose your privacy profile -3. Go to Azure section, enable backend, and use **Open configure walkthrough** to provision Azure resources -4. Advanced section sets dataset ID (default examples: "my-team-copilot") and lookback days (7/30/90) -5. Review & Apply confirms your changes with explicit consent for privacy upgrades -6. Click **Save & Apply** to enable backend sync - -**Privacy gates**: Upgrading to a more permissive profile or enabling workspace/machine names triggers an explicit consent dialog. All settings are validated before saving (dataset/table names use alphanumeric rules, lookback days must be 1–90). - -**Authentication**: Supports **Entra ID** (role-based access, no secrets stored) or **Storage Shared Key** (stored securely in VS Code SecretStorage, never synced). Test Connection verifies credentials (disabled when offline). - -**Offline support**: You can edit and save settings locally when offline. Shared Key storage is per-machine only and never leaves the device. - -**Accessibility**: The configurator includes ARIA labels on all interactive elements, proper heading hierarchy, keyboard navigation support, and screen-reader-friendly status updates. All form fields have clear labels and error messages are programmatically associated with inputs. - -## Diagnostic Reporting - -If you experience issues with the extension, you can generate a diagnostic report to help troubleshoot problems. The diagnostic report includes: - -- Extension and VS Code version information -- System details (OS, Node version, environment) -- GitHub Copilot extension status and versions -- Session file discovery results (locations only, no content) -- Aggregated token usage statistics -- Cache performance metrics - -**To generate a diagnostic report:** - -1. Click the status bar item to open the detailed view -2. Click the **"Diagnostics"** button at the bottom -3. Review the report in the new panel -4. Use the **"Copy to Clipboard"** button to copy the report for sharing -5. Use the **"Open GitHub Issue"** button to submit an issue with the report - -Alternatively, you can use the Command Palette: - -- Press `Ctrl+Shift+P` (Windows/Linux) or `Cmd+Shift+P` (macOS) -- Type "Copilot Token Tracker: Generate Diagnostic Report" -- Press Enter - -**Note**: The diagnostic report does not include any of your code or conversation content. It only includes file locations, sizes, and aggregated statistics. - -## Usage Analysis Dashboard - -The extension includes a comprehensive usage analysis dashboard that helps you understand how you interact with GitHub Copilot. - -**Tracked Metrics:** - -- **Interaction Modes**: Ask (chat), Edit (code modifications), Agent (autonomous tasks) -- **Context References**: #file, #selection, #symbol, #codebase, @workspace, @terminal, @vscode -- **Tool Calls**: Functions and tools invoked by Copilot -- **MCP Tools**: Model Context Protocol server and tool usage - -**To access the dashboard:** - -1. Click the status bar item to open the details panel -2. Click the **"📊 Usage Analysis"** button -3. Or use the Command Palette: "Copilot Token Tracker: Show Usage Analysis Dashboard" - -The dashboard provides insights into your prompting patterns and helps you optimize your Copilot workflow. For detailed information about the metrics and how to interpret them, see [Usage Analysis Documentation](docs/USAGE-ANALYSIS.md). - -## Copilot Fluency Score & Level Viewer - -The extension includes a **Copilot Fluency Score** dashboard that evaluates your GitHub Copilot proficiency across 6 categories with 4 stages each (Skeptic → Explorer → Collaborator → Strategist). - -**Categories Evaluated:** -- 💬 **Prompt Engineering**: How you structure prompts and use modes -- 📎 **Context Engineering**: Your use of context references -- 🤖 **Agentic**: Agent mode and autonomous feature usage -- 🔧 **Tool Usage**: Built-in tools and MCP server integration -- ⚙️ **Customization**: Repository customization and model selection -- 🔄 **Workflow Integration**: Regular usage and mode diversity - -**Fluency Level Viewer (Debug Mode)** - -A debug-only tool that displays all fluency score rules, thresholds, and tips for each category and stage. This feature helps developers understand the scoring system and what actions trigger different fluency levels. - -- **Access**: Only available when a VS Code debugger is active -- **Features**: View all stage requirements and advancement tips for each category -- **Use Cases**: Test scoring logic, debug scoring issues, plan improvements - -For detailed information, see [Fluency Level Viewer Documentation](docs/FLUENCY-LEVEL-VIEWER.md). - -![Screenshot of the fluency score view, showing the score accross the 6 different dimensions](/docs/images/05%20Fluency%20Score.png) - -## Known Issues +```bash +npx copilot-token-tracker-cli stats +``` -- The numbers shown use **actual token counts** from the LLM API when available in session logs (e.g. Copilot Chat JSONL sessions and OpenCode sessions). When actual token data is not available, the extension falls back to **estimates** computed from the text in the session logs. -- If you use multiple machines (or multiple VS Code profiles/windows), local-only mode will only reflect what’s on the current machine. -- The cloud backend improves cross-device coverage, but it still depends on what Copilot logs exist on each machine. -- Premium Requests are not tracked and shown in this extension -- For sessions where actual token counts are unavailable, the numbers are based on the amount of text in the chat sessions. We use an average character-to-token ratio for each model to estimate the token count, which is visible in the detail panel when you click on the status bar item. -- Same for the information on amount of trees that are needed to compensate your usage. -- Dev Containers: Copilot Chat session logs are written to the host machine's user profile (outside the container). On Linux, this is typically under `~/.config/Code/` (or the editor variant) within the host, not the container. The extension currently does not read from host paths, so token tracking will not work inside a Dev Container. If needed, run VS Code locally (outside the container) or mount the host user data directories into the container at the expected locations. PRs to add native host-path support are welcome. -- Windows with WSL: The extension can only show information when VS Code, Copilot CLI, and OpenCode run in the same environment as the VS Code host. If you run VS Code on Windows but run these tools inside WSL, the extension cannot find the session data because the file paths are different. To track usage properly, either run VS Code from within WSL using the [Remote - WSL extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) (recommended), or run all tools natively on Windows. See the [VS Code WSL documentation](https://code.visualstudio.com/docs/remote/wsl) for setup instructions. +📖 [Full CLI documentation](docs/cli/README.md) -> **⚠️ Warning** -> -> Some discovery paths for session logs can vary by OS and editor variant. If you run into missing session files on your platform, please open an issue with a diagnostic report. +--- ## Contributing -[![Build](https://github.com/rajbos/github-copilot-token-usage/actions/workflows/build.yml/badge.svg)](https://github.com/rajbos/github-copilot-token-usage/actions/workflows/build.yml) - Interested in contributing? Check out our [Contributing Guide](CONTRIBUTING.md) for: -- 🐳 **DevContainer Setup** - Isolated development environment (perfect for AI-assisted development) -- 🔧 **Build & Debug Instructions** - How to run and test the extension locally -- 📋 **Code Guidelines** - Project structure and development principles -- 🚀 **Release Process** - CI/CD pipelines and automated releases +- 🐳 **DevContainer Setup** — Isolated development environment +- 🔧 **Build & Debug Instructions** — How to run and test locally +- 📋 **Code Guidelines** — Project structure and development principles +- 🚀 **Release Process** — CI/CD pipelines and automated releases -We welcome contributions of all kinds - bug fixes, new features, documentation improvements, and more! +We welcome contributions of all kinds — bug fixes, new features, documentation improvements, and more! diff --git a/cli/README.md b/cli/README.md index 67a34f80..60ddf555 100644 --- a/cli/README.md +++ b/cli/README.md @@ -1,92 +1,18 @@ # Copilot Token Tracker CLI -Command-line interface for analyzing GitHub Copilot token usage from local session files. Works anywhere Copilot Chat stores its session data. - -## Quick Start - -```bash -# Run directly with npx (no install required) -npx copilot-token-tracker-cli stats - -# Or install globally -npm install -g copilot-token-tracker-cli -copilot-token-tracker stats -``` - -## Commands - -### `stats` - Session Overview - -Show discovered session files, sessions, chat turns, and token counts. - -```bash -copilot-token-tracker stats -copilot-token-tracker stats --verbose # Show per-folder breakdown -``` - -![Terminal Statistics](../docs/images/Terminal%20Statistics.png) - -### `usage` - Token Usage Report - -Show token usage broken down by time period. - -```bash -copilot-token-tracker usage -copilot-token-tracker usage --models # Show per-model breakdown -copilot-token-tracker usage --cost # Show estimated cost -``` - -![Terminal Usage](../docs/images/Terminal%20Usage.png) - -### `environmental` - Environmental Impact - -Show environmental impact of your Copilot usage (CO₂ emissions, water usage, tree equivalents). - -```bash -copilot-token-tracker environmental -copilot-token-tracker env # Short alias -``` - -### `fluency` - Fluency Score - -Show your Copilot Fluency Score across multiple categories (Prompt Engineering, Context Engineering, Agentic, Tool Usage, Customization, Team Collaboration). - -```bash -copilot-token-tracker fluency -copilot-token-tracker fluency --tips # Show improvement tips, if there are any -``` - -### `diagnostics` - Search Locations & Stats - -Show all locations searched for session files, whether each path exists, and per-location stats (files, sessions, chat turns, tokens). - -```bash -copilot-token-tracker diagnostics -``` - -![Terminal Diagnostics](../docs/images/Terminal%20Diagnostitcs.png) - -## Data Sources - -The CLI scans the same session files that the [Copilot Token Tracker VS Code extension](https://marketplace.visualstudio.com/items?itemName=RobBos.copilot-token-tracker) uses: - -- **VS Code** (Stable, Insiders, Exploration) workspace and global storage -- **VSCodium** and **Cursor** editor sessions -- **VS Code Remote** / Codespaces sessions -- **Copilot CLI** agent mode sessions -- **OpenCode** sessions (JSON and SQLite) +> For user-facing documentation and command examples, see [docs/cli/README.md](../docs/cli/README.md). ## Development ```bash # From the repository root -npm run cli:build # Build the CLI -npm run cli:stats # Run stats command -npm run cli:usage # Run usage command -npm run cli:environmental # Run environmental command -npm run cli:fluency # Run fluency command -npm run cli:diagnostics # Run diagnostics command -npm run cli -- --help # Run any CLI command +npm run cli:build # Build the CLI +npm run cli:stats # Run stats command +npm run cli:usage # Run usage command +npm run cli:environmental # Run environmental command +npm run cli:fluency # Run fluency command +npm run cli:diagnostics # Run diagnostics command +npm run cli -- --help # Run any CLI command ``` ## Requirements @@ -96,4 +22,4 @@ npm run cli -- --help # Run any CLI command ## License -MIT - See [LICENSE](../LICENSE) for details. +MIT — see [LICENSE](../LICENSE) for details. diff --git a/cli/src/commands/chart.ts b/cli/src/commands/chart.ts new file mode 100644 index 00000000..46cd97c2 --- /dev/null +++ b/cli/src/commands/chart.ts @@ -0,0 +1,26 @@ +/** + * `chart` command - Output pre-computed chart data (daily token usage for the last 30 days). + */ +import { Command } from 'commander'; +import { discoverSessionFiles, calculateDailyStats, buildChartPayload } from '../helpers'; + +export const chartCommand = new Command('chart') + .description('Output daily token usage data for the chart webview') + .option('--json', 'Output raw JSON (for machine consumption)') + .action(async (options) => { + if (!options.json) { + // Human-readable not implemented yet; just emit JSON + process.stderr.write('Use --json flag for chart data output\n'); + return; + } + + const files = await discoverSessionFiles(); + if (files.length === 0) { + process.stdout.write(JSON.stringify({ labels: [], tokensData: [], sessionsData: [], modelDatasets: [], editorDatasets: [], editorTotalsMap: {}, repositoryDatasets: [], repositoryTotalsMap: {}, dailyCount: 0, totalTokens: 0, avgTokensPerDay: 0, totalSessions: 0, lastUpdated: new Date().toISOString(), backendConfigured: false })); + return; + } + + const { labels, days } = await calculateDailyStats(files); + const payload = buildChartPayload(labels, days); + process.stdout.write(JSON.stringify(payload)); + }); diff --git a/cli/src/commands/fluency.ts b/cli/src/commands/fluency.ts index a77fbf51..08bfb7ec 100644 --- a/cli/src/commands/fluency.ts +++ b/cli/src/commands/fluency.ts @@ -1,39 +1,122 @@ /** * `fluency` command - Show Copilot Fluency Score based on usage patterns. */ +import * as fs from 'fs'; +import * as path from 'path'; import { Command } from 'commander'; import chalk from 'chalk'; import { discoverSessionFiles, calculateUsageAnalysisStats, fmt } from '../helpers'; import { calculateMaturityScores } from '../../../vscode-extension/src/maturityScoring'; +import type { WorkspaceCustomizationMatrix } from '../../../vscode-extension/src/types'; + +/** + * Builds a WorkspaceCustomizationMatrix by deriving workspace folder paths from + * VS Code-style session file paths (workspaceStorage//chatSessions/), + * then checking each workspace for .github/copilot-instructions.md or agents.md. + * + * Non-VS Code session files (Crush, OpenCode, Copilot CLI, Visual Studio) are skipped. + */ +async function buildCustomizationMatrix(sessionFiles: string[]): Promise { + const workspacePaths = new Set(); + + for (const sessionFile of sessionFiles) { + // Expected structure: .../workspaceStorage//chatSessions/ + // Go up 2 levels to reach the hash directory, then read workspace.json + const chatSessionsDir = path.dirname(sessionFile); + if (path.basename(chatSessionsDir) !== 'chatSessions') { continue; } + const hashDir = path.dirname(chatSessionsDir); + const workspaceJsonPath = path.join(hashDir, 'workspace.json'); + + try { + if (!fs.existsSync(workspaceJsonPath)) { continue; } + const content = JSON.parse(await fs.promises.readFile(workspaceJsonPath, 'utf-8')); + const folderUri: string | undefined = content.folder; + if (!folderUri || !folderUri.startsWith('file://')) { continue; } + + // Convert file URI to a local path, handling Windows drive letters + let folderPath = decodeURIComponent(folderUri.replace(/^file:\/\//, '')); + // On Windows, file:///C:/... becomes /C:/... — strip the leading slash + if (/^\/[A-Za-z]:/.test(folderPath)) { folderPath = folderPath.slice(1); } + workspacePaths.add(folderPath); + } catch { + // Skip unreadable workspace.json files + } + } + + if (workspacePaths.size === 0) { return undefined; } + + let workspacesWithIssues = 0; + for (const wsPath of workspacePaths) { + try { + const hasInstructions = fs.existsSync(path.join(wsPath, '.github', 'copilot-instructions.md')); + const hasAgentsMd = fs.existsSync(path.join(wsPath, 'agents.md')); + if (!hasInstructions && !hasAgentsMd) { workspacesWithIssues++; } + } catch { + workspacesWithIssues++; // Count inaccessible workspaces as lacking customization + } + } + + return { + customizationTypes: [], + workspaces: [], + totalWorkspaces: workspacePaths.size, + workspacesWithIssues, + }; +} export const fluencyCommand = new Command('fluency') .description('Show your Copilot Fluency Score and improvement tips') .option('-t, --tips', 'Show improvement tips for each category') + .option('--json', 'Output raw JSON (for machine consumption)') .action(async (options) => { - console.log(chalk.bold.cyan('\n🎯 Copilot Token Tracker - Fluency Score\n')); + if (!options.json) { + console.log(chalk.bold.cyan('\n🎯 Copilot Token Tracker - Fluency Score\n')); + } - process.stdout.write(chalk.dim('Scanning for session files...')); + if (!options.json) { process.stdout.write(chalk.dim('Scanning for session files...')); } const files = await discoverSessionFiles(); - process.stdout.write('\r' + ' '.repeat(50) + '\r'); + if (!options.json) { process.stdout.write('\r' + ' '.repeat(50) + '\r'); } if (files.length === 0) { - console.log(chalk.yellow('⚠️ No session files found.')); + if (options.json) { + process.stdout.write('{}'); + } else { + console.log(chalk.yellow('⚠️ No session files found.')); + } return; } - process.stdout.write(chalk.dim('Analyzing usage patterns...')); + if (!options.json) { process.stdout.write(chalk.dim('Analyzing usage patterns...')); } // Calculate usage analysis stats const usageStats = await calculateUsageAnalysisStats(files); - process.stdout.write('\r' + ' '.repeat(50) + '\r'); + if (!options.json) { process.stdout.write('\r' + ' '.repeat(50) + '\r'); } + + // Build a customization matrix from workspace folder paths inferred from session file paths. + // This matches what the VS Code extension does (scanning workspace folders for instructions files). + const customizationMatrix = await buildCustomizationMatrix(files); // Calculate maturity scores const scores = await calculateMaturityScores( - undefined, + customizationMatrix, async () => usageStats, false ); + if (options.json) { + // Machine-readable output: emit pure JSON to stdout and exit + const payload = { + overallStage: scores.overallStage, + overallLabel: scores.overallLabel, + categories: scores.categories, + period: scores.period, + lastUpdated: scores.lastUpdated, + backendConfigured: false, + }; + process.stdout.write(JSON.stringify(payload)); + return; + } + // Overall score const stageColors: Record = { 1: chalk.red, diff --git a/cli/src/commands/usage-analysis.ts b/cli/src/commands/usage-analysis.ts new file mode 100644 index 00000000..26a925d0 --- /dev/null +++ b/cli/src/commands/usage-analysis.ts @@ -0,0 +1,36 @@ +/** + * `usage-analysis` command - Output full usage analysis stats for the usage webview. + */ +import { Command } from 'commander'; +import { discoverSessionFiles, calculateUsageAnalysisStats } from '../helpers'; + +export const usageAnalysisCommand = new Command('usage-analysis') + .description('Output usage analysis stats for the usage analysis webview') + .option('--json', 'Output raw JSON (for machine consumption)') + .action(async (options) => { + if (!options.json) { + process.stderr.write('Use --json flag for usage analysis data output\n'); + return; + } + + const files = await discoverSessionFiles(); + const now = new Date(); + if (files.length === 0) { + process.stdout.write(JSON.stringify({ + today: {}, last30Days: {}, month: {}, + locale: Intl.DateTimeFormat().resolvedOptions().locale, + lastUpdated: now.toISOString(), + backendConfigured: false, + })); + return; + } + + const stats = await calculateUsageAnalysisStats(files); + const payload = { + ...stats, + locale: Intl.DateTimeFormat().resolvedOptions().locale, + lastUpdated: now.toISOString(), + backendConfigured: false, + }; + process.stdout.write(JSON.stringify(payload)); + }); diff --git a/docs/cli/README.md b/docs/cli/README.md new file mode 100644 index 00000000..c831fc58 --- /dev/null +++ b/docs/cli/README.md @@ -0,0 +1,187 @@ +# Copilot Token Tracker — CLI + +Command-line interface for analyzing GitHub Copilot token usage from local session files. Works anywhere Copilot Chat stores its session data — no VS Code required. + +## Quick Start + +```bash +# Run directly with npx (no install required) +npx copilot-token-tracker-cli stats + +# Or install globally +npm install -g copilot-token-tracker-cli +copilot-token-tracker stats +``` + +--- + +## Commands + +### `stats` — Session Overview + +Show discovered session files, sessions, chat turns, and token counts. + +```bash +copilot-token-tracker stats +copilot-token-tracker stats --verbose # Show per-folder breakdown +``` + +``` +GitHub Copilot Token Tracker - Session Statistics +================================================== + +Editor Breakdown: + Code (VS Code) 42 files │ 318 sessions │ 4,821 turns │ 2.1M tokens + Code - Insiders 8 files │ 61 sessions │ 892 turns │ 401K tokens + OpenCode 3 files │ 18 sessions │ 204 turns │ 87K tokens + +────────────────────────────────────────────────────────────────────────────── +Total 53 files │ 397 sessions │ 5,917 turns │ 2.6M tokens +``` + +--- + +### `usage` — Token Usage Report + +Show token usage broken down by time period. + +```bash +copilot-token-tracker usage +copilot-token-tracker usage --models # Show per-model breakdown +copilot-token-tracker usage --cost # Show estimated cost +``` + +``` +GitHub Copilot Token Tracker - Token Usage +========================================== + +Period Input Tokens Output Tokens Total Tokens +────────────────────────────────────────────────────────── +Today 8,432 12,104 20,536 +Last 7 days 52,871 74,209 127,080 +Last 30 days 218,540 301,883 520,423 +All time 1,841,200 2,312,650 4,153,850 + + --models breakdown (last 30 days): + gpt-4o 312,540 tokens + claude-3.5-sonnet 98,203 tokens + o3-mini 71,801 tokens + gemini-2.0-flash 37,879 tokens +``` + +--- + +### `environmental` — Environmental Impact + +Show the environmental impact of your Copilot usage (CO₂ emissions, water usage, tree equivalents). + +```bash +copilot-token-tracker environmental +copilot-token-tracker env # Short alias +``` + +``` +GitHub Copilot Token Tracker - Environmental Impact +==================================================== + +Based on your last 30 days of usage (520,423 tokens): + + CO₂ emissions ~ 0.42 kg CO₂e + Water usage ~ 0.63 L + Tree equivalent ~ 0.02 trees/year needed to offset + +All figures are estimates based on published AI energy-use research. +``` + +--- + +### `fluency` — Fluency Score + +Show your Copilot Fluency Score across multiple categories (Prompt Engineering, Context Engineering, Agentic, Tool Usage, Customization, Workflow Integration). + +```bash +copilot-token-tracker fluency +copilot-token-tracker fluency --tips # Show improvement tips +``` + +``` +GitHub Copilot Token Tracker - Fluency Score +============================================ + +Overall stage: Collaborator ████████████░░░░ Stage 3 of 4 + + 💬 Prompt Engineering Collaborator ████████████░░░░ + 📎 Context Engineering Explorer ████████░░░░░░░░ + 🤖 Agentic Collaborator ████████████░░░░ + 🔧 Tool Usage Strategist ████████████████ + ⚙️ Customization Explorer ████████░░░░░░░░ + 🔄 Workflow Integration Collaborator ████████████░░░░ + +Run with --tips to see how to advance each category. +``` + +--- + +### `diagnostics` — Search Locations & Stats + +Show all locations searched for session files, whether each path exists, and per-location stats. + +```bash +copilot-token-tracker diagnostics +``` + +``` +GitHub Copilot Token Tracker - Diagnostics +========================================== + +Searching for session files... + + ✔ /home/user/.config/Code/User/workspaceStorage 42 files found + ✔ /home/user/.config/Code/User/globalStorage 3 files found + ✔ /home/user/.config/Code - Insiders/User/workspaceStorage 8 files found + ✗ /home/user/.config/Code - Exploration/... (path does not exist) + ✔ /home/user/.local/share/opencode 3 files found + ✗ /home/user/.config/Cursor/... (path does not exist) + +Total: 56 files across 3 editors +``` + +--- + +## Data Sources + +The CLI scans the same session files as the [VS Code extension](../vscode-extension/README.md): + +- **VS Code** (Stable, Insiders, Exploration) workspace and global storage +- **VSCodium** and **Cursor** editor sessions +- **VS Code Remote** / Codespaces sessions +- **Copilot CLI** agent mode sessions +- **OpenCode** sessions (JSON and SQLite) + +--- + +## Requirements + +- Node.js 18 or later +- GitHub Copilot Chat session files on the local machine + +--- + +## Development + +```bash +# From the repository root +npm run cli:build # Build the CLI +npm run cli:stats # Run stats command +npm run cli:usage # Run usage command +npm run cli:environmental # Run environmental command +npm run cli:fluency # Run fluency command +npm run cli:diagnostics # Run diagnostics command +npm run cli -- --help # Run any CLI command +``` + +--- + +## License + +MIT — see [LICENSE](../../LICENSE) for details. diff --git a/docs/images/VS-Overview.png b/docs/images/VS-Overview.png new file mode 100644 index 0000000000000000000000000000000000000000..f21507f5189adbf9e0b7c4a7350b65c5bf934940 GIT binary patch literal 47061 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 LNkvXXu0mjfr1j$I literal 0 HcmV?d00001 diff --git a/docs/visual-studio/README.md b/docs/visual-studio/README.md new file mode 100644 index 00000000..9e3cd096 --- /dev/null +++ b/docs/visual-studio/README.md @@ -0,0 +1,69 @@ +# Copilot Token Tracker — Visual Studio Extension + +Tracks your GitHub Copilot token usage directly inside Visual Studio 2022+. Reads local Copilot Chat session files and displays usage statistics in a dedicated tool window. + +> **Status**: Early access / active development. Core tracking is functional; some features available in the VS Code extension are still in progress. + +## Install + +The extension will be published to the [Visual Studio Marketplace](https://marketplace.visualstudio.com/vs). Until then, build from source (see [Contributing](../../CONTRIBUTING.md)). + +--- + +## Features + +- Token usage tracking from Visual Studio Copilot Chat session files +- Today's and monthly token counts displayed in a tool window +- Per-model usage breakdown + +> **Note on token counts**: Visual Studio Copilot Chat session files store prompts and responses as plain text but do not include the actual LLM token counts used by the API. All numbers shown are **estimated** from prompt and response text length using model-specific character-to-token ratios. + +--- + +## Screenshots + +Features: + +1. Toolbar with found token counts in the format `X | Y` +Which is today: X tokens | last 30-days: Y tokens + +![Screenshot of the toolbar](../../docs/images/VS-Toolbar.png) + +2. Detailed usage breakdown in the tool window, showing estimated tokens by model and date. + +![Screenshot of the tool window](../../docs/images/VS-Overview.png) +--- + +## Supported VS Versions + +- Visual Studio 2022 (v17.x and later) + +--- + +## Session File Location + +Visual Studio Copilot Chat stores session files in: + +``` +\.vs\.\copilot-chat\\sessions\ +``` + +The extension automatically discovers all sessions under the `.vs` folder for each open solution. + +--- + +## Known Limitations + +- Token counts are **estimated**, not actual LLM API counts. See the note above. +- Features available in the VS Code extension that are not yet available here: + - Cloud backend (Azure Storage sync) + - Usage Analysis Dashboard + - Copilot Fluency Score + - Export / social sharing + - Diagnostic reporting panel + +--- + +## Feedback + +Please open an issue on [GitHub](https://github.com/rajbos/github-copilot-token-usage/issues) for bugs or feature requests specific to the Visual Studio extension. diff --git a/docs/vscode-extension/README.md b/docs/vscode-extension/README.md new file mode 100644 index 00000000..93282612 --- /dev/null +++ b/docs/vscode-extension/README.md @@ -0,0 +1,260 @@ +# Copilot Token Tracker — VS Code Extension + +Tracks your GitHub Copilot token usage directly inside VS Code. Reads local session logs and displays today's and monthly usage in the status bar, with rich detail views and optional cloud sync. + +## Install + +[![VS Code Marketplace](https://img.shields.io/visual-studio-marketplace/v/RobBos.copilot-token-tracker)](https://marketplace.visualstudio.com/items?itemName=RobBos.copilot-token-tracker) + +Search for **"Copilot Token Tracker"** in the VS Code Extensions panel, or install via the Marketplace link above. + +--- + +## Features + +- **Real-time Token Tracking**: Displays current day and month token usage in the status bar +- **Copilot Fluency Score**: Maturity model dashboard with 4 stages across 6 categories to track your Copilot mastery +- **Export Fluency Score**: Export your Fluency Score as a PNG image or comprehensive multi-page PDF report +- **Social Media Sharing**: Share your Fluency Score achievements on LinkedIn, Bluesky, and Mastodon with #CopilotFluencyScore +- **Usage Analysis Dashboard**: Comprehensive analytics on how you use Copilot (modes, tool calls, context references, MCP tools) +- **Fluency Level Viewer**: Debug-only tool to explore all scoring rules and thresholds (requires active debugger) +- **Automatic Updates**: Refreshes every 5 minutes to show the latest usage +- **Click to Refresh**: Click the status bar item to manually refresh the token count +- **Smart Estimation**: Uses character-based analysis with model-specific ratios for token estimation +- **Intelligent Caching**: Caches processed session files to speed up subsequent updates +- **Diagnostic Reporting**: Generate comprehensive diagnostic reports to help troubleshoot issues + +### Cloud Backend (Opt-in) + +- **Cross-device analytics**: Syncs daily aggregates from all machines into a user-owned Azure Storage account +- **Azure Storage Tables backend**: Stores/queries pre-aggregated rollups (not raw prompts) +- **Secure by default**: Uses **Microsoft Entra ID (Azure RBAC)** via `DefaultAzureCredential` (no secrets in settings) +- **Advanced auth option**: Optional Storage **Shared Key** mode stored in VS Code SecretStorage (never in Settings Sync) +- **Graceful fallback**: If Azure is unavailable or permissions are missing, local-only mode keeps working + +### Reporting & Filtering + +- **Details view filters**: Lookback window + Model + Workspace + Machine + (optional) User filters +- **Export**: Export the current filtered view as JSON (for spreadsheets / dashboards / scripts) + +### Team / Multi-user (Optional) + +- **Shared storage for teams**: Multiple developers can write to the same Azure Storage account/dataset for centralized reporting +- **Explicit consent gating**: No per-user identifier is written unless you explicitly enable team sharing +- **Governed identity modes**: Pseudonymous hashing, validated team aliases, or Entra object IDs +- **User filtering**: When enabled, aggregates can be filtered by user in the details view + +--- + +## Status Bar Display + +The extension shows token usage in the format: `# | ` in the status bar: + +![Status Bar Display](../../docs/images/01%20Toolbar%20info.png) + +Hovering on the status bar item shows a detailed breakdown of token usage: + +![Hover Details](../../docs/images/02%20Popup.png) + +Clicking the status bar item opens a detailed view with comprehensive statistics: + +![Detailed View](../../docs/images/03%20Detail%20panel.png) + +Chart overview per day, with option to view per model as well: + +![Chart View](../../docs/images/04%20Chart.png) + +Or per supported editor: + +![Chart View per Editor](../../docs/images/04%20Chart_02.png) + +Supported editors shown in the chart: + +- `Code` — Stable VS Code release +- `Code - Insiders` — VS Code Insiders (preview) builds +- `Code - Exploration` — Exploration/pre-release builds +- `VSCodium` — Community-built VS Code distribution +- `Cursor` — Cursor editor +- `OpenCode` — Terminal-based coding agent +- `Crush` — Terminal-based coding agent +- `Visual Studio` — Visual Studio IDE (2022+); token counts are **estimated** from prompt and response text length + +--- + +## Copilot Fluency Score + +The extension includes a **Copilot Fluency Score** dashboard that evaluates your GitHub Copilot proficiency across 6 categories with 4 stages each (Skeptic → Explorer → Collaborator → Strategist). + +**Categories Evaluated:** +- 💬 **Prompt Engineering**: How you structure prompts and use modes +- 📎 **Context Engineering**: Your use of context references +- 🤖 **Agentic**: Agent mode and autonomous feature usage +- 🔧 **Tool Usage**: Built-in tools and MCP server integration +- ⚙️ **Customization**: Repository customization and model selection +- 🔄 **Workflow Integration**: Regular usage and mode diversity + +![Fluency Score](../../docs/images/05%20Fluency%20Score.png) + +**Fluency Level Viewer (Debug Mode)** + +A debug-only tool that displays all fluency score rules, thresholds, and tips for each category and stage. + +- **Access**: Only available when a VS Code debugger is active +- **Features**: View all stage requirements and advancement tips for each category +- **Use Cases**: Test scoring logic, debug scoring issues, plan improvements + +For detailed scoring rules, see [Fluency Levels Documentation](../FLUENCY-LEVELS.md). + +--- + +## Usage Analysis Dashboard + +The extension includes a comprehensive usage analysis dashboard that helps you understand how you interact with GitHub Copilot. + +**Tracked Metrics:** + +- **Interaction Modes**: Ask (chat), Edit (code modifications), Agent (autonomous tasks) +- **Context References**: `#file`, `#selection`, `#symbol`, `#codebase`, `@workspace`, `@terminal`, `@vscode` +- **Tool Calls**: Functions and tools invoked by Copilot +- **MCP Tools**: Model Context Protocol server and tool usage + +**To access the dashboard:** + +1. Click the status bar item to open the details panel +2. Click the **"📊 Usage Analysis"** button +3. Or use the Command Palette: `Copilot Token Tracker: Show Usage Analysis Dashboard` + +For detailed information about the metrics, see [Usage Analysis Documentation](../USAGE-ANALYSIS.md). + +--- + +## Diagnostic Reporting + +Generate a diagnostic report to help troubleshoot issues. The report includes: + +- Extension and VS Code version information +- System details (OS, Node version, environment) +- GitHub Copilot extension status and versions +- Session file discovery results (locations only, no content) +- Aggregated token usage statistics +- Cache performance metrics + +**To generate a diagnostic report:** + +1. Click the status bar item to open the detailed view +2. Click the **"Diagnostics"** button at the bottom +3. Review the report in the new panel +4. Use the **"Copy to Clipboard"** button to copy the report for sharing +5. Use the **"Open GitHub Issue"** button to submit an issue with the report + +Alternatively, use the Command Palette: +- Press `Ctrl+Shift+P` / `Cmd+Shift+P` +- Type `Copilot Token Tracker: Generate Diagnostic Report` + +> **Note**: The diagnostic report does not include any of your code or conversation content. It only includes file locations, sizes, and aggregated statistics. + +--- + +## Cloud Backend (Azure Storage) + +The cloud backend is **disabled by default**. When enabled, the extension periodically uploads daily aggregates to Azure Storage Tables and queries them for cross-device reporting. + +### Session Log Upload (Optional) + +The extension can also upload your local session log files to Azure Blob Storage. This enables: +- **Team collaboration**: Share logs with your team for analysis +- **Persistent storage**: Keep logs beyond local VS Code limits +- **Coding agent access**: Make logs available to GitHub Copilot Coding Agent as reference material + +To enable log file uploads: +```json +{ + "copilotTokenTracker.backend.blobUploadEnabled": true, + "copilotTokenTracker.backend.blobContainerName": "copilot-session-logs", + "copilotTokenTracker.backend.blobUploadFrequencyHours": 24 +} +``` + +See [Blob Upload Guide](../BLOB-UPLOAD.md) for detailed setup instructions and security considerations. + +### Authentication + +- **Recommended**: Entra ID (Azure RBAC) using `DefaultAzureCredential` (Azure CLI / VS Code Azure Account / Managed Identity) +- **Advanced**: Storage Shared Key (stored in VS Code SecretStorage, per-machine, does not sync) + +### Required Azure Roles + +Data-plane (tables): +- **Storage Table Data Contributor** (sync/write) +- **Storage Table Data Reader** (read-only reporting) + +Management-plane (wizard/provisioning): +- **Contributor** (or a more scoped role) at subscription or resource group scope + +> Important: management roles do not automatically grant data-plane access. + +### Team Sharing + +To share usage with team members, configure all participants to point at the same Azure Storage account and `datasetId`. + +- **Team lead / admins**: provision the storage account and tables, and grant data-plane roles +- **Contributors (writers)**: need **Storage Table Data Contributor** to upload aggregates +- **Readers (reporting)**: can be granted **Storage Table Data Reader** for read-only reporting +- **Privacy guardrail**: per-user identity is only included when the developer has explicitly enabled team sharing + +### Commands + +- `Copilot Token Tracker: Configure Backend` — guided setup wizard for Azure resources and settings +- `Copilot Token Tracker: Copy Backend Config` — copies shareable config without secrets +- `Copilot Token Tracker: Export Current View` — exports filtered backend/local view as JSON + +Shared Key management (only if using shared-key auth): +- `Copilot Token Tracker: Set Backend Shared Key` +- `Copilot Token Tracker: Rotate Backend Shared Key` +- `Copilot Token Tracker: Clear Backend Shared Key` + +Other: +- `Copilot Token Tracker: Ask About Usage` + +### Backend Settings Configurator + +Use **Copilot Token Tracker: Configure Backend** to open the settings panel with five sections: Overview, Sharing, Azure, Advanced, and Review & Apply. + +**Privacy profiles** (Sharing section): +- **Off** – All data stays local; nothing syncs to Azure +- **Solo** – Private cloud storage; only you can access your data +- **Team Anonymized** – Hashed workspace/machine IDs; no names stored +- **Team Pseudonymous** – Stable alias (e.g., "dev-001") with hashed IDs; no real names +- **Team Identified** – Team alias or Entra object ID included; full workspace names available + +**Guided setup workflow:** +1. Run **Copilot Token Tracker: Configure Backend** command +2. Navigate to Sharing section to choose your privacy profile +3. Go to Azure section, enable backend, and use **Open configure walkthrough** to provision Azure resources +4. Advanced section sets dataset ID and lookback days (7/30/90) +5. Review & Apply confirms your changes with explicit consent for privacy upgrades +6. Click **Save & Apply** to enable backend sync + +--- + +## Performance Optimization + +The extension uses intelligent caching to improve performance: + +- **File Modification Tracking**: Only re-processes session files when they have been modified since the last read +- **Efficient Cache Management**: Stores calculated token counts, interaction counts, and model usage data for each file +- **Memory Management**: Automatically limits cache size to prevent memory issues (maximum 1000 cached files) + +--- + +## Known Issues + +- Numbers shown use **actual token counts** from the LLM API when available (e.g. Copilot Chat JSONL sessions and OpenCode sessions). When actual token data is not available, the extension falls back to **estimates** computed from text in the session logs. +- If you use multiple machines (or multiple VS Code profiles/windows), local-only mode will only reflect what's on the current machine. The cloud backend improves cross-device coverage. +- Premium Requests are not tracked. +- Dev Containers: Copilot Chat session logs are written to the host machine's user profile (outside the container). The extension currently does not read from host paths, so token tracking will not work inside a Dev Container. Run VS Code locally (outside the container) or mount the host user data directories into the container at the expected locations. +- Windows with WSL: The extension can only show information when VS Code, Copilot CLI, and OpenCode run in the same environment as the VS Code host. To track usage properly, either run VS Code from within WSL using the [Remote - WSL extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) (recommended), or run all tools natively on Windows. See the [VS Code WSL documentation](https://code.visualstudio.com/docs/remote/wsl) for setup instructions. + +> **⚠️ Warning** +> +> Some discovery paths for session logs can vary by OS and editor variant. If you run into missing session files on your platform, please open an issue with a diagnostic report. diff --git a/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs b/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs index 9bd95931..2aa32eae 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Commands/ToolbarInfoCommand.cs @@ -20,7 +20,8 @@ internal sealed class ToolbarInfoCommand public static readonly Guid CommandSet = new Guid(ShowTokenTrackerCommand.CommandSetGuidString); public const int CommandId = 0x0200; - private static readonly TimeSpan StatsRefreshInterval = TimeSpan.FromMinutes(5); + private static readonly TimeSpan StatsRefreshInterval = TimeSpan.FromMinutes(5); + private static readonly TimeSpan StatsRetryInterval = TimeSpan.FromSeconds(30); private readonly AsyncPackage _package; private readonly OleMenuCommand _menuCommand; @@ -62,9 +63,19 @@ private async Task RefreshStatsAsync() try { var stats = await StatsBuilder.BuildAsync(); - var today = FormatTokenCount(stats.Today.Tokens); - var last30 = FormatTokenCount(stats.Last30Days.Tokens); - var text = $"Copilot: {today} | {last30}"; + string text; + if (stats == null) + { + text = "Copilot: ? | ?"; + // Retry sooner rather than waiting the full 5-minute interval + _statsTimer?.Change(StatsRetryInterval, StatsRefreshInterval); + } + else + { + var today = FormatTokenCount(stats.Today.Tokens); + var last30 = FormatTokenCount(stats.Last30Days.Tokens); + text = $"Copilot: {today} | {last30}"; + } await _package.JoinableTaskFactory.SwitchToMainThreadAsync(_package.DisposalToken); _menuCommand.Text = text; @@ -119,8 +130,10 @@ await _package.ShowToolWindowAsync( if (pane is ToolWindow.TokenTrackerToolWindow trackerWindow) { - Utilities.OutputLogger.Log("Tool window found, refreshing..."); - await trackerWindow.RefreshAsync(); + Utilities.OutputLogger.Log("Tool window found, resetting to details view..."); + await trackerWindow.ResetViewAsync(); + // The view fetch may have populated the CLI cache; sync toolbar text now. + await RefreshStatsAsync(); } else { diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj index 39ad9bd4..4dc3df43 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTracker.csproj @@ -139,6 +139,8 @@ <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\chart.js" /> <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\usage.js" /> <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\diagnostics.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\environmental.js" /> + <_WebviewBundle Include="..\..\..\vscode-extension\dist\webview\maturity.js" /> diff --git a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct index f9441dec..971b7e40 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct +++ b/visualstudio-extension/src/CopilotTokenTracker/CopilotTokenTrackerPackage.vsct @@ -66,7 +66,7 @@ Copilot: loading… CopilotTokenTracker.ToolbarInfo - Today's tokens | Last 30 days tokens — click to open details + Today's tokens | Last 30 days tokens — click to reset to details view diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/CliBridge.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/CliBridge.cs index 2f123ded..a8c69a18 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/CliBridge.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/CliBridge.cs @@ -17,17 +17,74 @@ namespace CopilotTokenTracker.Data /// internal static class CliBridge { - private const string ExeName = "copilot-token-tracker.exe"; - private const int TimeoutMs = 60_000; // 60 seconds — session scanning can be slow + private const string ExeName = "copilot-token-tracker.exe"; + private const int TimeoutMs = 60_000; // 60 s after the cache is warm + private const int InitialTimeoutMs = 180_000; // 3 min — first run scans all sessions + + /// + /// Set to true after the CLI has returned valid data at least once. + /// Subsequent calls use the shorter because the CLI + /// reads its own on-disk cache instead of re-scanning all sessions. + /// + private static volatile bool _hasSucceededOnce = false; + + /// Last successfully fetched stats, used to serve cached data immediately. + private static volatile DetailedStats? _cachedStats; + private static DateTime _cachedStatsAt = DateTime.MinValue; + private static readonly TimeSpan CacheTtl = TimeSpan.FromMinutes(5); + + /// + /// In-flight Task for usage --json. When a second caller arrives while + /// this is non-null, it receives the same Task instead of spawning a second process. + /// Cleared back to null once the Task completes. + /// + private static Task? _inflightUsageTask; + private static readonly object _usageLock = new object(); // ── Public API ───────────────────────────────────────────────────────── + /// + /// Returns the most recently fetched stats from the in-memory cache, or + /// null if no successful fetch has completed yet. + /// + public static DetailedStats? GetCachedStats() => _cachedStats; + /// /// Runs the CLI usage --json command and deserializes the result /// into a instance. + /// If a call is already in progress, returns the same Task (no duplicate process). + /// If cached data is still within , returns it immediately + /// without re-running the CLI. /// Returns null when the CLI exe is missing or the command fails. /// - public static async Task GetUsageStatsAsync() + public static Task GetUsageStatsAsync() + { + lock (_usageLock) + { + // Return fresh cached data without launching the CLI again + if (_cachedStats != null && (DateTime.UtcNow - _cachedStatsAt) < CacheTtl) + { + Utilities.OutputLogger.Log("CLI bridge: returning in-memory cached stats"); + return System.Threading.Tasks.Task.FromResult(_cachedStats); + } + + if (_inflightUsageTask != null) + { + Utilities.OutputLogger.Log("CLI bridge: usage --json already in flight, reusing existing call"); + return _inflightUsageTask; + } + + _inflightUsageTask = RunGetUsageStatsAsync(); + _ = _inflightUsageTask.ContinueWith(_ => + { + lock (_usageLock) { _inflightUsageTask = null; } + }, System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously); + + return _inflightUsageTask; + } + } + + private static async Task RunGetUsageStatsAsync() { var exePath = FindCliExe(); if (exePath == null) @@ -36,9 +93,10 @@ internal static class CliBridge return null; } - Utilities.OutputLogger.Log($"CLI bridge: running {exePath} usage --json"); + var timeoutMs = _hasSucceededOnce ? TimeoutMs : InitialTimeoutMs; + Utilities.OutputLogger.Log($"CLI bridge: running {exePath} usage --json (timeout {timeoutMs / 1000}s)"); - var (exitCode, stdout, stderr) = await RunProcessAsync(exePath, "usage --json"); + var (exitCode, stdout, stderr) = await RunProcessAsync(exePath, "usage --json", timeoutMs); if (exitCode != 0) { @@ -65,6 +123,9 @@ internal static class CliBridge var result = JsonSerializer.Deserialize(stdout, options); if (result != null) { + _hasSucceededOnce = true; + _cachedStats = result; + _cachedStatsAt = DateTime.UtcNow; Utilities.OutputLogger.Log("CLI bridge: stats deserialized successfully"); } return result; @@ -76,6 +137,132 @@ internal static class CliBridge } } + /// + /// Runs the CLI chart --json command and returns the raw JSON string. + /// Returns null when the CLI exe is missing or the command fails. + /// + public static async Task GetChartDataJsonAsync() + { + var exePath = FindCliExe(); + if (exePath == null) + { + Utilities.OutputLogger.LogWarning("CLI bridge: bundled exe not found for chart"); + return null; + } + + var timeoutMs = _hasSucceededOnce ? TimeoutMs : InitialTimeoutMs; + Utilities.OutputLogger.Log($"CLI bridge: running {exePath} chart --json"); + + var (exitCode, stdout, stderr) = await RunProcessAsync(exePath, "chart --json", timeoutMs); + + if (exitCode != 0) + { + Utilities.OutputLogger.LogWarning($"CLI bridge (chart): exit code {exitCode}"); + if (!string.IsNullOrWhiteSpace(stderr)) + Utilities.OutputLogger.LogWarning($"CLI bridge (chart) stderr: {stderr}"); + return null; + } + + if (string.IsNullOrWhiteSpace(stdout)) + { + Utilities.OutputLogger.LogWarning("CLI bridge (chart): empty stdout"); + return null; + } + + Utilities.OutputLogger.Log("CLI bridge: chart data received"); + return stdout.Trim(); + } + + /// + /// Runs the CLI usage-analysis --json command and returns the raw JSON string. + /// Returns null when the CLI exe is missing or the command fails. + /// + public static async Task GetUsageAnalysisJsonAsync() + { + var exePath = FindCliExe(); + if (exePath == null) + { + Utilities.OutputLogger.LogWarning("CLI bridge: bundled exe not found for usage-analysis"); + return null; + } + + var timeoutMs = _hasSucceededOnce ? TimeoutMs : InitialTimeoutMs; + Utilities.OutputLogger.Log($"CLI bridge: running {exePath} usage-analysis --json"); + + var (exitCode, stdout, stderr) = await RunProcessAsync(exePath, "usage-analysis --json", timeoutMs); + + if (exitCode != 0) + { + Utilities.OutputLogger.LogWarning($"CLI bridge (usage-analysis): exit code {exitCode}"); + if (!string.IsNullOrWhiteSpace(stderr)) + Utilities.OutputLogger.LogWarning($"CLI bridge (usage-analysis) stderr: {stderr}"); + return null; + } + + if (string.IsNullOrWhiteSpace(stdout)) + { + Utilities.OutputLogger.LogWarning("CLI bridge (usage-analysis): empty stdout"); + return null; + } + + Utilities.OutputLogger.Log("CLI bridge: usage-analysis data received"); + return stdout.Trim(); + } + + /// + /// Runs the CLI fluency --json command and deserializes the result + /// into a instance. + /// Returns null when the CLI exe is missing or the command fails. + /// + public static async Task GetMaturityAsync() + { + var exePath = FindCliExe(); + if (exePath == null) + { + Utilities.OutputLogger.LogWarning("CLI bridge: bundled exe not found for fluency"); + return null; + } + + Utilities.OutputLogger.Log($"CLI bridge: running {exePath} fluency --json"); + + var (exitCode, stdout, stderr) = await RunProcessAsync(exePath, "fluency --json"); + + if (exitCode != 0) + { + Utilities.OutputLogger.LogWarning($"CLI bridge (fluency): exit code {exitCode}"); + if (!string.IsNullOrWhiteSpace(stderr)) + { + Utilities.OutputLogger.LogWarning($"CLI bridge (fluency) stderr: {stderr}"); + } + return null; + } + + if (string.IsNullOrWhiteSpace(stdout)) + { + Utilities.OutputLogger.LogWarning("CLI bridge (fluency): empty stdout"); + return null; + } + + try + { + var options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + }; + var result = JsonSerializer.Deserialize(stdout, options); + if (result != null) + { + Utilities.OutputLogger.Log("CLI bridge: maturity data deserialized successfully"); + } + return result; + } + catch (JsonException ex) + { + Utilities.OutputLogger.LogError("CLI bridge (fluency): JSON parse error", ex); + return null; + } + } + /// Returns true when the bundled CLI exe is available. public static bool IsAvailable() => FindCliExe() != null; @@ -99,7 +286,7 @@ internal static class CliBridge /// Uses event-based output reading to avoid the classic ReadToEnd/WaitForExit deadlock. /// private static Task<(int ExitCode, string Stdout, string Stderr)> RunProcessAsync( - string fileName, string arguments) + string fileName, string arguments, int timeoutMs = TimeoutMs) { return Task.Run(() => { @@ -115,6 +302,8 @@ internal static class CliBridge RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true, + StandardOutputEncoding = System.Text.Encoding.UTF8, + StandardErrorEncoding = System.Text.Encoding.UTF8, }; proc.OutputDataReceived += (_, e) => { if (e.Data != null) stdoutBuilder.AppendLine(e.Data); }; @@ -124,10 +313,10 @@ internal static class CliBridge proc.BeginOutputReadLine(); proc.BeginErrorReadLine(); - if (!proc.WaitForExit(TimeoutMs)) + if (!proc.WaitForExit(timeoutMs)) { try { proc.Kill(); } catch { /* best effort */ } - Utilities.OutputLogger.LogWarning($"CLI bridge: process killed after {TimeoutMs / 1000}s timeout"); + Utilities.OutputLogger.LogWarning($"CLI bridge: process killed after {timeoutMs / 1000}s timeout"); return (-1, string.Empty, "Process timed out"); } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs index a9bced0b..5112ea3f 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/Models.cs @@ -91,4 +91,179 @@ internal sealed class EditorStats [JsonPropertyName("sessions")] public int Sessions { get; set; } } + + // ── Environmental stats payload ────────────────────────────────────────────── + + /// + /// Projected to the environmental webview as window.__INITIAL_ENVIRONMENTAL__. + /// Fields mirror the TypeScript EnvironmentalStats type. + /// + internal sealed class EnvironmentalStats + { + [JsonPropertyName("today")] + public EnvironmentalPeriod Today { get; set; } = new EnvironmentalPeriod(); + + [JsonPropertyName("month")] + public EnvironmentalPeriod Month { get; set; } = new EnvironmentalPeriod(); + + [JsonPropertyName("lastMonth")] + public EnvironmentalPeriod LastMonth { get; set; } = new EnvironmentalPeriod(); + + [JsonPropertyName("last30Days")] + public EnvironmentalPeriod Last30Days { get; set; } = new EnvironmentalPeriod(); + + [JsonPropertyName("lastUpdated")] + public string LastUpdated { get; set; } = string.Empty; + + [JsonPropertyName("backendConfigured")] + public bool BackendConfigured { get; set; } + } + + internal sealed class EnvironmentalPeriod + { + [JsonPropertyName("tokens")] + public long Tokens { get; set; } + + [JsonPropertyName("co2")] + public double Co2 { get; set; } + + [JsonPropertyName("treesEquivalent")] + public double TreesEquivalent { get; set; } + + [JsonPropertyName("waterUsage")] + public double WaterUsage { get; set; } + } + + // ── Maturity / Fluency Score payload ──────────────────────────────────────── + + /// + /// Projected to the maturity webview as window.__INITIAL_MATURITY__. + /// Fields mirror the TypeScript MaturityData type. + /// + internal sealed class MaturityData + { + [JsonPropertyName("overallStage")] + public int OverallStage { get; set; } + + [JsonPropertyName("overallLabel")] + public string OverallLabel { get; set; } = string.Empty; + + [JsonPropertyName("categories")] + public List Categories { get; set; } = new List(); + + [JsonPropertyName("period")] + public UsageAnalysisPeriod Period { get; set; } = new UsageAnalysisPeriod(); + + [JsonPropertyName("lastUpdated")] + public string LastUpdated { get; set; } = string.Empty; + + [JsonPropertyName("backendConfigured")] + public bool BackendConfigured { get; set; } + } + + internal sealed class CategoryScore + { + [JsonPropertyName("category")] + public string Category { get; set; } = string.Empty; + + [JsonPropertyName("icon")] + public string Icon { get; set; } = string.Empty; + + [JsonPropertyName("stage")] + public int Stage { get; set; } + + [JsonPropertyName("evidence")] + public List Evidence { get; set; } = new List(); + + [JsonPropertyName("tips")] + public List Tips { get; set; } = new List(); + } + + /// + /// Minimal representation of UsageAnalysisPeriod needed by the maturity webview. + /// Only the fields rendered by the webview are included. + /// + internal sealed class UsageAnalysisPeriod + { + [JsonPropertyName("sessions")] + public int Sessions { get; set; } + + [JsonPropertyName("modeUsage")] + public ModeUsage ModeUsage { get; set; } = new ModeUsage(); + + [JsonPropertyName("toolCalls")] + public ToolCallUsage ToolCalls { get; set; } = new ToolCallUsage(); + + [JsonPropertyName("mcpTools")] + public McpToolUsage McpTools { get; set; } = new McpToolUsage(); + + [JsonPropertyName("contextReferences")] + public ContextReferenceUsage ContextReferences { get; set; } = new ContextReferenceUsage(); + + [JsonPropertyName("repositories")] + public List Repositories { get; set; } = new List(); + + [JsonPropertyName("repositoriesWithCustomization")] + public List RepositoriesWithCustomization { get; set; } = new List(); + } + + internal sealed class ModeUsage + { + [JsonPropertyName("ask")] + public int Ask { get; set; } + + [JsonPropertyName("edit")] + public int Edit { get; set; } + + [JsonPropertyName("agent")] + public int Agent { get; set; } + + [JsonPropertyName("plan")] + public int Plan { get; set; } + + [JsonPropertyName("customAgent")] + public int CustomAgent { get; set; } + } + + internal sealed class ToolCallUsage + { + [JsonPropertyName("total")] + public int Total { get; set; } + + [JsonPropertyName("byTool")] + public Dictionary ByTool { get; set; } = new Dictionary(); + } + + internal sealed class McpToolUsage + { + [JsonPropertyName("total")] + public int Total { get; set; } + + [JsonPropertyName("byServer")] + public Dictionary ByServer { get; set; } = new Dictionary(); + + [JsonPropertyName("byTool")] + public Dictionary ByTool { get; set; } = new Dictionary(); + } + + internal sealed class ContextReferenceUsage + { + [JsonPropertyName("file")] + public int File { get; set; } + + [JsonPropertyName("selection")] + public int Selection { get; set; } + + [JsonPropertyName("codebase")] + public int Codebase { get; set; } + + [JsonPropertyName("workspace")] + public int Workspace { get; set; } + + [JsonPropertyName("terminal")] + public int Terminal { get; set; } + + [JsonPropertyName("vscode")] + public int Vscode { get; set; } + } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs b/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs index 0b67ba6b..f1197e3a 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/Data/StatsBuilder.cs @@ -9,16 +9,67 @@ namespace CopilotTokenTracker.Data /// internal static class StatsBuilder { - public static async Task BuildAsync() + public static async Task BuildAsync() { var stats = await CliBridge.GetUsageStatsAsync(); if (stats != null) { return stats; } Utilities.OutputLogger.LogWarning("CLI bridge returned no data — is the bundled CLI exe present?"); - return new DetailedStats + return null; + } + + /// + /// Builds the payload for the environmental view + /// by mapping the period-level co2/water/tree data from the usage stats. + /// + public static async Task BuildEnvironmentalAsync() + { + var usage = await BuildAsync(); + if (usage == null) + { + return new EnvironmentalStats + { + LastUpdated = DateTime.UtcNow.ToString("o"), + }; + } + return new EnvironmentalStats + { + LastUpdated = usage.LastUpdated, + BackendConfigured = usage.BackendConfigured, + Today = MapEnvironmentalPeriod(usage.Today), + Month = MapEnvironmentalPeriod(usage.Month), + LastMonth = MapEnvironmentalPeriod(usage.LastMonth), + Last30Days = MapEnvironmentalPeriod(usage.Last30Days), + }; + } + + /// + /// Builds the payload for the maturity/fluency-score view + /// by calling the CLI fluency --json command. + /// + public static async Task BuildMaturityAsync() + { + var maturity = await CliBridge.GetMaturityAsync(); + if (maturity != null) { return maturity; } + + Utilities.OutputLogger.LogWarning("Fluency data unavailable — returning empty maturity data"); + return new MaturityData { - LastUpdated = DateTime.UtcNow.ToString("o"), + OverallStage = 1, + OverallLabel = "Stage 1: Copilot Skeptic", + LastUpdated = DateTime.UtcNow.ToString("o"), }; } + + // ── Helpers ────────────────────────────────────────────────────────────── + + private static EnvironmentalPeriod MapEnvironmentalPeriod(PeriodStats p) + => new EnvironmentalPeriod + { + Tokens = p.Tokens, + Co2 = p.Co2, + TreesEquivalent = p.TreesEquivalent, + WaterUsage = p.WaterUsage, + }; } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs index d087d855..8fb548c0 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerControl.xaml.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text.Json; @@ -17,6 +18,12 @@ public partial class TokenTrackerControl : UserControl private bool _webViewReady; private string _currentView = "details"; + /// + /// Last rendered HTML per view name. Populated by ; + /// served instantly on navigation so the user never waits for a redundant CLI call. + /// + private readonly Dictionary _viewHtmlCache = new Dictionary(); + public TokenTrackerControl() { InitializeComponent(); @@ -90,28 +97,159 @@ public async Task RefreshAsync() { if (!_webViewReady) { return; } - FallbackText.Text = "Refreshing data…"; + Utilities.OutputLogger.Log($"Loading view: {_currentView}"); + + // Show a text overlay while data is loading. We deliberately avoid + // calling NavigateToString here so we don't trigger a navigation that + // immediately gets cancelled, which leaves WebView2 in a black state. + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + FallbackText.Text = "Loading…"; FallbackText.Visibility = Visibility.Visible; try { - var stats = await StatsBuilder.BuildAsync(); - var statsJson = JsonSerializer.Serialize(stats, new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - }); + var statsJson = await FetchStatsJsonAsync(_currentView); + var html = ThemedHtmlBuilder.Build(_currentView, statsJson); - var html = ThemedHtmlBuilder.Build(_currentView, statsJson); - WebView.CoreWebView2.NavigateToString(html); + // Store in cache so subsequent navigations to this view are instant + _viewHtmlCache[_currentView] = html; + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + WebView.CoreWebView2.NavigateToString(html); FallbackText.Visibility = Visibility.Collapsed; + Utilities.OutputLogger.Log($"View loaded: {_currentView}"); } catch (Exception ex) { + Utilities.OutputLogger.LogError($"RefreshAsync: failed to load view '{_currentView}'", ex); + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); FallbackText.Text = $"Error loading token data:\n{ex.Message}"; } } + /// + /// Resets the current view back to the default (details) and refreshes. + /// Use this when a view is stuck or rendering incorrectly. + /// + public async Task ResetViewAsync() + { + Utilities.OutputLogger.Log($"Resetting view (was: {_currentView}) → details"); + _viewHtmlCache.Clear(); // discard all cached HTML so next navigation fetches fresh data + _currentView = "details"; + await RefreshAsync(); + } + + // ── Data fetching ────────────────────────────────────────────────────── + + private static async Task FetchStatsJsonAsync(string view) + { + var serOpts = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; + + switch (view) + { + case "chart": + { + var raw = await CliBridge.GetChartDataJsonAsync(); + if (!string.IsNullOrWhiteSpace(raw)) { return raw!; } + // Fallback: empty chart payload + return JsonSerializer.Serialize(new + { + labels = Array.Empty(), + tokensData = Array.Empty(), + sessionsData = Array.Empty(), + modelDatasets = Array.Empty(), + editorDatasets = Array.Empty(), + editorTotalsMap = new { }, + repositoryDatasets = Array.Empty(), + repositoryTotalsMap = new { }, + dailyCount = 0, + totalTokens = 0, + avgTokensPerDay = 0, + totalSessions = 0, + lastUpdated = DateTime.UtcNow.ToString("o"), + backendConfigured = false, + }, serOpts); + } + case "usage": + { + var raw = await CliBridge.GetUsageAnalysisJsonAsync(); + if (!string.IsNullOrWhiteSpace(raw)) { return raw!; } + // Fallback: empty usage payload + return JsonSerializer.Serialize(new + { + today = new { }, + last30Days = new { }, + month = new { }, + locale = "en-US", + lastUpdated = DateTime.UtcNow.ToString("o"), + backendConfigured = false, + }, serOpts); + } + case "environmental": + { + var envStats = await StatsBuilder.BuildEnvironmentalAsync(); + return JsonSerializer.Serialize(envStats, serOpts); + } + case "maturity": + { + var maturity = await StatsBuilder.BuildMaturityAsync(); + return JsonSerializer.Serialize(maturity, serOpts); + } + default: + { + var stats = await StatsBuilder.BuildAsync() ?? new DetailedStats + { + LastUpdated = DateTime.UtcNow.ToString("o"), + }; + return JsonSerializer.Serialize(stats, serOpts); + } + } + } + + // ── Loading overlay & navigation ────────────────────────────────────── + + /// + /// Injects a full-page spinner overlay into the currently visible WebView page. + /// The overlay disappears naturally when NavigateToString replaces the page. + /// + private async Task ShowLoadingOverlayAsync() + { + if (!_webViewReady) { return; } + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + await WebView.CoreWebView2.ExecuteScriptAsync( + "(function(){" + + " if(document.getElementById('__vs-loading-overlay__')){return;}" + + " var s=document.createElement('style');" + + " s.textContent='@keyframes __vs-spin__{to{transform:rotate(360deg)}}';" + + " document.head.appendChild(s);" + + " var o=document.createElement('div');" + + " o.id='__vs-loading-overlay__';" + + " o.style.cssText='position:fixed;inset:0;background:rgba(20,20,20,0.82);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:99999;pointer-events:none;';" + + " o.innerHTML='
" + + "
Loading\u2026
';" + + " document.body.appendChild(o);" + + "})();"); + } + + /// Shows loading overlay, changes the current view, then refreshes. + private async Task NavigateToViewAsync(string view) + { + _currentView = view; + + // If we have cached HTML for this view, render it instantly without hitting the CLI + if (_viewHtmlCache.TryGetValue(view, out var cachedHtml)) + { + Utilities.OutputLogger.Log($"Serving cached HTML for view: {view}"); + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + WebView.CoreWebView2.NavigateToString(cachedHtml); + return; + } + + // First visit — show spinner and fetch fresh data + await ShowLoadingOverlayAsync(); + await RefreshAsync(); + } + // ── Incoming messages from JS ────────────────────────────────────────── private void OnWebMessageReceived(object? sender, CoreWebView2WebMessageReceivedEventArgs e) @@ -125,35 +263,62 @@ private void OnWebMessageReceived(object? sender, CoreWebView2WebMessageReceived _ = ThreadHelper.JoinableTaskFactory.RunAsync(async () => { - switch (cmdProp.GetString()) + var cmd = cmdProp.GetString(); + Utilities.OutputLogger.Log($"WebMessage received: {cmd} (current view: {_currentView})"); + + switch (cmd) { case "refresh": await RefreshAsync(); break; case "showDetails": - _currentView = "details"; - await RefreshAsync(); + await NavigateToViewAsync("details"); break; case "showChart": - _currentView = "chart"; - await RefreshAsync(); + await NavigateToViewAsync("chart"); break; case "showUsageAnalysis": - _currentView = "usage"; - await RefreshAsync(); + await NavigateToViewAsync("usage"); break; case "showDiagnostics": - _currentView = "diagnostics"; - await RefreshAsync(); + // Diagnostics view is not supported in Visual Studio — redirect to details + Utilities.OutputLogger.LogWarning("Diagnostics view is not supported in Visual Studio; redirecting to details"); + await NavigateToViewAsync("details"); + break; + + case "showEnvironmental": + await NavigateToViewAsync("environmental"); + break; + + case "showMaturity": + await NavigateToViewAsync("maturity"); + break; + + case "showDashboard": + // Dashboard view not yet implemented — fall back to details + await NavigateToViewAsync("details"); + break; + + case "jsError": + { + var jsMsg = root.TryGetProperty("message", out var jsMsgProp) ? jsMsgProp.GetString() : "(no message)"; + var jsSrc = root.TryGetProperty("source", out var jsSrcProp) ? jsSrcProp.GetString() : ""; + var jsLine = root.TryGetProperty("line", out var jsLineProp) ? jsLineProp.GetInt32() : 0; + Utilities.OutputLogger.LogError($"WebView JS error in view '{_currentView}': {jsMsg} at {jsSrc}:{jsLine}"); + break; + } + + default: + Utilities.OutputLogger.LogWarning($"Unknown WebMessage command: {cmd}"); break; } }); } - catch { /* ignore malformed messages */ } + catch (Exception parseEx) { Utilities.OutputLogger.LogWarning($"OnWebMessageReceived: malformed message — {parseEx.Message}"); } } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerToolWindow.cs b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerToolWindow.cs index bb6ff4b3..b6188437 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerToolWindow.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/ToolWindow/TokenTrackerToolWindow.cs @@ -33,5 +33,15 @@ public Task RefreshAsync() if (_control == null) { return Task.CompletedTask; } return _control.RefreshAsync(); } + + /// + /// Resets the current view to the default (details) and refreshes. + /// Use this when a view is stuck or rendering incorrectly. + /// + public Task ResetViewAsync() + { + if (_control == null) { return Task.CompletedTask; } + return _control.ResetViewAsync(); + } } } diff --git a/visualstudio-extension/src/CopilotTokenTracker/WebBridge/ThemedHtmlBuilder.cs b/visualstudio-extension/src/CopilotTokenTracker/WebBridge/ThemedHtmlBuilder.cs index 80cc5eed..3184859f 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/WebBridge/ThemedHtmlBuilder.cs +++ b/visualstudio-extension/src/CopilotTokenTracker/WebBridge/ThemedHtmlBuilder.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Net; using System.Reflection; namespace CopilotTokenTracker.WebBridge @@ -30,6 +31,7 @@ public static string Build(string view, string statsJson) var shim = LoadShim(); var themeCss = BuildThemeCss(); var globalKey = ViewToGlobalKey(view); + var vsHideJs = BuildVsHideScript(view); // Prevent injection in the JSON payload (OWASP XSS defence) var safeJson = statsJson.Replace("<", "\\u003c").Replace(">", "\\u003e"); @@ -47,6 +49,16 @@ public static string Build(string view, string statsJson) +{vsHideJs} + +"; + } + + /// + /// Returns a small inline script that hides VS-unsupported sections after the + /// bundle has rendered them into the DOM. Uses a MutationObserver so it still + /// works even when the bundle renders asynchronously. + /// + private static string BuildVsHideScript(string view) + { + if (view == "maturity") { return BuildVsHideScriptMaturity(); } + if (view != "usage") { return string.Empty; } + + // Hide the Customization Files section, the Missed Potential section, and the + // Repository Hygiene section — none of which have data in Visual Studio. + return @""; + } + + /// + /// Returns a JS block for the maturity view that rewrites VS Code-specific MCP + /// registry links to IDE-neutral GitHub Copilot docs links. + /// + private static string BuildVsHideScriptMaturity() + { + // Replace "VS Code MCP registry" anchor text/hrefs with the GitHub Copilot MCP docs. + // Done via MutationObserver so it runs after the bundle renders asynchronously. + return @""; + } + public static string BuildLoadingHtml(string view) + { + var themeCss = BuildThemeCss(); + return $@" + + + + + + + +
+
+
Loading Copilot usage data…
+
+ +"; + } + + /// + /// Returns a lightweight HTML page that displays an error message when data + /// could not be loaded. + /// + public static string BuildErrorHtml(string message) + { + var themeCss = BuildThemeCss(); + var safeMsg = WebUtility.HtmlEncode(message); + return $@" + + + + + + + +
+
+
Error loading Copilot usage data
+
{safeMsg}
+
"; } @@ -67,11 +267,13 @@ public static string Build(string view, string statsJson) private static string ViewToGlobalKey(string view) => view switch { - "details" => "__INITIAL_DETAILS__", - "chart" => "__INITIAL_CHART__", - "usage" => "__INITIAL_USAGE__", - "diagnostics" => "__INITIAL_DIAGNOSTICS__", - _ => "__INITIAL_DETAILS__", + "details" => "__INITIAL_DETAILS__", + "chart" => "__INITIAL_CHART__", + "usage" => "__INITIAL_USAGE__", + "diagnostics" => "__INITIAL_DIAGNOSTICS__", + "environmental" => "__INITIAL_ENVIRONMENTAL__", + "maturity" => "__INITIAL_MATURITY__", + _ => "__INITIAL_DETAILS__", }; private static string LoadShim() diff --git a/visualstudio-extension/src/CopilotTokenTracker/WebBridge/vscode-shim.js b/visualstudio-extension/src/CopilotTokenTracker/WebBridge/vscode-shim.js index 1ee7bef1..e196462e 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/WebBridge/vscode-shim.js +++ b/visualstudio-extension/src/CopilotTokenTracker/WebBridge/vscode-shim.js @@ -30,12 +30,14 @@ _vsApi = { /** * Posts a message to the .NET host. - * @param {any} msg Will be JSON-serialised if it is not already a string. + * Pass the value directly — WebView2 serialises objects to JSON so the + * host receives a proper JSON object via WebMessageAsJson. + * Pre-stringifying would cause double-encoding (the host would see a + * JSON string instead of a JSON object and postMessage routing would fail). */ postMessage: function (msg) { - var payload = (typeof msg === 'string') ? msg : JSON.stringify(msg); if (global.chrome && global.chrome.webview) { - global.chrome.webview.postMessage(payload); + global.chrome.webview.postMessage(msg); } }, diff --git a/visualstudio-extension/src/CopilotTokenTracker/webview/environmental.js b/visualstudio-extension/src/CopilotTokenTracker/webview/environmental.js new file mode 100644 index 00000000..0ced3e65 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/webview/environmental.js @@ -0,0 +1,20527 @@ +"use strict"; +(() => { + var __defProp = Object.defineProperty; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; + var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); + }; + + // node_modules/@microsoft/fast-element/dist/esm/platform.js + function createMetadataLocator() { + const metadataLookup = /* @__PURE__ */ new WeakMap(); + return function(target) { + let metadata = metadataLookup.get(target); + if (metadata === void 0) { + let currentTarget = Reflect.getPrototypeOf(target); + while (metadata === void 0 && currentTarget !== null) { + metadata = metadataLookup.get(currentTarget); + currentTarget = Reflect.getPrototypeOf(currentTarget); + } + metadata = metadata === void 0 ? [] : metadata.slice(0); + metadataLookup.set(target, metadata); + } + return metadata; + }; + } + var $global, propConfig, FAST, emptyArray; + var init_platform = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/platform.js"() { + $global = (function() { + if (typeof globalThis !== "undefined") { + return globalThis; + } + if (typeof global !== "undefined") { + return global; + } + if (typeof self !== "undefined") { + return self; + } + if (typeof window !== "undefined") { + return window; + } + try { + return new Function("return this")(); + } catch (_a) { + return {}; + } + })(); + if ($global.trustedTypes === void 0) { + $global.trustedTypes = { createPolicy: (n, r) => r }; + } + propConfig = { + configurable: false, + enumerable: false, + writable: false + }; + if ($global.FAST === void 0) { + Reflect.defineProperty($global, "FAST", Object.assign({ value: /* @__PURE__ */ Object.create(null) }, propConfig)); + } + FAST = $global.FAST; + if (FAST.getById === void 0) { + const storage = /* @__PURE__ */ Object.create(null); + Reflect.defineProperty(FAST, "getById", Object.assign({ value(id, initialize) { + let found = storage[id]; + if (found === void 0) { + found = initialize ? storage[id] = initialize() : null; + } + return found; + } }, propConfig)); + } + emptyArray = Object.freeze([]); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/dom.js + var updateQueue, fastHTMLPolicy, htmlPolicy, marker, _interpolationStart, _interpolationEnd, DOM; + var init_dom = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/dom.js"() { + init_platform(); + updateQueue = $global.FAST.getById(1, () => { + const tasks = []; + const pendingErrors = []; + function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } + } + function tryRunTask(task) { + try { + task.call(); + } catch (error) { + pendingErrors.push(error); + setTimeout(throwFirstError, 0); + } + } + function process() { + const capacity = 1024; + let index = 0; + while (index < tasks.length) { + tryRunTask(tasks[index]); + index++; + if (index > capacity) { + for (let scan = 0, newLength = tasks.length - index; scan < newLength; scan++) { + tasks[scan] = tasks[scan + index]; + } + tasks.length -= index; + index = 0; + } + } + tasks.length = 0; + } + function enqueue(callable) { + if (tasks.length < 1) { + $global.requestAnimationFrame(process); + } + tasks.push(callable); + } + return Object.freeze({ + enqueue, + process + }); + }); + fastHTMLPolicy = $global.trustedTypes.createPolicy("fast-html", { + createHTML: (html2) => html2 + }); + htmlPolicy = fastHTMLPolicy; + marker = `fast-${Math.random().toString(36).substring(2, 8)}`; + _interpolationStart = `${marker}{`; + _interpolationEnd = `}${marker}`; + DOM = Object.freeze({ + /** + * Indicates whether the DOM supports the adoptedStyleSheets feature. + */ + supportsAdoptedStyleSheets: Array.isArray(document.adoptedStyleSheets) && "replace" in CSSStyleSheet.prototype, + /** + * Sets the HTML trusted types policy used by the templating engine. + * @param policy - The policy to set for HTML. + * @remarks + * This API can only be called once, for security reasons. It should be + * called by the application developer at the start of their program. + */ + setHTMLPolicy(policy) { + if (htmlPolicy !== fastHTMLPolicy) { + throw new Error("The HTML policy can only be set once."); + } + htmlPolicy = policy; + }, + /** + * Turns a string into trusted HTML using the configured trusted types policy. + * @param html - The string to turn into trusted HTML. + * @remarks + * Used internally by the template engine when creating templates + * and setting innerHTML. + */ + createHTML(html2) { + return htmlPolicy.createHTML(html2); + }, + /** + * Determines if the provided node is a template marker used by the runtime. + * @param node - The node to test. + */ + isMarker(node) { + return node && node.nodeType === 8 && node.data.startsWith(marker); + }, + /** + * Given a marker node, extract the {@link HTMLDirective} index from the placeholder. + * @param node - The marker node to extract the index from. + */ + extractDirectiveIndexFromMarker(node) { + return parseInt(node.data.replace(`${marker}:`, "")); + }, + /** + * Creates a placeholder string suitable for marking out a location *within* + * an attribute value or HTML content. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by binding directives. + */ + createInterpolationPlaceholder(index) { + return `${_interpolationStart}${index}${_interpolationEnd}`; + }, + /** + * Creates a placeholder that manifests itself as an attribute on an + * element. + * @param attributeName - The name of the custom attribute. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by attribute directives such as `ref`, `slotted`, and `children`. + */ + createCustomAttributePlaceholder(attributeName, index) { + return `${attributeName}="${this.createInterpolationPlaceholder(index)}"`; + }, + /** + * Creates a placeholder that manifests itself as a marker within the DOM structure. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by structural directives such as `repeat`. + */ + createBlockPlaceholder(index) { + return ``; + }, + /** + * Schedules DOM update work in the next async batch. + * @param callable - The callable function or object to queue. + */ + queueUpdate: updateQueue.enqueue, + /** + * Immediately processes all work previously scheduled + * through queueUpdate. + * @remarks + * This also forces nextUpdate promises + * to resolve. + */ + processUpdates: updateQueue.process, + /** + * Resolves with the next DOM update. + */ + nextUpdate() { + return new Promise(updateQueue.enqueue); + }, + /** + * Sets an attribute value on an element. + * @param element - The element to set the attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is `null` or `undefined`, the attribute is removed, otherwise + * it is set to the provided value using the standard `setAttribute` API. + */ + setAttribute(element, attributeName, value) { + if (value === null || value === void 0) { + element.removeAttribute(attributeName); + } else { + element.setAttribute(attributeName, value); + } + }, + /** + * Sets a boolean attribute value. + * @param element - The element to set the boolean attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is true, the attribute is added; otherwise it is removed. + */ + setBooleanAttribute(element, attributeName, value) { + value ? element.setAttribute(attributeName, "") : element.removeAttribute(attributeName); + }, + /** + * Removes all the child nodes of the provided parent node. + * @param parent - The node to remove the children from. + */ + removeChildNodes(parent) { + for (let child = parent.firstChild; child !== null; child = parent.firstChild) { + parent.removeChild(child); + } + }, + /** + * Creates a TreeWalker configured to walk a template fragment. + * @param fragment - The fragment to walk. + */ + createTemplateWalker(fragment) { + return document.createTreeWalker( + fragment, + 133, + // element, text, comment + null, + false + ); + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js + var SubscriberSet, PropertyChangeNotifier; + var init_notifier = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js"() { + SubscriberSet = class { + /** + * Creates an instance of SubscriberSet for the specified source. + * @param source - The object source that subscribers will receive notifications from. + * @param initialSubscriber - An initial subscriber to changes. + */ + constructor(source, initialSubscriber) { + this.sub1 = void 0; + this.sub2 = void 0; + this.spillover = void 0; + this.source = source; + this.sub1 = initialSubscriber; + } + /** + * Checks whether the provided subscriber has been added to this set. + * @param subscriber - The subscriber to test for inclusion in this set. + */ + has(subscriber) { + return this.spillover === void 0 ? this.sub1 === subscriber || this.sub2 === subscriber : this.spillover.indexOf(subscriber) !== -1; + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + */ + subscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.has(subscriber)) { + return; + } + if (this.sub1 === void 0) { + this.sub1 = subscriber; + return; + } + if (this.sub2 === void 0) { + this.sub2 = subscriber; + return; + } + this.spillover = [this.sub1, this.sub2, subscriber]; + this.sub1 = void 0; + this.sub2 = void 0; + } else { + const index = spillover.indexOf(subscriber); + if (index === -1) { + spillover.push(subscriber); + } + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + */ + unsubscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.sub1 === subscriber) { + this.sub1 = void 0; + } else if (this.sub2 === subscriber) { + this.sub2 = void 0; + } + } else { + const index = spillover.indexOf(subscriber); + if (index !== -1) { + spillover.splice(index, 1); + } + } + } + /** + * Notifies all subscribers. + * @param args - Data passed along to subscribers during notification. + */ + notify(args) { + const spillover = this.spillover; + const source = this.source; + if (spillover === void 0) { + const sub1 = this.sub1; + const sub2 = this.sub2; + if (sub1 !== void 0) { + sub1.handleChange(source, args); + } + if (sub2 !== void 0) { + sub2.handleChange(source, args); + } + } else { + for (let i = 0, ii = spillover.length; i < ii; ++i) { + spillover[i].handleChange(source, args); + } + } + } + }; + PropertyChangeNotifier = class { + /** + * Creates an instance of PropertyChangeNotifier for the specified source. + * @param source - The object source that subscribers will receive notifications from. + */ + constructor(source) { + this.subscribers = {}; + this.sourceSubscribers = null; + this.source = source; + } + /** + * Notifies all subscribers, based on the specified property. + * @param propertyName - The property name, passed along to subscribers during notification. + */ + notify(propertyName) { + var _a; + const subscribers = this.subscribers[propertyName]; + if (subscribers !== void 0) { + subscribers.notify(propertyName); + } + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.notify(propertyName); + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + * @param propertyToWatch - The name of the property that the subscriber is interested in watching for changes. + */ + subscribe(subscriber, propertyToWatch) { + var _a; + if (propertyToWatch) { + let subscribers = this.subscribers[propertyToWatch]; + if (subscribers === void 0) { + this.subscribers[propertyToWatch] = subscribers = new SubscriberSet(this.source); + } + subscribers.subscribe(subscriber); + } else { + this.sourceSubscribers = (_a = this.sourceSubscribers) !== null && _a !== void 0 ? _a : new SubscriberSet(this.source); + this.sourceSubscribers.subscribe(subscriber); + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + * @param propertyToUnwatch - The name of the property that the subscriber is no longer interested in watching. + */ + unsubscribe(subscriber, propertyToUnwatch) { + var _a; + if (propertyToUnwatch) { + const subscribers = this.subscribers[propertyToUnwatch]; + if (subscribers !== void 0) { + subscribers.unsubscribe(subscriber); + } + } else { + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriber); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/observable.js + function observable(target, nameOrAccessor) { + Observable.defineProperty(target, nameOrAccessor); + } + function volatile(target, name, descriptor) { + return Object.assign({}, descriptor, { + get: function() { + Observable.trackVolatile(); + return descriptor.get.apply(this); + } + }); + } + var Observable, contextEvent, ExecutionContext, defaultExecutionContext; + var init_observable = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/observable.js"() { + init_dom(); + init_platform(); + init_notifier(); + Observable = FAST.getById(2, () => { + const volatileRegex = /(:|&&|\|\||if)/; + const notifierLookup = /* @__PURE__ */ new WeakMap(); + const queueUpdate = DOM.queueUpdate; + let watcher = void 0; + let createArrayObserver = (array) => { + throw new Error("Must call enableArrayObservation before observing arrays."); + }; + function getNotifier(source) { + let found = source.$fastController || notifierLookup.get(source); + if (found === void 0) { + if (Array.isArray(source)) { + found = createArrayObserver(source); + } else { + notifierLookup.set(source, found = new PropertyChangeNotifier(source)); + } + } + return found; + } + const getAccessors = createMetadataLocator(); + class DefaultObservableAccessor { + constructor(name) { + this.name = name; + this.field = `_${name}`; + this.callback = `${name}Changed`; + } + getValue(source) { + if (watcher !== void 0) { + watcher.watch(source, this.name); + } + return source[this.field]; + } + setValue(source, newValue) { + const field = this.field; + const oldValue = source[field]; + if (oldValue !== newValue) { + source[field] = newValue; + const callback = source[this.callback]; + if (typeof callback === "function") { + callback.call(source, oldValue, newValue); + } + getNotifier(source).notify(this.name); + } + } + } + class BindingObserverImplementation extends SubscriberSet { + constructor(binding, initialSubscriber, isVolatileBinding = false) { + super(binding, initialSubscriber); + this.binding = binding; + this.isVolatileBinding = isVolatileBinding; + this.needsRefresh = true; + this.needsQueue = true; + this.first = this; + this.last = null; + this.propertySource = void 0; + this.propertyName = void 0; + this.notifier = void 0; + this.next = void 0; + } + observe(source, context) { + if (this.needsRefresh && this.last !== null) { + this.disconnect(); + } + const previousWatcher = watcher; + watcher = this.needsRefresh ? this : void 0; + this.needsRefresh = this.isVolatileBinding; + const result = this.binding(source, context); + watcher = previousWatcher; + return result; + } + disconnect() { + if (this.last !== null) { + let current = this.first; + while (current !== void 0) { + current.notifier.unsubscribe(this, current.propertyName); + current = current.next; + } + this.last = null; + this.needsRefresh = this.needsQueue = true; + } + } + watch(propertySource, propertyName) { + const prev = this.last; + const notifier = getNotifier(propertySource); + const current = prev === null ? this.first : {}; + current.propertySource = propertySource; + current.propertyName = propertyName; + current.notifier = notifier; + notifier.subscribe(this, propertyName); + if (prev !== null) { + if (!this.needsRefresh) { + let prevValue; + watcher = void 0; + prevValue = prev.propertySource[prev.propertyName]; + watcher = this; + if (propertySource === prevValue) { + this.needsRefresh = true; + } + } + prev.next = current; + } + this.last = current; + } + handleChange() { + if (this.needsQueue) { + this.needsQueue = false; + queueUpdate(this); + } + } + call() { + if (this.last !== null) { + this.needsQueue = true; + this.notify(this); + } + } + records() { + let next = this.first; + return { + next: () => { + const current = next; + if (current === void 0) { + return { value: void 0, done: true }; + } else { + next = next.next; + return { + value: current, + done: false + }; + } + }, + [Symbol.iterator]: function() { + return this; + } + }; + } + } + return Object.freeze({ + /** + * @internal + * @param factory - The factory used to create array observers. + */ + setArrayObserverFactory(factory) { + createArrayObserver = factory; + }, + /** + * Gets a notifier for an object or Array. + * @param source - The object or Array to get the notifier for. + */ + getNotifier, + /** + * Records a property change for a source object. + * @param source - The object to record the change against. + * @param propertyName - The property to track as changed. + */ + track(source, propertyName) { + if (watcher !== void 0) { + watcher.watch(source, propertyName); + } + }, + /** + * Notifies watchers that the currently executing property getter or function is volatile + * with respect to its observable dependencies. + */ + trackVolatile() { + if (watcher !== void 0) { + watcher.needsRefresh = true; + } + }, + /** + * Notifies subscribers of a source object of changes. + * @param source - the object to notify of changes. + * @param args - The change args to pass to subscribers. + */ + notify(source, args) { + getNotifier(source).notify(args); + }, + /** + * Defines an observable property on an object or prototype. + * @param target - The target object to define the observable on. + * @param nameOrAccessor - The name of the property to define as observable; + * or a custom accessor that specifies the property name and accessor implementation. + */ + defineProperty(target, nameOrAccessor) { + if (typeof nameOrAccessor === "string") { + nameOrAccessor = new DefaultObservableAccessor(nameOrAccessor); + } + getAccessors(target).push(nameOrAccessor); + Reflect.defineProperty(target, nameOrAccessor.name, { + enumerable: true, + get: function() { + return nameOrAccessor.getValue(this); + }, + set: function(newValue) { + nameOrAccessor.setValue(this, newValue); + } + }); + }, + /** + * Finds all the observable accessors defined on the target, + * including its prototype chain. + * @param target - The target object to search for accessor on. + */ + getAccessors, + /** + * Creates a {@link BindingObserver} that can watch the + * provided {@link Binding} for changes. + * @param binding - The binding to observe. + * @param initialSubscriber - An initial subscriber to changes in the binding value. + * @param isVolatileBinding - Indicates whether the binding's dependency list must be re-evaluated on every value evaluation. + */ + binding(binding, initialSubscriber, isVolatileBinding = this.isVolatileBinding(binding)) { + return new BindingObserverImplementation(binding, initialSubscriber, isVolatileBinding); + }, + /** + * Determines whether a binding expression is volatile and needs to have its dependency list re-evaluated + * on every evaluation of the value. + * @param binding - The binding to inspect. + */ + isVolatileBinding(binding) { + return volatileRegex.test(binding.toString()); + } + }); + }); + contextEvent = FAST.getById(3, () => { + let current = null; + return { + get() { + return current; + }, + set(event) { + current = event; + } + }; + }); + ExecutionContext = class { + constructor() { + this.index = 0; + this.length = 0; + this.parent = null; + this.parentContext = null; + } + /** + * The current event within an event handler. + */ + get event() { + return contextEvent.get(); + } + /** + * Indicates whether the current item within a repeat context + * has an even index. + */ + get isEven() { + return this.index % 2 === 0; + } + /** + * Indicates whether the current item within a repeat context + * has an odd index. + */ + get isOdd() { + return this.index % 2 !== 0; + } + /** + * Indicates whether the current item within a repeat context + * is the first item in the collection. + */ + get isFirst() { + return this.index === 0; + } + /** + * Indicates whether the current item within a repeat context + * is somewhere in the middle of the collection. + */ + get isInMiddle() { + return !this.isFirst && !this.isLast; + } + /** + * Indicates whether the current item within a repeat context + * is the last item in the collection. + */ + get isLast() { + return this.index === this.length - 1; + } + /** + * Sets the event for the current execution context. + * @param event - The event to set. + * @internal + */ + static setEvent(event) { + contextEvent.set(event); + } + }; + Observable.defineProperty(ExecutionContext.prototype, "index"); + Observable.defineProperty(ExecutionContext.prototype, "length"); + defaultExecutionContext = Object.seal(new ExecutionContext()); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js + var HTMLDirective, TargetedHTMLDirective, AttachedBehaviorHTMLDirective; + var init_html_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js"() { + init_dom(); + HTMLDirective = class { + constructor() { + this.targetIndex = 0; + } + }; + TargetedHTMLDirective = class extends HTMLDirective { + constructor() { + super(...arguments); + this.createPlaceholder = DOM.createInterpolationPlaceholder; + } + }; + AttachedBehaviorHTMLDirective = class extends HTMLDirective { + /** + * + * @param name - The name of the behavior; used as a custom attribute on the element. + * @param behavior - The behavior to instantiate and attach to the element. + * @param options - Options to pass to the behavior during creation. + */ + constructor(name, behavior, options) { + super(); + this.name = name; + this.behavior = behavior; + this.options = options; + } + /** + * Creates a placeholder string based on the directive's index within the template. + * @param index - The index of the directive within the template. + * @remarks + * Creates a custom attribute placeholder. + */ + createPlaceholder(index) { + return DOM.createCustomAttributePlaceholder(this.name, index); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + * @remarks + * Creates an instance of the `behavior` type this directive was constructed with + * and passes the target and options to that `behavior`'s constructor. + */ + createBehavior(target) { + return new this.behavior(target, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/binding.js + function normalBind(source, context) { + this.source = source; + this.context = context; + if (this.bindingObserver === null) { + this.bindingObserver = Observable.binding(this.binding, this, this.isBindingVolatile); + } + this.updateTarget(this.bindingObserver.observe(source, context)); + } + function triggerBind(source, context) { + this.source = source; + this.context = context; + this.target.addEventListener(this.targetName, this); + } + function normalUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + } + function contentUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.unbind(); + view.needsBindOnly = true; + } + } + function triggerUnbind() { + this.target.removeEventListener(this.targetName, this); + this.source = null; + this.context = null; + } + function updateAttributeTarget(value) { + DOM.setAttribute(this.target, this.targetName, value); + } + function updateBooleanAttributeTarget(value) { + DOM.setBooleanAttribute(this.target, this.targetName, value); + } + function updateContentTarget(value) { + if (value === null || value === void 0) { + value = ""; + } + if (value.create) { + this.target.textContent = ""; + let view = this.target.$fastView; + if (view === void 0) { + view = value.create(); + } else { + if (this.target.$fastTemplate !== value) { + if (view.isComposed) { + view.remove(); + view.unbind(); + } + view = value.create(); + } + } + if (!view.isComposed) { + view.isComposed = true; + view.bind(this.source, this.context); + view.insertBefore(this.target); + this.target.$fastView = view; + this.target.$fastTemplate = value; + } else if (view.needsBindOnly) { + view.needsBindOnly = false; + view.bind(this.source, this.context); + } + } else { + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.isComposed = false; + view.remove(); + if (view.needsBindOnly) { + view.needsBindOnly = false; + } else { + view.unbind(); + } + } + this.target.textContent = value; + } + } + function updatePropertyTarget(value) { + this.target[this.targetName] = value; + } + function updateClassTarget(value) { + const classVersions = this.classVersions || /* @__PURE__ */ Object.create(null); + const target = this.target; + let version = this.version || 0; + if (value !== null && value !== void 0 && value.length) { + const names = value.split(/\s+/); + for (let i = 0, ii = names.length; i < ii; ++i) { + const currentName = names[i]; + if (currentName === "") { + continue; + } + classVersions[currentName] = version; + target.classList.add(currentName); + } + } + this.classVersions = classVersions; + this.version = version + 1; + if (version === 0) { + return; + } + version -= 1; + for (const name in classVersions) { + if (classVersions[name] === version) { + target.classList.remove(name); + } + } + } + var HTMLBindingDirective, BindingBehavior; + var init_binding = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/binding.js"() { + init_dom(); + init_observable(); + init_html_directive(); + HTMLBindingDirective = class extends TargetedHTMLDirective { + /** + * Creates an instance of BindingDirective. + * @param binding - A binding that returns the data used to update the DOM. + */ + constructor(binding) { + super(); + this.binding = binding; + this.bind = normalBind; + this.unbind = normalUnbind; + this.updateTarget = updateAttributeTarget; + this.isBindingVolatile = Observable.isVolatileBinding(this.binding); + } + /** + * Gets/sets the name of the attribute or property that this + * binding is targeting. + */ + get targetName() { + return this.originalTargetName; + } + set targetName(value) { + this.originalTargetName = value; + if (value === void 0) { + return; + } + switch (value[0]) { + case ":": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updatePropertyTarget; + if (this.cleanedTargetName === "innerHTML") { + const binding = this.binding; + this.binding = (s, c) => DOM.createHTML(binding(s, c)); + } + break; + case "?": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updateBooleanAttributeTarget; + break; + case "@": + this.cleanedTargetName = value.substr(1); + this.bind = triggerBind; + this.unbind = triggerUnbind; + break; + default: + this.cleanedTargetName = value; + if (value === "class") { + this.updateTarget = updateClassTarget; + } + break; + } + } + /** + * Makes this binding target the content of an element rather than + * a particular attribute or property. + */ + targetAtContent() { + this.updateTarget = updateContentTarget; + this.unbind = contentUnbind; + } + /** + * Creates the runtime BindingBehavior instance based on the configuration + * information stored in the BindingDirective. + * @param target - The target node that the binding behavior should attach to. + */ + createBehavior(target) { + return new BindingBehavior(target, this.binding, this.isBindingVolatile, this.bind, this.unbind, this.updateTarget, this.cleanedTargetName); + } + }; + BindingBehavior = class { + /** + * Creates an instance of BindingBehavior. + * @param target - The target of the data updates. + * @param binding - The binding that returns the latest value for an update. + * @param isBindingVolatile - Indicates whether the binding has volatile dependencies. + * @param bind - The operation to perform during binding. + * @param unbind - The operation to perform during unbinding. + * @param updateTarget - The operation to perform when updating. + * @param targetName - The name of the target attribute or property to update. + */ + constructor(target, binding, isBindingVolatile, bind, unbind, updateTarget, targetName) { + this.source = null; + this.context = null; + this.bindingObserver = null; + this.target = target; + this.binding = binding; + this.isBindingVolatile = isBindingVolatile; + this.bind = bind; + this.unbind = unbind; + this.updateTarget = updateTarget; + this.targetName = targetName; + } + /** @internal */ + handleChange() { + this.updateTarget(this.bindingObserver.observe(this.source, this.context)); + } + /** @internal */ + handleEvent(event) { + ExecutionContext.setEvent(event); + const result = this.binding(this.source, this.context); + ExecutionContext.setEvent(null); + if (result !== true) { + event.preventDefault(); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js + function createAggregateBinding(parts) { + if (parts.length === 1) { + return parts[0]; + } + let targetName; + const partCount = parts.length; + const finalParts = parts.map((x) => { + if (typeof x === "string") { + return () => x; + } + targetName = x.targetName || targetName; + return x.binding; + }); + const binding = (scope, context) => { + let output = ""; + for (let i = 0; i < partCount; ++i) { + output += finalParts[i](scope, context); + } + return output; + }; + const directive = new HTMLBindingDirective(binding); + directive.targetName = targetName; + return directive; + } + function parseContent(context, value) { + const valueParts = value.split(_interpolationStart); + if (valueParts.length === 1) { + return null; + } + const bindingParts = []; + for (let i = 0, ii = valueParts.length; i < ii; ++i) { + const current = valueParts[i]; + const index = current.indexOf(_interpolationEnd); + let literal; + if (index === -1) { + literal = current; + } else { + const directiveIndex = parseInt(current.substring(0, index)); + bindingParts.push(context.directives[directiveIndex]); + literal = current.substring(index + interpolationEndLength); + } + if (literal !== "") { + bindingParts.push(literal); + } + } + return bindingParts; + } + function compileAttributes(context, node, includeBasicValues = false) { + const attributes = node.attributes; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const attr2 = attributes[i]; + const attrValue = attr2.value; + const parseResult = parseContent(context, attrValue); + let result = null; + if (parseResult === null) { + if (includeBasicValues) { + result = new HTMLBindingDirective(() => attrValue); + result.targetName = attr2.name; + } + } else { + result = createAggregateBinding(parseResult); + } + if (result !== null) { + node.removeAttributeNode(attr2); + i--; + ii--; + context.addFactory(result); + } + } + } + function compileContent(context, node, walker) { + const parseResult = parseContent(context, node.textContent); + if (parseResult !== null) { + let lastNode = node; + for (let i = 0, ii = parseResult.length; i < ii; ++i) { + const currentPart = parseResult[i]; + const currentNode = i === 0 ? node : lastNode.parentNode.insertBefore(document.createTextNode(""), lastNode.nextSibling); + if (typeof currentPart === "string") { + currentNode.textContent = currentPart; + } else { + currentNode.textContent = " "; + context.captureContentBinding(currentPart); + } + lastNode = currentNode; + context.targetIndex++; + if (currentNode !== node) { + walker.nextNode(); + } + } + context.targetIndex--; + } + } + function compileTemplate(template, directives) { + const fragment = template.content; + document.adoptNode(fragment); + const context = CompilationContext.borrow(directives); + compileAttributes(context, template, true); + const hostBehaviorFactories = context.behaviorFactories; + context.reset(); + const walker = DOM.createTemplateWalker(fragment); + let node; + while (node = walker.nextNode()) { + context.targetIndex++; + switch (node.nodeType) { + case 1: + compileAttributes(context, node); + break; + case 3: + compileContent(context, node, walker); + break; + case 8: + if (DOM.isMarker(node)) { + context.addFactory(directives[DOM.extractDirectiveIndexFromMarker(node)]); + } + } + } + let targetOffset = 0; + if ( + // If the first node in a fragment is a marker, that means it's an unstable first node, + // because something like a when, repeat, etc. could add nodes before the marker. + // To mitigate this, we insert a stable first node. However, if we insert a node, + // that will alter the result of the TreeWalker. So, we also need to offset the target index. + DOM.isMarker(fragment.firstChild) || // Or if there is only one node and a directive, it means the template's content + // is *only* the directive. In that case, HTMLView.dispose() misses any nodes inserted by + // the directive. Inserting a new node ensures proper disposal of nodes added by the directive. + fragment.childNodes.length === 1 && directives.length + ) { + fragment.insertBefore(document.createComment(""), fragment.firstChild); + targetOffset = -1; + } + const viewBehaviorFactories = context.behaviorFactories; + context.release(); + return { + fragment, + viewBehaviorFactories, + hostBehaviorFactories, + targetOffset + }; + } + var sharedContext, CompilationContext, interpolationEndLength; + var init_compiler = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js"() { + init_dom(); + init_binding(); + sharedContext = null; + CompilationContext = class _CompilationContext { + addFactory(factory) { + factory.targetIndex = this.targetIndex; + this.behaviorFactories.push(factory); + } + captureContentBinding(directive) { + directive.targetAtContent(); + this.addFactory(directive); + } + reset() { + this.behaviorFactories = []; + this.targetIndex = -1; + } + release() { + sharedContext = this; + } + static borrow(directives) { + const shareable = sharedContext || new _CompilationContext(); + shareable.directives = directives; + shareable.reset(); + sharedContext = null; + return shareable; + } + }; + interpolationEndLength = _interpolationEnd.length; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/view.js + var range, HTMLView; + var init_view = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/view.js"() { + range = document.createRange(); + HTMLView = class { + /** + * Constructs an instance of HTMLView. + * @param fragment - The html fragment that contains the nodes for this view. + * @param behaviors - The behaviors to be applied to this view. + */ + constructor(fragment, behaviors) { + this.fragment = fragment; + this.behaviors = behaviors; + this.source = null; + this.context = null; + this.firstChild = fragment.firstChild; + this.lastChild = fragment.lastChild; + } + /** + * Appends the view's DOM nodes to the referenced node. + * @param node - The parent node to append the view's DOM nodes to. + */ + appendTo(node) { + node.appendChild(this.fragment); + } + /** + * Inserts the view's DOM nodes before the referenced node. + * @param node - The node to insert the view's DOM before. + */ + insertBefore(node) { + if (this.fragment.hasChildNodes()) { + node.parentNode.insertBefore(this.fragment, node); + } else { + const end = this.lastChild; + if (node.previousSibling === end) + return; + const parentNode = node.parentNode; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parentNode.insertBefore(current, node); + current = next; + } + parentNode.insertBefore(end, node); + } + } + /** + * Removes the view's DOM nodes. + * The nodes are not disposed and the view can later be re-inserted. + */ + remove() { + const fragment = this.fragment; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + fragment.appendChild(current); + current = next; + } + fragment.appendChild(end); + } + /** + * Removes the view and unbinds its behaviors, disposing of DOM nodes afterward. + * Once a view has been disposed, it cannot be inserted or bound again. + */ + dispose() { + const parent = this.firstChild.parentNode; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parent.removeChild(current); + current = next; + } + parent.removeChild(end); + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + } + /** + * Binds a view's behaviors to its binding source. + * @param source - The binding source for the view's binding behaviors. + * @param context - The execution context to run the behaviors within. + */ + bind(source, context) { + const behaviors = this.behaviors; + if (this.source === source) { + return; + } else if (this.source !== null) { + const oldSource = this.source; + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + const current = behaviors[i]; + current.unbind(oldSource); + current.bind(source, context); + } + } else { + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].bind(source, context); + } + } + } + /** + * Unbinds a view's behaviors from its binding source. + */ + unbind() { + if (this.source === null) { + return; + } + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + this.source = null; + } + /** + * Efficiently disposes of a contiguous range of synthetic view instances. + * @param views - A contiguous range of views to be disposed. + */ + static disposeContiguousBatch(views) { + if (views.length === 0) { + return; + } + range.setStartBefore(views[0].firstChild); + range.setEndAfter(views[views.length - 1].lastChild); + range.deleteContents(); + for (let i = 0, ii = views.length; i < ii; ++i) { + const view = views[i]; + const behaviors = view.behaviors; + const oldSource = view.source; + for (let j = 0, jj = behaviors.length; j < jj; ++j) { + behaviors[j].unbind(oldSource); + } + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/template.js + function html(strings, ...values) { + const directives = []; + let html2 = ""; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + const currentString = strings[i]; + let value = values[i]; + html2 += currentString; + if (value instanceof ViewTemplate) { + const template = value; + value = () => template; + } + if (typeof value === "function") { + value = new HTMLBindingDirective(value); + } + if (value instanceof TargetedHTMLDirective) { + const match = lastAttributeNameRegex.exec(currentString); + if (match !== null) { + value.targetName = match[2]; + } + } + if (value instanceof HTMLDirective) { + html2 += value.createPlaceholder(directives.length); + directives.push(value); + } else { + html2 += value; + } + } + html2 += strings[strings.length - 1]; + return new ViewTemplate(html2, directives); + } + var ViewTemplate, lastAttributeNameRegex; + var init_template = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/template.js"() { + init_dom(); + init_observable(); + init_compiler(); + init_view(); + init_html_directive(); + init_binding(); + ViewTemplate = class { + /** + * Creates an instance of ViewTemplate. + * @param html - The html representing what this template will instantiate, including placeholders for directives. + * @param directives - The directives that will be connected to placeholders in the html. + */ + constructor(html2, directives) { + this.behaviorCount = 0; + this.hasHostBehaviors = false; + this.fragment = null; + this.targetOffset = 0; + this.viewBehaviorFactories = null; + this.hostBehaviorFactories = null; + this.html = html2; + this.directives = directives; + } + /** + * Creates an HTMLView instance based on this template definition. + * @param hostBindingTarget - The element that host behaviors will be bound to. + */ + create(hostBindingTarget) { + if (this.fragment === null) { + let template; + const html2 = this.html; + if (typeof html2 === "string") { + template = document.createElement("template"); + template.innerHTML = DOM.createHTML(html2); + const fec = template.content.firstElementChild; + if (fec !== null && fec.tagName === "TEMPLATE") { + template = fec; + } + } else { + template = html2; + } + const result = compileTemplate(template, this.directives); + this.fragment = result.fragment; + this.viewBehaviorFactories = result.viewBehaviorFactories; + this.hostBehaviorFactories = result.hostBehaviorFactories; + this.targetOffset = result.targetOffset; + this.behaviorCount = this.viewBehaviorFactories.length + this.hostBehaviorFactories.length; + this.hasHostBehaviors = this.hostBehaviorFactories.length > 0; + } + const fragment = this.fragment.cloneNode(true); + const viewFactories = this.viewBehaviorFactories; + const behaviors = new Array(this.behaviorCount); + const walker = DOM.createTemplateWalker(fragment); + let behaviorIndex = 0; + let targetIndex = this.targetOffset; + let node = walker.nextNode(); + for (let ii = viewFactories.length; behaviorIndex < ii; ++behaviorIndex) { + const factory = viewFactories[behaviorIndex]; + const factoryIndex = factory.targetIndex; + while (node !== null) { + if (targetIndex === factoryIndex) { + behaviors[behaviorIndex] = factory.createBehavior(node); + break; + } else { + node = walker.nextNode(); + targetIndex++; + } + } + } + if (this.hasHostBehaviors) { + const hostFactories = this.hostBehaviorFactories; + for (let i = 0, ii = hostFactories.length; i < ii; ++i, ++behaviorIndex) { + behaviors[behaviorIndex] = hostFactories[i].createBehavior(hostBindingTarget); + } + } + return new HTMLView(fragment, behaviors); + } + /** + * Creates an HTMLView from this template, binds it to the source, and then appends it to the host. + * @param source - The data source to bind the template to. + * @param host - The Element where the template will be rendered. + * @param hostBindingTarget - An HTML element to target the host bindings at if different from the + * host that the template is being attached to. + */ + render(source, host, hostBindingTarget) { + if (typeof host === "string") { + host = document.getElementById(host); + } + if (hostBindingTarget === void 0) { + hostBindingTarget = host; + } + const view = this.create(hostBindingTarget); + view.bind(source, defaultExecutionContext); + view.appendTo(host); + return view; + } + }; + lastAttributeNameRegex = /* eslint-disable-next-line no-control-regex */ + /([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js + function reduceStyles(styles) { + return styles.map((x) => x instanceof ElementStyles ? reduceStyles(x.styles) : [x]).reduce((prev, curr) => prev.concat(curr), []); + } + function reduceBehaviors(styles) { + return styles.map((x) => x instanceof ElementStyles ? x.behaviors : null).reduce((prev, curr) => { + if (curr === null) { + return prev; + } + if (prev === null) { + prev = []; + } + return prev.concat(curr); + }, null); + } + function separateSheetsToPrepend(sheets) { + const prepend = []; + const append = []; + sheets.forEach((x) => (x[prependToAdoptedStyleSheetsSymbol] ? prepend : append).push(x)); + return { prepend, append }; + } + function getNextStyleClass() { + return `fast-style-class-${++styleClassId}`; + } + var ElementStyles, prependToAdoptedStyleSheetsSymbol, addAdoptedStyleSheets, removeAdoptedStyleSheets, AdoptedStyleSheetsStyles, styleClassId, StyleElementStyles; + var init_element_styles = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js"() { + init_dom(); + ElementStyles = class { + constructor() { + this.targets = /* @__PURE__ */ new WeakSet(); + } + /** @internal */ + addStylesTo(target) { + this.targets.add(target); + } + /** @internal */ + removeStylesFrom(target) { + this.targets.delete(target); + } + /** @internal */ + isAttachedTo(target) { + return this.targets.has(target); + } + /** + * Associates behaviors with this set of styles. + * @param behaviors - The behaviors to associate. + */ + withBehaviors(...behaviors) { + this.behaviors = this.behaviors === null ? behaviors : this.behaviors.concat(behaviors); + return this; + } + }; + ElementStyles.create = (() => { + if (DOM.supportsAdoptedStyleSheets) { + const styleSheetCache = /* @__PURE__ */ new Map(); + return (styles) => ( + // eslint-disable-next-line @typescript-eslint/no-use-before-define + new AdoptedStyleSheetsStyles(styles, styleSheetCache) + ); + } + return (styles) => new StyleElementStyles(styles); + })(); + prependToAdoptedStyleSheetsSymbol = /* @__PURE__ */ Symbol("prependToAdoptedStyleSheets"); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets = [...prepend, ...target.adoptedStyleSheets, ...append]; + }; + removeAdoptedStyleSheets = (target, sheets) => { + target.adoptedStyleSheets = target.adoptedStyleSheets.filter((x) => sheets.indexOf(x) === -1); + }; + if (DOM.supportsAdoptedStyleSheets) { + try { + document.adoptedStyleSheets.push(); + document.adoptedStyleSheets.splice(); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets.splice(0, 0, ...prepend); + target.adoptedStyleSheets.push(...append); + }; + removeAdoptedStyleSheets = (target, sheets) => { + for (const sheet of sheets) { + const index = target.adoptedStyleSheets.indexOf(sheet); + if (index !== -1) { + target.adoptedStyleSheets.splice(index, 1); + } + } + }; + } catch (e) { + } + } + AdoptedStyleSheetsStyles = class extends ElementStyles { + constructor(styles, styleSheetCache) { + super(); + this.styles = styles; + this.styleSheetCache = styleSheetCache; + this._styleSheets = void 0; + this.behaviors = reduceBehaviors(styles); + } + get styleSheets() { + if (this._styleSheets === void 0) { + const styles = this.styles; + const styleSheetCache = this.styleSheetCache; + this._styleSheets = reduceStyles(styles).map((x) => { + if (x instanceof CSSStyleSheet) { + return x; + } + let sheet = styleSheetCache.get(x); + if (sheet === void 0) { + sheet = new CSSStyleSheet(); + sheet.replaceSync(x); + styleSheetCache.set(x, sheet); + } + return sheet; + }); + } + return this._styleSheets; + } + addStylesTo(target) { + addAdoptedStyleSheets(target, this.styleSheets); + super.addStylesTo(target); + } + removeStylesFrom(target) { + removeAdoptedStyleSheets(target, this.styleSheets); + super.removeStylesFrom(target); + } + }; + styleClassId = 0; + StyleElementStyles = class extends ElementStyles { + constructor(styles) { + super(); + this.styles = styles; + this.behaviors = null; + this.behaviors = reduceBehaviors(styles); + this.styleSheets = reduceStyles(styles); + this.styleClass = getNextStyleClass(); + } + addStylesTo(target) { + const styleSheets = this.styleSheets; + const styleClass = this.styleClass; + target = this.normalizeTarget(target); + for (let i = 0; i < styleSheets.length; i++) { + const element = document.createElement("style"); + element.innerHTML = styleSheets[i]; + element.className = styleClass; + target.append(element); + } + super.addStylesTo(target); + } + removeStylesFrom(target) { + target = this.normalizeTarget(target); + const styles = target.querySelectorAll(`.${this.styleClass}`); + for (let i = 0, ii = styles.length; i < ii; ++i) { + target.removeChild(styles[i]); + } + super.removeStylesFrom(target); + } + isAttachedTo(target) { + return super.isAttachedTo(this.normalizeTarget(target)); + } + normalizeTarget(target) { + return target === document ? document.body : target; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/attributes.js + function attr(configOrTarget, prop) { + let config; + function decorator($target, $prop) { + if (arguments.length > 1) { + config.property = $prop; + } + AttributeConfiguration.locate($target.constructor).push(config); + } + if (arguments.length > 1) { + config = {}; + decorator(configOrTarget, prop); + return; + } + config = configOrTarget === void 0 ? {} : configOrTarget; + return decorator; + } + var AttributeConfiguration, booleanConverter, nullableNumberConverter, AttributeDefinition; + var init_attributes = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/attributes.js"() { + init_observable(); + init_dom(); + init_platform(); + AttributeConfiguration = Object.freeze({ + /** + * Locates all attribute configurations associated with a type. + */ + locate: createMetadataLocator() + }); + booleanConverter = { + toView(value) { + return value ? "true" : "false"; + }, + fromView(value) { + if (value === null || value === void 0 || value === "false" || value === false || value === 0) { + return false; + } + return true; + } + }; + nullableNumberConverter = { + toView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number.toString(); + }, + fromView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number; + } + }; + AttributeDefinition = class _AttributeDefinition { + /** + * Creates an instance of AttributeDefinition. + * @param Owner - The class constructor that owns this attribute. + * @param name - The name of the property associated with the attribute. + * @param attribute - The name of the attribute in HTML. + * @param mode - The {@link AttributeMode} that describes the behavior of this attribute. + * @param converter - A {@link ValueConverter} that integrates with the property getter/setter + * to convert values to and from a DOM string. + */ + constructor(Owner, name, attribute = name.toLowerCase(), mode = "reflect", converter) { + this.guards = /* @__PURE__ */ new Set(); + this.Owner = Owner; + this.name = name; + this.attribute = attribute; + this.mode = mode; + this.converter = converter; + this.fieldName = `_${name}`; + this.callbackName = `${name}Changed`; + this.hasCallback = this.callbackName in Owner.prototype; + if (mode === "boolean" && converter === void 0) { + this.converter = booleanConverter; + } + } + /** + * Sets the value of the attribute/property on the source element. + * @param source - The source element to access. + * @param value - The value to set the attribute/property to. + */ + setValue(source, newValue) { + const oldValue = source[this.fieldName]; + const converter = this.converter; + if (converter !== void 0) { + newValue = converter.fromView(newValue); + } + if (oldValue !== newValue) { + source[this.fieldName] = newValue; + this.tryReflectToAttribute(source); + if (this.hasCallback) { + source[this.callbackName](oldValue, newValue); + } + source.$fastController.notify(this.name); + } + } + /** + * Gets the value of the attribute/property on the source element. + * @param source - The source element to access. + */ + getValue(source) { + Observable.track(source, this.name); + return source[this.fieldName]; + } + /** @internal */ + onAttributeChangedCallback(element, value) { + if (this.guards.has(element)) { + return; + } + this.guards.add(element); + this.setValue(element, value); + this.guards.delete(element); + } + tryReflectToAttribute(element) { + const mode = this.mode; + const guards = this.guards; + if (guards.has(element) || mode === "fromView") { + return; + } + DOM.queueUpdate(() => { + guards.add(element); + const latestValue = element[this.fieldName]; + switch (mode) { + case "reflect": + const converter = this.converter; + DOM.setAttribute(element, this.attribute, converter !== void 0 ? converter.toView(latestValue) : latestValue); + break; + case "boolean": + DOM.setBooleanAttribute(element, this.attribute, latestValue); + break; + } + guards.delete(element); + }); + } + /** + * Collects all attribute definitions associated with the owner. + * @param Owner - The class constructor to collect attribute for. + * @param attributeLists - Any existing attributes to collect and merge with those associated with the owner. + * @internal + */ + static collect(Owner, ...attributeLists) { + const attributes = []; + attributeLists.push(AttributeConfiguration.locate(Owner)); + for (let i = 0, ii = attributeLists.length; i < ii; ++i) { + const list = attributeLists[i]; + if (list === void 0) { + continue; + } + for (let j = 0, jj = list.length; j < jj; ++j) { + const config = list[j]; + if (typeof config === "string") { + attributes.push(new _AttributeDefinition(Owner, config)); + } else { + attributes.push(new _AttributeDefinition(Owner, config.property, config.attribute, config.mode, config.converter)); + } + } + } + return attributes; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js + var defaultShadowOptions, defaultElementOptions, fastRegistry, FASTElementDefinition; + var init_fast_definitions = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js"() { + init_platform(); + init_observable(); + init_element_styles(); + init_attributes(); + defaultShadowOptions = { mode: "open" }; + defaultElementOptions = {}; + fastRegistry = FAST.getById(4, () => { + const typeToDefinition = /* @__PURE__ */ new Map(); + return Object.freeze({ + register(definition) { + if (typeToDefinition.has(definition.type)) { + return false; + } + typeToDefinition.set(definition.type, definition); + return true; + }, + getByType(key) { + return typeToDefinition.get(key); + } + }); + }); + FASTElementDefinition = class { + /** + * Creates an instance of FASTElementDefinition. + * @param type - The type this definition is being created for. + * @param nameOrConfig - The name of the element to define or a config object + * that describes the element to define. + */ + constructor(type, nameOrConfig = type.definition) { + if (typeof nameOrConfig === "string") { + nameOrConfig = { name: nameOrConfig }; + } + this.type = type; + this.name = nameOrConfig.name; + this.template = nameOrConfig.template; + const attributes = AttributeDefinition.collect(type, nameOrConfig.attributes); + const observedAttributes = new Array(attributes.length); + const propertyLookup = {}; + const attributeLookup = {}; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const current = attributes[i]; + observedAttributes[i] = current.attribute; + propertyLookup[current.name] = current; + attributeLookup[current.attribute] = current; + } + this.attributes = attributes; + this.observedAttributes = observedAttributes; + this.propertyLookup = propertyLookup; + this.attributeLookup = attributeLookup; + this.shadowOptions = nameOrConfig.shadowOptions === void 0 ? defaultShadowOptions : nameOrConfig.shadowOptions === null ? void 0 : Object.assign(Object.assign({}, defaultShadowOptions), nameOrConfig.shadowOptions); + this.elementOptions = nameOrConfig.elementOptions === void 0 ? defaultElementOptions : Object.assign(Object.assign({}, defaultElementOptions), nameOrConfig.elementOptions); + this.styles = nameOrConfig.styles === void 0 ? void 0 : Array.isArray(nameOrConfig.styles) ? ElementStyles.create(nameOrConfig.styles) : nameOrConfig.styles instanceof ElementStyles ? nameOrConfig.styles : ElementStyles.create([nameOrConfig.styles]); + } + /** + * Indicates if this element has been defined in at least one registry. + */ + get isDefined() { + return !!fastRegistry.getByType(this.type); + } + /** + * Defines a custom element based on this definition. + * @param registry - The element registry to define the element in. + */ + define(registry = customElements) { + const type = this.type; + if (fastRegistry.register(this)) { + const attributes = this.attributes; + const proto = type.prototype; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + Observable.defineProperty(proto, attributes[i]); + } + Reflect.defineProperty(type, "observedAttributes", { + value: this.observedAttributes, + enumerable: true + }); + } + if (!registry.get(this.name)) { + registry.define(this.name, type, this.elementOptions); + } + return this; + } + }; + FASTElementDefinition.forType = fastRegistry.getByType; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/controller.js + function getShadowRoot(element) { + return element.shadowRoot || shadowRoots.get(element) || null; + } + var shadowRoots, defaultEventOptions, Controller; + var init_controller = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/controller.js"() { + init_dom(); + init_notifier(); + init_observable(); + init_fast_definitions(); + shadowRoots = /* @__PURE__ */ new WeakMap(); + defaultEventOptions = { + bubbles: true, + composed: true, + cancelable: true + }; + Controller = class _Controller extends PropertyChangeNotifier { + /** + * Creates a Controller to control the specified element. + * @param element - The element to be controlled by this controller. + * @param definition - The element definition metadata that instructs this + * controller in how to handle rendering and other platform integrations. + * @internal + */ + constructor(element, definition) { + super(element); + this.boundObservables = null; + this.behaviors = null; + this.needsInitialization = true; + this._template = null; + this._styles = null; + this._isConnected = false; + this.$fastController = this; + this.view = null; + this.element = element; + this.definition = definition; + const shadowOptions = definition.shadowOptions; + if (shadowOptions !== void 0) { + const shadowRoot = element.attachShadow(shadowOptions); + if (shadowOptions.mode === "closed") { + shadowRoots.set(element, shadowRoot); + } + } + const accessors = Observable.getAccessors(element); + if (accessors.length > 0) { + const boundObservables = this.boundObservables = /* @__PURE__ */ Object.create(null); + for (let i = 0, ii = accessors.length; i < ii; ++i) { + const propertyName = accessors[i].name; + const value = element[propertyName]; + if (value !== void 0) { + delete element[propertyName]; + boundObservables[propertyName] = value; + } + } + } + } + /** + * Indicates whether or not the custom element has been + * connected to the document. + */ + get isConnected() { + Observable.track(this, "isConnected"); + return this._isConnected; + } + setIsConnected(value) { + this._isConnected = value; + Observable.notify(this, "isConnected"); + } + /** + * Gets/sets the template used to render the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get template() { + return this._template; + } + set template(value) { + if (this._template === value) { + return; + } + this._template = value; + if (!this.needsInitialization) { + this.renderTemplate(value); + } + } + /** + * Gets/sets the primary styles used for the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get styles() { + return this._styles; + } + set styles(value) { + if (this._styles === value) { + return; + } + if (this._styles !== null) { + this.removeStyles(this._styles); + } + this._styles = value; + if (!this.needsInitialization && value !== null) { + this.addStyles(value); + } + } + /** + * Adds styles to this element. Providing an HTMLStyleElement will attach the element instance to the shadowRoot. + * @param styles - The styles to add. + */ + addStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.append(styles); + } else if (!styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.addStylesTo(target); + if (sourceBehaviors !== null) { + this.addBehaviors(sourceBehaviors); + } + } + } + /** + * Removes styles from this element. Providing an HTMLStyleElement will detach the element instance from the shadowRoot. + * @param styles - the styles to remove. + */ + removeStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.removeChild(styles); + } else if (styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.removeStylesFrom(target); + if (sourceBehaviors !== null) { + this.removeBehaviors(sourceBehaviors); + } + } + } + /** + * Adds behaviors to this element. + * @param behaviors - The behaviors to add. + */ + addBehaviors(behaviors) { + const targetBehaviors = this.behaviors || (this.behaviors = /* @__PURE__ */ new Map()); + const length = behaviors.length; + const behaviorsToBind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + targetBehaviors.set(behavior, targetBehaviors.get(behavior) + 1); + } else { + targetBehaviors.set(behavior, 1); + behaviorsToBind.push(behavior); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToBind.length; ++i) { + behaviorsToBind[i].bind(element, defaultExecutionContext); + } + } + } + /** + * Removes behaviors from this element. + * @param behaviors - The behaviors to remove. + * @param force - Forces unbinding of behaviors. + */ + removeBehaviors(behaviors, force = false) { + const targetBehaviors = this.behaviors; + if (targetBehaviors === null) { + return; + } + const length = behaviors.length; + const behaviorsToUnbind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + const count = targetBehaviors.get(behavior) - 1; + count === 0 || force ? targetBehaviors.delete(behavior) && behaviorsToUnbind.push(behavior) : targetBehaviors.set(behavior, count); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToUnbind.length; ++i) { + behaviorsToUnbind[i].unbind(element); + } + } + } + /** + * Runs connected lifecycle behavior on the associated element. + */ + onConnectedCallback() { + if (this._isConnected) { + return; + } + const element = this.element; + if (this.needsInitialization) { + this.finishInitialization(); + } else if (this.view !== null) { + this.view.bind(element, defaultExecutionContext); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + for (const [behavior] of behaviors) { + behavior.bind(element, defaultExecutionContext); + } + } + this.setIsConnected(true); + } + /** + * Runs disconnected lifecycle behavior on the associated element. + */ + onDisconnectedCallback() { + if (!this._isConnected) { + return; + } + this.setIsConnected(false); + const view = this.view; + if (view !== null) { + view.unbind(); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + const element = this.element; + for (const [behavior] of behaviors) { + behavior.unbind(element); + } + } + } + /** + * Runs the attribute changed callback for the associated element. + * @param name - The name of the attribute that changed. + * @param oldValue - The previous value of the attribute. + * @param newValue - The new value of the attribute. + */ + onAttributeChangedCallback(name, oldValue, newValue) { + const attrDef = this.definition.attributeLookup[name]; + if (attrDef !== void 0) { + attrDef.onAttributeChangedCallback(this.element, newValue); + } + } + /** + * Emits a custom HTML event. + * @param type - The type name of the event. + * @param detail - The event detail object to send with the event. + * @param options - The event options. By default bubbles and composed. + * @remarks + * Only emits events if connected. + */ + emit(type, detail, options) { + if (this._isConnected) { + return this.element.dispatchEvent(new CustomEvent(type, Object.assign(Object.assign({ detail }, defaultEventOptions), options))); + } + return false; + } + finishInitialization() { + const element = this.element; + const boundObservables = this.boundObservables; + if (boundObservables !== null) { + const propertyNames = Object.keys(boundObservables); + for (let i = 0, ii = propertyNames.length; i < ii; ++i) { + const propertyName = propertyNames[i]; + element[propertyName] = boundObservables[propertyName]; + } + this.boundObservables = null; + } + const definition = this.definition; + if (this._template === null) { + if (this.element.resolveTemplate) { + this._template = this.element.resolveTemplate(); + } else if (definition.template) { + this._template = definition.template || null; + } + } + if (this._template !== null) { + this.renderTemplate(this._template); + } + if (this._styles === null) { + if (this.element.resolveStyles) { + this._styles = this.element.resolveStyles(); + } else if (definition.styles) { + this._styles = definition.styles || null; + } + } + if (this._styles !== null) { + this.addStyles(this._styles); + } + this.needsInitialization = false; + } + renderTemplate(template) { + const element = this.element; + const host = getShadowRoot(element) || element; + if (this.view !== null) { + this.view.dispose(); + this.view = null; + } else if (!this.needsInitialization) { + DOM.removeChildNodes(host); + } + if (template) { + this.view = template.render(element, host, element); + } + } + /** + * Locates or creates a controller for the specified element. + * @param element - The element to return the controller for. + * @remarks + * The specified element must have a {@link FASTElementDefinition} + * registered either through the use of the {@link customElement} + * decorator or a call to `FASTElement.define`. + */ + static forCustomElement(element) { + const controller = element.$fastController; + if (controller !== void 0) { + return controller; + } + const definition = FASTElementDefinition.forType(element.constructor); + if (definition === void 0) { + throw new Error("Missing FASTElement definition."); + } + return element.$fastController = new _Controller(element, definition); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js + function createFASTElement(BaseType) { + return class extends BaseType { + constructor() { + super(); + Controller.forCustomElement(this); + } + $emit(type, detail, options) { + return this.$fastController.emit(type, detail, options); + } + connectedCallback() { + this.$fastController.onConnectedCallback(); + } + disconnectedCallback() { + this.$fastController.onDisconnectedCallback(); + } + attributeChangedCallback(name, oldValue, newValue) { + this.$fastController.onAttributeChangedCallback(name, oldValue, newValue); + } + }; + } + var FASTElement; + var init_fast_element = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js"() { + init_controller(); + init_fast_definitions(); + FASTElement = Object.assign(createFASTElement(HTMLElement), { + /** + * Creates a new FASTElement base class inherited from the + * provided base type. + * @param BaseType - The base element type to inherit from. + */ + from(BaseType) { + return createFASTElement(BaseType); + }, + /** + * Defines a platform custom element based on the provided type and definition. + * @param type - The custom element type to define. + * @param nameOrDef - The name of the element to define or a definition object + * that describes the element to define. + */ + define(type, nameOrDef) { + return new FASTElementDefinition(type, nameOrDef).define().type; + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js + var CSSDirective; + var init_css_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js"() { + CSSDirective = class { + /** + * Creates a CSS fragment to interpolate into the CSS document. + * @returns - the string to interpolate into CSS + */ + createCSS() { + return ""; + } + /** + * Creates a behavior to bind to the host element. + * @returns - the behavior to bind to the host element, or undefined. + */ + createBehavior() { + return void 0; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css.js + function collectStyles(strings, values) { + const styles = []; + let cssString = ""; + const behaviors = []; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + cssString += strings[i]; + let value = values[i]; + if (value instanceof CSSDirective) { + const behavior = value.createBehavior(); + value = value.createCSS(); + if (behavior) { + behaviors.push(behavior); + } + } + if (value instanceof ElementStyles || value instanceof CSSStyleSheet) { + if (cssString.trim() !== "") { + styles.push(cssString); + cssString = ""; + } + styles.push(value); + } else { + cssString += value; + } + } + cssString += strings[strings.length - 1]; + if (cssString.trim() !== "") { + styles.push(cssString); + } + return { + styles, + behaviors + }; + } + function css(strings, ...values) { + const { styles, behaviors } = collectStyles(strings, values); + const elementStyles = ElementStyles.create(styles); + if (behaviors.length) { + elementStyles.withBehaviors(...behaviors); + } + return elementStyles; + } + var init_css = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css.js"() { + init_css_directive(); + init_element_styles(); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js + function newSplice(index, removed, addedCount) { + return { + index, + removed, + addedCount + }; + } + function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) { + const rowCount = oldEnd - oldStart + 1; + const columnCount = currentEnd - currentStart + 1; + const distances = new Array(rowCount); + let north; + let west; + for (let i = 0; i < rowCount; ++i) { + distances[i] = new Array(columnCount); + distances[i][0] = i; + } + for (let j = 0; j < columnCount; ++j) { + distances[0][j] = j; + } + for (let i = 1; i < rowCount; ++i) { + for (let j = 1; j < columnCount; ++j) { + if (current[currentStart + j - 1] === old[oldStart + i - 1]) { + distances[i][j] = distances[i - 1][j - 1]; + } else { + north = distances[i - 1][j] + 1; + west = distances[i][j - 1] + 1; + distances[i][j] = north < west ? north : west; + } + } + } + return distances; + } + function spliceOperationsFromEditDistances(distances) { + let i = distances.length - 1; + let j = distances[0].length - 1; + let current = distances[i][j]; + const edits = []; + while (i > 0 || j > 0) { + if (i === 0) { + edits.push(EDIT_ADD); + j--; + continue; + } + if (j === 0) { + edits.push(EDIT_DELETE); + i--; + continue; + } + const northWest = distances[i - 1][j - 1]; + const west = distances[i - 1][j]; + const north = distances[i][j - 1]; + let min; + if (west < north) { + min = west < northWest ? west : northWest; + } else { + min = north < northWest ? north : northWest; + } + if (min === northWest) { + if (northWest === current) { + edits.push(EDIT_LEAVE); + } else { + edits.push(EDIT_UPDATE); + current = northWest; + } + i--; + j--; + } else if (min === west) { + edits.push(EDIT_DELETE); + i--; + current = west; + } else { + edits.push(EDIT_ADD); + j--; + current = north; + } + } + edits.reverse(); + return edits; + } + function sharedPrefix(current, old, searchLength) { + for (let i = 0; i < searchLength; ++i) { + if (current[i] !== old[i]) { + return i; + } + } + return searchLength; + } + function sharedSuffix(current, old, searchLength) { + let index1 = current.length; + let index2 = old.length; + let count = 0; + while (count < searchLength && current[--index1] === old[--index2]) { + count++; + } + return count; + } + function intersect(start1, end1, start2, end2) { + if (end1 < start2 || end2 < start1) { + return -1; + } + if (end1 === start2 || end2 === start1) { + return 0; + } + if (start1 < start2) { + if (end1 < end2) { + return end1 - start2; + } + return end2 - start2; + } + if (end2 < end1) { + return end2 - start1; + } + return end1 - start1; + } + function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) { + let prefixCount = 0; + let suffixCount = 0; + const minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart); + if (currentStart === 0 && oldStart === 0) { + prefixCount = sharedPrefix(current, old, minLength); + } + if (currentEnd === current.length && oldEnd === old.length) { + suffixCount = sharedSuffix(current, old, minLength - prefixCount); + } + currentStart += prefixCount; + oldStart += prefixCount; + currentEnd -= suffixCount; + oldEnd -= suffixCount; + if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) { + return emptyArray; + } + if (currentStart === currentEnd) { + const splice2 = newSplice(currentStart, [], 0); + while (oldStart < oldEnd) { + splice2.removed.push(old[oldStart++]); + } + return [splice2]; + } else if (oldStart === oldEnd) { + return [newSplice(currentStart, [], currentEnd - currentStart)]; + } + const ops = spliceOperationsFromEditDistances(calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd)); + const splices = []; + let splice = void 0; + let index = currentStart; + let oldIndex = oldStart; + for (let i = 0; i < ops.length; ++i) { + switch (ops[i]) { + case EDIT_LEAVE: + if (splice !== void 0) { + splices.push(splice); + splice = void 0; + } + index++; + oldIndex++; + break; + case EDIT_UPDATE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + case EDIT_ADD: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + break; + case EDIT_DELETE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + } + } + if (splice !== void 0) { + splices.push(splice); + } + return splices; + } + function mergeSplice(splices, index, removed, addedCount) { + const splice = newSplice(index, removed, addedCount); + let inserted = false; + let insertionOffset = 0; + for (let i = 0; i < splices.length; i++) { + const current = splices[i]; + current.index += insertionOffset; + if (inserted) { + continue; + } + const intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount); + if (intersectCount >= 0) { + splices.splice(i, 1); + i--; + insertionOffset -= current.addedCount - current.removed.length; + splice.addedCount += current.addedCount - intersectCount; + const deleteCount = splice.removed.length + current.removed.length - intersectCount; + if (!splice.addedCount && !deleteCount) { + inserted = true; + } else { + let currentRemoved = current.removed; + if (splice.index < current.index) { + const prepend = splice.removed.slice(0, current.index - splice.index); + $push.apply(prepend, currentRemoved); + currentRemoved = prepend; + } + if (splice.index + splice.removed.length > current.index + current.addedCount) { + const append = splice.removed.slice(current.index + current.addedCount - splice.index); + $push.apply(currentRemoved, append); + } + splice.removed = currentRemoved; + if (current.index < splice.index) { + splice.index = current.index; + } + } + } else if (splice.index < current.index) { + inserted = true; + splices.splice(i, 0, splice); + i++; + const offset = splice.addedCount - splice.removed.length; + current.index += offset; + insertionOffset += offset; + } + } + if (!inserted) { + splices.push(splice); + } + } + function createInitialSplices(changeRecords) { + const splices = []; + for (let i = 0, ii = changeRecords.length; i < ii; i++) { + const record = changeRecords[i]; + mergeSplice(splices, record.index, record.removed, record.addedCount); + } + return splices; + } + function projectArraySplices(array, changeRecords) { + let splices = []; + const initialSplices = createInitialSplices(changeRecords); + for (let i = 0, ii = initialSplices.length; i < ii; ++i) { + const splice = initialSplices[i]; + if (splice.addedCount === 1 && splice.removed.length === 1) { + if (splice.removed[0] !== array[splice.index]) { + splices.push(splice); + } + continue; + } + splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length)); + } + return splices; + } + var EDIT_LEAVE, EDIT_UPDATE, EDIT_ADD, EDIT_DELETE, $push; + var init_array_change_records = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js"() { + init_platform(); + EDIT_LEAVE = 0; + EDIT_UPDATE = 1; + EDIT_ADD = 2; + EDIT_DELETE = 3; + $push = Array.prototype.push; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js + function adjustIndex(changeRecord, array) { + let index = changeRecord.index; + const arrayLength = array.length; + if (index > arrayLength) { + index = arrayLength - changeRecord.addedCount; + } else if (index < 0) { + index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount; + } + if (index < 0) { + index = 0; + } + changeRecord.index = index; + return changeRecord; + } + function enableArrayObservation() { + if (arrayObservationEnabled) { + return; + } + arrayObservationEnabled = true; + Observable.setArrayObserverFactory((collection) => { + return new ArrayObserver(collection); + }); + const proto = Array.prototype; + if (proto.$fastPatch) { + return; + } + Reflect.defineProperty(proto, "$fastPatch", { + value: 1, + enumerable: false + }); + const pop = proto.pop; + const push = proto.push; + const reverse = proto.reverse; + const shift = proto.shift; + const sort = proto.sort; + const splice = proto.splice; + const unshift = proto.unshift; + proto.pop = function() { + const notEmpty = this.length > 0; + const methodCallResult = pop.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(this.length, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.push = function() { + const methodCallResult = push.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(this.length - arguments.length, [], arguments.length), this)); + } + return methodCallResult; + }; + proto.reverse = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = reverse.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.shift = function() { + const notEmpty = this.length > 0; + const methodCallResult = shift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(0, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.sort = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = sort.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.splice = function() { + const methodCallResult = splice.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(+arguments[0], methodCallResult, arguments.length > 2 ? arguments.length - 2 : 0), this)); + } + return methodCallResult; + }; + proto.unshift = function() { + const methodCallResult = unshift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(0, [], arguments.length), this)); + } + return methodCallResult; + }; + } + var arrayObservationEnabled, ArrayObserver; + var init_array_observer = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js"() { + init_dom(); + init_array_change_records(); + init_notifier(); + init_observable(); + arrayObservationEnabled = false; + ArrayObserver = class extends SubscriberSet { + constructor(source) { + super(source); + this.oldCollection = void 0; + this.splices = void 0; + this.needsQueue = true; + this.call = this.flush; + Reflect.defineProperty(source, "$fastController", { + value: this, + enumerable: false + }); + } + subscribe(subscriber) { + this.flush(); + super.subscribe(subscriber); + } + addSplice(splice) { + if (this.splices === void 0) { + this.splices = [splice]; + } else { + this.splices.push(splice); + } + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + reset(oldCollection) { + this.oldCollection = oldCollection; + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + flush() { + const splices = this.splices; + const oldCollection = this.oldCollection; + if (splices === void 0 && oldCollection === void 0) { + return; + } + this.needsQueue = true; + this.splices = void 0; + this.oldCollection = void 0; + const finalSplices = oldCollection === void 0 ? projectArraySplices(this.source, splices) : calcSplices(this.source, 0, this.source.length, oldCollection, 0, oldCollection.length); + this.notify(finalSplices); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/ref.js + function ref(propertyName) { + return new AttachedBehaviorHTMLDirective("fast-ref", RefBehavior, propertyName); + } + var RefBehavior; + var init_ref = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/ref.js"() { + init_html_directive(); + RefBehavior = class { + /** + * Creates an instance of RefBehavior. + * @param target - The element to reference. + * @param propertyName - The name of the property to assign the reference to. + */ + constructor(target, propertyName) { + this.target = target; + this.propertyName = propertyName; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + source[this.propertyName] = this.target; + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + /* eslint-disable-next-line @typescript-eslint/no-empty-function */ + unbind() { + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/interfaces.js + var isFunction; + var init_interfaces = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/interfaces.js"() { + isFunction = (object) => typeof object === "function"; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/when.js + function normalizeBinding(value) { + return value === void 0 ? noTemplate : isFunction(value) ? value : () => value; + } + function when(binding, templateOrTemplateBinding, elseTemplateOrTemplateBinding) { + const dataBinding = isFunction(binding) ? binding : () => binding; + const templateBinding = normalizeBinding(templateOrTemplateBinding); + const elseBinding = normalizeBinding(elseTemplateOrTemplateBinding); + return (source, context) => dataBinding(source, context) ? templateBinding(source, context) : elseBinding(source, context); + } + var noTemplate; + var init_when = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/when.js"() { + init_interfaces(); + noTemplate = () => null; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js + function bindWithoutPositioning(view, items, index, context) { + view.bind(items[index], context); + } + function bindWithPositioning(view, items, index, context) { + const childContext = Object.create(context); + childContext.index = index; + childContext.length = items.length; + view.bind(items[index], childContext); + } + var defaultRepeatOptions, RepeatBehavior, RepeatDirective; + var init_repeat = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js"() { + init_dom(); + init_observable(); + init_array_observer(); + init_platform(); + init_html_directive(); + init_view(); + defaultRepeatOptions = Object.freeze({ + positioning: false, + recycle: true + }); + RepeatBehavior = class { + /** + * Creates an instance of RepeatBehavior. + * @param location - The location in the DOM to render the repeat. + * @param itemsBinding - The array to render. + * @param isItemsBindingVolatile - Indicates whether the items binding has volatile dependencies. + * @param templateBinding - The template to render for each item. + * @param isTemplateBindingVolatile - Indicates whether the template binding has volatile dependencies. + * @param options - Options used to turn on special repeat features. + */ + constructor(location, itemsBinding, isItemsBindingVolatile, templateBinding, isTemplateBindingVolatile, options) { + this.location = location; + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.source = null; + this.views = []; + this.items = null; + this.itemsObserver = null; + this.originalContext = void 0; + this.childContext = void 0; + this.bindView = bindWithoutPositioning; + this.itemsBindingObserver = Observable.binding(itemsBinding, this, isItemsBindingVolatile); + this.templateBindingObserver = Observable.binding(templateBinding, this, isTemplateBindingVolatile); + if (options.positioning) { + this.bindView = bindWithPositioning; + } + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source, context) { + this.source = source; + this.originalContext = context; + this.childContext = Object.create(context); + this.childContext.parent = source; + this.childContext.parentContext = this.originalContext; + this.items = this.itemsBindingObserver.observe(source, this.originalContext); + this.template = this.templateBindingObserver.observe(source, this.originalContext); + this.observeItems(true); + this.refreshAllViews(); + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.source = null; + this.items = null; + if (this.itemsObserver !== null) { + this.itemsObserver.unsubscribe(this); + } + this.unbindAllViews(); + this.itemsBindingObserver.disconnect(); + this.templateBindingObserver.disconnect(); + } + /** @internal */ + handleChange(source, args) { + if (source === this.itemsBinding) { + this.items = this.itemsBindingObserver.observe(this.source, this.originalContext); + this.observeItems(); + this.refreshAllViews(); + } else if (source === this.templateBinding) { + this.template = this.templateBindingObserver.observe(this.source, this.originalContext); + this.refreshAllViews(true); + } else { + this.updateViews(args); + } + } + observeItems(force = false) { + if (!this.items) { + this.items = emptyArray; + return; + } + const oldObserver = this.itemsObserver; + const newObserver = this.itemsObserver = Observable.getNotifier(this.items); + const hasNewObserver = oldObserver !== newObserver; + if (hasNewObserver && oldObserver !== null) { + oldObserver.unsubscribe(this); + } + if (hasNewObserver || force) { + newObserver.subscribe(this); + } + } + updateViews(splices) { + const childContext = this.childContext; + const views = this.views; + const bindView = this.bindView; + const items = this.items; + const template = this.template; + const recycle = this.options.recycle; + const leftoverViews = []; + let leftoverIndex = 0; + let availableViews = 0; + for (let i = 0, ii = splices.length; i < ii; ++i) { + const splice = splices[i]; + const removed = splice.removed; + let removeIndex = 0; + let addIndex = splice.index; + const end = addIndex + splice.addedCount; + const removedViews = views.splice(splice.index, removed.length); + const totalAvailableViews = availableViews = leftoverViews.length + removedViews.length; + for (; addIndex < end; ++addIndex) { + const neighbor = views[addIndex]; + const location = neighbor ? neighbor.firstChild : this.location; + let view; + if (recycle && availableViews > 0) { + if (removeIndex <= totalAvailableViews && removedViews.length > 0) { + view = removedViews[removeIndex]; + removeIndex++; + } else { + view = leftoverViews[leftoverIndex]; + leftoverIndex++; + } + availableViews--; + } else { + view = template.create(); + } + views.splice(addIndex, 0, view); + bindView(view, items, addIndex, childContext); + view.insertBefore(location); + } + if (removedViews[removeIndex]) { + leftoverViews.push(...removedViews.slice(removeIndex)); + } + } + for (let i = leftoverIndex, ii = leftoverViews.length; i < ii; ++i) { + leftoverViews[i].dispose(); + } + if (this.options.positioning) { + for (let i = 0, ii = views.length; i < ii; ++i) { + const currentContext = views[i].context; + currentContext.length = ii; + currentContext.index = i; + } + } + } + refreshAllViews(templateChanged = false) { + const items = this.items; + const childContext = this.childContext; + const template = this.template; + const location = this.location; + const bindView = this.bindView; + let itemsLength = items.length; + let views = this.views; + let viewsLength = views.length; + if (itemsLength === 0 || templateChanged || !this.options.recycle) { + HTMLView.disposeContiguousBatch(views); + viewsLength = 0; + } + if (viewsLength === 0) { + this.views = views = new Array(itemsLength); + for (let i = 0; i < itemsLength; ++i) { + const view = template.create(); + bindView(view, items, i, childContext); + views[i] = view; + view.insertBefore(location); + } + } else { + let i = 0; + for (; i < itemsLength; ++i) { + if (i < viewsLength) { + const view = views[i]; + bindView(view, items, i, childContext); + } else { + const view = template.create(); + bindView(view, items, i, childContext); + views.push(view); + view.insertBefore(location); + } + } + const removed = views.splice(i, viewsLength - i); + for (i = 0, itemsLength = removed.length; i < itemsLength; ++i) { + removed[i].dispose(); + } + } + } + unbindAllViews() { + const views = this.views; + for (let i = 0, ii = views.length; i < ii; ++i) { + views[i].unbind(); + } + } + }; + RepeatDirective = class extends HTMLDirective { + /** + * Creates an instance of RepeatDirective. + * @param itemsBinding - The binding that provides the array to render. + * @param templateBinding - The template binding used to obtain a template to render for each item in the array. + * @param options - Options used to turn on special repeat features. + */ + constructor(itemsBinding, templateBinding, options) { + super(); + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.createPlaceholder = DOM.createBlockPlaceholder; + enableArrayObservation(); + this.isItemsBindingVolatile = Observable.isVolatileBinding(itemsBinding); + this.isTemplateBindingVolatile = Observable.isVolatileBinding(templateBinding); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + */ + createBehavior(target) { + return new RepeatBehavior(target, this.itemsBinding, this.isItemsBindingVolatile, this.templateBinding, this.isTemplateBindingVolatile, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js + function elements(selector) { + if (selector) { + return function(value, index, array) { + return value.nodeType === 1 && value.matches(selector); + }; + } + return function(value, index, array) { + return value.nodeType === 1; + }; + } + var NodeObservationBehavior; + var init_node_observation = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js"() { + init_observable(); + init_platform(); + NodeObservationBehavior = class { + /** + * Creates an instance of NodeObservationBehavior. + * @param target - The target to assign the nodes property on. + * @param options - The options to use in configuring node observation. + */ + constructor(target, options) { + this.target = target; + this.options = options; + this.source = null; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + const name = this.options.property; + this.shouldUpdate = Observable.getAccessors(source).some((x) => x.name === name); + this.source = source; + this.updateTarget(this.computeNodes()); + if (this.shouldUpdate) { + this.observe(); + } + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.updateTarget(emptyArray); + this.source = null; + if (this.shouldUpdate) { + this.disconnect(); + } + } + /** @internal */ + handleEvent() { + this.updateTarget(this.computeNodes()); + } + computeNodes() { + let nodes = this.getNodes(); + if (this.options.filter !== void 0) { + nodes = nodes.filter(this.options.filter); + } + return nodes; + } + updateTarget(value) { + this.source[this.options.property] = value; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js + function slotted(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { property: propertyOrOptions }; + } + return new AttachedBehaviorHTMLDirective("fast-slotted", SlottedBehavior, propertyOrOptions); + } + var SlottedBehavior; + var init_slotted = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js"() { + init_html_directive(); + init_node_observation(); + SlottedBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of SlottedBehavior. + * @param target - The slot element target to observe. + * @param options - The options to use when observing the slot. + */ + constructor(target, options) { + super(target, options); + } + /** + * Begins observation of the nodes. + */ + observe() { + this.target.addEventListener("slotchange", this); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.target.removeEventListener("slotchange", this); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + return this.target.assignedNodes(this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/children.js + function children(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { + property: propertyOrOptions + }; + } + return new AttachedBehaviorHTMLDirective("fast-children", ChildrenBehavior, propertyOrOptions); + } + var ChildrenBehavior; + var init_children = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/children.js"() { + init_html_directive(); + init_node_observation(); + ChildrenBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of ChildrenBehavior. + * @param target - The element target to observe children on. + * @param options - The options to use when observing the element children. + */ + constructor(target, options) { + super(target, options); + this.observer = null; + options.childList = true; + } + /** + * Begins observation of the nodes. + */ + observe() { + if (this.observer === null) { + this.observer = new MutationObserver(this.handleEvent.bind(this)); + } + this.observer.observe(this.target, this.options); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.observer.disconnect(); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + if ("subtree" in this.options) { + return Array.from(this.target.querySelectorAll(this.options.selector)); + } + return Array.from(this.target.childNodes); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/index.js + var init_esm = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/index.js"() { + init_platform(); + init_template(); + init_fast_element(); + init_fast_definitions(); + init_attributes(); + init_controller(); + init_compiler(); + init_element_styles(); + init_css(); + init_css_directive(); + init_view(); + init_observable(); + init_notifier(); + init_dom(); + init_binding(); + init_html_directive(); + init_ref(); + init_when(); + init_repeat(); + init_slotted(); + init_children(); + init_node_observation(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js + var StartEnd, endSlotTemplate, startSlotTemplate, endTemplate, startTemplate; + var init_start_end = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js"() { + init_esm(); + StartEnd = class { + handleStartContentChange() { + this.startContainer.classList.toggle("start", this.start.assignedNodes().length > 0); + } + handleEndContentChange() { + this.endContainer.classList.toggle("end", this.end.assignedNodes().length > 0); + } + }; + endSlotTemplate = (context, definition) => html` + definition.end ? "end" : void 0} + > + + ${definition.end || ""} + + +`; + startSlotTemplate = (context, definition) => html` + + + ${definition.start || ""} + + +`; + endTemplate = html` + + + +`; + startTemplate = html` + + + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js + var init_accordion_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js + function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es6 = __esm({ + "node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/di.js + function cloneArrayWithPossibleProps(source) { + const clone = source.slice(); + const keys = Object.keys(source); + const len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + clone[key] = source[key]; + } + } + return clone; + } + function getParamTypes(key) { + return (Type) => { + return Reflect.getOwnMetadata(key, Type); + }; + } + function createResolver(getter) { + return function(key) { + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor); + }; + return resolver; + }; + } + function createAllResolver(getter) { + return function(key, searchAncestors) { + searchAncestors = !!searchAncestors; + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor, searchAncestors); + }; + return resolver; + }; + } + function ignore(target, property, descriptor) { + DI.inject(ignore)(target, property, descriptor); + } + function createNewInstance(key, handler) { + return handler.getFactory(key).construct(handler); + } + function containerGetKey(d) { + return this.get(d); + } + function transformInstance(inst, transform) { + return transform(inst); + } + function isRegistry(obj) { + return typeof obj.register === "function"; + } + function isSelfRegistry(obj) { + return isRegistry(obj) && typeof obj.registerInRequestor === "boolean"; + } + function isRegisterInRequester(obj) { + return isSelfRegistry(obj) && obj.registerInRequestor; + } + function isClass(obj) { + return obj.prototype !== void 0; + } + function cacheCallbackResult(fun) { + return function(handler, requestor, resolver) { + if (cache.has(resolver)) { + return cache.get(resolver); + } + const t = fun(handler, requestor, resolver); + cache.set(resolver, t); + return t; + }; + } + function validateKey(key) { + if (key === null || key === void 0) { + throw new Error("key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?"); + } + } + function buildAllResponse(resolver, handler, requestor) { + if (resolver instanceof ResolverImpl && resolver.strategy === 4) { + const state = resolver.state; + let i = state.length; + const results = new Array(i); + while (i--) { + results[i] = state[i].resolve(handler, requestor); + } + return results; + } + return [resolver.resolve(handler, requestor)]; + } + function isObject(value) { + return typeof value === "object" && value !== null || typeof value === "function"; + } + function isArrayIndex(value) { + switch (typeof value) { + case "number": + return value >= 0 && (value | 0) === value; + case "string": { + const result = isNumericLookup[value]; + if (result !== void 0) { + return result; + } + const length = value.length; + if (length === 0) { + return isNumericLookup[value] = false; + } + let ch = 0; + for (let i = 0; i < length; ++i) { + ch = value.charCodeAt(i); + if (i === 0 && ch === 48 && length > 1 || ch < 48 || ch > 57) { + return isNumericLookup[value] = false; + } + } + return isNumericLookup[value] = true; + } + default: + return false; + } + } + var metadataByTarget, ResolverBuilder, DefaultResolver, ContainerConfiguration, dependencyLookup, rootDOMContainer, DI, Container, inject, defaultSingletonOptions, all, lazy, optional, newInstanceForScope, newInstanceOf, ResolverImpl, FactoryImpl, containerResolver, InstrinsicTypeNames, DILocateParentEventType, factories, ContainerImpl, cache, Registration, defaultFriendlyName, isNativeFunction, isNumericLookup; + var init_di = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/di.js"() { + init_esm(); + metadataByTarget = /* @__PURE__ */ new Map(); + if (!("metadata" in Reflect)) { + Reflect.metadata = function(key, value) { + return function(target) { + Reflect.defineMetadata(key, value, target); + }; + }; + Reflect.defineMetadata = function(key, value, target) { + let metadata = metadataByTarget.get(target); + if (metadata === void 0) { + metadataByTarget.set(target, metadata = /* @__PURE__ */ new Map()); + } + metadata.set(key, value); + }; + Reflect.getOwnMetadata = function(key, target) { + const metadata = metadataByTarget.get(target); + if (metadata !== void 0) { + return metadata.get(key); + } + return void 0; + }; + } + ResolverBuilder = class { + /** + * + * @param container - The container to create resolvers for. + * @param key - The key to register resolvers under. + */ + constructor(container, key) { + this.container = container; + this.key = key; + } + /** + * Creates a resolver for an existing object instance. + * @param value - The instance to resolve. + * @returns The resolver. + */ + instance(value) { + return this.registerResolver(0, value); + } + /** + * Creates a resolver that enforces a singleton lifetime. + * @param value - The type to create and cache the singleton for. + * @returns The resolver. + */ + singleton(value) { + return this.registerResolver(1, value); + } + /** + * Creates a resolver that creates a new instance for every dependency request. + * @param value - The type to create instances of. + * @returns - The resolver. + */ + transient(value) { + return this.registerResolver(2, value); + } + /** + * Creates a resolver that invokes a callback function for every dependency resolution + * request, allowing custom logic to return the dependency. + * @param value - The callback to call during resolution. + * @returns The resolver. + */ + callback(value) { + return this.registerResolver(3, value); + } + /** + * Creates a resolver that invokes a callback function the first time that a dependency + * resolution is requested. The returned value is then cached and provided for all + * subsequent requests. + * @param value - The callback to call during the first resolution. + * @returns The resolver. + */ + cachedCallback(value) { + return this.registerResolver(3, cacheCallbackResult(value)); + } + /** + * Aliases the current key to a different key. + * @param destinationKey - The key to point the alias to. + * @returns The resolver. + */ + aliasTo(destinationKey) { + return this.registerResolver(5, destinationKey); + } + registerResolver(strategy, state) { + const { container, key } = this; + this.container = this.key = void 0; + return container.registerResolver(key, new ResolverImpl(key, strategy, state)); + } + }; + DefaultResolver = Object.freeze({ + /** + * Disables auto-registration and throws for all un-registered dependencies. + * @param key - The key to create the resolver for. + */ + none(key) { + throw Error(`${key.toString()} not registered, did you forget to add @singleton()?`); + }, + /** + * Provides default singleton resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + singleton(key) { + return new ResolverImpl(key, 1, key); + }, + /** + * Provides default transient resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + transient(key) { + return new ResolverImpl(key, 2, key); + } + }); + ContainerConfiguration = Object.freeze({ + /** + * The default configuration used when creating a DOM-disconnected container. + * @remarks + * The default creates a root container, with no parent container. It does not handle + * owner requests and it uses singleton resolution behavior for auto-registration. + */ + default: Object.freeze({ + parentLocator: () => null, + responsibleForOwnerRequests: false, + defaultResolver: DefaultResolver.singleton + }) + }); + dependencyLookup = /* @__PURE__ */ new Map(); + rootDOMContainer = null; + DI = Object.freeze({ + /** + * Creates a new dependency injection container. + * @param config - The configuration for the container. + * @returns A newly created dependency injection container. + */ + createContainer(config) { + return new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config)); + }, + /** + * Finds the dependency injection container responsible for providing dependencies + * to the specified node. + * @param node - The node to find the responsible container for. + * @returns The container responsible for providing dependencies to the node. + * @remarks + * This will be the same as the parent container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findResponsibleContainer(node) { + const owned = node.$$container$$; + if (owned && owned.responsibleForOwnerRequests) { + return owned; + } + return DI.findParentContainer(node); + }, + /** + * Find the dependency injection container up the DOM tree from this node. + * @param node - The node to find the parent container for. + * @returns The parent container of this node. + * @remarks + * This will be the same as the responsible container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findParentContainer(node) { + const event = new CustomEvent(DILocateParentEventType, { + bubbles: true, + composed: true, + cancelable: true, + detail: { container: void 0 } + }); + node.dispatchEvent(event); + return event.detail.container || DI.getOrCreateDOMContainer(); + }, + /** + * Returns a dependency injection container if one is explicitly owned by the specified + * node. If one is not owned, then a new container is created and assigned to the node. + * @param node - The node to find or create the container for. + * @param config - The configuration for the container if one needs to be created. + * @returns The located or created container. + * @remarks + * This API does not search for a responsible or parent container. It looks only for a container + * directly defined on the specified node and creates one at that location if one does not + * already exist. + */ + getOrCreateDOMContainer(node, config) { + if (!node) { + return rootDOMContainer || (rootDOMContainer = new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: () => null + }))); + } + return node.$$container$$ || new ContainerImpl(node, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: DI.findParentContainer + })); + }, + /** + * Gets the "design:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getDesignParamtypes: getParamTypes("design:paramtypes"), + /** + * Gets the "di:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getAnnotationParamtypes: getParamTypes("di:paramtypes"), + /** + * + * @param Type - Gets the "di:paramtypes" metadata for the specified type. If none is found, + * an empty metadata array is created and added. + * @returns The metadata array. + */ + getOrCreateAnnotationParamTypes(Type) { + let annotationParamtypes = this.getAnnotationParamtypes(Type); + if (annotationParamtypes === void 0) { + Reflect.defineMetadata("di:paramtypes", annotationParamtypes = [], Type); + } + return annotationParamtypes; + }, + /** + * Gets the dependency keys representing what is needed to instantiate the specified type. + * @param Type - The type to get the dependencies for. + * @returns An array of dependency keys. + */ + getDependencies(Type) { + let dependencies = dependencyLookup.get(Type); + if (dependencies === void 0) { + const inject2 = Type.inject; + if (inject2 === void 0) { + const designParamtypes = DI.getDesignParamtypes(Type); + const annotationParamtypes = DI.getAnnotationParamtypes(Type); + if (designParamtypes === void 0) { + if (annotationParamtypes === void 0) { + const Proto = Object.getPrototypeOf(Type); + if (typeof Proto === "function" && Proto !== Function.prototype) { + dependencies = cloneArrayWithPossibleProps(DI.getDependencies(Proto)); + } else { + dependencies = []; + } + } else { + dependencies = cloneArrayWithPossibleProps(annotationParamtypes); + } + } else if (annotationParamtypes === void 0) { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + } else { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + let len = annotationParamtypes.length; + let auAnnotationParamtype; + for (let i = 0; i < len; ++i) { + auAnnotationParamtype = annotationParamtypes[i]; + if (auAnnotationParamtype !== void 0) { + dependencies[i] = auAnnotationParamtype; + } + } + const keys = Object.keys(annotationParamtypes); + len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + dependencies[key] = annotationParamtypes[key]; + } + } + } + } else { + dependencies = cloneArrayWithPossibleProps(inject2); + } + dependencyLookup.set(Type, dependencies); + } + return dependencies; + }, + /** + * Defines a property on a web component class. The value of this property will + * be resolved from the dependency injection container responsible for the element + * instance, based on where it is connected in the DOM. + * @param target - The target to define the property on. + * @param propertyName - The name of the property to define. + * @param key - The dependency injection key. + * @param respectConnection - Indicates whether or not to update the property value if the + * hosting component is disconnected and then re-connected at a different location in the DOM. + * @remarks + * The respectConnection option is only applicable to elements that descend from FASTElement. + */ + defineProperty(target, propertyName, key, respectConnection = false) { + const diPropertyKey = `$di_${propertyName}`; + Reflect.defineProperty(target, propertyName, { + get: function() { + let value = this[diPropertyKey]; + if (value === void 0) { + const container = this instanceof HTMLElement ? DI.findResponsibleContainer(this) : DI.getOrCreateDOMContainer(); + value = container.get(key); + this[diPropertyKey] = value; + if (respectConnection && this instanceof FASTElement) { + const notifier = this.$fastController; + const handleChange = () => { + const newContainer = DI.findResponsibleContainer(this); + const newValue = newContainer.get(key); + const oldValue = this[diPropertyKey]; + if (newValue !== oldValue) { + this[diPropertyKey] = value; + notifier.notify(propertyName); + } + }; + notifier.subscribe({ handleChange }, "isConnected"); + } + } + return value; + } + }); + }, + /** + * Creates a dependency injection key. + * @param nameConfigOrCallback - A friendly name for the key or a lambda that configures a + * default resolution for the dependency. + * @param configuror - If a friendly name was provided for the first parameter, then an optional + * lambda that configures a default resolution for the dependency can be provided second. + * @returns The created key. + * @remarks + * The created key can be used as a property decorator or constructor parameter decorator, + * in addition to its standard use in an inject array or through direct container APIs. + */ + createInterface(nameConfigOrCallback, configuror) { + const configure = typeof nameConfigOrCallback === "function" ? nameConfigOrCallback : configuror; + const friendlyName = typeof nameConfigOrCallback === "string" ? nameConfigOrCallback : nameConfigOrCallback && "friendlyName" in nameConfigOrCallback ? nameConfigOrCallback.friendlyName || defaultFriendlyName : defaultFriendlyName; + const respectConnection = typeof nameConfigOrCallback === "string" ? false : nameConfigOrCallback && "respectConnection" in nameConfigOrCallback ? nameConfigOrCallback.respectConnection || false : false; + const Interface = function(target, property, index) { + if (target == null || new.target !== void 0) { + throw new Error(`No registration for interface: '${Interface.friendlyName}'`); + } + if (property) { + DI.defineProperty(target, property, Interface, respectConnection); + } else { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + annotationParamtypes[index] = Interface; + } + }; + Interface.$isInterface = true; + Interface.friendlyName = friendlyName == null ? "(anonymous)" : friendlyName; + if (configure != null) { + Interface.register = function(container, key) { + return configure(new ResolverBuilder(container, key !== null && key !== void 0 ? key : Interface)); + }; + } + Interface.toString = function toString() { + return `InterfaceSymbol<${Interface.friendlyName}>`; + }; + return Interface; + }, + /** + * A decorator that specifies what to inject into its target. + * @param dependencies - The dependencies to inject. + * @returns The decorator to be applied to the target class. + * @remarks + * The decorator can be used to decorate a class, listing all of the classes dependencies. + * Or it can be used to decorate a constructor paramter, indicating what to inject for that + * parameter. + * Or it can be used for a web component property, indicating what that property should resolve to. + */ + inject(...dependencies) { + return function(target, key, descriptor) { + if (typeof descriptor === "number") { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + const dep = dependencies[0]; + if (dep !== void 0) { + annotationParamtypes[descriptor] = dep; + } + } else if (key) { + DI.defineProperty(target, key, dependencies[0]); + } else { + const annotationParamtypes = descriptor ? DI.getOrCreateAnnotationParamTypes(descriptor.value) : DI.getOrCreateAnnotationParamTypes(target); + let dep; + for (let i = 0; i < dependencies.length; ++i) { + dep = dependencies[i]; + if (dep !== void 0) { + annotationParamtypes[i] = dep; + } + } + } + }; + }, + /** + * Registers the `target` class as a transient dependency; each time the dependency is resolved + * a new instance will be created. + * + * @param target - The class / constructor function to register as transient. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.transient(Foo); + * ``` + * + * @example + * Inline declaration + * + * ```ts + * const Foo = DI.transient(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + transient(target) { + target.register = function register(container) { + const registration = Registration.transient(target, target); + return registration.register(container); + }; + target.registerInRequestor = false; + return target; + }, + /** + * Registers the `target` class as a singleton dependency; the class will only be created once. Each + * consecutive time the dependency is resolved, the same instance will be returned. + * + * @param target - The class / constructor function to register as a singleton. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.singleton(Foo); + * ``` + * + * @example + * Inline declaration + * ```ts + * const Foo = DI.singleton(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + singleton(target, options = defaultSingletonOptions) { + target.register = function register(container) { + const registration = Registration.singleton(target, target); + return registration.register(container); + }; + target.registerInRequestor = options.scoped; + return target; + } + }); + Container = DI.createInterface("Container"); + inject = DI.inject; + defaultSingletonOptions = { scoped: false }; + all = createAllResolver((key, handler, requestor, searchAncestors) => requestor.getAll(key, searchAncestors)); + lazy = createResolver((key, handler, requestor) => { + return () => requestor.get(key); + }); + optional = createResolver((key, handler, requestor) => { + if (requestor.has(key, true)) { + return requestor.get(key); + } else { + return void 0; + } + }); + ignore.$isResolver = true; + ignore.resolve = () => void 0; + newInstanceForScope = createResolver((key, handler, requestor) => { + const instance = createNewInstance(key, handler); + const resolver = new ResolverImpl(key, 0, instance); + requestor.registerResolver(key, resolver); + return instance; + }); + newInstanceOf = createResolver((key, handler, _requestor) => createNewInstance(key, handler)); + ResolverImpl = class { + constructor(key, strategy, state) { + this.key = key; + this.strategy = strategy; + this.state = state; + this.resolving = false; + } + get $isResolver() { + return true; + } + register(container) { + return container.registerResolver(this.key, this); + } + resolve(handler, requestor) { + switch (this.strategy) { + case 0: + return this.state; + case 1: { + if (this.resolving) { + throw new Error(`Cyclic dependency found: ${this.state.name}`); + } + this.resolving = true; + this.state = handler.getFactory(this.state).construct(requestor); + this.strategy = 0; + this.resolving = false; + return this.state; + } + case 2: { + const factory = handler.getFactory(this.state); + if (factory === null) { + throw new Error(`Resolver for ${String(this.key)} returned a null factory`); + } + return factory.construct(requestor); + } + case 3: + return this.state(handler, requestor, this); + case 4: + return this.state[0].resolve(handler, requestor); + case 5: + return requestor.get(this.state); + default: + throw new Error(`Invalid resolver strategy specified: ${this.strategy}.`); + } + } + getFactory(container) { + var _a, _b, _c; + switch (this.strategy) { + case 1: + case 2: + return container.getFactory(this.state); + case 5: + return (_c = (_b = (_a = container.getResolver(this.state)) === null || _a === void 0 ? void 0 : _a.getFactory) === null || _b === void 0 ? void 0 : _b.call(_a, container)) !== null && _c !== void 0 ? _c : null; + default: + return null; + } + } + }; + FactoryImpl = class { + constructor(Type, dependencies) { + this.Type = Type; + this.dependencies = dependencies; + this.transformers = null; + } + construct(container, dynamicDependencies) { + let instance; + if (dynamicDependencies === void 0) { + instance = new this.Type(...this.dependencies.map(containerGetKey, container)); + } else { + instance = new this.Type(...this.dependencies.map(containerGetKey, container), ...dynamicDependencies); + } + if (this.transformers == null) { + return instance; + } + return this.transformers.reduce(transformInstance, instance); + } + registerTransformer(transformer) { + (this.transformers || (this.transformers = [])).push(transformer); + } + }; + containerResolver = { + $isResolver: true, + resolve(handler, requestor) { + return requestor; + } + }; + InstrinsicTypeNames = /* @__PURE__ */ new Set([ + "Array", + "ArrayBuffer", + "Boolean", + "DataView", + "Date", + "Error", + "EvalError", + "Float32Array", + "Float64Array", + "Function", + "Int8Array", + "Int16Array", + "Int32Array", + "Map", + "Number", + "Object", + "Promise", + "RangeError", + "ReferenceError", + "RegExp", + "Set", + "SharedArrayBuffer", + "String", + "SyntaxError", + "TypeError", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "URIError", + "WeakMap", + "WeakSet" + ]); + DILocateParentEventType = "__DI_LOCATE_PARENT__"; + factories = /* @__PURE__ */ new Map(); + ContainerImpl = class _ContainerImpl { + constructor(owner, config) { + this.owner = owner; + this.config = config; + this._parent = void 0; + this.registerDepth = 0; + this.context = null; + if (owner !== null) { + owner.$$container$$ = this; + } + this.resolvers = /* @__PURE__ */ new Map(); + this.resolvers.set(Container, containerResolver); + if (owner instanceof Node) { + owner.addEventListener(DILocateParentEventType, (e) => { + if (e.composedPath()[0] !== this.owner) { + e.detail.container = this; + e.stopImmediatePropagation(); + } + }); + } + } + get parent() { + if (this._parent === void 0) { + this._parent = this.config.parentLocator(this.owner); + } + return this._parent; + } + get depth() { + return this.parent === null ? 0 : this.parent.depth + 1; + } + get responsibleForOwnerRequests() { + return this.config.responsibleForOwnerRequests; + } + registerWithContext(context, ...params) { + this.context = context; + this.register(...params); + this.context = null; + return this; + } + register(...params) { + if (++this.registerDepth === 100) { + throw new Error("Unable to autoregister dependency"); + } + let current; + let keys; + let value; + let j; + let jj; + const context = this.context; + for (let i = 0, ii = params.length; i < ii; ++i) { + current = params[i]; + if (!isObject(current)) { + continue; + } + if (isRegistry(current)) { + current.register(this, context); + } else if (isClass(current)) { + Registration.singleton(current, current).register(this); + } else { + keys = Object.keys(current); + j = 0; + jj = keys.length; + for (; j < jj; ++j) { + value = current[keys[j]]; + if (!isObject(value)) { + continue; + } + if (isRegistry(value)) { + value.register(this, context); + } else { + this.register(value); + } + } + } + } + --this.registerDepth; + return this; + } + registerResolver(key, resolver) { + validateKey(key); + const resolvers = this.resolvers; + const result = resolvers.get(key); + if (result == null) { + resolvers.set(key, resolver); + } else if (result instanceof ResolverImpl && result.strategy === 4) { + result.state.push(resolver); + } else { + resolvers.set(key, new ResolverImpl(key, 4, [result, resolver])); + } + return resolver; + } + registerTransformer(key, transformer) { + const resolver = this.getResolver(key); + if (resolver == null) { + return false; + } + if (resolver.getFactory) { + const factory = resolver.getFactory(this); + if (factory == null) { + return false; + } + factory.registerTransformer(transformer); + return true; + } + return false; + } + getResolver(key, autoRegister = true) { + validateKey(key); + if (key.resolve !== void 0) { + return key; + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + return autoRegister ? this.jitRegister(key, handler) : null; + } + current = current.parent; + } else { + return resolver; + } + } + return null; + } + has(key, searchAncestors = false) { + return this.resolvers.has(key) ? true : searchAncestors && this.parent != null ? this.parent.has(key, true) : false; + } + get(key) { + validateKey(key); + if (key.$isResolver) { + return key.resolve(this, this); + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + resolver = this.jitRegister(key, handler); + return resolver.resolve(current, this); + } + current = current.parent; + } else { + return resolver.resolve(current, this); + } + } + throw new Error(`Unable to resolve key: ${String(key)}`); + } + getAll(key, searchAncestors = false) { + validateKey(key); + const requestor = this; + let current = requestor; + let resolver; + if (searchAncestors) { + let resolutions = emptyArray; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver != null) { + resolutions = resolutions.concat( + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + buildAllResponse(resolver, current, requestor) + ); + } + current = current.parent; + } + return resolutions; + } else { + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + current = current.parent; + if (current == null) { + return emptyArray; + } + } else { + return buildAllResponse(resolver, current, requestor); + } + } + } + return emptyArray; + } + getFactory(Type) { + let factory = factories.get(Type); + if (factory === void 0) { + if (isNativeFunction(Type)) { + throw new Error(`${Type.name} is a native function and therefore cannot be safely constructed by DI. If this is intentional, please use a callback or cachedCallback resolver.`); + } + factories.set(Type, factory = new FactoryImpl(Type, DI.getDependencies(Type))); + } + return factory; + } + registerFactory(key, factory) { + factories.set(key, factory); + } + createChild(config) { + return new _ContainerImpl(null, Object.assign({}, this.config, config, { parentLocator: () => this })); + } + jitRegister(keyAsValue, handler) { + if (typeof keyAsValue !== "function") { + throw new Error(`Attempted to jitRegister something that is not a constructor: '${keyAsValue}'. Did you forget to register this dependency?`); + } + if (InstrinsicTypeNames.has(keyAsValue.name)) { + throw new Error(`Attempted to jitRegister an intrinsic type: ${keyAsValue.name}. Did you forget to add @inject(Key)`); + } + if (isRegistry(keyAsValue)) { + const registrationResolver = keyAsValue.register(handler); + if (!(registrationResolver instanceof Object) || registrationResolver.resolve == null) { + const newResolver = handler.resolvers.get(keyAsValue); + if (newResolver != void 0) { + return newResolver; + } + throw new Error("A valid resolver was not returned from the static register method"); + } + return registrationResolver; + } else if (keyAsValue.$isInterface) { + throw new Error(`Attempted to jitRegister an interface: ${keyAsValue.friendlyName}`); + } else { + const resolver = this.config.defaultResolver(keyAsValue, handler); + handler.resolvers.set(keyAsValue, resolver); + return resolver; + } + } + }; + cache = /* @__PURE__ */ new WeakMap(); + Registration = Object.freeze({ + /** + * Allows you to pass an instance. + * Every time you request this {@link Key} you will get this instance back. + * + * @example + * ``` + * Registration.instance(Foo, new Foo())); + * ``` + * + * @param key - The key to register the instance under. + * @param value - The instance to return when the key is requested. + */ + instance(key, value) { + return new ResolverImpl(key, 0, value); + }, + /** + * Creates an instance from the class. + * Every time you request this {@link Key} you will get the same one back. + * + * @example + * ``` + * Registration.singleton(Foo, Foo); + * ``` + * + * @param key - The key to register the singleton under. + * @param value - The class to instantiate as a singleton when first requested. + */ + singleton(key, value) { + return new ResolverImpl(key, 1, value); + }, + /** + * Creates an instance from a class. + * Every time you request this {@link Key} you will get a new instance. + * + * @example + * ``` + * Registration.instance(Foo, Foo); + * ``` + * + * @param key - The key to register the instance type under. + * @param value - The class to instantiate each time the key is requested. + */ + transient(key, value) { + return new ResolverImpl(key, 2, value); + }, + /** + * Delegates to a callback function to provide the dependency. + * Every time you request this {@link Key} the callback will be invoked to provide + * the dependency. + * + * @example + * ``` + * Registration.callback(Foo, () => new Foo()); + * Registration.callback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + */ + callback(key, callback) { + return new ResolverImpl(key, 3, callback); + }, + /** + * Delegates to a callback function to provide the dependency and then caches the + * dependency for future requests. + * + * @example + * ``` + * Registration.cachedCallback(Foo, () => new Foo()); + * Registration.cachedCallback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + * @remarks + * If you pass the same Registration to another container, the same cached value will be used. + * Should all references to the resolver returned be removed, the cache will expire. + */ + cachedCallback(key, callback) { + return new ResolverImpl(key, 3, cacheCallbackResult(callback)); + }, + /** + * Creates an alternate {@link Key} to retrieve an instance by. + * + * @example + * ``` + * Register.singleton(Foo, Foo) + * Register.aliasTo(Foo, MyFoos); + * + * container.getAll(MyFoos) // contains an instance of Foo + * ``` + * + * @param originalKey - The original key that has been registered. + * @param aliasKey - The alias to the original key. + */ + aliasTo(originalKey, aliasKey) { + return new ResolverImpl(aliasKey, 5, originalKey); + } + }); + defaultFriendlyName = "(anonymous)"; + isNativeFunction = /* @__PURE__ */ (function() { + const lookup = /* @__PURE__ */ new WeakMap(); + let isNative = false; + let sourceText = ""; + let i = 0; + return function(fn) { + isNative = lookup.get(fn); + if (isNative === void 0) { + sourceText = fn.toString(); + i = sourceText.length; + isNative = // 29 is the length of 'function () { [native code] }' which is the smallest length of a native function string + i >= 29 && // 100 seems to be a safe upper bound of the max length of a native function. In Chrome and FF it's 56, in Edge it's 61. + i <= 100 && // This whole heuristic *could* be tricked by a comment. Do we need to care about that? + sourceText.charCodeAt(i - 1) === 125 && // } + // TODO: the spec is a little vague about the precise constraints, so we do need to test this across various browsers to make sure just one whitespace is a safe assumption. + sourceText.charCodeAt(i - 2) <= 32 && // whitespace + sourceText.charCodeAt(i - 3) === 93 && // ] + sourceText.charCodeAt(i - 4) === 101 && // e + sourceText.charCodeAt(i - 5) === 100 && // d + sourceText.charCodeAt(i - 6) === 111 && // o + sourceText.charCodeAt(i - 7) === 99 && // c + sourceText.charCodeAt(i - 8) === 32 && // + sourceText.charCodeAt(i - 9) === 101 && // e + sourceText.charCodeAt(i - 10) === 118 && // v + sourceText.charCodeAt(i - 11) === 105 && // i + sourceText.charCodeAt(i - 12) === 116 && // t + sourceText.charCodeAt(i - 13) === 97 && // a + sourceText.charCodeAt(i - 14) === 110 && // n + sourceText.charCodeAt(i - 15) === 88; + lookup.set(fn, isNative); + } + return isNative; + }; + })(); + isNumericLookup = {}; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js + function presentationKeyFromTag(tagName) { + return `${tagName.toLowerCase()}:presentation`; + } + var presentationRegistry, ComponentPresentation, DefaultComponentPresentation; + var init_component_presentation = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js"() { + init_esm(); + init_di(); + presentationRegistry = /* @__PURE__ */ new Map(); + ComponentPresentation = Object.freeze({ + /** + * Defines a component presentation for an element. + * @param tagName - The element name to define the presentation for. + * @param presentation - The presentation that will be applied to matching elements. + * @param container - The dependency injection container to register the configuration in. + * @public + */ + define(tagName, presentation, container) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === void 0) { + presentationRegistry.set(key, presentation); + } else { + presentationRegistry.set(key, false); + } + container.register(Registration.instance(key, presentation)); + }, + /** + * Finds a component presentation for the specified element name, + * searching the DOM hierarchy starting from the provided element. + * @param tagName - The name of the element to locate the presentation for. + * @param element - The element to begin the search from. + * @returns The component presentation or null if none is found. + * @public + */ + forTag(tagName, element) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === false) { + const container = DI.findResponsibleContainer(element); + return container.get(key); + } + return existing || null; + } + }); + DefaultComponentPresentation = class { + /** + * Creates an instance of DefaultComponentPresentation. + * @param template - The template to apply to the element. + * @param styles - The styles to apply to the element. + * @public + */ + constructor(template, styles) { + this.template = template || null; + this.styles = styles === void 0 ? null : Array.isArray(styles) ? ElementStyles.create(styles) : styles instanceof ElementStyles ? styles : ElementStyles.create([styles]); + } + /** + * Applies the presentation details to the specified element. + * @param element - The element to apply the presentation details to. + * @public + */ + applyTo(element) { + const controller = element.$fastController; + if (controller.template === null) { + controller.template = this.template; + } + if (controller.styles === null) { + controller.styles = this.styles; + } + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js + function resolveOption(option, context, definition) { + if (typeof option === "function") { + return option(context, definition); + } + return option; + } + var FoundationElement, FoundationElementRegistry; + var init_foundation_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js"() { + init_tslib_es6(); + init_esm(); + init_component_presentation(); + FoundationElement = class _FoundationElement extends FASTElement { + constructor() { + super(...arguments); + this._presentation = void 0; + } + /** + * A property which resolves the ComponentPresentation instance + * for the current component. + * @public + */ + get $presentation() { + if (this._presentation === void 0) { + this._presentation = ComponentPresentation.forTag(this.tagName, this); + } + return this._presentation; + } + templateChanged() { + if (this.template !== void 0) { + this.$fastController.template = this.template; + } + } + stylesChanged() { + if (this.styles !== void 0) { + this.$fastController.styles = this.styles; + } + } + /** + * The connected callback for this FASTElement. + * @remarks + * This method is invoked by the platform whenever this FoundationElement + * becomes connected to the document. + * @public + */ + connectedCallback() { + if (this.$presentation !== null) { + this.$presentation.applyTo(this); + } + super.connectedCallback(); + } + /** + * Defines an element registry function with a set of element definition defaults. + * @param elementDefinition - The definition of the element to create the registry + * function for. + * @public + */ + static compose(elementDefinition) { + return (overrideDefinition = {}) => new FoundationElementRegistry(this === _FoundationElement ? class extends _FoundationElement { + } : this, elementDefinition, overrideDefinition); + } + }; + __decorate([ + observable + ], FoundationElement.prototype, "template", void 0); + __decorate([ + observable + ], FoundationElement.prototype, "styles", void 0); + FoundationElementRegistry = class { + constructor(type, elementDefinition, overrideDefinition) { + this.type = type; + this.elementDefinition = elementDefinition; + this.overrideDefinition = overrideDefinition; + this.definition = Object.assign(Object.assign({}, this.elementDefinition), this.overrideDefinition); + } + register(container, context) { + const definition = this.definition; + const overrideDefinition = this.overrideDefinition; + const prefix = definition.prefix || context.elementPrefix; + const name = `${prefix}-${definition.baseName}`; + context.tryDefineElement({ + name, + type: this.type, + baseClass: this.elementDefinition.baseClass, + callback: (x) => { + const presentation = new DefaultComponentPresentation(resolveOption(definition.template, x, definition), resolveOption(definition.styles, x, definition)); + x.definePresentation(presentation); + let shadowOptions = resolveOption(definition.shadowOptions, x, definition); + if (x.shadowRootMode) { + if (shadowOptions) { + if (!overrideDefinition.shadowOptions) { + shadowOptions.mode = x.shadowRootMode; + } + } else if (shadowOptions !== null) { + shadowOptions = { mode: x.shadowRootMode }; + } + } + x.defineElement({ + elementOptions: resolveOption(definition.elementOptions, x, definition), + shadowOptions, + attributes: resolveOption(definition.attributes, x, definition) + }); + } + }); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js + function applyMixins(derivedCtor, ...baseCtors) { + const derivedAttributes = AttributeConfiguration.locate(derivedCtor); + baseCtors.forEach((baseCtor) => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => { + if (name !== "constructor") { + Object.defineProperty( + derivedCtor.prototype, + name, + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + Object.getOwnPropertyDescriptor(baseCtor.prototype, name) + ); + } + }); + const baseAttributes = AttributeConfiguration.locate(baseCtor); + baseAttributes.forEach((x) => derivedAttributes.push(x)); + }); + } + var init_apply_mixins = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js"() { + init_esm(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js + var AccordionItem; + var init_accordion_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_start_end(); + init_apply_mixins(); + AccordionItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.headinglevel = 2; + this.expanded = false; + this.clickHandler = (e) => { + this.expanded = !this.expanded; + this.change(); + }; + this.change = () => { + this.$emit("change"); + }; + } + }; + __decorate([ + attr({ + attribute: "heading-level", + mode: "fromView", + converter: nullableNumberConverter + }) + ], AccordionItem.prototype, "headinglevel", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], AccordionItem.prototype, "expanded", void 0); + __decorate([ + attr + ], AccordionItem.prototype, "id", void 0); + applyMixins(AccordionItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js + var init_accordion_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js"() { + init_accordion_item_template(); + init_accordion_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js + var init_accordion_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/aria.js + var Orientation; + var init_aria = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/aria.js"() { + Orientation = { + horizontal: "horizontal", + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/array.js + function findLastIndex(array, predicate) { + let k = array.length; + while (k--) { + if (predicate(array[k], k, array)) { + return k; + } + } + return -1; + } + var init_array = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/array.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/class-names.js + var init_class_names = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/class-names.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-dom.js + function canUseDOM() { + return !!(typeof window !== "undefined" && window.document && window.document.createElement); + } + var init_can_use_dom = __esm({ + "node_modules/exenv-es6/dist/can-use-dom.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-event-listeners.js + var init_can_use_event_listeners = __esm({ + "node_modules/exenv-es6/dist/can-use-event-listeners.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-viewport.js + var init_can_use_viewport = __esm({ + "node_modules/exenv-es6/dist/can-use-viewport.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-workers.js + var init_can_use_workers = __esm({ + "node_modules/exenv-es6/dist/can-use-workers.js"() { + } + }); + + // node_modules/exenv-es6/dist/index.js + var init_dist = __esm({ + "node_modules/exenv-es6/dist/index.js"() { + init_can_use_dom(); + init_can_use_event_listeners(); + init_can_use_viewport(); + init_can_use_workers(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/dom.js + function isHTMLElement(...args) { + return args.every((arg) => arg instanceof HTMLElement); + } + function getDisplayedNodes(rootNode, selector) { + if (!rootNode || !selector || !isHTMLElement(rootNode)) { + return; + } + const nodes = Array.from(rootNode.querySelectorAll(selector)); + return nodes.filter((node) => node.offsetParent !== null); + } + function getNonce() { + const node = document.querySelector('meta[property="csp-nonce"]'); + if (node) { + return node.getAttribute("content"); + } else { + return null; + } + } + function canUseFocusVisible() { + if (typeof _canUseFocusVisible === "boolean") { + return _canUseFocusVisible; + } + if (!canUseDOM()) { + _canUseFocusVisible = false; + return _canUseFocusVisible; + } + const styleElement = document.createElement("style"); + const styleNonce = getNonce(); + if (styleNonce !== null) { + styleElement.setAttribute("nonce", styleNonce); + } + document.head.appendChild(styleElement); + try { + styleElement.sheet.insertRule("foo:focus-visible {color:inherit}", 0); + _canUseFocusVisible = true; + } catch (e) { + _canUseFocusVisible = false; + } finally { + document.head.removeChild(styleElement); + } + return _canUseFocusVisible; + } + var _canUseFocusVisible; + var init_dom2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/dom.js"() { + init_dist(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/events.js + var eventFocus, eventFocusIn, eventFocusOut, eventKeyDown, eventResize, eventScroll; + var init_events = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/events.js"() { + eventFocus = "focus"; + eventFocusIn = "focusin"; + eventFocusOut = "focusout"; + eventKeyDown = "keydown"; + eventResize = "resize"; + eventScroll = "scroll"; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/html.js + var init_html = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/html.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/key-codes.js + var KeyCodes, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnter, keyEscape, keyHome, keyEnd, keyFunction2, keyPageDown, keyPageUp, keySpace, keyTab, keyBackspace, keyDelete, ArrowKeys; + var init_key_codes = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/key-codes.js"() { + (function(KeyCodes2) { + KeyCodes2[KeyCodes2["alt"] = 18] = "alt"; + KeyCodes2[KeyCodes2["arrowDown"] = 40] = "arrowDown"; + KeyCodes2[KeyCodes2["arrowLeft"] = 37] = "arrowLeft"; + KeyCodes2[KeyCodes2["arrowRight"] = 39] = "arrowRight"; + KeyCodes2[KeyCodes2["arrowUp"] = 38] = "arrowUp"; + KeyCodes2[KeyCodes2["back"] = 8] = "back"; + KeyCodes2[KeyCodes2["backSlash"] = 220] = "backSlash"; + KeyCodes2[KeyCodes2["break"] = 19] = "break"; + KeyCodes2[KeyCodes2["capsLock"] = 20] = "capsLock"; + KeyCodes2[KeyCodes2["closeBracket"] = 221] = "closeBracket"; + KeyCodes2[KeyCodes2["colon"] = 186] = "colon"; + KeyCodes2[KeyCodes2["colon2"] = 59] = "colon2"; + KeyCodes2[KeyCodes2["comma"] = 188] = "comma"; + KeyCodes2[KeyCodes2["ctrl"] = 17] = "ctrl"; + KeyCodes2[KeyCodes2["delete"] = 46] = "delete"; + KeyCodes2[KeyCodes2["end"] = 35] = "end"; + KeyCodes2[KeyCodes2["enter"] = 13] = "enter"; + KeyCodes2[KeyCodes2["equals"] = 187] = "equals"; + KeyCodes2[KeyCodes2["equals2"] = 61] = "equals2"; + KeyCodes2[KeyCodes2["equals3"] = 107] = "equals3"; + KeyCodes2[KeyCodes2["escape"] = 27] = "escape"; + KeyCodes2[KeyCodes2["forwardSlash"] = 191] = "forwardSlash"; + KeyCodes2[KeyCodes2["function1"] = 112] = "function1"; + KeyCodes2[KeyCodes2["function10"] = 121] = "function10"; + KeyCodes2[KeyCodes2["function11"] = 122] = "function11"; + KeyCodes2[KeyCodes2["function12"] = 123] = "function12"; + KeyCodes2[KeyCodes2["function2"] = 113] = "function2"; + KeyCodes2[KeyCodes2["function3"] = 114] = "function3"; + KeyCodes2[KeyCodes2["function4"] = 115] = "function4"; + KeyCodes2[KeyCodes2["function5"] = 116] = "function5"; + KeyCodes2[KeyCodes2["function6"] = 117] = "function6"; + KeyCodes2[KeyCodes2["function7"] = 118] = "function7"; + KeyCodes2[KeyCodes2["function8"] = 119] = "function8"; + KeyCodes2[KeyCodes2["function9"] = 120] = "function9"; + KeyCodes2[KeyCodes2["home"] = 36] = "home"; + KeyCodes2[KeyCodes2["insert"] = 45] = "insert"; + KeyCodes2[KeyCodes2["menu"] = 93] = "menu"; + KeyCodes2[KeyCodes2["minus"] = 189] = "minus"; + KeyCodes2[KeyCodes2["minus2"] = 109] = "minus2"; + KeyCodes2[KeyCodes2["numLock"] = 144] = "numLock"; + KeyCodes2[KeyCodes2["numPad0"] = 96] = "numPad0"; + KeyCodes2[KeyCodes2["numPad1"] = 97] = "numPad1"; + KeyCodes2[KeyCodes2["numPad2"] = 98] = "numPad2"; + KeyCodes2[KeyCodes2["numPad3"] = 99] = "numPad3"; + KeyCodes2[KeyCodes2["numPad4"] = 100] = "numPad4"; + KeyCodes2[KeyCodes2["numPad5"] = 101] = "numPad5"; + KeyCodes2[KeyCodes2["numPad6"] = 102] = "numPad6"; + KeyCodes2[KeyCodes2["numPad7"] = 103] = "numPad7"; + KeyCodes2[KeyCodes2["numPad8"] = 104] = "numPad8"; + KeyCodes2[KeyCodes2["numPad9"] = 105] = "numPad9"; + KeyCodes2[KeyCodes2["numPadDivide"] = 111] = "numPadDivide"; + KeyCodes2[KeyCodes2["numPadDot"] = 110] = "numPadDot"; + KeyCodes2[KeyCodes2["numPadMinus"] = 109] = "numPadMinus"; + KeyCodes2[KeyCodes2["numPadMultiply"] = 106] = "numPadMultiply"; + KeyCodes2[KeyCodes2["numPadPlus"] = 107] = "numPadPlus"; + KeyCodes2[KeyCodes2["openBracket"] = 219] = "openBracket"; + KeyCodes2[KeyCodes2["pageDown"] = 34] = "pageDown"; + KeyCodes2[KeyCodes2["pageUp"] = 33] = "pageUp"; + KeyCodes2[KeyCodes2["period"] = 190] = "period"; + KeyCodes2[KeyCodes2["print"] = 44] = "print"; + KeyCodes2[KeyCodes2["quote"] = 222] = "quote"; + KeyCodes2[KeyCodes2["scrollLock"] = 145] = "scrollLock"; + KeyCodes2[KeyCodes2["shift"] = 16] = "shift"; + KeyCodes2[KeyCodes2["space"] = 32] = "space"; + KeyCodes2[KeyCodes2["tab"] = 9] = "tab"; + KeyCodes2[KeyCodes2["tilde"] = 192] = "tilde"; + KeyCodes2[KeyCodes2["windowsLeft"] = 91] = "windowsLeft"; + KeyCodes2[KeyCodes2["windowsOpera"] = 219] = "windowsOpera"; + KeyCodes2[KeyCodes2["windowsRight"] = 92] = "windowsRight"; + })(KeyCodes || (KeyCodes = {})); + keyArrowDown = "ArrowDown"; + keyArrowLeft = "ArrowLeft"; + keyArrowRight = "ArrowRight"; + keyArrowUp = "ArrowUp"; + keyEnter = "Enter"; + keyEscape = "Escape"; + keyHome = "Home"; + keyEnd = "End"; + keyFunction2 = "F2"; + keyPageDown = "PageDown"; + keyPageUp = "PageUp"; + keySpace = " "; + keyTab = "Tab"; + keyBackspace = "Backspace"; + keyDelete = "Delete"; + ArrowKeys = { + ArrowDown: keyArrowDown, + ArrowLeft: keyArrowLeft, + ArrowRight: keyArrowRight, + ArrowUp: keyArrowUp + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/localization.js + var Direction; + var init_localization = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/localization.js"() { + (function(Direction2) { + Direction2["ltr"] = "ltr"; + Direction2["rtl"] = "rtl"; + })(Direction || (Direction = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/numbers.js + function wrapInBounds(min, max, value) { + if (value < min) { + return max; + } else if (value > max) { + return min; + } + return value; + } + function limit(min, max, value) { + return Math.min(Math.max(value, min), max); + } + function inRange(value, min, max = 0) { + [min, max] = [min, max].sort((a, b) => a - b); + return min <= value && value < max; + } + var init_numbers = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/numbers.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/strings.js + function uniqueId(prefix = "") { + return `${prefix}${uniqueIdCounter++}`; + } + var uniqueIdCounter; + var init_strings = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/strings.js"() { + uniqueIdCounter = 0; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/query.js + var init_query = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/query.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js + var RtlScrollConverter; + var init_rtl_scroll_converter = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js"() { + init_dist(); + init_localization(); + RtlScrollConverter = class _RtlScrollConverter { + /** + * Gets the scrollLeft value of the provided element + */ + static getScrollLeft(scrolledElement, direction) { + if (direction === Direction.rtl) { + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + return scrolledElement.scrollLeft; + } + /** + * Sets the scrollLeft value of the provided element + */ + static setScrollLeft(scrolledElement, scrollValue, direction) { + if (direction === Direction.rtl) { + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, scrollValue); + return; + } + scrolledElement.scrollLeft = scrollValue; + } + /** + * The initial rtl scroll converter getter function, it calls the browser test to set the correct converter + * functions and then invokes the getter + */ + static initialGetRtlScrollConverter(scrolledElement) { + _RtlScrollConverter.initializeRtlScrollConverters(); + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + /** + * The "direct" rtl get scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft; + } + /** + * The "inverted" get scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedGetRtlScrollConverter(scrolledElement) { + return -Math.abs(scrolledElement.scrollLeft); + } + /** + * The "reverse" get scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft - (scrolledElement.scrollWidth - scrolledElement.clientWidth); + } + /** + * The initial rtl scroll converter setter function, it calls the browser test to set the correct converter + * functions and then invokes the setter + */ + static initialSetRtlScrollConverter(scrolledElement, newScrollValue) { + _RtlScrollConverter.initializeRtlScrollConverters(); + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, newScrollValue); + } + /** + * The "direct" rtl set scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = newScrollValue; + } + /** + * The "inverted" set scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = Math.abs(newScrollValue); + } + /** + * The "reverse" set scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseSetRtlScrollConverter(scrolledElement, newScrollValue) { + const maxScroll = scrolledElement.scrollWidth - scrolledElement.clientWidth; + scrolledElement.scrollLeft = maxScroll + newScrollValue; + } + /** + * detects the appropriate rtl scroll converter functions and assigns them + * should only run once + */ + static initializeRtlScrollConverters() { + if (!canUseDOM()) { + _RtlScrollConverter.applyDirectScrollConverters(); + return; + } + const testElement = _RtlScrollConverter.getTestElement(); + document.body.appendChild(testElement); + _RtlScrollConverter.checkForScrollType(testElement); + document.body.removeChild(testElement); + } + /** + * checks the provided test element to determine scroll type + * and apply appropriate converters + */ + static checkForScrollType(testElement) { + if (_RtlScrollConverter.isReverse(testElement)) { + _RtlScrollConverter.applyReverseScrollConverters(); + } else { + if (_RtlScrollConverter.isDirect(testElement)) { + _RtlScrollConverter.applyDirectScrollConverters(); + } else { + _RtlScrollConverter.applyInvertedScrollConverters(); + } + } + } + /** + * checks test element initial state for rtl "reverse" mode + */ + static isReverse(testElement) { + return testElement.scrollLeft > 0; + } + /** + * checks test element for rtl "direct" mode + */ + static isDirect(testElement) { + testElement.scrollLeft = -1; + return testElement.scrollLeft < 0; + } + /** + * apply direct scroll conververters + */ + static applyDirectScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.directSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.directGetRtlScrollConverter; + } + /** + * apply inverted scroll conververters + */ + static applyInvertedScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.invertedSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.invertedGetRtlScrollConverter; + } + /** + * apply reverse scroll conververters + */ + static applyReverseScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.reverseSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.reverseGetRtlScrollConverter; + } + /** + * generate a test element for rtl testing + */ + static getTestElement() { + const testElement = document.createElement("div"); + testElement.appendChild(document.createTextNode("ABCD")); + testElement.dir = "rtl"; + testElement.style.fontSize = "14px"; + testElement.style.width = "4px"; + testElement.style.height = "1px"; + testElement.style.position = "absolute"; + testElement.style.top = "-1000px"; + testElement.style.overflow = "scroll"; + return testElement; + } + }; + RtlScrollConverter.getRtlScrollLeftConverter = RtlScrollConverter.initialGetRtlScrollConverter; + RtlScrollConverter.setRtlScrollLeftConverter = RtlScrollConverter.initialSetRtlScrollConverter; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/system-colors.js + var SystemColors; + var init_system_colors = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/system-colors.js"() { + (function(SystemColors2) { + SystemColors2["Canvas"] = "Canvas"; + SystemColors2["CanvasText"] = "CanvasText"; + SystemColors2["LinkText"] = "LinkText"; + SystemColors2["VisitedText"] = "VisitedText"; + SystemColors2["ActiveText"] = "ActiveText"; + SystemColors2["ButtonFace"] = "ButtonFace"; + SystemColors2["ButtonText"] = "ButtonText"; + SystemColors2["Field"] = "Field"; + SystemColors2["FieldText"] = "FieldText"; + SystemColors2["Highlight"] = "Highlight"; + SystemColors2["HighlightText"] = "HighlightText"; + SystemColors2["GrayText"] = "GrayText"; + })(SystemColors || (SystemColors = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/index.js + var init_dist2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/index.js"() { + init_aria(); + init_array(); + init_class_names(); + init_dom2(); + init_events(); + init_html(); + init_key_codes(); + init_localization(); + init_numbers(); + init_strings(); + init_query(); + init_rtl_scroll_converter(); + init_system_colors(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js + var AccordionExpandMode, Accordion; + var init_accordion = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_accordion_item(); + AccordionExpandMode = { + /** + * Designates only a single {@link @microsoft/fast-foundation#(AccordionItem:class) } can be open a time. + */ + single: "single", + /** + * Designates multiple {@link @microsoft/fast-foundation#(AccordionItem:class) | AccordionItems} can be open simultaneously. + */ + multi: "multi" + }; + Accordion = class extends FoundationElement { + constructor() { + super(...arguments); + this.expandmode = AccordionExpandMode.multi; + this.activeItemIndex = 0; + this.change = () => { + this.$emit("change", this.activeid); + }; + this.setItems = () => { + var _a; + if (this.accordionItems.length === 0) { + return; + } + this.accordionIds = this.getItemIds(); + this.accordionItems.forEach((item, index) => { + if (item instanceof AccordionItem) { + item.addEventListener("change", this.activeItemChange); + if (this.isSingleExpandMode()) { + this.activeItemIndex !== index ? item.expanded = false : item.expanded = true; + } + } + const itemId = this.accordionIds[index]; + item.setAttribute("id", typeof itemId !== "string" ? `accordion-${index + 1}` : itemId); + this.activeid = this.accordionIds[this.activeItemIndex]; + item.addEventListener("keydown", this.handleItemKeyDown); + item.addEventListener("focus", this.handleItemFocus); + }); + if (this.isSingleExpandMode()) { + const expandedItem = (_a = this.findExpandedItem()) !== null && _a !== void 0 ? _a : this.accordionItems[0]; + expandedItem.setAttribute("aria-disabled", "true"); + } + }; + this.removeItemListeners = (oldValue) => { + oldValue.forEach((item, index) => { + item.removeEventListener("change", this.activeItemChange); + item.removeEventListener("keydown", this.handleItemKeyDown); + item.removeEventListener("focus", this.handleItemFocus); + }); + }; + this.activeItemChange = (event) => { + if (event.defaultPrevented || event.target !== event.currentTarget) { + return; + } + event.preventDefault(); + const selectedItem = event.target; + this.activeid = selectedItem.getAttribute("id"); + if (this.isSingleExpandMode()) { + this.resetItems(); + selectedItem.expanded = true; + selectedItem.setAttribute("aria-disabled", "true"); + this.accordionItems.forEach((item) => { + if (!item.hasAttribute("disabled") && item.id !== this.activeid) { + item.removeAttribute("aria-disabled"); + } + }); + } + this.activeItemIndex = Array.from(this.accordionItems).indexOf(selectedItem); + this.change(); + }; + this.handleItemKeyDown = (event) => { + if (event.target !== event.currentTarget) { + return; + } + this.accordionIds = this.getItemIds(); + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjust(-1); + break; + case keyArrowDown: + event.preventDefault(); + this.adjust(1); + break; + case keyHome: + this.activeItemIndex = 0; + this.focusItem(); + break; + case keyEnd: + this.activeItemIndex = this.accordionItems.length - 1; + this.focusItem(); + break; + } + }; + this.handleItemFocus = (event) => { + if (event.target === event.currentTarget) { + const focusedItem = event.target; + const focusedIndex = this.activeItemIndex = Array.from(this.accordionItems).indexOf(focusedItem); + if (this.activeItemIndex !== focusedIndex && focusedIndex !== -1) { + this.activeItemIndex = focusedIndex; + this.activeid = this.accordionIds[this.activeItemIndex]; + } + } + }; + } + /** + * @internal + */ + accordionItemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.removeItemListeners(oldValue); + this.setItems(); + } + } + findExpandedItem() { + for (let item = 0; item < this.accordionItems.length; item++) { + if (this.accordionItems[item].getAttribute("expanded") === "true") { + return this.accordionItems[item]; + } + } + return null; + } + resetItems() { + this.accordionItems.forEach((item, index) => { + item.expanded = false; + }); + } + getItemIds() { + return this.accordionItems.map((accordionItem) => { + return accordionItem.getAttribute("id"); + }); + } + isSingleExpandMode() { + return this.expandmode === AccordionExpandMode.single; + } + adjust(adjustment) { + this.activeItemIndex = wrapInBounds(0, this.accordionItems.length - 1, this.activeItemIndex + adjustment); + this.focusItem(); + } + focusItem() { + const element = this.accordionItems[this.activeItemIndex]; + if (element instanceof AccordionItem) { + element.expandbutton.focus(); + } + } + }; + __decorate([ + attr({ attribute: "expand-mode" }) + ], Accordion.prototype, "expandmode", void 0); + __decorate([ + observable + ], Accordion.prototype, "accordionItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js + var init_accordion2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js"() { + init_accordion_template(); + init_accordion(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js + var anchorTemplate; + var init_anchor_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js"() { + init_esm(); + init_start_end(); + anchorTemplate = (context, definition) => html` + + ${startSlotTemplate(context, definition)} + + + + ${endSlotTemplate(context, definition)} + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js + var ARIAGlobalStatesAndProperties; + var init_aria_global = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js"() { + init_tslib_es6(); + init_esm(); + ARIAGlobalStatesAndProperties = class { + }; + __decorate([ + attr({ attribute: "aria-atomic" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaAtomic", void 0); + __decorate([ + attr({ attribute: "aria-busy" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaBusy", void 0); + __decorate([ + attr({ attribute: "aria-controls" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaControls", void 0); + __decorate([ + attr({ attribute: "aria-current" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaCurrent", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-details" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDetails", void 0); + __decorate([ + attr({ attribute: "aria-disabled" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDisabled", void 0); + __decorate([ + attr({ attribute: "aria-errormessage" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaErrormessage", void 0); + __decorate([ + attr({ attribute: "aria-flowto" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaFlowto", void 0); + __decorate([ + attr({ attribute: "aria-haspopup" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHaspopup", void 0); + __decorate([ + attr({ attribute: "aria-hidden" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHidden", void 0); + __decorate([ + attr({ attribute: "aria-invalid" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaInvalid", void 0); + __decorate([ + attr({ attribute: "aria-keyshortcuts" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaKeyshortcuts", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabel", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-live" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLive", void 0); + __decorate([ + attr({ attribute: "aria-owns" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaOwns", void 0); + __decorate([ + attr({ attribute: "aria-relevant" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRelevant", void 0); + __decorate([ + attr({ attribute: "aria-roledescription" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRoledescription", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js + var init_patterns = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js"() { + init_aria_global(); + init_start_end(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js + var Anchor, DelegatesARIALink; + var init_anchor = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_patterns(); + init_apply_mixins(); + Anchor = class extends FoundationElement { + constructor() { + super(...arguments); + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + var _a2; + (_a2 = this.control) === null || _a2 === void 0 ? void 0 : _a2.focus(); + }; + } + }; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.handleUnsupportedDelegatesFocus(); + } + }; + __decorate([ + attr + ], Anchor.prototype, "download", void 0); + __decorate([ + attr + ], Anchor.prototype, "href", void 0); + __decorate([ + attr + ], Anchor.prototype, "hreflang", void 0); + __decorate([ + attr + ], Anchor.prototype, "ping", void 0); + __decorate([ + attr + ], Anchor.prototype, "referrerpolicy", void 0); + __decorate([ + attr + ], Anchor.prototype, "rel", void 0); + __decorate([ + attr + ], Anchor.prototype, "target", void 0); + __decorate([ + attr + ], Anchor.prototype, "type", void 0); + __decorate([ + observable + ], Anchor.prototype, "defaultSlottedContent", void 0); + DelegatesARIALink = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIALink.prototype, "ariaExpanded", void 0); + applyMixins(DelegatesARIALink, ARIAGlobalStatesAndProperties); + applyMixins(Anchor, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js + var init_anchor2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js"() { + init_anchor_template(); + init_anchor(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js + var init_anchored_region_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js + var getDirection; + var init_direction = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js"() { + init_dist2(); + getDirection = (rootNode) => { + const dirNode = rootNode.closest("[dir]"); + return dirNode !== null && dirNode.dir === "rtl" ? Direction.rtl : Direction.ltr; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js + var IntersectionService; + var init_intersection_service = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js"() { + init_esm(); + IntersectionService = class { + constructor() { + this.intersectionDetector = null; + this.observedElements = /* @__PURE__ */ new Map(); + this.requestPosition = (target, callback) => { + var _a; + if (this.intersectionDetector === null) { + return; + } + if (this.observedElements.has(target)) { + (_a = this.observedElements.get(target)) === null || _a === void 0 ? void 0 : _a.push(callback); + return; + } + this.observedElements.set(target, [callback]); + this.intersectionDetector.observe(target); + }; + this.cancelRequestPosition = (target, callback) => { + const callbacks = this.observedElements.get(target); + if (callbacks !== void 0) { + const callBackIndex = callbacks.indexOf(callback); + if (callBackIndex !== -1) { + callbacks.splice(callBackIndex, 1); + } + } + }; + this.initializeIntersectionDetector = () => { + if (!$global.IntersectionObserver) { + return; + } + this.intersectionDetector = new IntersectionObserver(this.handleIntersection, { + root: null, + rootMargin: "0px", + threshold: [0, 1] + }); + }; + this.handleIntersection = (entries) => { + if (this.intersectionDetector === null) { + return; + } + const pendingCallbacks = []; + const pendingCallbackParams = []; + entries.forEach((entry) => { + var _a; + (_a = this.intersectionDetector) === null || _a === void 0 ? void 0 : _a.unobserve(entry.target); + const thisElementCallbacks = this.observedElements.get(entry.target); + if (thisElementCallbacks !== void 0) { + thisElementCallbacks.forEach((callback) => { + let targetCallbackIndex = pendingCallbacks.indexOf(callback); + if (targetCallbackIndex === -1) { + targetCallbackIndex = pendingCallbacks.length; + pendingCallbacks.push(callback); + pendingCallbackParams.push([]); + } + pendingCallbackParams[targetCallbackIndex].push(entry); + }); + this.observedElements.delete(entry.target); + } + }); + pendingCallbacks.forEach((callback, index) => { + callback(pendingCallbackParams[index]); + }); + }; + this.initializeIntersectionDetector(); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js + var AnchoredRegion; + var init_anchored_region = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_direction(); + init_intersection_service(); + AnchoredRegion = class _AnchoredRegion extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.viewport = ""; + this.horizontalPositioningMode = "uncontrolled"; + this.horizontalDefaultPosition = "unset"; + this.horizontalViewportLock = false; + this.horizontalInset = false; + this.horizontalScaling = "content"; + this.verticalPositioningMode = "uncontrolled"; + this.verticalDefaultPosition = "unset"; + this.verticalViewportLock = false; + this.verticalInset = false; + this.verticalScaling = "content"; + this.fixedPlacement = false; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.initialLayoutComplete = false; + this.resizeDetector = null; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.pendingPositioningUpdate = false; + this.pendingReset = false; + this.currentDirection = Direction.ltr; + this.regionVisible = false; + this.forceUpdate = false; + this.updateThreshold = 0.5; + this.update = () => { + if (!this.pendingPositioningUpdate) { + this.requestPositionUpdates(); + } + }; + this.startObservers = () => { + this.stopObservers(); + if (this.anchorElement === null) { + return; + } + this.requestPositionUpdates(); + if (this.resizeDetector !== null) { + this.resizeDetector.observe(this.anchorElement); + this.resizeDetector.observe(this); + } + }; + this.requestPositionUpdates = () => { + if (this.anchorElement === null || this.pendingPositioningUpdate) { + return; + } + _AnchoredRegion.intersectionService.requestPosition(this, this.handleIntersection); + _AnchoredRegion.intersectionService.requestPosition(this.anchorElement, this.handleIntersection); + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.requestPosition(this.viewportElement, this.handleIntersection); + } + this.pendingPositioningUpdate = true; + }; + this.stopObservers = () => { + if (this.pendingPositioningUpdate) { + this.pendingPositioningUpdate = false; + _AnchoredRegion.intersectionService.cancelRequestPosition(this, this.handleIntersection); + if (this.anchorElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.anchorElement, this.handleIntersection); + } + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.viewportElement, this.handleIntersection); + } + } + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + } + }; + this.getViewport = () => { + if (typeof this.viewport !== "string" || this.viewport === "") { + return document.documentElement; + } + return document.getElementById(this.viewport); + }; + this.getAnchor = () => { + return document.getElementById(this.anchor); + }; + this.handleIntersection = (entries) => { + if (!this.pendingPositioningUpdate) { + return; + } + this.pendingPositioningUpdate = false; + if (!this.applyIntersectionEntries(entries)) { + return; + } + this.updateLayout(); + }; + this.applyIntersectionEntries = (entries) => { + const regionEntry = entries.find((x) => x.target === this); + const anchorEntry = entries.find((x) => x.target === this.anchorElement); + const viewportEntry = entries.find((x) => x.target === this.viewportElement); + if (regionEntry === void 0 || viewportEntry === void 0 || anchorEntry === void 0) { + return false; + } + if (!this.regionVisible || this.forceUpdate || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0 || this.isRectDifferent(this.anchorRect, anchorEntry.boundingClientRect) || this.isRectDifferent(this.viewportRect, viewportEntry.boundingClientRect) || this.isRectDifferent(this.regionRect, regionEntry.boundingClientRect)) { + this.regionRect = regionEntry.boundingClientRect; + this.anchorRect = anchorEntry.boundingClientRect; + if (this.viewportElement === document.documentElement) { + this.viewportRect = new DOMRectReadOnly(viewportEntry.boundingClientRect.x + document.documentElement.scrollLeft, viewportEntry.boundingClientRect.y + document.documentElement.scrollTop, viewportEntry.boundingClientRect.width, viewportEntry.boundingClientRect.height); + } else { + this.viewportRect = viewportEntry.boundingClientRect; + } + this.updateRegionOffset(); + this.forceUpdate = false; + return true; + } + return false; + }; + this.updateRegionOffset = () => { + if (this.anchorRect && this.regionRect) { + this.baseHorizontalOffset = this.baseHorizontalOffset + (this.anchorRect.left - this.regionRect.left) + (this.translateX - this.baseHorizontalOffset); + this.baseVerticalOffset = this.baseVerticalOffset + (this.anchorRect.top - this.regionRect.top) + (this.translateY - this.baseVerticalOffset); + } + }; + this.isRectDifferent = (rectA, rectB) => { + if (Math.abs(rectA.top - rectB.top) > this.updateThreshold || Math.abs(rectA.right - rectB.right) > this.updateThreshold || Math.abs(rectA.bottom - rectB.bottom) > this.updateThreshold || Math.abs(rectA.left - rectB.left) > this.updateThreshold) { + return true; + } + return false; + }; + this.handleResize = (entries) => { + this.update(); + }; + this.reset = () => { + if (!this.pendingReset) { + return; + } + this.pendingReset = false; + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + if (this.viewportElement === null) { + this.viewportElement = this.getViewport(); + } + this.currentDirection = getDirection(this); + this.startObservers(); + }; + this.updateLayout = () => { + let desiredVerticalPosition = void 0; + let desiredHorizontalPosition = void 0; + if (this.horizontalPositioningMode !== "uncontrolled") { + const horizontalOptions = this.getPositioningOptions(this.horizontalInset); + if (this.horizontalDefaultPosition === "center") { + desiredHorizontalPosition = "center"; + } else if (this.horizontalDefaultPosition !== "unset") { + let dirCorrectedHorizontalDefaultPosition = this.horizontalDefaultPosition; + if (dirCorrectedHorizontalDefaultPosition === "start" || dirCorrectedHorizontalDefaultPosition === "end") { + const newDirection = getDirection(this); + if (newDirection !== this.currentDirection) { + this.currentDirection = newDirection; + this.initialize(); + return; + } + if (this.currentDirection === Direction.ltr) { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "left" : "right"; + } else { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "right" : "left"; + } + } + switch (dirCorrectedHorizontalDefaultPosition) { + case "left": + desiredHorizontalPosition = this.horizontalInset ? "insetStart" : "start"; + break; + case "right": + desiredHorizontalPosition = this.horizontalInset ? "insetEnd" : "end"; + break; + } + } + const horizontalThreshold = this.horizontalThreshold !== void 0 ? this.horizontalThreshold : this.regionRect !== void 0 ? this.regionRect.width : 0; + const anchorLeft = this.anchorRect !== void 0 ? this.anchorRect.left : 0; + const anchorRight = this.anchorRect !== void 0 ? this.anchorRect.right : 0; + const anchorWidth = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + const viewportLeft = this.viewportRect !== void 0 ? this.viewportRect.left : 0; + const viewportRight = this.viewportRect !== void 0 ? this.viewportRect.right : 0; + if (desiredHorizontalPosition === void 0 || !(this.horizontalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredHorizontalPosition, anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) < horizontalThreshold) { + desiredHorizontalPosition = this.getAvailableSpace(horizontalOptions[0], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) > this.getAvailableSpace(horizontalOptions[1], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) ? horizontalOptions[0] : horizontalOptions[1]; + } + } + if (this.verticalPositioningMode !== "uncontrolled") { + const verticalOptions = this.getPositioningOptions(this.verticalInset); + if (this.verticalDefaultPosition === "center") { + desiredVerticalPosition = "center"; + } else if (this.verticalDefaultPosition !== "unset") { + switch (this.verticalDefaultPosition) { + case "top": + desiredVerticalPosition = this.verticalInset ? "insetStart" : "start"; + break; + case "bottom": + desiredVerticalPosition = this.verticalInset ? "insetEnd" : "end"; + break; + } + } + const verticalThreshold = this.verticalThreshold !== void 0 ? this.verticalThreshold : this.regionRect !== void 0 ? this.regionRect.height : 0; + const anchorTop = this.anchorRect !== void 0 ? this.anchorRect.top : 0; + const anchorBottom = this.anchorRect !== void 0 ? this.anchorRect.bottom : 0; + const anchorHeight = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + const viewportTop = this.viewportRect !== void 0 ? this.viewportRect.top : 0; + const viewportBottom = this.viewportRect !== void 0 ? this.viewportRect.bottom : 0; + if (desiredVerticalPosition === void 0 || !(this.verticalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredVerticalPosition, anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) < verticalThreshold) { + desiredVerticalPosition = this.getAvailableSpace(verticalOptions[0], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) > this.getAvailableSpace(verticalOptions[1], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) ? verticalOptions[0] : verticalOptions[1]; + } + } + const nextPositionerDimension = this.getNextRegionDimension(desiredHorizontalPosition, desiredVerticalPosition); + const positionChanged = this.horizontalPosition !== desiredHorizontalPosition || this.verticalPosition !== desiredVerticalPosition; + this.setHorizontalPosition(desiredHorizontalPosition, nextPositionerDimension); + this.setVerticalPosition(desiredVerticalPosition, nextPositionerDimension); + this.updateRegionStyle(); + if (!this.initialLayoutComplete) { + this.initialLayoutComplete = true; + this.requestPositionUpdates(); + return; + } + if (!this.regionVisible) { + this.regionVisible = true; + this.style.removeProperty("pointer-events"); + this.style.removeProperty("opacity"); + this.classList.toggle("loaded", true); + this.$emit("loaded", this, { bubbles: false }); + } + this.updatePositionClasses(); + if (positionChanged) { + this.$emit("positionchange", this, { bubbles: false }); + } + }; + this.updateRegionStyle = () => { + this.style.width = this.regionWidth; + this.style.height = this.regionHeight; + this.style.transform = `translate(${this.translateX}px, ${this.translateY}px)`; + }; + this.updatePositionClasses = () => { + this.classList.toggle("top", this.verticalPosition === "start"); + this.classList.toggle("bottom", this.verticalPosition === "end"); + this.classList.toggle("inset-top", this.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.verticalPosition === "insetEnd"); + this.classList.toggle("vertical-center", this.verticalPosition === "center"); + this.classList.toggle("left", this.horizontalPosition === "start"); + this.classList.toggle("right", this.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.horizontalPosition === "insetEnd"); + this.classList.toggle("horizontal-center", this.horizontalPosition === "center"); + }; + this.setHorizontalPosition = (desiredHorizontalPosition, nextPositionerDimension) => { + if (desiredHorizontalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionWidth = 0; + switch (this.horizontalScaling) { + case "anchor": + case "fill": + nextRegionWidth = this.horizontalViewportLock ? this.viewportRect.width : nextPositionerDimension.width; + this.regionWidth = `${nextRegionWidth}px`; + break; + case "content": + nextRegionWidth = this.regionRect.width; + this.regionWidth = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredHorizontalPosition) { + case "start": + this.translateX = this.baseHorizontalOffset - nextRegionWidth; + if (this.horizontalViewportLock && this.anchorRect.left > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.right); + } + break; + case "insetStart": + this.translateX = this.baseHorizontalOffset - nextRegionWidth + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.right); + } + break; + case "insetEnd": + this.translateX = this.baseHorizontalOffset; + if (this.horizontalViewportLock && this.anchorRect.left < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.left); + } + break; + case "end": + this.translateX = this.baseHorizontalOffset + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.left); + } + break; + case "center": + sizeDelta = (this.anchorRect.width - nextRegionWidth) / 2; + this.translateX = this.baseHorizontalOffset + sizeDelta; + if (this.horizontalViewportLock) { + const regionLeft = this.anchorRect.left + sizeDelta; + const regionRight = this.anchorRect.right - sizeDelta; + if (regionLeft < this.viewportRect.left && !(regionRight > this.viewportRect.right)) { + this.translateX = this.translateX - (regionLeft - this.viewportRect.left); + } else if (regionRight > this.viewportRect.right && !(regionLeft < this.viewportRect.left)) { + this.translateX = this.translateX - (regionRight - this.viewportRect.right); + } + } + break; + } + this.horizontalPosition = desiredHorizontalPosition; + }; + this.setVerticalPosition = (desiredVerticalPosition, nextPositionerDimension) => { + if (desiredVerticalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionHeight = 0; + switch (this.verticalScaling) { + case "anchor": + case "fill": + nextRegionHeight = this.verticalViewportLock ? this.viewportRect.height : nextPositionerDimension.height; + this.regionHeight = `${nextRegionHeight}px`; + break; + case "content": + nextRegionHeight = this.regionRect.height; + this.regionHeight = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredVerticalPosition) { + case "start": + this.translateY = this.baseVerticalOffset - nextRegionHeight; + if (this.verticalViewportLock && this.anchorRect.top > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.bottom); + } + break; + case "insetStart": + this.translateY = this.baseVerticalOffset - nextRegionHeight + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.bottom); + } + break; + case "insetEnd": + this.translateY = this.baseVerticalOffset; + if (this.verticalViewportLock && this.anchorRect.top < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.top); + } + break; + case "end": + this.translateY = this.baseVerticalOffset + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.top); + } + break; + case "center": + sizeDelta = (this.anchorRect.height - nextRegionHeight) / 2; + this.translateY = this.baseVerticalOffset + sizeDelta; + if (this.verticalViewportLock) { + const regionTop = this.anchorRect.top + sizeDelta; + const regionBottom = this.anchorRect.bottom - sizeDelta; + if (regionTop < this.viewportRect.top && !(regionBottom > this.viewportRect.bottom)) { + this.translateY = this.translateY - (regionTop - this.viewportRect.top); + } else if (regionBottom > this.viewportRect.bottom && !(regionTop < this.viewportRect.top)) { + this.translateY = this.translateY - (regionBottom - this.viewportRect.bottom); + } + } + } + this.verticalPosition = desiredVerticalPosition; + }; + this.getPositioningOptions = (inset) => { + if (inset) { + return ["insetStart", "insetEnd"]; + } + return ["start", "end"]; + }; + this.getAvailableSpace = (positionOption, anchorStart, anchorEnd, anchorSpan, viewportStart, viewportEnd) => { + const spaceStart = anchorStart - viewportStart; + const spaceEnd = viewportEnd - (anchorStart + anchorSpan); + switch (positionOption) { + case "start": + return spaceStart; + case "insetStart": + return spaceStart + anchorSpan; + case "insetEnd": + return spaceEnd + anchorSpan; + case "end": + return spaceEnd; + case "center": + return Math.min(spaceStart, spaceEnd) * 2 + anchorSpan; + } + }; + this.getNextRegionDimension = (desiredHorizontalPosition, desiredVerticalPosition) => { + const newRegionDimension = { + height: this.regionRect !== void 0 ? this.regionRect.height : 0, + width: this.regionRect !== void 0 ? this.regionRect.width : 0 + }; + if (desiredHorizontalPosition !== void 0 && this.horizontalScaling === "fill") { + newRegionDimension.width = this.getAvailableSpace(desiredHorizontalPosition, this.anchorRect !== void 0 ? this.anchorRect.left : 0, this.anchorRect !== void 0 ? this.anchorRect.right : 0, this.anchorRect !== void 0 ? this.anchorRect.width : 0, this.viewportRect !== void 0 ? this.viewportRect.left : 0, this.viewportRect !== void 0 ? this.viewportRect.right : 0); + } else if (this.horizontalScaling === "anchor") { + newRegionDimension.width = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + } + if (desiredVerticalPosition !== void 0 && this.verticalScaling === "fill") { + newRegionDimension.height = this.getAvailableSpace(desiredVerticalPosition, this.anchorRect !== void 0 ? this.anchorRect.top : 0, this.anchorRect !== void 0 ? this.anchorRect.bottom : 0, this.anchorRect !== void 0 ? this.anchorRect.height : 0, this.viewportRect !== void 0 ? this.viewportRect.top : 0, this.viewportRect !== void 0 ? this.viewportRect.bottom : 0); + } else if (this.verticalScaling === "anchor") { + newRegionDimension.height = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + } + return newRegionDimension; + }; + this.startAutoUpdateEventListeners = () => { + window.addEventListener(eventResize, this.update, { passive: true }); + window.addEventListener(eventScroll, this.update, { + passive: true, + capture: true + }); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.observe(this.viewportElement); + } + }; + this.stopAutoUpdateEventListeners = () => { + window.removeEventListener(eventResize, this.update); + window.removeEventListener(eventScroll, this.update); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.unobserve(this.viewportElement); + } + }; + } + anchorChanged() { + if (this.initialLayoutComplete) { + this.anchorElement = this.getAnchor(); + } + } + viewportChanged() { + if (this.initialLayoutComplete) { + this.viewportElement = this.getViewport(); + } + } + horizontalPositioningModeChanged() { + this.requestReset(); + } + horizontalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + horizontalViewportLockChanged() { + this.updateForAttributeChange(); + } + horizontalInsetChanged() { + this.updateForAttributeChange(); + } + horizontalThresholdChanged() { + this.updateForAttributeChange(); + } + horizontalScalingChanged() { + this.updateForAttributeChange(); + } + verticalPositioningModeChanged() { + this.requestReset(); + } + verticalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + verticalViewportLockChanged() { + this.updateForAttributeChange(); + } + verticalInsetChanged() { + this.updateForAttributeChange(); + } + verticalThresholdChanged() { + this.updateForAttributeChange(); + } + verticalScalingChanged() { + this.updateForAttributeChange(); + } + fixedPlacementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + autoUpdateModeChanged(prevMode, newMode) { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + if (prevMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + if (newMode === "auto") { + this.startAutoUpdateEventListeners(); + } + } + } + anchorElementChanged() { + this.requestReset(); + } + viewportElementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.autoUpdateMode === "auto") { + this.startAutoUpdateEventListeners(); + } + this.initialize(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + if (this.autoUpdateMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + this.stopObservers(); + this.disconnectResizeDetector(); + } + /** + * @internal + */ + adoptedCallback() { + this.initialize(); + } + /** + * destroys the instance's resize observer + */ + disconnectResizeDetector() { + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.handleResize); + } + /** + * react to attribute changes that don't require a reset + */ + updateForAttributeChange() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.forceUpdate = true; + this.update(); + } + } + /** + * fully initializes the component + */ + initialize() { + this.initializeResizeDetector(); + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + this.requestReset(); + } + /** + * Request a reset if there are currently no open requests + */ + requestReset() { + if (this.$fastController.isConnected && this.pendingReset === false) { + this.setInitialState(); + DOM.queueUpdate(() => this.reset()); + this.pendingReset = true; + } + } + /** + * sets the starting configuration for component internal values + */ + setInitialState() { + this.initialLayoutComplete = false; + this.regionVisible = false; + this.translateX = 0; + this.translateY = 0; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.viewportRect = void 0; + this.regionRect = void 0; + this.anchorRect = void 0; + this.verticalPosition = void 0; + this.horizontalPosition = void 0; + this.style.opacity = "0"; + this.style.pointerEvents = "none"; + this.forceUpdate = false; + this.style.position = this.fixedPlacement ? "fixed" : "absolute"; + this.updatePositionClasses(); + this.updateRegionStyle(); + } + }; + AnchoredRegion.intersectionService = new IntersectionService(); + __decorate([ + attr + ], AnchoredRegion.prototype, "anchor", void 0); + __decorate([ + attr + ], AnchoredRegion.prototype, "viewport", void 0); + __decorate([ + attr({ attribute: "horizontal-positioning-mode" }) + ], AnchoredRegion.prototype, "horizontalPositioningMode", void 0); + __decorate([ + attr({ attribute: "horizontal-default-position" }) + ], AnchoredRegion.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "horizontal-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalInset", void 0); + __decorate([ + attr({ attribute: "horizontal-threshold" }) + ], AnchoredRegion.prototype, "horizontalThreshold", void 0); + __decorate([ + attr({ attribute: "horizontal-scaling" }) + ], AnchoredRegion.prototype, "horizontalScaling", void 0); + __decorate([ + attr({ attribute: "vertical-positioning-mode" }) + ], AnchoredRegion.prototype, "verticalPositioningMode", void 0); + __decorate([ + attr({ attribute: "vertical-default-position" }) + ], AnchoredRegion.prototype, "verticalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalInset", void 0); + __decorate([ + attr({ attribute: "vertical-threshold" }) + ], AnchoredRegion.prototype, "verticalThreshold", void 0); + __decorate([ + attr({ attribute: "vertical-scaling" }) + ], AnchoredRegion.prototype, "verticalScaling", void 0); + __decorate([ + attr({ attribute: "fixed-placement", mode: "boolean" }) + ], AnchoredRegion.prototype, "fixedPlacement", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], AnchoredRegion.prototype, "autoUpdateMode", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "anchorElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "viewportElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "initialLayoutComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js + var horizontalAnchorOverlay, FlyoutPosTop, FlyoutPosBottom, FlyoutPosTallest, FlyoutPosTopFill, FlyoutPosBottomFill, FlyoutPosTallestFill; + var init_anchored_region_config = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js"() { + horizontalAnchorOverlay = { + horizontalDefaultPosition: "center", + horizontalPositioningMode: "locktodefault", + horizontalInset: false, + horizontalScaling: "anchor" + }; + FlyoutPosTop = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "top", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosBottom = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "bottom", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTallest = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalPositioningMode: "dynamic", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTopFill = Object.assign(Object.assign({}, FlyoutPosTop), { verticalScaling: "fill" }); + FlyoutPosBottomFill = Object.assign(Object.assign({}, FlyoutPosBottom), { verticalScaling: "fill" }); + FlyoutPosTallestFill = Object.assign(Object.assign({}, FlyoutPosTallest), { verticalScaling: "fill" }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js + var init_anchored_region2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js"() { + init_anchored_region_template(); + init_anchored_region(); + init_anchored_region_config(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js + var init_avatar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js + var Avatar; + var init_avatar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Avatar = class extends FoundationElement { + /** + * Internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.shape) { + this.shape = "circle"; + } + } + }; + __decorate([ + attr + ], Avatar.prototype, "fill", void 0); + __decorate([ + attr + ], Avatar.prototype, "color", void 0); + __decorate([ + attr + ], Avatar.prototype, "link", void 0); + __decorate([ + attr + ], Avatar.prototype, "shape", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js + var init_avatar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js"() { + init_avatar_template(); + init_avatar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js + var badgeTemplate; + var init_badge_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js"() { + init_esm(); + badgeTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js + var Badge; + var init_badge = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Badge = class extends FoundationElement { + constructor() { + super(...arguments); + this.generateBadgeStyle = () => { + if (!this.fill && !this.color) { + return; + } + const fill = `background-color: var(--badge-fill-${this.fill});`; + const color = `color: var(--badge-color-${this.color});`; + if (this.fill && !this.color) { + return fill; + } else if (this.color && !this.fill) { + return color; + } else { + return `${color} ${fill}`; + } + }; + } + }; + __decorate([ + attr({ attribute: "fill" }) + ], Badge.prototype, "fill", void 0); + __decorate([ + attr({ attribute: "color" }) + ], Badge.prototype, "color", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Badge.prototype, "circular", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js + var init_badge2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js"() { + init_badge_template(); + init_badge(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js + var init_breadcrumb_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js + var BreadcrumbItem; + var init_breadcrumb_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js"() { + init_tslib_es6(); + init_esm(); + init_anchor(); + init_patterns(); + init_apply_mixins(); + BreadcrumbItem = class extends Anchor { + constructor() { + super(...arguments); + this.separator = true; + } + }; + __decorate([ + observable + ], BreadcrumbItem.prototype, "separator", void 0); + applyMixins(BreadcrumbItem, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js + var init_breadcrumb_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js"() { + init_breadcrumb_item_template(); + init_breadcrumb_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js + var init_breadcrumb_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js + var Breadcrumb; + var init_breadcrumb = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js"() { + init_tslib_es6(); + init_esm(); + init_breadcrumb_item(); + init_foundation_element(); + Breadcrumb = class extends FoundationElement { + slottedBreadcrumbItemsChanged() { + if (this.$fastController.isConnected) { + if (this.slottedBreadcrumbItems === void 0 || this.slottedBreadcrumbItems.length === 0) { + return; + } + const lastNode = this.slottedBreadcrumbItems[this.slottedBreadcrumbItems.length - 1]; + this.slottedBreadcrumbItems.forEach((item) => { + const itemIsLastNode = item === lastNode; + this.setItemSeparator(item, itemIsLastNode); + this.setAriaCurrent(item, itemIsLastNode); + }); + } + } + setItemSeparator(item, isLastNode) { + if (item instanceof BreadcrumbItem) { + item.separator = !isLastNode; + } + } + /** + * Finds href on childnodes in the light DOM or shadow DOM. + * We look in the shadow DOM because we insert an anchor when breadcrumb-item has an href. + */ + findChildWithHref(node) { + var _a, _b; + if (node.childElementCount > 0) { + return node.querySelector("a[href]"); + } else if ((_a = node.shadowRoot) === null || _a === void 0 ? void 0 : _a.childElementCount) { + return (_b = node.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector("a[href]"); + } else + return null; + } + /** + * Sets ARIA Current for the current node + * If child node with an anchor tag and with href is found then set aria-current to correct value for the child node, + * otherwise apply aria-current to the host element, with an href + */ + setAriaCurrent(item, isLastNode) { + const childNodeWithHref = this.findChildWithHref(item); + if (childNodeWithHref === null && item.hasAttribute("href") && item instanceof BreadcrumbItem) { + isLastNode ? item.setAttribute("aria-current", "page") : item.removeAttribute("aria-current"); + } else if (childNodeWithHref !== null) { + isLastNode ? childNodeWithHref.setAttribute("aria-current", "page") : childNodeWithHref.removeAttribute("aria-current"); + } + } + }; + __decorate([ + observable + ], Breadcrumb.prototype, "slottedBreadcrumbItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js + var init_breadcrumb2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js"() { + init_breadcrumb_template(); + init_breadcrumb(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js + var buttonTemplate; + var init_button_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js"() { + init_esm(); + init_start_end(); + buttonTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js + function FormAssociated(BaseCtor) { + const C = class extends BaseCtor { + constructor(...args) { + super(...args); + this.dirtyValue = false; + this.disabled = false; + this.proxyEventsToBlock = ["change", "click"]; + this.proxyInitialized = false; + this.required = false; + this.initialValue = this.initialValue || ""; + if (!this.elementInternals) { + this.formResetCallback = this.formResetCallback.bind(this); + } + } + /** + * Must evaluate to true to enable elementInternals. + * Feature detects API support and resolve respectively + * + * @internal + */ + static get formAssociated() { + return supportsElementInternals; + } + /** + * Returns the validity state of the element + * + * @alpha + */ + get validity() { + return this.elementInternals ? this.elementInternals.validity : this.proxy.validity; + } + /** + * Retrieve a reference to the associated form. + * Returns null if not associated to any form. + * + * @alpha + */ + get form() { + return this.elementInternals ? this.elementInternals.form : this.proxy.form; + } + /** + * Retrieve the localized validation message, + * or custom validation message if set. + * + * @alpha + */ + get validationMessage() { + return this.elementInternals ? this.elementInternals.validationMessage : this.proxy.validationMessage; + } + /** + * Whether the element will be validated when the + * form is submitted + */ + get willValidate() { + return this.elementInternals ? this.elementInternals.willValidate : this.proxy.willValidate; + } + /** + * A reference to all associated label elements + */ + get labels() { + if (this.elementInternals) { + return Object.freeze(Array.from(this.elementInternals.labels)); + } else if (this.proxy instanceof HTMLElement && this.proxy.ownerDocument && this.id) { + const parentLabels = this.proxy.labels; + const forLabels = Array.from(this.proxy.getRootNode().querySelectorAll(`[for='${this.id}']`)); + const labels = parentLabels ? forLabels.concat(Array.from(parentLabels)) : forLabels; + return Object.freeze(labels); + } else { + return emptyArray; + } + } + /** + * Invoked when the `value` property changes + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `valueChanged` method + * They must be sure to invoke `super.valueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + valueChanged(previous, next) { + this.dirtyValue = true; + if (this.proxy instanceof HTMLElement) { + this.proxy.value = this.value; + } + this.currentValue = this.value; + this.setFormValue(this.value); + this.validate(); + } + currentValueChanged() { + this.value = this.currentValue; + } + /** + * Invoked when the `initialValue` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `initialValueChanged` method + * They must be sure to invoke `super.initialValueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + /** + * Invoked when the `disabled` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `disabledChanged` method + * They must be sure to invoke `super.disabledChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + disabledChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.disabled = this.disabled; + } + DOM.queueUpdate(() => this.classList.toggle("disabled", this.disabled)); + } + /** + * Invoked when the `name` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `nameChanged` method + * They must be sure to invoke `super.nameChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + nameChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.name = this.name; + } + } + /** + * Invoked when the `required` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `requiredChanged` method + * They must be sure to invoke `super.requiredChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + requiredChanged(prev, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.required = this.required; + } + DOM.queueUpdate(() => this.classList.toggle("required", this.required)); + this.validate(); + } + /** + * The element internals object. Will only exist + * in browsers supporting the attachInternals API + */ + get elementInternals() { + if (!supportsElementInternals) { + return null; + } + let internals = InternalsMap.get(this); + if (!internals) { + internals = this.attachInternals(); + InternalsMap.set(this, internals); + } + return internals; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("keypress", this._keypressHandler); + if (!this.value) { + this.value = this.initialValue; + this.dirtyValue = false; + } + if (!this.elementInternals) { + this.attachProxy(); + if (this.form) { + this.form.addEventListener("reset", this.formResetCallback); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.proxyEventsToBlock.forEach((name) => this.proxy.removeEventListener(name, this.stopPropagation)); + if (!this.elementInternals && this.form) { + this.form.removeEventListener("reset", this.formResetCallback); + } + } + /** + * Return the current validity of the element. + */ + checkValidity() { + return this.elementInternals ? this.elementInternals.checkValidity() : this.proxy.checkValidity(); + } + /** + * Return the current validity of the element. + * If false, fires an invalid event at the element. + */ + reportValidity() { + return this.elementInternals ? this.elementInternals.reportValidity() : this.proxy.reportValidity(); + } + /** + * Set the validity of the control. In cases when the elementInternals object is not + * available (and the proxy element is used to report validity), this function will + * do nothing unless a message is provided, at which point the setCustomValidity method + * of the proxy element will be invoked with the provided message. + * @param flags - Validity flags + * @param message - Optional message to supply + * @param anchor - Optional element used by UA to display an interactive validation UI + */ + setValidity(flags, message, anchor) { + if (this.elementInternals) { + this.elementInternals.setValidity(flags, message, anchor); + } else if (typeof message === "string") { + this.proxy.setCustomValidity(message); + } + } + /** + * Invoked when a connected component's form or fieldset has its disabled + * state changed. + * @param disabled - the disabled value of the form / fieldset + */ + formDisabledCallback(disabled) { + this.disabled = disabled; + } + formResetCallback() { + this.value = this.initialValue; + this.dirtyValue = false; + } + /** + * Attach the proxy element to the DOM + */ + attachProxy() { + var _a; + if (!this.proxyInitialized) { + this.proxyInitialized = true; + this.proxy.style.display = "none"; + this.proxyEventsToBlock.forEach((name) => this.proxy.addEventListener(name, this.stopPropagation)); + this.proxy.disabled = this.disabled; + this.proxy.required = this.required; + if (typeof this.name === "string") { + this.proxy.name = this.name; + } + if (typeof this.value === "string") { + this.proxy.value = this.value; + } + this.proxy.setAttribute("slot", proxySlotName); + this.proxySlot = document.createElement("slot"); + this.proxySlot.setAttribute("name", proxySlotName); + } + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(this.proxySlot); + this.appendChild(this.proxy); + } + /** + * Detach the proxy element from the DOM + */ + detachProxy() { + var _a; + this.removeChild(this.proxy); + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.removeChild(this.proxySlot); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate(anchor) { + if (this.proxy instanceof HTMLElement) { + this.setValidity(this.proxy.validity, this.proxy.validationMessage, anchor); + } + } + /** + * Associates the provided value (and optional state) with the parent form. + * @param value - The value to set + * @param state - The state object provided to during session restores and when autofilling. + */ + setFormValue(value, state) { + if (this.elementInternals) { + this.elementInternals.setFormValue(value, state || value); + } + } + _keypressHandler(e) { + switch (e.key) { + case keyEnter: + if (this.form instanceof HTMLFormElement) { + const defaultButton = this.form.querySelector("[type=submit]"); + defaultButton === null || defaultButton === void 0 ? void 0 : defaultButton.click(); + } + break; + } + } + /** + * Used to stop propagation of proxy element events + * @param e - Event object + */ + stopPropagation(e) { + e.stopPropagation(); + } + }; + attr({ mode: "boolean" })(C.prototype, "disabled"); + attr({ mode: "fromView", attribute: "value" })(C.prototype, "initialValue"); + attr({ attribute: "current-value" })(C.prototype, "currentValue"); + attr(C.prototype, "name"); + attr({ mode: "boolean" })(C.prototype, "required"); + observable(C.prototype, "value"); + return C; + } + function CheckableFormAssociated(BaseCtor) { + class C extends FormAssociated(BaseCtor) { + } + class D extends C { + constructor(...args) { + super(args); + this.dirtyChecked = false; + this.checkedAttribute = false; + this.checked = false; + this.dirtyChecked = false; + } + checkedAttributeChanged() { + this.defaultChecked = this.checkedAttribute; + } + /** + * @internal + */ + defaultCheckedChanged() { + if (!this.dirtyChecked) { + this.checked = this.defaultChecked; + this.dirtyChecked = false; + } + } + checkedChanged(prev, next) { + if (!this.dirtyChecked) { + this.dirtyChecked = true; + } + this.currentChecked = this.checked; + this.updateForm(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.checked = this.checked; + } + if (prev !== void 0) { + this.$emit("change"); + } + this.validate(); + } + currentCheckedChanged(prev, next) { + this.checked = this.currentChecked; + } + updateForm() { + const value = this.checked ? this.value : null; + this.setFormValue(value, value); + } + connectedCallback() { + super.connectedCallback(); + this.updateForm(); + } + formResetCallback() { + super.formResetCallback(); + this.checked = !!this.checkedAttribute; + this.dirtyChecked = false; + } + } + attr({ attribute: "checked", mode: "boolean" })(D.prototype, "checkedAttribute"); + attr({ attribute: "current-checked", converter: booleanConverter })(D.prototype, "currentChecked"); + observable(D.prototype, "defaultChecked"); + observable(D.prototype, "checked"); + return D; + } + var proxySlotName, ElementInternalsKey, supportsElementInternals, InternalsMap; + var init_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js"() { + init_esm(); + init_dist2(); + proxySlotName = "form-associated-proxy"; + ElementInternalsKey = "ElementInternals"; + supportsElementInternals = ElementInternalsKey in window && "setFormValue" in window[ElementInternalsKey].prototype; + InternalsMap = /* @__PURE__ */ new WeakMap(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js + var _Button, FormAssociatedButton; + var init_button_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Button = class extends FoundationElement { + }; + FormAssociatedButton = class extends FormAssociated(_Button) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.js + var Button, DelegatesARIAButton; + var init_button = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_button_form_associated(); + Button = class extends FormAssociatedButton { + constructor() { + super(...arguments); + this.handleClick = (e) => { + var _a; + if (this.disabled && ((_a = this.defaultSlottedContent) === null || _a === void 0 ? void 0 : _a.length) <= 1) { + e.stopPropagation(); + } + }; + this.handleSubmission = () => { + if (!this.form) { + return; + } + const attached = this.proxy.isConnected; + if (!attached) { + this.attachProxy(); + } + typeof this.form.requestSubmit === "function" ? this.form.requestSubmit(this.proxy) : this.proxy.click(); + if (!attached) { + this.detachProxy(); + } + }; + this.handleFormReset = () => { + var _a; + (_a = this.form) === null || _a === void 0 ? void 0 : _a.reset(); + }; + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + this.control.focus(); + }; + } + }; + } + formactionChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formAction = this.formaction; + } + } + formenctypeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formEnctype = this.formenctype; + } + } + formmethodChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formMethod = this.formmethod; + } + } + formnovalidateChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formNoValidate = this.formnovalidate; + } + } + formtargetChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formTarget = this.formtarget; + } + } + typeChanged(previous, next) { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + } + next === "submit" && this.addEventListener("click", this.handleSubmission); + previous === "submit" && this.removeEventListener("click", this.handleSubmission); + next === "reset" && this.addEventListener("click", this.handleFormReset); + previous === "reset" && this.removeEventListener("click", this.handleFormReset); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.handleUnsupportedDelegatesFocus(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.addEventListener("click", this.handleClick); + }); + } + } + /** + * @internal + */ + disconnectedCallback() { + var _a; + super.disconnectedCallback(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.removeEventListener("click", this.handleClick); + }); + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], Button.prototype, "formId", void 0); + __decorate([ + attr + ], Button.prototype, "formaction", void 0); + __decorate([ + attr + ], Button.prototype, "formenctype", void 0); + __decorate([ + attr + ], Button.prototype, "formmethod", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "formnovalidate", void 0); + __decorate([ + attr + ], Button.prototype, "formtarget", void 0); + __decorate([ + attr + ], Button.prototype, "type", void 0); + __decorate([ + observable + ], Button.prototype, "defaultSlottedContent", void 0); + DelegatesARIAButton = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIAButton.prototype, "ariaExpanded", void 0); + __decorate([ + attr({ attribute: "aria-pressed" }) + ], DelegatesARIAButton.prototype, "ariaPressed", void 0); + applyMixins(DelegatesARIAButton, ARIAGlobalStatesAndProperties); + applyMixins(Button, StartEnd, DelegatesARIAButton); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/index.js + var init_button2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/index.js"() { + init_button_template(); + init_button(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js + var DateFormatter; + var init_date_formatter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js"() { + DateFormatter = class { + constructor(config) { + this.dayFormat = "numeric"; + this.weekdayFormat = "long"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.date = /* @__PURE__ */ new Date(); + if (config) { + for (const key in config) { + const value = config[key]; + if (key === "date") { + this.date = this.getDateObject(value); + } else { + this[key] = value; + } + } + } + } + /** + * Helper function to make sure that the DateFormatter is working with an instance of Date + * @param date - The date as an object, string or Date insance + * @returns - A Date instance + * @public + */ + getDateObject(date) { + if (typeof date === "string") { + const dates = date.split(/[/-]/); + if (dates.length < 3) { + return /* @__PURE__ */ new Date(); + } + return new Date(parseInt(dates[2], 10), parseInt(dates[0], 10) - 1, parseInt(dates[1], 10)); + } else if ("day" in date && "month" in date && "year" in date) { + const { day, month, year } = date; + return new Date(year, month - 1, day); + } + return date; + } + /** + * + * @param date - a valide date as either a Date, string, objec or a DateFormatter + * @param format - The formatting for the string + * @param locale - locale data used for formatting + * @returns A localized string of the date provided + * @public + */ + getDate(date = this.date, format = { + weekday: this.weekdayFormat, + month: this.monthFormat, + day: this.dayFormat, + year: this.yearFormat + }, locale = this.locale) { + const dateObj = this.getDateObject(date); + if (!dateObj.getTime()) { + return ""; + } + const optionsWithTimeZone = Object.assign({ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }, format); + return new Intl.DateTimeFormat(locale, optionsWithTimeZone).format(dateObj); + } + /** + * + * @param day - Day to localize + * @param format - The formatting for the day + * @param locale - The locale data used for formatting + * @returns - A localized number for the day + * @public + */ + getDay(day = this.date.getDate(), format = this.dayFormat, locale = this.locale) { + return this.getDate({ month: 1, day, year: 2020 }, { day: format }, locale); + } + /** + * + * @param month - The month to localize + * @param format - The formatting for the month + * @param locale - The locale data used for formatting + * @returns - A localized name of the month + * @public + */ + getMonth(month = this.date.getMonth() + 1, format = this.monthFormat, locale = this.locale) { + return this.getDate({ month, day: 2, year: 2020 }, { month: format }, locale); + } + /** + * + * @param year - The year to localize + * @param format - The formatting for the year + * @param locale - The locale data used for formatting + * @returns - A localized string for the year + * @public + */ + getYear(year = this.date.getFullYear(), format = this.yearFormat, locale = this.locale) { + return this.getDate({ month: 2, day: 2, year }, { year: format }, locale); + } + /** + * + * @param weekday - The number of the weekday, defaults to Sunday + * @param format - The formatting for the weekday label + * @param locale - The locale data used for formatting + * @returns - A formatted weekday label + * @public + */ + getWeekday(weekday = 0, format = this.weekdayFormat, locale = this.locale) { + const date = `1-${weekday + 1}-2017`; + return this.getDate(date, { weekday: format }, locale); + } + /** + * + * @param format - The formatting for the weekdays + * @param locale - The locale data used for formatting + * @returns - An array of the weekday labels + * @public + */ + getWeekdays(format = this.weekdayFormat, locale = this.locale) { + return Array(7).fill(null).map((_, day) => this.getWeekday(day, format, locale)); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js + var Calendar; + var init_calendar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_date_formatter(); + Calendar = class extends FoundationElement { + constructor() { + super(...arguments); + this.dateFormatter = new DateFormatter(); + this.readonly = false; + this.locale = "en-US"; + this.month = (/* @__PURE__ */ new Date()).getMonth() + 1; + this.year = (/* @__PURE__ */ new Date()).getFullYear(); + this.dayFormat = "numeric"; + this.weekdayFormat = "short"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.minWeeks = 0; + this.disabledDates = ""; + this.selectedDates = ""; + this.oneDayInMs = 864e5; + } + localeChanged() { + this.dateFormatter.locale = this.locale; + } + dayFormatChanged() { + this.dateFormatter.dayFormat = this.dayFormat; + } + weekdayFormatChanged() { + this.dateFormatter.weekdayFormat = this.weekdayFormat; + } + monthFormatChanged() { + this.dateFormatter.monthFormat = this.monthFormat; + } + yearFormatChanged() { + this.dateFormatter.yearFormat = this.yearFormat; + } + /** + * Gets data needed to render about a calendar month as well as the previous and next months + * @param year - year of the calendar + * @param month - month of the calendar + * @returns - an object with data about the current and 2 surrounding months + * @public + */ + getMonthInfo(month = this.month, year = this.year) { + const getFirstDay = (date) => new Date(date.getFullYear(), date.getMonth(), 1).getDay(); + const getLength = (date) => { + const nextMonth2 = new Date(date.getFullYear(), date.getMonth() + 1, 1); + return new Date(nextMonth2.getTime() - this.oneDayInMs).getDate(); + }; + const thisMonth = new Date(year, month - 1); + const nextMonth = new Date(year, month); + const previousMonth = new Date(year, month - 2); + return { + length: getLength(thisMonth), + month, + start: getFirstDay(thisMonth), + year, + previous: { + length: getLength(previousMonth), + month: previousMonth.getMonth() + 1, + start: getFirstDay(previousMonth), + year: previousMonth.getFullYear() + }, + next: { + length: getLength(nextMonth), + month: nextMonth.getMonth() + 1, + start: getFirstDay(nextMonth), + year: nextMonth.getFullYear() + } + }; + } + /** + * A list of calendar days + * @param info - an object containing the information needed to render a calendar month + * @param minWeeks - minimum number of weeks to show + * @returns a list of days in a calendar month + * @public + */ + getDays(info = this.getMonthInfo(), minWeeks = this.minWeeks) { + minWeeks = minWeeks > 10 ? 10 : minWeeks; + const { start, length, previous, next } = info; + const days = []; + let dayCount = 1 - start; + while (dayCount < length + 1 || days.length < minWeeks || days[days.length - 1].length % 7 !== 0) { + const { month, year } = dayCount < 1 ? previous : dayCount > length ? next : info; + const day = dayCount < 1 ? previous.length + dayCount : dayCount > length ? dayCount - length : dayCount; + const dateString = `${month}-${day}-${year}`; + const disabled = this.dateInString(dateString, this.disabledDates); + const selected = this.dateInString(dateString, this.selectedDates); + const date = { + day, + month, + year, + disabled, + selected + }; + const target = days[days.length - 1]; + if (days.length === 0 || target.length % 7 === 0) { + days.push([date]); + } else { + target.push(date); + } + dayCount++; + } + return days; + } + /** + * A helper function that checks if a date exists in a list of dates + * @param date - A date objec that includes the day, month and year + * @param datesString - a comma separated list of dates + * @returns - Returns true if it found the date in the list of dates + * @public + */ + dateInString(date, datesString) { + const dates = datesString.split(",").map((str) => str.trim()); + date = typeof date === "string" ? date : `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`; + return dates.some((d) => d === date); + } + /** + * Creates a class string for the day container + * @param date - date of the calendar cell + * @returns - string of class names + * @public + */ + getDayClassNames(date, todayString) { + const { day, month, year, disabled, selected } = date; + const today = todayString === `${month}-${day}-${year}`; + const inactive = this.month !== month; + return [ + "day", + today && "today", + inactive && "inactive", + disabled && "disabled", + selected && "selected" + ].filter(Boolean).join(" "); + } + /** + * Returns a list of weekday labels + * @returns An array of weekday text and full text if abbreviated + * @public + */ + getWeekdayText() { + const weekdayText = this.dateFormatter.getWeekdays().map((text) => ({ text })); + if (this.weekdayFormat !== "long") { + const longText = this.dateFormatter.getWeekdays("long"); + weekdayText.forEach((weekday, index) => { + weekday.abbr = longText[index]; + }); + } + return weekdayText; + } + /** + * Emits the "date-select" event with the day, month and year. + * @param date - Date cell + * @public + */ + handleDateSelect(event, day) { + event.preventDefault; + this.$emit("dateselected", day); + } + /** + * Handles keyboard events on a cell + * @param event - Keyboard event + * @param date - Date of the cell selected + */ + handleKeydown(event, date) { + if (event.key === keyEnter) { + this.handleDateSelect(event, date); + } + return true; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Calendar.prototype, "readonly", void 0); + __decorate([ + attr + ], Calendar.prototype, "locale", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "month", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "year", void 0); + __decorate([ + attr({ attribute: "day-format", mode: "fromView" }) + ], Calendar.prototype, "dayFormat", void 0); + __decorate([ + attr({ attribute: "weekday-format", mode: "fromView" }) + ], Calendar.prototype, "weekdayFormat", void 0); + __decorate([ + attr({ attribute: "month-format", mode: "fromView" }) + ], Calendar.prototype, "monthFormat", void 0); + __decorate([ + attr({ attribute: "year-format", mode: "fromView" }) + ], Calendar.prototype, "yearFormat", void 0); + __decorate([ + attr({ attribute: "min-weeks", converter: nullableNumberConverter }) + ], Calendar.prototype, "minWeeks", void 0); + __decorate([ + attr({ attribute: "disabled-dates" }) + ], Calendar.prototype, "disabledDates", void 0); + __decorate([ + attr({ attribute: "selected-dates" }) + ], Calendar.prototype, "selectedDates", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js + var GenerateHeaderOptions, DataGridCellTypes, DataGridRowTypes; + var init_data_grid_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js"() { + GenerateHeaderOptions = { + none: "none", + default: "default", + sticky: "sticky" + }; + DataGridCellTypes = { + default: "default", + columnHeader: "columnheader", + rowHeader: "rowheader" + }; + DataGridRowTypes = { + default: "default", + header: "header", + stickyHeader: "sticky-header" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js + var DataGridRow; + var init_data_grid_row = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGridRow = class extends FoundationElement { + constructor() { + super(...arguments); + this.rowType = DataGridRowTypes.default; + this.rowData = null; + this.columnDefinitions = null; + this.isActiveRow = false; + this.cellsRepeatBehavior = null; + this.cellsPlaceholder = null; + this.focusColumnIndex = 0; + this.refocusOnLoad = false; + this.updateRowStyle = () => { + this.style.gridTemplateColumns = this.gridTemplateColumns; + }; + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowStyle(); + } + } + rowTypeChanged() { + if (this.$fastController.isConnected) { + this.updateItemTemplate(); + } + } + rowDataChanged() { + if (this.rowData !== null && this.isActiveRow) { + this.refocusOnLoad = true; + return; + } + } + cellItemTemplateChanged() { + this.updateItemTemplate(); + } + headerCellItemTemplateChanged() { + this.updateItemTemplate(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.cellsRepeatBehavior === null) { + this.cellsPlaceholder = document.createComment(""); + this.appendChild(this.cellsPlaceholder); + this.updateItemTemplate(); + this.cellsRepeatBehavior = new RepeatDirective((x) => x.columnDefinitions, (x) => x.activeCellItemTemplate, { positioning: true }).createBehavior(this.cellsPlaceholder); + this.$fastController.addBehaviors([this.cellsRepeatBehavior]); + } + this.addEventListener("cell-focused", this.handleCellFocus); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.updateRowStyle(); + if (this.refocusOnLoad) { + this.refocusOnLoad = false; + if (this.cellElements.length > this.focusColumnIndex) { + this.cellElements[this.focusColumnIndex].focus(); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("cell-focused", this.handleCellFocus); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + } + handleFocusout(e) { + if (!this.contains(e.target)) { + this.isActiveRow = false; + this.focusColumnIndex = 0; + } + } + handleCellFocus(e) { + this.isActiveRow = true; + this.focusColumnIndex = this.cellElements.indexOf(e.target); + this.$emit("row-focused", this); + } + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusColumnIndex = 0; + switch (e.key) { + case keyArrowLeft: + newFocusColumnIndex = Math.max(0, this.focusColumnIndex - 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyArrowRight: + newFocusColumnIndex = Math.min(this.cellElements.length - 1, this.focusColumnIndex + 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyHome: + if (!e.ctrlKey) { + this.cellElements[0].focus(); + e.preventDefault(); + } + break; + case keyEnd: + if (!e.ctrlKey) { + this.cellElements[this.cellElements.length - 1].focus(); + e.preventDefault(); + } + break; + } + } + updateItemTemplate() { + this.activeCellItemTemplate = this.rowType === DataGridRowTypes.default && this.cellItemTemplate !== void 0 ? this.cellItemTemplate : this.rowType === DataGridRowTypes.default && this.cellItemTemplate === void 0 ? this.defaultCellItemTemplate : this.headerCellItemTemplate !== void 0 ? this.headerCellItemTemplate : this.defaultHeaderCellItemTemplate; + } + }; + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGridRow.prototype, "gridTemplateColumns", void 0); + __decorate([ + attr({ attribute: "row-type" }) + ], DataGridRow.prototype, "rowType", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowIndex", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "isActiveRow", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "activeCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultHeaderCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js + function createRowItemTemplate(context) { + const rowTag = context.tagFor(DataGridRow); + return html` + <${rowTag} + :rowData="${(x) => x}" + :cellItemTemplate="${(x, c) => c.parent.cellItemTemplate}" + :headerCellItemTemplate="${(x, c) => c.parent.headerCellItemTemplate}" + > +`; + } + var dataGridTemplate; + var init_data_grid_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js"() { + init_esm(); + init_data_grid_row(); + dataGridTemplate = (context, definition) => { + const rowItemTemplate = createRowItemTemplate(context); + const rowTag = context.tagFor(DataGridRow); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js + var DataGrid; + var init_data_grid = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGrid = class _DataGrid extends FoundationElement { + constructor() { + super(); + this.noTabbing = false; + this.generateHeader = GenerateHeaderOptions.default; + this.rowsData = []; + this.columnDefinitions = null; + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + this.rowsPlaceholder = null; + this.generatedHeader = null; + this.isUpdatingFocus = false; + this.pendingFocusUpdate = false; + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = true; + this.generatedGridTemplateColumns = ""; + this.focusOnCell = (rowIndex, columnIndex, scrollIntoView) => { + if (this.rowElements.length === 0) { + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + return; + } + const focusRowIndex = Math.max(0, Math.min(this.rowElements.length - 1, rowIndex)); + const focusRow = this.rowElements[focusRowIndex]; + const cells = focusRow.querySelectorAll('[role="cell"], [role="gridcell"], [role="columnheader"], [role="rowheader"]'); + const focusColumnIndex = Math.max(0, Math.min(cells.length - 1, columnIndex)); + const focusTarget = cells[focusColumnIndex]; + if (scrollIntoView && this.scrollHeight !== this.clientHeight && (focusRowIndex < this.focusRowIndex && this.scrollTop > 0 || focusRowIndex > this.focusRowIndex && this.scrollTop < this.scrollHeight - this.clientHeight)) { + focusTarget.scrollIntoView({ block: "center", inline: "center" }); + } + focusTarget.focus(); + }; + this.onChildListChange = (mutations, observer) => { + if (mutations && mutations.length) { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((newNode) => { + if (newNode.nodeType === 1 && newNode.getAttribute("role") === "row") { + newNode.columnDefinitions = this.columnDefinitions; + } + }); + }); + this.queueRowIndexUpdate(); + } + }; + this.queueRowIndexUpdate = () => { + if (!this.rowindexUpdateQueued) { + this.rowindexUpdateQueued = true; + DOM.queueUpdate(this.updateRowIndexes); + } + }; + this.updateRowIndexes = () => { + let newGridTemplateColumns = this.gridTemplateColumns; + if (newGridTemplateColumns === void 0) { + if (this.generatedGridTemplateColumns === "" && this.rowElements.length > 0) { + const firstRow = this.rowElements[0]; + this.generatedGridTemplateColumns = new Array(firstRow.cellElements.length).fill("1fr").join(" "); + } + newGridTemplateColumns = this.generatedGridTemplateColumns; + } + this.rowElements.forEach((element, index) => { + const thisRow = element; + thisRow.rowIndex = index; + thisRow.gridTemplateColumns = newGridTemplateColumns; + if (this.columnDefinitionsStale) { + thisRow.columnDefinitions = this.columnDefinitions; + } + }); + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = false; + }; + } + /** + * generates a gridTemplateColumns based on columndata array + */ + static generateTemplateColumns(columnDefinitions) { + let templateColumns = ""; + columnDefinitions.forEach((column) => { + templateColumns = `${templateColumns}${templateColumns === "" ? "" : " "}${"1fr"}`; + }); + return templateColumns; + } + noTabbingChanged() { + if (this.$fastController.isConnected) { + if (this.noTabbing) { + this.setAttribute("tabIndex", "-1"); + } else { + this.setAttribute("tabIndex", this.contains(document.activeElement) || this === document.activeElement ? "-1" : "0"); + } + } + } + generateHeaderChanged() { + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowIndexes(); + } + } + rowsDataChanged() { + if (this.columnDefinitions === null && this.rowsData.length > 0) { + this.columnDefinitions = _DataGrid.generateColumns(this.rowsData[0]); + } + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + columnDefinitionsChanged() { + if (this.columnDefinitions === null) { + this.generatedGridTemplateColumns = ""; + return; + } + this.generatedGridTemplateColumns = _DataGrid.generateTemplateColumns(this.columnDefinitions); + if (this.$fastController.isConnected) { + this.columnDefinitionsStale = true; + this.queueRowIndexUpdate(); + } + } + headerCellItemTemplateChanged() { + if (this.$fastController.isConnected) { + if (this.generatedHeader !== null) { + this.generatedHeader.headerCellItemTemplate = this.headerCellItemTemplate; + } + } + } + focusRowIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + focusColumnIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.rowItemTemplate === void 0) { + this.rowItemTemplate = this.defaultRowItemTemplate; + } + this.rowsPlaceholder = document.createComment(""); + this.appendChild(this.rowsPlaceholder); + this.toggleGeneratedHeader(); + this.rowsRepeatBehavior = new RepeatDirective((x) => x.rowsData, (x) => x.rowItemTemplate, { positioning: true }).createBehavior(this.rowsPlaceholder); + this.$fastController.addBehaviors([this.rowsRepeatBehavior]); + this.addEventListener("row-focused", this.handleRowFocus); + this.addEventListener(eventFocus, this.handleFocus); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.addEventListener(eventFocusOut, this.handleFocusOut); + this.observer = new MutationObserver(this.onChildListChange); + this.observer.observe(this, { childList: true }); + if (this.noTabbing) { + this.setAttribute("tabindex", "-1"); + } + DOM.queueUpdate(this.queueRowIndexUpdate); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("row-focused", this.handleRowFocus); + this.removeEventListener(eventFocus, this.handleFocus); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.removeEventListener(eventFocusOut, this.handleFocusOut); + this.observer.disconnect(); + this.rowsPlaceholder = null; + this.generatedHeader = null; + } + /** + * @internal + */ + handleRowFocus(e) { + this.isUpdatingFocus = true; + const focusRow = e.target; + this.focusRowIndex = this.rowElements.indexOf(focusRow); + this.focusColumnIndex = focusRow.focusColumnIndex; + this.setAttribute("tabIndex", "-1"); + this.isUpdatingFocus = false; + } + /** + * @internal + */ + handleFocus(e) { + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + /** + * @internal + */ + handleFocusOut(e) { + if (e.relatedTarget === null || !this.contains(e.relatedTarget)) { + this.setAttribute("tabIndex", this.noTabbing ? "-1" : "0"); + } + } + /** + * @internal + */ + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusRowIndex; + const maxIndex = this.rowElements.length - 1; + const currentGridBottom = this.offsetHeight + this.scrollTop; + const lastRow = this.rowElements[maxIndex]; + switch (e.key) { + case keyArrowUp: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex - 1, this.focusColumnIndex, true); + break; + case keyArrowDown: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex + 1, this.focusColumnIndex, true); + break; + case keyPageUp: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex === 0) { + this.focusOnCell(0, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex - 1; + for (newFocusRowIndex; newFocusRowIndex >= 0; newFocusRowIndex--) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop < this.scrollTop) { + this.scrollTop = thisRow.offsetTop + thisRow.clientHeight - this.clientHeight; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyPageDown: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex >= maxIndex || lastRow.offsetTop + lastRow.offsetHeight <= currentGridBottom) { + this.focusOnCell(maxIndex, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex + 1; + for (newFocusRowIndex; newFocusRowIndex <= maxIndex; newFocusRowIndex++) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop + thisRow.offsetHeight > currentGridBottom) { + let stickyHeaderOffset = 0; + if (this.generateHeader === GenerateHeaderOptions.sticky && this.generatedHeader !== null) { + stickyHeaderOffset = this.generatedHeader.clientHeight; + } + this.scrollTop = thisRow.offsetTop - stickyHeaderOffset; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyHome: + if (e.ctrlKey) { + e.preventDefault(); + this.focusOnCell(0, 0, true); + } + break; + case keyEnd: + if (e.ctrlKey && this.columnDefinitions !== null) { + e.preventDefault(); + this.focusOnCell(this.rowElements.length - 1, this.columnDefinitions.length - 1, true); + } + break; + } + } + queueFocusUpdate() { + if (this.isUpdatingFocus && (this.contains(document.activeElement) || this === document.activeElement)) { + return; + } + if (this.pendingFocusUpdate === false) { + this.pendingFocusUpdate = true; + DOM.queueUpdate(() => this.updateFocus()); + } + } + updateFocus() { + this.pendingFocusUpdate = false; + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + toggleGeneratedHeader() { + if (this.generatedHeader !== null) { + this.removeChild(this.generatedHeader); + this.generatedHeader = null; + } + if (this.generateHeader !== GenerateHeaderOptions.none && this.rowsData.length > 0) { + const generatedHeaderElement = document.createElement(this.rowElementTag); + this.generatedHeader = generatedHeaderElement; + this.generatedHeader.columnDefinitions = this.columnDefinitions; + this.generatedHeader.gridTemplateColumns = this.gridTemplateColumns; + this.generatedHeader.rowType = this.generateHeader === GenerateHeaderOptions.sticky ? DataGridRowTypes.stickyHeader : DataGridRowTypes.header; + if (this.firstChild !== null || this.rowsPlaceholder !== null) { + this.insertBefore(generatedHeaderElement, this.firstChild !== null ? this.firstChild : this.rowsPlaceholder); + } + return; + } + } + }; + DataGrid.generateColumns = (row) => { + return Object.getOwnPropertyNames(row).map((property, index) => { + return { + columnDataKey: property, + gridColumn: `${index}` + }; + }); + }; + __decorate([ + attr({ attribute: "no-tabbing", mode: "boolean" }) + ], DataGrid.prototype, "noTabbing", void 0); + __decorate([ + attr({ attribute: "generate-header" }) + ], DataGrid.prototype, "generateHeader", void 0); + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGrid.prototype, "gridTemplateColumns", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowsData", void 0); + __decorate([ + observable + ], DataGrid.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusRowIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusColumnIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "defaultRowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElementTag", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js + var defaultCellContentsTemplate, defaultHeaderCellContentsTemplate, DataGridCell; + var init_data_grid_cell = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + defaultCellContentsTemplate = html` + +`; + defaultHeaderCellContentsTemplate = html` + +`; + DataGridCell = class extends FoundationElement { + constructor() { + super(...arguments); + this.cellType = DataGridCellTypes.default; + this.rowData = null; + this.columnDefinition = null; + this.isActiveCell = false; + this.customCellView = null; + this.updateCellStyle = () => { + this.style.gridColumn = this.gridColumn; + }; + } + cellTypeChanged() { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + gridColumnChanged() { + if (this.$fastController.isConnected) { + this.updateCellStyle(); + } + } + columnDefinitionChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.addEventListener(eventFocusIn, this.handleFocusin); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.style.gridColumn = `${((_a = this.columnDefinition) === null || _a === void 0 ? void 0 : _a.gridColumn) === void 0 ? 0 : this.columnDefinition.gridColumn}`; + this.updateCellView(); + this.updateCellStyle(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener(eventFocusIn, this.handleFocusin); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.disconnectCellView(); + } + handleFocusin(e) { + if (this.isActiveCell) { + return; + } + this.isActiveCell = true; + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition !== null && this.columnDefinition.headerCellInternalFocusQueue !== true && typeof this.columnDefinition.headerCellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + default: + if (this.columnDefinition !== null && this.columnDefinition.cellInternalFocusQueue !== true && typeof this.columnDefinition.cellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + } + this.$emit("cell-focused", this); + } + handleFocusout(e) { + if (this !== document.activeElement && !this.contains(document.activeElement)) { + this.isActiveCell = false; + } + } + handleKeydown(e) { + if (e.defaultPrevented || this.columnDefinition === null || this.cellType === DataGridCellTypes.default && this.columnDefinition.cellInternalFocusQueue !== true || this.cellType === DataGridCellTypes.columnHeader && this.columnDefinition.headerCellInternalFocusQueue !== true) { + return; + } + switch (e.key) { + case keyEnter: + case keyFunction2: + if (this.contains(document.activeElement) && document.activeElement !== this) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + default: + if (this.columnDefinition.cellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + } + break; + case keyEscape: + if (this.contains(document.activeElement) && document.activeElement !== this) { + this.focus(); + e.preventDefault(); + } + break; + } + } + updateCellView() { + this.disconnectCellView(); + if (this.columnDefinition === null) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellTemplate !== void 0) { + this.customCellView = this.columnDefinition.headerCellTemplate.render(this, this); + } else { + this.customCellView = defaultHeaderCellContentsTemplate.render(this, this); + } + break; + case void 0: + case DataGridCellTypes.rowHeader: + case DataGridCellTypes.default: + if (this.columnDefinition.cellTemplate !== void 0) { + this.customCellView = this.columnDefinition.cellTemplate.render(this, this); + } else { + this.customCellView = defaultCellContentsTemplate.render(this, this); + } + break; + } + } + disconnectCellView() { + if (this.customCellView !== null) { + this.customCellView.dispose(); + this.customCellView = null; + } + } + }; + __decorate([ + attr({ attribute: "cell-type" }) + ], DataGridCell.prototype, "cellType", void 0); + __decorate([ + attr({ attribute: "grid-column" }) + ], DataGridCell.prototype, "gridColumn", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "columnDefinition", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js + function createCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="${(x) => x.isRowHeader ? "rowheader" : void 0}" + grid-column="${(x, c) => c.index + 1}" + :rowData="${(x, c) => c.parent.rowData}" + :columnDefinition="${(x) => x}" + > +`; + } + function createHeaderCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="columnheader" + grid-column="${(x, c) => c.index + 1}" + :columnDefinition="${(x) => x}" + > +`; + } + var dataGridRowTemplate; + var init_data_grid_row_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js"() { + init_esm(); + init_data_grid_cell(); + dataGridRowTemplate = (context, definition) => { + const cellItemTemplate = createCellItemTemplate(context); + const headerCellItemTemplate = createHeaderCellItemTemplate(context); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js + var dataGridCellTemplate; + var init_data_grid_cell_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js"() { + init_esm(); + dataGridCellTemplate = (context, definition) => { + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js + var init_data_grid2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js"() { + init_data_grid_template(); + init_data_grid(); + init_data_grid_row_template(); + init_data_grid_row(); + init_data_grid_cell_template(); + init_data_grid_cell(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js + var CalendarTitleTemplate; + var init_calendar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js"() { + init_esm(); + CalendarTitleTemplate = html` +
+ + ${(x) => x.dateFormatter.getMonth(x.month)} + + ${(x) => x.dateFormatter.getYear(x.year)} +
+`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js + var init_calendar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js"() { + init_calendar(); + init_calendar_template(); + init_date_formatter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js + var init_card_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.js + var init_card = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/index.js + var init_card2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/index.js"() { + init_card_template(); + init_card(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js + var checkboxTemplate; + var init_checkbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js"() { + init_esm(); + checkboxTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js + var _Checkbox, FormAssociatedCheckbox; + var init_checkbox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Checkbox = class extends FoundationElement { + }; + FormAssociatedCheckbox = class extends CheckableFormAssociated(_Checkbox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js + var Checkbox; + var init_checkbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_checkbox_form_associated(); + Checkbox = class extends FormAssociatedCheckbox { + constructor() { + super(); + this.initialValue = "on"; + this.indeterminate = false; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keySpace: + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Checkbox.prototype, "readOnly", void 0); + __decorate([ + observable + ], Checkbox.prototype, "defaultSlottedNodes", void 0); + __decorate([ + observable + ], Checkbox.prototype, "indeterminate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js + var init_checkbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js"() { + init_checkbox_template(); + init_checkbox(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js + function isListboxOption(el2) { + return isHTMLElement(el2) && (el2.getAttribute("role") === "option" || el2 instanceof HTMLOptionElement); + } + var ListboxOption, DelegatesARIAListboxOption; + var init_listbox_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + ListboxOption = class extends FoundationElement { + constructor(text, value, defaultSelected, selected) { + super(); + this.defaultSelected = false; + this.dirtySelected = false; + this.selected = this.defaultSelected; + this.dirtyValue = false; + if (text) { + this.textContent = text; + } + if (value) { + this.initialValue = value; + } + if (defaultSelected) { + this.defaultSelected = defaultSelected; + } + if (selected) { + this.selected = selected; + } + this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected); + this.proxy.disabled = this.disabled; + } + /** + * Updates the ariaChecked property when the checked property changes. + * + * @param prev - the previous checked value + * @param next - the current checked value + * + * @public + */ + checkedChanged(prev, next) { + if (typeof next === "boolean") { + this.ariaChecked = next ? "true" : "false"; + return; + } + this.ariaChecked = null; + } + /** + * Updates the proxy's text content when the default slot changes. + * @param prev - the previous content value + * @param next - the current content value + * + * @internal + */ + contentChanged(prev, next) { + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.textContent = this.textContent; + } + this.$emit("contentchange", null, { bubbles: true }); + } + defaultSelectedChanged() { + if (!this.dirtySelected) { + this.selected = this.defaultSelected; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.defaultSelected; + } + } + } + disabledChanged(prev, next) { + this.ariaDisabled = this.disabled ? "true" : "false"; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.disabled = this.disabled; + } + } + selectedAttributeChanged() { + this.defaultSelected = this.selectedAttribute; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.defaultSelected = this.defaultSelected; + } + } + selectedChanged() { + this.ariaSelected = this.selected ? "true" : "false"; + if (!this.dirtySelected) { + this.dirtySelected = true; + } + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.selected; + } + } + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + get label() { + var _a; + return (_a = this.value) !== null && _a !== void 0 ? _a : this.text; + } + get text() { + var _a, _b; + return (_b = (_a = this.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, " ").trim()) !== null && _b !== void 0 ? _b : ""; + } + set value(next) { + const newValue = `${next !== null && next !== void 0 ? next : ""}`; + this._value = newValue; + this.dirtyValue = true; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.value = newValue; + } + Observable.notify(this, "value"); + } + get value() { + var _a; + Observable.track(this, "value"); + return (_a = this._value) !== null && _a !== void 0 ? _a : this.text; + } + get form() { + return this.proxy ? this.proxy.form : null; + } + }; + __decorate([ + observable + ], ListboxOption.prototype, "checked", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "content", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "defaultSelected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxOption.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "selected", mode: "boolean" }) + ], ListboxOption.prototype, "selectedAttribute", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "selected", void 0); + __decorate([ + attr({ attribute: "value", mode: "fromView" }) + ], ListboxOption.prototype, "initialValue", void 0); + DelegatesARIAListboxOption = class { + }; + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0); + applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties); + applyMixins(ListboxOption, StartEnd, DelegatesARIAListboxOption); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js + var Listbox, DelegatesARIAListbox; + var init_listbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_listbox_option(); + init_aria_global(); + init_apply_mixins(); + Listbox = class _Listbox extends FoundationElement { + constructor() { + super(...arguments); + this._options = []; + this.selectedIndex = -1; + this.selectedOptions = []; + this.shouldSkipFocus = false; + this.typeaheadBuffer = ""; + this.typeaheadExpired = true; + this.typeaheadTimeout = -1; + } + /** + * The first selected option. + * + * @internal + */ + get firstSelectedOption() { + var _a; + return (_a = this.selectedOptions[0]) !== null && _a !== void 0 ? _a : null; + } + /** + * Returns true if there is one or more selectable option. + * + * @internal + */ + get hasSelectableOptions() { + return this.options.length > 0 && !this.options.every((o) => o.disabled); + } + /** + * The number of options. + * + * @public + */ + get length() { + var _a, _b; + return (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; + } + /** + * The list of options. + * + * @public + */ + get options() { + Observable.track(this, "options"); + return this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Flag for the typeahead timeout expiration. + * + * @deprecated use `Listbox.typeaheadExpired` + * @internal + */ + get typeAheadExpired() { + return this.typeaheadExpired; + } + set typeAheadExpired(value) { + this.typeaheadExpired = value; + } + /** + * Handle click events for listbox options. + * + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && !captured.disabled) { + this.selectedIndex = this.options.indexOf(captured); + return true; + } + } + /** + * Ensures that the provided option is focused and scrolled into view. + * + * @param optionToFocus - The option to focus + * @internal + */ + focusAndScrollOptionIntoView(optionToFocus = this.firstSelectedOption) { + if (this.contains(document.activeElement) && optionToFocus !== null) { + optionToFocus.focus(); + requestAnimationFrame(() => { + optionToFocus.scrollIntoView({ block: "nearest" }); + }); + } + } + /** + * Handles `focusin` actions for the component. When the component receives focus, + * the list of selected options is refreshed and the first selected option is scrolled + * into view. + * + * @internal + */ + focusinHandler(e) { + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Returns the options which match the current typeahead buffer. + * + * @internal + */ + getTypeaheadMatches() { + const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); + const re = new RegExp(`^${pattern}`, "gi"); + return this.options.filter((o) => o.text.trim().match(re)); + } + /** + * Determines the index of the next option which is selectable, if any. + * + * @param prev - the previous selected index + * @param next - the next index to select + * + * @internal + */ + getSelectableIndex(prev = this.selectedIndex, next) { + const direction = prev > next ? -1 : prev < next ? 1 : 0; + const potentialDirection = prev + direction; + let nextSelectableOption = null; + switch (direction) { + case -1: { + nextSelectableOption = this.options.reduceRight((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index < potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + case 1: { + nextSelectableOption = this.options.reduce((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index > potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + } + return this.options.indexOf(nextSelectableOption); + } + /** + * Handles external changes to child options. + * + * @param source - the source object + * @param propertyName - the property + * + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "selected": { + if (_Listbox.slottedOptionFilter(source)) { + this.selectedIndex = this.options.indexOf(source); + } + this.setSelectedOptions(); + break; + } + } + } + /** + * Moves focus to an option whose label matches characters typed by the user. + * Consecutive keystrokes are batched into a buffer of search text used + * to match against the set of options. If `TYPE_AHEAD_TIMEOUT_MS` passes + * between consecutive keystrokes, the search restarts. + * + * @param key - the key to be evaluated + * + * @internal + */ + handleTypeAhead(key) { + if (this.typeaheadTimeout) { + window.clearTimeout(this.typeaheadTimeout); + } + this.typeaheadTimeout = window.setTimeout(() => this.typeaheadExpired = true, _Listbox.TYPE_AHEAD_TIMEOUT_MS); + if (key.length > 1) { + return; + } + this.typeaheadBuffer = `${this.typeaheadExpired ? "" : this.typeaheadBuffer}${key}`; + } + /** + * Handles `keydown` actions for listbox navigation and typeahead. + * + * @internal + */ + keydownHandler(e) { + if (this.disabled) { + return true; + } + this.shouldSkipFocus = false; + const key = e.key; + switch (key) { + // Select the first available option + case keyHome: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectFirstOption(); + } + break; + } + // Select the next selectable option + case keyArrowDown: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectNextOption(); + } + break; + } + // Select the previous selectable option + case keyArrowUp: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectPreviousOption(); + } + break; + } + // Select the last available option + case keyEnd: { + e.preventDefault(); + this.selectLastOption(); + break; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEnter: + case keyEscape: { + return true; + } + case keySpace: { + if (this.typeaheadExpired) { + return true; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @internal + */ + mousedownHandler(e) { + this.shouldSkipFocus = !this.contains(document.activeElement); + return true; + } + /** + * Switches between single-selection and multi-selection mode. + * + * @param prev - the previous value of the `multiple` attribute + * @param next - the next value of the `multiple` attribute + * + * @internal + */ + multipleChanged(prev, next) { + this.ariaMultiSelectable = next ? "true" : null; + } + /** + * Updates the list of selected options when the `selectedIndex` changes. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + var _a; + if (!this.hasSelectableOptions) { + this.selectedIndex = -1; + return; + } + if (((_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.disabled) && typeof prev === "number") { + const selectableIndex = this.getSelectableIndex(prev, next); + const newNext = selectableIndex > -1 ? selectableIndex : prev; + this.selectedIndex = newNext; + if (next === newNext) { + this.selectedIndexChanged(next, newNext); + } + return; + } + this.setSelectedOptions(); + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + const filteredNext = next.filter(_Listbox.slottedOptionFilter); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "selected"); + o.selected = filteredNext.includes(o); + notifier.subscribe(this, "selected"); + }); + } + /** + * Moves focus to the first selectable option. + * + * @public + */ + selectFirstOption() { + var _a, _b; + if (!this.disabled) { + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((o) => !o.disabled)) !== null && _b !== void 0 ? _b : -1; + } + } + /** + * Moves focus to the last selectable option. + * + * @internal + */ + selectLastOption() { + if (!this.disabled) { + this.selectedIndex = findLastIndex(this.options, (o) => !o.disabled); + } + } + /** + * Moves focus to the next selectable option. + * + * @internal + */ + selectNextOption() { + if (!this.disabled && this.selectedIndex < this.options.length - 1) { + this.selectedIndex += 1; + } + } + /** + * Moves focus to the previous selectable option. + * + * @internal + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex > 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Updates the selected index to match the first selected option. + * + * @internal + */ + setDefaultSelectedOption() { + var _a, _b; + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((el2) => el2.defaultSelected)) !== null && _b !== void 0 ? _b : -1; + } + /** + * Sets an option as selected and gives it focus. + * + * @public + */ + setSelectedOptions() { + var _a, _b, _c; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) { + this.selectedOptions = [this.options[this.selectedIndex]]; + this.ariaActiveDescendant = (_c = (_b = this.firstSelectedOption) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : ""; + this.focusAndScrollOptionIntoView(); + } + } + /** + * Updates the list of options and resets the selected option when the slotted option content changes. + * + * @param prev - the previous list of slotted options + * @param next - the current list of slotted options + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options = next.reduce((options, item) => { + if (isListboxOption(item)) { + options.push(item); + } + return options; + }, []); + const setSize = `${this.options.length}`; + this.options.forEach((option, index) => { + if (!option.id) { + option.id = uniqueId("option-"); + } + option.ariaPosInSet = `${index + 1}`; + option.ariaSetSize = setSize; + }); + if (this.$fastController.isConnected) { + this.setSelectedOptions(); + this.setDefaultSelectedOption(); + } + } + /** + * Updates the filtered list of options when the typeahead buffer changes. + * + * @param prev - the previous typeahead buffer value + * @param next - the current typeahead buffer value + * + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + if (typeaheadMatches.length) { + const selectedIndex = this.options.indexOf(typeaheadMatches[0]); + if (selectedIndex > -1) { + this.selectedIndex = selectedIndex; + } + } + this.typeaheadExpired = false; + } + } + }; + Listbox.slottedOptionFilter = (n) => isListboxOption(n) && !n.hidden; + Listbox.TYPE_AHEAD_TIMEOUT_MS = 1e3; + __decorate([ + attr({ mode: "boolean" }) + ], Listbox.prototype, "disabled", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedIndex", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "slottedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "typeaheadBuffer", void 0); + DelegatesARIAListbox = class { + }; + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaActiveDescendant", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaDisabled", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaExpanded", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaMultiSelectable", void 0); + applyMixins(DelegatesARIAListbox, ARIAGlobalStatesAndProperties); + applyMixins(Listbox, DelegatesARIAListbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js + var SelectPosition; + var init_select_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js"() { + SelectPosition = { + above: "above", + below: "below" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js + var _Combobox, FormAssociatedCombobox; + var init_combobox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js"() { + init_form_associated(); + init_listbox(); + _Combobox = class extends Listbox { + }; + FormAssociatedCombobox = class extends FormAssociated(_Combobox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js + var ComboboxAutocomplete; + var init_combobox_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js"() { + ComboboxAutocomplete = { + inline: "inline", + list: "list", + both: "both", + none: "none" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js + var Combobox, DelegatesARIACombobox; + var init_combobox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_select_options(); + init_apply_mixins(); + init_combobox_form_associated(); + init_combobox_options(); + Combobox = class extends FormAssociatedCombobox { + constructor() { + super(...arguments); + this._value = ""; + this.filteredOptions = []; + this.filter = ""; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + this.open = false; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + super.formResetCallback(); + this.setDefaultSelectedOption(); + this.updateValue(); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + get isAutocompleteInline() { + return this.autocomplete === ComboboxAutocomplete.inline || this.isAutocompleteBoth; + } + get isAutocompleteList() { + return this.autocomplete === ComboboxAutocomplete.list || this.isAutocompleteBoth; + } + get isAutocompleteBoth() { + return this.autocomplete === ComboboxAutocomplete.both; + } + /** + * Sets focus and synchronize ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged() { + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The list of options. + * + * @public + * @remarks + * Overrides `Listbox.options`. + */ + get options() { + Observable.track(this, "options"); + return this.filteredOptions.length ? this.filteredOptions : this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Updates the placeholder on the proxy element. + * @internal + */ + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c; + const prev = `${this._value}`; + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el2) => el2.text.toLowerCase() === next.toLowerCase()); + const prevSelectedValue = (_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.text; + const nextSelectedValue = (_b = this.options[selectedIndex]) === null || _b === void 0 ? void 0 : _b.text; + this.selectedIndex = prevSelectedValue !== nextSelectedValue ? selectedIndex : this.selectedIndex; + next = ((_c = this.firstSelectedOption) === null || _c === void 0 ? void 0 : _c.text) || next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + } + } + /** + * Handle opening and closing the listbox when the combobox is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (this.disabled || (captured === null || captured === void 0 ? void 0 : captured.disabled)) { + return; + } + if (this.open) { + if (e.composedPath()[0] === this.control) { + return; + } + if (captured) { + this.selectedOptions = [captured]; + this.control.value = captured.text; + this.clearSelectionRange(); + this.updateValue(true); + } + } + this.open = !this.open; + if (this.open) { + this.control.focus(); + } + return true; + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + if (this.value) { + this.initialValue = this.value; + } + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Filter available options by text value. + * + * @public + */ + filterOptions() { + if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) { + this.filter = ""; + } + const filter = this.filter.toLowerCase(); + this.filteredOptions = this._options.filter((o) => o.text.toLowerCase().startsWith(this.filter.toLowerCase())); + if (this.isAutocompleteList) { + if (!this.filteredOptions.length && !filter) { + this.filteredOptions = this._options; + } + this._options.forEach((o) => { + o.hidden = !this.filteredOptions.includes(o); + }); + } + } + /** + * Focus the control and scroll the first selected option into view. + * + * @internal + * @remarks + * Overrides: `Listbox.focusAndScrollOptionIntoView` + */ + focusAndScrollOptionIntoView() { + if (this.contains(document.activeElement)) { + this.control.focus(); + if (this.firstSelectedOption) { + requestAnimationFrame(() => { + var _a; + (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: "nearest" }); + }); + } + } + } + /** + * Handle focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + this.syncValue(); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!this.options || !this.options.includes(focusTarget)) { + this.open = false; + } + } + /** + * Handle content changes on the control input. + * + * @param e - the input event + * @internal + */ + inputHandler(e) { + this.filter = this.control.value; + this.filterOptions(); + if (!this.isAutocompleteInline) { + this.selectedIndex = this.options.map((option) => option.text).indexOf(this.control.value); + } + if (e.inputType.includes("deleteContent") || !this.filter.length) { + return true; + } + if (this.isAutocompleteList && !this.open) { + this.open = true; + } + if (this.isAutocompleteInline) { + if (this.filteredOptions.length) { + this.selectedOptions = [this.filteredOptions[0]]; + this.selectedIndex = this.options.indexOf(this.firstSelectedOption); + this.setInlineSelection(); + } else { + this.selectedIndex = -1; + } + } + return; + } + /** + * Handle keydown actions for listbox navigation. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (e.ctrlKey || e.shiftKey) { + return true; + } + switch (key) { + case "Enter": { + this.syncValue(); + if (this.isAutocompleteInline) { + this.filter = this.value; + } + this.open = false; + this.clearSelectionRange(); + break; + } + case "Escape": { + if (!this.isAutocompleteInline) { + this.selectedIndex = -1; + } + if (this.open) { + this.open = false; + break; + } + this.value = ""; + this.control.value = ""; + this.filter = ""; + this.filterOptions(); + break; + } + case "Tab": { + this.setInputToSelection(); + if (!this.open) { + return true; + } + e.preventDefault(); + this.open = false; + break; + } + case "ArrowUp": + case "ArrowDown": { + this.filterOptions(); + if (!this.open) { + this.open = true; + break; + } + if (this.filteredOptions.length > 0) { + super.keydownHandler(e); + } + if (this.isAutocompleteInline) { + this.setInlineSelection(); + } + break; + } + default: { + return true; + } + } + } + /** + * Handle keyup actions for value input and text field manipulations. + * + * @param e - the keyboard event + * @internal + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + case "ArrowRight": + case "Backspace": + case "Delete": + case "Home": + case "End": { + this.filter = this.control.value; + this.selectedIndex = -1; + this.filterOptions(); + break; + } + } + } + /** + * Ensure that the selectedIndex is within the current allowable filtered range. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + if (this.$fastController.isConnected) { + next = limit(-1, this.options.length - 1, next); + if (next !== this.selectedIndex) { + this.selectedIndex = next; + return; + } + super.selectedIndexChanged(prev, next); + } + } + /** + * Move focus to the previous selectable option. + * + * @internal + * @remarks + * Overrides `Listbox.selectPreviousOption` + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex >= 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Set the default selected options at initialization or reset. + * + * @internal + * @remarks + * Overrides `Listbox.setDefaultSelectedOption` + */ + setDefaultSelectedOption() { + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el2) => el2.getAttribute("selected") !== null || el2.selected); + this.selectedIndex = selectedIndex; + if (!this.dirtyValue && this.firstSelectedOption) { + this.value = this.firstSelectedOption.text; + } + this.setSelectedOptions(); + } + } + /** + * Focus and set the content of the control based on the first selected option. + * + * @internal + */ + setInputToSelection() { + if (this.firstSelectedOption) { + this.control.value = this.firstSelectedOption.text; + this.control.focus(); + } + } + /** + * Focus, set and select the content of the control based on the first selected option. + * + * @internal + */ + setInlineSelection() { + if (this.firstSelectedOption) { + this.setInputToSelection(); + this.control.setSelectionRange(this.filter.length, this.control.value.length, "backward"); + } + } + /** + * Determines if a value update should involve emitting a change event, then updates the value. + * + * @internal + */ + syncValue() { + var _a; + const newValue = this.selectedIndex > -1 ? (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text : this.control.value; + this.updateValue(this.value !== newValue); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @param force - direction to force the listbox to display + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * Ensure that the entire list of options is used when setting the selected property. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + * @remarks + * Overrides: `Listbox.selectedOptionsChanged` + */ + selectedOptionsChanged(prev, next) { + if (this.$fastController.isConnected) { + this._options.forEach((o) => { + o.selected = next.includes(o); + }); + } + } + /** + * Synchronize the form-associated proxy and update the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + super.slottedOptionsChanged(prev, next); + this.updateValue(); + } + /** + * Sets the value and to match the first selected option. + * + * @param shouldEmit - if true, the change event will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a; + if (this.$fastController.isConnected) { + this.value = ((_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) || this.control.value; + this.control.value = this.value; + } + if (shouldEmit) { + this.$emit("change"); + } + } + /** + * @internal + */ + clearSelectionRange() { + const controlValueLength = this.control.value.length; + this.control.setSelectionRange(controlValueLength, controlValueLength); + } + }; + __decorate([ + attr({ attribute: "autocomplete", mode: "fromView" }) + ], Combobox.prototype, "autocomplete", void 0); + __decorate([ + observable + ], Combobox.prototype, "maxHeight", void 0); + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Combobox.prototype, "open", void 0); + __decorate([ + attr + ], Combobox.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Combobox.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Combobox.prototype, "position", void 0); + DelegatesARIACombobox = class { + }; + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaAutoComplete", void 0); + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIACombobox, DelegatesARIAListbox); + applyMixins(Combobox, StartEnd, DelegatesARIACombobox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js + var init_combobox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js + var init_combobox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js"() { + init_combobox(); + init_combobox_options(); + init_combobox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js + function composedParent(element) { + const parentNode = element.parentElement; + if (parentNode) { + return parentNode; + } else { + const rootNode = element.getRootNode(); + if (rootNode.host instanceof HTMLElement) { + return rootNode.host; + } + } + return null; + } + var init_composed_parent = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js + function composedContains(reference, test) { + let current = test; + while (current !== null) { + if (current === reference) { + return true; + } + current = composedParent(current); + } + return false; + } + var init_composed_contains = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js"() { + init_composed_parent(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js + function isFastElement(element) { + return element instanceof FASTElement; + } + var defaultElement, QueuedStyleSheetTarget, ConstructableStyleSheetTarget, DocumentStyleSheetTarget, HeadStyleElementStyleSheetTarget, StyleElementStyleSheetTarget, ElementStyleSheetTarget, RootStyleSheetTarget, propertyTargetCache, propertyTargetCtor, PropertyTargetManager; + var init_custom_property_manager = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js"() { + init_tslib_es6(); + init_esm(); + defaultElement = document.createElement("div"); + QueuedStyleSheetTarget = class { + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + ConstructableStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor(source) { + super(); + const sheet = new CSSStyleSheet(); + sheet[prependToAdoptedStyleSheetsSymbol] = true; + this.target = sheet.cssRules[sheet.insertRule(":host{}")].style; + source.$fastController.addStyles(ElementStyles.create([sheet])); + } + }; + DocumentStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + const sheet = new CSSStyleSheet(); + this.target = sheet.cssRules[sheet.insertRule(":root{}")].style; + document.adoptedStyleSheets = [ + ...document.adoptedStyleSheets, + sheet + ]; + } + }; + HeadStyleElementStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + this.style = document.createElement("style"); + document.head.appendChild(this.style); + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":root{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } + } + }; + StyleElementStyleSheetTarget = class { + constructor(target) { + this.store = /* @__PURE__ */ new Map(); + this.target = null; + const controller = target.$fastController; + this.style = document.createElement("style"); + controller.addStyles(this.style); + Observable.getNotifier(controller).subscribe(this, "isConnected"); + this.handleChange(controller, "isConnected"); + } + targetChanged() { + if (this.target !== null) { + for (const [key, value] of this.store.entries()) { + this.target.setProperty(key, value); + } + } + } + setProperty(name, value) { + this.store.set(name, value); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.setProperty(name, value); + } + }); + } + removeProperty(name) { + this.store.delete(name); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.removeProperty(name); + } + }); + } + handleChange(source, key) { + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":host{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } else { + this.target = null; + } + } + }; + __decorate([ + observable + ], StyleElementStyleSheetTarget.prototype, "target", void 0); + ElementStyleSheetTarget = class { + constructor(source) { + this.target = source.style; + } + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + RootStyleSheetTarget = class _RootStyleSheetTarget { + setProperty(name, value) { + _RootStyleSheetTarget.properties[name] = value; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).setProperty(name, value); + } + } + removeProperty(name) { + delete _RootStyleSheetTarget.properties[name]; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).removeProperty(name); + } + } + static registerRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (!roots.has(root)) { + roots.add(root); + const target = PropertyTargetManager.getOrCreate(this.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.setProperty(key, _RootStyleSheetTarget.properties[key]); + } + } + } + static unregisterRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (roots.has(root)) { + roots.delete(root); + const target = PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.removeProperty(key); + } + } + } + /** + * Returns the document when provided the default element, + * otherwise is a no-op + * @param root - the root to normalize + */ + static normalizeRoot(root) { + return root === defaultElement ? document : root; + } + }; + RootStyleSheetTarget.roots = /* @__PURE__ */ new Set(); + RootStyleSheetTarget.properties = {}; + propertyTargetCache = /* @__PURE__ */ new WeakMap(); + propertyTargetCtor = DOM.supportsAdoptedStyleSheets ? ConstructableStyleSheetTarget : StyleElementStyleSheetTarget; + PropertyTargetManager = Object.freeze({ + getOrCreate(source) { + if (propertyTargetCache.has(source)) { + return propertyTargetCache.get(source); + } + let target; + if (source === defaultElement) { + target = new RootStyleSheetTarget(); + } else if (source instanceof Document) { + target = DOM.supportsAdoptedStyleSheets ? new DocumentStyleSheetTarget() : new HeadStyleElementStyleSheetTarget(); + } else if (isFastElement(source)) { + target = new propertyTargetCtor(source); + } else { + target = new ElementStyleSheetTarget(source); + } + propertyTargetCache.set(source, target); + return target; + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js + function create(nameOrConfig) { + return DesignTokenImpl.from(nameOrConfig); + } + var DesignTokenImpl, CustomPropertyReflector, DesignTokenBindingObserver, Store, nodeCache, childToParent, DesignTokenNode, DesignToken; + var init_design_token = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js"() { + init_tslib_es6(); + init_esm(); + init_composed_parent(); + init_composed_contains(); + init_custom_property_manager(); + init_custom_property_manager(); + DesignTokenImpl = class _DesignTokenImpl extends CSSDirective { + constructor(configuration) { + super(); + this.subscribers = /* @__PURE__ */ new WeakMap(); + this._appliedTo = /* @__PURE__ */ new Set(); + this.name = configuration.name; + if (configuration.cssCustomPropertyName !== null) { + this.cssCustomProperty = `--${configuration.cssCustomPropertyName}`; + this.cssVar = `var(${this.cssCustomProperty})`; + } + this.id = _DesignTokenImpl.uniqueId(); + _DesignTokenImpl.tokensById.set(this.id, this); + } + get appliedTo() { + return [...this._appliedTo]; + } + static from(nameOrConfig) { + return new _DesignTokenImpl({ + name: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.name, + cssCustomPropertyName: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.cssCustomPropertyName === void 0 ? nameOrConfig.name : nameOrConfig.cssCustomPropertyName + }); + } + static isCSSDesignToken(token) { + return typeof token.cssCustomProperty === "string"; + } + static isDerivedDesignTokenValue(value) { + return typeof value === "function"; + } + /** + * Gets a token by ID. Returns undefined if the token was not found. + * @param id - The ID of the token + * @returns + */ + static getTokenById(id) { + return _DesignTokenImpl.tokensById.get(id); + } + getOrCreateSubscriberSet(target = this) { + return this.subscribers.get(target) || this.subscribers.set(target, /* @__PURE__ */ new Set()) && this.subscribers.get(target); + } + createCSS() { + return this.cssVar || ""; + } + getValueFor(element) { + const value = DesignTokenNode.getOrCreate(element).get(this); + if (value !== void 0) { + return value; + } + throw new Error(`Value could not be retrieved for token named "${this.name}". Ensure the value is set for ${element} or an ancestor of ${element}.`); + } + setValueFor(element, value) { + this._appliedTo.add(element); + if (value instanceof _DesignTokenImpl) { + value = this.alias(value); + } + DesignTokenNode.getOrCreate(element).set(this, value); + return this; + } + deleteValueFor(element) { + this._appliedTo.delete(element); + if (DesignTokenNode.existsFor(element)) { + DesignTokenNode.getOrCreate(element).delete(this); + } + return this; + } + withDefault(value) { + this.setValueFor(defaultElement, value); + return this; + } + subscribe(subscriber, target) { + const subscriberSet = this.getOrCreateSubscriberSet(target); + if (target && !DesignTokenNode.existsFor(target)) { + DesignTokenNode.getOrCreate(target); + } + if (!subscriberSet.has(subscriber)) { + subscriberSet.add(subscriber); + } + } + unsubscribe(subscriber, target) { + const list = this.subscribers.get(target || this); + if (list && list.has(subscriber)) { + list.delete(subscriber); + } + } + /** + * Notifies subscribers that the value for an element has changed. + * @param element - The element to emit a notification for + */ + notify(element) { + const record = Object.freeze({ token: this, target: element }); + if (this.subscribers.has(this)) { + this.subscribers.get(this).forEach((sub) => sub.handleChange(record)); + } + if (this.subscribers.has(element)) { + this.subscribers.get(element).forEach((sub) => sub.handleChange(record)); + } + } + /** + * Alias the token to the provided token. + * @param token - the token to alias to + */ + alias(token) { + return ((target) => token.getValueFor(target)); + } + }; + DesignTokenImpl.uniqueId = /* @__PURE__ */ (() => { + let id = 0; + return () => { + id++; + return id.toString(16); + }; + })(); + DesignTokenImpl.tokensById = /* @__PURE__ */ new Map(); + CustomPropertyReflector = class { + startReflection(token, target) { + token.subscribe(this, target); + this.handleChange({ token, target }); + } + stopReflection(token, target) { + token.unsubscribe(this, target); + this.remove(token, target); + } + handleChange(record) { + const { token, target } = record; + this.add(token, target); + } + add(token, target) { + PropertyTargetManager.getOrCreate(target).setProperty(token.cssCustomProperty, this.resolveCSSValue(DesignTokenNode.getOrCreate(target).get(token))); + } + remove(token, target) { + PropertyTargetManager.getOrCreate(target).removeProperty(token.cssCustomProperty); + } + resolveCSSValue(value) { + return value && typeof value.createCSS === "function" ? value.createCSS() : value; + } + }; + DesignTokenBindingObserver = class { + constructor(source, token, node) { + this.source = source; + this.token = token; + this.node = node; + this.dependencies = /* @__PURE__ */ new Set(); + this.observer = Observable.binding(source, this, false); + this.observer.handleChange = this.observer.call; + this.handleChange(); + } + disconnect() { + this.observer.disconnect(); + } + /** + * @internal + */ + handleChange() { + try { + this.node.store.set(this.token, this.observer.observe(this.node.target, defaultExecutionContext)); + } catch (e) { + console.error(e); + } + } + }; + Store = class { + constructor() { + this.values = /* @__PURE__ */ new Map(); + } + set(token, value) { + if (this.values.get(token) !== value) { + this.values.set(token, value); + Observable.getNotifier(this).notify(token.id); + } + } + get(token) { + Observable.track(this, token.id); + return this.values.get(token); + } + delete(token) { + this.values.delete(token); + Observable.getNotifier(this).notify(token.id); + } + all() { + return this.values.entries(); + } + }; + nodeCache = /* @__PURE__ */ new WeakMap(); + childToParent = /* @__PURE__ */ new WeakMap(); + DesignTokenNode = class _DesignTokenNode { + constructor(target) { + this.target = target; + this.store = new Store(); + this.children = []; + this.assignedValues = /* @__PURE__ */ new Map(); + this.reflecting = /* @__PURE__ */ new Set(); + this.bindingObservers = /* @__PURE__ */ new Map(); + this.tokenValueChangeHandler = { + handleChange: (source, arg) => { + const token = DesignTokenImpl.getTokenById(arg); + if (token) { + token.notify(this.target); + this.updateCSSTokenReflection(source, token); + } + } + }; + nodeCache.set(target, this); + Observable.getNotifier(this.store).subscribe(this.tokenValueChangeHandler); + if (target instanceof FASTElement) { + target.$fastController.addBehaviors([this]); + } else if (target.isConnected) { + this.bind(); + } + } + /** + * Returns a DesignTokenNode for an element. + * Creates a new instance if one does not already exist for a node, + * otherwise returns the cached instance + * + * @param target - The HTML element to retrieve a DesignTokenNode for + */ + static getOrCreate(target) { + return nodeCache.get(target) || new _DesignTokenNode(target); + } + /** + * Determines if a DesignTokenNode has been created for a target + * @param target - The element to test + */ + static existsFor(target) { + return nodeCache.has(target); + } + /** + * Searches for and return the nearest parent DesignTokenNode. + * Null is returned if no node is found or the node provided is for a default element. + */ + static findParent(node) { + if (!(defaultElement === node.target)) { + let parent = composedParent(node.target); + while (parent !== null) { + if (nodeCache.has(parent)) { + return nodeCache.get(parent); + } + parent = composedParent(parent); + } + return _DesignTokenNode.getOrCreate(defaultElement); + } + return null; + } + /** + * Finds the closest node with a value explicitly assigned for a token, otherwise null. + * @param token - The token to look for + * @param start - The node to start looking for value assignment + * @returns + */ + static findClosestAssignedNode(token, start) { + let current = start; + do { + if (current.has(token)) { + return current; + } + current = current.parent ? current.parent : current.target !== defaultElement ? _DesignTokenNode.getOrCreate(defaultElement) : null; + } while (current !== null); + return null; + } + /** + * The parent DesignTokenNode, or null. + */ + get parent() { + return childToParent.get(this) || null; + } + updateCSSTokenReflection(source, token) { + if (DesignTokenImpl.isCSSDesignToken(token)) { + const parent = this.parent; + const reflecting = this.isReflecting(token); + if (parent) { + const parentValue = parent.get(token); + const sourceValue = source.get(token); + if (parentValue !== sourceValue && !reflecting) { + this.reflectToCSS(token); + } else if (parentValue === sourceValue && reflecting) { + this.stopReflectToCSS(token); + } + } else if (!reflecting) { + this.reflectToCSS(token); + } + } + } + /** + * Checks if a token has been assigned an explicit value the node. + * @param token - the token to check. + */ + has(token) { + return this.assignedValues.has(token); + } + /** + * Gets the value of a token for a node + * @param token - The token to retrieve the value for + * @returns + */ + get(token) { + const value = this.store.get(token); + if (value !== void 0) { + return value; + } + const raw = this.getRaw(token); + if (raw !== void 0) { + this.hydrate(token, raw); + return this.get(token); + } + } + /** + * Retrieves the raw assigned value of a token from the nearest assigned node. + * @param token - The token to retrieve a raw value for + * @returns + */ + getRaw(token) { + var _a; + if (this.assignedValues.has(token)) { + return this.assignedValues.get(token); + } + return (_a = _DesignTokenNode.findClosestAssignedNode(token, this)) === null || _a === void 0 ? void 0 : _a.getRaw(token); + } + /** + * Sets a token to a value for a node + * @param token - The token to set + * @param value - The value to set the token to + */ + set(token, value) { + if (DesignTokenImpl.isDerivedDesignTokenValue(this.assignedValues.get(token))) { + this.tearDownBindingObserver(token); + } + this.assignedValues.set(token, value); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + this.setupBindingObserver(token, value); + } else { + this.store.set(token, value); + } + } + /** + * Deletes a token value for the node. + * @param token - The token to delete the value for + */ + delete(token) { + this.assignedValues.delete(token); + this.tearDownBindingObserver(token); + const upstream = this.getRaw(token); + if (upstream) { + this.hydrate(token, upstream); + } else { + this.store.delete(token); + } + } + /** + * Invoked when the DesignTokenNode.target is attached to the document + */ + bind() { + const parent = _DesignTokenNode.findParent(this); + if (parent) { + parent.appendChild(this); + } + for (const key of this.assignedValues.keys()) { + key.notify(this.target); + } + } + /** + * Invoked when the DesignTokenNode.target is detached from the document + */ + unbind() { + if (this.parent) { + const parent = childToParent.get(this); + parent.removeChild(this); + } + for (const token of this.bindingObservers.keys()) { + this.tearDownBindingObserver(token); + } + } + /** + * Appends a child to a parent DesignTokenNode. + * @param child - The child to append to the node + */ + appendChild(child) { + if (child.parent) { + childToParent.get(child).removeChild(child); + } + const reParent = this.children.filter((x) => child.contains(x)); + childToParent.set(child, this); + this.children.push(child); + reParent.forEach((x) => child.appendChild(x)); + Observable.getNotifier(this.store).subscribe(child); + for (const [token, value] of this.store.all()) { + child.hydrate(token, this.bindingObservers.has(token) ? this.getRaw(token) : value); + child.updateCSSTokenReflection(child.store, token); + } + } + /** + * Removes a child from a node. + * @param child - The child to remove. + */ + removeChild(child) { + const childIndex = this.children.indexOf(child); + if (childIndex !== -1) { + this.children.splice(childIndex, 1); + } + Observable.getNotifier(this.store).unsubscribe(child); + if (child.parent !== this) { + return false; + } + const deleted = childToParent.delete(child); + for (const [token] of this.store.all()) { + child.hydrate(token, child.getRaw(token)); + child.updateCSSTokenReflection(child.store, token); + } + return deleted; + } + /** + * Tests whether a provided node is contained by + * the calling node. + * @param test - The node to test + */ + contains(test) { + return composedContains(this.target, test.target); + } + /** + * Instructs the node to reflect a design token for the provided token. + * @param token - The design token to reflect + */ + reflectToCSS(token) { + if (!this.isReflecting(token)) { + this.reflecting.add(token); + _DesignTokenNode.cssCustomPropertyReflector.startReflection(token, this.target); + } + } + /** + * Stops reflecting a DesignToken to CSS + * @param token - The design token to stop reflecting + */ + stopReflectToCSS(token) { + if (this.isReflecting(token)) { + this.reflecting.delete(token); + _DesignTokenNode.cssCustomPropertyReflector.stopReflection(token, this.target); + } + } + /** + * Determines if a token is being reflected to CSS for a node. + * @param token - The token to check for reflection + * @returns + */ + isReflecting(token) { + return this.reflecting.has(token); + } + /** + * Handle changes to upstream tokens + * @param source - The parent DesignTokenNode + * @param property - The token ID that changed + */ + handleChange(source, property) { + const token = DesignTokenImpl.getTokenById(property); + if (!token) { + return; + } + this.hydrate(token, this.getRaw(token)); + this.updateCSSTokenReflection(this.store, token); + } + /** + * Hydrates a token with a DesignTokenValue, making retrieval available. + * @param token - The token to hydrate + * @param value - The value to hydrate + */ + hydrate(token, value) { + if (!this.has(token)) { + const observer = this.bindingObservers.get(token); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + if (observer) { + if (observer.source !== value) { + this.tearDownBindingObserver(token); + this.setupBindingObserver(token, value); + } + } else { + this.setupBindingObserver(token, value); + } + } else { + if (observer) { + this.tearDownBindingObserver(token); + } + this.store.set(token, value); + } + } + } + /** + * Sets up a binding observer for a derived token value that notifies token + * subscribers on change. + * + * @param token - The token to notify when the binding updates + * @param source - The binding source + */ + setupBindingObserver(token, source) { + const binding = new DesignTokenBindingObserver(source, token, this); + this.bindingObservers.set(token, binding); + return binding; + } + /** + * Tear down a binding observer for a token. + */ + tearDownBindingObserver(token) { + if (this.bindingObservers.has(token)) { + this.bindingObservers.get(token).disconnect(); + this.bindingObservers.delete(token); + return true; + } + return false; + } + }; + DesignTokenNode.cssCustomPropertyReflector = new CustomPropertyReflector(); + __decorate([ + observable + ], DesignTokenNode.prototype, "children", void 0); + DesignToken = Object.freeze({ + create, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been connected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * 3. The HTMLElement is not connected to the document when token values are set. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyConnection(element) { + if (!element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).bind(); + return true; + }, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been disconnected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyDisconnection(element) { + if (element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).unbind(); + return true; + }, + /** + * Registers and element or document as a DesignToken root. + * {@link CSSDesignToken | CSSDesignTokens} with default values assigned via + * {@link (DesignToken:interface).withDefault} will emit CSS custom properties to all + * registered roots. + * @param target - The root to register + */ + registerRoot(target = defaultElement) { + RootStyleSheetTarget.registerRoot(target); + }, + /** + * Unregister an element or document as a DesignToken root. + * @param target - The root to deregister + */ + unregisterRoot(target = defaultElement) { + RootStyleSheetTarget.unregisterRoot(target); + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js + function extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback) { + if (typeof params === "string") { + return { + name: params, + type: elementDefinitionType, + callback: elementDefinitionCallback + }; + } else { + return params; + } + } + var ElementDisambiguation, elementTypesByTag, elementTagsByType, rootDesignSystem, designSystemKey, DesignSystem, DefaultDesignSystem, ElementDefinitionEntry; + var init_design_system = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js"() { + init_esm(); + init_foundation_element(); + init_di(); + init_design_token(); + init_component_presentation(); + ElementDisambiguation = Object.freeze({ + /** + * Skip defining the element but still call the provided callback passed + * to DesignSystemRegistrationContext.tryDefineElement + */ + definitionCallbackOnly: null, + /** + * Ignore the duplicate element entirely. + */ + ignoreDuplicate: /* @__PURE__ */ Symbol() + }); + elementTypesByTag = /* @__PURE__ */ new Map(); + elementTagsByType = /* @__PURE__ */ new Map(); + rootDesignSystem = null; + designSystemKey = DI.createInterface((x) => x.cachedCallback((handler) => { + if (rootDesignSystem === null) { + rootDesignSystem = new DefaultDesignSystem(null, handler); + } + return rootDesignSystem; + })); + DesignSystem = Object.freeze({ + /** + * Returns the HTML element name that the type is defined as. + * @param type - The type to lookup. + * @public + */ + tagFor(type) { + return elementTagsByType.get(type); + }, + /** + * Searches the DOM hierarchy for the design system that is responsible + * for the provided element. + * @param element - The element to locate the design system for. + * @returns The located design system. + * @public + */ + responsibleFor(element) { + const owned = element.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.findResponsibleContainer(element); + return container.get(designSystemKey); + }, + /** + * Gets the DesignSystem if one is explicitly defined on the provided element; + * otherwise creates a design system defined directly on the element. + * @param element - The element to get or create a design system for. + * @returns The design system. + * @public + */ + getOrCreate(node) { + if (!node) { + if (rootDesignSystem === null) { + rootDesignSystem = DI.getOrCreateDOMContainer().get(designSystemKey); + } + return rootDesignSystem; + } + const owned = node.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.getOrCreateDOMContainer(node); + if (container.has(designSystemKey, false)) { + return container.get(designSystemKey); + } else { + const system = new DefaultDesignSystem(node, container); + container.register(Registration.instance(designSystemKey, system)); + return system; + } + } + }); + DefaultDesignSystem = class { + constructor(owner, container) { + this.owner = owner; + this.container = container; + this.designTokensInitialized = false; + this.prefix = "fast"; + this.shadowRootMode = void 0; + this.disambiguate = () => ElementDisambiguation.definitionCallbackOnly; + if (owner !== null) { + owner.$$designSystem$$ = this; + } + } + withPrefix(prefix) { + this.prefix = prefix; + return this; + } + withShadowRootMode(mode) { + this.shadowRootMode = mode; + return this; + } + withElementDisambiguation(callback) { + this.disambiguate = callback; + return this; + } + withDesignTokenRoot(root) { + this.designTokenRoot = root; + return this; + } + register(...registrations) { + const container = this.container; + const elementDefinitionEntries = []; + const disambiguate = this.disambiguate; + const shadowRootMode = this.shadowRootMode; + const context = { + elementPrefix: this.prefix, + tryDefineElement(params, elementDefinitionType, elementDefinitionCallback) { + const extractedParams = extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback); + const { name, callback, baseClass } = extractedParams; + let { type } = extractedParams; + let elementName = name; + let typeFoundByName = elementTypesByTag.get(elementName); + let needsDefine = true; + while (typeFoundByName) { + const result = disambiguate(elementName, type, typeFoundByName); + switch (result) { + case ElementDisambiguation.ignoreDuplicate: + return; + case ElementDisambiguation.definitionCallbackOnly: + needsDefine = false; + typeFoundByName = void 0; + break; + default: + elementName = result; + typeFoundByName = elementTypesByTag.get(elementName); + break; + } + } + if (needsDefine) { + if (elementTagsByType.has(type) || type === FoundationElement) { + type = class extends type { + }; + } + elementTypesByTag.set(elementName, type); + elementTagsByType.set(type, elementName); + if (baseClass) { + elementTagsByType.set(baseClass, elementName); + } + } + elementDefinitionEntries.push(new ElementDefinitionEntry(container, elementName, type, shadowRootMode, callback, needsDefine)); + } + }; + if (!this.designTokensInitialized) { + this.designTokensInitialized = true; + if (this.designTokenRoot !== null) { + DesignToken.registerRoot(this.designTokenRoot); + } + } + container.registerWithContext(context, ...registrations); + for (const entry of elementDefinitionEntries) { + entry.callback(entry); + if (entry.willDefine && entry.definition !== null) { + entry.definition.define(); + } + } + return this; + } + }; + ElementDefinitionEntry = class { + constructor(container, name, type, shadowRootMode, callback, willDefine) { + this.container = container; + this.name = name; + this.type = type; + this.shadowRootMode = shadowRootMode; + this.callback = callback; + this.willDefine = willDefine; + this.definition = null; + } + definePresentation(presentation) { + ComponentPresentation.define(this.name, presentation, this.container); + } + defineElement(definition) { + this.definition = new FASTElementDefinition(this.type, Object.assign(Object.assign({}, definition), { name: this.name })); + } + tagFor(type) { + return DesignSystem.tagFor(type); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js + var init_registration_context = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js + var init_design_system2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js"() { + init_design_system(); + init_component_presentation(); + init_registration_context(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/index.js + var init_di2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/index.js"() { + init_di(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js + var init_dialog_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js"() { + } + }); + + // node_modules/tabbable/dist/index.esm.js + var candidateSelectors, candidateSelector, NoElement, matches, getRootNode, getTabindex, isInput, isHiddenInput, isDetailsWithSummary, getCheckedRadio, isTabbableRadio, isRadio, isNonTabbableRadio, isZeroArea, isHidden, isDisabledFromFieldset, isNodeMatchingSelectorFocusable, isNodeMatchingSelectorTabbable, isTabbable, focusableCandidateSelector, isFocusable; + var init_index_esm = __esm({ + "node_modules/tabbable/dist/index.esm.js"() { + candidateSelectors = ["input", "select", "textarea", "a[href]", "button", "[tabindex]:not(slot)", "audio[controls]", "video[controls]", '[contenteditable]:not([contenteditable="false"])', "details>summary:first-of-type", "details"]; + candidateSelector = /* @__PURE__ */ candidateSelectors.join(","); + NoElement = typeof Element === "undefined"; + matches = NoElement ? function() { + } : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; + getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) { + return element.getRootNode(); + } : function(element) { + return element.ownerDocument; + }; + getTabindex = function getTabindex2(node, isScope) { + if (node.tabIndex < 0) { + if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute("tabindex"), 10))) { + return 0; + } + } + return node.tabIndex; + }; + isInput = function isInput2(node) { + return node.tagName === "INPUT"; + }; + isHiddenInput = function isHiddenInput2(node) { + return isInput(node) && node.type === "hidden"; + }; + isDetailsWithSummary = function isDetailsWithSummary2(node) { + var r = node.tagName === "DETAILS" && Array.prototype.slice.apply(node.children).some(function(child) { + return child.tagName === "SUMMARY"; + }); + return r; + }; + getCheckedRadio = function getCheckedRadio2(nodes, form) { + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].checked && nodes[i].form === form) { + return nodes[i]; + } + } + }; + isTabbableRadio = function isTabbableRadio2(node) { + if (!node.name) { + return true; + } + var radioScope = node.form || getRootNode(node); + var queryRadios = function queryRadios2(name) { + return radioScope.querySelectorAll('input[type="radio"][name="' + name + '"]'); + }; + var radioSet; + if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && typeof window.CSS.escape === "function") { + radioSet = queryRadios(window.CSS.escape(node.name)); + } else { + try { + radioSet = queryRadios(node.name); + } catch (err) { + console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", err.message); + return false; + } + } + var checked = getCheckedRadio(radioSet, node.form); + return !checked || checked === node; + }; + isRadio = function isRadio2(node) { + return isInput(node) && node.type === "radio"; + }; + isNonTabbableRadio = function isNonTabbableRadio2(node) { + return isRadio(node) && !isTabbableRadio(node); + }; + isZeroArea = function isZeroArea2(node) { + var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height; + return width === 0 && height === 0; + }; + isHidden = function isHidden2(node, _ref) { + var displayCheck = _ref.displayCheck, getShadowRoot2 = _ref.getShadowRoot; + if (getComputedStyle(node).visibility === "hidden") { + return true; + } + var isDirectSummary = matches.call(node, "details>summary:first-of-type"); + var nodeUnderDetails = isDirectSummary ? node.parentElement : node; + if (matches.call(nodeUnderDetails, "details:not([open]) *")) { + return true; + } + var nodeRootHost = getRootNode(node).host; + var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node); + if (!displayCheck || displayCheck === "full") { + if (typeof getShadowRoot2 === "function") { + var originalNode = node; + while (node) { + var parentElement = node.parentElement; + var rootNode = getRootNode(node); + if (parentElement && !parentElement.shadowRoot && getShadowRoot2(parentElement) === true) { + return isZeroArea(node); + } else if (node.assignedSlot) { + node = node.assignedSlot; + } else if (!parentElement && rootNode !== node.ownerDocument) { + node = rootNode.host; + } else { + node = parentElement; + } + } + node = originalNode; + } + if (nodeIsAttached) { + return !node.getClientRects().length; + } + } else if (displayCheck === "non-zero-area") { + return isZeroArea(node); + } + return false; + }; + isDisabledFromFieldset = function isDisabledFromFieldset2(node) { + if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) { + var parentNode = node.parentElement; + while (parentNode) { + if (parentNode.tagName === "FIELDSET" && parentNode.disabled) { + for (var i = 0; i < parentNode.children.length; i++) { + var child = parentNode.children.item(i); + if (child.tagName === "LEGEND") { + return matches.call(parentNode, "fieldset[disabled] *") ? true : !child.contains(node); + } + } + return true; + } + parentNode = parentNode.parentElement; + } + } + return false; + }; + isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) { + if (node.disabled || isHiddenInput(node) || isHidden(node, options) || // For a details element with a summary, the summary element gets the focus + isDetailsWithSummary(node) || isDisabledFromFieldset(node)) { + return false; + } + return true; + }; + isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) { + if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) { + return false; + } + return true; + }; + isTabbable = function isTabbable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, candidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorTabbable(options, node); + }; + focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat("iframe").join(","); + isFocusable = function isFocusable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, focusableCandidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorFocusable(options, node); + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js + var Dialog; + var init_dialog = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + Dialog = class _Dialog extends FoundationElement { + constructor() { + super(...arguments); + this.modal = true; + this.hidden = false; + this.trapFocus = true; + this.trapFocusChanged = () => { + if (this.$fastController.isConnected) { + this.updateTrapFocus(); + } + }; + this.isTrappingFocus = false; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && !this.hidden) { + switch (e.key) { + case keyEscape: + this.dismiss(); + e.preventDefault(); + break; + case keyTab: + this.handleTabKeyDown(e); + break; + } + } + }; + this.handleDocumentFocus = (e) => { + if (!e.defaultPrevented && this.shouldForceFocus(e.target)) { + this.focusFirstElement(); + e.preventDefault(); + } + }; + this.handleTabKeyDown = (e) => { + if (!this.trapFocus || this.hidden) { + return; + } + const bounds = this.getTabQueueBounds(); + if (bounds.length === 0) { + return; + } + if (bounds.length === 1) { + bounds[0].focus(); + e.preventDefault(); + return; + } + if (e.shiftKey && e.target === bounds[0]) { + bounds[bounds.length - 1].focus(); + e.preventDefault(); + } else if (!e.shiftKey && e.target === bounds[bounds.length - 1]) { + bounds[0].focus(); + e.preventDefault(); + } + return; + }; + this.getTabQueueBounds = () => { + const bounds = []; + return _Dialog.reduceTabbableItems(bounds, this); + }; + this.focusFirstElement = () => { + const bounds = this.getTabQueueBounds(); + if (bounds.length > 0) { + bounds[0].focus(); + } else { + if (this.dialog instanceof HTMLElement) { + this.dialog.focus(); + } + } + }; + this.shouldForceFocus = (currentFocusElement) => { + return this.isTrappingFocus && !this.contains(currentFocusElement); + }; + this.shouldTrapFocus = () => { + return this.trapFocus && !this.hidden; + }; + this.updateTrapFocus = (shouldTrapFocusOverride) => { + const shouldTrapFocus = shouldTrapFocusOverride === void 0 ? this.shouldTrapFocus() : shouldTrapFocusOverride; + if (shouldTrapFocus && !this.isTrappingFocus) { + this.isTrappingFocus = true; + document.addEventListener("focusin", this.handleDocumentFocus); + DOM.queueUpdate(() => { + if (this.shouldForceFocus(document.activeElement)) { + this.focusFirstElement(); + } + }); + } else if (!shouldTrapFocus && this.isTrappingFocus) { + this.isTrappingFocus = false; + document.removeEventListener("focusin", this.handleDocumentFocus); + } + }; + } + /** + * @internal + */ + dismiss() { + this.$emit("dismiss"); + this.$emit("cancel"); + } + /** + * The method to show the dialog. + * + * @public + */ + show() { + this.hidden = false; + } + /** + * The method to hide the dialog. + * + * @public + */ + hide() { + this.hidden = true; + this.$emit("close"); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + document.addEventListener("keydown", this.handleDocumentKeydown); + this.notifier = Observable.getNotifier(this); + this.notifier.subscribe(this, "hidden"); + this.updateTrapFocus(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.updateTrapFocus(false); + this.notifier.unsubscribe(this, "hidden"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "hidden": + this.updateTrapFocus(); + break; + default: + break; + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceTabbableItems(elements2, element) { + if (element.getAttribute("tabindex") === "-1") { + return elements2; + } + if (isTabbable(element) || _Dialog.isFocusableFastElement(element) && _Dialog.hasTabbableShadow(element)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Dialog.reduceTabbableItems, [])); + } + return elements2; + } + /** + * Test if element is focusable fast element + * + * @param element - The element to check + * + * @internal + */ + static isFocusableFastElement(element) { + var _a, _b; + return !!((_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus); + } + /** + * Test if the element has a focusable shadow + * + * @param element - The element to check + * + * @internal + */ + static hasTabbableShadow(element) { + var _a, _b; + return Array.from((_b = (_a = element.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll("*")) !== null && _b !== void 0 ? _b : []).some((x) => { + return isTabbable(x); + }); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "modal", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "hidden", void 0); + __decorate([ + attr({ attribute: "trap-focus", mode: "boolean" }) + ], Dialog.prototype, "trapFocus", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], Dialog.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], Dialog.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], Dialog.prototype, "ariaLabel", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js + var init_dialog2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js"() { + init_dialog_template(); + init_dialog(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js + var init_disclosure_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js + var Disclosure; + var init_disclosure = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Disclosure = class extends FoundationElement { + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.setup(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.details.removeEventListener("toggle", this.onToggle); + } + /** + * Show extra content. + */ + show() { + this.details.open = true; + } + /** + * Hide extra content. + */ + hide() { + this.details.open = false; + } + /** + * Toggle the current(expanded/collapsed) state. + */ + toggle() { + this.details.open = !this.details.open; + } + /** + * Register listener and set default disclosure mode + */ + setup() { + this.onToggle = this.onToggle.bind(this); + this.details.addEventListener("toggle", this.onToggle); + if (this.expanded) { + this.show(); + } + } + /** + * Update the aria attr and fire `toggle` event + */ + onToggle() { + this.expanded = this.details.open; + this.$emit("toggle"); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Disclosure.prototype, "expanded", void 0); + __decorate([ + attr + ], Disclosure.prototype, "title", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js + var init_disclosure2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js"() { + init_disclosure_template(); + init_disclosure(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js + var dividerTemplate; + var init_divider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js"() { + init_esm(); + dividerTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js + var DividerRole; + var init_divider_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js"() { + DividerRole = { + /** + * The divider semantically separates content + */ + separator: "separator", + /** + * The divider has no semantic value and is for visual presentation only. + */ + presentation: "presentation" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js + var Divider; + var init_divider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_divider_options(); + Divider = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = DividerRole.separator; + this.orientation = Orientation.horizontal; + } + }; + __decorate([ + attr + ], Divider.prototype, "role", void 0); + __decorate([ + attr + ], Divider.prototype, "orientation", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js + var init_divider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js"() { + init_divider_template(); + init_divider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js + var FlipperDirection; + var init_flipper_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js"() { + FlipperDirection = { + next: "next", + previous: "previous" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js + var init_flipper_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js + var Flipper; + var init_flipper = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_flipper_options(); + Flipper = class extends FoundationElement { + constructor() { + super(...arguments); + this.hiddenFromAT = true; + this.direction = FlipperDirection.next; + } + /** + * Simulate a click event when the flipper has focus and the user hits enter or space keys + * Blur focus if the user hits escape key + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + if (!this.hiddenFromAT) { + const key = e.key; + if (key === "Enter" || key === "Space") { + this.$emit("click", e); + } + if (key === "Escape") { + this.blur(); + } + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Flipper.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "aria-hidden", converter: booleanConverter }) + ], Flipper.prototype, "hiddenFromAT", void 0); + __decorate([ + attr + ], Flipper.prototype, "direction", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js + var init_flipper2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js"() { + init_flipper_template(); + init_flipper(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js + var init_form_associated2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js"() { + init_form_associated(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js + var init_foundation_element2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js"() { + init_foundation_element(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js + var listboxOptionTemplate; + var init_listbox_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js"() { + init_esm(); + init_start_end(); + listboxOptionTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js + var init_listbox_option2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js"() { + init_listbox_option(); + init_listbox_option_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js + var ListboxElement; + var init_listbox_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + ListboxElement = class extends Listbox { + constructor() { + super(...arguments); + this.activeIndex = -1; + this.rangeStartIndex = -1; + } + /** + * Returns the last checked option. + * + * @internal + */ + get activeOption() { + return this.options[this.activeIndex]; + } + /** + * Returns the list of checked options. + * + * @internal + */ + get checkedOptions() { + var _a; + return (_a = this.options) === null || _a === void 0 ? void 0 : _a.filter((o) => o.checked); + } + /** + * Returns the index of the first selected option. + * + * @internal + */ + get firstSelectedOptionIndex() { + return this.options.indexOf(this.firstSelectedOption); + } + /** + * Updates the `ariaActiveDescendant` property when the active index changes. + * + * @param prev - the previous active index + * @param next - the next active index + * + * @internal + */ + activeIndexChanged(prev, next) { + var _a, _b; + this.ariaActiveDescendant = (_b = (_a = this.options[next]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ""; + this.focusAndScrollOptionIntoView(); + } + /** + * Toggles the checked state for the currently active option. + * + * @remarks + * Multiple-selection mode only. + * + * @internal + */ + checkActiveIndex() { + if (!this.multiple) { + return; + } + const activeItem = this.activeOption; + if (activeItem) { + activeItem.checked = true; + } + } + /** + * Sets the active index to the first option and marks it as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkFirstOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex + 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and sets the matching option as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkLastOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.options.length); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = this.options.length - 1; + this.checkActiveIndex(); + } + /** + * @override + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("focusout", this.focusoutHandler); + } + /** + * @override + * @internal + */ + disconnectedCallback() { + this.removeEventListener("focusout", this.focusoutHandler); + super.disconnectedCallback(); + } + /** + * Increments the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkNextOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.activeIndex + 1); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex += this.activeIndex < this.options.length - 1 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkPreviousOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + if (this.checkedOptions.length === 1) { + this.rangeStartIndex += 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.activeIndex, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex -= this.activeIndex > 0 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Handles click events for listbox options. + * + * @param e - the event object + * + * @override + * @internal + */ + clickHandler(e) { + var _a; + if (!this.multiple) { + return super.clickHandler(e); + } + const captured = (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest(`[role=option]`); + if (!captured || captured.disabled) { + return; + } + this.uncheckAllOptions(); + this.activeIndex = this.options.indexOf(captured); + this.checkActiveIndex(); + this.toggleSelectedForAllCheckedOptions(); + return true; + } + /** + * @override + * @internal + */ + focusAndScrollOptionIntoView() { + super.focusAndScrollOptionIntoView(this.activeOption); + } + /** + * In multiple-selection mode: + * If any options are selected, the first selected option is checked when + * the listbox receives focus. If no options are selected, the first + * selectable option is checked. + * + * @override + * @internal + */ + focusinHandler(e) { + if (!this.multiple) { + return super.focusinHandler(e); + } + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.uncheckAllOptions(); + if (this.activeIndex === -1) { + this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0; + } + this.checkActiveIndex(); + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Unchecks all options when the listbox loses focus. + * + * @internal + */ + focusoutHandler(e) { + if (this.multiple) { + this.uncheckAllOptions(); + } + } + /** + * Handles keydown actions for listbox navigation and typeahead + * + * @override + * @internal + */ + keydownHandler(e) { + if (!this.multiple) { + return super.keydownHandler(e); + } + if (this.disabled) { + return true; + } + const { key, shiftKey } = e; + this.shouldSkipFocus = false; + switch (key) { + // Select the first available option + case keyHome: { + this.checkFirstOption(shiftKey); + return; + } + // Select the next selectable option + case keyArrowDown: { + this.checkNextOption(shiftKey); + return; + } + // Select the previous selectable option + case keyArrowUp: { + this.checkPreviousOption(shiftKey); + return; + } + // Select the last available option + case keyEnd: { + this.checkLastOption(shiftKey); + return; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEscape: { + this.uncheckAllOptions(); + this.checkActiveIndex(); + return true; + } + case keySpace: { + e.preventDefault(); + if (this.typeAheadExpired) { + this.toggleSelectedForAllCheckedOptions(); + return; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @override + * @internal + */ + mousedownHandler(e) { + if (e.offsetX >= 0 && e.offsetX <= this.scrollWidth) { + return super.mousedownHandler(e); + } + } + /** + * Switches between single-selection and multi-selection mode. + * + * @internal + */ + multipleChanged(prev, next) { + var _a; + this.ariaMultiSelectable = next ? "true" : null; + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + o.checked = next ? false : void 0; + }); + this.setSelectedOptions(); + } + /** + * Sets an option as selected and gives it focus. + * + * @override + * @public + */ + setSelectedOptions() { + if (!this.multiple) { + super.setSelectedOptions(); + return; + } + if (this.$fastController.isConnected && this.options) { + this.selectedOptions = this.options.filter((o) => o.selected); + this.focusAndScrollOptionIntoView(); + } + } + /** + * Ensures the size is a positive integer when the property is updated. + * + * @param prev - the previous size value + * @param next - the current size value + * + * @internal + */ + sizeChanged(prev, next) { + var _a; + const size = Math.max(0, parseInt((_a = next === null || next === void 0 ? void 0 : next.toFixed()) !== null && _a !== void 0 ? _a : "", 10)); + if (size !== next) { + DOM.queueUpdate(() => { + this.size = size; + }); + } + } + /** + * Toggles the selected state of the provided options. If any provided items + * are in an unselected state, all items are set to selected. If every + * provided item is selected, they are all unselected. + * + * @internal + */ + toggleSelectedForAllCheckedOptions() { + const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled); + const force = !enabledCheckedOptions.every((o) => o.selected); + enabledCheckedOptions.forEach((o) => o.selected = force); + this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]); + this.setSelectedOptions(); + } + /** + * @override + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (!this.multiple) { + super.typeaheadBufferChanged(prev, next); + return; + } + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + const activeIndex = this.options.indexOf(typeaheadMatches[0]); + if (activeIndex > -1) { + this.activeIndex = activeIndex; + this.uncheckAllOptions(); + this.checkActiveIndex(); + } + this.typeAheadExpired = false; + } + } + /** + * Unchecks all options. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - reset the rangeStartIndex + * + * @internal + */ + uncheckAllOptions(preserveChecked = false) { + this.options.forEach((o) => o.checked = this.multiple ? false : void 0); + if (!preserveChecked) { + this.rangeStartIndex = -1; + } + } + }; + __decorate([ + observable + ], ListboxElement.prototype, "activeIndex", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxElement.prototype, "multiple", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], ListboxElement.prototype, "size", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js + var init_listbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js + var init_listbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js"() { + init_listbox(); + init_listbox_element(); + init_listbox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js + var PickerMenu; + var init_picker_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js"() { + init_tslib_es6(); + init_dist2(); + init_esm(); + init_foundation_element(); + PickerMenu = class extends FoundationElement { + constructor() { + super(...arguments); + this.optionElements = []; + } + menuElementsChanged() { + this.updateOptions(); + } + headerElementsChanged() { + this.updateOptions(); + } + footerElementsChanged() { + this.updateOptions(); + } + updateOptions() { + this.optionElements.splice(0, this.optionElements.length); + this.addSlottedListItems(this.headerElements); + this.addSlottedListItems(this.menuElements); + this.addSlottedListItems(this.footerElements); + this.$emit("optionsupdated", { bubbles: false }); + } + addSlottedListItems(slotChildren) { + if (slotChildren === void 0) { + return; + } + slotChildren.forEach((child) => { + if (child.nodeType === 1 && child.getAttribute("role") === "listitem") { + child.id = child.id || uniqueId("option-"); + this.optionElements.push(child); + } + }); + } + }; + __decorate([ + observable + ], PickerMenu.prototype, "menuElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "headerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "footerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "suggestionsAvailableText", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js + var defaultContentsTemplate, PickerMenuOption; + var init_picker_menu_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + defaultContentsTemplate = html` + +`; + PickerMenuOption = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.disconnectView(); + } + handleClick(e) { + if (e.defaultPrevented) { + return false; + } + this.handleInvoked(); + return false; + } + handleInvoked() { + this.$emit("pickeroptioninvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerMenuOption.prototype, "value", void 0); + __decorate([ + observable + ], PickerMenuOption.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js + var init_picker_list = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js + var defaultContentsTemplate2, PickerListItem; + var init_picker_list_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + defaultContentsTemplate2 = html` + +`; + PickerListItem = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + this.disconnectView(); + super.disconnectedCallback(); + } + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + if (e.key === keyEnter) { + this.handleInvoke(); + return false; + } + return true; + } + handleClick(e) { + if (!e.defaultPrevented) { + this.handleInvoke(); + } + return false; + } + handleInvoke() { + this.$emit("pickeriteminvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate2.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerListItem.prototype, "value", void 0); + __decorate([ + observable + ], PickerListItem.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js + var init_picker_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js + var _Picker, FormAssociatedPicker; + var init_picker_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Picker = class extends FoundationElement { + }; + FormAssociatedPicker = class extends FormAssociated(_Picker) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js + var pickerInputTemplate, Picker; + var init_picker = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_anchored_region2(); + init_picker_menu_option(); + init_picker_list_item(); + init_picker_form_associated(); + pickerInputTemplate = html` + +`; + Picker = class extends FormAssociatedPicker { + constructor() { + super(...arguments); + this.selection = ""; + this.filterSelected = true; + this.filterQuery = true; + this.noSuggestionsText = "No suggestions available"; + this.suggestionsAvailableText = "Suggestions available"; + this.loadingText = "Loading suggestions"; + this.menuPlacement = "bottom-fill"; + this.showLoading = false; + this.optionsList = []; + this.filteredOptionsList = []; + this.flyoutOpen = false; + this.menuFocusIndex = -1; + this.showNoOptions = false; + this.selectedItems = []; + this.inputElementView = null; + this.handleTextInput = (e) => { + this.query = this.inputElement.value; + }; + this.handleInputClick = (e) => { + e.preventDefault(); + this.toggleFlyout(true); + }; + this.setRegionProps = () => { + if (!this.flyoutOpen) { + return; + } + if (this.region === null || this.region === void 0) { + DOM.queueUpdate(this.setRegionProps); + return; + } + this.region.anchorElement = this.inputElement; + }; + this.configLookup = { + top: FlyoutPosTop, + bottom: FlyoutPosBottom, + tallest: FlyoutPosTallest, + "top-fill": FlyoutPosTopFill, + "bottom-fill": FlyoutPosBottomFill, + "tallest-fill": FlyoutPosTallestFill + }; + } + selectionChanged() { + if (this.$fastController.isConnected) { + this.handleSelectionChange(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.value = this.selection; + this.validate(); + } + } + } + optionsChanged() { + this.optionsList = this.options.split(",").map((opt) => opt.trim()).filter((opt) => opt !== ""); + } + menuPlacementChanged() { + if (this.$fastController.isConnected) { + this.updateMenuConfig(); + } + } + showLoadingChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + listItemTemplateChanged() { + this.updateListItemTemplate(); + } + defaultListItemTemplateChanged() { + this.updateListItemTemplate(); + } + menuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + defaultMenuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + optionsListChanged() { + this.updateFilteredOptions(); + } + queryChanged() { + if (this.$fastController.isConnected) { + if (this.inputElement.value !== this.query) { + this.inputElement.value = this.query; + } + this.updateFilteredOptions(); + this.$emit("querychange", { bubbles: false }); + } + } + filteredOptionsListChanged() { + if (this.$fastController.isConnected) { + this.showNoOptions = this.filteredOptionsList.length === 0 && this.menuElement.querySelectorAll('[role="listitem"]').length === 0; + this.setFocusedOption(this.showNoOptions ? -1 : 0); + } + } + flyoutOpenChanged() { + if (this.flyoutOpen) { + DOM.queueUpdate(this.setRegionProps); + this.$emit("menuopening", { bubbles: false }); + } else { + this.$emit("menuclosing", { bubbles: false }); + } + } + showNoOptionsChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.listElement = document.createElement(this.selectedListTag); + this.appendChild(this.listElement); + this.itemsPlaceholderElement = document.createComment(""); + this.listElement.append(this.itemsPlaceholderElement); + this.inputElementView = pickerInputTemplate.render(this, this.listElement); + const match = this.menuTag.toUpperCase(); + this.menuElement = Array.from(this.children).find((element) => { + return element.tagName === match; + }); + if (this.menuElement === void 0) { + this.menuElement = document.createElement(this.menuTag); + this.appendChild(this.menuElement); + } + if (this.menuElement.id === "") { + this.menuElement.id = uniqueId("listbox-"); + } + this.menuId = this.menuElement.id; + this.optionsPlaceholder = document.createComment(""); + this.menuElement.append(this.optionsPlaceholder); + this.updateMenuConfig(); + DOM.queueUpdate(() => this.initialize()); + } + disconnectedCallback() { + super.disconnectedCallback(); + this.toggleFlyout(false); + this.inputElement.removeEventListener("input", this.handleTextInput); + this.inputElement.removeEventListener("click", this.handleInputClick); + if (this.inputElementView !== null) { + this.inputElementView.dispose(); + this.inputElementView = null; + } + } + /** + * Move focus to the input element + * @public + */ + focus() { + this.inputElement.focus(); + } + /** + * Initialize the component. This is delayed a frame to ensure children are connected as well. + */ + initialize() { + this.updateListItemTemplate(); + this.updateOptionTemplate(); + this.itemsRepeatBehavior = new RepeatDirective((x) => x.selectedItems, (x) => x.activeListItemTemplate, { positioning: true }).createBehavior(this.itemsPlaceholderElement); + this.inputElement.addEventListener("input", this.handleTextInput); + this.inputElement.addEventListener("click", this.handleInputClick); + this.$fastController.addBehaviors([this.itemsRepeatBehavior]); + this.menuElement.suggestionsAvailableText = this.suggestionsAvailableText; + this.menuElement.addEventListener("optionsupdated", this.handleMenuOptionsUpdated); + this.optionsRepeatBehavior = new RepeatDirective((x) => x.filteredOptionsList, (x) => x.activeMenuOptionTemplate, { positioning: true }).createBehavior(this.optionsPlaceholder); + this.$fastController.addBehaviors([this.optionsRepeatBehavior]); + this.handleSelectionChange(); + } + /** + * Toggles the menu flyout + */ + toggleFlyout(open) { + if (this.flyoutOpen === open) { + return; + } + if (open && document.activeElement === this.inputElement) { + this.flyoutOpen = open; + DOM.queueUpdate(() => { + if (this.menuElement !== void 0) { + this.setFocusedOption(0); + } else { + this.disableMenu(); + } + }); + return; + } + this.flyoutOpen = false; + this.disableMenu(); + return; + } + /** + * Handle the menu options updated event from the child menu + */ + handleMenuOptionsUpdated(e) { + e.preventDefault(); + if (this.flyoutOpen) { + this.setFocusedOption(0); + } + } + /** + * Handle key down events. + */ + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + // TODO: what should "home" and "end" keys do, exactly? + // + // case keyHome: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.setFocusedOption(0); + // } + // } + // return false; + // } + // case keyEnd: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.toggleFlyout(true); + // this.setFocusedOption(this.menuElement.optionElements.length - 1); + // } + // } + // return false; + // } + case keyArrowDown: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const nextFocusOptionIndex = this.flyoutOpen ? Math.min(this.menuFocusIndex + 1, this.menuElement.optionElements.length - 1) : 0; + this.setFocusedOption(nextFocusOptionIndex); + } + return false; + } + case keyArrowUp: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const previousFocusOptionIndex = this.flyoutOpen ? Math.max(this.menuFocusIndex - 1, 0) : 0; + this.setFocusedOption(previousFocusOptionIndex); + } + return false; + } + case keyEscape: { + this.toggleFlyout(false); + return false; + } + case keyEnter: { + if (this.menuFocusIndex !== -1 && this.menuElement.optionElements.length > this.menuFocusIndex) { + this.menuElement.optionElements[this.menuFocusIndex].click(); + } + return false; + } + case keyArrowRight: { + if (document.activeElement !== this.inputElement) { + this.incrementFocusedItem(1); + return false; + } + return true; + } + case keyArrowLeft: { + if (this.inputElement.selectionStart === 0) { + this.incrementFocusedItem(-1); + return false; + } + return true; + } + case keyDelete: + case keyBackspace: { + if (document.activeElement === null) { + return true; + } + if (document.activeElement === this.inputElement) { + if (this.inputElement.selectionStart === 0) { + this.selection = this.selectedItems.slice(0, this.selectedItems.length - 1).toString(); + this.toggleFlyout(false); + return false; + } + return true; + } + const selectedItems = Array.from(this.listElement.children); + const currentFocusedItemIndex = selectedItems.indexOf(document.activeElement); + if (currentFocusedItemIndex > -1) { + this.selection = this.selectedItems.splice(currentFocusedItemIndex, 1).toString(); + DOM.queueUpdate(() => { + selectedItems[Math.min(selectedItems.length, currentFocusedItemIndex)].focus(); + }); + return false; + } + return true; + } + } + this.toggleFlyout(true); + return true; + } + /** + * Handle focus in events. + */ + handleFocusIn(e) { + return false; + } + /** + * Handle focus out events. + */ + handleFocusOut(e) { + if (this.menuElement === void 0 || !this.menuElement.contains(e.relatedTarget)) { + this.toggleFlyout(false); + } + return false; + } + /** + * The list of selected items has changed + */ + handleSelectionChange() { + if (this.selectedItems.toString() === this.selection) { + return; + } + this.selectedItems = this.selection === "" ? [] : this.selection.split(","); + this.updateFilteredOptions(); + DOM.queueUpdate(() => { + this.checkMaxItems(); + }); + this.$emit("selectionchange", { bubbles: false }); + } + /** + * Anchored region is loaded, menu and options exist in the DOM. + */ + handleRegionLoaded(e) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + this.$emit("menuloaded", { bubbles: false }); + }); + } + /** + * Checks if the maximum number of items has been chosen and updates the ui. + */ + checkMaxItems() { + if (this.inputElement === void 0) { + return; + } + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + if (document.activeElement === this.inputElement) { + const selectedItemInstances = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + selectedItemInstances[selectedItemInstances.length - 1].focus(); + } + this.inputElement.hidden = true; + } else { + this.inputElement.hidden = false; + } + } + /** + * A list item has been invoked. + */ + handleItemInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerListItem) { + const listItems = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + const itemIndex = listItems.indexOf(e.target); + if (itemIndex !== -1) { + const newSelection = this.selectedItems.slice(); + newSelection.splice(itemIndex, 1); + this.selection = newSelection.toString(); + DOM.queueUpdate(() => this.incrementFocusedItem(0)); + } + return false; + } + return true; + } + /** + * A menu option has been invoked. + */ + handleOptionInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerMenuOption) { + if (e.target.value !== void 0) { + this.selection = `${this.selection}${this.selection === "" ? "" : ","}${e.target.value}`; + } + this.inputElement.value = ""; + this.query = ""; + this.inputElement.focus(); + this.toggleFlyout(false); + return false; + } + return true; + } + /** + * Increments the focused list item by the specified amount + */ + incrementFocusedItem(increment) { + if (this.selectedItems.length === 0) { + this.inputElement.focus(); + return; + } + const selectedItemsAsElements = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + if (document.activeElement !== null) { + let currentFocusedItemIndex = selectedItemsAsElements.indexOf(document.activeElement); + if (currentFocusedItemIndex === -1) { + currentFocusedItemIndex = selectedItemsAsElements.length; + } + const newFocusedItemIndex = Math.min(selectedItemsAsElements.length, Math.max(0, currentFocusedItemIndex + increment)); + if (newFocusedItemIndex === selectedItemsAsElements.length) { + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + selectedItemsAsElements[newFocusedItemIndex - 1].focus(); + } else { + this.inputElement.focus(); + } + } else { + selectedItemsAsElements[newFocusedItemIndex].focus(); + } + } + } + /** + * Disables the menu. Note that the menu can be open, just doens't have any valid options on display. + */ + disableMenu() { + var _a, _b, _c; + this.menuFocusIndex = -1; + this.menuFocusOptionId = void 0; + (_a = this.inputElement) === null || _a === void 0 ? void 0 : _a.removeAttribute("aria-activedescendant"); + (_b = this.inputElement) === null || _b === void 0 ? void 0 : _b.removeAttribute("aria-owns"); + (_c = this.inputElement) === null || _c === void 0 ? void 0 : _c.removeAttribute("aria-expanded"); + } + /** + * Sets the currently focused menu option by index + */ + setFocusedOption(optionIndex) { + if (!this.flyoutOpen || optionIndex === -1 || this.showNoOptions || this.showLoading) { + this.disableMenu(); + return; + } + if (this.menuElement.optionElements.length === 0) { + return; + } + this.menuElement.optionElements.forEach((element) => { + element.setAttribute("aria-selected", "false"); + }); + this.menuFocusIndex = optionIndex; + if (this.menuFocusIndex > this.menuElement.optionElements.length - 1) { + this.menuFocusIndex = this.menuElement.optionElements.length - 1; + } + this.menuFocusOptionId = this.menuElement.optionElements[this.menuFocusIndex].id; + this.inputElement.setAttribute("aria-owns", this.menuId); + this.inputElement.setAttribute("aria-expanded", "true"); + this.inputElement.setAttribute("aria-activedescendant", this.menuFocusOptionId); + const focusedOption = this.menuElement.optionElements[this.menuFocusIndex]; + focusedOption.setAttribute("aria-selected", "true"); + this.menuElement.scrollTo(0, focusedOption.offsetTop); + } + /** + * Updates the template used for the list item repeat behavior + */ + updateListItemTemplate() { + var _a; + this.activeListItemTemplate = (_a = this.listItemTemplate) !== null && _a !== void 0 ? _a : this.defaultListItemTemplate; + } + /** + * Updates the template used for the menu option repeat behavior + */ + updateOptionTemplate() { + var _a; + this.activeMenuOptionTemplate = (_a = this.menuOptionTemplate) !== null && _a !== void 0 ? _a : this.defaultMenuOptionTemplate; + } + /** + * Updates the filtered options array + */ + updateFilteredOptions() { + this.filteredOptionsList = this.optionsList.slice(0); + if (this.filterSelected) { + this.filteredOptionsList = this.filteredOptionsList.filter((el2) => this.selectedItems.indexOf(el2) === -1); + } + if (this.filterQuery && this.query !== "" && this.query !== void 0) { + this.filteredOptionsList = this.filteredOptionsList.filter((el2) => el2.indexOf(this.query) !== -1); + } + } + /** + * Updates the menu configuration + */ + updateMenuConfig() { + let newConfig = this.configLookup[this.menuPlacement]; + if (newConfig === null) { + newConfig = FlyoutPosBottomFill; + } + this.menuConfig = Object.assign(Object.assign({}, newConfig), { autoUpdateMode: "auto", fixedPlacement: true, horizontalViewportLock: false, verticalViewportLock: false }); + } + }; + __decorate([ + attr({ attribute: "selection" }) + ], Picker.prototype, "selection", void 0); + __decorate([ + attr({ attribute: "options" }) + ], Picker.prototype, "options", void 0); + __decorate([ + attr({ attribute: "filter-selected", mode: "boolean" }) + ], Picker.prototype, "filterSelected", void 0); + __decorate([ + attr({ attribute: "filter-query", mode: "boolean" }) + ], Picker.prototype, "filterQuery", void 0); + __decorate([ + attr({ attribute: "max-selected" }) + ], Picker.prototype, "maxSelected", void 0); + __decorate([ + attr({ attribute: "no-suggestions-text" }) + ], Picker.prototype, "noSuggestionsText", void 0); + __decorate([ + attr({ attribute: "suggestions-available-text" }) + ], Picker.prototype, "suggestionsAvailableText", void 0); + __decorate([ + attr({ attribute: "loading-text" }) + ], Picker.prototype, "loadingText", void 0); + __decorate([ + attr({ attribute: "label" }) + ], Picker.prototype, "label", void 0); + __decorate([ + attr({ attribute: "labelledby" }) + ], Picker.prototype, "labelledBy", void 0); + __decorate([ + attr({ attribute: "placeholder" }) + ], Picker.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "menu-placement" }) + ], Picker.prototype, "menuPlacement", void 0); + __decorate([ + observable + ], Picker.prototype, "showLoading", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "optionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "query", void 0); + __decorate([ + observable + ], Picker.prototype, "filteredOptionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "flyoutOpen", void 0); + __decorate([ + observable + ], Picker.prototype, "menuId", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedListTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusIndex", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusOptionId", void 0); + __decorate([ + observable + ], Picker.prototype, "showNoOptions", void 0); + __decorate([ + observable + ], Picker.prototype, "menuConfig", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js + var init_picker_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js + var init_picker_menu_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js + var init_picker_list_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js + var init_picker_list_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js + var init_picker2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js"() { + init_picker_template(); + init_picker(); + init_picker_menu_template(); + init_picker_menu(); + init_picker_menu_option_template(); + init_picker_menu_option(); + init_picker_list_template(); + init_picker_list(); + init_picker_list_item_template(); + init_picker_list_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js + var MenuItemRole, roleForMenuItem; + var init_menu_item_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js"() { + MenuItemRole = { + /** + * The menu item has a "menuitem" role + */ + menuitem: "menuitem", + /** + * The menu item has a "menuitemcheckbox" role + */ + menuitemcheckbox: "menuitemcheckbox", + /** + * The menu item has a "menuitemradio" role + */ + menuitemradio: "menuitemradio" + }; + roleForMenuItem = { + [MenuItemRole.menuitem]: "menuitem", + [MenuItemRole.menuitemcheckbox]: "menuitemcheckbox", + [MenuItemRole.menuitemradio]: "menuitemradio" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js + var MenuItem; + var init_menu_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_start_end(); + init_direction(); + init_apply_mixins(); + init_menu_item_options(); + MenuItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = MenuItemRole.menuitem; + this.hasSubmenu = false; + this.currentDirection = Direction.ltr; + this.focusSubmenuOnLoad = false; + this.handleMenuItemKeyDown = (e) => { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.invoke(); + return false; + case keyArrowRight: + this.expandAndFocus(); + return false; + case keyArrowLeft: + if (this.expanded) { + this.expanded = false; + this.focus(); + return false; + } + } + return true; + }; + this.handleMenuItemClick = (e) => { + if (e.defaultPrevented || this.disabled) { + return false; + } + this.invoke(); + return false; + }; + this.submenuLoaded = () => { + if (!this.focusSubmenuOnLoad) { + return; + } + this.focusSubmenuOnLoad = false; + if (this.hasSubmenu) { + this.submenu.focus(); + this.setAttribute("tabindex", "-1"); + } + }; + this.handleMouseOver = (e) => { + if (this.disabled || !this.hasSubmenu || this.expanded) { + return false; + } + this.expanded = true; + return false; + }; + this.handleMouseOut = (e) => { + if (!this.expanded || this.contains(document.activeElement)) { + return false; + } + this.expanded = false; + return false; + }; + this.expandAndFocus = () => { + if (!this.hasSubmenu) { + return; + } + this.focusSubmenuOnLoad = true; + this.expanded = true; + }; + this.invoke = () => { + if (this.disabled) { + return; + } + switch (this.role) { + case MenuItemRole.menuitemcheckbox: + this.checked = !this.checked; + break; + case MenuItemRole.menuitem: + this.updateSubmenu(); + if (this.hasSubmenu) { + this.expandAndFocus(); + } else { + this.$emit("change"); + } + break; + case MenuItemRole.menuitemradio: + if (!this.checked) { + this.checked = true; + } + break; + } + }; + this.updateSubmenu = () => { + this.submenu = this.domChildren().find((element) => { + return element.getAttribute("role") === "menu"; + }); + this.hasSubmenu = this.submenu === void 0 ? false : true; + }; + } + expandedChanged(oldValue) { + if (this.$fastController.isConnected) { + if (this.submenu === void 0) { + return; + } + if (this.expanded === false) { + this.submenu.collapseExpandedItem(); + } else { + this.currentDirection = getDirection(this); + } + this.$emit("expanded-change", this, { bubbles: false }); + } + } + checkedChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.$emit("change"); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.updateSubmenu(); + }); + if (!this.startColumnCount) { + this.startColumnCount = 1; + } + this.observer = new MutationObserver(this.updateSubmenu); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.submenu = void 0; + if (this.observer !== void 0) { + this.observer.disconnect(); + this.observer = void 0; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "disabled", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "expanded", void 0); + __decorate([ + observable + ], MenuItem.prototype, "startColumnCount", void 0); + __decorate([ + attr + ], MenuItem.prototype, "role", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "checked", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenuRegion", void 0); + __decorate([ + observable + ], MenuItem.prototype, "hasSubmenu", void 0); + __decorate([ + observable + ], MenuItem.prototype, "currentDirection", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenu", void 0); + applyMixins(MenuItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js + var init_menu_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js + var init_menu_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js"() { + init_menu_item_template(); + init_menu_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js + var init_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js + var Menu; + var init_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_menu_item2(); + init_foundation_element(); + Menu = class _Menu extends FoundationElement { + constructor() { + super(...arguments); + this.expandedItem = null; + this.focusIndex = -1; + this.isNestedMenu = () => { + return this.parentElement !== null && isHTMLElement(this.parentElement) && this.parentElement.getAttribute("role") === "menuitem"; + }; + this.handleFocusOut = (e) => { + if (!this.contains(e.relatedTarget) && this.menuItems !== void 0) { + this.collapseExpandedItem(); + const focusIndex = this.menuItems.findIndex(this.isFocusableElement); + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.menuItems[focusIndex].setAttribute("tabindex", "0"); + this.focusIndex = focusIndex; + } + }; + this.handleItemFocus = (e) => { + const targetItem = e.target; + if (this.menuItems !== void 0 && targetItem !== this.menuItems[this.focusIndex]) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.focusIndex = this.menuItems.indexOf(targetItem); + targetItem.setAttribute("tabindex", "0"); + } + }; + this.handleExpandedChanged = (e) => { + if (e.defaultPrevented || e.target === null || this.menuItems === void 0 || this.menuItems.indexOf(e.target) < 0) { + return; + } + e.preventDefault(); + const changedItem = e.target; + if (this.expandedItem !== null && changedItem === this.expandedItem && changedItem.expanded === false) { + this.expandedItem = null; + return; + } + if (changedItem.expanded) { + if (this.expandedItem !== null && this.expandedItem !== changedItem) { + this.expandedItem.expanded = false; + } + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.expandedItem = changedItem; + this.focusIndex = this.menuItems.indexOf(changedItem); + changedItem.setAttribute("tabindex", "0"); + } + }; + this.removeItemListeners = () => { + if (this.menuItems !== void 0) { + this.menuItems.forEach((item) => { + item.removeEventListener("expanded-change", this.handleExpandedChanged); + item.removeEventListener("focus", this.handleItemFocus); + }); + } + }; + this.setItems = () => { + const newItems = this.domChildren(); + this.removeItemListeners(); + this.menuItems = newItems; + const menuItems = this.menuItems.filter(this.isMenuItemElement); + if (menuItems.length) { + this.focusIndex = 0; + } + function elementIndent(el2) { + const role = el2.getAttribute("role"); + const startSlot = el2.querySelector("[slot=start]"); + if (role !== MenuItemRole.menuitem && startSlot === null) { + return 1; + } else if (role === MenuItemRole.menuitem && startSlot !== null) { + return 1; + } else if (role !== MenuItemRole.menuitem && startSlot !== null) { + return 2; + } else { + return 0; + } + } + const indent = menuItems.reduce((accum, current) => { + const elementValue = elementIndent(current); + return accum > elementValue ? accum : elementValue; + }, 0); + menuItems.forEach((item, index) => { + item.setAttribute("tabindex", index === 0 ? "0" : "-1"); + item.addEventListener("expanded-change", this.handleExpandedChanged); + item.addEventListener("focus", this.handleItemFocus); + if (item instanceof MenuItem || "startColumnCount" in item) { + item.startColumnCount = indent; + } + }); + }; + this.changeHandler = (e) => { + if (this.menuItems === void 0) { + return; + } + const changedMenuItem = e.target; + const changeItemIndex = this.menuItems.indexOf(changedMenuItem); + if (changeItemIndex === -1) { + return; + } + if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked === true) { + for (let i = changeItemIndex - 1; i >= 0; --i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + const maxIndex = this.menuItems.length - 1; + for (let i = changeItemIndex + 1; i <= maxIndex; ++i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + } + }; + this.isMenuItemElement = (el2) => { + return isHTMLElement(el2) && _Menu.focusableElementRoles.hasOwnProperty(el2.getAttribute("role")); + }; + this.isFocusableElement = (el2) => { + return this.isMenuItemElement(el2); + }; + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.menuItems !== void 0) { + this.setItems(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.setItems(); + }); + this.addEventListener("change", this.changeHandler); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeItemListeners(); + this.menuItems = void 0; + this.removeEventListener("change", this.changeHandler); + } + /** + * Focuses the first item in the menu. + * + * @public + */ + focus() { + this.setFocus(0, 1); + } + /** + * Collapses any expanded menu items. + * + * @public + */ + collapseExpandedItem() { + if (this.expandedItem !== null) { + this.expandedItem.expanded = false; + this.expandedItem = null; + } + } + /** + * @internal + */ + handleMenuKeyDown(e) { + if (e.defaultPrevented || this.menuItems === void 0) { + return; + } + switch (e.key) { + case keyArrowDown: + this.setFocus(this.focusIndex + 1, 1); + return; + case keyArrowUp: + this.setFocus(this.focusIndex - 1, -1); + return; + case keyEnd: + this.setFocus(this.menuItems.length - 1, -1); + return; + case keyHome: + this.setFocus(0, 1); + return; + default: + return true; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + setFocus(focusIndex, adjustment) { + if (this.menuItems === void 0) { + return; + } + while (focusIndex >= 0 && focusIndex < this.menuItems.length) { + const child = this.menuItems[focusIndex]; + if (this.isFocusableElement(child)) { + if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + } + this.focusIndex = focusIndex; + child.setAttribute("tabindex", "0"); + child.focus(); + break; + } + focusIndex += adjustment; + } + } + }; + Menu.focusableElementRoles = roleForMenuItem; + __decorate([ + observable + ], Menu.prototype, "items", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js + var init_menu2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js"() { + init_menu_template(); + init_menu(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js + var init_number_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js + var _TextField, FormAssociatedTextField; + var init_text_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextField = class extends FoundationElement { + }; + FormAssociatedTextField = class extends FormAssociated(_TextField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js + var TextFieldType; + var init_text_field_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js"() { + TextFieldType = { + /** + * An email TextField + */ + email: "email", + /** + * A password TextField + */ + password: "password", + /** + * A telephone TextField + */ + tel: "tel", + /** + * A text TextField + */ + text: "text", + /** + * A URL TextField + */ + url: "url" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js + var TextField, DelegatesARIATextbox; + var init_text_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_text_field_form_associated(); + init_text_field_options(); + TextField = class extends FormAssociatedTextField { + constructor() { + super(...arguments); + this.type = TextFieldType.text; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + typeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + this.validate(); + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the text field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], TextField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "autofocus", void 0); + __decorate([ + attr + ], TextField.prototype, "placeholder", void 0); + __decorate([ + attr + ], TextField.prototype, "type", void 0); + __decorate([ + attr + ], TextField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "minlength", void 0); + __decorate([ + attr + ], TextField.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextField.prototype, "defaultSlottedNodes", void 0); + DelegatesARIATextbox = class { + }; + applyMixins(DelegatesARIATextbox, ARIAGlobalStatesAndProperties); + applyMixins(TextField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js + var _NumberField, FormAssociatedNumberField; + var init_number_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _NumberField = class extends FoundationElement { + }; + FormAssociatedNumberField = class extends FormAssociated(_NumberField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js + var NumberField; + var init_number_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_text_field(); + init_number_field_form_associated(); + NumberField = class extends FormAssociatedNumberField { + constructor() { + super(...arguments); + this.hideStep = false; + this.step = 1; + this.isUserInput = false; + } + /** + * Ensures that the max is greater than the min and that the value + * is less than the max + * @param previous - the previous max value + * @param next - updated max value + * + * @internal + */ + maxChanged(previous, next) { + var _a; + this.max = Math.max(next, (_a = this.min) !== null && _a !== void 0 ? _a : next); + const min = Math.min(this.min, this.max); + if (this.min !== void 0 && this.min !== min) { + this.min = min; + } + this.value = this.getValidValue(this.value); + } + /** + * Ensures that the min is less than the max and that the value + * is greater than the min + * @param previous - previous min value + * @param next - updated min value + * + * @internal + */ + minChanged(previous, next) { + var _a; + this.min = Math.min(next, (_a = this.max) !== null && _a !== void 0 ? _a : next); + const max = Math.max(this.min, this.max); + if (this.max !== void 0 && this.max !== max) { + this.max = max; + } + this.value = this.getValidValue(this.value); + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * Validates that the value is a number between the min and max + * @param previous - previous stored value + * @param next - value being updated + * @param updateControl - should the text field be updated with value, defaults to true + * @internal + */ + valueChanged(previous, next) { + this.value = this.getValidValue(next); + if (next !== this.value) { + return; + } + if (this.control && !this.isUserInput) { + this.control.value = this.value; + } + super.valueChanged(previous, this.value); + if (previous !== void 0 && !this.isUserInput) { + this.$emit("input"); + this.$emit("change"); + } + this.isUserInput = false; + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Sets the internal value to a valid number between the min and max properties + * @param value - user input + * + * @internal + */ + getValidValue(value) { + var _a, _b; + let validValue = parseFloat(parseFloat(value).toPrecision(12)); + if (isNaN(validValue)) { + validValue = ""; + } else { + validValue = Math.min(validValue, (_a = this.max) !== null && _a !== void 0 ? _a : validValue); + validValue = Math.max(validValue, (_b = this.min) !== null && _b !== void 0 ? _b : validValue).toString(); + } + return validValue; + } + /** + * Increments the value using the step value + * + * @public + */ + stepUp() { + const value = parseFloat(this.value); + const stepUpValue = !isNaN(value) ? value + this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? this.step : 0; + this.value = stepUpValue.toString(); + } + /** + * Decrements the value using the step value + * + * @public + */ + stepDown() { + const value = parseFloat(this.value); + const stepDownValue = !isNaN(value) ? value - this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? 0 - this.step : 0; + this.value = stepDownValue.toString(); + } + /** + * Sets up the initial state of the number field + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "number"); + this.validate(); + this.control.value = this.value; + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the number field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, ""); + this.isUserInput = true; + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** + * Handles the internal control's `keydown` event + * @internal + */ + handleKeyDown(e) { + const key = e.key; + switch (key) { + case keyArrowUp: + this.stepUp(); + return false; + case keyArrowDown: + this.stepDown(); + return false; + } + return true; + } + /** + * Handles populating the input field with a validated value when + * leaving the input field. + * @internal + */ + handleBlur() { + this.control.value = this.value; + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], NumberField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], NumberField.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "hide-step", mode: "boolean" }) + ], NumberField.prototype, "hideStep", void 0); + __decorate([ + attr + ], NumberField.prototype, "placeholder", void 0); + __decorate([ + attr + ], NumberField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "minlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "size", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "step", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "min", void 0); + __decorate([ + observable + ], NumberField.prototype, "defaultSlottedNodes", void 0); + applyMixins(NumberField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js + var init_number_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js"() { + init_number_field_template(); + init_number_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js + var progressSegments, progressRingTemplate; + var init_progress_ring_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js"() { + init_esm(); + progressSegments = 44; + progressRingTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js + var init_progress_ring = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js"() { + init_progress_ring_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js + var BaseProgress; + var init_base_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + BaseProgress = class extends FoundationElement { + constructor() { + super(...arguments); + this.percentComplete = 0; + } + valueChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + minChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + maxChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updatePercentComplete(); + } + updatePercentComplete() { + const min = typeof this.min === "number" ? this.min : 0; + const max = typeof this.max === "number" ? this.max : 100; + const value = typeof this.value === "number" ? this.value : 0; + const range2 = max - min; + this.percentComplete = range2 === 0 ? 0 : Math.fround((value - min) / range2 * 100); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "value", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "max", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], BaseProgress.prototype, "paused", void 0); + __decorate([ + observable + ], BaseProgress.prototype, "percentComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js + var init_progress_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js + var init_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js"() { + init_base_progress(); + init_progress_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js + var radioGroupTemplate; + var init_radio_group_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js"() { + init_esm(); + init_dist2(); + radioGroupTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js + var RadioGroup; + var init_radio_group = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + RadioGroup = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = Orientation.horizontal; + this.radioChangeHandler = (e) => { + const changedRadio = e.target; + if (changedRadio.checked) { + this.slottedRadioButtons.forEach((radio) => { + if (radio !== changedRadio) { + radio.checked = false; + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + } + }); + this.selectedRadio = changedRadio; + this.value = changedRadio.value; + changedRadio.setAttribute("tabindex", "0"); + this.focusedRadio = changedRadio; + } + e.stopPropagation(); + }; + this.moveToRadioByIndex = (group, index) => { + const radio = group[index]; + if (!this.isInsideToolbar) { + radio.setAttribute("tabindex", "0"); + if (radio.readOnly) { + this.slottedRadioButtons.forEach((nextRadio) => { + if (nextRadio !== radio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + radio.checked = true; + this.selectedRadio = radio; + } + } + this.focusedRadio = radio; + radio.focus(); + }; + this.moveRightOffGroup = () => { + var _a; + (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.moveLeftOffGroup = () => { + var _a; + (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.focusOutHandler = (e) => { + const group = this.slottedRadioButtons; + const radio = e.target; + const index = radio !== null ? group.indexOf(radio) : 0; + const focusedIndex = this.focusedRadio ? group.indexOf(this.focusedRadio) : -1; + if (focusedIndex === 0 && index === focusedIndex || focusedIndex === group.length - 1 && focusedIndex === index) { + if (!this.selectedRadio) { + this.focusedRadio = group[0]; + this.focusedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.focusedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + this.focusedRadio = this.selectedRadio; + if (!this.isInsideFoundationToolbar) { + this.selectedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.selectedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } + } + } + return true; + }; + this.clickHandler = (e) => { + const radio = e.target; + if (radio) { + const group = this.slottedRadioButtons; + if (radio.checked || group.indexOf(radio) === 0) { + radio.setAttribute("tabindex", "0"); + this.selectedRadio = radio; + } else { + radio.setAttribute("tabindex", "-1"); + this.selectedRadio = null; + } + this.focusedRadio = radio; + } + e.preventDefault(); + }; + this.shouldMoveOffGroupToTheRight = (index, group, key) => { + return index === group.length && this.isInsideToolbar && key === keyArrowRight; + }; + this.shouldMoveOffGroupToTheLeft = (group, key) => { + const index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + return index < 0 && this.isInsideToolbar && key === keyArrowLeft; + }; + this.checkFocusedRadio = () => { + if (this.focusedRadio !== null && !this.focusedRadio.readOnly && !this.focusedRadio.checked) { + this.focusedRadio.checked = true; + this.focusedRadio.setAttribute("tabindex", "0"); + this.focusedRadio.focus(); + this.selectedRadio = this.focusedRadio; + } + }; + this.moveRight = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1; + if (this.shouldMoveOffGroupToTheRight(index, group, e.key)) { + this.moveRightOffGroup(); + return; + } else if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index + 1 >= group.length) { + if (this.isInsideToolbar) { + break; + } else { + index = 0; + } + } else { + index += 1; + } + } + }; + this.moveLeft = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + if (this.shouldMoveOffGroupToTheLeft(group, e.key)) { + this.moveLeftOffGroup(); + return; + } + while (index >= 0 && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.keydownHandler = (e) => { + const key = e.key; + if (key in ArrowKeys && this.isInsideFoundationToolbar) { + return true; + } + switch (key) { + case keyEnter: { + this.checkFocusedRadio(); + break; + } + case keyArrowRight: + case keyArrowDown: { + if (this.direction === Direction.ltr) { + this.moveRight(e); + } else { + this.moveLeft(e); + } + break; + } + case keyArrowLeft: + case keyArrowUp: { + if (this.direction === Direction.ltr) { + this.moveLeft(e); + } else { + this.moveRight(e); + } + break; + } + default: { + return true; + } + } + }; + } + readOnlyChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.readOnly) { + radio.readOnly = true; + } else { + radio.readOnly = false; + } + }); + } + } + disabledChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.disabled) { + radio.disabled = true; + } else { + radio.disabled = false; + } + }); + } + } + nameChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + radio.setAttribute("name", this.name); + }); + } + } + valueChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + if (radio.value === this.value) { + radio.checked = true; + this.selectedRadio = radio; + } + }); + } + this.$emit("change"); + } + slottedRadioButtonsChanged(oldValue, newValue) { + if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) { + this.setupRadioButtons(); + } + } + get parentToolbar() { + return this.closest('[role="toolbar"]'); + } + get isInsideToolbar() { + var _a; + return (_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false; + } + get isInsideFoundationToolbar() { + var _a; + return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + this.setupRadioButtons(); + } + disconnectedCallback() { + this.slottedRadioButtons.forEach((radio) => { + radio.removeEventListener("change", this.radioChangeHandler); + }); + } + setupRadioButtons() { + const checkedRadios = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0; + if (numberOfCheckedRadios > 1) { + const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1]; + lastCheckedRadio.checked = true; + } + let foundMatchingVal = false; + this.slottedRadioButtons.forEach((radio) => { + if (this.name !== void 0) { + radio.setAttribute("name", this.name); + } + if (this.disabled) { + radio.disabled = true; + } + if (this.readOnly) { + radio.readOnly = true; + } + if (this.value && this.value === radio.value) { + this.selectedRadio = radio; + this.focusedRadio = radio; + radio.checked = true; + radio.setAttribute("tabindex", "0"); + foundMatchingVal = true; + } else { + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + radio.checked = false; + } + radio.addEventListener("change", this.radioChangeHandler); + }); + if (this.value === void 0 && this.slottedRadioButtons.length > 0) { + const checkedRadios2 = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios2 = checkedRadios2 !== null ? checkedRadios2.length : 0; + if (numberOfCheckedRadios2 > 0 && !foundMatchingVal) { + const lastCheckedRadio = checkedRadios2[numberOfCheckedRadios2 - 1]; + lastCheckedRadio.checked = true; + this.focusedRadio = lastCheckedRadio; + lastCheckedRadio.setAttribute("tabindex", "0"); + } else { + this.slottedRadioButtons[0].setAttribute("tabindex", "0"); + this.focusedRadio = this.slottedRadioButtons[0]; + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], RadioGroup.prototype, "readOnly", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], RadioGroup.prototype, "disabled", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "name", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "value", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "orientation", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "childItems", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "slottedRadioButtons", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js + var init_radio_group2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js"() { + init_radio_group_template(); + init_radio_group(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js + var radioTemplate; + var init_radio_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js"() { + init_esm(); + radioTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js + var _Radio, FormAssociatedRadio; + var init_radio_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Radio = class extends FoundationElement { + }; + FormAssociatedRadio = class extends CheckableFormAssociated(_Radio) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js + var Radio; + var init_radio = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_radio_form_associated(); + Radio = class extends FormAssociatedRadio { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + switch (e.key) { + case keySpace: + if (!this.checked && !this.readOnly) { + this.checked = true; + } + return; + } + return true; + }; + this.proxy.setAttribute("type", "radio"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * @internal + */ + defaultCheckedChanged() { + var _a; + if (this.$fastController.isConnected && !this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_a = this.defaultChecked) !== null && _a !== void 0 ? _a : false; + this.dirtyChecked = false; + } + } + } + /** + * @internal + */ + connectedCallback() { + var _a, _b; + super.connectedCallback(); + this.validate(); + if (((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("role")) !== "radiogroup" && this.getAttribute("tabindex") === null) { + if (!this.disabled) { + this.setAttribute("tabindex", "0"); + } + } + if (this.checkedAttribute) { + if (!this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_b = this.defaultChecked) !== null && _b !== void 0 ? _b : false; + this.dirtyChecked = false; + } + } + } + } + isInsideRadioGroup() { + const parent = this.closest("[role=radiogroup]"); + return parent !== null; + } + /** + * @internal + */ + clickHandler(e) { + if (!this.disabled && !this.readOnly && !this.checked) { + this.checked = true; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Radio.prototype, "readOnly", void 0); + __decorate([ + observable + ], Radio.prototype, "name", void 0); + __decorate([ + observable + ], Radio.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js + var init_radio2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js"() { + init_radio_template(); + init_radio(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js + var HorizontalScroll; + var init_horizontal_scroll = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + HorizontalScroll = class extends FoundationElement { + constructor() { + super(...arguments); + this.framesPerSecond = 60; + this.updatingItems = false; + this.speed = 600; + this.easing = "ease-in-out"; + this.flippersHiddenFromAT = false; + this.scrolling = false; + this.resizeDetector = null; + } + /** + * The calculated duration for a frame. + * + * @internal + */ + get frameTime() { + return 1e3 / this.framesPerSecond; + } + /** + * Firing scrollstart and scrollend events + * @internal + */ + scrollingChanged(prev, next) { + if (this.scrollContainer) { + const event = this.scrolling == true ? "scrollstart" : "scrollend"; + this.$emit(event, this.scrollContainer.scrollLeft); + } + } + /** + * In RTL mode + * @internal + */ + get isRtl() { + return this.scrollItems.length > 1 && this.scrollItems[0].offsetLeft > this.scrollItems[1].offsetLeft; + } + connectedCallback() { + super.connectedCallback(); + this.initializeResizeDetector(); + } + disconnectedCallback() { + this.disconnectResizeDetector(); + super.disconnectedCallback(); + } + /** + * Updates scroll stops and flippers when scroll items change + * @param previous - current scroll items + * @param next - new updated scroll items + * @public + */ + scrollItemsChanged(previous, next) { + if (next && !this.updatingItems) { + DOM.queueUpdate(() => this.setStops()); + } + } + /** + * destroys the instance's resize observer + * @internal + */ + disconnectResizeDetector() { + if (this.resizeDetector) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + * @internal + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.resized.bind(this)); + this.resizeDetector.observe(this); + } + /** + * Looks for slots and uses child nodes instead + * @internal + */ + updateScrollStops() { + this.updatingItems = true; + const updatedItems = this.scrollItems.reduce((scrollItems, scrollItem) => { + if (scrollItem instanceof HTMLSlotElement) { + return scrollItems.concat(scrollItem.assignedElements()); + } + scrollItems.push(scrollItem); + return scrollItems; + }, []); + this.scrollItems = updatedItems; + this.updatingItems = false; + } + /** + * Finds all of the scroll stops between elements + * @internal + */ + setStops() { + this.updateScrollStops(); + const { scrollContainer: container } = this; + const { scrollLeft } = container; + const { width: containerWidth, left: containerLeft } = container.getBoundingClientRect(); + this.width = containerWidth; + let lastStop = 0; + let stops = this.scrollItems.map((item, index) => { + const { left, width } = item.getBoundingClientRect(); + const leftPosition = Math.round(left + scrollLeft - containerLeft); + const right = Math.round(leftPosition + width); + if (this.isRtl) { + return -right; + } + lastStop = right; + return index === 0 ? 0 : leftPosition; + }).concat(lastStop); + stops = this.fixScrollMisalign(stops); + stops.sort((a, b) => Math.abs(a) - Math.abs(b)); + this.scrollStops = stops; + this.setFlippers(); + } + /** + * Checks to see if the stops are returning values + * otherwise it will try to reinitialize them + * + * @returns boolean indicating that current scrollStops are valid non-zero values + * @internal + */ + validateStops(reinit = true) { + const hasStops = () => !!this.scrollStops.find((stop) => stop > 0); + if (!hasStops() && reinit) { + this.setStops(); + } + return hasStops(); + } + /** + * + */ + fixScrollMisalign(stops) { + if (this.isRtl && stops.some((stop) => stop > 0)) { + stops.sort((a, b) => b - a); + const offset = stops[0]; + stops = stops.map((stop) => stop - offset); + } + return stops; + } + /** + * Sets the controls view if enabled + * @internal + */ + setFlippers() { + var _a, _b; + const position = this.scrollContainer.scrollLeft; + (_a = this.previousFlipperContainer) === null || _a === void 0 ? void 0 : _a.classList.toggle("disabled", position === 0); + if (this.scrollStops) { + const lastStop = Math.abs(this.scrollStops[this.scrollStops.length - 1]); + (_b = this.nextFlipperContainer) === null || _b === void 0 ? void 0 : _b.classList.toggle("disabled", this.validateStops(false) && Math.abs(position) + this.width >= lastStop); + } + } + /** + * Function that can scroll an item into view. + * @param item - An item index, a scroll item or a child of one of the scroll items + * @param padding - Padding of the viewport where the active item shouldn't be + * @param rightPadding - Optional right padding. Uses the padding if not defined + * + * @public + */ + scrollInView(item, padding = 0, rightPadding) { + var _a; + if (typeof item !== "number" && item) { + item = this.scrollItems.findIndex((scrollItem) => scrollItem === item || scrollItem.contains(item)); + } + if (item !== void 0) { + rightPadding = rightPadding !== null && rightPadding !== void 0 ? rightPadding : padding; + const { scrollContainer: container, scrollStops, scrollItems: items } = this; + const { scrollLeft } = this.scrollContainer; + const { width: containerWidth } = container.getBoundingClientRect(); + const itemStart = scrollStops[item]; + const { width } = items[item].getBoundingClientRect(); + const itemEnd = itemStart + width; + const isBefore = scrollLeft + padding > itemStart; + if (isBefore || scrollLeft + containerWidth - rightPadding < itemEnd) { + const stops = [...scrollStops].sort((a, b) => isBefore ? b - a : a - b); + const scrollTo = (_a = stops.find((position) => isBefore ? position + padding < itemStart : position + containerWidth - (rightPadding !== null && rightPadding !== void 0 ? rightPadding : 0) > itemEnd)) !== null && _a !== void 0 ? _a : 0; + this.scrollToPosition(scrollTo); + } + } + } + /** + * Lets the user arrow left and right through the horizontal scroll + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + this.scrollToPrevious(); + break; + case "ArrowRight": + this.scrollToNext(); + break; + } + } + /** + * Scrolls items to the left + * @public + */ + scrollToPrevious() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop, index) => stop >= scrollPosition && (this.isRtl || index === this.scrollStops.length - 1 || this.scrollStops[index + 1] > scrollPosition)); + const right = Math.abs(this.scrollStops[current + 1]); + let nextIndex = this.scrollStops.findIndex((stop) => Math.abs(stop) + this.width > right); + if (nextIndex >= current || nextIndex === -1) { + nextIndex = current > 0 ? current - 1 : 0; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Scrolls items to the right + * @public + */ + scrollToNext() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop) => Math.abs(stop) >= Math.abs(scrollPosition)); + const outOfView = this.scrollStops.findIndex((stop) => Math.abs(scrollPosition) + this.width <= Math.abs(stop)); + let nextIndex = current; + if (outOfView > current + 2) { + nextIndex = outOfView - 2; + } else if (current < this.scrollStops.length - 2) { + nextIndex = current + 1; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Handles scrolling with easing + * @param position - starting position + * @param newPosition - position to scroll to + * @public + */ + scrollToPosition(newPosition, position = this.scrollContainer.scrollLeft) { + var _a; + if (this.scrolling) { + return; + } + this.scrolling = true; + const seconds = (_a = this.duration) !== null && _a !== void 0 ? _a : `${Math.abs(newPosition - position) / this.speed}s`; + this.content.style.setProperty("transition-duration", seconds); + const computedDuration = parseFloat(getComputedStyle(this.content).getPropertyValue("transition-duration")); + const transitionendHandler = (e) => { + if (e && e.target !== e.currentTarget) { + return; + } + this.content.style.setProperty("transition-duration", "0s"); + this.content.style.removeProperty("transform"); + this.scrollContainer.style.setProperty("scroll-behavior", "auto"); + this.scrollContainer.scrollLeft = newPosition; + this.setFlippers(); + this.content.removeEventListener("transitionend", transitionendHandler); + this.scrolling = false; + }; + if (computedDuration === 0) { + transitionendHandler(); + return; + } + this.content.addEventListener("transitionend", transitionendHandler); + const maxScrollValue = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth; + let transitionStop = this.scrollContainer.scrollLeft - Math.min(newPosition, maxScrollValue); + if (this.isRtl) { + transitionStop = this.scrollContainer.scrollLeft + Math.min(Math.abs(newPosition), maxScrollValue); + } + this.content.style.setProperty("transition-property", "transform"); + this.content.style.setProperty("transition-timing-function", this.easing); + this.content.style.setProperty("transform", `translateX(${transitionStop}px)`); + } + /** + * Monitors resize event on the horizontal-scroll element + * @public + */ + resized() { + if (this.resizeTimeout) { + this.resizeTimeout = clearTimeout(this.resizeTimeout); + } + this.resizeTimeout = setTimeout(() => { + this.width = this.scrollContainer.offsetWidth; + this.setFlippers(); + }, this.frameTime); + } + /** + * Monitors scrolled event on the content container + * @public + */ + scrolled() { + if (this.scrollTimeout) { + this.scrollTimeout = clearTimeout(this.scrollTimeout); + } + this.scrollTimeout = setTimeout(() => { + this.setFlippers(); + }, this.frameTime); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], HorizontalScroll.prototype, "speed", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "duration", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "easing", void 0); + __decorate([ + attr({ attribute: "flippers-hidden-from-at", converter: booleanConverter }) + ], HorizontalScroll.prototype, "flippersHiddenFromAT", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrolling", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrollItems", void 0); + __decorate([ + attr({ attribute: "view" }) + ], HorizontalScroll.prototype, "view", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js + var init_horizontal_scroll_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js + var init_horizontal_scroll2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js"() { + init_horizontal_scroll(); + init_horizontal_scroll_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js + function whitespaceFilter(value, index, array) { + return value.nodeType !== Node.TEXT_NODE ? true : typeof value.nodeValue === "string" && !!value.nodeValue.trim().length; + } + var init_whitespace_filter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js + var init_search_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js + var _Search, FormAssociatedSearch; + var init_search_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Search = class extends FoundationElement { + }; + FormAssociatedSearch = class extends FormAssociated(_Search) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.js + var Search, DelegatesARIASearch; + var init_search = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_search_form_associated(); + Search = class extends FormAssociatedSearch { + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Handles the control's clear value event + * @public + */ + handleClearInput() { + this.value = ""; + this.control.focus(); + this.handleChange(); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Search.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "autofocus", void 0); + __decorate([ + attr + ], Search.prototype, "placeholder", void 0); + __decorate([ + attr + ], Search.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "minlength", void 0); + __decorate([ + attr + ], Search.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "spellcheck", void 0); + __decorate([ + observable + ], Search.prototype, "defaultSlottedNodes", void 0); + DelegatesARIASearch = class { + }; + applyMixins(DelegatesARIASearch, ARIAGlobalStatesAndProperties); + applyMixins(Search, StartEnd, DelegatesARIASearch); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/index.js + var init_search2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/index.js"() { + init_search_template(); + init_search(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js + var _Select, FormAssociatedSelect; + var init_select_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js"() { + init_listbox_element(); + init_form_associated(); + _Select = class extends ListboxElement { + }; + FormAssociatedSelect = class extends FormAssociated(_Select) { + constructor() { + super(...arguments); + this.proxy = document.createElement("select"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.js + var Select, DelegatesARIASelect; + var init_select = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_apply_mixins(); + init_select_form_associated(); + init_select_options(); + Select = class extends FormAssociatedSelect { + constructor() { + super(...arguments); + this.open = false; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + } + /** + * Sets focus and synchronizes ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged(prev, next) { + if (!this.collapsible) { + return; + } + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + this.indexWhenOpened = this.selectedIndex; + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The component is collapsible when in single-selection mode with no size attribute. + * + * @internal + */ + get collapsible() { + return !(this.multiple || typeof this.size === "number"); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c, _d, _e, _f, _g; + const prev = `${this._value}`; + if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.length) { + const selectedIndex = this._options.findIndex((el2) => el2.value === next); + const prevSelectedValue = (_c = (_b = this._options[this.selectedIndex]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null; + const nextSelectedValue = (_e = (_d = this._options[selectedIndex]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : null; + if (selectedIndex === -1 || prevSelectedValue !== nextSelectedValue) { + next = ""; + this.selectedIndex = selectedIndex; + } + next = (_g = (_f = this.firstSelectedOption) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + this.updateDisplayValue(); + } + } + /** + * Sets the value and display value to match the first selected option. + * + * @param shouldEmit - if true, the input and change events will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a, _b; + if (this.$fastController.isConnected) { + this.value = (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : ""; + } + if (shouldEmit) { + this.$emit("input"); + this.$emit("change", this, { + bubbles: true, + composed: void 0 + }); + } + } + /** + * Updates the proxy value when the selected index changes. + * + * @param prev - the previous selected index + * @param next - the next selected index + * + * @internal + */ + selectedIndexChanged(prev, next) { + super.selectedIndexChanged(prev, next); + this.updateValue(); + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * The value displayed on the button. + * + * @public + */ + get displayValue() { + var _a, _b; + Observable.track(this, "displayValue"); + return (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : ""; + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + this.setProxyOptions(); + super.setDefaultSelectedOption(); + if (this.selectedIndex === -1) { + this.selectedIndex = 0; + } + } + /** + * Handle opening and closing the listbox when the select is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + if (this.disabled) { + return; + } + if (this.open) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && captured.disabled) { + return; + } + } + super.clickHandler(e); + this.open = this.collapsible && !this.open; + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + return true; + } + /** + * Handles focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + var _a; + super.focusoutHandler(e); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.includes(focusTarget))) { + this.open = false; + if (this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + } + } + /** + * Updates the value when an option's value changes. + * + * @param source - the source object + * @param propertyName - the property to evaluate + * + * @internal + * @override + */ + handleChange(source, propertyName) { + super.handleChange(source, propertyName); + if (propertyName === "value") { + this.updateValue(); + } + } + /** + * Synchronize the form-associated proxy and updates the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "value"); + }); + super.slottedOptionsChanged(prev, next); + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.subscribe(this, "value"); + }); + this.setProxyOptions(); + this.updateValue(); + } + /** + * Prevents focus when size is set and a scrollbar is clicked. + * + * @param e - the mouse event object + * + * @override + * @internal + */ + mousedownHandler(e) { + var _a; + if (e.offsetX >= 0 && e.offsetX <= ((_a = this.listbox) === null || _a === void 0 ? void 0 : _a.scrollWidth)) { + return super.mousedownHandler(e); + } + return this.collapsible; + } + /** + * Sets the multiple property on the proxy element. + * + * @param prev - the previous multiple value + * @param next - the current multiple value + */ + multipleChanged(prev, next) { + super.multipleChanged(prev, next); + if (this.proxy) { + this.proxy.multiple = next; + } + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @override + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + super.selectedOptionsChanged(prev, next); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o, i) => { + var _a2; + const proxyOption = (_a2 = this.proxy) === null || _a2 === void 0 ? void 0 : _a2.options.item(i); + if (proxyOption) { + proxyOption.selected = o.selected; + } + }); + } + /** + * Sets the selected index to match the first option with the selected attribute, or + * the first selectable option. + * + * @override + * @internal + */ + setDefaultSelectedOption() { + var _a; + const options = (_a = this.options) !== null && _a !== void 0 ? _a : Array.from(this.children).filter(Listbox.slottedOptionFilter); + const selectedIndex = options === null || options === void 0 ? void 0 : options.findIndex((el2) => el2.hasAttribute("selected") || el2.selected || el2.value === this.value); + if (selectedIndex !== -1) { + this.selectedIndex = selectedIndex; + return; + } + this.selectedIndex = 0; + } + /** + * Resets and fills the proxy to match the component's options. + * + * @internal + */ + setProxyOptions() { + if (this.proxy instanceof HTMLSelectElement && this.options) { + this.proxy.options.length = 0; + this.options.forEach((option) => { + const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null); + if (proxyOption) { + this.proxy.options.add(proxyOption); + } + }); + } + } + /** + * Handle keyboard interaction for the select. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + super.keydownHandler(e); + const key = e.key || e.key.charCodeAt(0); + switch (key) { + case keySpace: { + e.preventDefault(); + if (this.collapsible && this.typeAheadExpired) { + this.open = !this.open; + } + break; + } + case keyHome: + case keyEnd: { + e.preventDefault(); + break; + } + case keyEnter: { + e.preventDefault(); + this.open = !this.open; + break; + } + case keyEscape: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + break; + } + case keyTab: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + return true; + } + } + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + this.indexWhenOpened = this.selectedIndex; + } + return !(key === keyArrowDown || key === keyArrowUp); + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + this.addEventListener("contentchange", this.updateDisplayValue); + } + disconnectedCallback() { + this.removeEventListener("contentchange", this.updateDisplayValue); + super.disconnectedCallback(); + } + /** + * Updates the proxy's size property when the size attribute changes. + * + * @param prev - the previous size + * @param next - the current size + * + * @override + * @internal + */ + sizeChanged(prev, next) { + super.sizeChanged(prev, next); + if (this.proxy) { + this.proxy.size = next; + } + } + /** + * + * @internal + */ + updateDisplayValue() { + if (this.collapsible) { + Observable.notify(this, "displayValue"); + } + } + }; + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Select.prototype, "open", void 0); + __decorate([ + volatile + ], Select.prototype, "collapsible", null); + __decorate([ + observable + ], Select.prototype, "control", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Select.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Select.prototype, "position", void 0); + __decorate([ + observable + ], Select.prototype, "maxHeight", void 0); + DelegatesARIASelect = class { + }; + __decorate([ + observable + ], DelegatesARIASelect.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIASelect, DelegatesARIAListbox); + applyMixins(Select, StartEnd, DelegatesARIASelect); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js + var selectTemplate; + var init_select_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js"() { + init_esm(); + init_listbox(); + init_start_end(); + selectTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/index.js + var init_select2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/index.js"() { + init_select(); + init_select_options(); + init_select_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js + var init_skeleton_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js + var Skeleton; + var init_skeleton = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Skeleton = class extends FoundationElement { + constructor() { + super(...arguments); + this.shape = "rect"; + } + }; + __decorate([ + attr + ], Skeleton.prototype, "fill", void 0); + __decorate([ + attr + ], Skeleton.prototype, "shape", void 0); + __decorate([ + attr + ], Skeleton.prototype, "pattern", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Skeleton.prototype, "shimmer", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js + var init_skeleton2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js"() { + init_skeleton_template(); + init_skeleton(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js + var init_slider_label_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js + function convertPixelToPercent(pixelPos, minPosition, maxPosition, direction) { + let pct = limit(0, 1, (pixelPos - minPosition) / (maxPosition - minPosition)); + if (direction === Direction.rtl) { + pct = 1 - pct; + } + return pct; + } + var init_slider_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js"() { + init_dist2(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js + var defaultConfig, SliderLabel; + var init_slider_label = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_slider_utilities(); + init_foundation_element(); + defaultConfig = { + min: 0, + max: 0, + direction: Direction.ltr, + orientation: Orientation.horizontal, + disabled: false + }; + SliderLabel = class extends FoundationElement { + constructor() { + super(...arguments); + this.hideMark = false; + this.sliderDirection = Direction.ltr; + this.getSliderConfiguration = () => { + if (!this.isSliderConfig(this.parentNode)) { + this.sliderDirection = defaultConfig.direction || Direction.ltr; + this.sliderOrientation = defaultConfig.orientation || Orientation.horizontal; + this.sliderMaxPosition = defaultConfig.max; + this.sliderMinPosition = defaultConfig.min; + } else { + const parentSlider = this.parentNode; + const { min, max, direction, orientation, disabled } = parentSlider; + if (disabled !== void 0) { + this.disabled = disabled; + } + this.sliderDirection = direction || Direction.ltr; + this.sliderOrientation = orientation || Orientation.horizontal; + this.sliderMaxPosition = max; + this.sliderMinPosition = min; + } + }; + this.positionAsStyle = () => { + const direction = this.sliderDirection ? this.sliderDirection : Direction.ltr; + const pct = convertPixelToPercent(Number(this.position), Number(this.sliderMinPosition), Number(this.sliderMaxPosition)); + let rightNum = Math.round((1 - pct) * 100); + let leftNum = Math.round(pct * 100); + if (Number.isNaN(leftNum) && Number.isNaN(rightNum)) { + rightNum = 50; + leftNum = 50; + } + if (this.sliderOrientation === Orientation.horizontal) { + return direction === Direction.rtl ? `right: ${leftNum}%; left: ${rightNum}%;` : `left: ${leftNum}%; right: ${rightNum}%;`; + } else { + return `top: ${leftNum}%; bottom: ${rightNum}%;`; + } + }; + } + positionChanged() { + this.positionStyle = this.positionAsStyle(); + } + /** + * @internal + */ + sliderOrientationChanged() { + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.getSliderConfiguration(); + this.positionStyle = this.positionAsStyle(); + this.notifier = Observable.getNotifier(this.parentNode); + this.notifier.subscribe(this, "orientation"); + this.notifier.subscribe(this, "direction"); + this.notifier.subscribe(this, "max"); + this.notifier.subscribe(this, "min"); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.notifier.unsubscribe(this, "orientation"); + this.notifier.unsubscribe(this, "direction"); + this.notifier.unsubscribe(this, "max"); + this.notifier.unsubscribe(this, "min"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "direction": + this.sliderDirection = source.direction; + break; + case "orientation": + this.sliderOrientation = source.orientation; + break; + case "max": + this.sliderMaxPosition = source.max; + break; + case "min": + this.sliderMinPosition = source.min; + break; + default: + break; + } + this.positionStyle = this.positionAsStyle(); + } + isSliderConfig(node) { + return node.max !== void 0 && node.min !== void 0; + } + }; + __decorate([ + observable + ], SliderLabel.prototype, "positionStyle", void 0); + __decorate([ + attr + ], SliderLabel.prototype, "position", void 0); + __decorate([ + attr({ attribute: "hide-mark", mode: "boolean" }) + ], SliderLabel.prototype, "hideMark", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], SliderLabel.prototype, "disabled", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderOrientation", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMinPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMaxPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js + var init_slider_label2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js"() { + init_slider_label_template(); + init_slider_label(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js + var init_slider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js + var _Slider, FormAssociatedSlider; + var init_slider_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Slider = class extends FoundationElement { + }; + FormAssociatedSlider = class extends FormAssociated(_Slider) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js + var SliderMode, Slider; + var init_slider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_slider_utilities(); + init_slider_form_associated(); + SliderMode = { + singleValue: "single-value" + }; + Slider = class extends FormAssociatedSlider { + constructor() { + super(...arguments); + this.direction = Direction.ltr; + this.isDragging = false; + this.trackWidth = 0; + this.trackMinWidth = 0; + this.trackHeight = 0; + this.trackLeft = 0; + this.trackMinHeight = 0; + this.valueTextFormatter = () => null; + this.min = 0; + this.max = 10; + this.step = 1; + this.orientation = Orientation.horizontal; + this.mode = SliderMode.singleValue; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + if (e.key === keyHome) { + e.preventDefault(); + this.value = `${this.min}`; + } else if (e.key === keyEnd) { + e.preventDefault(); + this.value = `${this.max}`; + } else if (!e.shiftKey) { + switch (e.key) { + case keyArrowRight: + case keyArrowUp: + e.preventDefault(); + this.increment(); + break; + case keyArrowLeft: + case keyArrowDown: + e.preventDefault(); + this.decrement(); + break; + } + } + }; + this.setupTrackConstraints = () => { + const clientRect = this.track.getBoundingClientRect(); + this.trackWidth = this.track.clientWidth; + this.trackMinWidth = this.track.clientLeft; + this.trackHeight = clientRect.bottom; + this.trackMinHeight = clientRect.top; + this.trackLeft = this.getBoundingClientRect().left; + if (this.trackWidth === 0) { + this.trackWidth = 1; + } + }; + this.setupListeners = (remove = false) => { + const eventAction = `${remove ? "remove" : "add"}EventListener`; + this[eventAction]("keydown", this.keypressHandler); + this[eventAction]("mousedown", this.handleMouseDown); + this.thumb[eventAction]("mousedown", this.handleThumbMouseDown, { + passive: true + }); + this.thumb[eventAction]("touchstart", this.handleThumbMouseDown, { + passive: true + }); + if (remove) { + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + } + }; + this.initialValue = ""; + this.handleThumbMouseDown = (event) => { + if (event) { + if (this.readOnly || this.disabled || event.defaultPrevented) { + return; + } + event.target.focus(); + } + const eventAction = `${event !== null ? "add" : "remove"}EventListener`; + window[eventAction]("mouseup", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchmove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchend", this.handleWindowMouseUp); + this.isDragging = event !== null; + }; + this.handleMouseMove = (e) => { + if (this.readOnly || this.disabled || e.defaultPrevented) { + return; + } + const sourceEvent = window.TouchEvent && e instanceof TouchEvent ? e.touches[0] : e; + const eventValue = this.orientation === Orientation.horizontal ? sourceEvent.pageX - document.documentElement.scrollLeft - this.trackLeft : sourceEvent.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(eventValue)}`; + }; + this.calculateNewValue = (rawValue) => { + const newPosition = convertPixelToPercent(rawValue, this.orientation === Orientation.horizontal ? this.trackMinWidth : this.trackMinHeight, this.orientation === Orientation.horizontal ? this.trackWidth : this.trackHeight, this.direction); + const newValue = (this.max - this.min) * newPosition + this.min; + return this.convertToConstrainedValue(newValue); + }; + this.handleWindowMouseUp = (event) => { + this.stopDragging(); + }; + this.stopDragging = () => { + this.isDragging = false; + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + }; + this.handleMouseDown = (e) => { + const eventAction = `${e !== null ? "add" : "remove"}EventListener`; + if (e === null || !this.disabled && !this.readOnly) { + window[eventAction]("mouseup", this.handleWindowMouseUp); + window.document[eventAction]("mouseleave", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove); + if (e) { + e.preventDefault(); + this.setupTrackConstraints(); + e.target.focus(); + const controlValue = this.orientation === Orientation.horizontal ? e.pageX - document.documentElement.scrollLeft - this.trackLeft : e.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(controlValue)}`; + } + } + }; + this.convertToConstrainedValue = (value) => { + if (isNaN(value)) { + value = this.min; + } + let constrainedValue = value - this.min; + const roundedConstrainedValue = Math.round(constrainedValue / this.step); + const remainderValue = constrainedValue - roundedConstrainedValue * (this.stepMultiplier * this.step) / this.stepMultiplier; + constrainedValue = remainderValue >= Number(this.step) / 2 ? constrainedValue - remainderValue + Number(this.step) : constrainedValue - remainderValue; + return constrainedValue + this.min; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * @internal + */ + valueChanged(previous, next) { + super.valueChanged(previous, next); + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + this.$emit("change"); + } + minChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.min = `${this.min}`; + } + this.validate(); + } + maxChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.max = `${this.max}`; + } + this.validate(); + } + stepChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.step = `${this.step}`; + } + this.updateStepMultiplier(); + this.validate(); + } + orientationChanged() { + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "range"); + this.direction = getDirection(this); + this.updateStepMultiplier(); + this.setupTrackConstraints(); + this.setupListeners(); + this.setupDefaultValue(); + this.setThumbPositionForOrientation(this.direction); + } + /** + * @internal + */ + disconnectedCallback() { + this.setupListeners(true); + } + /** + * Increment the value by the step + * + * @public + */ + increment() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) + Number(this.step) : Number(this.value) - Number(this.step); + const incrementedVal = this.convertToConstrainedValue(newVal); + const incrementedValString = incrementedVal < Number(this.max) ? `${incrementedVal}` : `${this.max}`; + this.value = incrementedValString; + } + /** + * Decrement the value by the step + * + * @public + */ + decrement() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) - Number(this.step) : Number(this.value) + Number(this.step); + const decrementedVal = this.convertToConstrainedValue(newVal); + const decrementedValString = decrementedVal > Number(this.min) ? `${decrementedVal}` : `${this.min}`; + this.value = decrementedValString; + } + /** + * Places the thumb based on the current value + * + * @public + * @param direction - writing mode + */ + setThumbPositionForOrientation(direction) { + const newPct = convertPixelToPercent(Number(this.value), Number(this.min), Number(this.max), direction); + const percentage = (1 - newPct) * 100; + if (this.orientation === Orientation.horizontal) { + this.position = this.isDragging ? `right: ${percentage}%; transition: none;` : `right: ${percentage}%; transition: all 0.2s ease;`; + } else { + this.position = this.isDragging ? `bottom: ${percentage}%; transition: none;` : `bottom: ${percentage}%; transition: all 0.2s ease;`; + } + } + /** + * Update the step multiplier used to ensure rounding errors from steps that + * are not whole numbers + */ + updateStepMultiplier() { + const stepString = this.step + ""; + const decimalPlacesOfStep = !!(this.step % 1) ? stepString.length - stepString.indexOf(".") - 1 : 0; + this.stepMultiplier = Math.pow(10, decimalPlacesOfStep); + } + get midpoint() { + return `${this.convertToConstrainedValue((this.max + this.min) / 2)}`; + } + setupDefaultValue() { + if (typeof this.value === "string") { + if (this.value.length === 0) { + this.initialValue = this.midpoint; + } else { + const value = parseFloat(this.value); + if (!Number.isNaN(value) && (value < this.min || value > this.max)) { + this.value = this.midpoint; + } + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Slider.prototype, "readOnly", void 0); + __decorate([ + observable + ], Slider.prototype, "direction", void 0); + __decorate([ + observable + ], Slider.prototype, "isDragging", void 0); + __decorate([ + observable + ], Slider.prototype, "position", void 0); + __decorate([ + observable + ], Slider.prototype, "trackWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "trackLeft", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "valueTextFormatter", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "step", void 0); + __decorate([ + attr + ], Slider.prototype, "orientation", void 0); + __decorate([ + attr + ], Slider.prototype, "mode", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js + var init_slider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js"() { + init_slider_template(); + init_slider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js + var init_switch_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js + var _Switch, FormAssociatedSwitch; + var init_switch_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Switch = class extends FoundationElement { + }; + FormAssociatedSwitch = class extends CheckableFormAssociated(_Switch) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js + var Switch; + var init_switch = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_switch_form_associated(); + Switch = class extends FormAssociatedSwitch { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + this.readOnly ? this.classList.add("readonly") : this.classList.remove("readonly"); + } + /** + * @internal + */ + checkedChanged(prev, next) { + super.checkedChanged(prev, next); + this.checked ? this.classList.add("checked") : this.classList.remove("checked"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Switch.prototype, "readOnly", void 0); + __decorate([ + observable + ], Switch.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js + var init_switch2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js"() { + init_switch_template(); + init_switch(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js + var tabPanelTemplate; + var init_tab_panel_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js"() { + init_esm(); + tabPanelTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js + var TabPanel; + var init_tab_panel = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js"() { + init_foundation_element(); + TabPanel = class extends FoundationElement { + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js + var init_tab_panel2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js"() { + init_tab_panel_template(); + init_tab_panel(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js + var tabTemplate; + var init_tab_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js"() { + init_esm(); + tabTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js + var Tab; + var init_tab = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Tab = class extends FoundationElement { + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tab.prototype, "disabled", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js + var init_tab2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js"() { + init_tab_template(); + init_tab(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js + var tabsTemplate; + var init_tabs_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js"() { + init_esm(); + init_start_end(); + tabsTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js + var TabsOrientation, Tabs; + var init_tabs = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TabsOrientation = { + vertical: "vertical", + horizontal: "horizontal" + }; + Tabs = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = TabsOrientation.horizontal; + this.activeindicator = true; + this.showActiveIndicator = true; + this.prevActiveTabIndex = 0; + this.activeTabIndex = 0; + this.ticking = false; + this.change = () => { + this.$emit("change", this.activetab); + }; + this.isDisabledElement = (el2) => { + return el2.getAttribute("aria-disabled") === "true"; + }; + this.isHiddenElement = (el2) => { + return el2.hasAttribute("hidden"); + }; + this.isFocusableElement = (el2) => { + return !this.isDisabledElement(el2) && !this.isHiddenElement(el2); + }; + this.setTabs = () => { + const gridHorizontalProperty = "gridColumn"; + const gridVerticalProperty = "gridRow"; + const gridProperty = this.isHorizontal() ? gridHorizontalProperty : gridVerticalProperty; + this.activeTabIndex = this.getActiveIndex(); + this.showActiveIndicator = false; + this.tabs.forEach((tab, index) => { + if (tab.slot === "tab") { + const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab); + if (this.activeindicator && this.isFocusableElement(tab)) { + this.showActiveIndicator = true; + } + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tab.setAttribute("id", tabId); + tab.setAttribute("aria-selected", isActiveTab ? "true" : "false"); + tab.setAttribute("aria-controls", tabpanelId); + tab.addEventListener("click", this.handleTabClick); + tab.addEventListener("keydown", this.handleTabKeyDown); + tab.setAttribute("tabindex", isActiveTab ? "0" : "-1"); + if (isActiveTab) { + this.activetab = tab; + this.activeid = tabId; + } + } + tab.style[gridHorizontalProperty] = ""; + tab.style[gridVerticalProperty] = ""; + tab.style[gridProperty] = `${index + 1}`; + !this.isHorizontal() ? tab.classList.add("vertical") : tab.classList.remove("vertical"); + }); + }; + this.setTabPanels = () => { + this.tabpanels.forEach((tabpanel, index) => { + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tabpanel.setAttribute("id", tabpanelId); + tabpanel.setAttribute("aria-labelledby", tabId); + this.activeTabIndex !== index ? tabpanel.setAttribute("hidden", "") : tabpanel.removeAttribute("hidden"); + }); + }; + this.handleTabClick = (event) => { + const selectedTab = event.currentTarget; + if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) { + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = this.tabs.indexOf(selectedTab); + this.setComponent(); + } + }; + this.handleTabKeyDown = (event) => { + if (this.isHorizontal()) { + switch (event.key) { + case keyArrowLeft: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowRight: + event.preventDefault(); + this.adjustForward(event); + break; + } + } else { + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowDown: + event.preventDefault(); + this.adjustForward(event); + break; + } + } + switch (event.key) { + case keyHome: + event.preventDefault(); + this.adjust(-this.activeTabIndex); + break; + case keyEnd: + event.preventDefault(); + this.adjust(this.tabs.length - this.activeTabIndex - 1); + break; + } + }; + this.adjustForward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) + 1 : 1; + if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (this.activetab && index === group.indexOf(this.activetab)) { + break; + } else if (index + 1 >= group.length) { + index = 0; + } else { + index += 1; + } + } + }; + this.adjustBackward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + while (index >= 0 && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.moveToTabByIndex = (group, index) => { + const tab = group[index]; + this.activetab = tab; + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = index; + tab.focus(); + this.setComponent(); + }; + } + /** + * @internal + */ + orientationChanged() { + if (this.$fastController.isConnected) { + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + activeidChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabsChanged() { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabpanelsChanged() { + if (this.$fastController.isConnected && this.tabpanels.length <= this.tabs.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + getActiveIndex() { + const id = this.activeid; + if (id !== void 0) { + return this.tabIds.indexOf(this.activeid) === -1 ? 0 : this.tabIds.indexOf(this.activeid); + } else { + return 0; + } + } + getTabIds() { + return this.tabs.map((tab) => { + var _a; + return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`; + }); + } + getTabPanelIds() { + return this.tabpanels.map((tabPanel) => { + var _a; + return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`; + }); + } + setComponent() { + if (this.activeTabIndex !== this.prevActiveTabIndex) { + this.activeid = this.tabIds[this.activeTabIndex]; + this.focusTab(); + this.change(); + } + } + isHorizontal() { + return this.orientation === TabsOrientation.horizontal; + } + handleActiveIndicatorPosition() { + if (this.showActiveIndicator && this.activeindicator && this.activeTabIndex !== this.prevActiveTabIndex) { + if (this.ticking) { + this.ticking = false; + } else { + this.ticking = true; + this.animateActiveIndicator(); + } + } + } + animateActiveIndicator() { + this.ticking = true; + const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow"; + const translateProperty = this.isHorizontal() ? "translateX" : "translateY"; + const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop"; + const prev = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + const next = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`; + const dif = next - prev; + this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`; + this.activeIndicatorRef.classList.add("activeIndicatorTransition"); + this.activeIndicatorRef.addEventListener("transitionend", () => { + this.ticking = false; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`; + this.activeIndicatorRef.classList.remove("activeIndicatorTransition"); + }); + } + /** + * The adjust method for FASTTabs + * @public + * @remarks + * This method allows the active index to be adjusted by numerical increments + */ + adjust(adjustment) { + const focusableTabs = this.tabs.filter((t) => this.isFocusableElement(t)); + const currentActiveTabIndex = focusableTabs.indexOf(this.activetab); + const nextTabIndex = limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment); + const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]); + if (nextIndex > -1) { + this.moveToTabByIndex(this.tabs, nextIndex); + } + } + focusTab() { + this.tabs[this.activeTabIndex].focus(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.activeTabIndex = this.getActiveIndex(); + } + }; + __decorate([ + attr + ], Tabs.prototype, "orientation", void 0); + __decorate([ + attr + ], Tabs.prototype, "activeid", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabs", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabpanels", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Tabs.prototype, "activeindicator", void 0); + __decorate([ + observable + ], Tabs.prototype, "activeIndicatorRef", void 0); + __decorate([ + observable + ], Tabs.prototype, "showActiveIndicator", void 0); + applyMixins(Tabs, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js + var init_tabs2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js"() { + init_tabs_template(); + init_tabs(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js + var _TextArea, FormAssociatedTextArea; + var init_text_area_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextArea = class extends FoundationElement { + }; + FormAssociatedTextArea = class extends FormAssociated(_TextArea) { + constructor() { + super(...arguments); + this.proxy = document.createElement("textarea"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js + var TextAreaResize; + var init_text_area_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js"() { + TextAreaResize = { + /** + * No resize. + */ + none: "none", + /** + * Resize vertically and horizontally. + */ + both: "both", + /** + * Resize horizontally. + */ + horizontal: "horizontal", + /** + * Resize vertically. + */ + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js + var TextArea; + var init_text_area = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js"() { + init_tslib_es6(); + init_esm(); + init_text_field(); + init_apply_mixins(); + init_text_area_form_associated(); + init_text_area_options(); + TextArea = class extends FormAssociatedTextArea { + constructor() { + super(...arguments); + this.resize = TextAreaResize.none; + this.cols = 20; + this.handleTextInput = () => { + this.value = this.control.value; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.readOnly = this.readOnly; + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.autofocus = this.autofocus; + } + } + listChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.setAttribute("list", this.list); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.maxLength = this.maxlength; + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.minLength = this.minlength; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * Selects all the text in the text area + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "readOnly", void 0); + __decorate([ + attr + ], TextArea.prototype, "resize", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], TextArea.prototype, "formId", void 0); + __decorate([ + attr + ], TextArea.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "minlength", void 0); + __decorate([ + attr + ], TextArea.prototype, "name", void 0); + __decorate([ + attr + ], TextArea.prototype, "placeholder", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "cols", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "rows", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextArea.prototype, "defaultSlottedNodes", void 0); + applyMixins(TextArea, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js + var textAreaTemplate; + var init_text_area_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js"() { + init_esm(); + init_text_area(); + textAreaTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js + var init_text_area2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js"() { + init_text_area_template(); + init_text_area(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js + var textFieldTemplate; + var init_text_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js"() { + init_esm(); + init_start_end(); + init_whitespace_filter(); + textFieldTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js + var init_text_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js"() { + init_text_field_template(); + init_text_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js + var init_toolbar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js + function getRootActiveElement(element) { + const rootNode = element.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.activeElement; + } + return document.activeElement; + } + var init_root_active_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js + var ToolbarArrowKeyMap, Toolbar, DelegatesARIAToolbar; + var init_toolbar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + init_direction(); + init_root_active_element(); + ToolbarArrowKeyMap = Object.freeze({ + [ArrowKeys.ArrowUp]: { + [Orientation.vertical]: -1 + }, + [ArrowKeys.ArrowDown]: { + [Orientation.vertical]: 1 + }, + [ArrowKeys.ArrowLeft]: { + [Orientation.horizontal]: { + [Direction.ltr]: -1, + [Direction.rtl]: 1 + } + }, + [ArrowKeys.ArrowRight]: { + [Orientation.horizontal]: { + [Direction.ltr]: 1, + [Direction.rtl]: -1 + } + } + }); + Toolbar = class _Toolbar extends FoundationElement { + constructor() { + super(...arguments); + this._activeIndex = 0; + this.direction = Direction.ltr; + this.orientation = Orientation.horizontal; + } + /** + * The index of the currently focused element, clamped between 0 and the last element. + * + * @internal + */ + get activeIndex() { + Observable.track(this, "activeIndex"); + return this._activeIndex; + } + set activeIndex(value) { + if (this.$fastController.isConnected) { + this._activeIndex = limit(0, this.focusableElements.length - 1, value); + Observable.notify(this, "activeIndex"); + } + } + slottedItemsChanged() { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * Set the activeIndex when a focusable element in the toolbar is clicked. + * + * @internal + */ + mouseDownHandler(e) { + var _a; + const activeIndex = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a.findIndex((x) => x.contains(e.target)); + if (activeIndex > -1 && this.activeIndex !== activeIndex) { + this.setFocusedElement(activeIndex); + } + return true; + } + childItemsChanged(prev, next) { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + } + /** + * When the toolbar receives focus, set the currently active element as focused. + * + * @internal + */ + focusinHandler(e) { + const relatedTarget = e.relatedTarget; + if (!relatedTarget || this.contains(relatedTarget)) { + return; + } + this.setFocusedElement(); + } + /** + * Determines a value that can be used to iterate a list with the arrow keys. + * + * @param this - An element with an orientation and direction + * @param key - The event key value + * @internal + */ + getDirectionalIncrementer(key) { + var _a, _b, _c, _d, _e; + return (_e = (_c = (_b = (_a = ToolbarArrowKeyMap[key]) === null || _a === void 0 ? void 0 : _a[this.orientation]) === null || _b === void 0 ? void 0 : _b[this.direction]) !== null && _c !== void 0 ? _c : (_d = ToolbarArrowKeyMap[key]) === null || _d === void 0 ? void 0 : _d[this.orientation]) !== null && _e !== void 0 ? _e : 0; + } + /** + * Handle keyboard events for the toolbar. + * + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (!(key in ArrowKeys) || e.defaultPrevented || e.shiftKey) { + return true; + } + const incrementer = this.getDirectionalIncrementer(key); + if (!incrementer) { + return !e.target.closest("[role=radiogroup]"); + } + const nextIndex = this.activeIndex + incrementer; + if (this.focusableElements[nextIndex]) { + e.preventDefault(); + } + this.setFocusedElement(nextIndex); + return true; + } + /** + * get all the slotted elements + * @internal + */ + get allSlottedItems() { + return [ + ...this.start.assignedElements(), + ...this.slottedItems, + ...this.end.assignedElements() + ]; + } + /** + * Prepare the slotted elements which can be focusable. + * + * @internal + */ + reduceFocusableElements() { + var _a; + const previousFocusedElement = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a[this.activeIndex]; + this.focusableElements = this.allSlottedItems.reduce(_Toolbar.reduceFocusableItems, []); + const adjustedActiveIndex = this.focusableElements.indexOf(previousFocusedElement); + this.activeIndex = Math.max(0, adjustedActiveIndex); + this.setFocusableElements(); + } + /** + * Set the activeIndex and focus the corresponding control. + * + * @param activeIndex - The new index to set + * @internal + */ + setFocusedElement(activeIndex = this.activeIndex) { + this.activeIndex = activeIndex; + this.setFocusableElements(); + if (this.focusableElements[this.activeIndex] && // Don't focus the toolbar element if some event handlers moved + // the focus on another element in the page. + this.contains(getRootActiveElement(this))) { + this.focusableElements[this.activeIndex].focus(); + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceFocusableItems(elements2, element) { + var _a, _b, _c, _d; + const isRoleRadio = element.getAttribute("role") === "radio"; + const isFocusableFastElement = (_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus; + const hasFocusableShadow = Array.from((_d = (_c = element.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll("*")) !== null && _d !== void 0 ? _d : []).some((x) => isFocusable(x)); + if (!element.hasAttribute("disabled") && !element.hasAttribute("hidden") && (isFocusable(element) || isRoleRadio || isFocusableFastElement || hasFocusableShadow)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Toolbar.reduceFocusableItems, [])); + } + return elements2; + } + /** + * @internal + */ + setFocusableElements() { + if (this.$fastController.isConnected && this.focusableElements.length > 0) { + this.focusableElements.forEach((element, index) => { + element.tabIndex = this.activeIndex === index ? 0 : -1; + }); + } + } + }; + __decorate([ + observable + ], Toolbar.prototype, "direction", void 0); + __decorate([ + attr + ], Toolbar.prototype, "orientation", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedItems", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedLabel", void 0); + __decorate([ + observable + ], Toolbar.prototype, "childItems", void 0); + DelegatesARIAToolbar = class { + }; + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], DelegatesARIAToolbar.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], DelegatesARIAToolbar.prototype, "ariaLabel", void 0); + applyMixins(DelegatesARIAToolbar, ARIAGlobalStatesAndProperties); + applyMixins(Toolbar, StartEnd, DelegatesARIAToolbar); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js + var init_toolbar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js"() { + init_toolbar_template(); + init_toolbar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js + var init_tooltip_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js + var TooltipPosition; + var init_tooltip_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js"() { + TooltipPosition = { + /** + * The tooltip is positioned above the element + */ + top: "top", + /** + * The tooltip is positioned to the right of the element + */ + right: "right", + /** + * The tooltip is positioned below the element + */ + bottom: "bottom", + /** + * The tooltip is positioned to the left of the element + */ + left: "left", + /** + * The tooltip is positioned before the element + */ + start: "start", + /** + * The tooltip is positioned after the element + */ + end: "end", + /** + * The tooltip is positioned above the element and to the left + */ + topLeft: "top-left", + /** + * The tooltip is positioned above the element and to the right + */ + topRight: "top-right", + /** + * The tooltip is positioned below the element and to the left + */ + bottomLeft: "bottom-left", + /** + * The tooltip is positioned below the element and to the right + */ + bottomRight: "bottom-right", + /** + * The tooltip is positioned above the element and to the left + */ + topStart: "top-start", + /** + * The tooltip is positioned above the element and to the right + */ + topEnd: "top-end", + /** + * The tooltip is positioned below the element and to the left + */ + bottomStart: "bottom-start", + /** + * The tooltip is positioned below the element and to the right + */ + bottomEnd: "bottom-end" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js + var Tooltip; + var init_tooltip = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + init_tooltip_options(); + Tooltip = class extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.delay = 300; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.horizontalInset = "false"; + this.verticalInset = "false"; + this.horizontalScaling = "content"; + this.verticalScaling = "content"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = void 0; + this.tooltipVisible = false; + this.currentDirection = Direction.ltr; + this.showDelayTimer = null; + this.hideDelayTimer = null; + this.isAnchorHoveredFocused = false; + this.isRegionHovered = false; + this.handlePositionChange = (ev) => { + this.classList.toggle("top", this.region.verticalPosition === "start"); + this.classList.toggle("bottom", this.region.verticalPosition === "end"); + this.classList.toggle("inset-top", this.region.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.region.verticalPosition === "insetEnd"); + this.classList.toggle("center-vertical", this.region.verticalPosition === "center"); + this.classList.toggle("left", this.region.horizontalPosition === "start"); + this.classList.toggle("right", this.region.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.region.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.region.horizontalPosition === "insetEnd"); + this.classList.toggle("center-horizontal", this.region.horizontalPosition === "center"); + }; + this.handleRegionMouseOver = (ev) => { + this.isRegionHovered = true; + }; + this.handleRegionMouseOut = (ev) => { + this.isRegionHovered = false; + this.startHideDelayTimer(); + }; + this.handleAnchorMouseOver = (ev) => { + if (this.tooltipVisible) { + this.isAnchorHoveredFocused = true; + return; + } + this.startShowDelayTimer(); + }; + this.handleAnchorMouseOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.handleAnchorFocusIn = (ev) => { + this.startShowDelayTimer(); + }; + this.handleAnchorFocusOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.startHideDelayTimer = () => { + this.clearHideDelayTimer(); + if (!this.tooltipVisible) { + return; + } + this.hideDelayTimer = window.setTimeout(() => { + this.updateTooltipVisibility(); + }, 60); + }; + this.clearHideDelayTimer = () => { + if (this.hideDelayTimer !== null) { + clearTimeout(this.hideDelayTimer); + this.hideDelayTimer = null; + } + }; + this.startShowDelayTimer = () => { + if (this.isAnchorHoveredFocused) { + return; + } + if (this.delay > 1) { + if (this.showDelayTimer === null) + this.showDelayTimer = window.setTimeout(() => { + this.startHover(); + }, this.delay); + return; + } + this.startHover(); + }; + this.startHover = () => { + this.isAnchorHoveredFocused = true; + this.updateTooltipVisibility(); + }; + this.clearShowDelayTimer = () => { + if (this.showDelayTimer !== null) { + clearTimeout(this.showDelayTimer); + this.showDelayTimer = null; + } + }; + this.getAnchor = () => { + const rootNode = this.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.getElementById(this.anchor); + } + return document.getElementById(this.anchor); + }; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && this.tooltipVisible) { + switch (e.key) { + case keyEscape: + this.isAnchorHoveredFocused = false; + this.updateTooltipVisibility(); + this.$emit("dismiss"); + break; + } + } + }; + this.updateTooltipVisibility = () => { + if (this.visible === false) { + this.hideTooltip(); + } else if (this.visible === true) { + this.showTooltip(); + return; + } else { + if (this.isAnchorHoveredFocused || this.isRegionHovered) { + this.showTooltip(); + return; + } + this.hideTooltip(); + } + }; + this.showTooltip = () => { + if (this.tooltipVisible) { + return; + } + this.currentDirection = getDirection(this); + this.tooltipVisible = true; + document.addEventListener("keydown", this.handleDocumentKeydown); + DOM.queueUpdate(this.setRegionProps); + }; + this.hideTooltip = () => { + if (!this.tooltipVisible) { + return; + } + this.clearHideDelayTimer(); + if (this.region !== null && this.region !== void 0) { + this.region.removeEventListener("positionchange", this.handlePositionChange); + this.region.viewportElement = null; + this.region.anchorElement = null; + this.region.removeEventListener("mouseover", this.handleRegionMouseOver); + this.region.removeEventListener("mouseout", this.handleRegionMouseOut); + } + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.tooltipVisible = false; + }; + this.setRegionProps = () => { + if (!this.tooltipVisible) { + return; + } + this.region.viewportElement = this.viewportElement; + this.region.anchorElement = this.anchorElement; + this.region.addEventListener("positionchange", this.handlePositionChange); + this.region.addEventListener("mouseover", this.handleRegionMouseOver, { + passive: true + }); + this.region.addEventListener("mouseout", this.handleRegionMouseOut, { + passive: true + }); + }; + } + visibleChanged() { + if (this.$fastController.isConnected) { + this.updateTooltipVisibility(); + this.updateLayout(); + } + } + anchorChanged() { + if (this.$fastController.isConnected) { + this.anchorElement = this.getAnchor(); + } + } + positionChanged() { + if (this.$fastController.isConnected) { + this.updateLayout(); + } + } + anchorElementChanged(oldValue) { + if (this.$fastController.isConnected) { + if (oldValue !== null && oldValue !== void 0) { + oldValue.removeEventListener("mouseover", this.handleAnchorMouseOver); + oldValue.removeEventListener("mouseout", this.handleAnchorMouseOut); + oldValue.removeEventListener("focusin", this.handleAnchorFocusIn); + oldValue.removeEventListener("focusout", this.handleAnchorFocusOut); + } + if (this.anchorElement !== null && this.anchorElement !== void 0) { + this.anchorElement.addEventListener("mouseover", this.handleAnchorMouseOver, { passive: true }); + this.anchorElement.addEventListener("mouseout", this.handleAnchorMouseOut, { passive: true }); + this.anchorElement.addEventListener("focusin", this.handleAnchorFocusIn, { + passive: true + }); + this.anchorElement.addEventListener("focusout", this.handleAnchorFocusOut, { passive: true }); + const anchorId = this.anchorElement.id; + if (this.anchorElement.parentElement !== null) { + this.anchorElement.parentElement.querySelectorAll(":hover").forEach((element) => { + if (element.id === anchorId) { + this.startShowDelayTimer(); + } + }); + } + } + if (this.region !== null && this.region !== void 0 && this.tooltipVisible) { + this.region.anchorElement = this.anchorElement; + } + this.updateLayout(); + } + } + viewportElementChanged() { + if (this.region !== null && this.region !== void 0) { + this.region.viewportElement = this.viewportElement; + } + this.updateLayout(); + } + connectedCallback() { + super.connectedCallback(); + this.anchorElement = this.getAnchor(); + this.updateTooltipVisibility(); + } + disconnectedCallback() { + this.hideTooltip(); + this.clearShowDelayTimer(); + this.clearHideDelayTimer(); + super.disconnectedCallback(); + } + /** + * updated the properties being passed to the anchored region + */ + updateLayout() { + this.verticalPositioningMode = "locktodefault"; + this.horizontalPositioningMode = "locktodefault"; + switch (this.position) { + case TooltipPosition.top: + case TooltipPosition.bottom: + this.verticalDefaultPosition = this.position; + this.horizontalDefaultPosition = "center"; + break; + case TooltipPosition.right: + case TooltipPosition.left: + case TooltipPosition.start: + case TooltipPosition.end: + this.verticalDefaultPosition = "center"; + this.horizontalDefaultPosition = this.position; + break; + case TooltipPosition.topLeft: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.topRight: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.bottomLeft: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.bottomRight: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.topStart: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.topEnd: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "end"; + break; + case TooltipPosition.bottomStart: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.bottomEnd: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "end"; + break; + default: + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = "center"; + break; + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tooltip.prototype, "visible", void 0); + __decorate([ + attr + ], Tooltip.prototype, "anchor", void 0); + __decorate([ + attr + ], Tooltip.prototype, "delay", void 0); + __decorate([ + attr + ], Tooltip.prototype, "position", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], Tooltip.prototype, "autoUpdateMode", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock" }) + ], Tooltip.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock" }) + ], Tooltip.prototype, "verticalViewportLock", void 0); + __decorate([ + observable + ], Tooltip.prototype, "anchorElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "viewportElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "tooltipVisible", void 0); + __decorate([ + observable + ], Tooltip.prototype, "currentDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js + var init_tooltip2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js"() { + init_tooltip_template(); + init_tooltip(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js + var init_tree_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js + function isTreeItemElement(el2) { + return isHTMLElement(el2) && el2.getAttribute("role") === "treeitem"; + } + var TreeItem; + var init_tree_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TreeItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.expanded = false; + this.focusable = false; + this.isNestedItem = () => { + return isTreeItemElement(this.parentElement); + }; + this.handleExpandCollapseButtonClick = (e) => { + if (!this.disabled && !e.defaultPrevented) { + this.expanded = !this.expanded; + } + }; + this.handleFocus = (e) => { + this.setAttribute("tabindex", "0"); + }; + this.handleBlur = (e) => { + this.setAttribute("tabindex", "-1"); + }; + } + expandedChanged() { + if (this.$fastController.isConnected) { + this.$emit("expanded-change", this); + } + } + selectedChanged() { + if (this.$fastController.isConnected) { + this.$emit("selected-change", this); + } + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.items.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = true; + } + }); + } + } + /** + * Places document focus on a tree item + * + * @public + * @param el - the element to focus + */ + static focusItem(el2) { + el2.focusable = true; + el2.focus(); + } + /** + * Gets number of children + * + * @internal + */ + childItemLength() { + const treeChildren = this.childItems.filter((item) => { + return isTreeItemElement(item); + }); + return treeChildren ? treeChildren.length : 0; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "expanded", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "selected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "disabled", void 0); + __decorate([ + observable + ], TreeItem.prototype, "focusable", void 0); + __decorate([ + observable + ], TreeItem.prototype, "childItems", void 0); + __decorate([ + observable + ], TreeItem.prototype, "items", void 0); + __decorate([ + observable + ], TreeItem.prototype, "nested", void 0); + __decorate([ + observable + ], TreeItem.prototype, "renderCollapsedChildren", void 0); + applyMixins(TreeItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js + var init_tree_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js"() { + init_tree_item_template(); + init_tree_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js + var init_tree_view_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js + var TreeView; + var init_tree_view = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_tree_item(); + init_foundation_element(); + TreeView = class extends FoundationElement { + constructor() { + super(...arguments); + this.currentFocused = null; + this.handleFocus = (e) => { + if (this.slottedTreeItems.length < 1) { + return; + } + if (e.target === this) { + if (this.currentFocused === null) { + this.currentFocused = this.getValidFocusableItem(); + } + if (this.currentFocused !== null) { + TreeItem.focusItem(this.currentFocused); + } + return; + } + if (this.contains(e.target)) { + this.setAttribute("tabindex", "-1"); + this.currentFocused = e.target; + } + }; + this.handleBlur = (e) => { + if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) { + this.setAttribute("tabindex", "0"); + } + }; + this.handleKeyDown = (e) => { + if (e.defaultPrevented) { + return; + } + if (this.slottedTreeItems.length < 1) { + return true; + } + const treeItems = this.getVisibleNodes(); + switch (e.key) { + case keyHome: + if (treeItems.length) { + TreeItem.focusItem(treeItems[0]); + } + return; + case keyEnd: + if (treeItems.length) { + TreeItem.focusItem(treeItems[treeItems.length - 1]); + } + return; + case keyArrowLeft: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) { + item.expanded = false; + } else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) { + TreeItem.focusItem(item.parentElement); + } + } + return false; + case keyArrowRight: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) { + item.expanded = true; + } else if (item instanceof TreeItem && item.childItemLength() > 0) { + this.focusNextNode(1, e.target); + } + } + return; + case keyArrowDown: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(1, e.target); + } + return; + case keyArrowUp: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(-1, e.target); + } + return; + case keyEnter: + this.handleClick(e); + return; + } + return true; + }; + this.handleSelectedChange = (e) => { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (item.selected) { + if (this.currentSelected && this.currentSelected !== item) { + this.currentSelected.selected = false; + } + this.currentSelected = item; + } else if (!item.selected && this.currentSelected === item) { + this.currentSelected = null; + } + return; + }; + this.setItems = () => { + const selectedItem = this.treeView.querySelector("[aria-selected='true']"); + this.currentSelected = selectedItem; + if (this.currentFocused === null || !this.contains(this.currentFocused)) { + this.currentFocused = this.getValidFocusableItem(); + } + this.nested = this.checkForNestedItems(); + const treeItems = this.getVisibleNodes(); + treeItems.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = this.nested; + } + }); + }; + this.isFocusableElement = (el2) => { + return isTreeItemElement(el2); + }; + this.isSelectedElement = (el2) => { + return el2.selected; + }; + } + slottedTreeItemsChanged() { + if (this.$fastController.isConnected) { + this.setItems(); + } + } + connectedCallback() { + super.connectedCallback(); + this.setAttribute("tabindex", "0"); + DOM.queueUpdate(() => { + this.setItems(); + }); + } + /** + * Handles click events bubbling up + * + * @internal + */ + handleClick(e) { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (!item.disabled) { + item.selected = !item.selected; + } + return; + } + /** + * Move focus to a tree item based on its offset from the provided item + */ + focusNextNode(delta, item) { + const visibleNodes = this.getVisibleNodes(); + if (!visibleNodes) { + return; + } + const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta]; + if (isHTMLElement(focusItem)) { + TreeItem.focusItem(focusItem); + } + } + /** + * checks if there are any nested tree items + */ + getValidFocusableItem() { + const treeItems = this.getVisibleNodes(); + let focusIndex = treeItems.findIndex(this.isSelectedElement); + if (focusIndex === -1) { + focusIndex = treeItems.findIndex(this.isFocusableElement); + } + if (focusIndex !== -1) { + return treeItems[focusIndex]; + } + return null; + } + /** + * checks if there are any nested tree items + */ + checkForNestedItems() { + return this.slottedTreeItems.some((node) => { + return isTreeItemElement(node) && node.querySelector("[role='treeitem']"); + }); + } + getVisibleNodes() { + return getDisplayedNodes(this, "[role='treeitem']") || []; + } + }; + __decorate([ + attr({ attribute: "render-collapsed-nodes" }) + ], TreeView.prototype, "renderCollapsedNodes", void 0); + __decorate([ + observable + ], TreeView.prototype, "currentSelected", void 0); + __decorate([ + observable + ], TreeView.prototype, "slottedTreeItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js + var init_tree_view2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js"() { + init_tree_view_template(); + init_tree_view(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js + var MatchMediaBehavior, MatchMediaStyleSheetBehavior, forcedColorsStylesheetBehavior, darkModeStylesheetBehavior, lightModeStylesheetBehavior; + var init_match_media_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js"() { + MatchMediaBehavior = class { + /** + * + * @param query - The media query to operate from. + */ + constructor(query) { + this.listenerCache = /* @__PURE__ */ new WeakMap(); + this.query = query; + } + /** + * Binds the behavior to the element. + * @param source - The element for which the behavior is bound. + */ + bind(source) { + const { query } = this; + const listener = this.constructListener(source); + listener.bind(query)(); + query.addListener(listener); + this.listenerCache.set(source, listener); + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + */ + unbind(source) { + const listener = this.listenerCache.get(source); + if (listener) { + this.query.removeListener(listener); + this.listenerCache.delete(source); + } + } + }; + MatchMediaStyleSheetBehavior = class _MatchMediaStyleSheetBehavior extends MatchMediaBehavior { + /** + * Constructs a {@link MatchMediaStyleSheetBehavior} instance. + * @param query - The media query to operate from. + * @param styles - The styles to coordinate with the query. + */ + constructor(query, styles) { + super(query); + this.styles = styles; + } + /** + * Defines a function to construct {@link MatchMediaStyleSheetBehavior | MatchMediaStyleSheetBehaviors} for + * a provided query. + * @param query - The media query to operate from. + * + * @public + * @example + * + * ```ts + * import { css } from "@microsoft/fast-element"; + * import { MatchMediaStyleSheetBehavior } from "@microsoft/fast-foundation"; + * + * const landscapeBehavior = MatchMediaStyleSheetBehavior.with( + * window.matchMedia("(orientation: landscape)") + * ); + * const styles = css` + * :host { + * width: 200px; + * height: 400px; + * } + * ` + * .withBehaviors(landscapeBehavior(css` + * :host { + * width: 400px; + * height: 200px; + * } + * `)) + * ``` + */ + static with(query) { + return (styles) => { + return new _MatchMediaStyleSheetBehavior(query, styles); + }; + } + /** + * Constructs a match-media listener for a provided element. + * @param source - the element for which to attach or detach styles. + * @internal + */ + constructListener(source) { + let attached = false; + const styles = this.styles; + return function listener() { + const { matches: matches2 } = this; + if (matches2 && !attached) { + source.$fastController.addStyles(styles); + attached = matches2; + } else if (!matches2 && attached) { + source.$fastController.removeStyles(styles); + attached = matches2; + } + }; + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + * @internal + */ + unbind(source) { + super.unbind(source); + source.$fastController.removeStyles(this.styles); + } + }; + forcedColorsStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(forced-colors)")); + darkModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: dark)")); + lightModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: light)")); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js + var init_property_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js + var disabledCursor; + var init_disabled = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js"() { + disabledCursor = "not-allowed"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js + function display(displayValue) { + return `${hidden}:host{display:${displayValue}}`; + } + var hidden; + var init_display = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js"() { + hidden = `:host([hidden]){display:none}`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js + var focusVisible; + var init_focus = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js"() { + init_dist2(); + focusVisible = canUseFocusVisible() ? "focus-visible" : "focus"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js + var init_style = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js"() { + init_disabled(); + init_display(); + init_focus(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js + var init_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js"() { + init_apply_mixins(); + init_composed_parent(); + init_match_media_stylesheet_behavior(); + init_property_stylesheet_behavior(); + init_style(); + init_direction(); + init_whitespace_filter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/index.js + var init_esm2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/index.js"() { + init_accordion_item2(); + init_accordion2(); + init_anchor2(); + init_anchored_region2(); + init_avatar2(); + init_badge2(); + init_breadcrumb_item2(); + init_breadcrumb2(); + init_button2(); + init_calendar2(); + init_card2(); + init_checkbox2(); + init_combobox2(); + init_data_grid2(); + init_design_system2(); + init_design_token(); + init_di2(); + init_dialog2(); + init_disclosure2(); + init_divider2(); + init_flipper2(); + init_form_associated2(); + init_foundation_element2(); + init_listbox_option2(); + init_listbox2(); + init_picker2(); + init_menu_item2(); + init_menu2(); + init_number_field2(); + init_patterns(); + init_progress_ring(); + init_progress(); + init_radio_group2(); + init_radio2(); + init_horizontal_scroll2(); + init_search2(); + init_select2(); + init_skeleton2(); + init_slider_label2(); + init_slider2(); + init_switch2(); + init_tab_panel2(); + init_tab2(); + init_tabs2(); + init_text_area2(); + init_text_field2(); + init_toolbar2(); + init_tooltip2(); + init_tree_item2(); + init_tree_view2(); + init_utilities(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js + function provideVSCodeDesignSystem(element) { + return DesignSystem.getOrCreate(element).withPrefix("vscode"); + } + var init_vscode_design_system = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js"() { + init_esm2(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js + function initThemeChangeListener(tokenMappings2) { + window.addEventListener("load", () => { + const observer = new MutationObserver(() => { + applyCurrentTheme(tokenMappings2); + }); + observer.observe(document.body, { + attributes: true, + attributeFilter: ["class"] + }); + applyCurrentTheme(tokenMappings2); + }); + } + function applyCurrentTheme(tokenMappings2) { + const styles = getComputedStyle(document.body); + const body = document.querySelector("body"); + if (body) { + const themeKind = body.getAttribute("data-vscode-theme-kind"); + for (const [vscodeTokenName, toolkitToken] of tokenMappings2) { + let value = styles.getPropertyValue(vscodeTokenName).toString(); + if (themeKind === "vscode-high-contrast") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + value = "transparent"; + } + if (toolkitToken.name === "button-icon-hover-background") { + value = "transparent"; + } + } else if (themeKind === "vscode-high-contrast-light") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + switch (toolkitToken.name) { + case "button-primary-hover-background": + value = "#0F4A85"; + break; + case "button-secondary-hover-background": + value = "transparent"; + break; + case "button-icon-hover-background": + value = "transparent"; + break; + } + } + } else { + if (toolkitToken.name === "contrast-active-border") { + value = "transparent"; + } + } + toolkitToken.setValueFor(body, value); + } + } + } + var init_applyTheme = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js + function create2(name, vscodeThemeVar) { + const designToken = DesignToken.create(name); + if (vscodeThemeVar) { + if (vscodeThemeVar.includes("--fake-vscode-token")) { + const uniqueId2 = "id" + Math.random().toString(16).slice(2); + vscodeThemeVar = `${vscodeThemeVar}-${uniqueId2}`; + } + tokenMappings.set(vscodeThemeVar, designToken); + } + if (!isThemeListenerInitialized) { + initThemeChangeListener(tokenMappings); + isThemeListenerInitialized = true; + } + return designToken; + } + var tokenMappings, isThemeListenerInitialized; + var init_create = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js"() { + init_esm2(); + init_applyTheme(); + tokenMappings = /* @__PURE__ */ new Map(); + isThemeListenerInitialized = false; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js + var background, borderWidth, contrastActiveBorder, contrastBorder, cornerRadius, cornerRadiusRound, designUnit, disabledOpacity, focusBorder, fontFamily, fontWeight, foreground, inputHeight, inputMinWidth, typeRampBaseFontSize, typeRampBaseLineHeight, typeRampMinus1FontSize, typeRampMinus1LineHeight, typeRampMinus2FontSize, typeRampMinus2LineHeight, typeRampPlus1FontSize, typeRampPlus1LineHeight, scrollbarWidth, scrollbarHeight, scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, badgeBackground, badgeForeground, buttonBorder, buttonIconBackground, buttonIconCornerRadius, buttonIconFocusBorderOffset, buttonIconHoverBackground, buttonIconPadding, buttonPrimaryBackground, buttonPrimaryForeground, buttonPrimaryHoverBackground, buttonSecondaryBackground, buttonSecondaryForeground, buttonSecondaryHoverBackground, buttonPaddingHorizontal, buttonPaddingVertical, checkboxBackground, checkboxBorder, checkboxCornerRadius, checkboxForeground, listActiveSelectionBackground, listActiveSelectionForeground, listHoverBackground, dividerBackground, dropdownBackground, dropdownBorder, dropdownForeground, dropdownListMaxHeight, inputBackground, inputForeground, inputPlaceholderForeground, linkActiveForeground, linkForeground, progressBackground, panelTabActiveBorder, panelTabActiveForeground, panelTabForeground, panelViewBackground, panelViewBorder, tagCornerRadius; + var init_design_tokens = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js"() { + init_create(); + background = create2("background", "--vscode-editor-background").withDefault("#1e1e1e"); + borderWidth = create2("border-width").withDefault(1); + contrastActiveBorder = create2("contrast-active-border", "--vscode-contrastActiveBorder").withDefault("#f38518"); + contrastBorder = create2("contrast-border", "--vscode-contrastBorder").withDefault("#6fc3df"); + cornerRadius = create2("corner-radius").withDefault(0); + cornerRadiusRound = create2("corner-radius-round").withDefault(2); + designUnit = create2("design-unit").withDefault(4); + disabledOpacity = create2("disabled-opacity").withDefault(0.4); + focusBorder = create2("focus-border", "--vscode-focusBorder").withDefault("#007fd4"); + fontFamily = create2("font-family", "--vscode-font-family").withDefault("-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol"); + fontWeight = create2("font-weight", "--vscode-font-weight").withDefault("400"); + foreground = create2("foreground", "--vscode-foreground").withDefault("#cccccc"); + inputHeight = create2("input-height").withDefault("26"); + inputMinWidth = create2("input-min-width").withDefault("100px"); + typeRampBaseFontSize = create2("type-ramp-base-font-size", "--vscode-font-size").withDefault("13px"); + typeRampBaseLineHeight = create2("type-ramp-base-line-height").withDefault("normal"); + typeRampMinus1FontSize = create2("type-ramp-minus1-font-size").withDefault("11px"); + typeRampMinus1LineHeight = create2("type-ramp-minus1-line-height").withDefault("16px"); + typeRampMinus2FontSize = create2("type-ramp-minus2-font-size").withDefault("9px"); + typeRampMinus2LineHeight = create2("type-ramp-minus2-line-height").withDefault("16px"); + typeRampPlus1FontSize = create2("type-ramp-plus1-font-size").withDefault("16px"); + typeRampPlus1LineHeight = create2("type-ramp-plus1-line-height").withDefault("24px"); + scrollbarWidth = create2("scrollbarWidth").withDefault("10px"); + scrollbarHeight = create2("scrollbarHeight").withDefault("10px"); + scrollbarSliderBackground = create2("scrollbar-slider-background", "--vscode-scrollbarSlider-background").withDefault("#79797966"); + scrollbarSliderHoverBackground = create2("scrollbar-slider-hover-background", "--vscode-scrollbarSlider-hoverBackground").withDefault("#646464b3"); + scrollbarSliderActiveBackground = create2("scrollbar-slider-active-background", "--vscode-scrollbarSlider-activeBackground").withDefault("#bfbfbf66"); + badgeBackground = create2("badge-background", "--vscode-badge-background").withDefault("#4d4d4d"); + badgeForeground = create2("badge-foreground", "--vscode-badge-foreground").withDefault("#ffffff"); + buttonBorder = create2("button-border", "--vscode-button-border").withDefault("transparent"); + buttonIconBackground = create2("button-icon-background").withDefault("transparent"); + buttonIconCornerRadius = create2("button-icon-corner-radius").withDefault("5px"); + buttonIconFocusBorderOffset = create2("button-icon-outline-offset").withDefault(0); + buttonIconHoverBackground = create2("button-icon-hover-background", "--fake-vscode-token").withDefault("rgba(90, 93, 94, 0.31)"); + buttonIconPadding = create2("button-icon-padding").withDefault("3px"); + buttonPrimaryBackground = create2("button-primary-background", "--vscode-button-background").withDefault("#0e639c"); + buttonPrimaryForeground = create2("button-primary-foreground", "--vscode-button-foreground").withDefault("#ffffff"); + buttonPrimaryHoverBackground = create2("button-primary-hover-background", "--vscode-button-hoverBackground").withDefault("#1177bb"); + buttonSecondaryBackground = create2("button-secondary-background", "--vscode-button-secondaryBackground").withDefault("#3a3d41"); + buttonSecondaryForeground = create2("button-secondary-foreground", "--vscode-button-secondaryForeground").withDefault("#ffffff"); + buttonSecondaryHoverBackground = create2("button-secondary-hover-background", "--vscode-button-secondaryHoverBackground").withDefault("#45494e"); + buttonPaddingHorizontal = create2("button-padding-horizontal").withDefault("11px"); + buttonPaddingVertical = create2("button-padding-vertical").withDefault("4px"); + checkboxBackground = create2("checkbox-background", "--vscode-checkbox-background").withDefault("#3c3c3c"); + checkboxBorder = create2("checkbox-border", "--vscode-checkbox-border").withDefault("#3c3c3c"); + checkboxCornerRadius = create2("checkbox-corner-radius").withDefault(3); + checkboxForeground = create2("checkbox-foreground", "--vscode-checkbox-foreground").withDefault("#f0f0f0"); + listActiveSelectionBackground = create2("list-active-selection-background", "--vscode-list-activeSelectionBackground").withDefault("#094771"); + listActiveSelectionForeground = create2("list-active-selection-foreground", "--vscode-list-activeSelectionForeground").withDefault("#ffffff"); + listHoverBackground = create2("list-hover-background", "--vscode-list-hoverBackground").withDefault("#2a2d2e"); + dividerBackground = create2("divider-background", "--vscode-settings-dropdownListBorder").withDefault("#454545"); + dropdownBackground = create2("dropdown-background", "--vscode-dropdown-background").withDefault("#3c3c3c"); + dropdownBorder = create2("dropdown-border", "--vscode-dropdown-border").withDefault("#3c3c3c"); + dropdownForeground = create2("dropdown-foreground", "--vscode-dropdown-foreground").withDefault("#f0f0f0"); + dropdownListMaxHeight = create2("dropdown-list-max-height").withDefault("200px"); + inputBackground = create2("input-background", "--vscode-input-background").withDefault("#3c3c3c"); + inputForeground = create2("input-foreground", "--vscode-input-foreground").withDefault("#cccccc"); + inputPlaceholderForeground = create2("input-placeholder-foreground", "--vscode-input-placeholderForeground").withDefault("#cccccc"); + linkActiveForeground = create2("link-active-foreground", "--vscode-textLink-activeForeground").withDefault("#3794ff"); + linkForeground = create2("link-foreground", "--vscode-textLink-foreground").withDefault("#3794ff"); + progressBackground = create2("progress-background", "--vscode-progressBar-background").withDefault("#0e70c0"); + panelTabActiveBorder = create2("panel-tab-active-border", "--vscode-panelTitle-activeBorder").withDefault("#e7e7e7"); + panelTabActiveForeground = create2("panel-tab-active-foreground", "--vscode-panelTitle-activeForeground").withDefault("#e7e7e7"); + panelTabForeground = create2("panel-tab-foreground", "--vscode-panelTitle-inactiveForeground").withDefault("#e7e7e799"); + panelViewBackground = create2("panel-view-background", "--vscode-panel-background").withDefault("#1e1e1e"); + panelViewBorder = create2("panel-view-border", "--vscode-panel-border").withDefault("#80808059"); + tagCornerRadius = create2("tag-corner-radius").withDefault("2px"); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js + var badgeStyles; + var init_badge_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + badgeStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + text-align: center; + } + .control { + align-items: center; + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: 11px; + box-sizing: border-box; + color: ${badgeForeground}; + display: flex; + height: calc(${designUnit} * 4px); + justify-content: center; + min-width: calc(${designUnit} * 4px + 2px); + min-height: calc(${designUnit} * 4px + 2px); + padding: 3px 6px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js + var Badge2, vsCodeBadge; + var init_badge3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js"() { + init_esm2(); + init_badge_styles(); + Badge2 = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.circular) { + this.circular = true; + } + } + }; + vsCodeBadge = Badge2.compose({ + baseName: "badge", + template: badgeTemplate, + styles: badgeStyles + }); + } + }); + + // node_modules/tslib/tslib.es6.mjs + function __decorate2(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es62 = __esm({ + "node_modules/tslib/tslib.es6.mjs"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js + var BaseButtonStyles, PrimaryButtonStyles, SecondaryButtonStyles, IconButtonStyles, buttonStyles; + var init_button_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + BaseButtonStyles = css` + ${display("inline-flex")} :host { + outline: none; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${buttonPrimaryForeground}; + background: ${buttonPrimaryBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + fill: currentColor; + cursor: pointer; + } + .control { + background: transparent; + height: inherit; + flex-grow: 1; + box-sizing: border-box; + display: inline-flex; + justify-content: center; + align-items: center; + padding: ${buttonPaddingVertical} ${buttonPaddingHorizontal}; + white-space: wrap; + outline: none; + text-decoration: none; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + color: inherit; + border-radius: inherit; + fill: inherit; + cursor: inherit; + font-family: inherit; + } + :host(:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host(:active) { + background: ${buttonPrimaryBackground}; + } + .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + .control::-moz-focus-inner { + border: 0; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + background: ${buttonPrimaryBackground}; + cursor: ${disabledCursor}; + } + .content { + display: flex; + } + .start { + display: flex; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-end: 8px; + } +`; + PrimaryButtonStyles = css` + :host([appearance='primary']) { + background: ${buttonPrimaryBackground}; + color: ${buttonPrimaryForeground}; + } + :host([appearance='primary']:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host([appearance='primary']:active) .control:active { + background: ${buttonPrimaryBackground}; + } + :host([appearance='primary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='primary'][disabled]) { + background: ${buttonPrimaryBackground}; + } +`; + SecondaryButtonStyles = css` + :host([appearance='secondary']) { + background: ${buttonSecondaryBackground}; + color: ${buttonSecondaryForeground}; + } + :host([appearance='secondary']:hover) { + background: ${buttonSecondaryHoverBackground}; + } + :host([appearance='secondary']:active) .control:active { + background: ${buttonSecondaryBackground}; + } + :host([appearance='secondary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='secondary'][disabled]) { + background: ${buttonSecondaryBackground}; + } +`; + IconButtonStyles = css` + :host([appearance='icon']) { + background: ${buttonIconBackground}; + border-radius: ${buttonIconCornerRadius}; + color: ${foreground}; + } + :host([appearance='icon']:hover) { + background: ${buttonIconHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } + :host([appearance='icon']) .control { + padding: ${buttonIconPadding}; + border: none; + } + :host([appearance='icon']:active) .control:active { + background: ${buttonIconHoverBackground}; + } + :host([appearance='icon']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: ${buttonIconFocusBorderOffset}; + } + :host([appearance='icon'][disabled]) { + background: ${buttonIconBackground}; + } +`; + buttonStyles = (context, definition) => css` + ${BaseButtonStyles} + ${PrimaryButtonStyles} + ${SecondaryButtonStyles} + ${IconButtonStyles} +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/index.js + var Button2, vsCodeButton; + var init_button3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/index.js"() { + init_tslib_es62(); + init_esm(); + init_esm2(); + init_button_styles(); + Button2 = class extends Button { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.appearance) { + const appearanceValue = this.getAttribute("appearance"); + this.appearance = appearanceValue; + } + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "appearance" && newVal === "icon") { + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.ariaLabel = "Icon Button"; + } + } + if (attrName === "aria-label") { + this.ariaLabel = newVal; + } + if (attrName === "disabled") { + this.disabled = newVal !== null; + } + } + }; + __decorate2([ + attr + ], Button2.prototype, "appearance", void 0); + vsCodeButton = Button2.compose({ + baseName: "button", + template: buttonTemplate, + styles: buttonStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js + var checkboxStyles; + var init_checkbox_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + checkboxStyles = (context, defintiion) => css` + ${display("inline-flex")} :host { + align-items: center; + outline: none; + margin: calc(${designUnit} * 1px) 0; + user-select: none; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control { + position: relative; + width: calc(${designUnit} * 4px + 2px); + height: calc(${designUnit} * 4px + 2px); + box-sizing: border-box; + border-radius: calc(${checkboxCornerRadius} * 1px); + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + background: ${checkboxBackground}; + outline: none; + cursor: pointer; + } + .label { + font-family: ${fontFamily}; + color: ${foreground}; + padding-inline-start: calc(${designUnit} * 2px + 2px); + margin-inline-end: calc(${designUnit} * 2px + 2px); + cursor: pointer; + } + .label__hidden { + display: none; + visibility: hidden; + } + .checked-indicator { + width: 100%; + height: 100%; + display: block; + fill: ${foreground}; + opacity: 0; + pointer-events: none; + } + .indeterminate-indicator { + border-radius: 2px; + background: ${foreground}; + position: absolute; + top: 50%; + left: 50%; + width: 50%; + height: 50%; + transform: translate(-50%, -50%); + opacity: 0; + } + :host(:enabled) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:enabled) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host(.disabled) .label, + :host(.readonly) .label, + :host(.readonly) .control, + :host(.disabled) .control { + cursor: ${disabledCursor}; + } + :host(.checked:not(.indeterminate)) .checked-indicator, + :host(.indeterminate) .indeterminate-indicator { + opacity: 1; + } + :host(.disabled) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js + var Checkbox2, vsCodeCheckbox; + var init_checkbox3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js"() { + init_esm2(); + init_checkbox_styles(); + Checkbox2 = class extends Checkbox { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Checkbox"); + } + } + }; + vsCodeCheckbox = Checkbox2.compose({ + baseName: "checkbox", + template: checkboxTemplate, + styles: checkboxStyles, + checkedIndicator: ` + + + + `, + indeterminateIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js + var dataGridStyles; + var init_data_grid_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js"() { + init_esm(); + dataGridStyles = (context, definition) => css` + :host { + display: flex; + position: relative; + flex-direction: column; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js + var dataGridRowStyles; + var init_data_grid_row_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js"() { + init_esm(); + init_design_tokens(); + dataGridRowStyles = (context, definition) => css` + :host { + display: grid; + padding: calc((${designUnit} / 4) * 1px) 0; + box-sizing: border-box; + width: 100%; + background: transparent; + } + :host(.header) { + } + :host(.sticky-header) { + background: ${background}; + position: sticky; + top: 0; + } + :host(:hover) { + background: ${listHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js + var dataGridCellStyles; + var init_data_grid_cell_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dataGridCellStyles = (context, definition) => css` + :host { + padding: calc(${designUnit} * 1px) calc(${designUnit} * 3px); + color: ${foreground}; + opacity: 1; + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + font-weight: 400; + border: solid calc(${borderWidth} * 1px) transparent; + border-radius: calc(${cornerRadius} * 1px); + white-space: wrap; + overflow-wrap: anywhere; + } + :host(.column-header) { + font-weight: 600; + } + :host(:${focusVisible}), + :host(:focus), + :host(:active) { + background: ${listActiveSelectionBackground}; + border: solid calc(${borderWidth} * 1px) ${focusBorder}; + color: ${listActiveSelectionForeground}; + outline: none; + } + :host(:${focusVisible}) ::slotted(*), + :host(:focus) ::slotted(*), + :host(:active) ::slotted(*) { + color: ${listActiveSelectionForeground} !important; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js + var DataGrid2, vsCodeDataGrid, DataGridRow2, vsCodeDataGridRow, DataGridCell2, vsCodeDataGridCell; + var init_data_grid3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js"() { + init_esm2(); + init_data_grid_styles(); + init_data_grid_row_styles(); + init_data_grid_cell_styles(); + DataGrid2 = class extends DataGrid { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Data Grid"); + } + } + }; + vsCodeDataGrid = DataGrid2.compose({ + baseName: "data-grid", + baseClass: DataGrid, + template: dataGridTemplate, + styles: dataGridStyles + }); + DataGridRow2 = class extends DataGridRow { + }; + vsCodeDataGridRow = DataGridRow2.compose({ + baseName: "data-grid-row", + baseClass: DataGridRow, + template: dataGridRowTemplate, + styles: dataGridRowStyles + }); + DataGridCell2 = class extends DataGridCell { + }; + vsCodeDataGridCell = DataGridCell2.compose({ + baseName: "data-grid-cell", + baseClass: DataGridCell, + template: dataGridCellTemplate, + styles: dataGridCellStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js + var dividerStyles; + var init_divider_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dividerStyles = (context, definition) => css` + ${display("block")} :host { + border: none; + border-top: calc(${borderWidth} * 1px) solid ${dividerBackground}; + box-sizing: content-box; + height: 0; + margin: calc(${designUnit} * 1px) 0; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js + var Divider2, vsCodeDivider; + var init_divider3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js"() { + init_esm2(); + init_divider_styles(); + Divider2 = class extends Divider { + }; + vsCodeDivider = Divider2.compose({ + baseName: "divider", + template: dividerTemplate, + styles: dividerStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js + var dropdownStyles; + var init_dropdown_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dropdownStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: ${dropdownBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + color: ${foreground}; + contain: contents; + font-family: ${fontFamily}; + height: calc(${inputHeight} * 1px); + position: relative; + user-select: none; + min-width: ${inputMinWidth}; + outline: none; + vertical-align: top; + } + .control { + align-items: center; + box-sizing: border-box; + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + cursor: pointer; + display: flex; + font-family: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + min-height: 100%; + padding: 2px 6px 2px 8px; + width: 100%; + } + .listbox { + background: ${dropdownBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + display: inline-flex; + flex-direction: column; + left: 0; + max-height: ${dropdownListMaxHeight}; + padding: 0; + overflow-y: auto; + position: absolute; + width: 100%; + z-index: 1; + } + .listbox[hidden] { + display: none; + } + :host(:${focusVisible}) .control { + border-color: ${focusBorder}; + } + :host(:not([disabled]):hover) { + background: ${dropdownBackground}; + border-color: ${dropdownBorder}; + } + :host(:${focusVisible}) ::slotted([aria-selected="true"][role="option"]:not([disabled])) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + cursor: ${disabledCursor}; + user-select: none; + } + :host([disabled]:hover) { + background: ${dropdownBackground}; + color: ${foreground}; + fill: currentcolor; + } + :host(:not([disabled])) .control:active { + border-color: ${focusBorder}; + } + :host(:empty) .listbox { + display: none; + } + :host([open]) .control { + border-color: ${focusBorder}; + } + :host([open][position='above']) .listbox { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + :host([open][position='below']) .listbox { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + :host([open][position='above']) .listbox { + bottom: calc(${inputHeight} * 1px); + } + :host([open][position='below']) .listbox { + top: calc(${inputHeight} * 1px); + } + .selected-value { + flex: 1 1 auto; + font-family: inherit; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + } + .indicator { + flex: 0 0 auto; + margin-inline-start: 1em; + } + slot[name='listbox'] { + display: none; + width: 100%; + } + :host([open]) slot[name='listbox'] { + display: flex; + position: absolute; + } + .end { + margin-inline-start: auto; + } + .start, + .end, + .indicator, + .select-indicator, + ::slotted(svg), + ::slotted(span) { + fill: currentcolor; + height: 1em; + min-height: calc(${designUnit} * 4px); + min-width: calc(${designUnit} * 4px); + width: 1em; + } + ::slotted([role='option']), + ::slotted(option) { + flex: 0 0 auto; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js + var Dropdown, vsCodeDropdown; + var init_dropdown = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js"() { + init_esm2(); + init_dropdown_styles(); + Dropdown = class extends Select { + }; + vsCodeDropdown = Dropdown.compose({ + baseName: "dropdown", + template: selectTemplate, + styles: dropdownStyles, + indicator: ` + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js + var linkStyles; + var init_link_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + linkStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: transparent; + box-sizing: border-box; + color: ${linkForeground}; + cursor: pointer; + fill: currentcolor; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + outline: none; + } + .control { + background: transparent; + border: calc(${borderWidth} * 1px) solid transparent; + border-radius: calc(${cornerRadius} * 1px); + box-sizing: border-box; + color: inherit; + cursor: inherit; + fill: inherit; + font-family: inherit; + height: inherit; + padding: 0; + outline: none; + text-decoration: none; + word-break: break-word; + } + .control::-moz-focus-inner { + border: 0; + } + :host(:hover) { + color: ${linkActiveForeground}; + } + :host(:hover) .content { + text-decoration: underline; + } + :host(:active) { + background: transparent; + color: ${linkActiveForeground}; + } + :host(:${focusVisible}) .control, + :host(:focus) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/index.js + var Link, vsCodeLink; + var init_link = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/index.js"() { + init_esm2(); + init_link_styles(); + Link = class extends Anchor { + }; + vsCodeLink = Link.compose({ + baseName: "link", + template: anchorTemplate, + styles: linkStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js + var optionStyles; + var init_option_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + optionStyles = (context, definition) => css` + ${display("inline-flex")} :host { + font-family: var(--body-font); + border-radius: ${cornerRadius}; + border: calc(${borderWidth} * 1px) solid transparent; + box-sizing: border-box; + color: ${foreground}; + cursor: pointer; + fill: currentcolor; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: 0; + outline: none; + overflow: hidden; + padding: 0 calc((${designUnit} / 2) * 1px) + calc((${designUnit} / 4) * 1px); + user-select: none; + white-space: nowrap; + } + :host(:${focusVisible}) { + border-color: ${focusBorder}; + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([aria-selected='true']) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:active) { + background: ${listActiveSelectionBackground}; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):hover) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):active) { + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]:hover) { + background-color: inherit; + } + .content { + grid-column-start: 2; + justify-self: start; + overflow: hidden; + text-overflow: ellipsis; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/index.js + var Option2, vsCodeOption; + var init_option = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/index.js"() { + init_esm2(); + init_option_styles(); + Option2 = class extends ListboxOption { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Option"); + } + } + }; + vsCodeOption = Option2.compose({ + baseName: "option", + template: listboxOptionTemplate, + styles: optionStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js + var panelsStyles; + var init_panels_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelsStyles = (context, definition) => css` + ${display("grid")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${foreground}; + grid-template-columns: auto 1fr auto; + grid-template-rows: auto 1fr; + overflow-x: auto; + } + .tablist { + display: grid; + grid-template-rows: auto auto; + grid-template-columns: auto; + column-gap: calc(${designUnit} * 8px); + position: relative; + width: max-content; + align-self: end; + padding: calc(${designUnit} * 1px) calc(${designUnit} * 1px) 0; + box-sizing: border-box; + } + .start, + .end { + align-self: center; + } + .activeIndicator { + grid-row: 2; + grid-column: 1; + width: 100%; + height: calc((${designUnit} / 4) * 1px); + justify-self: center; + background: ${panelTabActiveForeground}; + margin: 0; + border-radius: calc(${cornerRadius} * 1px); + } + .activeIndicatorTransition { + transition: transform 0.01s linear; + } + .tabpanel { + grid-row: 2; + grid-column-start: 1; + grid-column-end: 4; + position: relative; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js + var panelTabStyles; + var init_panel_tab_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelTabStyles = (context, definition) => css` + ${display("inline-flex")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + height: calc(${designUnit} * 7px); + padding: calc(${designUnit} * 1px) 0; + color: ${panelTabForeground}; + fill: currentcolor; + border-radius: calc(${cornerRadius} * 1px); + border: solid calc(${borderWidth} * 1px) transparent; + align-items: center; + justify-content: center; + grid-row: 1; + cursor: pointer; + } + :host(:hover) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:active) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:hover) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:active) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:${focusVisible}) { + outline: none; + border: solid calc(${borderWidth} * 1px) ${panelTabActiveBorder}; + } + :host(:focus) { + outline: none; + } + ::slotted(vscode-badge) { + margin-inline-start: calc(${designUnit} * 2px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js + var panelViewStyles; + var init_panel_view_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelViewStyles = (context, definition) => css` + ${display("flex")} :host { + color: inherit; + background-color: transparent; + border: solid calc(${borderWidth} * 1px) transparent; + box-sizing: border-box; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: 10px calc((${designUnit} + 2) * 1px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js + var Panels, vsCodePanels, PanelTab, vsCodePanelTab, PanelView, vsCodePanelView; + var init_panels = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js"() { + init_esm2(); + init_panels_styles(); + init_panel_tab_styles(); + init_panel_view_styles(); + Panels = class extends Tabs { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.orientation) { + this.orientation = TabsOrientation.horizontal; + } + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Panels"); + } + } + }; + vsCodePanels = Panels.compose({ + baseName: "panels", + template: tabsTemplate, + styles: panelsStyles + }); + PanelTab = class extends Tab { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.disabled) { + this.disabled = false; + } + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } + } + }; + vsCodePanelTab = PanelTab.compose({ + baseName: "panel-tab", + template: tabTemplate, + styles: panelTabStyles + }); + PanelView = class extends TabPanel { + }; + vsCodePanelView = PanelView.compose({ + baseName: "panel-view", + template: tabPanelTemplate, + styles: panelViewStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js + var progressRingStyles; + var init_progress_ring_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + progressRingStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: center; + outline: none; + height: calc(${designUnit} * 7px); + width: calc(${designUnit} * 7px); + margin: 0; + } + .progress { + height: 100%; + width: 100%; + } + .background { + fill: none; + stroke: transparent; + stroke-width: calc(${designUnit} / 2 * 1px); + } + .indeterminate-indicator-1 { + fill: none; + stroke: ${progressBackground}; + stroke-width: calc(${designUnit} / 2 * 1px); + stroke-linecap: square; + transform-origin: 50% 50%; + transform: rotate(-90deg); + transition: all 0.2s ease-in-out; + animation: spin-infinite 2s linear infinite; + } + @keyframes spin-infinite { + 0% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(0deg); + } + 50% { + stroke-dasharray: 21.99px 21.99px; + transform: rotate(450deg); + } + 100% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(1080deg); + } + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js + var ProgressRing, vsCodeProgressRing; + var init_progress_ring2 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js"() { + init_esm2(); + init_progress_ring_styles(); + ProgressRing = class extends BaseProgress { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.paused) { + this.paused = false; + } + this.setAttribute("aria-label", "Loading"); + this.setAttribute("aria-live", "assertive"); + this.setAttribute("role", "alert"); + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "value") { + this.removeAttribute("value"); + } + } + }; + vsCodeProgressRing = ProgressRing.compose({ + baseName: "progress-ring", + template: progressRingTemplate, + styles: progressRingStyles, + indeterminateIndicator: ` + + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js + var radioGroupStyles; + var init_radio_group_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioGroupStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: flex-start; + margin: calc(${designUnit} * 1px) 0; + flex-direction: column; + } + .positioning-region { + display: flex; + flex-wrap: wrap; + } + :host([orientation='vertical']) .positioning-region { + flex-direction: column; + } + :host([orientation='horizontal']) .positioning-region { + flex-direction: row; + } + ::slotted([slot='label']) { + color: ${foreground}; + font-size: ${typeRampBaseFontSize}; + margin: calc(${designUnit} * 1px) 0; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js + var RadioGroup2, vsCodeRadioGroup; + var init_radio_group3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js"() { + init_dist2(); + init_esm2(); + init_radio_group_styles(); + RadioGroup2 = class extends RadioGroup { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const label = this.querySelector("label"); + if (label) { + const id = "radio-group-" + Math.random().toString(16).slice(2); + label.setAttribute("id", id); + this.setAttribute("aria-labelledby", id); + } + } + }; + vsCodeRadioGroup = RadioGroup2.compose({ + baseName: "radio-group", + template: radioGroupTemplate, + styles: radioGroupStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js + var radioStyles; + var init_radio_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioStyles = (context, definition) => css` + ${display("inline-flex")} :host { + align-items: center; + flex-direction: row; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: calc(${designUnit} * 1px) 0; + outline: none; + position: relative; + transition: all 0.2s ease-in-out; + user-select: none; + } + .control { + background: ${checkboxBackground}; + border-radius: 999px; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + box-sizing: border-box; + cursor: pointer; + height: calc(${designUnit} * 4px); + position: relative; + outline: none; + width: calc(${designUnit} * 4px); + } + .label { + color: ${foreground}; + cursor: pointer; + font-family: ${fontFamily}; + margin-inline-end: calc(${designUnit} * 2px + 2px); + padding-inline-start: calc(${designUnit} * 2px + 2px); + } + .label__hidden { + display: none; + visibility: hidden; + } + .control, + .checked-indicator { + flex-shrink: 0; + } + .checked-indicator { + background: ${foreground}; + border-radius: 999px; + display: inline-block; + inset: calc(${designUnit} * 1px); + opacity: 0; + pointer-events: none; + position: absolute; + } + :host(:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:not([disabled])) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked='true']) .control { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:active { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked="true"]:${focusVisible}:not([disabled])) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([aria-checked='true']) .checked-indicator { + opacity: 1; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js + var Radio2, vsCodeRadio; + var init_radio3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js"() { + init_esm2(); + init_radio_styles(); + Radio2 = class extends Radio { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Radio"); + } + } + }; + vsCodeRadio = Radio2.compose({ + baseName: "radio", + template: radioTemplate, + styles: radioStyles, + checkedIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js + var tagStyles; + var init_tag_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + tagStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + } + .control { + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: ${tagCornerRadius}; + color: ${badgeForeground}; + padding: calc(${designUnit} * 0.5px) calc(${designUnit} * 1px); + text-transform: uppercase; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js + var Tag, vsCodeTag; + var init_tag = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js"() { + init_esm2(); + init_tag_styles(); + Tag = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.circular) { + this.circular = false; + } + } + }; + vsCodeTag = Tag.compose({ + baseName: "tag", + template: badgeTemplate, + styles: tagStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js + var textAreaStyles; + var init_text_area_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textAreaStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .control { + box-sizing: border-box; + position: relative; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + font: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: calc(${designUnit} * 2px + 1px); + width: 100%; + min-width: ${inputMinWidth}; + resize: none; + } + .control:hover:enabled { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + .control:active:enabled { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .control::-webkit-scrollbar { + width: ${scrollbarWidth}; + height: ${scrollbarHeight}; + } + .control::-webkit-scrollbar-corner { + background: ${inputBackground}; + } + .control::-webkit-scrollbar-thumb { + background: ${scrollbarSliderBackground}; + } + .control::-webkit-scrollbar-thumb:hover { + background: ${scrollbarSliderHoverBackground}; + } + .control::-webkit-scrollbar-thumb:active { + background: ${scrollbarSliderActiveBackground}; + } + :host(:focus-within:not([disabled])) .control { + border-color: ${focusBorder}; + } + :host([resize='both']) .control { + resize: both; + } + :host([resize='horizontal']) .control { + resize: horizontal; + } + :host([resize='vertical']) .control { + resize: vertical; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js + var TextArea2, vsCodeTextArea; + var init_text_area3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js"() { + init_esm2(); + init_text_area_styles(); + TextArea2 = class extends TextArea { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text area"); + } + } + }; + vsCodeTextArea = TextArea2.compose({ + baseName: "text-area", + template: textAreaTemplate, + styles: textAreaStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js + var textFieldStyles; + var init_text_field_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textFieldStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .root { + box-sizing: border-box; + position: relative; + display: flex; + flex-direction: row; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + height: calc(${inputHeight} * 1px); + min-width: ${inputMinWidth}; + } + .control { + -webkit-appearance: none; + font: inherit; + background: transparent; + border: 0; + color: inherit; + height: calc(100% - (${designUnit} * 1px)); + width: 100%; + margin-top: auto; + margin-bottom: auto; + border: none; + padding: 0 calc(${designUnit} * 2px + 1px); + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + .start, + .end { + display: flex; + margin: auto; + fill: currentcolor; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-start: calc(${designUnit} * 2px); + } + .end { + margin-inline-end: calc(${designUnit} * 2px); + } + :host(:hover:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + :host(:active:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + :host(:focus-within:not([disabled])) .root { + border-color: ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js + var TextField2, vsCodeTextField; + var init_text_field3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js"() { + init_esm2(); + init_text_field_styles(); + TextField2 = class extends TextField { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text field"); + } + } + }; + vsCodeTextField = TextField2.compose({ + baseName: "text-field", + template: textFieldTemplate, + styles: textFieldStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js + var allComponents; + var init_custom_elements = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js"() { + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + allComponents = { + vsCodeBadge, + vsCodeButton, + vsCodeCheckbox, + vsCodeDataGrid, + vsCodeDataGridCell, + vsCodeDataGridRow, + vsCodeDivider, + vsCodeDropdown, + vsCodeLink, + vsCodeOption, + vsCodePanels, + vsCodePanelTab, + vsCodePanelView, + vsCodeProgressRing, + vsCodeRadioGroup, + vsCodeRadio, + vsCodeTag, + vsCodeTextArea, + vsCodeTextField, + register(container, ...rest) { + if (!container) { + return; + } + for (const key in this) { + if (key === "register") { + continue; + } + this[key]().register(container, ...rest); + } + } + }; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/index.js + var dist_exports = {}; + __export(dist_exports, { + Badge: () => Badge2, + Button: () => Button2, + Checkbox: () => Checkbox2, + DataGrid: () => DataGrid2, + DataGridCell: () => DataGridCell2, + DataGridCellTypes: () => DataGridCellTypes, + DataGridRow: () => DataGridRow2, + DataGridRowTypes: () => DataGridRowTypes, + Divider: () => Divider2, + DividerRole: () => DividerRole, + Dropdown: () => Dropdown, + DropdownPosition: () => SelectPosition, + GenerateHeaderOptions: () => GenerateHeaderOptions, + Link: () => Link, + Option: () => Option2, + PanelTab: () => PanelTab, + PanelView: () => PanelView, + Panels: () => Panels, + ProgressRing: () => ProgressRing, + Radio: () => Radio2, + RadioGroup: () => RadioGroup2, + RadioGroupOrientation: () => Orientation, + Tag: () => Tag, + TextArea: () => TextArea2, + TextAreaResize: () => TextAreaResize, + TextField: () => TextField2, + TextFieldType: () => TextFieldType, + allComponents: () => allComponents, + provideVSCodeDesignSystem: () => provideVSCodeDesignSystem, + vsCodeBadge: () => vsCodeBadge, + vsCodeButton: () => vsCodeButton, + vsCodeCheckbox: () => vsCodeCheckbox, + vsCodeDataGrid: () => vsCodeDataGrid, + vsCodeDataGridCell: () => vsCodeDataGridCell, + vsCodeDataGridRow: () => vsCodeDataGridRow, + vsCodeDivider: () => vsCodeDivider, + vsCodeDropdown: () => vsCodeDropdown, + vsCodeLink: () => vsCodeLink, + vsCodeOption: () => vsCodeOption, + vsCodePanelTab: () => vsCodePanelTab, + vsCodePanelView: () => vsCodePanelView, + vsCodePanels: () => vsCodePanels, + vsCodeProgressRing: () => vsCodeProgressRing, + vsCodeRadio: () => vsCodeRadio, + vsCodeRadioGroup: () => vsCodeRadioGroup, + vsCodeTag: () => vsCodeTag, + vsCodeTextArea: () => vsCodeTextArea, + vsCodeTextField: () => vsCodeTextField + }); + var init_dist3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/index.js"() { + init_vscode_design_system(); + init_custom_elements(); + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + } + }); + + // src/webview/shared/domUtils.ts + function el(tag, className, text) { + const node = document.createElement(tag); + if (className) { + node.className = className; + } + if (text !== void 0) { + node.textContent = text; + } + return node; + } + function createButton(configOrId, label, appearance) { + const button = document.createElement("vscode-button"); + if (typeof configOrId === "string") { + button.id = configOrId; + button.textContent = label || ""; + if (appearance) { + button.setAttribute("appearance", appearance); + } + } else { + const config = configOrId; + button.id = config.id; + button.textContent = config.label; + if (config.appearance) { + button.setAttribute("appearance", config.appearance); + } + } + return button; + } + + // src/webview/shared/buttonConfig.ts + var BUTTONS = { + "btn-refresh": { + id: "btn-refresh", + label: "\u{1F504} Refresh", + appearance: "primary" + }, + "btn-details": { + id: "btn-details", + label: "\u{1F916} Details" + }, + "btn-chart": { + id: "btn-chart", + label: "\u{1F4C8} Chart" + }, + "btn-usage": { + id: "btn-usage", + label: "\u{1F4CA} Usage Analysis" + }, + "btn-diagnostics": { + id: "btn-diagnostics", + label: "\u{1F50D} Diagnostics" + }, + "btn-maturity": { + id: "btn-maturity", + label: "\u{1F3AF} Fluency Score" + }, + "btn-dashboard": { + id: "btn-dashboard", + label: "\u{1F4CA} Team Dashboard" + }, + "btn-level-viewer": { + id: "btn-level-viewer", + label: "\u{1F50D} Level Viewer" + }, + "btn-environmental": { + id: "btn-environmental", + label: "\u{1F33F} Environmental Impact" + } + }; + + // src/tokenEstimators.json + var tokenEstimators_default = { + $schema: "http://json-schema.org/draft-07/schema#", + description: "Character-to-token ratio estimators for different AI models. Used to estimate token counts from text length.", + estimators: { + "gpt-4": 0.25, + "gpt-4.1": 0.25, + "gpt-4.1-mini": 0.25, + "gpt-4o": 0.25, + "gpt-4o-mini": 0.25, + "gpt-4-turbo": 0.25, + "gpt-3.5-turbo": 0.25, + "gpt-5": 0.25, + "gpt-5-codex": 0.25, + "gpt-5-mini": 0.25, + "gpt-5.1": 0.25, + "gpt-5.1-codex": 0.25, + "gpt-5.1-codex-max": 0.25, + "gpt-5.1-codex-mini": 0.25, + "gpt-5.2": 0.25, + "gpt-5.2-codex": 0.25, + "gpt-5.2-pro": 0.25, + "gpt-5.3-codex": 0.25, + "gpt-5.4": 0.25, + "gpt-4.1-nano": 0.25, + "gemini-2.0-flash": 0.25, + "gemini-2.0-flash-lite": 0.25, + "gemini-2.5-flash": 0.25, + "gemini-2.5-flash-lite": 0.25, + "claude-sonnet-3.5": 0.24, + "claude-sonnet-3.7": 0.24, + "claude-sonnet-4": 0.24, + "claude-sonnet-4.5": 0.24, + "claude-sonnet-4.6": 0.24, + "claude-haiku": 0.24, + "claude-haiku-4.5": 0.24, + "claude-opus-4.1": 0.24, + "claude-opus-4.5": 0.24, + "claude-opus-4.6": 0.24, + "claude-opus-4.6-(fast-mode)-(preview)": 0.24, + "claude-opus-4.6-fast": 0.24, + "gemini-2.5-pro": 0.25, + "gemini-3-flash": 0.25, + "gemini-3-pro": 0.25, + "gemini-3-pro-preview": 0.25, + "gemini-3.1-pro": 0.25, + "grok-code-fast-1": 0.25, + "raptor-mini": 0.25, + goldeneye: 0.25, + "o1-preview": 0.25, + "o1-mini": 0.25, + "o3-mini": 0.25, + "o4-mini": 0.25 + } + }; + + // src/webview/shared/formatUtils.ts + var tokenEstimators = tokenEstimators_default.estimators; + var currentLocale; + function formatFixed(value, digits) { + return new Intl.NumberFormat(currentLocale, { + minimumFractionDigits: digits, + maximumFractionDigits: digits + }).format(value); + } + function formatNumber(value) { + return value.toLocaleString(currentLocale); + } + + // src/webview/shared/theme.css + var theme_default = '/**\n * Shared theme variables for all webview panels\n * Uses VS Code theme tokens for automatic light/dark theme support\n */\n\n:root {\n /* VS Code base colors */\n --bg-primary: var(--vscode-editor-background);\n --bg-secondary: var(--vscode-sideBar-background);\n --bg-tertiary: var(--vscode-editorWidget-background);\n --text-primary: var(--vscode-editor-foreground);\n --text-secondary: var(--vscode-descriptionForeground);\n --text-muted: var(--vscode-disabledForeground);\n --border-color: var(--vscode-panel-border);\n --border-subtle: var(--vscode-widget-border);\n \n /* Button colors */\n --button-bg: var(--vscode-button-background);\n --button-fg: var(--vscode-button-foreground);\n --button-hover-bg: var(--vscode-button-hoverBackground);\n --button-secondary-bg: var(--vscode-button-secondaryBackground);\n --button-secondary-fg: var(--vscode-button-secondaryForeground);\n --button-secondary-hover-bg: var(--vscode-button-secondaryHoverBackground);\n \n /* Input colors */\n --input-bg: var(--vscode-input-background);\n --input-fg: var(--vscode-input-foreground);\n --input-border: var(--vscode-input-border);\n \n /* List/card colors */\n --list-hover-bg: var(--vscode-list-hoverBackground);\n --list-active-bg: var(--vscode-list-activeSelectionBackground);\n --list-active-fg: var(--vscode-list-activeSelectionForeground);\n --list-inactive-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Alternating row colors for better readability */\n --row-alternate-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Badge colors */\n --badge-bg: var(--vscode-badge-background);\n --badge-fg: var(--vscode-badge-foreground);\n \n /* Focus colors */\n --focus-border: var(--vscode-focusBorder);\n \n /* Link colors */\n --link-color: var(--vscode-textLink-foreground);\n --link-hover-color: var(--vscode-textLink-activeForeground);\n \n /* Status colors */\n --error-fg: var(--vscode-errorForeground);\n --warning-fg: var(--vscode-editorWarning-foreground);\n --success-fg: var(--vscode-terminal-ansiGreen);\n \n /* Shadow for cards */\n --shadow-color: rgb(0, 0, 0, 0.16);\n --shadow-hover-color: rgb(0, 0, 0, 0.24);\n}\n\n/* Light theme adjustments */\nbody[data-vscode-theme-kind="vscode-light"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --shadow-color: rgb(0, 0, 0, 0.08);\n --shadow-hover-color: rgb(0, 0, 0, 0.12);\n}\n\n/* High contrast mode adjustments */\nbody[data-vscode-theme-kind="vscode-high-contrast"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --border-color: var(--vscode-contrastBorder);\n --border-subtle: var(--vscode-contrastBorder);\n}\n'; + + // src/webview/environmental/styles.css + var styles_default = "body {\n margin: 0;\n background: var(--bg-primary);\n color: var(--text-primary);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.container {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n padding-bottom: 4px;\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 700;\n color: var(--text-primary);\n}\n\n.button-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.sections {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.section {\n background: var(--bg-secondary);\n border: 1px solid var(--border-color);\n border-radius: 10px;\n padding: 12px;\n box-shadow: 0 4px 10px var(--shadow-color);\n}\n\n.section h3 {\n margin: 0 0 10px;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--text-primary);\n letter-spacing: 0.2px;\n}\n\n/* --- Metric cards --- */\n.metric-cards {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.metric-card {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-subtle);\n border-radius: 8px;\n padding: 14px 16px;\n}\n\n.metric-card-header {\n display: flex;\n align-items: center;\n gap: 7px;\n margin-bottom: 12px;\n}\n\n.metric-card-icon {\n font-size: 16px;\n line-height: 1;\n}\n\n.metric-card-label {\n font-size: 13px;\n font-weight: 700;\n color: var(--text-primary);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n\n.metric-primary-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--text-primary);\n padding: 6px 0 10px;\n border-bottom: 1px solid var(--border-subtle);\n margin-bottom: 8px;\n}\n\n.analogy-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n}\n\n.analogy-col {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.analogy-col-header {\n font-size: 11px;\n font-weight: 700;\n color: var(--text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding-bottom: 5px;\n border-bottom: 1px solid var(--border-subtle);\n margin-bottom: 2px;\n}\n\n.analogy-item {\n display: flex;\n align-items: baseline;\n gap: 6px;\n font-size: 12px;\n color: var(--text-primary);\n line-height: 1.5;\n}\n\n.analogy-icon {\n flex-shrink: 0;\n width: 20px;\n text-align: center;\n font-size: 13px;\n}\n\n.notes {\n margin: 4px 0 0;\n padding-left: 16px;\n color: var(--text-secondary);\n}\n\n.notes li {\n margin: 4px 0;\n line-height: 1.4;\n}\n\n.footer {\n color: var(--text-muted);\n font-size: 11px;\n margin-top: 6px;\n}\n\n.section-intro {\n color: var(--text-secondary);\n font-size: 12px;\n margin: 0 0 10px;\n line-height: 1.5;\n}\n"; + + // src/webview/environmental/main.ts + var CO2_GRAMS_PER_CAR_KM = 120; + var CO2_GRAMS_PER_KETTLE_BOIL = 20; + var CO2_GRAMS_PER_TRAIN_KM = 41; + var CO2_GRAMS_PER_FLIGHT_KM = 180; + var CO2_GRAMS_PER_PHONE_CHARGE = 8; + var CO2_GRAMS_PER_LED_HOUR = 3; + var WATER_LITERS_PER_SHOWER_MINUTE = 8; + var WATER_LITERS_PER_WASHER_LOAD = 50; + var WATER_LITERS_PER_MUG = 0.25; + var WATER_LITERS_PER_BATHTUB = 150; + var WATER_LITERS_PER_DISHWASHER = 12; + var WATER_LITERS_DAILY_DRINKING = 2; + var vscode = acquireVsCodeApi(); + var initialData = window.__INITIAL_ENVIRONMENTAL__; + function calculateProjection(last30DaysValue) { + return last30DaysValue / 30 * 365.25; + } + function smartFixed(value) { + if (value < 1e-3) { + return formatFixed(value, 6); + } + if (value < 1) { + return formatFixed(value, 4); + } + if (value <= 100) { + return formatFixed(value, 2); + } + if (value <= 1e3) { + return formatFixed(value, 1); + } + return formatFixed(Math.round(value), 0); + } + var co2AnalogyItems = (grams) => [ + { icon: "\u{1F697}", text: `${smartFixed(grams / CO2_GRAMS_PER_CAR_KM)} km driving (EU petrol car)` }, + { icon: "\u{1F682}", text: `${smartFixed(grams / CO2_GRAMS_PER_TRAIN_KM)} km by train (EU intercity)` }, + { icon: "\u2708\uFE0F", text: `${smartFixed(grams / CO2_GRAMS_PER_FLIGHT_KM)} km flying (economy, short-haul)` }, + { icon: "\u{1FAD6}", text: `${smartFixed(grams / CO2_GRAMS_PER_KETTLE_BOIL)} kettle boils` }, + { icon: "\u{1F4F1}", text: `${smartFixed(grams / CO2_GRAMS_PER_PHONE_CHARGE)} smartphone charges` }, + { icon: "\u{1F4A1}", text: `${smartFixed(grams / CO2_GRAMS_PER_LED_HOUR)} hours of LED lighting (10 W)` } + ]; + var waterAnalogyItems = (liters) => [ + { icon: "\u2615", text: `${smartFixed(liters / WATER_LITERS_PER_MUG)} mugs of tea/coffee` }, + { icon: "\u{1F6BF}", text: `${smartFixed(liters / WATER_LITERS_PER_SHOWER_MINUTE)} shower minutes` }, + { icon: "\u{1F455}", text: `${smartFixed(liters / WATER_LITERS_PER_WASHER_LOAD)} washing machine loads` }, + { icon: "\u{1F6C1}", text: `${smartFixed(liters / WATER_LITERS_PER_BATHTUB)} standard bathtubs` }, + { icon: "\u{1F37D}\uFE0F", text: `${smartFixed(liters / WATER_LITERS_PER_DISHWASHER)} dishwasher cycles` }, + { icon: "\u{1F4A7}", text: `${smartFixed(liters / WATER_LITERS_DAILY_DRINKING)} days of drinking water` } + ]; + var treeAnalogyItems = (fraction) => { + const daysAbsorbed = fraction * 365.25; + if (fraction >= 1) { + return [ + { icon: "\u{1F333}", text: `${smartFixed(fraction)} \xD7 a tree's full annual CO\u2082 absorption` }, + { icon: "\u{1F332}", text: `Plant ${Math.ceil(fraction)} trees to fully offset this per year` } + ]; + } + return [ + { icon: "\u{1F333}", text: `${smartFixed(fraction * 100)} % of one tree's annual absorption` }, + { icon: "\u{1F4C5}", text: `1 tree absorbs this CO\u2082 in about ${smartFixed(daysAbsorbed)} days` } + ]; + }; + function render(stats) { + const root = document.getElementById("root"); + if (!root) { + return; + } + const projectedCo2 = calculateProjection(stats.last30Days.co2); + const projectedWater = calculateProjection(stats.last30Days.waterUsage); + const projectedTrees = calculateProjection(stats.last30Days.treesEquivalent); + const projectedTokens = Math.round(calculateProjection(stats.last30Days.tokens)); + const lastUpdated = new Date(stats.lastUpdated); + root.replaceChildren(); + const themeStyle = document.createElement("style"); + themeStyle.textContent = theme_default; + const style = document.createElement("style"); + style.textContent = styles_default; + const container = el("div", "container"); + const header = el("div", "header"); + const title = el("div", "title", "\u{1F33F} Environmental Impact"); + const buttonRow = el("div", "button-row"); + buttonRow.append( + createButton(BUTTONS["btn-refresh"]), + createButton(BUTTONS["btn-details"]), + createButton(BUTTONS["btn-chart"]), + createButton(BUTTONS["btn-usage"]), + createButton(BUTTONS["btn-diagnostics"]), + createButton(BUTTONS["btn-maturity"]) + ); + if (stats.backendConfigured) { + buttonRow.append(createButton(BUTTONS["btn-dashboard"])); + } + header.append(title, buttonRow); + const footer = el("div", "footer", `Last updated: ${lastUpdated.toLocaleString()} \xB7 Updates every 5 minutes`); + const sections = el("div", "sections"); + sections.append(buildImpactCards(stats, projectedTokens, projectedCo2, projectedWater, projectedTrees)); + sections.append(buildEstimatesSection()); + container.append(header, sections, footer); + root.append(themeStyle, style, container); + wireButtons(); + } + function buildImpactCards(stats, projectedTokens, projectedCo2, projectedWater, projectedTrees) { + const section = el("div", "section"); + const heading = el("h3"); + heading.textContent = "\u{1F30D} Impact at a Glance"; + section.append(heading); + const intro = el("p", "section-intro"); + intro.textContent = "All figures are estimates based on average data center energy and water consumption figures. Analogies use European averages. Treat these as order-of-magnitude indicators, not precise measurements."; + section.append(intro); + const periods = [ + // Tokens card: 4 periods, no analogies + [ + ["\u{1F4C5} Today", formatNumber(stats.today.tokens), null], + ["\u{1F4C8} Last 30 Days", formatNumber(stats.last30Days.tokens), null], + ["\u{1F4C6} Previous Month", formatNumber(stats.lastMonth.tokens), null], + ["\u{1F30D} Projected Year", formatNumber(projectedTokens), null] + ], + // CO₂ card + [ + ["\u{1F4C5} Today", `${smartFixed(stats.today.co2)} g`, co2AnalogyItems(stats.today.co2)], + ["\u{1F4C8} Last 30 Days", `${smartFixed(stats.last30Days.co2)} g`, co2AnalogyItems(stats.last30Days.co2)], + ["\u{1F4C6} Previous Month", `${smartFixed(stats.lastMonth.co2)} g`, co2AnalogyItems(stats.lastMonth.co2)], + ["\u{1F30D} Projected Year", `${smartFixed(projectedCo2)} g`, co2AnalogyItems(projectedCo2)] + ], + // Water card + [ + ["\u{1F4C5} Today", `${smartFixed(stats.today.waterUsage)} L`, waterAnalogyItems(stats.today.waterUsage)], + ["\u{1F4C8} Last 30 Days", `${smartFixed(stats.last30Days.waterUsage)} L`, waterAnalogyItems(stats.last30Days.waterUsage)], + ["\u{1F4C6} Previous Month", `${smartFixed(stats.lastMonth.waterUsage)} L`, waterAnalogyItems(stats.lastMonth.waterUsage)], + ["\u{1F30D} Projected Year", `${smartFixed(projectedWater)} L`, waterAnalogyItems(projectedWater)] + ], + // Trees card + [ + ["\u{1F4C5} Today", `${smartFixed(stats.today.treesEquivalent)} \u{1F333}`, treeAnalogyItems(stats.today.treesEquivalent)], + ["\u{1F4C8} Last 30 Days", `${smartFixed(stats.last30Days.treesEquivalent)} \u{1F333}`, treeAnalogyItems(stats.last30Days.treesEquivalent)], + ["\u{1F4C6} Previous Month", `${smartFixed(stats.lastMonth.treesEquivalent)} \u{1F333}`, treeAnalogyItems(stats.lastMonth.treesEquivalent)], + ["\u{1F30D} Projected Year", `${smartFixed(projectedTrees)} \u{1F333}`, treeAnalogyItems(projectedTrees)] + ] + ]; + const metricHeaders = [ + { icon: "\u{1F7E3}", label: "Tokens (total)", color: "#c37bff" }, + { icon: "\u{1F331}", label: "Estimated CO\u2082", color: "#7fe36f" }, + { icon: "\u{1F4A7}", label: "Estimated Water", color: "#6fc3ff" }, + { icon: "\u{1F333}", label: "Tree equivalent", color: "#9de67f" } + ]; + const cards = el("div", "metric-cards"); + periods.forEach((periodCols, i) => { + const card = el("div", "metric-card"); + const cardHeader = el("div", "metric-card-header"); + const iconEl = el("span", "metric-card-icon", metricHeaders[i].icon); + iconEl.style.color = metricHeaders[i].color; + const labelEl = el("span", "metric-card-label", metricHeaders[i].label); + cardHeader.append(iconEl, labelEl); + card.append(cardHeader); + const grid = el("div", "analogy-grid"); + periodCols.forEach(([periodLabel, primaryValue, analogies]) => { + const col = el("div", "analogy-col"); + col.append(el("div", "analogy-col-header", periodLabel)); + col.append(el("div", "metric-primary-value", primaryValue)); + if (analogies) { + analogies.forEach((item) => { + const itemEl = el("div", "analogy-item"); + const itemIcon = el("span", "analogy-icon", item.icon); + const itemText = document.createElement("span"); + itemText.textContent = item.text; + itemEl.append(itemIcon, itemText); + col.append(itemEl); + }); + } + grid.append(col); + }); + card.append(grid); + cards.append(card); + }); + section.append(cards); + return section; + } + function buildEstimatesSection() { + const section = el("div", "section"); + const heading = el("h3"); + heading.textContent = "\u{1F4A1} Calculation & Estimates"; + section.append(heading); + const notes = document.createElement("ul"); + notes.className = "notes"; + const items = [ + "Cost estimate uses public API pricing with input/output token counts; GitHub Copilot billing may differ from direct API usage.", + "Estimated CO\u2082 is based on ~0.2 g CO\u2082e per 1,000 tokens (average data center energy mix and PUE).", + "Estimated water usage is based on ~0.3 L per 1,000 tokens (data center cooling estimates).", + "Tree equivalent represents the fraction of a single mature tree's annual CO\u2082 absorption (~21 kg/year).", + "CO\u2082 analogies: petrol car \u2248 120 g/km \xB7 intercity train \u2248 41 g/km \xB7 economy flight \u2248 180 g/km (ICAO avg.) \xB7 smartphone charge \u2248 8 g \xB7 LED bulb \u2248 3 g/hr (10 W, EU grid) \xB7 kettle boil \u2248 20 g.", + "Water analogies: shower \u2248 8 L/min \xB7 washing machine \u2248 50 L \xB7 standard bathtub \u2248 150 L \xB7 dishwasher \u2248 12 L \xB7 mug of tea \u2248 250 mL \xB7 daily drinking water \u2248 2 L/person.", + "All analogies are order-of-magnitude estimates. Actual values depend on your region's energy mix and device efficiency." + ]; + items.forEach((text) => { + const li = document.createElement("li"); + li.textContent = text; + notes.append(li); + }); + section.append(notes); + return section; + } + function wireButtons() { + document.getElementById("btn-refresh")?.addEventListener("click", () => vscode.postMessage({ command: "refresh" })); + document.getElementById("btn-details")?.addEventListener("click", () => vscode.postMessage({ command: "showDetails" })); + document.getElementById("btn-chart")?.addEventListener("click", () => vscode.postMessage({ command: "showChart" })); + document.getElementById("btn-usage")?.addEventListener("click", () => vscode.postMessage({ command: "showUsageAnalysis" })); + document.getElementById("btn-diagnostics")?.addEventListener("click", () => vscode.postMessage({ command: "showDiagnostics" })); + document.getElementById("btn-maturity")?.addEventListener("click", () => vscode.postMessage({ command: "showMaturity" })); + document.getElementById("btn-dashboard")?.addEventListener("click", () => vscode.postMessage({ command: "showDashboard" })); + } + window.addEventListener("message", (event) => { + const message = event.data; + if (message.command === "updateStats") { + render(message.data); + } + }); + async function bootstrap() { + const { provideVSCodeDesignSystem: provideVSCodeDesignSystem2, vsCodeButton: vsCodeButton2 } = await Promise.resolve().then(() => (init_dist3(), dist_exports)); + provideVSCodeDesignSystem2().register(vsCodeButton2()); + if (initialData) { + render(initialData); + } else { + const root = document.getElementById("root"); + if (root) { + root.textContent = ""; + const fallback = document.createElement("div"); + fallback.style.padding = "16px"; + fallback.style.color = "#e7e7e7"; + fallback.textContent = "No data available."; + root.append(fallback); + } + } + } + bootstrap(); +})(); +/*! Bundled license information: + +tslib/tslib.es6.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) + +tabbable/dist/index.esm.js: + (*! + * tabbable 5.3.3 + * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE + *) +*/ +//# sourceMappingURL=environmental.js.map diff --git a/visualstudio-extension/src/CopilotTokenTracker/webview/maturity.js b/visualstudio-extension/src/CopilotTokenTracker/webview/maturity.js new file mode 100644 index 00000000..6d906013 --- /dev/null +++ b/visualstudio-extension/src/CopilotTokenTracker/webview/maturity.js @@ -0,0 +1,29532 @@ +"use strict"; +(() => { + var __create = Object.create; + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __getProtoOf = Object.getPrototypeOf; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; + var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; + var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod + )); + + // node_modules/html2canvas/dist/html2canvas.js + var require_html2canvas = __commonJS({ + "node_modules/html2canvas/dist/html2canvas.js"(exports, module) { + (function(global2, factory) { + typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.html2canvas = factory()); + })(exports, (function() { + "use strict"; + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + var __assign = function() { + __assign = Object.assign || function __assign2(t) { + for (var s, i2 = 1, n = arguments.length; i2 < n; i2++) { + s = arguments[i2]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e2) { + reject(e2); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e2) { + reject(e2); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { + if (t[0] & 1) throw t[1]; + return t[1]; + }, trys: [], ops: [] }, f2, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { + return this; + }), g; + function verb(n) { + return function(v) { + return step([n, v]); + }; + } + function step(op) { + if (f2) throw new TypeError("Generator is already executing."); + while (_) try { + if (f2 = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e2) { + op = [6, e2]; + y = 0; + } finally { + f2 = t = 0; + } + if (op[0] & 5) throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + } + function __spreadArray(to, from, pack2) { + if (pack2 || arguments.length === 2) for (var i2 = 0, l = from.length, ar; i2 < l; i2++) { + if (ar || !(i2 in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i2); + ar[i2] = from[i2]; + } + } + return to.concat(ar || from); + } + var Bounds = ( + /** @class */ + (function() { + function Bounds2(left, top, width, height) { + this.left = left; + this.top = top; + this.width = width; + this.height = height; + } + Bounds2.prototype.add = function(x, y, w, h) { + return new Bounds2(this.left + x, this.top + y, this.width + w, this.height + h); + }; + Bounds2.fromClientRect = function(context, clientRect) { + return new Bounds2(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height); + }; + Bounds2.fromDOMRectList = function(context, domRectList) { + var domRect = Array.from(domRectList).find(function(rect) { + return rect.width !== 0; + }); + return domRect ? new Bounds2(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height) : Bounds2.EMPTY; + }; + Bounds2.EMPTY = new Bounds2(0, 0, 0, 0); + return Bounds2; + })() + ); + var parseBounds = function(context, node) { + return Bounds.fromClientRect(context, node.getBoundingClientRect()); + }; + var parseDocumentSize = function(document2) { + var body = document2.body; + var documentElement = document2.documentElement; + if (!body || !documentElement) { + throw new Error("Unable to get document size"); + } + var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth)); + var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight)); + return new Bounds(0, 0, width, height); + }; + var toCodePoints$1 = function(str) { + var codePoints = []; + var i2 = 0; + var length = str.length; + while (i2 < length) { + var value = str.charCodeAt(i2++); + if (value >= 55296 && value <= 56319 && i2 < length) { + var extra = str.charCodeAt(i2++); + if ((extra & 64512) === 56320) { + codePoints.push(((value & 1023) << 10) + (extra & 1023) + 65536); + } else { + codePoints.push(value); + i2--; + } + } else { + codePoints.push(value); + } + } + return codePoints; + }; + var fromCodePoint$1 = function() { + var codePoints = []; + for (var _i = 0; _i < arguments.length; _i++) { + codePoints[_i] = arguments[_i]; + } + if (String.fromCodePoint) { + return String.fromCodePoint.apply(String, codePoints); + } + var length = codePoints.length; + if (!length) { + return ""; + } + var codeUnits = []; + var index = -1; + var result = ""; + while (++index < length) { + var codePoint = codePoints[index]; + if (codePoint <= 65535) { + codeUnits.push(codePoint); + } else { + codePoint -= 65536; + codeUnits.push((codePoint >> 10) + 55296, codePoint % 1024 + 56320); + } + if (index + 1 === length || codeUnits.length > 16384) { + result += String.fromCharCode.apply(String, codeUnits); + codeUnits.length = 0; + } + } + return result; + }; + var chars$2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var lookup$2 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256); + for (var i$2 = 0; i$2 < chars$2.length; i$2++) { + lookup$2[chars$2.charCodeAt(i$2)] = i$2; + } + var chars$1$1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var lookup$1$1 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256); + for (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) { + lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1; + } + var decode$1 = function(base642) { + var bufferLength = base642.length * 0.75, len = base642.length, i2, p = 0, encoded1, encoded2, encoded3, encoded4; + if (base642[base642.length - 1] === "=") { + bufferLength--; + if (base642[base642.length - 2] === "=") { + bufferLength--; + } + } + var buffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.slice !== "undefined" ? new ArrayBuffer(bufferLength) : new Array(bufferLength); + var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer); + for (i2 = 0; i2 < len; i2 += 4) { + encoded1 = lookup$1$1[base642.charCodeAt(i2)]; + encoded2 = lookup$1$1[base642.charCodeAt(i2 + 1)]; + encoded3 = lookup$1$1[base642.charCodeAt(i2 + 2)]; + encoded4 = lookup$1$1[base642.charCodeAt(i2 + 3)]; + bytes[p++] = encoded1 << 2 | encoded2 >> 4; + bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; + } + return buffer; + }; + var polyUint16Array$1 = function(buffer) { + var length = buffer.length; + var bytes = []; + for (var i2 = 0; i2 < length; i2 += 2) { + bytes.push(buffer[i2 + 1] << 8 | buffer[i2]); + } + return bytes; + }; + var polyUint32Array$1 = function(buffer) { + var length = buffer.length; + var bytes = []; + for (var i2 = 0; i2 < length; i2 += 4) { + bytes.push(buffer[i2 + 3] << 24 | buffer[i2 + 2] << 16 | buffer[i2 + 1] << 8 | buffer[i2]); + } + return bytes; + }; + var UTRIE2_SHIFT_2$1 = 5; + var UTRIE2_SHIFT_1$1 = 6 + 5; + var UTRIE2_INDEX_SHIFT$1 = 2; + var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1; + var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 65536 >> UTRIE2_SHIFT_2$1; + var UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1; + var UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1; + var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 1024 >> UTRIE2_SHIFT_2$1; + var UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1; + var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1; + var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 2048 >> 6; + var UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1; + var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 65536 >> UTRIE2_SHIFT_1$1; + var UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1; + var UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1; + var slice16$1 = function(view, start, end) { + if (view.slice) { + return view.slice(start, end); + } + return new Uint16Array(Array.prototype.slice.call(view, start, end)); + }; + var slice32$1 = function(view, start, end) { + if (view.slice) { + return view.slice(start, end); + } + return new Uint32Array(Array.prototype.slice.call(view, start, end)); + }; + var createTrieFromBase64$1 = function(base642, _byteLength) { + var buffer = decode$1(base642); + var view32 = Array.isArray(buffer) ? polyUint32Array$1(buffer) : new Uint32Array(buffer); + var view16 = Array.isArray(buffer) ? polyUint16Array$1(buffer) : new Uint16Array(buffer); + var headerLength = 24; + var index = slice16$1(view16, headerLength / 2, view32[4] / 2); + var data = view32[5] === 2 ? slice16$1(view16, (headerLength + view32[4]) / 2) : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4)); + return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data); + }; + var Trie$1 = ( + /** @class */ + (function() { + function Trie2(initialValue, errorValue, highStart, highValueIndex, index, data) { + this.initialValue = initialValue; + this.errorValue = errorValue; + this.highStart = highStart; + this.highValueIndex = highValueIndex; + this.index = index; + this.data = data; + } + Trie2.prototype.get = function(codePoint) { + var ix; + if (codePoint >= 0) { + if (codePoint < 55296 || codePoint > 56319 && codePoint <= 65535) { + ix = this.index[codePoint >> UTRIE2_SHIFT_2$1]; + ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1); + return this.data[ix]; + } + if (codePoint <= 65535) { + ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + (codePoint - 55296 >> UTRIE2_SHIFT_2$1)]; + ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1); + return this.data[ix]; + } + if (codePoint < this.highStart) { + ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1); + ix = this.index[ix]; + ix += codePoint >> UTRIE2_SHIFT_2$1 & UTRIE2_INDEX_2_MASK$1; + ix = this.index[ix]; + ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1); + return this.data[ix]; + } + if (codePoint <= 1114111) { + return this.data[this.highValueIndex]; + } + } + return this.errorValue; + }; + return Trie2; + })() + ); + var chars$3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var lookup$3 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256); + for (var i$3 = 0; i$3 < chars$3.length; i$3++) { + lookup$3[chars$3.charCodeAt(i$3)] = i$3; + } + var base64$1 = "KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA=="; + var LETTER_NUMBER_MODIFIER = 50; + var BK = 1; + var CR$1 = 2; + var LF$1 = 3; + var CM = 4; + var NL = 5; + var WJ = 7; + var ZW = 8; + var GL = 9; + var SP = 10; + var ZWJ$1 = 11; + var B2 = 12; + var BA = 13; + var BB = 14; + var HY = 15; + var CB = 16; + var CL = 17; + var CP = 18; + var EX = 19; + var IN = 20; + var NS = 21; + var OP = 22; + var QU = 23; + var IS = 24; + var NU = 25; + var PO = 26; + var PR = 27; + var SY = 28; + var AI = 29; + var AL = 30; + var CJ = 31; + var EB = 32; + var EM = 33; + var H2 = 34; + var H3 = 35; + var HL = 36; + var ID = 37; + var JL = 38; + var JV = 39; + var JT = 40; + var RI$1 = 41; + var SA = 42; + var XX = 43; + var ea_OP = [9001, 65288]; + var BREAK_MANDATORY = "!"; + var BREAK_NOT_ALLOWED$1 = "\xD7"; + var BREAK_ALLOWED$1 = "\xF7"; + var UnicodeTrie$1 = createTrieFromBase64$1(base64$1); + var ALPHABETICS = [AL, HL]; + var HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL]; + var SPACE$1 = [SP, ZW]; + var PREFIX_POSTFIX = [PR, PO]; + var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1); + var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3]; + var HYPHEN = [HY, BA]; + var codePointsToCharacterClasses = function(codePoints, lineBreak2) { + if (lineBreak2 === void 0) { + lineBreak2 = "strict"; + } + var types = []; + var indices = []; + var categories = []; + codePoints.forEach(function(codePoint, index) { + var classType = UnicodeTrie$1.get(codePoint); + if (classType > LETTER_NUMBER_MODIFIER) { + categories.push(true); + classType -= LETTER_NUMBER_MODIFIER; + } else { + categories.push(false); + } + if (["normal", "auto", "loose"].indexOf(lineBreak2) !== -1) { + if ([8208, 8211, 12316, 12448].indexOf(codePoint) !== -1) { + indices.push(index); + return types.push(CB); + } + } + if (classType === CM || classType === ZWJ$1) { + if (index === 0) { + indices.push(index); + return types.push(AL); + } + var prev = types[index - 1]; + if (LINE_BREAKS.indexOf(prev) === -1) { + indices.push(indices[index - 1]); + return types.push(prev); + } + indices.push(index); + return types.push(AL); + } + indices.push(index); + if (classType === CJ) { + return types.push(lineBreak2 === "strict" ? NS : ID); + } + if (classType === SA) { + return types.push(AL); + } + if (classType === AI) { + return types.push(AL); + } + if (classType === XX) { + if (codePoint >= 131072 && codePoint <= 196605 || codePoint >= 196608 && codePoint <= 262141) { + return types.push(ID); + } else { + return types.push(AL); + } + } + types.push(classType); + }); + return [indices, types, categories]; + }; + var isAdjacentWithSpaceIgnored = function(a2, b, currentIndex, classTypes) { + var current = classTypes[currentIndex]; + if (Array.isArray(a2) ? a2.indexOf(current) !== -1 : a2 === current) { + var i2 = currentIndex; + while (i2 <= classTypes.length) { + i2++; + var next = classTypes[i2]; + if (next === b) { + return true; + } + if (next !== SP) { + break; + } + } + } + if (current === SP) { + var i2 = currentIndex; + while (i2 > 0) { + i2--; + var prev = classTypes[i2]; + if (Array.isArray(a2) ? a2.indexOf(prev) !== -1 : a2 === prev) { + var n = currentIndex; + while (n <= classTypes.length) { + n++; + var next = classTypes[n]; + if (next === b) { + return true; + } + if (next !== SP) { + break; + } + } + } + if (prev !== SP) { + break; + } + } + } + return false; + }; + var previousNonSpaceClassType = function(currentIndex, classTypes) { + var i2 = currentIndex; + while (i2 >= 0) { + var type = classTypes[i2]; + if (type === SP) { + i2--; + } else { + return type; + } + } + return 0; + }; + var _lineBreakAtIndex = function(codePoints, classTypes, indicies, index, forbiddenBreaks) { + if (indicies[index] === 0) { + return BREAK_NOT_ALLOWED$1; + } + var currentIndex = index - 1; + if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) { + return BREAK_NOT_ALLOWED$1; + } + var beforeIndex = currentIndex - 1; + var afterIndex = currentIndex + 1; + var current = classTypes[currentIndex]; + var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0; + var next = classTypes[afterIndex]; + if (current === CR$1 && next === LF$1) { + return BREAK_NOT_ALLOWED$1; + } + if (HARD_LINE_BREAKS.indexOf(current) !== -1) { + return BREAK_MANDATORY; + } + if (HARD_LINE_BREAKS.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED$1; + } + if (SPACE$1.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED$1; + } + if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) { + return BREAK_ALLOWED$1; + } + if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) { + return BREAK_NOT_ALLOWED$1; + } + if ((current === EB || current === EM) && UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1) { + return BREAK_NOT_ALLOWED$1; + } + if (current === WJ || next === WJ) { + return BREAK_NOT_ALLOWED$1; + } + if (current === GL) { + return BREAK_NOT_ALLOWED$1; + } + if ([SP, BA, HY].indexOf(current) === -1 && next === GL) { + return BREAK_NOT_ALLOWED$1; + } + if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED$1; + } + if (previousNonSpaceClassType(currentIndex, classTypes) === OP) { + return BREAK_NOT_ALLOWED$1; + } + if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) { + return BREAK_NOT_ALLOWED$1; + } + if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) { + return BREAK_NOT_ALLOWED$1; + } + if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) { + return BREAK_NOT_ALLOWED$1; + } + if (current === SP) { + return BREAK_ALLOWED$1; + } + if (current === QU || next === QU) { + return BREAK_NOT_ALLOWED$1; + } + if (next === CB || current === CB) { + return BREAK_ALLOWED$1; + } + if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) { + return BREAK_NOT_ALLOWED$1; + } + if (before === HL && HYPHEN.indexOf(current) !== -1) { + return BREAK_NOT_ALLOWED$1; + } + if (current === SY && next === HL) { + return BREAK_NOT_ALLOWED$1; + } + if (next === IN) { + return BREAK_NOT_ALLOWED$1; + } + if (ALPHABETICS.indexOf(next) !== -1 && current === NU || ALPHABETICS.indexOf(current) !== -1 && next === NU) { + return BREAK_NOT_ALLOWED$1; + } + if (current === PR && [ID, EB, EM].indexOf(next) !== -1 || [ID, EB, EM].indexOf(current) !== -1 && next === PO) { + return BREAK_NOT_ALLOWED$1; + } + if (ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1 || PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED$1; + } + if ( + // (PR | PO) × ( OP | HY )? NU + [PR, PO].indexOf(current) !== -1 && (next === NU || [OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU) || // ( OP | HY ) × NU + [OP, HY].indexOf(current) !== -1 && next === NU || // NU × (NU | SY | IS) + current === NU && [NU, SY, IS].indexOf(next) !== -1 + ) { + return BREAK_NOT_ALLOWED$1; + } + if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) { + var prevIndex = currentIndex; + while (prevIndex >= 0) { + var type = classTypes[prevIndex]; + if (type === NU) { + return BREAK_NOT_ALLOWED$1; + } else if ([SY, IS].indexOf(type) !== -1) { + prevIndex--; + } else { + break; + } + } + } + if ([PR, PO].indexOf(next) !== -1) { + var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex; + while (prevIndex >= 0) { + var type = classTypes[prevIndex]; + if (type === NU) { + return BREAK_NOT_ALLOWED$1; + } else if ([SY, IS].indexOf(type) !== -1) { + prevIndex--; + } else { + break; + } + } + } + if (JL === current && [JL, JV, H2, H3].indexOf(next) !== -1 || [JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1 || [JT, H3].indexOf(current) !== -1 && next === JT) { + return BREAK_NOT_ALLOWED$1; + } + if (KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1 || KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR) { + return BREAK_NOT_ALLOWED$1; + } + if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED$1; + } + if (current === IS && ALPHABETICS.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED$1; + } + if (ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP && ea_OP.indexOf(codePoints[afterIndex]) === -1 || ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP) { + return BREAK_NOT_ALLOWED$1; + } + if (current === RI$1 && next === RI$1) { + var i2 = indicies[currentIndex]; + var count = 1; + while (i2 > 0) { + i2--; + if (classTypes[i2] === RI$1) { + count++; + } else { + break; + } + } + if (count % 2 !== 0) { + return BREAK_NOT_ALLOWED$1; + } + } + if (current === EB && next === EM) { + return BREAK_NOT_ALLOWED$1; + } + return BREAK_ALLOWED$1; + }; + var cssFormattedClasses = function(codePoints, options) { + if (!options) { + options = { lineBreak: "normal", wordBreak: "normal" }; + } + var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2]; + if (options.wordBreak === "break-all" || options.wordBreak === "break-word") { + classTypes = classTypes.map(function(type) { + return [NU, AL, SA].indexOf(type) !== -1 ? ID : type; + }); + } + var forbiddenBreakpoints = options.wordBreak === "keep-all" ? isLetterNumber.map(function(letterNumber, i2) { + return letterNumber && codePoints[i2] >= 19968 && codePoints[i2] <= 40959; + }) : void 0; + return [indicies, classTypes, forbiddenBreakpoints]; + }; + var Break = ( + /** @class */ + (function() { + function Break2(codePoints, lineBreak2, start, end) { + this.codePoints = codePoints; + this.required = lineBreak2 === BREAK_MANDATORY; + this.start = start; + this.end = end; + } + Break2.prototype.slice = function() { + return fromCodePoint$1.apply(void 0, this.codePoints.slice(this.start, this.end)); + }; + return Break2; + })() + ); + var LineBreaker = function(str, options) { + var codePoints = toCodePoints$1(str); + var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2]; + var length = codePoints.length; + var lastEnd = 0; + var nextIndex = 0; + return { + next: function() { + if (nextIndex >= length) { + return { done: true, value: null }; + } + var lineBreak2 = BREAK_NOT_ALLOWED$1; + while (nextIndex < length && (lineBreak2 = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) === BREAK_NOT_ALLOWED$1) { + } + if (lineBreak2 !== BREAK_NOT_ALLOWED$1 || nextIndex === length) { + var value = new Break(codePoints, lineBreak2, lastEnd, nextIndex); + lastEnd = nextIndex; + return { value, done: false }; + } + return { done: true, value: null }; + } + }; + }; + var FLAG_UNRESTRICTED = 1 << 0; + var FLAG_ID = 1 << 1; + var FLAG_INTEGER = 1 << 2; + var FLAG_NUMBER = 1 << 3; + var LINE_FEED = 10; + var SOLIDUS = 47; + var REVERSE_SOLIDUS = 92; + var CHARACTER_TABULATION = 9; + var SPACE = 32; + var QUOTATION_MARK = 34; + var EQUALS_SIGN = 61; + var NUMBER_SIGN = 35; + var DOLLAR_SIGN = 36; + var PERCENTAGE_SIGN = 37; + var APOSTROPHE = 39; + var LEFT_PARENTHESIS = 40; + var RIGHT_PARENTHESIS = 41; + var LOW_LINE = 95; + var HYPHEN_MINUS = 45; + var EXCLAMATION_MARK = 33; + var LESS_THAN_SIGN = 60; + var GREATER_THAN_SIGN = 62; + var COMMERCIAL_AT = 64; + var LEFT_SQUARE_BRACKET = 91; + var RIGHT_SQUARE_BRACKET = 93; + var CIRCUMFLEX_ACCENT = 61; + var LEFT_CURLY_BRACKET = 123; + var QUESTION_MARK = 63; + var RIGHT_CURLY_BRACKET = 125; + var VERTICAL_LINE = 124; + var TILDE = 126; + var CONTROL = 128; + var REPLACEMENT_CHARACTER = 65533; + var ASTERISK = 42; + var PLUS_SIGN = 43; + var COMMA = 44; + var COLON = 58; + var SEMICOLON = 59; + var FULL_STOP = 46; + var NULL = 0; + var BACKSPACE = 8; + var LINE_TABULATION = 11; + var SHIFT_OUT = 14; + var INFORMATION_SEPARATOR_ONE = 31; + var DELETE = 127; + var EOF = -1; + var ZERO = 48; + var a = 97; + var e = 101; + var f = 102; + var u = 117; + var z = 122; + var A = 65; + var E = 69; + var F = 70; + var U = 85; + var Z = 90; + var isDigit = function(codePoint) { + return codePoint >= ZERO && codePoint <= 57; + }; + var isSurrogateCodePoint = function(codePoint) { + return codePoint >= 55296 && codePoint <= 57343; + }; + var isHex = function(codePoint) { + return isDigit(codePoint) || codePoint >= A && codePoint <= F || codePoint >= a && codePoint <= f; + }; + var isLowerCaseLetter = function(codePoint) { + return codePoint >= a && codePoint <= z; + }; + var isUpperCaseLetter = function(codePoint) { + return codePoint >= A && codePoint <= Z; + }; + var isLetter = function(codePoint) { + return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); + }; + var isNonASCIICodePoint = function(codePoint) { + return codePoint >= CONTROL; + }; + var isWhiteSpace = function(codePoint) { + return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE; + }; + var isNameStartCodePoint = function(codePoint) { + return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE; + }; + var isNameCodePoint = function(codePoint) { + return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS; + }; + var isNonPrintableCodePoint = function(codePoint) { + return codePoint >= NULL && codePoint <= BACKSPACE || codePoint === LINE_TABULATION || codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE || codePoint === DELETE; + }; + var isValidEscape = function(c1, c2) { + if (c1 !== REVERSE_SOLIDUS) { + return false; + } + return c2 !== LINE_FEED; + }; + var isIdentifierStart = function(c1, c2, c3) { + if (c1 === HYPHEN_MINUS) { + return isNameStartCodePoint(c2) || isValidEscape(c2, c3); + } else if (isNameStartCodePoint(c1)) { + return true; + } else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) { + return true; + } + return false; + }; + var isNumberStart = function(c1, c2, c3) { + if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) { + if (isDigit(c2)) { + return true; + } + return c2 === FULL_STOP && isDigit(c3); + } + if (c1 === FULL_STOP) { + return isDigit(c2); + } + return isDigit(c1); + }; + var stringToNumber = function(codePoints) { + var c = 0; + var sign = 1; + if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) { + if (codePoints[c] === HYPHEN_MINUS) { + sign = -1; + } + c++; + } + var integers = []; + while (isDigit(codePoints[c])) { + integers.push(codePoints[c++]); + } + var int = integers.length ? parseInt(fromCodePoint$1.apply(void 0, integers), 10) : 0; + if (codePoints[c] === FULL_STOP) { + c++; + } + var fraction = []; + while (isDigit(codePoints[c])) { + fraction.push(codePoints[c++]); + } + var fracd = fraction.length; + var frac = fracd ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10) : 0; + if (codePoints[c] === E || codePoints[c] === e) { + c++; + } + var expsign = 1; + if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) { + if (codePoints[c] === HYPHEN_MINUS) { + expsign = -1; + } + c++; + } + var exponent = []; + while (isDigit(codePoints[c])) { + exponent.push(codePoints[c++]); + } + var exp = exponent.length ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10) : 0; + return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp); + }; + var LEFT_PARENTHESIS_TOKEN = { + type: 2 + /* LEFT_PARENTHESIS_TOKEN */ + }; + var RIGHT_PARENTHESIS_TOKEN = { + type: 3 + /* RIGHT_PARENTHESIS_TOKEN */ + }; + var COMMA_TOKEN = { + type: 4 + /* COMMA_TOKEN */ + }; + var SUFFIX_MATCH_TOKEN = { + type: 13 + /* SUFFIX_MATCH_TOKEN */ + }; + var PREFIX_MATCH_TOKEN = { + type: 8 + /* PREFIX_MATCH_TOKEN */ + }; + var COLUMN_TOKEN = { + type: 21 + /* COLUMN_TOKEN */ + }; + var DASH_MATCH_TOKEN = { + type: 9 + /* DASH_MATCH_TOKEN */ + }; + var INCLUDE_MATCH_TOKEN = { + type: 10 + /* INCLUDE_MATCH_TOKEN */ + }; + var LEFT_CURLY_BRACKET_TOKEN = { + type: 11 + /* LEFT_CURLY_BRACKET_TOKEN */ + }; + var RIGHT_CURLY_BRACKET_TOKEN = { + type: 12 + /* RIGHT_CURLY_BRACKET_TOKEN */ + }; + var SUBSTRING_MATCH_TOKEN = { + type: 14 + /* SUBSTRING_MATCH_TOKEN */ + }; + var BAD_URL_TOKEN = { + type: 23 + /* BAD_URL_TOKEN */ + }; + var BAD_STRING_TOKEN = { + type: 1 + /* BAD_STRING_TOKEN */ + }; + var CDO_TOKEN = { + type: 25 + /* CDO_TOKEN */ + }; + var CDC_TOKEN = { + type: 24 + /* CDC_TOKEN */ + }; + var COLON_TOKEN = { + type: 26 + /* COLON_TOKEN */ + }; + var SEMICOLON_TOKEN = { + type: 27 + /* SEMICOLON_TOKEN */ + }; + var LEFT_SQUARE_BRACKET_TOKEN = { + type: 28 + /* LEFT_SQUARE_BRACKET_TOKEN */ + }; + var RIGHT_SQUARE_BRACKET_TOKEN = { + type: 29 + /* RIGHT_SQUARE_BRACKET_TOKEN */ + }; + var WHITESPACE_TOKEN = { + type: 31 + /* WHITESPACE_TOKEN */ + }; + var EOF_TOKEN = { + type: 32 + /* EOF_TOKEN */ + }; + var Tokenizer = ( + /** @class */ + (function() { + function Tokenizer2() { + this._value = []; + } + Tokenizer2.prototype.write = function(chunk) { + this._value = this._value.concat(toCodePoints$1(chunk)); + }; + Tokenizer2.prototype.read = function() { + var tokens = []; + var token = this.consumeToken(); + while (token !== EOF_TOKEN) { + tokens.push(token); + token = this.consumeToken(); + } + return tokens; + }; + Tokenizer2.prototype.consumeToken = function() { + var codePoint = this.consumeCodePoint(); + switch (codePoint) { + case QUOTATION_MARK: + return this.consumeStringToken(QUOTATION_MARK); + case NUMBER_SIGN: + var c1 = this.peekCodePoint(0); + var c2 = this.peekCodePoint(1); + var c3 = this.peekCodePoint(2); + if (isNameCodePoint(c1) || isValidEscape(c2, c3)) { + var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED; + var value = this.consumeName(); + return { type: 5, value, flags }; + } + break; + case DOLLAR_SIGN: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return SUFFIX_MATCH_TOKEN; + } + break; + case APOSTROPHE: + return this.consumeStringToken(APOSTROPHE); + case LEFT_PARENTHESIS: + return LEFT_PARENTHESIS_TOKEN; + case RIGHT_PARENTHESIS: + return RIGHT_PARENTHESIS_TOKEN; + case ASTERISK: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return SUBSTRING_MATCH_TOKEN; + } + break; + case PLUS_SIGN: + if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) { + this.reconsumeCodePoint(codePoint); + return this.consumeNumericToken(); + } + break; + case COMMA: + return COMMA_TOKEN; + case HYPHEN_MINUS: + var e1 = codePoint; + var e2 = this.peekCodePoint(0); + var e3 = this.peekCodePoint(1); + if (isNumberStart(e1, e2, e3)) { + this.reconsumeCodePoint(codePoint); + return this.consumeNumericToken(); + } + if (isIdentifierStart(e1, e2, e3)) { + this.reconsumeCodePoint(codePoint); + return this.consumeIdentLikeToken(); + } + if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) { + this.consumeCodePoint(); + this.consumeCodePoint(); + return CDC_TOKEN; + } + break; + case FULL_STOP: + if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) { + this.reconsumeCodePoint(codePoint); + return this.consumeNumericToken(); + } + break; + case SOLIDUS: + if (this.peekCodePoint(0) === ASTERISK) { + this.consumeCodePoint(); + while (true) { + var c = this.consumeCodePoint(); + if (c === ASTERISK) { + c = this.consumeCodePoint(); + if (c === SOLIDUS) { + return this.consumeToken(); + } + } + if (c === EOF) { + return this.consumeToken(); + } + } + } + break; + case COLON: + return COLON_TOKEN; + case SEMICOLON: + return SEMICOLON_TOKEN; + case LESS_THAN_SIGN: + if (this.peekCodePoint(0) === EXCLAMATION_MARK && this.peekCodePoint(1) === HYPHEN_MINUS && this.peekCodePoint(2) === HYPHEN_MINUS) { + this.consumeCodePoint(); + this.consumeCodePoint(); + return CDO_TOKEN; + } + break; + case COMMERCIAL_AT: + var a1 = this.peekCodePoint(0); + var a2 = this.peekCodePoint(1); + var a3 = this.peekCodePoint(2); + if (isIdentifierStart(a1, a2, a3)) { + var value = this.consumeName(); + return { type: 7, value }; + } + break; + case LEFT_SQUARE_BRACKET: + return LEFT_SQUARE_BRACKET_TOKEN; + case REVERSE_SOLIDUS: + if (isValidEscape(codePoint, this.peekCodePoint(0))) { + this.reconsumeCodePoint(codePoint); + return this.consumeIdentLikeToken(); + } + break; + case RIGHT_SQUARE_BRACKET: + return RIGHT_SQUARE_BRACKET_TOKEN; + case CIRCUMFLEX_ACCENT: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return PREFIX_MATCH_TOKEN; + } + break; + case LEFT_CURLY_BRACKET: + return LEFT_CURLY_BRACKET_TOKEN; + case RIGHT_CURLY_BRACKET: + return RIGHT_CURLY_BRACKET_TOKEN; + case u: + case U: + var u1 = this.peekCodePoint(0); + var u2 = this.peekCodePoint(1); + if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) { + this.consumeCodePoint(); + this.consumeUnicodeRangeToken(); + } + this.reconsumeCodePoint(codePoint); + return this.consumeIdentLikeToken(); + case VERTICAL_LINE: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return DASH_MATCH_TOKEN; + } + if (this.peekCodePoint(0) === VERTICAL_LINE) { + this.consumeCodePoint(); + return COLUMN_TOKEN; + } + break; + case TILDE: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return INCLUDE_MATCH_TOKEN; + } + break; + case EOF: + return EOF_TOKEN; + } + if (isWhiteSpace(codePoint)) { + this.consumeWhiteSpace(); + return WHITESPACE_TOKEN; + } + if (isDigit(codePoint)) { + this.reconsumeCodePoint(codePoint); + return this.consumeNumericToken(); + } + if (isNameStartCodePoint(codePoint)) { + this.reconsumeCodePoint(codePoint); + return this.consumeIdentLikeToken(); + } + return { type: 6, value: fromCodePoint$1(codePoint) }; + }; + Tokenizer2.prototype.consumeCodePoint = function() { + var value = this._value.shift(); + return typeof value === "undefined" ? -1 : value; + }; + Tokenizer2.prototype.reconsumeCodePoint = function(codePoint) { + this._value.unshift(codePoint); + }; + Tokenizer2.prototype.peekCodePoint = function(delta) { + if (delta >= this._value.length) { + return -1; + } + return this._value[delta]; + }; + Tokenizer2.prototype.consumeUnicodeRangeToken = function() { + var digits = []; + var codePoint = this.consumeCodePoint(); + while (isHex(codePoint) && digits.length < 6) { + digits.push(codePoint); + codePoint = this.consumeCodePoint(); + } + var questionMarks = false; + while (codePoint === QUESTION_MARK && digits.length < 6) { + digits.push(codePoint); + codePoint = this.consumeCodePoint(); + questionMarks = true; + } + if (questionMarks) { + var start_1 = parseInt(fromCodePoint$1.apply(void 0, digits.map(function(digit) { + return digit === QUESTION_MARK ? ZERO : digit; + })), 16); + var end = parseInt(fromCodePoint$1.apply(void 0, digits.map(function(digit) { + return digit === QUESTION_MARK ? F : digit; + })), 16); + return { type: 30, start: start_1, end }; + } + var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16); + if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) { + this.consumeCodePoint(); + codePoint = this.consumeCodePoint(); + var endDigits = []; + while (isHex(codePoint) && endDigits.length < 6) { + endDigits.push(codePoint); + codePoint = this.consumeCodePoint(); + } + var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16); + return { type: 30, start, end }; + } else { + return { type: 30, start, end: start }; + } + }; + Tokenizer2.prototype.consumeIdentLikeToken = function() { + var value = this.consumeName(); + if (value.toLowerCase() === "url" && this.peekCodePoint(0) === LEFT_PARENTHESIS) { + this.consumeCodePoint(); + return this.consumeUrlToken(); + } else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) { + this.consumeCodePoint(); + return { type: 19, value }; + } + return { type: 20, value }; + }; + Tokenizer2.prototype.consumeUrlToken = function() { + var value = []; + this.consumeWhiteSpace(); + if (this.peekCodePoint(0) === EOF) { + return { type: 22, value: "" }; + } + var next = this.peekCodePoint(0); + if (next === APOSTROPHE || next === QUOTATION_MARK) { + var stringToken = this.consumeStringToken(this.consumeCodePoint()); + if (stringToken.type === 0) { + this.consumeWhiteSpace(); + if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) { + this.consumeCodePoint(); + return { type: 22, value: stringToken.value }; + } + } + this.consumeBadUrlRemnants(); + return BAD_URL_TOKEN; + } + while (true) { + var codePoint = this.consumeCodePoint(); + if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) { + return { type: 22, value: fromCodePoint$1.apply(void 0, value) }; + } else if (isWhiteSpace(codePoint)) { + this.consumeWhiteSpace(); + if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) { + this.consumeCodePoint(); + return { type: 22, value: fromCodePoint$1.apply(void 0, value) }; + } + this.consumeBadUrlRemnants(); + return BAD_URL_TOKEN; + } else if (codePoint === QUOTATION_MARK || codePoint === APOSTROPHE || codePoint === LEFT_PARENTHESIS || isNonPrintableCodePoint(codePoint)) { + this.consumeBadUrlRemnants(); + return BAD_URL_TOKEN; + } else if (codePoint === REVERSE_SOLIDUS) { + if (isValidEscape(codePoint, this.peekCodePoint(0))) { + value.push(this.consumeEscapedCodePoint()); + } else { + this.consumeBadUrlRemnants(); + return BAD_URL_TOKEN; + } + } else { + value.push(codePoint); + } + } + }; + Tokenizer2.prototype.consumeWhiteSpace = function() { + while (isWhiteSpace(this.peekCodePoint(0))) { + this.consumeCodePoint(); + } + }; + Tokenizer2.prototype.consumeBadUrlRemnants = function() { + while (true) { + var codePoint = this.consumeCodePoint(); + if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) { + return; + } + if (isValidEscape(codePoint, this.peekCodePoint(0))) { + this.consumeEscapedCodePoint(); + } + } + }; + Tokenizer2.prototype.consumeStringSlice = function(count) { + var SLICE_STACK_SIZE = 5e4; + var value = ""; + while (count > 0) { + var amount = Math.min(SLICE_STACK_SIZE, count); + value += fromCodePoint$1.apply(void 0, this._value.splice(0, amount)); + count -= amount; + } + this._value.shift(); + return value; + }; + Tokenizer2.prototype.consumeStringToken = function(endingCodePoint) { + var value = ""; + var i2 = 0; + do { + var codePoint = this._value[i2]; + if (codePoint === EOF || codePoint === void 0 || codePoint === endingCodePoint) { + value += this.consumeStringSlice(i2); + return { type: 0, value }; + } + if (codePoint === LINE_FEED) { + this._value.splice(0, i2); + return BAD_STRING_TOKEN; + } + if (codePoint === REVERSE_SOLIDUS) { + var next = this._value[i2 + 1]; + if (next !== EOF && next !== void 0) { + if (next === LINE_FEED) { + value += this.consumeStringSlice(i2); + i2 = -1; + this._value.shift(); + } else if (isValidEscape(codePoint, next)) { + value += this.consumeStringSlice(i2); + value += fromCodePoint$1(this.consumeEscapedCodePoint()); + i2 = -1; + } + } + } + i2++; + } while (true); + }; + Tokenizer2.prototype.consumeNumber = function() { + var repr = []; + var type = FLAG_INTEGER; + var c1 = this.peekCodePoint(0); + if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) { + repr.push(this.consumeCodePoint()); + } + while (isDigit(this.peekCodePoint(0))) { + repr.push(this.consumeCodePoint()); + } + c1 = this.peekCodePoint(0); + var c2 = this.peekCodePoint(1); + if (c1 === FULL_STOP && isDigit(c2)) { + repr.push(this.consumeCodePoint(), this.consumeCodePoint()); + type = FLAG_NUMBER; + while (isDigit(this.peekCodePoint(0))) { + repr.push(this.consumeCodePoint()); + } + } + c1 = this.peekCodePoint(0); + c2 = this.peekCodePoint(1); + var c3 = this.peekCodePoint(2); + if ((c1 === E || c1 === e) && ((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3) || isDigit(c2))) { + repr.push(this.consumeCodePoint(), this.consumeCodePoint()); + type = FLAG_NUMBER; + while (isDigit(this.peekCodePoint(0))) { + repr.push(this.consumeCodePoint()); + } + } + return [stringToNumber(repr), type]; + }; + Tokenizer2.prototype.consumeNumericToken = function() { + var _a = this.consumeNumber(), number = _a[0], flags = _a[1]; + var c1 = this.peekCodePoint(0); + var c2 = this.peekCodePoint(1); + var c3 = this.peekCodePoint(2); + if (isIdentifierStart(c1, c2, c3)) { + var unit = this.consumeName(); + return { type: 15, number, flags, unit }; + } + if (c1 === PERCENTAGE_SIGN) { + this.consumeCodePoint(); + return { type: 16, number, flags }; + } + return { type: 17, number, flags }; + }; + Tokenizer2.prototype.consumeEscapedCodePoint = function() { + var codePoint = this.consumeCodePoint(); + if (isHex(codePoint)) { + var hex = fromCodePoint$1(codePoint); + while (isHex(this.peekCodePoint(0)) && hex.length < 6) { + hex += fromCodePoint$1(this.consumeCodePoint()); + } + if (isWhiteSpace(this.peekCodePoint(0))) { + this.consumeCodePoint(); + } + var hexCodePoint = parseInt(hex, 16); + if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 1114111) { + return REPLACEMENT_CHARACTER; + } + return hexCodePoint; + } + if (codePoint === EOF) { + return REPLACEMENT_CHARACTER; + } + return codePoint; + }; + Tokenizer2.prototype.consumeName = function() { + var result = ""; + while (true) { + var codePoint = this.consumeCodePoint(); + if (isNameCodePoint(codePoint)) { + result += fromCodePoint$1(codePoint); + } else if (isValidEscape(codePoint, this.peekCodePoint(0))) { + result += fromCodePoint$1(this.consumeEscapedCodePoint()); + } else { + this.reconsumeCodePoint(codePoint); + return result; + } + } + }; + return Tokenizer2; + })() + ); + var Parser = ( + /** @class */ + (function() { + function Parser2(tokens) { + this._tokens = tokens; + } + Parser2.create = function(value) { + var tokenizer = new Tokenizer(); + tokenizer.write(value); + return new Parser2(tokenizer.read()); + }; + Parser2.parseValue = function(value) { + return Parser2.create(value).parseComponentValue(); + }; + Parser2.parseValues = function(value) { + return Parser2.create(value).parseComponentValues(); + }; + Parser2.prototype.parseComponentValue = function() { + var token = this.consumeToken(); + while (token.type === 31) { + token = this.consumeToken(); + } + if (token.type === 32) { + throw new SyntaxError("Error parsing CSS component value, unexpected EOF"); + } + this.reconsumeToken(token); + var value = this.consumeComponentValue(); + do { + token = this.consumeToken(); + } while (token.type === 31); + if (token.type === 32) { + return value; + } + throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one"); + }; + Parser2.prototype.parseComponentValues = function() { + var values = []; + while (true) { + var value = this.consumeComponentValue(); + if (value.type === 32) { + return values; + } + values.push(value); + values.push(); + } + }; + Parser2.prototype.consumeComponentValue = function() { + var token = this.consumeToken(); + switch (token.type) { + case 11: + case 28: + case 2: + return this.consumeSimpleBlock(token.type); + case 19: + return this.consumeFunction(token); + } + return token; + }; + Parser2.prototype.consumeSimpleBlock = function(type) { + var block = { type, values: [] }; + var token = this.consumeToken(); + while (true) { + if (token.type === 32 || isEndingTokenFor(token, type)) { + return block; + } + this.reconsumeToken(token); + block.values.push(this.consumeComponentValue()); + token = this.consumeToken(); + } + }; + Parser2.prototype.consumeFunction = function(functionToken) { + var cssFunction = { + name: functionToken.value, + values: [], + type: 18 + /* FUNCTION */ + }; + while (true) { + var token = this.consumeToken(); + if (token.type === 32 || token.type === 3) { + return cssFunction; + } + this.reconsumeToken(token); + cssFunction.values.push(this.consumeComponentValue()); + } + }; + Parser2.prototype.consumeToken = function() { + var token = this._tokens.shift(); + return typeof token === "undefined" ? EOF_TOKEN : token; + }; + Parser2.prototype.reconsumeToken = function(token) { + this._tokens.unshift(token); + }; + return Parser2; + })() + ); + var isDimensionToken = function(token) { + return token.type === 15; + }; + var isNumberToken = function(token) { + return token.type === 17; + }; + var isIdentToken = function(token) { + return token.type === 20; + }; + var isStringToken = function(token) { + return token.type === 0; + }; + var isIdentWithValue = function(token, value) { + return isIdentToken(token) && token.value === value; + }; + var nonWhiteSpace = function(token) { + return token.type !== 31; + }; + var nonFunctionArgSeparator = function(token) { + return token.type !== 31 && token.type !== 4; + }; + var parseFunctionArgs = function(tokens) { + var args = []; + var arg = []; + tokens.forEach(function(token) { + if (token.type === 4) { + if (arg.length === 0) { + throw new Error("Error parsing function args, zero tokens for arg"); + } + args.push(arg); + arg = []; + return; + } + if (token.type !== 31) { + arg.push(token); + } + }); + if (arg.length) { + args.push(arg); + } + return args; + }; + var isEndingTokenFor = function(token, type) { + if (type === 11 && token.type === 12) { + return true; + } + if (type === 28 && token.type === 29) { + return true; + } + return type === 2 && token.type === 3; + }; + var isLength = function(token) { + return token.type === 17 || token.type === 15; + }; + var isLengthPercentage = function(token) { + return token.type === 16 || isLength(token); + }; + var parseLengthPercentageTuple = function(tokens) { + return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]]; + }; + var ZERO_LENGTH = { + type: 17, + number: 0, + flags: FLAG_INTEGER + }; + var FIFTY_PERCENT = { + type: 16, + number: 50, + flags: FLAG_INTEGER + }; + var HUNDRED_PERCENT = { + type: 16, + number: 100, + flags: FLAG_INTEGER + }; + var getAbsoluteValueForTuple = function(tuple, width, height) { + var x = tuple[0], y = tuple[1]; + return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== "undefined" ? y : x, height)]; + }; + var getAbsoluteValue = function(token, parent) { + if (token.type === 16) { + return token.number / 100 * parent; + } + if (isDimensionToken(token)) { + switch (token.unit) { + case "rem": + case "em": + return 16 * token.number; + // TODO use correct font-size + case "px": + default: + return token.number; + } + } + return token.number; + }; + var DEG = "deg"; + var GRAD = "grad"; + var RAD = "rad"; + var TURN = "turn"; + var angle = { + name: "angle", + parse: function(_context, value) { + if (value.type === 15) { + switch (value.unit) { + case DEG: + return Math.PI * value.number / 180; + case GRAD: + return Math.PI / 200 * value.number; + case RAD: + return value.number; + case TURN: + return Math.PI * 2 * value.number; + } + } + throw new Error("Unsupported angle type"); + } + }; + var isAngle = function(value) { + if (value.type === 15) { + if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) { + return true; + } + } + return false; + }; + var parseNamedSide = function(tokens) { + var sideOrCorner = tokens.filter(isIdentToken).map(function(ident) { + return ident.value; + }).join(" "); + switch (sideOrCorner) { + case "to bottom right": + case "to right bottom": + case "left top": + case "top left": + return [ZERO_LENGTH, ZERO_LENGTH]; + case "to top": + case "bottom": + return deg(0); + case "to bottom left": + case "to left bottom": + case "right top": + case "top right": + return [ZERO_LENGTH, HUNDRED_PERCENT]; + case "to right": + case "left": + return deg(90); + case "to top left": + case "to left top": + case "right bottom": + case "bottom right": + return [HUNDRED_PERCENT, HUNDRED_PERCENT]; + case "to bottom": + case "top": + return deg(180); + case "to top right": + case "to right top": + case "left bottom": + case "bottom left": + return [HUNDRED_PERCENT, ZERO_LENGTH]; + case "to left": + case "right": + return deg(270); + } + return 0; + }; + var deg = function(deg2) { + return Math.PI * deg2 / 180; + }; + var color$1 = { + name: "color", + parse: function(context, value) { + if (value.type === 18) { + var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name]; + if (typeof colorFunction === "undefined") { + throw new Error('Attempting to parse an unsupported color function "' + value.name + '"'); + } + return colorFunction(context, value.values); + } + if (value.type === 5) { + if (value.value.length === 3) { + var r = value.value.substring(0, 1); + var g = value.value.substring(1, 2); + var b = value.value.substring(2, 3); + return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1); + } + if (value.value.length === 4) { + var r = value.value.substring(0, 1); + var g = value.value.substring(1, 2); + var b = value.value.substring(2, 3); + var a2 = value.value.substring(3, 4); + return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a2 + a2, 16) / 255); + } + if (value.value.length === 6) { + var r = value.value.substring(0, 2); + var g = value.value.substring(2, 4); + var b = value.value.substring(4, 6); + return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1); + } + if (value.value.length === 8) { + var r = value.value.substring(0, 2); + var g = value.value.substring(2, 4); + var b = value.value.substring(4, 6); + var a2 = value.value.substring(6, 8); + return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a2, 16) / 255); + } + } + if (value.type === 20) { + var namedColor = COLORS[value.value.toUpperCase()]; + if (typeof namedColor !== "undefined") { + return namedColor; + } + } + return COLORS.TRANSPARENT; + } + }; + var isTransparent = function(color2) { + return (255 & color2) === 0; + }; + var asString = function(color2) { + var alpha = 255 & color2; + var blue = 255 & color2 >> 8; + var green = 255 & color2 >> 16; + var red = 255 & color2 >> 24; + return alpha < 255 ? "rgba(" + red + "," + green + "," + blue + "," + alpha / 255 + ")" : "rgb(" + red + "," + green + "," + blue + ")"; + }; + var pack = function(r, g, b, a2) { + return (r << 24 | g << 16 | b << 8 | Math.round(a2 * 255) << 0) >>> 0; + }; + var getTokenColorValue = function(token, i2) { + if (token.type === 17) { + return token.number; + } + if (token.type === 16) { + var max = i2 === 3 ? 1 : 255; + return i2 === 3 ? token.number / 100 * max : Math.round(token.number / 100 * max); + } + return 0; + }; + var rgb = function(_context, args) { + var tokens = args.filter(nonFunctionArgSeparator); + if (tokens.length === 3) { + var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2]; + return pack(r, g, b, 1); + } + if (tokens.length === 4) { + var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a2 = _b[3]; + return pack(r, g, b, a2); + } + return 0; + }; + function hue2rgb(t1, t2, hue) { + if (hue < 0) { + hue += 1; + } + if (hue >= 1) { + hue -= 1; + } + if (hue < 1 / 6) { + return (t2 - t1) * hue * 6 + t1; + } else if (hue < 1 / 2) { + return t2; + } else if (hue < 2 / 3) { + return (t2 - t1) * 6 * (2 / 3 - hue) + t1; + } else { + return t1; + } + } + var hsl = function(context, args) { + var tokens = args.filter(nonFunctionArgSeparator); + var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3]; + var h = (hue.type === 17 ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2); + var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0; + var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0; + var a2 = typeof alpha !== "undefined" && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1; + if (s === 0) { + return pack(l * 255, l * 255, l * 255, 1); + } + var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; + var t1 = l * 2 - t2; + var r = hue2rgb(t1, t2, h + 1 / 3); + var g = hue2rgb(t1, t2, h); + var b = hue2rgb(t1, t2, h - 1 / 3); + return pack(r * 255, g * 255, b * 255, a2); + }; + var SUPPORTED_COLOR_FUNCTIONS = { + hsl, + hsla: hsl, + rgb, + rgba: rgb + }; + var parseColor = function(context, value) { + return color$1.parse(context, Parser.create(value).parseComponentValue()); + }; + var COLORS = { + ALICEBLUE: 4042850303, + ANTIQUEWHITE: 4209760255, + AQUA: 16777215, + AQUAMARINE: 2147472639, + AZURE: 4043309055, + BEIGE: 4126530815, + BISQUE: 4293182719, + BLACK: 255, + BLANCHEDALMOND: 4293643775, + BLUE: 65535, + BLUEVIOLET: 2318131967, + BROWN: 2771004159, + BURLYWOOD: 3736635391, + CADETBLUE: 1604231423, + CHARTREUSE: 2147418367, + CHOCOLATE: 3530104575, + CORAL: 4286533887, + CORNFLOWERBLUE: 1687547391, + CORNSILK: 4294499583, + CRIMSON: 3692313855, + CYAN: 16777215, + DARKBLUE: 35839, + DARKCYAN: 9145343, + DARKGOLDENROD: 3095837695, + DARKGRAY: 2846468607, + DARKGREEN: 6553855, + DARKGREY: 2846468607, + DARKKHAKI: 3182914559, + DARKMAGENTA: 2332068863, + DARKOLIVEGREEN: 1433087999, + DARKORANGE: 4287365375, + DARKORCHID: 2570243327, + DARKRED: 2332033279, + DARKSALMON: 3918953215, + DARKSEAGREEN: 2411499519, + DARKSLATEBLUE: 1211993087, + DARKSLATEGRAY: 793726975, + DARKSLATEGREY: 793726975, + DARKTURQUOISE: 13554175, + DARKVIOLET: 2483082239, + DEEPPINK: 4279538687, + DEEPSKYBLUE: 12582911, + DIMGRAY: 1768516095, + DIMGREY: 1768516095, + DODGERBLUE: 512819199, + FIREBRICK: 2988581631, + FLORALWHITE: 4294635775, + FORESTGREEN: 579543807, + FUCHSIA: 4278255615, + GAINSBORO: 3705462015, + GHOSTWHITE: 4177068031, + GOLD: 4292280575, + GOLDENROD: 3668254975, + GRAY: 2155905279, + GREEN: 8388863, + GREENYELLOW: 2919182335, + GREY: 2155905279, + HONEYDEW: 4043305215, + HOTPINK: 4285117695, + INDIANRED: 3445382399, + INDIGO: 1258324735, + IVORY: 4294963455, + KHAKI: 4041641215, + LAVENDER: 3873897215, + LAVENDERBLUSH: 4293981695, + LAWNGREEN: 2096890111, + LEMONCHIFFON: 4294626815, + LIGHTBLUE: 2916673279, + LIGHTCORAL: 4034953471, + LIGHTCYAN: 3774873599, + LIGHTGOLDENRODYELLOW: 4210742015, + LIGHTGRAY: 3553874943, + LIGHTGREEN: 2431553791, + LIGHTGREY: 3553874943, + LIGHTPINK: 4290167295, + LIGHTSALMON: 4288707327, + LIGHTSEAGREEN: 548580095, + LIGHTSKYBLUE: 2278488831, + LIGHTSLATEGRAY: 2005441023, + LIGHTSLATEGREY: 2005441023, + LIGHTSTEELBLUE: 2965692159, + LIGHTYELLOW: 4294959359, + LIME: 16711935, + LIMEGREEN: 852308735, + LINEN: 4210091775, + MAGENTA: 4278255615, + MAROON: 2147483903, + MEDIUMAQUAMARINE: 1724754687, + MEDIUMBLUE: 52735, + MEDIUMORCHID: 3126187007, + MEDIUMPURPLE: 2473647103, + MEDIUMSEAGREEN: 1018393087, + MEDIUMSLATEBLUE: 2070474495, + MEDIUMSPRINGGREEN: 16423679, + MEDIUMTURQUOISE: 1221709055, + MEDIUMVIOLETRED: 3340076543, + MIDNIGHTBLUE: 421097727, + MINTCREAM: 4127193855, + MISTYROSE: 4293190143, + MOCCASIN: 4293178879, + NAVAJOWHITE: 4292783615, + NAVY: 33023, + OLDLACE: 4260751103, + OLIVE: 2155872511, + OLIVEDRAB: 1804477439, + ORANGE: 4289003775, + ORANGERED: 4282712319, + ORCHID: 3664828159, + PALEGOLDENROD: 4008225535, + PALEGREEN: 2566625535, + PALETURQUOISE: 2951671551, + PALEVIOLETRED: 3681588223, + PAPAYAWHIP: 4293907967, + PEACHPUFF: 4292524543, + PERU: 3448061951, + PINK: 4290825215, + PLUM: 3718307327, + POWDERBLUE: 2967529215, + PURPLE: 2147516671, + REBECCAPURPLE: 1714657791, + RED: 4278190335, + ROSYBROWN: 3163525119, + ROYALBLUE: 1097458175, + SADDLEBROWN: 2336560127, + SALMON: 4202722047, + SANDYBROWN: 4104413439, + SEAGREEN: 780883967, + SEASHELL: 4294307583, + SIENNA: 2689740287, + SILVER: 3233857791, + SKYBLUE: 2278484991, + SLATEBLUE: 1784335871, + SLATEGRAY: 1887473919, + SLATEGREY: 1887473919, + SNOW: 4294638335, + SPRINGGREEN: 16744447, + STEELBLUE: 1182971135, + TAN: 3535047935, + TEAL: 8421631, + THISTLE: 3636451583, + TOMATO: 4284696575, + TRANSPARENT: 0, + TURQUOISE: 1088475391, + VIOLET: 4001558271, + WHEAT: 4125012991, + WHITE: 4294967295, + WHITESMOKE: 4126537215, + YELLOW: 4294902015, + YELLOWGREEN: 2597139199 + }; + var backgroundClip = { + name: "background-clip", + initialValue: "border-box", + prefix: false, + type: 1, + parse: function(_context, tokens) { + return tokens.map(function(token) { + if (isIdentToken(token)) { + switch (token.value) { + case "padding-box": + return 1; + case "content-box": + return 2; + } + } + return 0; + }); + } + }; + var backgroundColor = { + name: "background-color", + initialValue: "transparent", + prefix: false, + type: 3, + format: "color" + }; + var parseColorStop = function(context, args) { + var color2 = color$1.parse(context, args[0]); + var stop = args[1]; + return stop && isLengthPercentage(stop) ? { color: color2, stop } : { color: color2, stop: null }; + }; + var processColorStops = function(stops, lineLength) { + var first = stops[0]; + var last = stops[stops.length - 1]; + if (first.stop === null) { + first.stop = ZERO_LENGTH; + } + if (last.stop === null) { + last.stop = HUNDRED_PERCENT; + } + var processStops = []; + var previous = 0; + for (var i2 = 0; i2 < stops.length; i2++) { + var stop_1 = stops[i2].stop; + if (stop_1 !== null) { + var absoluteValue = getAbsoluteValue(stop_1, lineLength); + if (absoluteValue > previous) { + processStops.push(absoluteValue); + } else { + processStops.push(previous); + } + previous = absoluteValue; + } else { + processStops.push(null); + } + } + var gapBegin = null; + for (var i2 = 0; i2 < processStops.length; i2++) { + var stop_2 = processStops[i2]; + if (stop_2 === null) { + if (gapBegin === null) { + gapBegin = i2; + } + } else if (gapBegin !== null) { + var gapLength = i2 - gapBegin; + var beforeGap = processStops[gapBegin - 1]; + var gapValue = (stop_2 - beforeGap) / (gapLength + 1); + for (var g = 1; g <= gapLength; g++) { + processStops[gapBegin + g - 1] = gapValue * g; + } + gapBegin = null; + } + } + return stops.map(function(_a, i3) { + var color2 = _a.color; + return { color: color2, stop: Math.max(Math.min(1, processStops[i3] / lineLength), 0) }; + }); + }; + var getAngleFromCorner = function(corner, width, height) { + var centerX = width / 2; + var centerY = height / 2; + var x = getAbsoluteValue(corner[0], width) - centerX; + var y = centerY - getAbsoluteValue(corner[1], height); + return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2); + }; + var calculateGradientDirection = function(angle2, width, height) { + var radian = typeof angle2 === "number" ? angle2 : getAngleFromCorner(angle2, width, height); + var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian)); + var halfWidth = width / 2; + var halfHeight = height / 2; + var halfLineLength = lineLength / 2; + var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength; + var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength; + return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff]; + }; + var distance = function(a2, b) { + return Math.sqrt(a2 * a2 + b * b); + }; + var findCorner = function(width, height, x, y, closest) { + var corners = [ + [0, 0], + [0, height], + [width, 0], + [width, height] + ]; + return corners.reduce(function(stat, corner) { + var cx = corner[0], cy = corner[1]; + var d = distance(x - cx, y - cy); + if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) { + return { + optimumCorner: corner, + optimumDistance: d + }; + } + return stat; + }, { + optimumDistance: closest ? Infinity : -Infinity, + optimumCorner: null + }).optimumCorner; + }; + var calculateRadius = function(gradient, x, y, width, height) { + var rx = 0; + var ry = 0; + switch (gradient.size) { + case 0: + if (gradient.shape === 0) { + rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height)); + } else if (gradient.shape === 1) { + rx = Math.min(Math.abs(x), Math.abs(x - width)); + ry = Math.min(Math.abs(y), Math.abs(y - height)); + } + break; + case 2: + if (gradient.shape === 0) { + rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height)); + } else if (gradient.shape === 1) { + var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width)); + var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1]; + rx = distance(cx - x, (cy - y) / c); + ry = c * rx; + } + break; + case 1: + if (gradient.shape === 0) { + rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height)); + } else if (gradient.shape === 1) { + rx = Math.max(Math.abs(x), Math.abs(x - width)); + ry = Math.max(Math.abs(y), Math.abs(y - height)); + } + break; + case 3: + if (gradient.shape === 0) { + rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height)); + } else if (gradient.shape === 1) { + var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width)); + var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1]; + rx = distance(cx - x, (cy - y) / c); + ry = c * rx; + } + break; + } + if (Array.isArray(gradient.size)) { + rx = getAbsoluteValue(gradient.size[0], width); + ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx; + } + return [rx, ry]; + }; + var linearGradient = function(context, tokens) { + var angle$1 = deg(180); + var stops = []; + parseFunctionArgs(tokens).forEach(function(arg, i2) { + if (i2 === 0) { + var firstToken = arg[0]; + if (firstToken.type === 20 && firstToken.value === "to") { + angle$1 = parseNamedSide(arg); + return; + } else if (isAngle(firstToken)) { + angle$1 = angle.parse(context, firstToken); + return; + } + } + var colorStop = parseColorStop(context, arg); + stops.push(colorStop); + }); + return { + angle: angle$1, + stops, + type: 1 + /* LINEAR_GRADIENT */ + }; + }; + var prefixLinearGradient = function(context, tokens) { + var angle$1 = deg(180); + var stops = []; + parseFunctionArgs(tokens).forEach(function(arg, i2) { + if (i2 === 0) { + var firstToken = arg[0]; + if (firstToken.type === 20 && ["top", "left", "right", "bottom"].indexOf(firstToken.value) !== -1) { + angle$1 = parseNamedSide(arg); + return; + } else if (isAngle(firstToken)) { + angle$1 = (angle.parse(context, firstToken) + deg(270)) % deg(360); + return; + } + } + var colorStop = parseColorStop(context, arg); + stops.push(colorStop); + }); + return { + angle: angle$1, + stops, + type: 1 + /* LINEAR_GRADIENT */ + }; + }; + var webkitGradient = function(context, tokens) { + var angle2 = deg(180); + var stops = []; + var type = 1; + var shape = 0; + var size = 3; + var position2 = []; + parseFunctionArgs(tokens).forEach(function(arg, i2) { + var firstToken = arg[0]; + if (i2 === 0) { + if (isIdentToken(firstToken) && firstToken.value === "linear") { + type = 1; + return; + } else if (isIdentToken(firstToken) && firstToken.value === "radial") { + type = 2; + return; + } + } + if (firstToken.type === 18) { + if (firstToken.name === "from") { + var color2 = color$1.parse(context, firstToken.values[0]); + stops.push({ stop: ZERO_LENGTH, color: color2 }); + } else if (firstToken.name === "to") { + var color2 = color$1.parse(context, firstToken.values[0]); + stops.push({ stop: HUNDRED_PERCENT, color: color2 }); + } else if (firstToken.name === "color-stop") { + var values = firstToken.values.filter(nonFunctionArgSeparator); + if (values.length === 2) { + var color2 = color$1.parse(context, values[1]); + var stop_1 = values[0]; + if (isNumberToken(stop_1)) { + stops.push({ + stop: { type: 16, number: stop_1.number * 100, flags: stop_1.flags }, + color: color2 + }); + } + } + } + } + }); + return type === 1 ? { + angle: (angle2 + deg(180)) % deg(360), + stops, + type + } : { size, shape, stops, position: position2, type }; + }; + var CLOSEST_SIDE = "closest-side"; + var FARTHEST_SIDE = "farthest-side"; + var CLOSEST_CORNER = "closest-corner"; + var FARTHEST_CORNER = "farthest-corner"; + var CIRCLE = "circle"; + var ELLIPSE = "ellipse"; + var COVER = "cover"; + var CONTAIN = "contain"; + var radialGradient = function(context, tokens) { + var shape = 0; + var size = 3; + var stops = []; + var position2 = []; + parseFunctionArgs(tokens).forEach(function(arg, i2) { + var isColorStop = true; + if (i2 === 0) { + var isAtPosition_1 = false; + isColorStop = arg.reduce(function(acc, token) { + if (isAtPosition_1) { + if (isIdentToken(token)) { + switch (token.value) { + case "center": + position2.push(FIFTY_PERCENT); + return acc; + case "top": + case "left": + position2.push(ZERO_LENGTH); + return acc; + case "right": + case "bottom": + position2.push(HUNDRED_PERCENT); + return acc; + } + } else if (isLengthPercentage(token) || isLength(token)) { + position2.push(token); + } + } else if (isIdentToken(token)) { + switch (token.value) { + case CIRCLE: + shape = 0; + return false; + case ELLIPSE: + shape = 1; + return false; + case "at": + isAtPosition_1 = true; + return false; + case CLOSEST_SIDE: + size = 0; + return false; + case COVER: + case FARTHEST_SIDE: + size = 1; + return false; + case CONTAIN: + case CLOSEST_CORNER: + size = 2; + return false; + case FARTHEST_CORNER: + size = 3; + return false; + } + } else if (isLength(token) || isLengthPercentage(token)) { + if (!Array.isArray(size)) { + size = []; + } + size.push(token); + return false; + } + return acc; + }, isColorStop); + } + if (isColorStop) { + var colorStop = parseColorStop(context, arg); + stops.push(colorStop); + } + }); + return { + size, + shape, + stops, + position: position2, + type: 2 + /* RADIAL_GRADIENT */ + }; + }; + var prefixRadialGradient = function(context, tokens) { + var shape = 0; + var size = 3; + var stops = []; + var position2 = []; + parseFunctionArgs(tokens).forEach(function(arg, i2) { + var isColorStop = true; + if (i2 === 0) { + isColorStop = arg.reduce(function(acc, token) { + if (isIdentToken(token)) { + switch (token.value) { + case "center": + position2.push(FIFTY_PERCENT); + return false; + case "top": + case "left": + position2.push(ZERO_LENGTH); + return false; + case "right": + case "bottom": + position2.push(HUNDRED_PERCENT); + return false; + } + } else if (isLengthPercentage(token) || isLength(token)) { + position2.push(token); + return false; + } + return acc; + }, isColorStop); + } else if (i2 === 1) { + isColorStop = arg.reduce(function(acc, token) { + if (isIdentToken(token)) { + switch (token.value) { + case CIRCLE: + shape = 0; + return false; + case ELLIPSE: + shape = 1; + return false; + case CONTAIN: + case CLOSEST_SIDE: + size = 0; + return false; + case FARTHEST_SIDE: + size = 1; + return false; + case CLOSEST_CORNER: + size = 2; + return false; + case COVER: + case FARTHEST_CORNER: + size = 3; + return false; + } + } else if (isLength(token) || isLengthPercentage(token)) { + if (!Array.isArray(size)) { + size = []; + } + size.push(token); + return false; + } + return acc; + }, isColorStop); + } + if (isColorStop) { + var colorStop = parseColorStop(context, arg); + stops.push(colorStop); + } + }); + return { + size, + shape, + stops, + position: position2, + type: 2 + /* RADIAL_GRADIENT */ + }; + }; + var isLinearGradient = function(background2) { + return background2.type === 1; + }; + var isRadialGradient = function(background2) { + return background2.type === 2; + }; + var image = { + name: "image", + parse: function(context, value) { + if (value.type === 22) { + var image_1 = { + url: value.value, + type: 0 + /* URL */ + }; + context.cache.addImage(value.value); + return image_1; + } + if (value.type === 18) { + var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name]; + if (typeof imageFunction === "undefined") { + throw new Error('Attempting to parse an unsupported image function "' + value.name + '"'); + } + return imageFunction(context, value.values); + } + throw new Error("Unsupported image type " + value.type); + } + }; + function isSupportedImage(value) { + return !(value.type === 20 && value.value === "none") && (value.type !== 18 || !!SUPPORTED_IMAGE_FUNCTIONS[value.name]); + } + var SUPPORTED_IMAGE_FUNCTIONS = { + "linear-gradient": linearGradient, + "-moz-linear-gradient": prefixLinearGradient, + "-ms-linear-gradient": prefixLinearGradient, + "-o-linear-gradient": prefixLinearGradient, + "-webkit-linear-gradient": prefixLinearGradient, + "radial-gradient": radialGradient, + "-moz-radial-gradient": prefixRadialGradient, + "-ms-radial-gradient": prefixRadialGradient, + "-o-radial-gradient": prefixRadialGradient, + "-webkit-radial-gradient": prefixRadialGradient, + "-webkit-gradient": webkitGradient + }; + var backgroundImage = { + name: "background-image", + initialValue: "none", + type: 1, + prefix: false, + parse: function(context, tokens) { + if (tokens.length === 0) { + return []; + } + var first = tokens[0]; + if (first.type === 20 && first.value === "none") { + return []; + } + return tokens.filter(function(value) { + return nonFunctionArgSeparator(value) && isSupportedImage(value); + }).map(function(value) { + return image.parse(context, value); + }); + } + }; + var backgroundOrigin = { + name: "background-origin", + initialValue: "border-box", + prefix: false, + type: 1, + parse: function(_context, tokens) { + return tokens.map(function(token) { + if (isIdentToken(token)) { + switch (token.value) { + case "padding-box": + return 1; + case "content-box": + return 2; + } + } + return 0; + }); + } + }; + var backgroundPosition = { + name: "background-position", + initialValue: "0% 0%", + type: 1, + prefix: false, + parse: function(_context, tokens) { + return parseFunctionArgs(tokens).map(function(values) { + return values.filter(isLengthPercentage); + }).map(parseLengthPercentageTuple); + } + }; + var backgroundRepeat = { + name: "background-repeat", + initialValue: "repeat", + prefix: false, + type: 1, + parse: function(_context, tokens) { + return parseFunctionArgs(tokens).map(function(values) { + return values.filter(isIdentToken).map(function(token) { + return token.value; + }).join(" "); + }).map(parseBackgroundRepeat); + } + }; + var parseBackgroundRepeat = function(value) { + switch (value) { + case "no-repeat": + return 1; + case "repeat-x": + case "repeat no-repeat": + return 2; + case "repeat-y": + case "no-repeat repeat": + return 3; + case "repeat": + default: + return 0; + } + }; + var BACKGROUND_SIZE; + (function(BACKGROUND_SIZE2) { + BACKGROUND_SIZE2["AUTO"] = "auto"; + BACKGROUND_SIZE2["CONTAIN"] = "contain"; + BACKGROUND_SIZE2["COVER"] = "cover"; + })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {})); + var backgroundSize = { + name: "background-size", + initialValue: "0", + prefix: false, + type: 1, + parse: function(_context, tokens) { + return parseFunctionArgs(tokens).map(function(values) { + return values.filter(isBackgroundSizeInfoToken); + }); + } + }; + var isBackgroundSizeInfoToken = function(value) { + return isIdentToken(value) || isLengthPercentage(value); + }; + var borderColorForSide = function(side) { + return { + name: "border-" + side + "-color", + initialValue: "transparent", + prefix: false, + type: 3, + format: "color" + }; + }; + var borderTopColor = borderColorForSide("top"); + var borderRightColor = borderColorForSide("right"); + var borderBottomColor = borderColorForSide("bottom"); + var borderLeftColor = borderColorForSide("left"); + var borderRadiusForSide = function(side) { + return { + name: "border-radius-" + side, + initialValue: "0 0", + prefix: false, + type: 1, + parse: function(_context, tokens) { + return parseLengthPercentageTuple(tokens.filter(isLengthPercentage)); + } + }; + }; + var borderTopLeftRadius = borderRadiusForSide("top-left"); + var borderTopRightRadius = borderRadiusForSide("top-right"); + var borderBottomRightRadius = borderRadiusForSide("bottom-right"); + var borderBottomLeftRadius = borderRadiusForSide("bottom-left"); + var borderStyleForSide = function(side) { + return { + name: "border-" + side + "-style", + initialValue: "solid", + prefix: false, + type: 2, + parse: function(_context, style) { + switch (style) { + case "none": + return 0; + case "dashed": + return 2; + case "dotted": + return 3; + case "double": + return 4; + } + return 1; + } + }; + }; + var borderTopStyle = borderStyleForSide("top"); + var borderRightStyle = borderStyleForSide("right"); + var borderBottomStyle = borderStyleForSide("bottom"); + var borderLeftStyle = borderStyleForSide("left"); + var borderWidthForSide = function(side) { + return { + name: "border-" + side + "-width", + initialValue: "0", + type: 0, + prefix: false, + parse: function(_context, token) { + if (isDimensionToken(token)) { + return token.number; + } + return 0; + } + }; + }; + var borderTopWidth = borderWidthForSide("top"); + var borderRightWidth = borderWidthForSide("right"); + var borderBottomWidth = borderWidthForSide("bottom"); + var borderLeftWidth = borderWidthForSide("left"); + var color = { + name: "color", + initialValue: "transparent", + prefix: false, + type: 3, + format: "color" + }; + var direction = { + name: "direction", + initialValue: "ltr", + prefix: false, + type: 2, + parse: function(_context, direction2) { + switch (direction2) { + case "rtl": + return 1; + case "ltr": + default: + return 0; + } + } + }; + var display2 = { + name: "display", + initialValue: "inline-block", + prefix: false, + type: 1, + parse: function(_context, tokens) { + return tokens.filter(isIdentToken).reduce( + function(bit, token) { + return bit | parseDisplayValue(token.value); + }, + 0 + /* NONE */ + ); + } + }; + var parseDisplayValue = function(display3) { + switch (display3) { + case "block": + case "-webkit-box": + return 2; + case "inline": + return 4; + case "run-in": + return 8; + case "flow": + return 16; + case "flow-root": + return 32; + case "table": + return 64; + case "flex": + case "-webkit-flex": + return 128; + case "grid": + case "-ms-grid": + return 256; + case "ruby": + return 512; + case "subgrid": + return 1024; + case "list-item": + return 2048; + case "table-row-group": + return 4096; + case "table-header-group": + return 8192; + case "table-footer-group": + return 16384; + case "table-row": + return 32768; + case "table-cell": + return 65536; + case "table-column-group": + return 131072; + case "table-column": + return 262144; + case "table-caption": + return 524288; + case "ruby-base": + return 1048576; + case "ruby-text": + return 2097152; + case "ruby-base-container": + return 4194304; + case "ruby-text-container": + return 8388608; + case "contents": + return 16777216; + case "inline-block": + return 33554432; + case "inline-list-item": + return 67108864; + case "inline-table": + return 134217728; + case "inline-flex": + return 268435456; + case "inline-grid": + return 536870912; + } + return 0; + }; + var float = { + name: "float", + initialValue: "none", + prefix: false, + type: 2, + parse: function(_context, float2) { + switch (float2) { + case "left": + return 1; + case "right": + return 2; + case "inline-start": + return 3; + case "inline-end": + return 4; + } + return 0; + } + }; + var letterSpacing = { + name: "letter-spacing", + initialValue: "0", + prefix: false, + type: 0, + parse: function(_context, token) { + if (token.type === 20 && token.value === "normal") { + return 0; + } + if (token.type === 17) { + return token.number; + } + if (token.type === 15) { + return token.number; + } + return 0; + } + }; + var LINE_BREAK; + (function(LINE_BREAK2) { + LINE_BREAK2["NORMAL"] = "normal"; + LINE_BREAK2["STRICT"] = "strict"; + })(LINE_BREAK || (LINE_BREAK = {})); + var lineBreak = { + name: "line-break", + initialValue: "normal", + prefix: false, + type: 2, + parse: function(_context, lineBreak2) { + switch (lineBreak2) { + case "strict": + return LINE_BREAK.STRICT; + case "normal": + default: + return LINE_BREAK.NORMAL; + } + } + }; + var lineHeight = { + name: "line-height", + initialValue: "normal", + prefix: false, + type: 4 + /* TOKEN_VALUE */ + }; + var computeLineHeight = function(token, fontSize2) { + if (isIdentToken(token) && token.value === "normal") { + return 1.2 * fontSize2; + } else if (token.type === 17) { + return fontSize2 * token.number; + } else if (isLengthPercentage(token)) { + return getAbsoluteValue(token, fontSize2); + } + return fontSize2; + }; + var listStyleImage = { + name: "list-style-image", + initialValue: "none", + type: 0, + prefix: false, + parse: function(context, token) { + if (token.type === 20 && token.value === "none") { + return null; + } + return image.parse(context, token); + } + }; + var listStylePosition = { + name: "list-style-position", + initialValue: "outside", + prefix: false, + type: 2, + parse: function(_context, position2) { + switch (position2) { + case "inside": + return 0; + case "outside": + default: + return 1; + } + } + }; + var listStyleType = { + name: "list-style-type", + initialValue: "none", + prefix: false, + type: 2, + parse: function(_context, type) { + switch (type) { + case "disc": + return 0; + case "circle": + return 1; + case "square": + return 2; + case "decimal": + return 3; + case "cjk-decimal": + return 4; + case "decimal-leading-zero": + return 5; + case "lower-roman": + return 6; + case "upper-roman": + return 7; + case "lower-greek": + return 8; + case "lower-alpha": + return 9; + case "upper-alpha": + return 10; + case "arabic-indic": + return 11; + case "armenian": + return 12; + case "bengali": + return 13; + case "cambodian": + return 14; + case "cjk-earthly-branch": + return 15; + case "cjk-heavenly-stem": + return 16; + case "cjk-ideographic": + return 17; + case "devanagari": + return 18; + case "ethiopic-numeric": + return 19; + case "georgian": + return 20; + case "gujarati": + return 21; + case "gurmukhi": + return 22; + case "hebrew": + return 22; + case "hiragana": + return 23; + case "hiragana-iroha": + return 24; + case "japanese-formal": + return 25; + case "japanese-informal": + return 26; + case "kannada": + return 27; + case "katakana": + return 28; + case "katakana-iroha": + return 29; + case "khmer": + return 30; + case "korean-hangul-formal": + return 31; + case "korean-hanja-formal": + return 32; + case "korean-hanja-informal": + return 33; + case "lao": + return 34; + case "lower-armenian": + return 35; + case "malayalam": + return 36; + case "mongolian": + return 37; + case "myanmar": + return 38; + case "oriya": + return 39; + case "persian": + return 40; + case "simp-chinese-formal": + return 41; + case "simp-chinese-informal": + return 42; + case "tamil": + return 43; + case "telugu": + return 44; + case "thai": + return 45; + case "tibetan": + return 46; + case "trad-chinese-formal": + return 47; + case "trad-chinese-informal": + return 48; + case "upper-armenian": + return 49; + case "disclosure-open": + return 50; + case "disclosure-closed": + return 51; + case "none": + default: + return -1; + } + } + }; + var marginForSide = function(side) { + return { + name: "margin-" + side, + initialValue: "0", + prefix: false, + type: 4 + /* TOKEN_VALUE */ + }; + }; + var marginTop = marginForSide("top"); + var marginRight = marginForSide("right"); + var marginBottom = marginForSide("bottom"); + var marginLeft = marginForSide("left"); + var overflow = { + name: "overflow", + initialValue: "visible", + prefix: false, + type: 1, + parse: function(_context, tokens) { + return tokens.filter(isIdentToken).map(function(overflow2) { + switch (overflow2.value) { + case "hidden": + return 1; + case "scroll": + return 2; + case "clip": + return 3; + case "auto": + return 4; + case "visible": + default: + return 0; + } + }); + } + }; + var overflowWrap = { + name: "overflow-wrap", + initialValue: "normal", + prefix: false, + type: 2, + parse: function(_context, overflow2) { + switch (overflow2) { + case "break-word": + return "break-word"; + case "normal": + default: + return "normal"; + } + } + }; + var paddingForSide = function(side) { + return { + name: "padding-" + side, + initialValue: "0", + prefix: false, + type: 3, + format: "length-percentage" + }; + }; + var paddingTop = paddingForSide("top"); + var paddingRight = paddingForSide("right"); + var paddingBottom = paddingForSide("bottom"); + var paddingLeft = paddingForSide("left"); + var textAlign = { + name: "text-align", + initialValue: "left", + prefix: false, + type: 2, + parse: function(_context, textAlign2) { + switch (textAlign2) { + case "right": + return 2; + case "center": + case "justify": + return 1; + case "left": + default: + return 0; + } + } + }; + var position = { + name: "position", + initialValue: "static", + prefix: false, + type: 2, + parse: function(_context, position2) { + switch (position2) { + case "relative": + return 1; + case "absolute": + return 2; + case "fixed": + return 3; + case "sticky": + return 4; + } + return 0; + } + }; + var textShadow = { + name: "text-shadow", + initialValue: "none", + type: 1, + prefix: false, + parse: function(context, tokens) { + if (tokens.length === 1 && isIdentWithValue(tokens[0], "none")) { + return []; + } + return parseFunctionArgs(tokens).map(function(values) { + var shadow = { + color: COLORS.TRANSPARENT, + offsetX: ZERO_LENGTH, + offsetY: ZERO_LENGTH, + blur: ZERO_LENGTH + }; + var c = 0; + for (var i2 = 0; i2 < values.length; i2++) { + var token = values[i2]; + if (isLength(token)) { + if (c === 0) { + shadow.offsetX = token; + } else if (c === 1) { + shadow.offsetY = token; + } else { + shadow.blur = token; + } + c++; + } else { + shadow.color = color$1.parse(context, token); + } + } + return shadow; + }); + } + }; + var textTransform = { + name: "text-transform", + initialValue: "none", + prefix: false, + type: 2, + parse: function(_context, textTransform2) { + switch (textTransform2) { + case "uppercase": + return 2; + case "lowercase": + return 1; + case "capitalize": + return 3; + } + return 0; + } + }; + var transform$1 = { + name: "transform", + initialValue: "none", + prefix: true, + type: 0, + parse: function(_context, token) { + if (token.type === 20 && token.value === "none") { + return null; + } + if (token.type === 18) { + var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name]; + if (typeof transformFunction === "undefined") { + throw new Error('Attempting to parse an unsupported transform function "' + token.name + '"'); + } + return transformFunction(token.values); + } + return null; + } + }; + var matrix = function(args) { + var values = args.filter(function(arg) { + return arg.type === 17; + }).map(function(arg) { + return arg.number; + }); + return values.length === 6 ? values : null; + }; + var matrix3d = function(args) { + var values = args.filter(function(arg) { + return arg.type === 17; + }).map(function(arg) { + return arg.number; + }); + var a1 = values[0], b1 = values[1]; + values[2]; + values[3]; + var a2 = values[4], b2 = values[5]; + values[6]; + values[7]; + values[8]; + values[9]; + values[10]; + values[11]; + var a4 = values[12], b4 = values[13]; + values[14]; + values[15]; + return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null; + }; + var SUPPORTED_TRANSFORM_FUNCTIONS = { + matrix, + matrix3d + }; + var DEFAULT_VALUE = { + type: 16, + number: 50, + flags: FLAG_INTEGER + }; + var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE]; + var transformOrigin = { + name: "transform-origin", + initialValue: "50% 50%", + prefix: true, + type: 1, + parse: function(_context, tokens) { + var origins = tokens.filter(isLengthPercentage); + if (origins.length !== 2) { + return DEFAULT; + } + return [origins[0], origins[1]]; + } + }; + var visibility = { + name: "visible", + initialValue: "none", + prefix: false, + type: 2, + parse: function(_context, visibility2) { + switch (visibility2) { + case "hidden": + return 1; + case "collapse": + return 2; + case "visible": + default: + return 0; + } + } + }; + var WORD_BREAK; + (function(WORD_BREAK2) { + WORD_BREAK2["NORMAL"] = "normal"; + WORD_BREAK2["BREAK_ALL"] = "break-all"; + WORD_BREAK2["KEEP_ALL"] = "keep-all"; + })(WORD_BREAK || (WORD_BREAK = {})); + var wordBreak = { + name: "word-break", + initialValue: "normal", + prefix: false, + type: 2, + parse: function(_context, wordBreak2) { + switch (wordBreak2) { + case "break-all": + return WORD_BREAK.BREAK_ALL; + case "keep-all": + return WORD_BREAK.KEEP_ALL; + case "normal": + default: + return WORD_BREAK.NORMAL; + } + } + }; + var zIndex = { + name: "z-index", + initialValue: "auto", + prefix: false, + type: 0, + parse: function(_context, token) { + if (token.type === 20) { + return { auto: true, order: 0 }; + } + if (isNumberToken(token)) { + return { auto: false, order: token.number }; + } + throw new Error("Invalid z-index number parsed"); + } + }; + var time = { + name: "time", + parse: function(_context, value) { + if (value.type === 15) { + switch (value.unit.toLowerCase()) { + case "s": + return 1e3 * value.number; + case "ms": + return value.number; + } + } + throw new Error("Unsupported time type"); + } + }; + var opacity = { + name: "opacity", + initialValue: "1", + type: 0, + prefix: false, + parse: function(_context, token) { + if (isNumberToken(token)) { + return token.number; + } + return 1; + } + }; + var textDecorationColor = { + name: "text-decoration-color", + initialValue: "transparent", + prefix: false, + type: 3, + format: "color" + }; + var textDecorationLine = { + name: "text-decoration-line", + initialValue: "none", + prefix: false, + type: 1, + parse: function(_context, tokens) { + return tokens.filter(isIdentToken).map(function(token) { + switch (token.value) { + case "underline": + return 1; + case "overline": + return 2; + case "line-through": + return 3; + case "none": + return 4; + } + return 0; + }).filter(function(line) { + return line !== 0; + }); + } + }; + var fontFamily2 = { + name: "font-family", + initialValue: "", + prefix: false, + type: 1, + parse: function(_context, tokens) { + var accumulator = []; + var results = []; + tokens.forEach(function(token) { + switch (token.type) { + case 20: + case 0: + accumulator.push(token.value); + break; + case 17: + accumulator.push(token.number.toString()); + break; + case 4: + results.push(accumulator.join(" ")); + accumulator.length = 0; + break; + } + }); + if (accumulator.length) { + results.push(accumulator.join(" ")); + } + return results.map(function(result) { + return result.indexOf(" ") === -1 ? result : "'" + result + "'"; + }); + } + }; + var fontSize = { + name: "font-size", + initialValue: "0", + prefix: false, + type: 3, + format: "length" + }; + var fontWeight2 = { + name: "font-weight", + initialValue: "normal", + type: 0, + prefix: false, + parse: function(_context, token) { + if (isNumberToken(token)) { + return token.number; + } + if (isIdentToken(token)) { + switch (token.value) { + case "bold": + return 700; + case "normal": + default: + return 400; + } + } + return 400; + } + }; + var fontVariant = { + name: "font-variant", + initialValue: "none", + type: 1, + prefix: false, + parse: function(_context, tokens) { + return tokens.filter(isIdentToken).map(function(token) { + return token.value; + }); + } + }; + var fontStyle = { + name: "font-style", + initialValue: "normal", + prefix: false, + type: 2, + parse: function(_context, overflow2) { + switch (overflow2) { + case "oblique": + return "oblique"; + case "italic": + return "italic"; + case "normal": + default: + return "normal"; + } + } + }; + var contains = function(bit, value) { + return (bit & value) !== 0; + }; + var content = { + name: "content", + initialValue: "none", + type: 1, + prefix: false, + parse: function(_context, tokens) { + if (tokens.length === 0) { + return []; + } + var first = tokens[0]; + if (first.type === 20 && first.value === "none") { + return []; + } + return tokens; + } + }; + var counterIncrement = { + name: "counter-increment", + initialValue: "none", + prefix: true, + type: 1, + parse: function(_context, tokens) { + if (tokens.length === 0) { + return null; + } + var first = tokens[0]; + if (first.type === 20 && first.value === "none") { + return null; + } + var increments = []; + var filtered = tokens.filter(nonWhiteSpace); + for (var i2 = 0; i2 < filtered.length; i2++) { + var counter = filtered[i2]; + var next = filtered[i2 + 1]; + if (counter.type === 20) { + var increment = next && isNumberToken(next) ? next.number : 1; + increments.push({ counter: counter.value, increment }); + } + } + return increments; + } + }; + var counterReset = { + name: "counter-reset", + initialValue: "none", + prefix: true, + type: 1, + parse: function(_context, tokens) { + if (tokens.length === 0) { + return []; + } + var resets = []; + var filtered = tokens.filter(nonWhiteSpace); + for (var i2 = 0; i2 < filtered.length; i2++) { + var counter = filtered[i2]; + var next = filtered[i2 + 1]; + if (isIdentToken(counter) && counter.value !== "none") { + var reset = next && isNumberToken(next) ? next.number : 0; + resets.push({ counter: counter.value, reset }); + } + } + return resets; + } + }; + var duration = { + name: "duration", + initialValue: "0s", + prefix: false, + type: 1, + parse: function(context, tokens) { + return tokens.filter(isDimensionToken).map(function(token) { + return time.parse(context, token); + }); + } + }; + var quotes = { + name: "quotes", + initialValue: "none", + prefix: true, + type: 1, + parse: function(_context, tokens) { + if (tokens.length === 0) { + return null; + } + var first = tokens[0]; + if (first.type === 20 && first.value === "none") { + return null; + } + var quotes2 = []; + var filtered = tokens.filter(isStringToken); + if (filtered.length % 2 !== 0) { + return null; + } + for (var i2 = 0; i2 < filtered.length; i2 += 2) { + var open_1 = filtered[i2].value; + var close_1 = filtered[i2 + 1].value; + quotes2.push({ open: open_1, close: close_1 }); + } + return quotes2; + } + }; + var getQuote = function(quotes2, depth, open) { + if (!quotes2) { + return ""; + } + var quote = quotes2[Math.min(depth, quotes2.length - 1)]; + if (!quote) { + return ""; + } + return open ? quote.open : quote.close; + }; + var boxShadow = { + name: "box-shadow", + initialValue: "none", + type: 1, + prefix: false, + parse: function(context, tokens) { + if (tokens.length === 1 && isIdentWithValue(tokens[0], "none")) { + return []; + } + return parseFunctionArgs(tokens).map(function(values) { + var shadow = { + color: 255, + offsetX: ZERO_LENGTH, + offsetY: ZERO_LENGTH, + blur: ZERO_LENGTH, + spread: ZERO_LENGTH, + inset: false + }; + var c = 0; + for (var i2 = 0; i2 < values.length; i2++) { + var token = values[i2]; + if (isIdentWithValue(token, "inset")) { + shadow.inset = true; + } else if (isLength(token)) { + if (c === 0) { + shadow.offsetX = token; + } else if (c === 1) { + shadow.offsetY = token; + } else if (c === 2) { + shadow.blur = token; + } else { + shadow.spread = token; + } + c++; + } else { + shadow.color = color$1.parse(context, token); + } + } + return shadow; + }); + } + }; + var paintOrder = { + name: "paint-order", + initialValue: "normal", + prefix: false, + type: 1, + parse: function(_context, tokens) { + var DEFAULT_VALUE2 = [ + 0, + 1, + 2 + /* MARKERS */ + ]; + var layers = []; + tokens.filter(isIdentToken).forEach(function(token) { + switch (token.value) { + case "stroke": + layers.push( + 1 + /* STROKE */ + ); + break; + case "fill": + layers.push( + 0 + /* FILL */ + ); + break; + case "markers": + layers.push( + 2 + /* MARKERS */ + ); + break; + } + }); + DEFAULT_VALUE2.forEach(function(value) { + if (layers.indexOf(value) === -1) { + layers.push(value); + } + }); + return layers; + } + }; + var webkitTextStrokeColor = { + name: "-webkit-text-stroke-color", + initialValue: "currentcolor", + prefix: false, + type: 3, + format: "color" + }; + var webkitTextStrokeWidth = { + name: "-webkit-text-stroke-width", + initialValue: "0", + type: 0, + prefix: false, + parse: function(_context, token) { + if (isDimensionToken(token)) { + return token.number; + } + return 0; + } + }; + var CSSParsedDeclaration = ( + /** @class */ + (function() { + function CSSParsedDeclaration2(context, declaration) { + var _a, _b; + this.animationDuration = parse(context, duration, declaration.animationDuration); + this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip); + this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor); + this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage); + this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin); + this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition); + this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat); + this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize); + this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor); + this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor); + this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor); + this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor); + this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius); + this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius); + this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius); + this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius); + this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle); + this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle); + this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle); + this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle); + this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth); + this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth); + this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth); + this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth); + this.boxShadow = parse(context, boxShadow, declaration.boxShadow); + this.color = parse(context, color, declaration.color); + this.direction = parse(context, direction, declaration.direction); + this.display = parse(context, display2, declaration.display); + this.float = parse(context, float, declaration.cssFloat); + this.fontFamily = parse(context, fontFamily2, declaration.fontFamily); + this.fontSize = parse(context, fontSize, declaration.fontSize); + this.fontStyle = parse(context, fontStyle, declaration.fontStyle); + this.fontVariant = parse(context, fontVariant, declaration.fontVariant); + this.fontWeight = parse(context, fontWeight2, declaration.fontWeight); + this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing); + this.lineBreak = parse(context, lineBreak, declaration.lineBreak); + this.lineHeight = parse(context, lineHeight, declaration.lineHeight); + this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage); + this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition); + this.listStyleType = parse(context, listStyleType, declaration.listStyleType); + this.marginTop = parse(context, marginTop, declaration.marginTop); + this.marginRight = parse(context, marginRight, declaration.marginRight); + this.marginBottom = parse(context, marginBottom, declaration.marginBottom); + this.marginLeft = parse(context, marginLeft, declaration.marginLeft); + this.opacity = parse(context, opacity, declaration.opacity); + var overflowTuple = parse(context, overflow, declaration.overflow); + this.overflowX = overflowTuple[0]; + this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0]; + this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap); + this.paddingTop = parse(context, paddingTop, declaration.paddingTop); + this.paddingRight = parse(context, paddingRight, declaration.paddingRight); + this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom); + this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft); + this.paintOrder = parse(context, paintOrder, declaration.paintOrder); + this.position = parse(context, position, declaration.position); + this.textAlign = parse(context, textAlign, declaration.textAlign); + this.textDecorationColor = parse(context, textDecorationColor, (_a = declaration.textDecorationColor) !== null && _a !== void 0 ? _a : declaration.color); + this.textDecorationLine = parse(context, textDecorationLine, (_b = declaration.textDecorationLine) !== null && _b !== void 0 ? _b : declaration.textDecoration); + this.textShadow = parse(context, textShadow, declaration.textShadow); + this.textTransform = parse(context, textTransform, declaration.textTransform); + this.transform = parse(context, transform$1, declaration.transform); + this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin); + this.visibility = parse(context, visibility, declaration.visibility); + this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor); + this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth); + this.wordBreak = parse(context, wordBreak, declaration.wordBreak); + this.zIndex = parse(context, zIndex, declaration.zIndex); + } + CSSParsedDeclaration2.prototype.isVisible = function() { + return this.display > 0 && this.opacity > 0 && this.visibility === 0; + }; + CSSParsedDeclaration2.prototype.isTransparent = function() { + return isTransparent(this.backgroundColor); + }; + CSSParsedDeclaration2.prototype.isTransformed = function() { + return this.transform !== null; + }; + CSSParsedDeclaration2.prototype.isPositioned = function() { + return this.position !== 0; + }; + CSSParsedDeclaration2.prototype.isPositionedWithZIndex = function() { + return this.isPositioned() && !this.zIndex.auto; + }; + CSSParsedDeclaration2.prototype.isFloating = function() { + return this.float !== 0; + }; + CSSParsedDeclaration2.prototype.isInlineLevel = function() { + return contains( + this.display, + 4 + /* INLINE */ + ) || contains( + this.display, + 33554432 + /* INLINE_BLOCK */ + ) || contains( + this.display, + 268435456 + /* INLINE_FLEX */ + ) || contains( + this.display, + 536870912 + /* INLINE_GRID */ + ) || contains( + this.display, + 67108864 + /* INLINE_LIST_ITEM */ + ) || contains( + this.display, + 134217728 + /* INLINE_TABLE */ + ); + }; + return CSSParsedDeclaration2; + })() + ); + var CSSParsedPseudoDeclaration = ( + /** @class */ + /* @__PURE__ */ (function() { + function CSSParsedPseudoDeclaration2(context, declaration) { + this.content = parse(context, content, declaration.content); + this.quotes = parse(context, quotes, declaration.quotes); + } + return CSSParsedPseudoDeclaration2; + })() + ); + var CSSParsedCounterDeclaration = ( + /** @class */ + /* @__PURE__ */ (function() { + function CSSParsedCounterDeclaration2(context, declaration) { + this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement); + this.counterReset = parse(context, counterReset, declaration.counterReset); + } + return CSSParsedCounterDeclaration2; + })() + ); + var parse = function(context, descriptor, style) { + var tokenizer = new Tokenizer(); + var value = style !== null && typeof style !== "undefined" ? style.toString() : descriptor.initialValue; + tokenizer.write(value); + var parser = new Parser(tokenizer.read()); + switch (descriptor.type) { + case 2: + var token = parser.parseComponentValue(); + return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue); + case 0: + return descriptor.parse(context, parser.parseComponentValue()); + case 1: + return descriptor.parse(context, parser.parseComponentValues()); + case 4: + return parser.parseComponentValue(); + case 3: + switch (descriptor.format) { + case "angle": + return angle.parse(context, parser.parseComponentValue()); + case "color": + return color$1.parse(context, parser.parseComponentValue()); + case "image": + return image.parse(context, parser.parseComponentValue()); + case "length": + var length_1 = parser.parseComponentValue(); + return isLength(length_1) ? length_1 : ZERO_LENGTH; + case "length-percentage": + var value_1 = parser.parseComponentValue(); + return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH; + case "time": + return time.parse(context, parser.parseComponentValue()); + } + break; + } + }; + var elementDebuggerAttribute = "data-html2canvas-debug"; + var getElementDebugType = function(element) { + var attribute = element.getAttribute(elementDebuggerAttribute); + switch (attribute) { + case "all": + return 1; + case "clone": + return 2; + case "parse": + return 3; + case "render": + return 4; + default: + return 0; + } + }; + var isDebugging = function(element, type) { + var elementType = getElementDebugType(element); + return elementType === 1 || type === elementType; + }; + var ElementContainer = ( + /** @class */ + /* @__PURE__ */ (function() { + function ElementContainer2(context, element) { + this.context = context; + this.textNodes = []; + this.elements = []; + this.flags = 0; + if (isDebugging( + element, + 3 + /* PARSE */ + )) { + debugger; + } + this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null)); + if (isHTMLElementNode(element)) { + if (this.styles.animationDuration.some(function(duration2) { + return duration2 > 0; + })) { + element.style.animationDuration = "0s"; + } + if (this.styles.transform !== null) { + element.style.transform = "none"; + } + } + this.bounds = parseBounds(this.context, element); + if (isDebugging( + element, + 4 + /* RENDER */ + )) { + this.flags |= 16; + } + } + return ElementContainer2; + })() + ); + var base64 = "AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA="; + var chars$1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var lookup$1 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256); + for (var i$1 = 0; i$1 < chars$1.length; i$1++) { + lookup$1[chars$1.charCodeAt(i$1)] = i$1; + } + var decode = function(base642) { + var bufferLength = base642.length * 0.75, len = base642.length, i2, p = 0, encoded1, encoded2, encoded3, encoded4; + if (base642[base642.length - 1] === "=") { + bufferLength--; + if (base642[base642.length - 2] === "=") { + bufferLength--; + } + } + var buffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.slice !== "undefined" ? new ArrayBuffer(bufferLength) : new Array(bufferLength); + var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer); + for (i2 = 0; i2 < len; i2 += 4) { + encoded1 = lookup$1[base642.charCodeAt(i2)]; + encoded2 = lookup$1[base642.charCodeAt(i2 + 1)]; + encoded3 = lookup$1[base642.charCodeAt(i2 + 2)]; + encoded4 = lookup$1[base642.charCodeAt(i2 + 3)]; + bytes[p++] = encoded1 << 2 | encoded2 >> 4; + bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; + } + return buffer; + }; + var polyUint16Array = function(buffer) { + var length = buffer.length; + var bytes = []; + for (var i2 = 0; i2 < length; i2 += 2) { + bytes.push(buffer[i2 + 1] << 8 | buffer[i2]); + } + return bytes; + }; + var polyUint32Array = function(buffer) { + var length = buffer.length; + var bytes = []; + for (var i2 = 0; i2 < length; i2 += 4) { + bytes.push(buffer[i2 + 3] << 24 | buffer[i2 + 2] << 16 | buffer[i2 + 1] << 8 | buffer[i2]); + } + return bytes; + }; + var UTRIE2_SHIFT_2 = 5; + var UTRIE2_SHIFT_1 = 6 + 5; + var UTRIE2_INDEX_SHIFT = 2; + var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2; + var UTRIE2_LSCP_INDEX_2_OFFSET = 65536 >> UTRIE2_SHIFT_2; + var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2; + var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1; + var UTRIE2_LSCP_INDEX_2_LENGTH = 1024 >> UTRIE2_SHIFT_2; + var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH; + var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH; + var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 2048 >> 6; + var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH; + var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 65536 >> UTRIE2_SHIFT_1; + var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2; + var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1; + var slice16 = function(view, start, end) { + if (view.slice) { + return view.slice(start, end); + } + return new Uint16Array(Array.prototype.slice.call(view, start, end)); + }; + var slice32 = function(view, start, end) { + if (view.slice) { + return view.slice(start, end); + } + return new Uint32Array(Array.prototype.slice.call(view, start, end)); + }; + var createTrieFromBase64 = function(base642, _byteLength) { + var buffer = decode(base642); + var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer); + var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer); + var headerLength = 24; + var index = slice16(view16, headerLength / 2, view32[4] / 2); + var data = view32[5] === 2 ? slice16(view16, (headerLength + view32[4]) / 2) : slice32(view32, Math.ceil((headerLength + view32[4]) / 4)); + return new Trie(view32[0], view32[1], view32[2], view32[3], index, data); + }; + var Trie = ( + /** @class */ + (function() { + function Trie2(initialValue, errorValue, highStart, highValueIndex, index, data) { + this.initialValue = initialValue; + this.errorValue = errorValue; + this.highStart = highStart; + this.highValueIndex = highValueIndex; + this.index = index; + this.data = data; + } + Trie2.prototype.get = function(codePoint) { + var ix; + if (codePoint >= 0) { + if (codePoint < 55296 || codePoint > 56319 && codePoint <= 65535) { + ix = this.index[codePoint >> UTRIE2_SHIFT_2]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint <= 65535) { + ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + (codePoint - 55296 >> UTRIE2_SHIFT_2)]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint < this.highStart) { + ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1); + ix = this.index[ix]; + ix += codePoint >> UTRIE2_SHIFT_2 & UTRIE2_INDEX_2_MASK; + ix = this.index[ix]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint <= 1114111) { + return this.data[this.highValueIndex]; + } + } + return this.errorValue; + }; + return Trie2; + })() + ); + var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var lookup = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + var Prepend = 1; + var CR = 2; + var LF = 3; + var Control = 4; + var Extend = 5; + var SpacingMark = 7; + var L = 8; + var V = 9; + var T = 10; + var LV = 11; + var LVT = 12; + var ZWJ = 13; + var Extended_Pictographic = 14; + var RI = 15; + var toCodePoints = function(str) { + var codePoints = []; + var i2 = 0; + var length = str.length; + while (i2 < length) { + var value = str.charCodeAt(i2++); + if (value >= 55296 && value <= 56319 && i2 < length) { + var extra = str.charCodeAt(i2++); + if ((extra & 64512) === 56320) { + codePoints.push(((value & 1023) << 10) + (extra & 1023) + 65536); + } else { + codePoints.push(value); + i2--; + } + } else { + codePoints.push(value); + } + } + return codePoints; + }; + var fromCodePoint = function() { + var codePoints = []; + for (var _i = 0; _i < arguments.length; _i++) { + codePoints[_i] = arguments[_i]; + } + if (String.fromCodePoint) { + return String.fromCodePoint.apply(String, codePoints); + } + var length = codePoints.length; + if (!length) { + return ""; + } + var codeUnits = []; + var index = -1; + var result = ""; + while (++index < length) { + var codePoint = codePoints[index]; + if (codePoint <= 65535) { + codeUnits.push(codePoint); + } else { + codePoint -= 65536; + codeUnits.push((codePoint >> 10) + 55296, codePoint % 1024 + 56320); + } + if (index + 1 === length || codeUnits.length > 16384) { + result += String.fromCharCode.apply(String, codeUnits); + codeUnits.length = 0; + } + } + return result; + }; + var UnicodeTrie = createTrieFromBase64(base64); + var BREAK_NOT_ALLOWED = "\xD7"; + var BREAK_ALLOWED = "\xF7"; + var codePointToClass = function(codePoint) { + return UnicodeTrie.get(codePoint); + }; + var _graphemeBreakAtIndex = function(_codePoints, classTypes, index) { + var prevIndex = index - 2; + var prev = classTypes[prevIndex]; + var current = classTypes[index - 1]; + var next = classTypes[index]; + if (current === CR && next === LF) { + return BREAK_NOT_ALLOWED; + } + if (current === CR || current === LF || current === Control) { + return BREAK_ALLOWED; + } + if (next === CR || next === LF || next === Control) { + return BREAK_ALLOWED; + } + if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED; + } + if ((current === LV || current === V) && (next === V || next === T)) { + return BREAK_NOT_ALLOWED; + } + if ((current === LVT || current === T) && next === T) { + return BREAK_NOT_ALLOWED; + } + if (next === ZWJ || next === Extend) { + return BREAK_NOT_ALLOWED; + } + if (next === SpacingMark) { + return BREAK_NOT_ALLOWED; + } + if (current === Prepend) { + return BREAK_NOT_ALLOWED; + } + if (current === ZWJ && next === Extended_Pictographic) { + while (prev === Extend) { + prev = classTypes[--prevIndex]; + } + if (prev === Extended_Pictographic) { + return BREAK_NOT_ALLOWED; + } + } + if (current === RI && next === RI) { + var countRI = 0; + while (prev === RI) { + countRI++; + prev = classTypes[--prevIndex]; + } + if (countRI % 2 === 0) { + return BREAK_NOT_ALLOWED; + } + } + return BREAK_ALLOWED; + }; + var GraphemeBreaker = function(str) { + var codePoints = toCodePoints(str); + var length = codePoints.length; + var index = 0; + var lastEnd = 0; + var classTypes = codePoints.map(codePointToClass); + return { + next: function() { + if (index >= length) { + return { done: true, value: null }; + } + var graphemeBreak = BREAK_NOT_ALLOWED; + while (index < length && (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED) { + } + if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) { + var value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index)); + lastEnd = index; + return { value, done: false }; + } + return { done: true, value: null }; + } + }; + }; + var splitGraphemes = function(str) { + var breaker = GraphemeBreaker(str); + var graphemes = []; + var bk; + while (!(bk = breaker.next()).done) { + if (bk.value) { + graphemes.push(bk.value.slice()); + } + } + return graphemes; + }; + var testRangeBounds = function(document2) { + var TEST_HEIGHT = 123; + if (document2.createRange) { + var range2 = document2.createRange(); + if (range2.getBoundingClientRect) { + var testElement = document2.createElement("boundtest"); + testElement.style.height = TEST_HEIGHT + "px"; + testElement.style.display = "block"; + document2.body.appendChild(testElement); + range2.selectNode(testElement); + var rangeBounds = range2.getBoundingClientRect(); + var rangeHeight = Math.round(rangeBounds.height); + document2.body.removeChild(testElement); + if (rangeHeight === TEST_HEIGHT) { + return true; + } + } + } + return false; + }; + var testIOSLineBreak = function(document2) { + var testElement = document2.createElement("boundtest"); + testElement.style.width = "50px"; + testElement.style.display = "block"; + testElement.style.fontSize = "12px"; + testElement.style.letterSpacing = "0px"; + testElement.style.wordSpacing = "0px"; + document2.body.appendChild(testElement); + var range2 = document2.createRange(); + testElement.innerHTML = typeof "".repeat === "function" ? "👨".repeat(10) : ""; + var node = testElement.firstChild; + var textList = toCodePoints$1(node.data).map(function(i2) { + return fromCodePoint$1(i2); + }); + var offset = 0; + var prev = {}; + var supports = textList.every(function(text, i2) { + range2.setStart(node, offset); + range2.setEnd(node, offset + text.length); + var rect = range2.getBoundingClientRect(); + offset += text.length; + var boundAhead = rect.x > prev.x || rect.y > prev.y; + prev = rect; + if (i2 === 0) { + return true; + } + return boundAhead; + }); + document2.body.removeChild(testElement); + return supports; + }; + var testCORS = function() { + return typeof new Image().crossOrigin !== "undefined"; + }; + var testResponseType = function() { + return typeof new XMLHttpRequest().responseType === "string"; + }; + var testSVG = function(document2) { + var img = new Image(); + var canvas = document2.createElement("canvas"); + var ctx = canvas.getContext("2d"); + if (!ctx) { + return false; + } + img.src = "data:image/svg+xml,"; + try { + ctx.drawImage(img, 0, 0); + canvas.toDataURL(); + } catch (e2) { + return false; + } + return true; + }; + var isGreenPixel = function(data) { + return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255; + }; + var testForeignObject = function(document2) { + var canvas = document2.createElement("canvas"); + var size = 100; + canvas.width = size; + canvas.height = size; + var ctx = canvas.getContext("2d"); + if (!ctx) { + return Promise.reject(false); + } + ctx.fillStyle = "rgb(0, 255, 0)"; + ctx.fillRect(0, 0, size, size); + var img = new Image(); + var greenImageSrc = canvas.toDataURL(); + img.src = greenImageSrc; + var svg = createForeignObjectSVG(size, size, 0, 0, img); + ctx.fillStyle = "red"; + ctx.fillRect(0, 0, size, size); + return loadSerializedSVG$1(svg).then(function(img2) { + ctx.drawImage(img2, 0, 0); + var data = ctx.getImageData(0, 0, size, size).data; + ctx.fillStyle = "red"; + ctx.fillRect(0, 0, size, size); + var node = document2.createElement("div"); + node.style.backgroundImage = "url(" + greenImageSrc + ")"; + node.style.height = size + "px"; + return isGreenPixel(data) ? loadSerializedSVG$1(createForeignObjectSVG(size, size, 0, 0, node)) : Promise.reject(false); + }).then(function(img2) { + ctx.drawImage(img2, 0, 0); + return isGreenPixel(ctx.getImageData(0, 0, size, size).data); + }).catch(function() { + return false; + }); + }; + var createForeignObjectSVG = function(width, height, x, y, node) { + var xmlns = "http://www.w3.org/2000/svg"; + var svg = document.createElementNS(xmlns, "svg"); + var foreignObject = document.createElementNS(xmlns, "foreignObject"); + svg.setAttributeNS(null, "width", width.toString()); + svg.setAttributeNS(null, "height", height.toString()); + foreignObject.setAttributeNS(null, "width", "100%"); + foreignObject.setAttributeNS(null, "height", "100%"); + foreignObject.setAttributeNS(null, "x", x.toString()); + foreignObject.setAttributeNS(null, "y", y.toString()); + foreignObject.setAttributeNS(null, "externalResourcesRequired", "true"); + svg.appendChild(foreignObject); + foreignObject.appendChild(node); + return svg; + }; + var loadSerializedSVG$1 = function(svg) { + return new Promise(function(resolve, reject) { + var img = new Image(); + img.onload = function() { + return resolve(img); + }; + img.onerror = reject; + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg)); + }); + }; + var FEATURES = { + get SUPPORT_RANGE_BOUNDS() { + var value = testRangeBounds(document); + Object.defineProperty(FEATURES, "SUPPORT_RANGE_BOUNDS", { value }); + return value; + }, + get SUPPORT_WORD_BREAKING() { + var value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document); + Object.defineProperty(FEATURES, "SUPPORT_WORD_BREAKING", { value }); + return value; + }, + get SUPPORT_SVG_DRAWING() { + var value = testSVG(document); + Object.defineProperty(FEATURES, "SUPPORT_SVG_DRAWING", { value }); + return value; + }, + get SUPPORT_FOREIGNOBJECT_DRAWING() { + var value = typeof Array.from === "function" && typeof window.fetch === "function" ? testForeignObject(document) : Promise.resolve(false); + Object.defineProperty(FEATURES, "SUPPORT_FOREIGNOBJECT_DRAWING", { value }); + return value; + }, + get SUPPORT_CORS_IMAGES() { + var value = testCORS(); + Object.defineProperty(FEATURES, "SUPPORT_CORS_IMAGES", { value }); + return value; + }, + get SUPPORT_RESPONSE_TYPE() { + var value = testResponseType(); + Object.defineProperty(FEATURES, "SUPPORT_RESPONSE_TYPE", { value }); + return value; + }, + get SUPPORT_CORS_XHR() { + var value = "withCredentials" in new XMLHttpRequest(); + Object.defineProperty(FEATURES, "SUPPORT_CORS_XHR", { value }); + return value; + }, + get SUPPORT_NATIVE_TEXT_SEGMENTATION() { + var value = !!(typeof Intl !== "undefined" && Intl.Segmenter); + Object.defineProperty(FEATURES, "SUPPORT_NATIVE_TEXT_SEGMENTATION", { value }); + return value; + } + }; + var TextBounds = ( + /** @class */ + /* @__PURE__ */ (function() { + function TextBounds2(text, bounds) { + this.text = text; + this.bounds = bounds; + } + return TextBounds2; + })() + ); + var parseTextBounds = function(context, value, styles, node) { + var textList = breakText(value, styles); + var textBounds = []; + var offset = 0; + textList.forEach(function(text) { + if (styles.textDecorationLine.length || text.trim().length > 0) { + if (FEATURES.SUPPORT_RANGE_BOUNDS) { + var clientRects = createRange(node, offset, text.length).getClientRects(); + if (clientRects.length > 1) { + var subSegments = segmentGraphemes(text); + var subOffset_1 = 0; + subSegments.forEach(function(subSegment) { + textBounds.push(new TextBounds(subSegment, Bounds.fromDOMRectList(context, createRange(node, subOffset_1 + offset, subSegment.length).getClientRects()))); + subOffset_1 += subSegment.length; + }); + } else { + textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects))); + } + } else { + var replacementNode = node.splitText(text.length); + textBounds.push(new TextBounds(text, getWrapperBounds(context, node))); + node = replacementNode; + } + } else if (!FEATURES.SUPPORT_RANGE_BOUNDS) { + node = node.splitText(text.length); + } + offset += text.length; + }); + return textBounds; + }; + var getWrapperBounds = function(context, node) { + var ownerDocument = node.ownerDocument; + if (ownerDocument) { + var wrapper = ownerDocument.createElement("html2canvaswrapper"); + wrapper.appendChild(node.cloneNode(true)); + var parentNode = node.parentNode; + if (parentNode) { + parentNode.replaceChild(wrapper, node); + var bounds = parseBounds(context, wrapper); + if (wrapper.firstChild) { + parentNode.replaceChild(wrapper.firstChild, wrapper); + } + return bounds; + } + } + return Bounds.EMPTY; + }; + var createRange = function(node, offset, length) { + var ownerDocument = node.ownerDocument; + if (!ownerDocument) { + throw new Error("Node has no owner document"); + } + var range2 = ownerDocument.createRange(); + range2.setStart(node, offset); + range2.setEnd(node, offset + length); + return range2; + }; + var segmentGraphemes = function(value) { + if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) { + var segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" }); + return Array.from(segmenter.segment(value)).map(function(segment) { + return segment.segment; + }); + } + return splitGraphemes(value); + }; + var segmentWords = function(value, styles) { + if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) { + var segmenter = new Intl.Segmenter(void 0, { + granularity: "word" + }); + return Array.from(segmenter.segment(value)).map(function(segment) { + return segment.segment; + }); + } + return breakWords(value, styles); + }; + var breakText = function(value, styles) { + return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles); + }; + var wordSeparators = [32, 160, 4961, 65792, 65793, 4153, 4241]; + var breakWords = function(str, styles) { + var breaker = LineBreaker(str, { + lineBreak: styles.lineBreak, + wordBreak: styles.overflowWrap === "break-word" ? "break-word" : styles.wordBreak + }); + var words = []; + var bk; + var _loop_1 = function() { + if (bk.value) { + var value = bk.value.slice(); + var codePoints = toCodePoints$1(value); + var word_1 = ""; + codePoints.forEach(function(codePoint) { + if (wordSeparators.indexOf(codePoint) === -1) { + word_1 += fromCodePoint$1(codePoint); + } else { + if (word_1.length) { + words.push(word_1); + } + words.push(fromCodePoint$1(codePoint)); + word_1 = ""; + } + }); + if (word_1.length) { + words.push(word_1); + } + } + }; + while (!(bk = breaker.next()).done) { + _loop_1(); + } + return words; + }; + var TextContainer = ( + /** @class */ + /* @__PURE__ */ (function() { + function TextContainer2(context, node, styles) { + this.text = transform(node.data, styles.textTransform); + this.textBounds = parseTextBounds(context, this.text, styles, node); + } + return TextContainer2; + })() + ); + var transform = function(text, transform2) { + switch (transform2) { + case 1: + return text.toLowerCase(); + case 3: + return text.replace(CAPITALIZE, capitalize); + case 2: + return text.toUpperCase(); + default: + return text; + } + }; + var CAPITALIZE = /(^|\s|:|-|\(|\))([a-z])/g; + var capitalize = function(m, p1, p2) { + if (m.length > 0) { + return p1 + p2.toUpperCase(); + } + return m; + }; + var ImageElementContainer = ( + /** @class */ + (function(_super) { + __extends(ImageElementContainer2, _super); + function ImageElementContainer2(context, img) { + var _this = _super.call(this, context, img) || this; + _this.src = img.currentSrc || img.src; + _this.intrinsicWidth = img.naturalWidth; + _this.intrinsicHeight = img.naturalHeight; + _this.context.cache.addImage(_this.src); + return _this; + } + return ImageElementContainer2; + })(ElementContainer) + ); + var CanvasElementContainer = ( + /** @class */ + (function(_super) { + __extends(CanvasElementContainer2, _super); + function CanvasElementContainer2(context, canvas) { + var _this = _super.call(this, context, canvas) || this; + _this.canvas = canvas; + _this.intrinsicWidth = canvas.width; + _this.intrinsicHeight = canvas.height; + return _this; + } + return CanvasElementContainer2; + })(ElementContainer) + ); + var SVGElementContainer = ( + /** @class */ + (function(_super) { + __extends(SVGElementContainer2, _super); + function SVGElementContainer2(context, img) { + var _this = _super.call(this, context, img) || this; + var s = new XMLSerializer(); + var bounds = parseBounds(context, img); + img.setAttribute("width", bounds.width + "px"); + img.setAttribute("height", bounds.height + "px"); + _this.svg = "data:image/svg+xml," + encodeURIComponent(s.serializeToString(img)); + _this.intrinsicWidth = img.width.baseVal.value; + _this.intrinsicHeight = img.height.baseVal.value; + _this.context.cache.addImage(_this.svg); + return _this; + } + return SVGElementContainer2; + })(ElementContainer) + ); + var LIElementContainer = ( + /** @class */ + (function(_super) { + __extends(LIElementContainer2, _super); + function LIElementContainer2(context, element) { + var _this = _super.call(this, context, element) || this; + _this.value = element.value; + return _this; + } + return LIElementContainer2; + })(ElementContainer) + ); + var OLElementContainer = ( + /** @class */ + (function(_super) { + __extends(OLElementContainer2, _super); + function OLElementContainer2(context, element) { + var _this = _super.call(this, context, element) || this; + _this.start = element.start; + _this.reversed = typeof element.reversed === "boolean" && element.reversed === true; + return _this; + } + return OLElementContainer2; + })(ElementContainer) + ); + var CHECKBOX_BORDER_RADIUS = [ + { + type: 15, + flags: 0, + unit: "px", + number: 3 + } + ]; + var RADIO_BORDER_RADIUS = [ + { + type: 16, + flags: 0, + number: 50 + } + ]; + var reformatInputBounds = function(bounds) { + if (bounds.width > bounds.height) { + return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height); + } else if (bounds.width < bounds.height) { + return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width); + } + return bounds; + }; + var getInputValue = function(node) { + var value = node.type === PASSWORD ? new Array(node.value.length + 1).join("\u2022") : node.value; + return value.length === 0 ? node.placeholder || "" : value; + }; + var CHECKBOX = "checkbox"; + var RADIO = "radio"; + var PASSWORD = "password"; + var INPUT_COLOR = 707406591; + var InputElementContainer = ( + /** @class */ + (function(_super) { + __extends(InputElementContainer2, _super); + function InputElementContainer2(context, input) { + var _this = _super.call(this, context, input) || this; + _this.type = input.type.toLowerCase(); + _this.checked = input.checked; + _this.value = getInputValue(input); + if (_this.type === CHECKBOX || _this.type === RADIO) { + _this.styles.backgroundColor = 3739148031; + _this.styles.borderTopColor = _this.styles.borderRightColor = _this.styles.borderBottomColor = _this.styles.borderLeftColor = 2779096575; + _this.styles.borderTopWidth = _this.styles.borderRightWidth = _this.styles.borderBottomWidth = _this.styles.borderLeftWidth = 1; + _this.styles.borderTopStyle = _this.styles.borderRightStyle = _this.styles.borderBottomStyle = _this.styles.borderLeftStyle = 1; + _this.styles.backgroundClip = [ + 0 + /* BORDER_BOX */ + ]; + _this.styles.backgroundOrigin = [ + 0 + /* BORDER_BOX */ + ]; + _this.bounds = reformatInputBounds(_this.bounds); + } + switch (_this.type) { + case CHECKBOX: + _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = CHECKBOX_BORDER_RADIUS; + break; + case RADIO: + _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = RADIO_BORDER_RADIUS; + break; + } + return _this; + } + return InputElementContainer2; + })(ElementContainer) + ); + var SelectElementContainer = ( + /** @class */ + (function(_super) { + __extends(SelectElementContainer2, _super); + function SelectElementContainer2(context, element) { + var _this = _super.call(this, context, element) || this; + var option = element.options[element.selectedIndex || 0]; + _this.value = option ? option.text || "" : ""; + return _this; + } + return SelectElementContainer2; + })(ElementContainer) + ); + var TextareaElementContainer = ( + /** @class */ + (function(_super) { + __extends(TextareaElementContainer2, _super); + function TextareaElementContainer2(context, element) { + var _this = _super.call(this, context, element) || this; + _this.value = element.value; + return _this; + } + return TextareaElementContainer2; + })(ElementContainer) + ); + var IFrameElementContainer = ( + /** @class */ + (function(_super) { + __extends(IFrameElementContainer2, _super); + function IFrameElementContainer2(context, iframe) { + var _this = _super.call(this, context, iframe) || this; + _this.src = iframe.src; + _this.width = parseInt(iframe.width, 10) || 0; + _this.height = parseInt(iframe.height, 10) || 0; + _this.backgroundColor = _this.styles.backgroundColor; + try { + if (iframe.contentWindow && iframe.contentWindow.document && iframe.contentWindow.document.documentElement) { + _this.tree = parseTree(context, iframe.contentWindow.document.documentElement); + var documentBackgroundColor = iframe.contentWindow.document.documentElement ? parseColor(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor) : COLORS.TRANSPARENT; + var bodyBackgroundColor = iframe.contentWindow.document.body ? parseColor(context, getComputedStyle(iframe.contentWindow.document.body).backgroundColor) : COLORS.TRANSPARENT; + _this.backgroundColor = isTransparent(documentBackgroundColor) ? isTransparent(bodyBackgroundColor) ? _this.styles.backgroundColor : bodyBackgroundColor : documentBackgroundColor; + } + } catch (e2) { + } + return _this; + } + return IFrameElementContainer2; + })(ElementContainer) + ); + var LIST_OWNERS = ["OL", "UL", "MENU"]; + var parseNodeTree = function(context, node, parent, root) { + for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) { + nextNode = childNode.nextSibling; + if (isTextNode(childNode) && childNode.data.trim().length > 0) { + parent.textNodes.push(new TextContainer(context, childNode, parent.styles)); + } else if (isElementNode(childNode)) { + if (isSlotElement(childNode) && childNode.assignedNodes) { + childNode.assignedNodes().forEach(function(childNode2) { + return parseNodeTree(context, childNode2, parent, root); + }); + } else { + var container = createContainer(context, childNode); + if (container.styles.isVisible()) { + if (createsRealStackingContext(childNode, container, root)) { + container.flags |= 4; + } else if (createsStackingContext(container.styles)) { + container.flags |= 2; + } + if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) { + container.flags |= 8; + } + parent.elements.push(container); + childNode.slot; + if (childNode.shadowRoot) { + parseNodeTree(context, childNode.shadowRoot, container, root); + } else if (!isTextareaElement(childNode) && !isSVGElement(childNode) && !isSelectElement(childNode)) { + parseNodeTree(context, childNode, container, root); + } + } + } + } + } + }; + var createContainer = function(context, element) { + if (isImageElement(element)) { + return new ImageElementContainer(context, element); + } + if (isCanvasElement(element)) { + return new CanvasElementContainer(context, element); + } + if (isSVGElement(element)) { + return new SVGElementContainer(context, element); + } + if (isLIElement(element)) { + return new LIElementContainer(context, element); + } + if (isOLElement(element)) { + return new OLElementContainer(context, element); + } + if (isInputElement(element)) { + return new InputElementContainer(context, element); + } + if (isSelectElement(element)) { + return new SelectElementContainer(context, element); + } + if (isTextareaElement(element)) { + return new TextareaElementContainer(context, element); + } + if (isIFrameElement(element)) { + return new IFrameElementContainer(context, element); + } + return new ElementContainer(context, element); + }; + var parseTree = function(context, element) { + var container = createContainer(context, element); + container.flags |= 4; + parseNodeTree(context, element, container, container); + return container; + }; + var createsRealStackingContext = function(node, container, root) { + return container.styles.isPositionedWithZIndex() || container.styles.opacity < 1 || container.styles.isTransformed() || isBodyElement(node) && root.styles.isTransparent(); + }; + var createsStackingContext = function(styles) { + return styles.isPositioned() || styles.isFloating(); + }; + var isTextNode = function(node) { + return node.nodeType === Node.TEXT_NODE; + }; + var isElementNode = function(node) { + return node.nodeType === Node.ELEMENT_NODE; + }; + var isHTMLElementNode = function(node) { + return isElementNode(node) && typeof node.style !== "undefined" && !isSVGElementNode(node); + }; + var isSVGElementNode = function(element) { + return typeof element.className === "object"; + }; + var isLIElement = function(node) { + return node.tagName === "LI"; + }; + var isOLElement = function(node) { + return node.tagName === "OL"; + }; + var isInputElement = function(node) { + return node.tagName === "INPUT"; + }; + var isHTMLElement2 = function(node) { + return node.tagName === "HTML"; + }; + var isSVGElement = function(node) { + return node.tagName === "svg"; + }; + var isBodyElement = function(node) { + return node.tagName === "BODY"; + }; + var isCanvasElement = function(node) { + return node.tagName === "CANVAS"; + }; + var isVideoElement = function(node) { + return node.tagName === "VIDEO"; + }; + var isImageElement = function(node) { + return node.tagName === "IMG"; + }; + var isIFrameElement = function(node) { + return node.tagName === "IFRAME"; + }; + var isStyleElement = function(node) { + return node.tagName === "STYLE"; + }; + var isScriptElement = function(node) { + return node.tagName === "SCRIPT"; + }; + var isTextareaElement = function(node) { + return node.tagName === "TEXTAREA"; + }; + var isSelectElement = function(node) { + return node.tagName === "SELECT"; + }; + var isSlotElement = function(node) { + return node.tagName === "SLOT"; + }; + var isCustomElement = function(node) { + return node.tagName.indexOf("-") > 0; + }; + var CounterState = ( + /** @class */ + (function() { + function CounterState2() { + this.counters = {}; + } + CounterState2.prototype.getCounterValue = function(name) { + var counter = this.counters[name]; + if (counter && counter.length) { + return counter[counter.length - 1]; + } + return 1; + }; + CounterState2.prototype.getCounterValues = function(name) { + var counter = this.counters[name]; + return counter ? counter : []; + }; + CounterState2.prototype.pop = function(counters) { + var _this = this; + counters.forEach(function(counter) { + return _this.counters[counter].pop(); + }); + }; + CounterState2.prototype.parse = function(style) { + var _this = this; + var counterIncrement2 = style.counterIncrement; + var counterReset2 = style.counterReset; + var canReset = true; + if (counterIncrement2 !== null) { + counterIncrement2.forEach(function(entry) { + var counter = _this.counters[entry.counter]; + if (counter && entry.increment !== 0) { + canReset = false; + if (!counter.length) { + counter.push(1); + } + counter[Math.max(0, counter.length - 1)] += entry.increment; + } + }); + } + var counterNames = []; + if (canReset) { + counterReset2.forEach(function(entry) { + var counter = _this.counters[entry.counter]; + counterNames.push(entry.counter); + if (!counter) { + counter = _this.counters[entry.counter] = []; + } + counter.push(entry.reset); + }); + } + return counterNames; + }; + return CounterState2; + })() + ); + var ROMAN_UPPER = { + integers: [1e3, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1], + values: ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"] + }; + var ARMENIAN = { + integers: [ + 9e3, + 8e3, + 7e3, + 6e3, + 5e3, + 4e3, + 3e3, + 2e3, + 1e3, + 900, + 800, + 700, + 600, + 500, + 400, + 300, + 200, + 100, + 90, + 80, + 70, + 60, + 50, + 40, + 30, + 20, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ], + values: [ + "\u0554", + "\u0553", + "\u0552", + "\u0551", + "\u0550", + "\u054F", + "\u054E", + "\u054D", + "\u054C", + "\u054B", + "\u054A", + "\u0549", + "\u0548", + "\u0547", + "\u0546", + "\u0545", + "\u0544", + "\u0543", + "\u0542", + "\u0541", + "\u0540", + "\u053F", + "\u053E", + "\u053D", + "\u053C", + "\u053B", + "\u053A", + "\u0539", + "\u0538", + "\u0537", + "\u0536", + "\u0535", + "\u0534", + "\u0533", + "\u0532", + "\u0531" + ] + }; + var HEBREW = { + integers: [ + 1e4, + 9e3, + 8e3, + 7e3, + 6e3, + 5e3, + 4e3, + 3e3, + 2e3, + 1e3, + 400, + 300, + 200, + 100, + 90, + 80, + 70, + 60, + 50, + 40, + 30, + 20, + 19, + 18, + 17, + 16, + 15, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ], + values: [ + "\u05D9\u05F3", + "\u05D8\u05F3", + "\u05D7\u05F3", + "\u05D6\u05F3", + "\u05D5\u05F3", + "\u05D4\u05F3", + "\u05D3\u05F3", + "\u05D2\u05F3", + "\u05D1\u05F3", + "\u05D0\u05F3", + "\u05EA", + "\u05E9", + "\u05E8", + "\u05E7", + "\u05E6", + "\u05E4", + "\u05E2", + "\u05E1", + "\u05E0", + "\u05DE", + "\u05DC", + "\u05DB", + "\u05D9\u05D8", + "\u05D9\u05D7", + "\u05D9\u05D6", + "\u05D8\u05D6", + "\u05D8\u05D5", + "\u05D9", + "\u05D8", + "\u05D7", + "\u05D6", + "\u05D5", + "\u05D4", + "\u05D3", + "\u05D2", + "\u05D1", + "\u05D0" + ] + }; + var GEORGIAN = { + integers: [ + 1e4, + 9e3, + 8e3, + 7e3, + 6e3, + 5e3, + 4e3, + 3e3, + 2e3, + 1e3, + 900, + 800, + 700, + 600, + 500, + 400, + 300, + 200, + 100, + 90, + 80, + 70, + 60, + 50, + 40, + 30, + 20, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ], + values: [ + "\u10F5", + "\u10F0", + "\u10EF", + "\u10F4", + "\u10EE", + "\u10ED", + "\u10EC", + "\u10EB", + "\u10EA", + "\u10E9", + "\u10E8", + "\u10E7", + "\u10E6", + "\u10E5", + "\u10E4", + "\u10F3", + "\u10E2", + "\u10E1", + "\u10E0", + "\u10DF", + "\u10DE", + "\u10DD", + "\u10F2", + "\u10DC", + "\u10DB", + "\u10DA", + "\u10D9", + "\u10D8", + "\u10D7", + "\u10F1", + "\u10D6", + "\u10D5", + "\u10D4", + "\u10D3", + "\u10D2", + "\u10D1", + "\u10D0" + ] + }; + var createAdditiveCounter = function(value, min, max, symbols, fallback, suffix) { + if (value < min || value > max) { + return createCounterText(value, fallback, suffix.length > 0); + } + return symbols.integers.reduce(function(string, integer, index) { + while (value >= integer) { + value -= integer; + string += symbols.values[index]; + } + return string; + }, "") + suffix; + }; + var createCounterStyleWithSymbolResolver = function(value, codePointRangeLength, isNumeric, resolver) { + var string = ""; + do { + if (!isNumeric) { + value--; + } + string = resolver(value) + string; + value /= codePointRangeLength; + } while (value * codePointRangeLength >= codePointRangeLength); + return string; + }; + var createCounterStyleFromRange = function(value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) { + var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1; + return (value < 0 ? "-" : "") + (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function(codePoint) { + return fromCodePoint$1(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart); + }) + suffix); + }; + var createCounterStyleFromSymbols = function(value, symbols, suffix) { + if (suffix === void 0) { + suffix = ". "; + } + var codePointRangeLength = symbols.length; + return createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function(codePoint) { + return symbols[Math.floor(codePoint % codePointRangeLength)]; + }) + suffix; + }; + var CJK_ZEROS = 1 << 0; + var CJK_TEN_COEFFICIENTS = 1 << 1; + var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2; + var CJK_HUNDRED_COEFFICIENTS = 1 << 3; + var createCJKCounter = function(value, numbers, multipliers, negativeSign, suffix, flags) { + if (value < -9999 || value > 9999) { + return createCounterText(value, 4, suffix.length > 0); + } + var tmp = Math.abs(value); + var string = suffix; + if (tmp === 0) { + return numbers[0] + string; + } + for (var digit = 0; tmp > 0 && digit <= 4; digit++) { + var coefficient = tmp % 10; + if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== "") { + string = numbers[coefficient] + string; + } else if (coefficient > 1 || coefficient === 1 && digit === 0 || coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS) || coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100 || coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS)) { + string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : "") + string; + } else if (coefficient === 1 && digit > 0) { + string = multipliers[digit - 1] + string; + } + tmp = Math.floor(tmp / 10); + } + return (value < 0 ? negativeSign : "") + string; + }; + var CHINESE_INFORMAL_MULTIPLIERS = "\u5341\u767E\u5343\u842C"; + var CHINESE_FORMAL_MULTIPLIERS = "\u62FE\u4F70\u4EDF\u842C"; + var JAPANESE_NEGATIVE = "\u30DE\u30A4\u30CA\u30B9"; + var KOREAN_NEGATIVE = "\uB9C8\uC774\uB108\uC2A4"; + var createCounterText = function(value, type, appendSuffix) { + var defaultSuffix = appendSuffix ? ". " : ""; + var cjkSuffix = appendSuffix ? "\u3001" : ""; + var koreanSuffix = appendSuffix ? ", " : ""; + var spaceSuffix = appendSuffix ? " " : ""; + switch (type) { + case 0: + return "\u2022" + spaceSuffix; + case 1: + return "\u25E6" + spaceSuffix; + case 2: + return "\u25FE" + spaceSuffix; + case 5: + var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix); + return string.length < 4 ? "0" + string : string; + case 4: + return createCounterStyleFromSymbols(value, "\u3007\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D", cjkSuffix); + case 6: + return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3, defaultSuffix).toLowerCase(); + case 7: + return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3, defaultSuffix); + case 8: + return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix); + case 9: + return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix); + case 10: + return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix); + case 11: + return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix); + case 12: + case 49: + return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3, defaultSuffix); + case 35: + return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3, defaultSuffix).toLowerCase(); + case 13: + return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix); + case 14: + case 30: + return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix); + case 15: + return createCounterStyleFromSymbols(value, "\u5B50\u4E11\u5BC5\u536F\u8FB0\u5DF3\u5348\u672A\u7533\u9149\u620C\u4EA5", cjkSuffix); + case 16: + return createCounterStyleFromSymbols(value, "\u7532\u4E59\u4E19\u4E01\u620A\u5DF1\u5E9A\u8F9B\u58EC\u7678", cjkSuffix); + case 17: + case 48: + return createCJKCounter(value, "\u96F6\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D", CHINESE_INFORMAL_MULTIPLIERS, "\u8CA0", cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); + case 47: + return createCJKCounter(value, "\u96F6\u58F9\u8CB3\u53C3\u8086\u4F0D\u9678\u67D2\u634C\u7396", CHINESE_FORMAL_MULTIPLIERS, "\u8CA0", cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); + case 42: + return createCJKCounter(value, "\u96F6\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D", CHINESE_INFORMAL_MULTIPLIERS, "\u8D1F", cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); + case 41: + return createCJKCounter(value, "\u96F6\u58F9\u8D30\u53C1\u8086\u4F0D\u9646\u67D2\u634C\u7396", CHINESE_FORMAL_MULTIPLIERS, "\u8D1F", cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); + case 26: + return createCJKCounter(value, "\u3007\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D", "\u5341\u767E\u5343\u4E07", JAPANESE_NEGATIVE, cjkSuffix, 0); + case 25: + return createCJKCounter(value, "\u96F6\u58F1\u5F10\u53C2\u56DB\u4F0D\u516D\u4E03\u516B\u4E5D", "\u62FE\u767E\u5343\u4E07", JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); + case 31: + return createCJKCounter(value, "\uC601\uC77C\uC774\uC0BC\uC0AC\uC624\uC721\uCE60\uD314\uAD6C", "\uC2ED\uBC31\uCC9C\uB9CC", KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); + case 33: + return createCJKCounter(value, "\u96F6\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D", "\u5341\u767E\u5343\u842C", KOREAN_NEGATIVE, koreanSuffix, 0); + case 32: + return createCJKCounter(value, "\u96F6\u58F9\u8CB3\u53C3\u56DB\u4E94\u516D\u4E03\u516B\u4E5D", "\u62FE\u767E\u5343", KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); + case 18: + return createCounterStyleFromRange(value, 2406, 2415, true, defaultSuffix); + case 20: + return createAdditiveCounter(value, 1, 19999, GEORGIAN, 3, defaultSuffix); + case 21: + return createCounterStyleFromRange(value, 2790, 2799, true, defaultSuffix); + case 22: + return createCounterStyleFromRange(value, 2662, 2671, true, defaultSuffix); + case 22: + return createAdditiveCounter(value, 1, 10999, HEBREW, 3, defaultSuffix); + case 23: + return createCounterStyleFromSymbols(value, "\u3042\u3044\u3046\u3048\u304A\u304B\u304D\u304F\u3051\u3053\u3055\u3057\u3059\u305B\u305D\u305F\u3061\u3064\u3066\u3068\u306A\u306B\u306C\u306D\u306E\u306F\u3072\u3075\u3078\u307B\u307E\u307F\u3080\u3081\u3082\u3084\u3086\u3088\u3089\u308A\u308B\u308C\u308D\u308F\u3090\u3091\u3092\u3093"); + case 24: + return createCounterStyleFromSymbols(value, "\u3044\u308D\u306F\u306B\u307B\u3078\u3068\u3061\u308A\u306C\u308B\u3092\u308F\u304B\u3088\u305F\u308C\u305D\u3064\u306D\u306A\u3089\u3080\u3046\u3090\u306E\u304A\u304F\u3084\u307E\u3051\u3075\u3053\u3048\u3066\u3042\u3055\u304D\u3086\u3081\u307F\u3057\u3091\u3072\u3082\u305B\u3059"); + case 27: + return createCounterStyleFromRange(value, 3302, 3311, true, defaultSuffix); + case 28: + return createCounterStyleFromSymbols(value, "\u30A2\u30A4\u30A6\u30A8\u30AA\u30AB\u30AD\u30AF\u30B1\u30B3\u30B5\u30B7\u30B9\u30BB\u30BD\u30BF\u30C1\u30C4\u30C6\u30C8\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D2\u30D5\u30D8\u30DB\u30DE\u30DF\u30E0\u30E1\u30E2\u30E4\u30E6\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EF\u30F0\u30F1\u30F2\u30F3", cjkSuffix); + case 29: + return createCounterStyleFromSymbols(value, "\u30A4\u30ED\u30CF\u30CB\u30DB\u30D8\u30C8\u30C1\u30EA\u30CC\u30EB\u30F2\u30EF\u30AB\u30E8\u30BF\u30EC\u30BD\u30C4\u30CD\u30CA\u30E9\u30E0\u30A6\u30F0\u30CE\u30AA\u30AF\u30E4\u30DE\u30B1\u30D5\u30B3\u30A8\u30C6\u30A2\u30B5\u30AD\u30E6\u30E1\u30DF\u30B7\u30F1\u30D2\u30E2\u30BB\u30B9", cjkSuffix); + case 34: + return createCounterStyleFromRange(value, 3792, 3801, true, defaultSuffix); + case 37: + return createCounterStyleFromRange(value, 6160, 6169, true, defaultSuffix); + case 38: + return createCounterStyleFromRange(value, 4160, 4169, true, defaultSuffix); + case 39: + return createCounterStyleFromRange(value, 2918, 2927, true, defaultSuffix); + case 40: + return createCounterStyleFromRange(value, 1776, 1785, true, defaultSuffix); + case 43: + return createCounterStyleFromRange(value, 3046, 3055, true, defaultSuffix); + case 44: + return createCounterStyleFromRange(value, 3174, 3183, true, defaultSuffix); + case 45: + return createCounterStyleFromRange(value, 3664, 3673, true, defaultSuffix); + case 46: + return createCounterStyleFromRange(value, 3872, 3881, true, defaultSuffix); + case 3: + default: + return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix); + } + }; + var IGNORE_ATTRIBUTE = "data-html2canvas-ignore"; + var DocumentCloner = ( + /** @class */ + (function() { + function DocumentCloner2(context, element, options) { + this.context = context; + this.options = options; + this.scrolledElements = []; + this.referenceElement = element; + this.counters = new CounterState(); + this.quoteDepth = 0; + if (!element.ownerDocument) { + throw new Error("Cloned element does not have an owner document"); + } + this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false); + } + DocumentCloner2.prototype.toIFrame = function(ownerDocument, windowSize) { + var _this = this; + var iframe = createIFrameContainer(ownerDocument, windowSize); + if (!iframe.contentWindow) { + return Promise.reject("Unable to find iframe window"); + } + var scrollX = ownerDocument.defaultView.pageXOffset; + var scrollY = ownerDocument.defaultView.pageYOffset; + var cloneWindow = iframe.contentWindow; + var documentClone = cloneWindow.document; + var iframeLoad = iframeLoader(iframe).then(function() { + return __awaiter(_this, void 0, void 0, function() { + var onclone, referenceElement; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + this.scrolledElements.forEach(restoreNodeScroll); + if (cloneWindow) { + cloneWindow.scrollTo(windowSize.left, windowSize.top); + if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) && (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) { + this.context.logger.warn("Unable to restore scroll position for cloned document"); + this.context.windowBounds = this.context.windowBounds.add(cloneWindow.scrollX - windowSize.left, cloneWindow.scrollY - windowSize.top, 0, 0); + } + } + onclone = this.options.onclone; + referenceElement = this.clonedReferenceElement; + if (typeof referenceElement === "undefined") { + return [2, Promise.reject("Error finding the " + this.referenceElement.nodeName + " in the cloned document")]; + } + if (!(documentClone.fonts && documentClone.fonts.ready)) return [3, 2]; + return [4, documentClone.fonts.ready]; + case 1: + _a.sent(); + _a.label = 2; + case 2: + if (!/(AppleWebKit)/g.test(navigator.userAgent)) return [3, 4]; + return [4, imagesReady(documentClone)]; + case 3: + _a.sent(); + _a.label = 4; + case 4: + if (typeof onclone === "function") { + return [2, Promise.resolve().then(function() { + return onclone(documentClone, referenceElement); + }).then(function() { + return iframe; + })]; + } + return [2, iframe]; + } + }); + }); + }); + documentClone.open(); + documentClone.write(serializeDoctype(document.doctype) + ""); + restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY); + documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement); + documentClone.close(); + return iframeLoad; + }; + DocumentCloner2.prototype.createElementClone = function(node) { + if (isDebugging( + node, + 2 + /* CLONE */ + )) { + debugger; + } + if (isCanvasElement(node)) { + return this.createCanvasClone(node); + } + if (isVideoElement(node)) { + return this.createVideoClone(node); + } + if (isStyleElement(node)) { + return this.createStyleClone(node); + } + var clone = node.cloneNode(false); + if (isImageElement(clone)) { + if (isImageElement(node) && node.currentSrc && node.currentSrc !== node.src) { + clone.src = node.currentSrc; + clone.srcset = ""; + } + if (clone.loading === "lazy") { + clone.loading = "eager"; + } + } + if (isCustomElement(clone)) { + return this.createCustomElementClone(clone); + } + return clone; + }; + DocumentCloner2.prototype.createCustomElementClone = function(node) { + var clone = document.createElement("html2canvascustomelement"); + copyCSSStyles(node.style, clone); + return clone; + }; + DocumentCloner2.prototype.createStyleClone = function(node) { + try { + var sheet = node.sheet; + if (sheet && sheet.cssRules) { + var css2 = [].slice.call(sheet.cssRules, 0).reduce(function(css3, rule) { + if (rule && typeof rule.cssText === "string") { + return css3 + rule.cssText; + } + return css3; + }, ""); + var style = node.cloneNode(false); + style.textContent = css2; + return style; + } + } catch (e2) { + this.context.logger.error("Unable to access cssRules property", e2); + if (e2.name !== "SecurityError") { + throw e2; + } + } + return node.cloneNode(false); + }; + DocumentCloner2.prototype.createCanvasClone = function(canvas) { + var _a; + if (this.options.inlineImages && canvas.ownerDocument) { + var img = canvas.ownerDocument.createElement("img"); + try { + img.src = canvas.toDataURL(); + return img; + } catch (e2) { + this.context.logger.info("Unable to inline canvas contents, canvas is tainted", canvas); + } + } + var clonedCanvas = canvas.cloneNode(false); + try { + clonedCanvas.width = canvas.width; + clonedCanvas.height = canvas.height; + var ctx = canvas.getContext("2d"); + var clonedCtx = clonedCanvas.getContext("2d"); + if (clonedCtx) { + if (!this.options.allowTaint && ctx) { + clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0); + } else { + var gl = (_a = canvas.getContext("webgl2")) !== null && _a !== void 0 ? _a : canvas.getContext("webgl"); + if (gl) { + var attribs = gl.getContextAttributes(); + if ((attribs === null || attribs === void 0 ? void 0 : attribs.preserveDrawingBuffer) === false) { + this.context.logger.warn("Unable to clone WebGL context as it has preserveDrawingBuffer=false", canvas); + } + } + clonedCtx.drawImage(canvas, 0, 0); + } + } + return clonedCanvas; + } catch (e2) { + this.context.logger.info("Unable to clone canvas as it is tainted", canvas); + } + return clonedCanvas; + }; + DocumentCloner2.prototype.createVideoClone = function(video) { + var canvas = video.ownerDocument.createElement("canvas"); + canvas.width = video.offsetWidth; + canvas.height = video.offsetHeight; + var ctx = canvas.getContext("2d"); + try { + if (ctx) { + ctx.drawImage(video, 0, 0, canvas.width, canvas.height); + if (!this.options.allowTaint) { + ctx.getImageData(0, 0, canvas.width, canvas.height); + } + } + return canvas; + } catch (e2) { + this.context.logger.info("Unable to clone video as it is tainted", video); + } + var blankCanvas = video.ownerDocument.createElement("canvas"); + blankCanvas.width = video.offsetWidth; + blankCanvas.height = video.offsetHeight; + return blankCanvas; + }; + DocumentCloner2.prototype.appendChildNode = function(clone, child, copyStyles) { + if (!isElementNode(child) || !isScriptElement(child) && !child.hasAttribute(IGNORE_ATTRIBUTE) && (typeof this.options.ignoreElements !== "function" || !this.options.ignoreElements(child))) { + if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) { + clone.appendChild(this.cloneNode(child, copyStyles)); + } + } + }; + DocumentCloner2.prototype.cloneChildNodes = function(node, clone, copyStyles) { + var _this = this; + for (var child = node.shadowRoot ? node.shadowRoot.firstChild : node.firstChild; child; child = child.nextSibling) { + if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === "function") { + var assignedNodes = child.assignedNodes(); + if (assignedNodes.length) { + assignedNodes.forEach(function(assignedNode) { + return _this.appendChildNode(clone, assignedNode, copyStyles); + }); + } + } else { + this.appendChildNode(clone, child, copyStyles); + } + } + }; + DocumentCloner2.prototype.cloneNode = function(node, copyStyles) { + if (isTextNode(node)) { + return document.createTextNode(node.data); + } + if (!node.ownerDocument) { + return node.cloneNode(false); + } + var window2 = node.ownerDocument.defaultView; + if (window2 && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) { + var clone = this.createElementClone(node); + clone.style.transitionProperty = "none"; + var style = window2.getComputedStyle(node); + var styleBefore = window2.getComputedStyle(node, ":before"); + var styleAfter = window2.getComputedStyle(node, ":after"); + if (this.referenceElement === node && isHTMLElementNode(clone)) { + this.clonedReferenceElement = clone; + } + if (isBodyElement(clone)) { + createPseudoHideStyles(clone); + } + var counters = this.counters.parse(new CSSParsedCounterDeclaration(this.context, style)); + var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE); + if (isCustomElement(node)) { + copyStyles = true; + } + if (!isVideoElement(node)) { + this.cloneChildNodes(node, clone, copyStyles); + } + if (before) { + clone.insertBefore(before, clone.firstChild); + } + var after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER); + if (after) { + clone.appendChild(after); + } + this.counters.pop(counters); + if (style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node) || copyStyles) { + copyCSSStyles(style, clone); + } + if (node.scrollTop !== 0 || node.scrollLeft !== 0) { + this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]); + } + if ((isTextareaElement(node) || isSelectElement(node)) && (isTextareaElement(clone) || isSelectElement(clone))) { + clone.value = node.value; + } + return clone; + } + return node.cloneNode(false); + }; + DocumentCloner2.prototype.resolvePseudoContent = function(node, clone, style, pseudoElt) { + var _this = this; + if (!style) { + return; + } + var value = style.content; + var document2 = clone.ownerDocument; + if (!document2 || !value || value === "none" || value === "-moz-alt-content" || style.display === "none") { + return; + } + this.counters.parse(new CSSParsedCounterDeclaration(this.context, style)); + var declaration = new CSSParsedPseudoDeclaration(this.context, style); + var anonymousReplacedElement = document2.createElement("html2canvaspseudoelement"); + copyCSSStyles(style, anonymousReplacedElement); + declaration.content.forEach(function(token) { + if (token.type === 0) { + anonymousReplacedElement.appendChild(document2.createTextNode(token.value)); + } else if (token.type === 22) { + var img = document2.createElement("img"); + img.src = token.value; + img.style.opacity = "1"; + anonymousReplacedElement.appendChild(img); + } else if (token.type === 18) { + if (token.name === "attr") { + var attr2 = token.values.filter(isIdentToken); + if (attr2.length) { + anonymousReplacedElement.appendChild(document2.createTextNode(node.getAttribute(attr2[0].value) || "")); + } + } else if (token.name === "counter") { + var _a = token.values.filter(nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1]; + if (counter && isIdentToken(counter)) { + var counterState = _this.counters.getCounterValue(counter.value); + var counterType = counterStyle && isIdentToken(counterStyle) ? listStyleType.parse(_this.context, counterStyle.value) : 3; + anonymousReplacedElement.appendChild(document2.createTextNode(createCounterText(counterState, counterType, false))); + } + } else if (token.name === "counters") { + var _b = token.values.filter(nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2]; + if (counter && isIdentToken(counter)) { + var counterStates = _this.counters.getCounterValues(counter.value); + var counterType_1 = counterStyle && isIdentToken(counterStyle) ? listStyleType.parse(_this.context, counterStyle.value) : 3; + var separator = delim && delim.type === 0 ? delim.value : ""; + var text = counterStates.map(function(value2) { + return createCounterText(value2, counterType_1, false); + }).join(separator); + anonymousReplacedElement.appendChild(document2.createTextNode(text)); + } + } else ; + } else if (token.type === 20) { + switch (token.value) { + case "open-quote": + anonymousReplacedElement.appendChild(document2.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true))); + break; + case "close-quote": + anonymousReplacedElement.appendChild(document2.createTextNode(getQuote(declaration.quotes, --_this.quoteDepth, false))); + break; + default: + anonymousReplacedElement.appendChild(document2.createTextNode(token.value)); + } + } + }); + anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + " " + PSEUDO_HIDE_ELEMENT_CLASS_AFTER; + var newClassName = pseudoElt === PseudoElementType.BEFORE ? " " + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE : " " + PSEUDO_HIDE_ELEMENT_CLASS_AFTER; + if (isSVGElementNode(clone)) { + clone.className.baseValue += newClassName; + } else { + clone.className += newClassName; + } + return anonymousReplacedElement; + }; + DocumentCloner2.destroy = function(container) { + if (container.parentNode) { + container.parentNode.removeChild(container); + return true; + } + return false; + }; + return DocumentCloner2; + })() + ); + var PseudoElementType; + (function(PseudoElementType2) { + PseudoElementType2[PseudoElementType2["BEFORE"] = 0] = "BEFORE"; + PseudoElementType2[PseudoElementType2["AFTER"] = 1] = "AFTER"; + })(PseudoElementType || (PseudoElementType = {})); + var createIFrameContainer = function(ownerDocument, bounds) { + var cloneIframeContainer = ownerDocument.createElement("iframe"); + cloneIframeContainer.className = "html2canvas-container"; + cloneIframeContainer.style.visibility = "hidden"; + cloneIframeContainer.style.position = "fixed"; + cloneIframeContainer.style.left = "-10000px"; + cloneIframeContainer.style.top = "0px"; + cloneIframeContainer.style.border = "0"; + cloneIframeContainer.width = bounds.width.toString(); + cloneIframeContainer.height = bounds.height.toString(); + cloneIframeContainer.scrolling = "no"; + cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, "true"); + ownerDocument.body.appendChild(cloneIframeContainer); + return cloneIframeContainer; + }; + var imageReady = function(img) { + return new Promise(function(resolve) { + if (img.complete) { + resolve(); + return; + } + if (!img.src) { + resolve(); + return; + } + img.onload = resolve; + img.onerror = resolve; + }); + }; + var imagesReady = function(document2) { + return Promise.all([].slice.call(document2.images, 0).map(imageReady)); + }; + var iframeLoader = function(iframe) { + return new Promise(function(resolve, reject) { + var cloneWindow = iframe.contentWindow; + if (!cloneWindow) { + return reject("No window assigned for iframe"); + } + var documentClone = cloneWindow.document; + cloneWindow.onload = iframe.onload = function() { + cloneWindow.onload = iframe.onload = null; + var interval = setInterval(function() { + if (documentClone.body.childNodes.length > 0 && documentClone.readyState === "complete") { + clearInterval(interval); + resolve(iframe); + } + }, 50); + }; + }); + }; + var ignoredStyleProperties = [ + "all", + "d", + "content" + // Safari shows pseudoelements if content is set + ]; + var copyCSSStyles = function(style, target) { + for (var i2 = style.length - 1; i2 >= 0; i2--) { + var property = style.item(i2); + if (ignoredStyleProperties.indexOf(property) === -1) { + target.style.setProperty(property, style.getPropertyValue(property)); + } + } + return target; + }; + var serializeDoctype = function(doctype) { + var str = ""; + if (doctype) { + str += ""; + } + return str; + }; + var restoreOwnerScroll = function(ownerDocument, x, y) { + if (ownerDocument && ownerDocument.defaultView && (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) { + ownerDocument.defaultView.scrollTo(x, y); + } + }; + var restoreNodeScroll = function(_a) { + var element = _a[0], x = _a[1], y = _a[2]; + element.scrollLeft = x; + element.scrollTop = y; + }; + var PSEUDO_BEFORE = ":before"; + var PSEUDO_AFTER = ":after"; + var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = "___html2canvas___pseudoelement_before"; + var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = "___html2canvas___pseudoelement_after"; + var PSEUDO_HIDE_ELEMENT_STYLE = '{\n content: "" !important;\n display: none !important;\n}'; + var createPseudoHideStyles = function(body) { + createStyles(body, "." + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + PSEUDO_BEFORE + PSEUDO_HIDE_ELEMENT_STYLE + "\n ." + PSEUDO_HIDE_ELEMENT_CLASS_AFTER + PSEUDO_AFTER + PSEUDO_HIDE_ELEMENT_STYLE); + }; + var createStyles = function(body, styles) { + var document2 = body.ownerDocument; + if (document2) { + var style = document2.createElement("style"); + style.textContent = styles; + body.appendChild(style); + } + }; + var CacheStorage = ( + /** @class */ + (function() { + function CacheStorage2() { + } + CacheStorage2.getOrigin = function(url) { + var link = CacheStorage2._link; + if (!link) { + return "about:blank"; + } + link.href = url; + link.href = link.href; + return link.protocol + link.hostname + link.port; + }; + CacheStorage2.isSameOrigin = function(src) { + return CacheStorage2.getOrigin(src) === CacheStorage2._origin; + }; + CacheStorage2.setContext = function(window2) { + CacheStorage2._link = window2.document.createElement("a"); + CacheStorage2._origin = CacheStorage2.getOrigin(window2.location.href); + }; + CacheStorage2._origin = "about:blank"; + return CacheStorage2; + })() + ); + var Cache = ( + /** @class */ + (function() { + function Cache2(context, _options) { + this.context = context; + this._options = _options; + this._cache = {}; + } + Cache2.prototype.addImage = function(src) { + var result = Promise.resolve(); + if (this.has(src)) { + return result; + } + if (isBlobImage(src) || isRenderable(src)) { + (this._cache[src] = this.loadImage(src)).catch(function() { + }); + return result; + } + return result; + }; + Cache2.prototype.match = function(src) { + return this._cache[src]; + }; + Cache2.prototype.loadImage = function(key) { + return __awaiter(this, void 0, void 0, function() { + var isSameOrigin, useCORS, useProxy, src; + var _this = this; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + isSameOrigin = CacheStorage.isSameOrigin(key); + useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin; + useProxy = !isInlineImage(key) && !isSameOrigin && !isBlobImage(key) && typeof this._options.proxy === "string" && FEATURES.SUPPORT_CORS_XHR && !useCORS; + if (!isSameOrigin && this._options.allowTaint === false && !isInlineImage(key) && !isBlobImage(key) && !useProxy && !useCORS) { + return [ + 2 + /*return*/ + ]; + } + src = key; + if (!useProxy) return [3, 2]; + return [4, this.proxy(src)]; + case 1: + src = _a.sent(); + _a.label = 2; + case 2: + this.context.logger.debug("Added image " + key.substring(0, 256)); + return [4, new Promise(function(resolve, reject) { + var img = new Image(); + img.onload = function() { + return resolve(img); + }; + img.onerror = reject; + if (isInlineBase64Image(src) || useCORS) { + img.crossOrigin = "anonymous"; + } + img.src = src; + if (img.complete === true) { + setTimeout(function() { + return resolve(img); + }, 500); + } + if (_this._options.imageTimeout > 0) { + setTimeout(function() { + return reject("Timed out (" + _this._options.imageTimeout + "ms) loading image"); + }, _this._options.imageTimeout); + } + })]; + case 3: + return [2, _a.sent()]; + } + }); + }); + }; + Cache2.prototype.has = function(key) { + return typeof this._cache[key] !== "undefined"; + }; + Cache2.prototype.keys = function() { + return Promise.resolve(Object.keys(this._cache)); + }; + Cache2.prototype.proxy = function(src) { + var _this = this; + var proxy = this._options.proxy; + if (!proxy) { + throw new Error("No proxy defined"); + } + var key = src.substring(0, 256); + return new Promise(function(resolve, reject) { + var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? "blob" : "text"; + var xhr = new XMLHttpRequest(); + xhr.onload = function() { + if (xhr.status === 200) { + if (responseType === "text") { + resolve(xhr.response); + } else { + var reader_1 = new FileReader(); + reader_1.addEventListener("load", function() { + return resolve(reader_1.result); + }, false); + reader_1.addEventListener("error", function(e2) { + return reject(e2); + }, false); + reader_1.readAsDataURL(xhr.response); + } + } else { + reject("Failed to proxy resource " + key + " with status code " + xhr.status); + } + }; + xhr.onerror = reject; + var queryString = proxy.indexOf("?") > -1 ? "&" : "?"; + xhr.open("GET", "" + proxy + queryString + "url=" + encodeURIComponent(src) + "&responseType=" + responseType); + if (responseType !== "text" && xhr instanceof XMLHttpRequest) { + xhr.responseType = responseType; + } + if (_this._options.imageTimeout) { + var timeout_1 = _this._options.imageTimeout; + xhr.timeout = timeout_1; + xhr.ontimeout = function() { + return reject("Timed out (" + timeout_1 + "ms) proxying " + key); + }; + } + xhr.send(); + }); + }; + return Cache2; + })() + ); + var INLINE_SVG = /^data:image\/svg\+xml/i; + var INLINE_BASE64 = /^data:image\/.*;base64,/i; + var INLINE_IMG = /^data:image\/.*/i; + var isRenderable = function(src) { + return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); + }; + var isInlineImage = function(src) { + return INLINE_IMG.test(src); + }; + var isInlineBase64Image = function(src) { + return INLINE_BASE64.test(src); + }; + var isBlobImage = function(src) { + return src.substr(0, 4) === "blob"; + }; + var isSVG = function(src) { + return src.substr(-3).toLowerCase() === "svg" || INLINE_SVG.test(src); + }; + var Vector = ( + /** @class */ + (function() { + function Vector2(x, y) { + this.type = 0; + this.x = x; + this.y = y; + } + Vector2.prototype.add = function(deltaX, deltaY) { + return new Vector2(this.x + deltaX, this.y + deltaY); + }; + return Vector2; + })() + ); + var lerp = function(a2, b, t) { + return new Vector(a2.x + (b.x - a2.x) * t, a2.y + (b.y - a2.y) * t); + }; + var BezierCurve = ( + /** @class */ + (function() { + function BezierCurve2(start, startControl, endControl, end) { + this.type = 1; + this.start = start; + this.startControl = startControl; + this.endControl = endControl; + this.end = end; + } + BezierCurve2.prototype.subdivide = function(t, firstHalf) { + var ab = lerp(this.start, this.startControl, t); + var bc = lerp(this.startControl, this.endControl, t); + var cd = lerp(this.endControl, this.end, t); + var abbc = lerp(ab, bc, t); + var bccd = lerp(bc, cd, t); + var dest = lerp(abbc, bccd, t); + return firstHalf ? new BezierCurve2(this.start, ab, abbc, dest) : new BezierCurve2(dest, bccd, cd, this.end); + }; + BezierCurve2.prototype.add = function(deltaX, deltaY) { + return new BezierCurve2(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY)); + }; + BezierCurve2.prototype.reverse = function() { + return new BezierCurve2(this.end, this.endControl, this.startControl, this.start); + }; + return BezierCurve2; + })() + ); + var isBezierCurve = function(path) { + return path.type === 1; + }; + var BoundCurves = ( + /** @class */ + /* @__PURE__ */ (function() { + function BoundCurves2(element) { + var styles = element.styles; + var bounds = element.bounds; + var _a = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a[0], tlv = _a[1]; + var _b = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b[0], trv = _b[1]; + var _c = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c[0], brv = _c[1]; + var _d = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d[0], blv = _d[1]; + var factors = []; + factors.push((tlh + trh) / bounds.width); + factors.push((blh + brh) / bounds.width); + factors.push((tlv + blv) / bounds.height); + factors.push((trv + brv) / bounds.height); + var maxFactor = Math.max.apply(Math, factors); + if (maxFactor > 1) { + tlh /= maxFactor; + tlv /= maxFactor; + trh /= maxFactor; + trv /= maxFactor; + brh /= maxFactor; + brv /= maxFactor; + blh /= maxFactor; + blv /= maxFactor; + } + var topWidth = bounds.width - trh; + var rightHeight = bounds.height - brv; + var bottomWidth = bounds.width - brh; + var leftHeight = bounds.height - blv; + var borderTopWidth2 = styles.borderTopWidth; + var borderRightWidth2 = styles.borderRightWidth; + var borderBottomWidth2 = styles.borderBottomWidth; + var borderLeftWidth2 = styles.borderLeftWidth; + var paddingTop2 = getAbsoluteValue(styles.paddingTop, element.bounds.width); + var paddingRight2 = getAbsoluteValue(styles.paddingRight, element.bounds.width); + var paddingBottom2 = getAbsoluteValue(styles.paddingBottom, element.bounds.width); + var paddingLeft2 = getAbsoluteValue(styles.paddingLeft, element.bounds.width); + this.topLeftBorderDoubleOuterBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 / 3, bounds.top + borderTopWidth2 / 3, tlh - borderLeftWidth2 / 3, tlv - borderTopWidth2 / 3, CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2 / 3, bounds.top + borderTopWidth2 / 3); + this.topRightBorderDoubleOuterBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth2 / 3, trh - borderRightWidth2 / 3, trv - borderTopWidth2 / 3, CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 / 3, bounds.top + borderTopWidth2 / 3); + this.bottomRightBorderDoubleOuterBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth2 / 3, brv - borderBottomWidth2 / 3, CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 / 3, bounds.top + bounds.height - borderBottomWidth2 / 3); + this.bottomLeftBorderDoubleOuterBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 / 3, bounds.top + leftHeight, blh - borderLeftWidth2 / 3, blv - borderBottomWidth2 / 3, CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2 / 3, bounds.top + bounds.height - borderBottomWidth2 / 3); + this.topLeftBorderDoubleInnerBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 * 2 / 3, bounds.top + borderTopWidth2 * 2 / 3, tlh - borderLeftWidth2 * 2 / 3, tlv - borderTopWidth2 * 2 / 3, CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2 * 2 / 3, bounds.top + borderTopWidth2 * 2 / 3); + this.topRightBorderDoubleInnerBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth2 * 2 / 3, trh - borderRightWidth2 * 2 / 3, trv - borderTopWidth2 * 2 / 3, CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 * 2 / 3, bounds.top + borderTopWidth2 * 2 / 3); + this.bottomRightBorderDoubleInnerBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth2 * 2 / 3, brv - borderBottomWidth2 * 2 / 3, CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 * 2 / 3, bounds.top + bounds.height - borderBottomWidth2 * 2 / 3); + this.bottomLeftBorderDoubleInnerBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 * 2 / 3, bounds.top + leftHeight, blh - borderLeftWidth2 * 2 / 3, blv - borderBottomWidth2 * 2 / 3, CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2 * 2 / 3, bounds.top + bounds.height - borderBottomWidth2 * 2 / 3); + this.topLeftBorderStroke = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 / 2, bounds.top + borderTopWidth2 / 2, tlh - borderLeftWidth2 / 2, tlv - borderTopWidth2 / 2, CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2 / 2, bounds.top + borderTopWidth2 / 2); + this.topRightBorderStroke = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth2 / 2, trh - borderRightWidth2 / 2, trv - borderTopWidth2 / 2, CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 / 2, bounds.top + borderTopWidth2 / 2); + this.bottomRightBorderStroke = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth2 / 2, brv - borderBottomWidth2 / 2, CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 / 2, bounds.top + bounds.height - borderBottomWidth2 / 2); + this.bottomLeftBorderStroke = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 / 2, bounds.top + leftHeight, blh - borderLeftWidth2 / 2, blv - borderBottomWidth2 / 2, CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2 / 2, bounds.top + bounds.height - borderBottomWidth2 / 2); + this.topLeftBorderBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT) : new Vector(bounds.left, bounds.top); + this.topRightBorderBox = trh > 0 || trv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width, bounds.top); + this.bottomRightBorderBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width, bounds.top + bounds.height); + this.bottomLeftBorderBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT) : new Vector(bounds.left, bounds.top + bounds.height); + this.topLeftPaddingBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2, bounds.top + borderTopWidth2, Math.max(0, tlh - borderLeftWidth2), Math.max(0, tlv - borderTopWidth2), CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2, bounds.top + borderTopWidth2); + this.topRightPaddingBox = trh > 0 || trv > 0 ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width - borderRightWidth2), bounds.top + borderTopWidth2, topWidth > bounds.width + borderRightWidth2 ? 0 : Math.max(0, trh - borderRightWidth2), Math.max(0, trv - borderTopWidth2), CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2, bounds.top + borderTopWidth2); + this.bottomRightPaddingBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth2), bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth2), Math.max(0, brh - borderRightWidth2), Math.max(0, brv - borderBottomWidth2), CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2, bounds.top + bounds.height - borderBottomWidth2); + this.bottomLeftPaddingBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2, bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth2), Math.max(0, blh - borderLeftWidth2), Math.max(0, blv - borderBottomWidth2), CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2, bounds.top + bounds.height - borderBottomWidth2); + this.topLeftContentBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 + paddingLeft2, bounds.top + borderTopWidth2 + paddingTop2, Math.max(0, tlh - (borderLeftWidth2 + paddingLeft2)), Math.max(0, tlv - (borderTopWidth2 + paddingTop2)), CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2 + paddingLeft2, bounds.top + borderTopWidth2 + paddingTop2); + this.topRightContentBox = trh > 0 || trv > 0 ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth2 + paddingLeft2), bounds.top + borderTopWidth2 + paddingTop2, topWidth > bounds.width + borderLeftWidth2 + paddingLeft2 ? 0 : trh - borderLeftWidth2 + paddingLeft2, trv - (borderTopWidth2 + paddingTop2), CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - (borderRightWidth2 + paddingRight2), bounds.top + borderTopWidth2 + paddingTop2); + this.bottomRightContentBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth2 + paddingLeft2)), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth2 + paddingTop2), Math.max(0, brh - (borderRightWidth2 + paddingRight2)), brv - (borderBottomWidth2 + paddingBottom2), CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - (borderRightWidth2 + paddingRight2), bounds.top + bounds.height - (borderBottomWidth2 + paddingBottom2)); + this.bottomLeftContentBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 + paddingLeft2, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth2 + paddingLeft2)), blv - (borderBottomWidth2 + paddingBottom2), CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2 + paddingLeft2, bounds.top + bounds.height - (borderBottomWidth2 + paddingBottom2)); + } + return BoundCurves2; + })() + ); + var CORNER; + (function(CORNER2) { + CORNER2[CORNER2["TOP_LEFT"] = 0] = "TOP_LEFT"; + CORNER2[CORNER2["TOP_RIGHT"] = 1] = "TOP_RIGHT"; + CORNER2[CORNER2["BOTTOM_RIGHT"] = 2] = "BOTTOM_RIGHT"; + CORNER2[CORNER2["BOTTOM_LEFT"] = 3] = "BOTTOM_LEFT"; + })(CORNER || (CORNER = {})); + var getCurvePoints = function(x, y, r1, r2, position2) { + var kappa = 4 * ((Math.sqrt(2) - 1) / 3); + var ox = r1 * kappa; + var oy = r2 * kappa; + var xm = x + r1; + var ym = y + r2; + switch (position2) { + case CORNER.TOP_LEFT: + return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y)); + case CORNER.TOP_RIGHT: + return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym)); + case CORNER.BOTTOM_RIGHT: + return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym)); + case CORNER.BOTTOM_LEFT: + default: + return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y)); + } + }; + var calculateBorderBoxPath = function(curves) { + return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox]; + }; + var calculateContentBoxPath = function(curves) { + return [ + curves.topLeftContentBox, + curves.topRightContentBox, + curves.bottomRightContentBox, + curves.bottomLeftContentBox + ]; + }; + var calculatePaddingBoxPath = function(curves) { + return [ + curves.topLeftPaddingBox, + curves.topRightPaddingBox, + curves.bottomRightPaddingBox, + curves.bottomLeftPaddingBox + ]; + }; + var TransformEffect = ( + /** @class */ + /* @__PURE__ */ (function() { + function TransformEffect2(offsetX, offsetY, matrix2) { + this.offsetX = offsetX; + this.offsetY = offsetY; + this.matrix = matrix2; + this.type = 0; + this.target = 2 | 4; + } + return TransformEffect2; + })() + ); + var ClipEffect = ( + /** @class */ + /* @__PURE__ */ (function() { + function ClipEffect2(path, target) { + this.path = path; + this.target = target; + this.type = 1; + } + return ClipEffect2; + })() + ); + var OpacityEffect = ( + /** @class */ + /* @__PURE__ */ (function() { + function OpacityEffect2(opacity2) { + this.opacity = opacity2; + this.type = 2; + this.target = 2 | 4; + } + return OpacityEffect2; + })() + ); + var isTransformEffect = function(effect) { + return effect.type === 0; + }; + var isClipEffect = function(effect) { + return effect.type === 1; + }; + var isOpacityEffect = function(effect) { + return effect.type === 2; + }; + var equalPath = function(a2, b) { + if (a2.length === b.length) { + return a2.some(function(v, i2) { + return v === b[i2]; + }); + } + return false; + }; + var transformPath = function(path, deltaX, deltaY, deltaW, deltaH) { + return path.map(function(point, index) { + switch (index) { + case 0: + return point.add(deltaX, deltaY); + case 1: + return point.add(deltaX + deltaW, deltaY); + case 2: + return point.add(deltaX + deltaW, deltaY + deltaH); + case 3: + return point.add(deltaX, deltaY + deltaH); + } + return point; + }); + }; + var StackingContext = ( + /** @class */ + /* @__PURE__ */ (function() { + function StackingContext2(container) { + this.element = container; + this.inlineLevel = []; + this.nonInlineLevel = []; + this.negativeZIndex = []; + this.zeroOrAutoZIndexOrTransformedOrOpacity = []; + this.positiveZIndex = []; + this.nonPositionedFloats = []; + this.nonPositionedInlineLevel = []; + } + return StackingContext2; + })() + ); + var ElementPaint = ( + /** @class */ + (function() { + function ElementPaint2(container, parent) { + this.container = container; + this.parent = parent; + this.effects = []; + this.curves = new BoundCurves(this.container); + if (this.container.styles.opacity < 1) { + this.effects.push(new OpacityEffect(this.container.styles.opacity)); + } + if (this.container.styles.transform !== null) { + var offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number; + var offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number; + var matrix2 = this.container.styles.transform; + this.effects.push(new TransformEffect(offsetX, offsetY, matrix2)); + } + if (this.container.styles.overflowX !== 0) { + var borderBox = calculateBorderBoxPath(this.curves); + var paddingBox2 = calculatePaddingBoxPath(this.curves); + if (equalPath(borderBox, paddingBox2)) { + this.effects.push(new ClipEffect( + borderBox, + 2 | 4 + /* CONTENT */ + )); + } else { + this.effects.push(new ClipEffect( + borderBox, + 2 + /* BACKGROUND_BORDERS */ + )); + this.effects.push(new ClipEffect( + paddingBox2, + 4 + /* CONTENT */ + )); + } + } + } + ElementPaint2.prototype.getEffects = function(target) { + var inFlow = [ + 2, + 3 + /* FIXED */ + ].indexOf(this.container.styles.position) === -1; + var parent = this.parent; + var effects = this.effects.slice(0); + while (parent) { + var croplessEffects = parent.effects.filter(function(effect) { + return !isClipEffect(effect); + }); + if (inFlow || parent.container.styles.position !== 0 || !parent.parent) { + effects.unshift.apply(effects, croplessEffects); + inFlow = [ + 2, + 3 + /* FIXED */ + ].indexOf(parent.container.styles.position) === -1; + if (parent.container.styles.overflowX !== 0) { + var borderBox = calculateBorderBoxPath(parent.curves); + var paddingBox2 = calculatePaddingBoxPath(parent.curves); + if (!equalPath(borderBox, paddingBox2)) { + effects.unshift(new ClipEffect( + paddingBox2, + 2 | 4 + /* CONTENT */ + )); + } + } + } else { + effects.unshift.apply(effects, croplessEffects); + } + parent = parent.parent; + } + return effects.filter(function(effect) { + return contains(effect.target, target); + }); + }; + return ElementPaint2; + })() + ); + var parseStackTree = function(parent, stackingContext, realStackingContext, listItems) { + parent.container.elements.forEach(function(child) { + var treatAsRealStackingContext = contains( + child.flags, + 4 + /* CREATES_REAL_STACKING_CONTEXT */ + ); + var createsStackingContext2 = contains( + child.flags, + 2 + /* CREATES_STACKING_CONTEXT */ + ); + var paintContainer = new ElementPaint(child, parent); + if (contains( + child.styles.display, + 2048 + /* LIST_ITEM */ + )) { + listItems.push(paintContainer); + } + var listOwnerItems = contains( + child.flags, + 8 + /* IS_LIST_OWNER */ + ) ? [] : listItems; + if (treatAsRealStackingContext || createsStackingContext2) { + var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext; + var stack = new StackingContext(paintContainer); + if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) { + var order_1 = child.styles.zIndex.order; + if (order_1 < 0) { + var index_1 = 0; + parentStack.negativeZIndex.some(function(current, i2) { + if (order_1 > current.element.container.styles.zIndex.order) { + index_1 = i2; + return false; + } else if (index_1 > 0) { + return true; + } + return false; + }); + parentStack.negativeZIndex.splice(index_1, 0, stack); + } else if (order_1 > 0) { + var index_2 = 0; + parentStack.positiveZIndex.some(function(current, i2) { + if (order_1 >= current.element.container.styles.zIndex.order) { + index_2 = i2 + 1; + return false; + } else if (index_2 > 0) { + return true; + } + return false; + }); + parentStack.positiveZIndex.splice(index_2, 0, stack); + } else { + parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack); + } + } else { + if (child.styles.isFloating()) { + parentStack.nonPositionedFloats.push(stack); + } else { + parentStack.nonPositionedInlineLevel.push(stack); + } + } + parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems); + } else { + if (child.styles.isInlineLevel()) { + stackingContext.inlineLevel.push(paintContainer); + } else { + stackingContext.nonInlineLevel.push(paintContainer); + } + parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems); + } + if (contains( + child.flags, + 8 + /* IS_LIST_OWNER */ + )) { + processListItems(child, listOwnerItems); + } + }); + }; + var processListItems = function(owner, elements2) { + var numbering = owner instanceof OLElementContainer ? owner.start : 1; + var reversed = owner instanceof OLElementContainer ? owner.reversed : false; + for (var i2 = 0; i2 < elements2.length; i2++) { + var item = elements2[i2]; + if (item.container instanceof LIElementContainer && typeof item.container.value === "number" && item.container.value !== 0) { + numbering = item.container.value; + } + item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true); + numbering += reversed ? -1 : 1; + } + }; + var parseStackingContexts = function(container) { + var paintContainer = new ElementPaint(container, null); + var root = new StackingContext(paintContainer); + var listItems = []; + parseStackTree(paintContainer, root, root, listItems); + processListItems(paintContainer.container, listItems); + return root; + }; + var parsePathForBorder = function(curves, borderSide) { + switch (borderSide) { + case 0: + return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox); + case 1: + return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox); + case 2: + return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox); + case 3: + default: + return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox); + } + }; + var parsePathForBorderDoubleOuter = function(curves, borderSide) { + switch (borderSide) { + case 0: + return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox, curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox); + case 1: + return createPathFromCurves(curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox, curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox); + case 2: + return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox, curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox); + case 3: + default: + return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox, curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox); + } + }; + var parsePathForBorderDoubleInner = function(curves, borderSide) { + switch (borderSide) { + case 0: + return createPathFromCurves(curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox, curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox); + case 1: + return createPathFromCurves(curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox, curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox); + case 2: + return createPathFromCurves(curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox); + case 3: + default: + return createPathFromCurves(curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox, curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox); + } + }; + var parsePathForBorderStroke = function(curves, borderSide) { + switch (borderSide) { + case 0: + return createStrokePathFromCurves(curves.topLeftBorderStroke, curves.topRightBorderStroke); + case 1: + return createStrokePathFromCurves(curves.topRightBorderStroke, curves.bottomRightBorderStroke); + case 2: + return createStrokePathFromCurves(curves.bottomRightBorderStroke, curves.bottomLeftBorderStroke); + case 3: + default: + return createStrokePathFromCurves(curves.bottomLeftBorderStroke, curves.topLeftBorderStroke); + } + }; + var createStrokePathFromCurves = function(outer1, outer2) { + var path = []; + if (isBezierCurve(outer1)) { + path.push(outer1.subdivide(0.5, false)); + } else { + path.push(outer1); + } + if (isBezierCurve(outer2)) { + path.push(outer2.subdivide(0.5, true)); + } else { + path.push(outer2); + } + return path; + }; + var createPathFromCurves = function(outer1, inner1, outer2, inner2) { + var path = []; + if (isBezierCurve(outer1)) { + path.push(outer1.subdivide(0.5, false)); + } else { + path.push(outer1); + } + if (isBezierCurve(outer2)) { + path.push(outer2.subdivide(0.5, true)); + } else { + path.push(outer2); + } + if (isBezierCurve(inner2)) { + path.push(inner2.subdivide(0.5, true).reverse()); + } else { + path.push(inner2); + } + if (isBezierCurve(inner1)) { + path.push(inner1.subdivide(0.5, false).reverse()); + } else { + path.push(inner1); + } + return path; + }; + var paddingBox = function(element) { + var bounds = element.bounds; + var styles = element.styles; + return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth)); + }; + var contentBox = function(element) { + var styles = element.styles; + var bounds = element.bounds; + var paddingLeft2 = getAbsoluteValue(styles.paddingLeft, bounds.width); + var paddingRight2 = getAbsoluteValue(styles.paddingRight, bounds.width); + var paddingTop2 = getAbsoluteValue(styles.paddingTop, bounds.width); + var paddingBottom2 = getAbsoluteValue(styles.paddingBottom, bounds.width); + return bounds.add(paddingLeft2 + styles.borderLeftWidth, paddingTop2 + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft2 + paddingRight2), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop2 + paddingBottom2)); + }; + var calculateBackgroundPositioningArea = function(backgroundOrigin2, element) { + if (backgroundOrigin2 === 0) { + return element.bounds; + } + if (backgroundOrigin2 === 2) { + return contentBox(element); + } + return paddingBox(element); + }; + var calculateBackgroundPaintingArea = function(backgroundClip2, element) { + if (backgroundClip2 === 0) { + return element.bounds; + } + if (backgroundClip2 === 2) { + return contentBox(element); + } + return paddingBox(element); + }; + var calculateBackgroundRendering = function(container, index, intrinsicSize) { + var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container); + var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container); + var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea); + var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1]; + var position2 = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight); + var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position2, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea); + var offsetX = Math.round(backgroundPositioningArea.left + position2[0]); + var offsetY = Math.round(backgroundPositioningArea.top + position2[1]); + return [path, offsetX, offsetY, sizeWidth, sizeHeight]; + }; + var isAuto = function(token) { + return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO; + }; + var hasIntrinsicValue = function(value) { + return typeof value === "number"; + }; + var calculateBackgroundSize = function(size, _a, bounds) { + var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2]; + var first = size[0], second = size[1]; + if (!first) { + return [0, 0]; + } + if (isLengthPercentage(first) && second && isLengthPercentage(second)) { + return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)]; + } + var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion); + if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) { + if (hasIntrinsicValue(intrinsicProportion)) { + var targetRatio = bounds.width / bounds.height; + return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER) ? [bounds.width, bounds.width / intrinsicProportion] : [bounds.height * intrinsicProportion, bounds.height]; + } + return [bounds.width, bounds.height]; + } + var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth); + var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight); + var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight; + if (isAuto(first) && (!second || isAuto(second))) { + if (hasIntrinsicWidth && hasIntrinsicHeight) { + return [intrinsicWidth, intrinsicHeight]; + } + if (!hasIntrinsicProportion && !hasIntrinsicDimensions) { + return [bounds.width, bounds.height]; + } + if (hasIntrinsicDimensions && hasIntrinsicProportion) { + var width_1 = hasIntrinsicWidth ? intrinsicWidth : intrinsicHeight * intrinsicProportion; + var height_1 = hasIntrinsicHeight ? intrinsicHeight : intrinsicWidth / intrinsicProportion; + return [width_1, height_1]; + } + var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width; + var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height; + return [width_2, height_2]; + } + if (hasIntrinsicProportion) { + var width_3 = 0; + var height_3 = 0; + if (isLengthPercentage(first)) { + width_3 = getAbsoluteValue(first, bounds.width); + } else if (isLengthPercentage(second)) { + height_3 = getAbsoluteValue(second, bounds.height); + } + if (isAuto(first)) { + width_3 = height_3 * intrinsicProportion; + } else if (!second || isAuto(second)) { + height_3 = width_3 / intrinsicProportion; + } + return [width_3, height_3]; + } + var width = null; + var height = null; + if (isLengthPercentage(first)) { + width = getAbsoluteValue(first, bounds.width); + } else if (second && isLengthPercentage(second)) { + height = getAbsoluteValue(second, bounds.height); + } + if (width !== null && (!second || isAuto(second))) { + height = hasIntrinsicWidth && hasIntrinsicHeight ? width / intrinsicWidth * intrinsicHeight : bounds.height; + } + if (height !== null && isAuto(first)) { + width = hasIntrinsicWidth && hasIntrinsicHeight ? height / intrinsicHeight * intrinsicWidth : bounds.width; + } + if (width !== null && height !== null) { + return [width, height]; + } + throw new Error("Unable to calculate background-size for element"); + }; + var getBackgroundValueForIndex = function(values, index) { + var value = values[index]; + if (typeof value === "undefined") { + return values[0]; + } + return value; + }; + var calculateBackgroundRepeatPath = function(repeat2, _a, _b, backgroundPositioningArea, backgroundPaintingArea) { + var x = _a[0], y = _a[1]; + var width = _b[0], height = _b[1]; + switch (repeat2) { + case 2: + return [ + new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)), + new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)), + new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)), + new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y)) + ]; + case 3: + return [ + new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)), + new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)), + new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)), + new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)) + ]; + case 1: + return [ + new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)), + new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)), + new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)), + new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height)) + ]; + default: + return [ + new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)), + new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)), + new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)), + new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)) + ]; + } + }; + var SMALL_IMAGE = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"; + var SAMPLE_TEXT = "Hidden Text"; + var FontMetrics = ( + /** @class */ + (function() { + function FontMetrics2(document2) { + this._data = {}; + this._document = document2; + } + FontMetrics2.prototype.parseMetrics = function(fontFamily3, fontSize2) { + var container = this._document.createElement("div"); + var img = this._document.createElement("img"); + var span = this._document.createElement("span"); + var body = this._document.body; + container.style.visibility = "hidden"; + container.style.fontFamily = fontFamily3; + container.style.fontSize = fontSize2; + container.style.margin = "0"; + container.style.padding = "0"; + container.style.whiteSpace = "nowrap"; + body.appendChild(container); + img.src = SMALL_IMAGE; + img.width = 1; + img.height = 1; + img.style.margin = "0"; + img.style.padding = "0"; + img.style.verticalAlign = "baseline"; + span.style.fontFamily = fontFamily3; + span.style.fontSize = fontSize2; + span.style.margin = "0"; + span.style.padding = "0"; + span.appendChild(this._document.createTextNode(SAMPLE_TEXT)); + container.appendChild(span); + container.appendChild(img); + var baseline = img.offsetTop - span.offsetTop + 2; + container.removeChild(span); + container.appendChild(this._document.createTextNode(SAMPLE_TEXT)); + container.style.lineHeight = "normal"; + img.style.verticalAlign = "super"; + var middle = img.offsetTop - container.offsetTop + 2; + body.removeChild(container); + return { baseline, middle }; + }; + FontMetrics2.prototype.getMetrics = function(fontFamily3, fontSize2) { + var key = fontFamily3 + " " + fontSize2; + if (typeof this._data[key] === "undefined") { + this._data[key] = this.parseMetrics(fontFamily3, fontSize2); + } + return this._data[key]; + }; + return FontMetrics2; + })() + ); + var Renderer = ( + /** @class */ + /* @__PURE__ */ (function() { + function Renderer2(context, options) { + this.context = context; + this.options = options; + } + return Renderer2; + })() + ); + var MASK_OFFSET = 1e4; + var CanvasRenderer = ( + /** @class */ + (function(_super) { + __extends(CanvasRenderer2, _super); + function CanvasRenderer2(context, options) { + var _this = _super.call(this, context, options) || this; + _this._activeEffects = []; + _this.canvas = options.canvas ? options.canvas : document.createElement("canvas"); + _this.ctx = _this.canvas.getContext("2d"); + if (!options.canvas) { + _this.canvas.width = Math.floor(options.width * options.scale); + _this.canvas.height = Math.floor(options.height * options.scale); + _this.canvas.style.width = options.width + "px"; + _this.canvas.style.height = options.height + "px"; + } + _this.fontMetrics = new FontMetrics(document); + _this.ctx.scale(_this.options.scale, _this.options.scale); + _this.ctx.translate(-options.x, -options.y); + _this.ctx.textBaseline = "bottom"; + _this._activeEffects = []; + _this.context.logger.debug("Canvas renderer initialized (" + options.width + "x" + options.height + ") with scale " + options.scale); + return _this; + } + CanvasRenderer2.prototype.applyEffects = function(effects) { + var _this = this; + while (this._activeEffects.length) { + this.popEffect(); + } + effects.forEach(function(effect) { + return _this.applyEffect(effect); + }); + }; + CanvasRenderer2.prototype.applyEffect = function(effect) { + this.ctx.save(); + if (isOpacityEffect(effect)) { + this.ctx.globalAlpha = effect.opacity; + } + if (isTransformEffect(effect)) { + this.ctx.translate(effect.offsetX, effect.offsetY); + this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]); + this.ctx.translate(-effect.offsetX, -effect.offsetY); + } + if (isClipEffect(effect)) { + this.path(effect.path); + this.ctx.clip(); + } + this._activeEffects.push(effect); + }; + CanvasRenderer2.prototype.popEffect = function() { + this._activeEffects.pop(); + this.ctx.restore(); + }; + CanvasRenderer2.prototype.renderStack = function(stack) { + return __awaiter(this, void 0, void 0, function() { + var styles; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + styles = stack.element.container.styles; + if (!styles.isVisible()) return [3, 2]; + return [4, this.renderStackContent(stack)]; + case 1: + _a.sent(); + _a.label = 2; + case 2: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + CanvasRenderer2.prototype.renderNode = function(paint) { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + if (contains( + paint.container.flags, + 16 + /* DEBUG_RENDER */ + )) { + debugger; + } + if (!paint.container.styles.isVisible()) return [3, 3]; + return [4, this.renderNodeBackgroundAndBorders(paint)]; + case 1: + _a.sent(); + return [4, this.renderNodeContent(paint)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + CanvasRenderer2.prototype.renderTextWithLetterSpacing = function(text, letterSpacing2, baseline) { + var _this = this; + if (letterSpacing2 === 0) { + this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline); + } else { + var letters = segmentGraphemes(text.text); + letters.reduce(function(left, letter) { + _this.ctx.fillText(letter, left, text.bounds.top + baseline); + return left + _this.ctx.measureText(letter).width; + }, text.bounds.left); + } + }; + CanvasRenderer2.prototype.createFontStyle = function(styles) { + var fontVariant2 = styles.fontVariant.filter(function(variant) { + return variant === "normal" || variant === "small-caps"; + }).join(""); + var fontFamily3 = fixIOSSystemFonts(styles.fontFamily).join(", "); + var fontSize2 = isDimensionToken(styles.fontSize) ? "" + styles.fontSize.number + styles.fontSize.unit : styles.fontSize.number + "px"; + return [ + [styles.fontStyle, fontVariant2, styles.fontWeight, fontSize2, fontFamily3].join(" "), + fontFamily3, + fontSize2 + ]; + }; + CanvasRenderer2.prototype.renderTextNode = function(text, styles) { + return __awaiter(this, void 0, void 0, function() { + var _a, font, fontFamily3, fontSize2, _b, baseline, middle, paintOrder2; + var _this = this; + return __generator(this, function(_c) { + _a = this.createFontStyle(styles), font = _a[0], fontFamily3 = _a[1], fontSize2 = _a[2]; + this.ctx.font = font; + this.ctx.direction = styles.direction === 1 ? "rtl" : "ltr"; + this.ctx.textAlign = "left"; + this.ctx.textBaseline = "alphabetic"; + _b = this.fontMetrics.getMetrics(fontFamily3, fontSize2), baseline = _b.baseline, middle = _b.middle; + paintOrder2 = styles.paintOrder; + text.textBounds.forEach(function(text2) { + paintOrder2.forEach(function(paintOrderLayer) { + switch (paintOrderLayer) { + case 0: + _this.ctx.fillStyle = asString(styles.color); + _this.renderTextWithLetterSpacing(text2, styles.letterSpacing, baseline); + var textShadows = styles.textShadow; + if (textShadows.length && text2.text.trim().length) { + textShadows.slice(0).reverse().forEach(function(textShadow2) { + _this.ctx.shadowColor = asString(textShadow2.color); + _this.ctx.shadowOffsetX = textShadow2.offsetX.number * _this.options.scale; + _this.ctx.shadowOffsetY = textShadow2.offsetY.number * _this.options.scale; + _this.ctx.shadowBlur = textShadow2.blur.number; + _this.renderTextWithLetterSpacing(text2, styles.letterSpacing, baseline); + }); + _this.ctx.shadowColor = ""; + _this.ctx.shadowOffsetX = 0; + _this.ctx.shadowOffsetY = 0; + _this.ctx.shadowBlur = 0; + } + if (styles.textDecorationLine.length) { + _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color); + styles.textDecorationLine.forEach(function(textDecorationLine2) { + switch (textDecorationLine2) { + case 1: + _this.ctx.fillRect(text2.bounds.left, Math.round(text2.bounds.top + baseline), text2.bounds.width, 1); + break; + case 2: + _this.ctx.fillRect(text2.bounds.left, Math.round(text2.bounds.top), text2.bounds.width, 1); + break; + case 3: + _this.ctx.fillRect(text2.bounds.left, Math.ceil(text2.bounds.top + middle), text2.bounds.width, 1); + break; + } + }); + } + break; + case 1: + if (styles.webkitTextStrokeWidth && text2.text.trim().length) { + _this.ctx.strokeStyle = asString(styles.webkitTextStrokeColor); + _this.ctx.lineWidth = styles.webkitTextStrokeWidth; + _this.ctx.lineJoin = !!window.chrome ? "miter" : "round"; + _this.ctx.strokeText(text2.text, text2.bounds.left, text2.bounds.top + baseline); + } + _this.ctx.strokeStyle = ""; + _this.ctx.lineWidth = 0; + _this.ctx.lineJoin = "miter"; + break; + } + }); + }); + return [ + 2 + /*return*/ + ]; + }); + }); + }; + CanvasRenderer2.prototype.renderReplacedElement = function(container, curves, image2) { + if (image2 && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) { + var box = contentBox(container); + var path = calculatePaddingBoxPath(curves); + this.path(path); + this.ctx.save(); + this.ctx.clip(); + this.ctx.drawImage(image2, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height); + this.ctx.restore(); + } + }; + CanvasRenderer2.prototype.renderNodeContent = function(paint) { + return __awaiter(this, void 0, void 0, function() { + var container, curves, styles, _i, _a, child, image2, image2, iframeRenderer, canvas, size, _b, fontFamily3, fontSize2, baseline, bounds, x, textBounds, img, image2, url, fontFamily3, bounds; + return __generator(this, function(_c) { + switch (_c.label) { + case 0: + this.applyEffects(paint.getEffects( + 4 + /* CONTENT */ + )); + container = paint.container; + curves = paint.curves; + styles = container.styles; + _i = 0, _a = container.textNodes; + _c.label = 1; + case 1: + if (!(_i < _a.length)) return [3, 4]; + child = _a[_i]; + return [4, this.renderTextNode(child, styles)]; + case 2: + _c.sent(); + _c.label = 3; + case 3: + _i++; + return [3, 1]; + case 4: + if (!(container instanceof ImageElementContainer)) return [3, 8]; + _c.label = 5; + case 5: + _c.trys.push([5, 7, , 8]); + return [4, this.context.cache.match(container.src)]; + case 6: + image2 = _c.sent(); + this.renderReplacedElement(container, curves, image2); + return [3, 8]; + case 7: + _c.sent(); + this.context.logger.error("Error loading image " + container.src); + return [3, 8]; + case 8: + if (container instanceof CanvasElementContainer) { + this.renderReplacedElement(container, curves, container.canvas); + } + if (!(container instanceof SVGElementContainer)) return [3, 12]; + _c.label = 9; + case 9: + _c.trys.push([9, 11, , 12]); + return [4, this.context.cache.match(container.svg)]; + case 10: + image2 = _c.sent(); + this.renderReplacedElement(container, curves, image2); + return [3, 12]; + case 11: + _c.sent(); + this.context.logger.error("Error loading svg " + container.svg.substring(0, 255)); + return [3, 12]; + case 12: + if (!(container instanceof IFrameElementContainer && container.tree)) return [3, 14]; + iframeRenderer = new CanvasRenderer2(this.context, { + scale: this.options.scale, + backgroundColor: container.backgroundColor, + x: 0, + y: 0, + width: container.width, + height: container.height + }); + return [4, iframeRenderer.render(container.tree)]; + case 13: + canvas = _c.sent(); + if (container.width && container.height) { + this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height); + } + _c.label = 14; + case 14: + if (container instanceof InputElementContainer) { + size = Math.min(container.bounds.width, container.bounds.height); + if (container.type === CHECKBOX) { + if (container.checked) { + this.ctx.save(); + this.path([ + new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79), + new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549), + new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071), + new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649), + new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23), + new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085), + new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79) + ]); + this.ctx.fillStyle = asString(INPUT_COLOR); + this.ctx.fill(); + this.ctx.restore(); + } + } else if (container.type === RADIO) { + if (container.checked) { + this.ctx.save(); + this.ctx.beginPath(); + this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true); + this.ctx.fillStyle = asString(INPUT_COLOR); + this.ctx.fill(); + this.ctx.restore(); + } + } + } + if (isTextInputElement(container) && container.value.length) { + _b = this.createFontStyle(styles), fontFamily3 = _b[0], fontSize2 = _b[1]; + baseline = this.fontMetrics.getMetrics(fontFamily3, fontSize2).baseline; + this.ctx.font = fontFamily3; + this.ctx.fillStyle = asString(styles.color); + this.ctx.textBaseline = "alphabetic"; + this.ctx.textAlign = canvasTextAlign(container.styles.textAlign); + bounds = contentBox(container); + x = 0; + switch (container.styles.textAlign) { + case 1: + x += bounds.width / 2; + break; + case 2: + x += bounds.width; + break; + } + textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1); + this.ctx.save(); + this.path([ + new Vector(bounds.left, bounds.top), + new Vector(bounds.left + bounds.width, bounds.top), + new Vector(bounds.left + bounds.width, bounds.top + bounds.height), + new Vector(bounds.left, bounds.top + bounds.height) + ]); + this.ctx.clip(); + this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing, baseline); + this.ctx.restore(); + this.ctx.textBaseline = "alphabetic"; + this.ctx.textAlign = "left"; + } + if (!contains( + container.styles.display, + 2048 + /* LIST_ITEM */ + )) return [3, 20]; + if (!(container.styles.listStyleImage !== null)) return [3, 19]; + img = container.styles.listStyleImage; + if (!(img.type === 0)) return [3, 18]; + image2 = void 0; + url = img.url; + _c.label = 15; + case 15: + _c.trys.push([15, 17, , 18]); + return [4, this.context.cache.match(url)]; + case 16: + image2 = _c.sent(); + this.ctx.drawImage(image2, container.bounds.left - (image2.width + 10), container.bounds.top); + return [3, 18]; + case 17: + _c.sent(); + this.context.logger.error("Error loading list-style-image " + url); + return [3, 18]; + case 18: + return [3, 20]; + case 19: + if (paint.listValue && container.styles.listStyleType !== -1) { + fontFamily3 = this.createFontStyle(styles)[0]; + this.ctx.font = fontFamily3; + this.ctx.fillStyle = asString(styles.color); + this.ctx.textBaseline = "middle"; + this.ctx.textAlign = "right"; + bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1); + this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2); + this.ctx.textBaseline = "bottom"; + this.ctx.textAlign = "left"; + } + _c.label = 20; + case 20: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + CanvasRenderer2.prototype.renderStackContent = function(stack) { + return __awaiter(this, void 0, void 0, function() { + var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child; + return __generator(this, function(_p) { + switch (_p.label) { + case 0: + if (contains( + stack.element.container.flags, + 16 + /* DEBUG_RENDER */ + )) { + debugger; + } + return [4, this.renderNodeBackgroundAndBorders(stack.element)]; + case 1: + _p.sent(); + _i = 0, _a = stack.negativeZIndex; + _p.label = 2; + case 2: + if (!(_i < _a.length)) return [3, 5]; + child = _a[_i]; + return [4, this.renderStack(child)]; + case 3: + _p.sent(); + _p.label = 4; + case 4: + _i++; + return [3, 2]; + case 5: + return [4, this.renderNodeContent(stack.element)]; + case 6: + _p.sent(); + _b = 0, _c = stack.nonInlineLevel; + _p.label = 7; + case 7: + if (!(_b < _c.length)) return [3, 10]; + child = _c[_b]; + return [4, this.renderNode(child)]; + case 8: + _p.sent(); + _p.label = 9; + case 9: + _b++; + return [3, 7]; + case 10: + _d = 0, _e = stack.nonPositionedFloats; + _p.label = 11; + case 11: + if (!(_d < _e.length)) return [3, 14]; + child = _e[_d]; + return [4, this.renderStack(child)]; + case 12: + _p.sent(); + _p.label = 13; + case 13: + _d++; + return [3, 11]; + case 14: + _f = 0, _g = stack.nonPositionedInlineLevel; + _p.label = 15; + case 15: + if (!(_f < _g.length)) return [3, 18]; + child = _g[_f]; + return [4, this.renderStack(child)]; + case 16: + _p.sent(); + _p.label = 17; + case 17: + _f++; + return [3, 15]; + case 18: + _h = 0, _j = stack.inlineLevel; + _p.label = 19; + case 19: + if (!(_h < _j.length)) return [3, 22]; + child = _j[_h]; + return [4, this.renderNode(child)]; + case 20: + _p.sent(); + _p.label = 21; + case 21: + _h++; + return [3, 19]; + case 22: + _k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity; + _p.label = 23; + case 23: + if (!(_k < _l.length)) return [3, 26]; + child = _l[_k]; + return [4, this.renderStack(child)]; + case 24: + _p.sent(); + _p.label = 25; + case 25: + _k++; + return [3, 23]; + case 26: + _m = 0, _o = stack.positiveZIndex; + _p.label = 27; + case 27: + if (!(_m < _o.length)) return [3, 30]; + child = _o[_m]; + return [4, this.renderStack(child)]; + case 28: + _p.sent(); + _p.label = 29; + case 29: + _m++; + return [3, 27]; + case 30: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + CanvasRenderer2.prototype.mask = function(paths) { + this.ctx.beginPath(); + this.ctx.moveTo(0, 0); + this.ctx.lineTo(this.canvas.width, 0); + this.ctx.lineTo(this.canvas.width, this.canvas.height); + this.ctx.lineTo(0, this.canvas.height); + this.ctx.lineTo(0, 0); + this.formatPath(paths.slice(0).reverse()); + this.ctx.closePath(); + }; + CanvasRenderer2.prototype.path = function(paths) { + this.ctx.beginPath(); + this.formatPath(paths); + this.ctx.closePath(); + }; + CanvasRenderer2.prototype.formatPath = function(paths) { + var _this = this; + paths.forEach(function(point, index) { + var start = isBezierCurve(point) ? point.start : point; + if (index === 0) { + _this.ctx.moveTo(start.x, start.y); + } else { + _this.ctx.lineTo(start.x, start.y); + } + if (isBezierCurve(point)) { + _this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y); + } + }); + }; + CanvasRenderer2.prototype.renderRepeat = function(path, pattern, offsetX, offsetY) { + this.path(path); + this.ctx.fillStyle = pattern; + this.ctx.translate(offsetX, offsetY); + this.ctx.fill(); + this.ctx.translate(-offsetX, -offsetY); + }; + CanvasRenderer2.prototype.resizeImage = function(image2, width, height) { + var _a; + if (image2.width === width && image2.height === height) { + return image2; + } + var ownerDocument = (_a = this.canvas.ownerDocument) !== null && _a !== void 0 ? _a : document; + var canvas = ownerDocument.createElement("canvas"); + canvas.width = Math.max(1, width); + canvas.height = Math.max(1, height); + var ctx = canvas.getContext("2d"); + ctx.drawImage(image2, 0, 0, image2.width, image2.height, 0, 0, width, height); + return canvas; + }; + CanvasRenderer2.prototype.renderBackgroundImage = function(container) { + return __awaiter(this, void 0, void 0, function() { + var index, _loop_1, this_1, _i, _a, backgroundImage2; + return __generator(this, function(_b) { + switch (_b.label) { + case 0: + index = container.styles.backgroundImage.length - 1; + _loop_1 = function(backgroundImage3) { + var image2, url, _c, path, x, y, width, height, pattern, _d, path, x, y, width, height, _e, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _f, path, left, top_1, width, height, position2, x, y, _g, rx, ry, radialGradient_1, midX, midY, f2, invF; + return __generator(this, function(_h) { + switch (_h.label) { + case 0: + if (!(backgroundImage3.type === 0)) return [3, 5]; + image2 = void 0; + url = backgroundImage3.url; + _h.label = 1; + case 1: + _h.trys.push([1, 3, , 4]); + return [4, this_1.context.cache.match(url)]; + case 2: + image2 = _h.sent(); + return [3, 4]; + case 3: + _h.sent(); + this_1.context.logger.error("Error loading background-image " + url); + return [3, 4]; + case 4: + if (image2) { + _c = calculateBackgroundRendering(container, index, [ + image2.width, + image2.height, + image2.width / image2.height + ]), path = _c[0], x = _c[1], y = _c[2], width = _c[3], height = _c[4]; + pattern = this_1.ctx.createPattern(this_1.resizeImage(image2, width, height), "repeat"); + this_1.renderRepeat(path, pattern, x, y); + } + return [3, 6]; + case 5: + if (isLinearGradient(backgroundImage3)) { + _d = calculateBackgroundRendering(container, index, [null, null, null]), path = _d[0], x = _d[1], y = _d[2], width = _d[3], height = _d[4]; + _e = calculateGradientDirection(backgroundImage3.angle, width, height), lineLength = _e[0], x0 = _e[1], x1 = _e[2], y0 = _e[3], y1 = _e[4]; + canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + ctx = canvas.getContext("2d"); + gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1); + processColorStops(backgroundImage3.stops, lineLength).forEach(function(colorStop) { + return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color)); + }); + ctx.fillStyle = gradient_1; + ctx.fillRect(0, 0, width, height); + if (width > 0 && height > 0) { + pattern = this_1.ctx.createPattern(canvas, "repeat"); + this_1.renderRepeat(path, pattern, x, y); + } + } else if (isRadialGradient(backgroundImage3)) { + _f = calculateBackgroundRendering(container, index, [ + null, + null, + null + ]), path = _f[0], left = _f[1], top_1 = _f[2], width = _f[3], height = _f[4]; + position2 = backgroundImage3.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage3.position; + x = getAbsoluteValue(position2[0], width); + y = getAbsoluteValue(position2[position2.length - 1], height); + _g = calculateRadius(backgroundImage3, x, y, width, height), rx = _g[0], ry = _g[1]; + if (rx > 0 && ry > 0) { + radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx); + processColorStops(backgroundImage3.stops, rx * 2).forEach(function(colorStop) { + return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color)); + }); + this_1.path(path); + this_1.ctx.fillStyle = radialGradient_1; + if (rx !== ry) { + midX = container.bounds.left + 0.5 * container.bounds.width; + midY = container.bounds.top + 0.5 * container.bounds.height; + f2 = ry / rx; + invF = 1 / f2; + this_1.ctx.save(); + this_1.ctx.translate(midX, midY); + this_1.ctx.transform(1, 0, 0, f2, 0, 0); + this_1.ctx.translate(-midX, -midY); + this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF); + this_1.ctx.restore(); + } else { + this_1.ctx.fill(); + } + } + } + _h.label = 6; + case 6: + index--; + return [ + 2 + /*return*/ + ]; + } + }); + }; + this_1 = this; + _i = 0, _a = container.styles.backgroundImage.slice(0).reverse(); + _b.label = 1; + case 1: + if (!(_i < _a.length)) return [3, 4]; + backgroundImage2 = _a[_i]; + return [5, _loop_1(backgroundImage2)]; + case 2: + _b.sent(); + _b.label = 3; + case 3: + _i++; + return [3, 1]; + case 4: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + CanvasRenderer2.prototype.renderSolidBorder = function(color2, side, curvePoints) { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + this.path(parsePathForBorder(curvePoints, side)); + this.ctx.fillStyle = asString(color2); + this.ctx.fill(); + return [ + 2 + /*return*/ + ]; + }); + }); + }; + CanvasRenderer2.prototype.renderDoubleBorder = function(color2, width, side, curvePoints) { + return __awaiter(this, void 0, void 0, function() { + var outerPaths, innerPaths; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + if (!(width < 3)) return [3, 2]; + return [4, this.renderSolidBorder(color2, side, curvePoints)]; + case 1: + _a.sent(); + return [ + 2 + /*return*/ + ]; + case 2: + outerPaths = parsePathForBorderDoubleOuter(curvePoints, side); + this.path(outerPaths); + this.ctx.fillStyle = asString(color2); + this.ctx.fill(); + innerPaths = parsePathForBorderDoubleInner(curvePoints, side); + this.path(innerPaths); + this.ctx.fill(); + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + CanvasRenderer2.prototype.renderNodeBackgroundAndBorders = function(paint) { + return __awaiter(this, void 0, void 0, function() { + var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border; + var _this = this; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + this.applyEffects(paint.getEffects( + 2 + /* BACKGROUND_BORDERS */ + )); + styles = paint.container.styles; + hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length; + borders = [ + { style: styles.borderTopStyle, color: styles.borderTopColor, width: styles.borderTopWidth }, + { style: styles.borderRightStyle, color: styles.borderRightColor, width: styles.borderRightWidth }, + { style: styles.borderBottomStyle, color: styles.borderBottomColor, width: styles.borderBottomWidth }, + { style: styles.borderLeftStyle, color: styles.borderLeftColor, width: styles.borderLeftWidth } + ]; + backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves); + if (!(hasBackground || styles.boxShadow.length)) return [3, 2]; + this.ctx.save(); + this.path(backgroundPaintingArea); + this.ctx.clip(); + if (!isTransparent(styles.backgroundColor)) { + this.ctx.fillStyle = asString(styles.backgroundColor); + this.ctx.fill(); + } + return [4, this.renderBackgroundImage(paint.container)]; + case 1: + _a.sent(); + this.ctx.restore(); + styles.boxShadow.slice(0).reverse().forEach(function(shadow) { + _this.ctx.save(); + var borderBoxArea = calculateBorderBoxPath(paint.curves); + var maskOffset = shadow.inset ? 0 : MASK_OFFSET; + var shadowPaintingArea = transformPath(borderBoxArea, -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number, (shadow.inset ? 1 : -1) * shadow.spread.number, shadow.spread.number * (shadow.inset ? -2 : 2), shadow.spread.number * (shadow.inset ? -2 : 2)); + if (shadow.inset) { + _this.path(borderBoxArea); + _this.ctx.clip(); + _this.mask(shadowPaintingArea); + } else { + _this.mask(borderBoxArea); + _this.ctx.clip(); + _this.path(shadowPaintingArea); + } + _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset; + _this.ctx.shadowOffsetY = shadow.offsetY.number; + _this.ctx.shadowColor = asString(shadow.color); + _this.ctx.shadowBlur = shadow.blur.number; + _this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : "rgba(0,0,0,1)"; + _this.ctx.fill(); + _this.ctx.restore(); + }); + _a.label = 2; + case 2: + side = 0; + _i = 0, borders_1 = borders; + _a.label = 3; + case 3: + if (!(_i < borders_1.length)) return [3, 13]; + border = borders_1[_i]; + if (!(border.style !== 0 && !isTransparent(border.color) && border.width > 0)) return [3, 11]; + if (!(border.style === 2)) return [3, 5]; + return [4, this.renderDashedDottedBorder( + border.color, + border.width, + side, + paint.curves, + 2 + /* DASHED */ + )]; + case 4: + _a.sent(); + return [3, 11]; + case 5: + if (!(border.style === 3)) return [3, 7]; + return [4, this.renderDashedDottedBorder( + border.color, + border.width, + side, + paint.curves, + 3 + /* DOTTED */ + )]; + case 6: + _a.sent(); + return [3, 11]; + case 7: + if (!(border.style === 4)) return [3, 9]; + return [4, this.renderDoubleBorder(border.color, border.width, side, paint.curves)]; + case 8: + _a.sent(); + return [3, 11]; + case 9: + return [4, this.renderSolidBorder(border.color, side, paint.curves)]; + case 10: + _a.sent(); + _a.label = 11; + case 11: + side++; + _a.label = 12; + case 12: + _i++; + return [3, 3]; + case 13: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + CanvasRenderer2.prototype.renderDashedDottedBorder = function(color2, width, side, curvePoints, style) { + return __awaiter(this, void 0, void 0, function() { + var strokePaths, boxPaths, startX, startY, endX, endY, length, dashLength, spaceLength, useLineDash, multiplier, numberOfDashes, minSpace, maxSpace, path1, path2, path1, path2; + return __generator(this, function(_a) { + this.ctx.save(); + strokePaths = parsePathForBorderStroke(curvePoints, side); + boxPaths = parsePathForBorder(curvePoints, side); + if (style === 2) { + this.path(boxPaths); + this.ctx.clip(); + } + if (isBezierCurve(boxPaths[0])) { + startX = boxPaths[0].start.x; + startY = boxPaths[0].start.y; + } else { + startX = boxPaths[0].x; + startY = boxPaths[0].y; + } + if (isBezierCurve(boxPaths[1])) { + endX = boxPaths[1].end.x; + endY = boxPaths[1].end.y; + } else { + endX = boxPaths[1].x; + endY = boxPaths[1].y; + } + if (side === 0 || side === 2) { + length = Math.abs(startX - endX); + } else { + length = Math.abs(startY - endY); + } + this.ctx.beginPath(); + if (style === 3) { + this.formatPath(strokePaths); + } else { + this.formatPath(boxPaths.slice(0, 2)); + } + dashLength = width < 3 ? width * 3 : width * 2; + spaceLength = width < 3 ? width * 2 : width; + if (style === 3) { + dashLength = width; + spaceLength = width; + } + useLineDash = true; + if (length <= dashLength * 2) { + useLineDash = false; + } else if (length <= dashLength * 2 + spaceLength) { + multiplier = length / (2 * dashLength + spaceLength); + dashLength *= multiplier; + spaceLength *= multiplier; + } else { + numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength)); + minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1); + maxSpace = (length - (numberOfDashes + 1) * dashLength) / numberOfDashes; + spaceLength = maxSpace <= 0 || Math.abs(spaceLength - minSpace) < Math.abs(spaceLength - maxSpace) ? minSpace : maxSpace; + } + if (useLineDash) { + if (style === 3) { + this.ctx.setLineDash([0, dashLength + spaceLength]); + } else { + this.ctx.setLineDash([dashLength, spaceLength]); + } + } + if (style === 3) { + this.ctx.lineCap = "round"; + this.ctx.lineWidth = width; + } else { + this.ctx.lineWidth = width * 2 + 1.1; + } + this.ctx.strokeStyle = asString(color2); + this.ctx.stroke(); + this.ctx.setLineDash([]); + if (style === 2) { + if (isBezierCurve(boxPaths[0])) { + path1 = boxPaths[3]; + path2 = boxPaths[0]; + this.ctx.beginPath(); + this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]); + this.ctx.stroke(); + } + if (isBezierCurve(boxPaths[1])) { + path1 = boxPaths[1]; + path2 = boxPaths[2]; + this.ctx.beginPath(); + this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]); + this.ctx.stroke(); + } + } + this.ctx.restore(); + return [ + 2 + /*return*/ + ]; + }); + }); + }; + CanvasRenderer2.prototype.render = function(element) { + return __awaiter(this, void 0, void 0, function() { + var stack; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + if (this.options.backgroundColor) { + this.ctx.fillStyle = asString(this.options.backgroundColor); + this.ctx.fillRect(this.options.x, this.options.y, this.options.width, this.options.height); + } + stack = parseStackingContexts(element); + return [4, this.renderStack(stack)]; + case 1: + _a.sent(); + this.applyEffects([]); + return [2, this.canvas]; + } + }); + }); + }; + return CanvasRenderer2; + })(Renderer) + ); + var isTextInputElement = function(container) { + if (container instanceof TextareaElementContainer) { + return true; + } else if (container instanceof SelectElementContainer) { + return true; + } else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) { + return true; + } + return false; + }; + var calculateBackgroundCurvedPaintingArea = function(clip, curves) { + switch (clip) { + case 0: + return calculateBorderBoxPath(curves); + case 2: + return calculateContentBoxPath(curves); + case 1: + default: + return calculatePaddingBoxPath(curves); + } + }; + var canvasTextAlign = function(textAlign2) { + switch (textAlign2) { + case 1: + return "center"; + case 2: + return "right"; + case 0: + default: + return "left"; + } + }; + var iOSBrokenFonts = ["-apple-system", "system-ui"]; + var fixIOSSystemFonts = function(fontFamilies) { + return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent) ? fontFamilies.filter(function(fontFamily3) { + return iOSBrokenFonts.indexOf(fontFamily3) === -1; + }) : fontFamilies; + }; + var ForeignObjectRenderer = ( + /** @class */ + (function(_super) { + __extends(ForeignObjectRenderer2, _super); + function ForeignObjectRenderer2(context, options) { + var _this = _super.call(this, context, options) || this; + _this.canvas = options.canvas ? options.canvas : document.createElement("canvas"); + _this.ctx = _this.canvas.getContext("2d"); + _this.options = options; + _this.canvas.width = Math.floor(options.width * options.scale); + _this.canvas.height = Math.floor(options.height * options.scale); + _this.canvas.style.width = options.width + "px"; + _this.canvas.style.height = options.height + "px"; + _this.ctx.scale(_this.options.scale, _this.options.scale); + _this.ctx.translate(-options.x, -options.y); + _this.context.logger.debug("EXPERIMENTAL ForeignObject renderer initialized (" + options.width + "x" + options.height + " at " + options.x + "," + options.y + ") with scale " + options.scale); + return _this; + } + ForeignObjectRenderer2.prototype.render = function(element) { + return __awaiter(this, void 0, void 0, function() { + var svg, img; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + svg = createForeignObjectSVG(this.options.width * this.options.scale, this.options.height * this.options.scale, this.options.scale, this.options.scale, element); + return [4, loadSerializedSVG(svg)]; + case 1: + img = _a.sent(); + if (this.options.backgroundColor) { + this.ctx.fillStyle = asString(this.options.backgroundColor); + this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale); + } + this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale); + return [2, this.canvas]; + } + }); + }); + }; + return ForeignObjectRenderer2; + })(Renderer) + ); + var loadSerializedSVG = function(svg) { + return new Promise(function(resolve, reject) { + var img = new Image(); + img.onload = function() { + resolve(img); + }; + img.onerror = reject; + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg)); + }); + }; + var Logger = ( + /** @class */ + (function() { + function Logger2(_a) { + var id = _a.id, enabled = _a.enabled; + this.id = id; + this.enabled = enabled; + this.start = Date.now(); + } + Logger2.prototype.debug = function() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + if (typeof window !== "undefined" && window.console && typeof console.debug === "function") { + console.debug.apply(console, __spreadArray([this.id, this.getTime() + "ms"], args)); + } else { + this.info.apply(this, args); + } + } + }; + Logger2.prototype.getTime = function() { + return Date.now() - this.start; + }; + Logger2.prototype.info = function() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + if (typeof window !== "undefined" && window.console && typeof console.info === "function") { + console.info.apply(console, __spreadArray([this.id, this.getTime() + "ms"], args)); + } + } + }; + Logger2.prototype.warn = function() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + if (typeof window !== "undefined" && window.console && typeof console.warn === "function") { + console.warn.apply(console, __spreadArray([this.id, this.getTime() + "ms"], args)); + } else { + this.info.apply(this, args); + } + } + }; + Logger2.prototype.error = function() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + if (typeof window !== "undefined" && window.console && typeof console.error === "function") { + console.error.apply(console, __spreadArray([this.id, this.getTime() + "ms"], args)); + } else { + this.info.apply(this, args); + } + } + }; + Logger2.instances = {}; + return Logger2; + })() + ); + var Context = ( + /** @class */ + (function() { + function Context2(options, windowBounds) { + var _a; + this.windowBounds = windowBounds; + this.instanceName = "#" + Context2.instanceCount++; + this.logger = new Logger({ id: this.instanceName, enabled: options.logging }); + this.cache = (_a = options.cache) !== null && _a !== void 0 ? _a : new Cache(this, options); + } + Context2.instanceCount = 1; + return Context2; + })() + ); + var html2canvas = function(element, options) { + if (options === void 0) { + options = {}; + } + return renderElement(element, options); + }; + if (typeof window !== "undefined") { + CacheStorage.setContext(window); + } + var renderElement = function(element, opts) { + return __awaiter(void 0, void 0, void 0, function() { + var ownerDocument, defaultView, resourceOptions, contextOptions, windowOptions, windowBounds, context, foreignObjectRendering, cloneOptions, documentCloner, clonedElement, container, _a, width, height, left, top, backgroundColor2, renderOptions, canvas, renderer, root, renderer; + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t; + return __generator(this, function(_u) { + switch (_u.label) { + case 0: + if (!element || typeof element !== "object") { + return [2, Promise.reject("Invalid element provided as first argument")]; + } + ownerDocument = element.ownerDocument; + if (!ownerDocument) { + throw new Error("Element is not attached to a Document"); + } + defaultView = ownerDocument.defaultView; + if (!defaultView) { + throw new Error("Document is not attached to a Window"); + } + resourceOptions = { + allowTaint: (_b = opts.allowTaint) !== null && _b !== void 0 ? _b : false, + imageTimeout: (_c = opts.imageTimeout) !== null && _c !== void 0 ? _c : 15e3, + proxy: opts.proxy, + useCORS: (_d = opts.useCORS) !== null && _d !== void 0 ? _d : false + }; + contextOptions = __assign({ logging: (_e = opts.logging) !== null && _e !== void 0 ? _e : true, cache: opts.cache }, resourceOptions); + windowOptions = { + windowWidth: (_f = opts.windowWidth) !== null && _f !== void 0 ? _f : defaultView.innerWidth, + windowHeight: (_g = opts.windowHeight) !== null && _g !== void 0 ? _g : defaultView.innerHeight, + scrollX: (_h = opts.scrollX) !== null && _h !== void 0 ? _h : defaultView.pageXOffset, + scrollY: (_j = opts.scrollY) !== null && _j !== void 0 ? _j : defaultView.pageYOffset + }; + windowBounds = new Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight); + context = new Context(contextOptions, windowBounds); + foreignObjectRendering = (_k = opts.foreignObjectRendering) !== null && _k !== void 0 ? _k : false; + cloneOptions = { + allowTaint: (_l = opts.allowTaint) !== null && _l !== void 0 ? _l : false, + onclone: opts.onclone, + ignoreElements: opts.ignoreElements, + inlineImages: foreignObjectRendering, + copyStyles: foreignObjectRendering + }; + context.logger.debug("Starting document clone with size " + windowBounds.width + "x" + windowBounds.height + " scrolled to " + -windowBounds.left + "," + -windowBounds.top); + documentCloner = new DocumentCloner(context, element, cloneOptions); + clonedElement = documentCloner.clonedReferenceElement; + if (!clonedElement) { + return [2, Promise.reject("Unable to find element in cloned iframe")]; + } + return [4, documentCloner.toIFrame(ownerDocument, windowBounds)]; + case 1: + container = _u.sent(); + _a = isBodyElement(clonedElement) || isHTMLElement2(clonedElement) ? parseDocumentSize(clonedElement.ownerDocument) : parseBounds(context, clonedElement), width = _a.width, height = _a.height, left = _a.left, top = _a.top; + backgroundColor2 = parseBackgroundColor(context, clonedElement, opts.backgroundColor); + renderOptions = { + canvas: opts.canvas, + backgroundColor: backgroundColor2, + scale: (_o = (_m = opts.scale) !== null && _m !== void 0 ? _m : defaultView.devicePixelRatio) !== null && _o !== void 0 ? _o : 1, + x: ((_p = opts.x) !== null && _p !== void 0 ? _p : 0) + left, + y: ((_q = opts.y) !== null && _q !== void 0 ? _q : 0) + top, + width: (_r = opts.width) !== null && _r !== void 0 ? _r : Math.ceil(width), + height: (_s = opts.height) !== null && _s !== void 0 ? _s : Math.ceil(height) + }; + if (!foreignObjectRendering) return [3, 3]; + context.logger.debug("Document cloned, using foreign object rendering"); + renderer = new ForeignObjectRenderer(context, renderOptions); + return [4, renderer.render(clonedElement)]; + case 2: + canvas = _u.sent(); + return [3, 5]; + case 3: + context.logger.debug("Document cloned, element located at " + left + "," + top + " with size " + width + "x" + height + " using computed rendering"); + context.logger.debug("Starting DOM parsing"); + root = parseTree(context, clonedElement); + if (backgroundColor2 === root.styles.backgroundColor) { + root.styles.backgroundColor = COLORS.TRANSPARENT; + } + context.logger.debug("Starting renderer for element at " + renderOptions.x + "," + renderOptions.y + " with size " + renderOptions.width + "x" + renderOptions.height); + renderer = new CanvasRenderer(context, renderOptions); + return [4, renderer.render(root)]; + case 4: + canvas = _u.sent(); + _u.label = 5; + case 5: + if ((_t = opts.removeContainer) !== null && _t !== void 0 ? _t : true) { + if (!DocumentCloner.destroy(container)) { + context.logger.error("Cannot detach cloned iframe as it is not in the DOM anymore"); + } + } + context.logger.debug("Finished rendering"); + return [2, canvas]; + } + }); + }); + }; + var parseBackgroundColor = function(context, element, backgroundColorOverride) { + var ownerDocument = element.ownerDocument; + var documentBackgroundColor = ownerDocument.documentElement ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor) : COLORS.TRANSPARENT; + var bodyBackgroundColor = ownerDocument.body ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor) : COLORS.TRANSPARENT; + var defaultBackgroundColor = typeof backgroundColorOverride === "string" ? parseColor(context, backgroundColorOverride) : backgroundColorOverride === null ? COLORS.TRANSPARENT : 4294967295; + return element === ownerDocument.documentElement ? isTransparent(documentBackgroundColor) ? isTransparent(bodyBackgroundColor) ? defaultBackgroundColor : bodyBackgroundColor : documentBackgroundColor : defaultBackgroundColor; + }; + return html2canvas; + })); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/platform.js + function createMetadataLocator() { + const metadataLookup = /* @__PURE__ */ new WeakMap(); + return function(target) { + let metadata = metadataLookup.get(target); + if (metadata === void 0) { + let currentTarget = Reflect.getPrototypeOf(target); + while (metadata === void 0 && currentTarget !== null) { + metadata = metadataLookup.get(currentTarget); + currentTarget = Reflect.getPrototypeOf(currentTarget); + } + metadata = metadata === void 0 ? [] : metadata.slice(0); + metadataLookup.set(target, metadata); + } + return metadata; + }; + } + var $global, propConfig, FAST, emptyArray; + var init_platform = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/platform.js"() { + $global = (function() { + if (typeof globalThis !== "undefined") { + return globalThis; + } + if (typeof global !== "undefined") { + return global; + } + if (typeof self !== "undefined") { + return self; + } + if (typeof window !== "undefined") { + return window; + } + try { + return new Function("return this")(); + } catch (_a) { + return {}; + } + })(); + if ($global.trustedTypes === void 0) { + $global.trustedTypes = { createPolicy: (n, r) => r }; + } + propConfig = { + configurable: false, + enumerable: false, + writable: false + }; + if ($global.FAST === void 0) { + Reflect.defineProperty($global, "FAST", Object.assign({ value: /* @__PURE__ */ Object.create(null) }, propConfig)); + } + FAST = $global.FAST; + if (FAST.getById === void 0) { + const storage = /* @__PURE__ */ Object.create(null); + Reflect.defineProperty(FAST, "getById", Object.assign({ value(id, initialize) { + let found = storage[id]; + if (found === void 0) { + found = initialize ? storage[id] = initialize() : null; + } + return found; + } }, propConfig)); + } + emptyArray = Object.freeze([]); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/dom.js + var updateQueue, fastHTMLPolicy, htmlPolicy, marker, _interpolationStart, _interpolationEnd, DOM; + var init_dom = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/dom.js"() { + init_platform(); + updateQueue = $global.FAST.getById(1, () => { + const tasks = []; + const pendingErrors = []; + function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } + } + function tryRunTask(task) { + try { + task.call(); + } catch (error) { + pendingErrors.push(error); + setTimeout(throwFirstError, 0); + } + } + function process() { + const capacity = 1024; + let index = 0; + while (index < tasks.length) { + tryRunTask(tasks[index]); + index++; + if (index > capacity) { + for (let scan = 0, newLength = tasks.length - index; scan < newLength; scan++) { + tasks[scan] = tasks[scan + index]; + } + tasks.length -= index; + index = 0; + } + } + tasks.length = 0; + } + function enqueue(callable) { + if (tasks.length < 1) { + $global.requestAnimationFrame(process); + } + tasks.push(callable); + } + return Object.freeze({ + enqueue, + process + }); + }); + fastHTMLPolicy = $global.trustedTypes.createPolicy("fast-html", { + createHTML: (html2) => html2 + }); + htmlPolicy = fastHTMLPolicy; + marker = `fast-${Math.random().toString(36).substring(2, 8)}`; + _interpolationStart = `${marker}{`; + _interpolationEnd = `}${marker}`; + DOM = Object.freeze({ + /** + * Indicates whether the DOM supports the adoptedStyleSheets feature. + */ + supportsAdoptedStyleSheets: Array.isArray(document.adoptedStyleSheets) && "replace" in CSSStyleSheet.prototype, + /** + * Sets the HTML trusted types policy used by the templating engine. + * @param policy - The policy to set for HTML. + * @remarks + * This API can only be called once, for security reasons. It should be + * called by the application developer at the start of their program. + */ + setHTMLPolicy(policy) { + if (htmlPolicy !== fastHTMLPolicy) { + throw new Error("The HTML policy can only be set once."); + } + htmlPolicy = policy; + }, + /** + * Turns a string into trusted HTML using the configured trusted types policy. + * @param html - The string to turn into trusted HTML. + * @remarks + * Used internally by the template engine when creating templates + * and setting innerHTML. + */ + createHTML(html2) { + return htmlPolicy.createHTML(html2); + }, + /** + * Determines if the provided node is a template marker used by the runtime. + * @param node - The node to test. + */ + isMarker(node) { + return node && node.nodeType === 8 && node.data.startsWith(marker); + }, + /** + * Given a marker node, extract the {@link HTMLDirective} index from the placeholder. + * @param node - The marker node to extract the index from. + */ + extractDirectiveIndexFromMarker(node) { + return parseInt(node.data.replace(`${marker}:`, "")); + }, + /** + * Creates a placeholder string suitable for marking out a location *within* + * an attribute value or HTML content. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by binding directives. + */ + createInterpolationPlaceholder(index) { + return `${_interpolationStart}${index}${_interpolationEnd}`; + }, + /** + * Creates a placeholder that manifests itself as an attribute on an + * element. + * @param attributeName - The name of the custom attribute. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by attribute directives such as `ref`, `slotted`, and `children`. + */ + createCustomAttributePlaceholder(attributeName, index) { + return `${attributeName}="${this.createInterpolationPlaceholder(index)}"`; + }, + /** + * Creates a placeholder that manifests itself as a marker within the DOM structure. + * @param index - The directive index to create the placeholder for. + * @remarks + * Used internally by structural directives such as `repeat`. + */ + createBlockPlaceholder(index) { + return ``; + }, + /** + * Schedules DOM update work in the next async batch. + * @param callable - The callable function or object to queue. + */ + queueUpdate: updateQueue.enqueue, + /** + * Immediately processes all work previously scheduled + * through queueUpdate. + * @remarks + * This also forces nextUpdate promises + * to resolve. + */ + processUpdates: updateQueue.process, + /** + * Resolves with the next DOM update. + */ + nextUpdate() { + return new Promise(updateQueue.enqueue); + }, + /** + * Sets an attribute value on an element. + * @param element - The element to set the attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is `null` or `undefined`, the attribute is removed, otherwise + * it is set to the provided value using the standard `setAttribute` API. + */ + setAttribute(element, attributeName, value) { + if (value === null || value === void 0) { + element.removeAttribute(attributeName); + } else { + element.setAttribute(attributeName, value); + } + }, + /** + * Sets a boolean attribute value. + * @param element - The element to set the boolean attribute value on. + * @param attributeName - The attribute name to set. + * @param value - The value of the attribute to set. + * @remarks + * If the value is true, the attribute is added; otherwise it is removed. + */ + setBooleanAttribute(element, attributeName, value) { + value ? element.setAttribute(attributeName, "") : element.removeAttribute(attributeName); + }, + /** + * Removes all the child nodes of the provided parent node. + * @param parent - The node to remove the children from. + */ + removeChildNodes(parent) { + for (let child = parent.firstChild; child !== null; child = parent.firstChild) { + parent.removeChild(child); + } + }, + /** + * Creates a TreeWalker configured to walk a template fragment. + * @param fragment - The fragment to walk. + */ + createTemplateWalker(fragment) { + return document.createTreeWalker( + fragment, + 133, + // element, text, comment + null, + false + ); + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js + var SubscriberSet, PropertyChangeNotifier; + var init_notifier = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/notifier.js"() { + SubscriberSet = class { + /** + * Creates an instance of SubscriberSet for the specified source. + * @param source - The object source that subscribers will receive notifications from. + * @param initialSubscriber - An initial subscriber to changes. + */ + constructor(source, initialSubscriber) { + this.sub1 = void 0; + this.sub2 = void 0; + this.spillover = void 0; + this.source = source; + this.sub1 = initialSubscriber; + } + /** + * Checks whether the provided subscriber has been added to this set. + * @param subscriber - The subscriber to test for inclusion in this set. + */ + has(subscriber) { + return this.spillover === void 0 ? this.sub1 === subscriber || this.sub2 === subscriber : this.spillover.indexOf(subscriber) !== -1; + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + */ + subscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.has(subscriber)) { + return; + } + if (this.sub1 === void 0) { + this.sub1 = subscriber; + return; + } + if (this.sub2 === void 0) { + this.sub2 = subscriber; + return; + } + this.spillover = [this.sub1, this.sub2, subscriber]; + this.sub1 = void 0; + this.sub2 = void 0; + } else { + const index = spillover.indexOf(subscriber); + if (index === -1) { + spillover.push(subscriber); + } + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + */ + unsubscribe(subscriber) { + const spillover = this.spillover; + if (spillover === void 0) { + if (this.sub1 === subscriber) { + this.sub1 = void 0; + } else if (this.sub2 === subscriber) { + this.sub2 = void 0; + } + } else { + const index = spillover.indexOf(subscriber); + if (index !== -1) { + spillover.splice(index, 1); + } + } + } + /** + * Notifies all subscribers. + * @param args - Data passed along to subscribers during notification. + */ + notify(args) { + const spillover = this.spillover; + const source = this.source; + if (spillover === void 0) { + const sub1 = this.sub1; + const sub2 = this.sub2; + if (sub1 !== void 0) { + sub1.handleChange(source, args); + } + if (sub2 !== void 0) { + sub2.handleChange(source, args); + } + } else { + for (let i = 0, ii = spillover.length; i < ii; ++i) { + spillover[i].handleChange(source, args); + } + } + } + }; + PropertyChangeNotifier = class { + /** + * Creates an instance of PropertyChangeNotifier for the specified source. + * @param source - The object source that subscribers will receive notifications from. + */ + constructor(source) { + this.subscribers = {}; + this.sourceSubscribers = null; + this.source = source; + } + /** + * Notifies all subscribers, based on the specified property. + * @param propertyName - The property name, passed along to subscribers during notification. + */ + notify(propertyName) { + var _a; + const subscribers = this.subscribers[propertyName]; + if (subscribers !== void 0) { + subscribers.notify(propertyName); + } + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.notify(propertyName); + } + /** + * Subscribes to notification of changes in an object's state. + * @param subscriber - The object that is subscribing for change notification. + * @param propertyToWatch - The name of the property that the subscriber is interested in watching for changes. + */ + subscribe(subscriber, propertyToWatch) { + var _a; + if (propertyToWatch) { + let subscribers = this.subscribers[propertyToWatch]; + if (subscribers === void 0) { + this.subscribers[propertyToWatch] = subscribers = new SubscriberSet(this.source); + } + subscribers.subscribe(subscriber); + } else { + this.sourceSubscribers = (_a = this.sourceSubscribers) !== null && _a !== void 0 ? _a : new SubscriberSet(this.source); + this.sourceSubscribers.subscribe(subscriber); + } + } + /** + * Unsubscribes from notification of changes in an object's state. + * @param subscriber - The object that is unsubscribing from change notification. + * @param propertyToUnwatch - The name of the property that the subscriber is no longer interested in watching. + */ + unsubscribe(subscriber, propertyToUnwatch) { + var _a; + if (propertyToUnwatch) { + const subscribers = this.subscribers[propertyToUnwatch]; + if (subscribers !== void 0) { + subscribers.unsubscribe(subscriber); + } + } else { + (_a = this.sourceSubscribers) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriber); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/observable.js + function observable(target, nameOrAccessor) { + Observable.defineProperty(target, nameOrAccessor); + } + function volatile(target, name, descriptor) { + return Object.assign({}, descriptor, { + get: function() { + Observable.trackVolatile(); + return descriptor.get.apply(this); + } + }); + } + var Observable, contextEvent, ExecutionContext, defaultExecutionContext; + var init_observable = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/observable.js"() { + init_dom(); + init_platform(); + init_notifier(); + Observable = FAST.getById(2, () => { + const volatileRegex = /(:|&&|\|\||if)/; + const notifierLookup = /* @__PURE__ */ new WeakMap(); + const queueUpdate = DOM.queueUpdate; + let watcher = void 0; + let createArrayObserver = (array) => { + throw new Error("Must call enableArrayObservation before observing arrays."); + }; + function getNotifier(source) { + let found = source.$fastController || notifierLookup.get(source); + if (found === void 0) { + if (Array.isArray(source)) { + found = createArrayObserver(source); + } else { + notifierLookup.set(source, found = new PropertyChangeNotifier(source)); + } + } + return found; + } + const getAccessors = createMetadataLocator(); + class DefaultObservableAccessor { + constructor(name) { + this.name = name; + this.field = `_${name}`; + this.callback = `${name}Changed`; + } + getValue(source) { + if (watcher !== void 0) { + watcher.watch(source, this.name); + } + return source[this.field]; + } + setValue(source, newValue) { + const field = this.field; + const oldValue = source[field]; + if (oldValue !== newValue) { + source[field] = newValue; + const callback = source[this.callback]; + if (typeof callback === "function") { + callback.call(source, oldValue, newValue); + } + getNotifier(source).notify(this.name); + } + } + } + class BindingObserverImplementation extends SubscriberSet { + constructor(binding, initialSubscriber, isVolatileBinding = false) { + super(binding, initialSubscriber); + this.binding = binding; + this.isVolatileBinding = isVolatileBinding; + this.needsRefresh = true; + this.needsQueue = true; + this.first = this; + this.last = null; + this.propertySource = void 0; + this.propertyName = void 0; + this.notifier = void 0; + this.next = void 0; + } + observe(source, context) { + if (this.needsRefresh && this.last !== null) { + this.disconnect(); + } + const previousWatcher = watcher; + watcher = this.needsRefresh ? this : void 0; + this.needsRefresh = this.isVolatileBinding; + const result = this.binding(source, context); + watcher = previousWatcher; + return result; + } + disconnect() { + if (this.last !== null) { + let current = this.first; + while (current !== void 0) { + current.notifier.unsubscribe(this, current.propertyName); + current = current.next; + } + this.last = null; + this.needsRefresh = this.needsQueue = true; + } + } + watch(propertySource, propertyName) { + const prev = this.last; + const notifier = getNotifier(propertySource); + const current = prev === null ? this.first : {}; + current.propertySource = propertySource; + current.propertyName = propertyName; + current.notifier = notifier; + notifier.subscribe(this, propertyName); + if (prev !== null) { + if (!this.needsRefresh) { + let prevValue; + watcher = void 0; + prevValue = prev.propertySource[prev.propertyName]; + watcher = this; + if (propertySource === prevValue) { + this.needsRefresh = true; + } + } + prev.next = current; + } + this.last = current; + } + handleChange() { + if (this.needsQueue) { + this.needsQueue = false; + queueUpdate(this); + } + } + call() { + if (this.last !== null) { + this.needsQueue = true; + this.notify(this); + } + } + records() { + let next = this.first; + return { + next: () => { + const current = next; + if (current === void 0) { + return { value: void 0, done: true }; + } else { + next = next.next; + return { + value: current, + done: false + }; + } + }, + [Symbol.iterator]: function() { + return this; + } + }; + } + } + return Object.freeze({ + /** + * @internal + * @param factory - The factory used to create array observers. + */ + setArrayObserverFactory(factory) { + createArrayObserver = factory; + }, + /** + * Gets a notifier for an object or Array. + * @param source - The object or Array to get the notifier for. + */ + getNotifier, + /** + * Records a property change for a source object. + * @param source - The object to record the change against. + * @param propertyName - The property to track as changed. + */ + track(source, propertyName) { + if (watcher !== void 0) { + watcher.watch(source, propertyName); + } + }, + /** + * Notifies watchers that the currently executing property getter or function is volatile + * with respect to its observable dependencies. + */ + trackVolatile() { + if (watcher !== void 0) { + watcher.needsRefresh = true; + } + }, + /** + * Notifies subscribers of a source object of changes. + * @param source - the object to notify of changes. + * @param args - The change args to pass to subscribers. + */ + notify(source, args) { + getNotifier(source).notify(args); + }, + /** + * Defines an observable property on an object or prototype. + * @param target - The target object to define the observable on. + * @param nameOrAccessor - The name of the property to define as observable; + * or a custom accessor that specifies the property name and accessor implementation. + */ + defineProperty(target, nameOrAccessor) { + if (typeof nameOrAccessor === "string") { + nameOrAccessor = new DefaultObservableAccessor(nameOrAccessor); + } + getAccessors(target).push(nameOrAccessor); + Reflect.defineProperty(target, nameOrAccessor.name, { + enumerable: true, + get: function() { + return nameOrAccessor.getValue(this); + }, + set: function(newValue) { + nameOrAccessor.setValue(this, newValue); + } + }); + }, + /** + * Finds all the observable accessors defined on the target, + * including its prototype chain. + * @param target - The target object to search for accessor on. + */ + getAccessors, + /** + * Creates a {@link BindingObserver} that can watch the + * provided {@link Binding} for changes. + * @param binding - The binding to observe. + * @param initialSubscriber - An initial subscriber to changes in the binding value. + * @param isVolatileBinding - Indicates whether the binding's dependency list must be re-evaluated on every value evaluation. + */ + binding(binding, initialSubscriber, isVolatileBinding = this.isVolatileBinding(binding)) { + return new BindingObserverImplementation(binding, initialSubscriber, isVolatileBinding); + }, + /** + * Determines whether a binding expression is volatile and needs to have its dependency list re-evaluated + * on every evaluation of the value. + * @param binding - The binding to inspect. + */ + isVolatileBinding(binding) { + return volatileRegex.test(binding.toString()); + } + }); + }); + contextEvent = FAST.getById(3, () => { + let current = null; + return { + get() { + return current; + }, + set(event) { + current = event; + } + }; + }); + ExecutionContext = class { + constructor() { + this.index = 0; + this.length = 0; + this.parent = null; + this.parentContext = null; + } + /** + * The current event within an event handler. + */ + get event() { + return contextEvent.get(); + } + /** + * Indicates whether the current item within a repeat context + * has an even index. + */ + get isEven() { + return this.index % 2 === 0; + } + /** + * Indicates whether the current item within a repeat context + * has an odd index. + */ + get isOdd() { + return this.index % 2 !== 0; + } + /** + * Indicates whether the current item within a repeat context + * is the first item in the collection. + */ + get isFirst() { + return this.index === 0; + } + /** + * Indicates whether the current item within a repeat context + * is somewhere in the middle of the collection. + */ + get isInMiddle() { + return !this.isFirst && !this.isLast; + } + /** + * Indicates whether the current item within a repeat context + * is the last item in the collection. + */ + get isLast() { + return this.index === this.length - 1; + } + /** + * Sets the event for the current execution context. + * @param event - The event to set. + * @internal + */ + static setEvent(event) { + contextEvent.set(event); + } + }; + Observable.defineProperty(ExecutionContext.prototype, "index"); + Observable.defineProperty(ExecutionContext.prototype, "length"); + defaultExecutionContext = Object.seal(new ExecutionContext()); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js + var HTMLDirective, TargetedHTMLDirective, AttachedBehaviorHTMLDirective; + var init_html_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/html-directive.js"() { + init_dom(); + HTMLDirective = class { + constructor() { + this.targetIndex = 0; + } + }; + TargetedHTMLDirective = class extends HTMLDirective { + constructor() { + super(...arguments); + this.createPlaceholder = DOM.createInterpolationPlaceholder; + } + }; + AttachedBehaviorHTMLDirective = class extends HTMLDirective { + /** + * + * @param name - The name of the behavior; used as a custom attribute on the element. + * @param behavior - The behavior to instantiate and attach to the element. + * @param options - Options to pass to the behavior during creation. + */ + constructor(name, behavior, options) { + super(); + this.name = name; + this.behavior = behavior; + this.options = options; + } + /** + * Creates a placeholder string based on the directive's index within the template. + * @param index - The index of the directive within the template. + * @remarks + * Creates a custom attribute placeholder. + */ + createPlaceholder(index) { + return DOM.createCustomAttributePlaceholder(this.name, index); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + * @remarks + * Creates an instance of the `behavior` type this directive was constructed with + * and passes the target and options to that `behavior`'s constructor. + */ + createBehavior(target) { + return new this.behavior(target, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/binding.js + function normalBind(source, context) { + this.source = source; + this.context = context; + if (this.bindingObserver === null) { + this.bindingObserver = Observable.binding(this.binding, this, this.isBindingVolatile); + } + this.updateTarget(this.bindingObserver.observe(source, context)); + } + function triggerBind(source, context) { + this.source = source; + this.context = context; + this.target.addEventListener(this.targetName, this); + } + function normalUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + } + function contentUnbind() { + this.bindingObserver.disconnect(); + this.source = null; + this.context = null; + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.unbind(); + view.needsBindOnly = true; + } + } + function triggerUnbind() { + this.target.removeEventListener(this.targetName, this); + this.source = null; + this.context = null; + } + function updateAttributeTarget(value) { + DOM.setAttribute(this.target, this.targetName, value); + } + function updateBooleanAttributeTarget(value) { + DOM.setBooleanAttribute(this.target, this.targetName, value); + } + function updateContentTarget(value) { + if (value === null || value === void 0) { + value = ""; + } + if (value.create) { + this.target.textContent = ""; + let view = this.target.$fastView; + if (view === void 0) { + view = value.create(); + } else { + if (this.target.$fastTemplate !== value) { + if (view.isComposed) { + view.remove(); + view.unbind(); + } + view = value.create(); + } + } + if (!view.isComposed) { + view.isComposed = true; + view.bind(this.source, this.context); + view.insertBefore(this.target); + this.target.$fastView = view; + this.target.$fastTemplate = value; + } else if (view.needsBindOnly) { + view.needsBindOnly = false; + view.bind(this.source, this.context); + } + } else { + const view = this.target.$fastView; + if (view !== void 0 && view.isComposed) { + view.isComposed = false; + view.remove(); + if (view.needsBindOnly) { + view.needsBindOnly = false; + } else { + view.unbind(); + } + } + this.target.textContent = value; + } + } + function updatePropertyTarget(value) { + this.target[this.targetName] = value; + } + function updateClassTarget(value) { + const classVersions = this.classVersions || /* @__PURE__ */ Object.create(null); + const target = this.target; + let version = this.version || 0; + if (value !== null && value !== void 0 && value.length) { + const names = value.split(/\s+/); + for (let i = 0, ii = names.length; i < ii; ++i) { + const currentName = names[i]; + if (currentName === "") { + continue; + } + classVersions[currentName] = version; + target.classList.add(currentName); + } + } + this.classVersions = classVersions; + this.version = version + 1; + if (version === 0) { + return; + } + version -= 1; + for (const name in classVersions) { + if (classVersions[name] === version) { + target.classList.remove(name); + } + } + } + var HTMLBindingDirective, BindingBehavior; + var init_binding = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/binding.js"() { + init_dom(); + init_observable(); + init_html_directive(); + HTMLBindingDirective = class extends TargetedHTMLDirective { + /** + * Creates an instance of BindingDirective. + * @param binding - A binding that returns the data used to update the DOM. + */ + constructor(binding) { + super(); + this.binding = binding; + this.bind = normalBind; + this.unbind = normalUnbind; + this.updateTarget = updateAttributeTarget; + this.isBindingVolatile = Observable.isVolatileBinding(this.binding); + } + /** + * Gets/sets the name of the attribute or property that this + * binding is targeting. + */ + get targetName() { + return this.originalTargetName; + } + set targetName(value) { + this.originalTargetName = value; + if (value === void 0) { + return; + } + switch (value[0]) { + case ":": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updatePropertyTarget; + if (this.cleanedTargetName === "innerHTML") { + const binding = this.binding; + this.binding = (s, c) => DOM.createHTML(binding(s, c)); + } + break; + case "?": + this.cleanedTargetName = value.substr(1); + this.updateTarget = updateBooleanAttributeTarget; + break; + case "@": + this.cleanedTargetName = value.substr(1); + this.bind = triggerBind; + this.unbind = triggerUnbind; + break; + default: + this.cleanedTargetName = value; + if (value === "class") { + this.updateTarget = updateClassTarget; + } + break; + } + } + /** + * Makes this binding target the content of an element rather than + * a particular attribute or property. + */ + targetAtContent() { + this.updateTarget = updateContentTarget; + this.unbind = contentUnbind; + } + /** + * Creates the runtime BindingBehavior instance based on the configuration + * information stored in the BindingDirective. + * @param target - The target node that the binding behavior should attach to. + */ + createBehavior(target) { + return new BindingBehavior(target, this.binding, this.isBindingVolatile, this.bind, this.unbind, this.updateTarget, this.cleanedTargetName); + } + }; + BindingBehavior = class { + /** + * Creates an instance of BindingBehavior. + * @param target - The target of the data updates. + * @param binding - The binding that returns the latest value for an update. + * @param isBindingVolatile - Indicates whether the binding has volatile dependencies. + * @param bind - The operation to perform during binding. + * @param unbind - The operation to perform during unbinding. + * @param updateTarget - The operation to perform when updating. + * @param targetName - The name of the target attribute or property to update. + */ + constructor(target, binding, isBindingVolatile, bind, unbind, updateTarget, targetName) { + this.source = null; + this.context = null; + this.bindingObserver = null; + this.target = target; + this.binding = binding; + this.isBindingVolatile = isBindingVolatile; + this.bind = bind; + this.unbind = unbind; + this.updateTarget = updateTarget; + this.targetName = targetName; + } + /** @internal */ + handleChange() { + this.updateTarget(this.bindingObserver.observe(this.source, this.context)); + } + /** @internal */ + handleEvent(event) { + ExecutionContext.setEvent(event); + const result = this.binding(this.source, this.context); + ExecutionContext.setEvent(null); + if (result !== true) { + event.preventDefault(); + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js + function createAggregateBinding(parts) { + if (parts.length === 1) { + return parts[0]; + } + let targetName; + const partCount = parts.length; + const finalParts = parts.map((x) => { + if (typeof x === "string") { + return () => x; + } + targetName = x.targetName || targetName; + return x.binding; + }); + const binding = (scope, context) => { + let output = ""; + for (let i = 0; i < partCount; ++i) { + output += finalParts[i](scope, context); + } + return output; + }; + const directive = new HTMLBindingDirective(binding); + directive.targetName = targetName; + return directive; + } + function parseContent(context, value) { + const valueParts = value.split(_interpolationStart); + if (valueParts.length === 1) { + return null; + } + const bindingParts = []; + for (let i = 0, ii = valueParts.length; i < ii; ++i) { + const current = valueParts[i]; + const index = current.indexOf(_interpolationEnd); + let literal; + if (index === -1) { + literal = current; + } else { + const directiveIndex = parseInt(current.substring(0, index)); + bindingParts.push(context.directives[directiveIndex]); + literal = current.substring(index + interpolationEndLength); + } + if (literal !== "") { + bindingParts.push(literal); + } + } + return bindingParts; + } + function compileAttributes(context, node, includeBasicValues = false) { + const attributes = node.attributes; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const attr2 = attributes[i]; + const attrValue = attr2.value; + const parseResult = parseContent(context, attrValue); + let result = null; + if (parseResult === null) { + if (includeBasicValues) { + result = new HTMLBindingDirective(() => attrValue); + result.targetName = attr2.name; + } + } else { + result = createAggregateBinding(parseResult); + } + if (result !== null) { + node.removeAttributeNode(attr2); + i--; + ii--; + context.addFactory(result); + } + } + } + function compileContent(context, node, walker) { + const parseResult = parseContent(context, node.textContent); + if (parseResult !== null) { + let lastNode = node; + for (let i = 0, ii = parseResult.length; i < ii; ++i) { + const currentPart = parseResult[i]; + const currentNode = i === 0 ? node : lastNode.parentNode.insertBefore(document.createTextNode(""), lastNode.nextSibling); + if (typeof currentPart === "string") { + currentNode.textContent = currentPart; + } else { + currentNode.textContent = " "; + context.captureContentBinding(currentPart); + } + lastNode = currentNode; + context.targetIndex++; + if (currentNode !== node) { + walker.nextNode(); + } + } + context.targetIndex--; + } + } + function compileTemplate(template, directives) { + const fragment = template.content; + document.adoptNode(fragment); + const context = CompilationContext.borrow(directives); + compileAttributes(context, template, true); + const hostBehaviorFactories = context.behaviorFactories; + context.reset(); + const walker = DOM.createTemplateWalker(fragment); + let node; + while (node = walker.nextNode()) { + context.targetIndex++; + switch (node.nodeType) { + case 1: + compileAttributes(context, node); + break; + case 3: + compileContent(context, node, walker); + break; + case 8: + if (DOM.isMarker(node)) { + context.addFactory(directives[DOM.extractDirectiveIndexFromMarker(node)]); + } + } + } + let targetOffset = 0; + if ( + // If the first node in a fragment is a marker, that means it's an unstable first node, + // because something like a when, repeat, etc. could add nodes before the marker. + // To mitigate this, we insert a stable first node. However, if we insert a node, + // that will alter the result of the TreeWalker. So, we also need to offset the target index. + DOM.isMarker(fragment.firstChild) || // Or if there is only one node and a directive, it means the template's content + // is *only* the directive. In that case, HTMLView.dispose() misses any nodes inserted by + // the directive. Inserting a new node ensures proper disposal of nodes added by the directive. + fragment.childNodes.length === 1 && directives.length + ) { + fragment.insertBefore(document.createComment(""), fragment.firstChild); + targetOffset = -1; + } + const viewBehaviorFactories = context.behaviorFactories; + context.release(); + return { + fragment, + viewBehaviorFactories, + hostBehaviorFactories, + targetOffset + }; + } + var sharedContext, CompilationContext, interpolationEndLength; + var init_compiler = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/compiler.js"() { + init_dom(); + init_binding(); + sharedContext = null; + CompilationContext = class _CompilationContext { + addFactory(factory) { + factory.targetIndex = this.targetIndex; + this.behaviorFactories.push(factory); + } + captureContentBinding(directive) { + directive.targetAtContent(); + this.addFactory(directive); + } + reset() { + this.behaviorFactories = []; + this.targetIndex = -1; + } + release() { + sharedContext = this; + } + static borrow(directives) { + const shareable = sharedContext || new _CompilationContext(); + shareable.directives = directives; + shareable.reset(); + sharedContext = null; + return shareable; + } + }; + interpolationEndLength = _interpolationEnd.length; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/view.js + var range, HTMLView; + var init_view = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/view.js"() { + range = document.createRange(); + HTMLView = class { + /** + * Constructs an instance of HTMLView. + * @param fragment - The html fragment that contains the nodes for this view. + * @param behaviors - The behaviors to be applied to this view. + */ + constructor(fragment, behaviors) { + this.fragment = fragment; + this.behaviors = behaviors; + this.source = null; + this.context = null; + this.firstChild = fragment.firstChild; + this.lastChild = fragment.lastChild; + } + /** + * Appends the view's DOM nodes to the referenced node. + * @param node - The parent node to append the view's DOM nodes to. + */ + appendTo(node) { + node.appendChild(this.fragment); + } + /** + * Inserts the view's DOM nodes before the referenced node. + * @param node - The node to insert the view's DOM before. + */ + insertBefore(node) { + if (this.fragment.hasChildNodes()) { + node.parentNode.insertBefore(this.fragment, node); + } else { + const end = this.lastChild; + if (node.previousSibling === end) + return; + const parentNode = node.parentNode; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parentNode.insertBefore(current, node); + current = next; + } + parentNode.insertBefore(end, node); + } + } + /** + * Removes the view's DOM nodes. + * The nodes are not disposed and the view can later be re-inserted. + */ + remove() { + const fragment = this.fragment; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + fragment.appendChild(current); + current = next; + } + fragment.appendChild(end); + } + /** + * Removes the view and unbinds its behaviors, disposing of DOM nodes afterward. + * Once a view has been disposed, it cannot be inserted or bound again. + */ + dispose() { + const parent = this.firstChild.parentNode; + const end = this.lastChild; + let current = this.firstChild; + let next; + while (current !== end) { + next = current.nextSibling; + parent.removeChild(current); + current = next; + } + parent.removeChild(end); + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + } + /** + * Binds a view's behaviors to its binding source. + * @param source - The binding source for the view's binding behaviors. + * @param context - The execution context to run the behaviors within. + */ + bind(source, context) { + const behaviors = this.behaviors; + if (this.source === source) { + return; + } else if (this.source !== null) { + const oldSource = this.source; + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + const current = behaviors[i]; + current.unbind(oldSource); + current.bind(source, context); + } + } else { + this.source = source; + this.context = context; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].bind(source, context); + } + } + } + /** + * Unbinds a view's behaviors from its binding source. + */ + unbind() { + if (this.source === null) { + return; + } + const behaviors = this.behaviors; + const oldSource = this.source; + for (let i = 0, ii = behaviors.length; i < ii; ++i) { + behaviors[i].unbind(oldSource); + } + this.source = null; + } + /** + * Efficiently disposes of a contiguous range of synthetic view instances. + * @param views - A contiguous range of views to be disposed. + */ + static disposeContiguousBatch(views) { + if (views.length === 0) { + return; + } + range.setStartBefore(views[0].firstChild); + range.setEndAfter(views[views.length - 1].lastChild); + range.deleteContents(); + for (let i = 0, ii = views.length; i < ii; ++i) { + const view = views[i]; + const behaviors = view.behaviors; + const oldSource = view.source; + for (let j = 0, jj = behaviors.length; j < jj; ++j) { + behaviors[j].unbind(oldSource); + } + } + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/template.js + function html(strings, ...values) { + const directives = []; + let html2 = ""; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + const currentString = strings[i]; + let value = values[i]; + html2 += currentString; + if (value instanceof ViewTemplate) { + const template = value; + value = () => template; + } + if (typeof value === "function") { + value = new HTMLBindingDirective(value); + } + if (value instanceof TargetedHTMLDirective) { + const match = lastAttributeNameRegex.exec(currentString); + if (match !== null) { + value.targetName = match[2]; + } + } + if (value instanceof HTMLDirective) { + html2 += value.createPlaceholder(directives.length); + directives.push(value); + } else { + html2 += value; + } + } + html2 += strings[strings.length - 1]; + return new ViewTemplate(html2, directives); + } + var ViewTemplate, lastAttributeNameRegex; + var init_template = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/template.js"() { + init_dom(); + init_observable(); + init_compiler(); + init_view(); + init_html_directive(); + init_binding(); + ViewTemplate = class { + /** + * Creates an instance of ViewTemplate. + * @param html - The html representing what this template will instantiate, including placeholders for directives. + * @param directives - The directives that will be connected to placeholders in the html. + */ + constructor(html2, directives) { + this.behaviorCount = 0; + this.hasHostBehaviors = false; + this.fragment = null; + this.targetOffset = 0; + this.viewBehaviorFactories = null; + this.hostBehaviorFactories = null; + this.html = html2; + this.directives = directives; + } + /** + * Creates an HTMLView instance based on this template definition. + * @param hostBindingTarget - The element that host behaviors will be bound to. + */ + create(hostBindingTarget) { + if (this.fragment === null) { + let template; + const html2 = this.html; + if (typeof html2 === "string") { + template = document.createElement("template"); + template.innerHTML = DOM.createHTML(html2); + const fec = template.content.firstElementChild; + if (fec !== null && fec.tagName === "TEMPLATE") { + template = fec; + } + } else { + template = html2; + } + const result = compileTemplate(template, this.directives); + this.fragment = result.fragment; + this.viewBehaviorFactories = result.viewBehaviorFactories; + this.hostBehaviorFactories = result.hostBehaviorFactories; + this.targetOffset = result.targetOffset; + this.behaviorCount = this.viewBehaviorFactories.length + this.hostBehaviorFactories.length; + this.hasHostBehaviors = this.hostBehaviorFactories.length > 0; + } + const fragment = this.fragment.cloneNode(true); + const viewFactories = this.viewBehaviorFactories; + const behaviors = new Array(this.behaviorCount); + const walker = DOM.createTemplateWalker(fragment); + let behaviorIndex = 0; + let targetIndex = this.targetOffset; + let node = walker.nextNode(); + for (let ii = viewFactories.length; behaviorIndex < ii; ++behaviorIndex) { + const factory = viewFactories[behaviorIndex]; + const factoryIndex = factory.targetIndex; + while (node !== null) { + if (targetIndex === factoryIndex) { + behaviors[behaviorIndex] = factory.createBehavior(node); + break; + } else { + node = walker.nextNode(); + targetIndex++; + } + } + } + if (this.hasHostBehaviors) { + const hostFactories = this.hostBehaviorFactories; + for (let i = 0, ii = hostFactories.length; i < ii; ++i, ++behaviorIndex) { + behaviors[behaviorIndex] = hostFactories[i].createBehavior(hostBindingTarget); + } + } + return new HTMLView(fragment, behaviors); + } + /** + * Creates an HTMLView from this template, binds it to the source, and then appends it to the host. + * @param source - The data source to bind the template to. + * @param host - The Element where the template will be rendered. + * @param hostBindingTarget - An HTML element to target the host bindings at if different from the + * host that the template is being attached to. + */ + render(source, host, hostBindingTarget) { + if (typeof host === "string") { + host = document.getElementById(host); + } + if (hostBindingTarget === void 0) { + hostBindingTarget = host; + } + const view = this.create(hostBindingTarget); + view.bind(source, defaultExecutionContext); + view.appendTo(host); + return view; + } + }; + lastAttributeNameRegex = /* eslint-disable-next-line no-control-regex */ + /([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js + function reduceStyles(styles) { + return styles.map((x) => x instanceof ElementStyles ? reduceStyles(x.styles) : [x]).reduce((prev, curr) => prev.concat(curr), []); + } + function reduceBehaviors(styles) { + return styles.map((x) => x instanceof ElementStyles ? x.behaviors : null).reduce((prev, curr) => { + if (curr === null) { + return prev; + } + if (prev === null) { + prev = []; + } + return prev.concat(curr); + }, null); + } + function separateSheetsToPrepend(sheets) { + const prepend = []; + const append = []; + sheets.forEach((x) => (x[prependToAdoptedStyleSheetsSymbol] ? prepend : append).push(x)); + return { prepend, append }; + } + function getNextStyleClass() { + return `fast-style-class-${++styleClassId}`; + } + var ElementStyles, prependToAdoptedStyleSheetsSymbol, addAdoptedStyleSheets, removeAdoptedStyleSheets, AdoptedStyleSheetsStyles, styleClassId, StyleElementStyles; + var init_element_styles = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/element-styles.js"() { + init_dom(); + ElementStyles = class { + constructor() { + this.targets = /* @__PURE__ */ new WeakSet(); + } + /** @internal */ + addStylesTo(target) { + this.targets.add(target); + } + /** @internal */ + removeStylesFrom(target) { + this.targets.delete(target); + } + /** @internal */ + isAttachedTo(target) { + return this.targets.has(target); + } + /** + * Associates behaviors with this set of styles. + * @param behaviors - The behaviors to associate. + */ + withBehaviors(...behaviors) { + this.behaviors = this.behaviors === null ? behaviors : this.behaviors.concat(behaviors); + return this; + } + }; + ElementStyles.create = (() => { + if (DOM.supportsAdoptedStyleSheets) { + const styleSheetCache = /* @__PURE__ */ new Map(); + return (styles) => ( + // eslint-disable-next-line @typescript-eslint/no-use-before-define + new AdoptedStyleSheetsStyles(styles, styleSheetCache) + ); + } + return (styles) => new StyleElementStyles(styles); + })(); + prependToAdoptedStyleSheetsSymbol = /* @__PURE__ */ Symbol("prependToAdoptedStyleSheets"); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets = [...prepend, ...target.adoptedStyleSheets, ...append]; + }; + removeAdoptedStyleSheets = (target, sheets) => { + target.adoptedStyleSheets = target.adoptedStyleSheets.filter((x) => sheets.indexOf(x) === -1); + }; + if (DOM.supportsAdoptedStyleSheets) { + try { + document.adoptedStyleSheets.push(); + document.adoptedStyleSheets.splice(); + addAdoptedStyleSheets = (target, sheets) => { + const { prepend, append } = separateSheetsToPrepend(sheets); + target.adoptedStyleSheets.splice(0, 0, ...prepend); + target.adoptedStyleSheets.push(...append); + }; + removeAdoptedStyleSheets = (target, sheets) => { + for (const sheet of sheets) { + const index = target.adoptedStyleSheets.indexOf(sheet); + if (index !== -1) { + target.adoptedStyleSheets.splice(index, 1); + } + } + }; + } catch (e) { + } + } + AdoptedStyleSheetsStyles = class extends ElementStyles { + constructor(styles, styleSheetCache) { + super(); + this.styles = styles; + this.styleSheetCache = styleSheetCache; + this._styleSheets = void 0; + this.behaviors = reduceBehaviors(styles); + } + get styleSheets() { + if (this._styleSheets === void 0) { + const styles = this.styles; + const styleSheetCache = this.styleSheetCache; + this._styleSheets = reduceStyles(styles).map((x) => { + if (x instanceof CSSStyleSheet) { + return x; + } + let sheet = styleSheetCache.get(x); + if (sheet === void 0) { + sheet = new CSSStyleSheet(); + sheet.replaceSync(x); + styleSheetCache.set(x, sheet); + } + return sheet; + }); + } + return this._styleSheets; + } + addStylesTo(target) { + addAdoptedStyleSheets(target, this.styleSheets); + super.addStylesTo(target); + } + removeStylesFrom(target) { + removeAdoptedStyleSheets(target, this.styleSheets); + super.removeStylesFrom(target); + } + }; + styleClassId = 0; + StyleElementStyles = class extends ElementStyles { + constructor(styles) { + super(); + this.styles = styles; + this.behaviors = null; + this.behaviors = reduceBehaviors(styles); + this.styleSheets = reduceStyles(styles); + this.styleClass = getNextStyleClass(); + } + addStylesTo(target) { + const styleSheets = this.styleSheets; + const styleClass = this.styleClass; + target = this.normalizeTarget(target); + for (let i = 0; i < styleSheets.length; i++) { + const element = document.createElement("style"); + element.innerHTML = styleSheets[i]; + element.className = styleClass; + target.append(element); + } + super.addStylesTo(target); + } + removeStylesFrom(target) { + target = this.normalizeTarget(target); + const styles = target.querySelectorAll(`.${this.styleClass}`); + for (let i = 0, ii = styles.length; i < ii; ++i) { + target.removeChild(styles[i]); + } + super.removeStylesFrom(target); + } + isAttachedTo(target) { + return super.isAttachedTo(this.normalizeTarget(target)); + } + normalizeTarget(target) { + return target === document ? document.body : target; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/attributes.js + function attr(configOrTarget, prop) { + let config; + function decorator($target, $prop) { + if (arguments.length > 1) { + config.property = $prop; + } + AttributeConfiguration.locate($target.constructor).push(config); + } + if (arguments.length > 1) { + config = {}; + decorator(configOrTarget, prop); + return; + } + config = configOrTarget === void 0 ? {} : configOrTarget; + return decorator; + } + var AttributeConfiguration, booleanConverter, nullableNumberConverter, AttributeDefinition; + var init_attributes = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/attributes.js"() { + init_observable(); + init_dom(); + init_platform(); + AttributeConfiguration = Object.freeze({ + /** + * Locates all attribute configurations associated with a type. + */ + locate: createMetadataLocator() + }); + booleanConverter = { + toView(value) { + return value ? "true" : "false"; + }, + fromView(value) { + if (value === null || value === void 0 || value === "false" || value === false || value === 0) { + return false; + } + return true; + } + }; + nullableNumberConverter = { + toView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number.toString(); + }, + fromView(value) { + if (value === null || value === void 0) { + return null; + } + const number = value * 1; + return isNaN(number) ? null : number; + } + }; + AttributeDefinition = class _AttributeDefinition { + /** + * Creates an instance of AttributeDefinition. + * @param Owner - The class constructor that owns this attribute. + * @param name - The name of the property associated with the attribute. + * @param attribute - The name of the attribute in HTML. + * @param mode - The {@link AttributeMode} that describes the behavior of this attribute. + * @param converter - A {@link ValueConverter} that integrates with the property getter/setter + * to convert values to and from a DOM string. + */ + constructor(Owner, name, attribute = name.toLowerCase(), mode = "reflect", converter) { + this.guards = /* @__PURE__ */ new Set(); + this.Owner = Owner; + this.name = name; + this.attribute = attribute; + this.mode = mode; + this.converter = converter; + this.fieldName = `_${name}`; + this.callbackName = `${name}Changed`; + this.hasCallback = this.callbackName in Owner.prototype; + if (mode === "boolean" && converter === void 0) { + this.converter = booleanConverter; + } + } + /** + * Sets the value of the attribute/property on the source element. + * @param source - The source element to access. + * @param value - The value to set the attribute/property to. + */ + setValue(source, newValue) { + const oldValue = source[this.fieldName]; + const converter = this.converter; + if (converter !== void 0) { + newValue = converter.fromView(newValue); + } + if (oldValue !== newValue) { + source[this.fieldName] = newValue; + this.tryReflectToAttribute(source); + if (this.hasCallback) { + source[this.callbackName](oldValue, newValue); + } + source.$fastController.notify(this.name); + } + } + /** + * Gets the value of the attribute/property on the source element. + * @param source - The source element to access. + */ + getValue(source) { + Observable.track(source, this.name); + return source[this.fieldName]; + } + /** @internal */ + onAttributeChangedCallback(element, value) { + if (this.guards.has(element)) { + return; + } + this.guards.add(element); + this.setValue(element, value); + this.guards.delete(element); + } + tryReflectToAttribute(element) { + const mode = this.mode; + const guards = this.guards; + if (guards.has(element) || mode === "fromView") { + return; + } + DOM.queueUpdate(() => { + guards.add(element); + const latestValue = element[this.fieldName]; + switch (mode) { + case "reflect": + const converter = this.converter; + DOM.setAttribute(element, this.attribute, converter !== void 0 ? converter.toView(latestValue) : latestValue); + break; + case "boolean": + DOM.setBooleanAttribute(element, this.attribute, latestValue); + break; + } + guards.delete(element); + }); + } + /** + * Collects all attribute definitions associated with the owner. + * @param Owner - The class constructor to collect attribute for. + * @param attributeLists - Any existing attributes to collect and merge with those associated with the owner. + * @internal + */ + static collect(Owner, ...attributeLists) { + const attributes = []; + attributeLists.push(AttributeConfiguration.locate(Owner)); + for (let i = 0, ii = attributeLists.length; i < ii; ++i) { + const list = attributeLists[i]; + if (list === void 0) { + continue; + } + for (let j = 0, jj = list.length; j < jj; ++j) { + const config = list[j]; + if (typeof config === "string") { + attributes.push(new _AttributeDefinition(Owner, config)); + } else { + attributes.push(new _AttributeDefinition(Owner, config.property, config.attribute, config.mode, config.converter)); + } + } + } + return attributes; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js + var defaultShadowOptions, defaultElementOptions, fastRegistry, FASTElementDefinition; + var init_fast_definitions = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-definitions.js"() { + init_platform(); + init_observable(); + init_element_styles(); + init_attributes(); + defaultShadowOptions = { mode: "open" }; + defaultElementOptions = {}; + fastRegistry = FAST.getById(4, () => { + const typeToDefinition = /* @__PURE__ */ new Map(); + return Object.freeze({ + register(definition) { + if (typeToDefinition.has(definition.type)) { + return false; + } + typeToDefinition.set(definition.type, definition); + return true; + }, + getByType(key) { + return typeToDefinition.get(key); + } + }); + }); + FASTElementDefinition = class { + /** + * Creates an instance of FASTElementDefinition. + * @param type - The type this definition is being created for. + * @param nameOrConfig - The name of the element to define or a config object + * that describes the element to define. + */ + constructor(type, nameOrConfig = type.definition) { + if (typeof nameOrConfig === "string") { + nameOrConfig = { name: nameOrConfig }; + } + this.type = type; + this.name = nameOrConfig.name; + this.template = nameOrConfig.template; + const attributes = AttributeDefinition.collect(type, nameOrConfig.attributes); + const observedAttributes = new Array(attributes.length); + const propertyLookup = {}; + const attributeLookup = {}; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + const current = attributes[i]; + observedAttributes[i] = current.attribute; + propertyLookup[current.name] = current; + attributeLookup[current.attribute] = current; + } + this.attributes = attributes; + this.observedAttributes = observedAttributes; + this.propertyLookup = propertyLookup; + this.attributeLookup = attributeLookup; + this.shadowOptions = nameOrConfig.shadowOptions === void 0 ? defaultShadowOptions : nameOrConfig.shadowOptions === null ? void 0 : Object.assign(Object.assign({}, defaultShadowOptions), nameOrConfig.shadowOptions); + this.elementOptions = nameOrConfig.elementOptions === void 0 ? defaultElementOptions : Object.assign(Object.assign({}, defaultElementOptions), nameOrConfig.elementOptions); + this.styles = nameOrConfig.styles === void 0 ? void 0 : Array.isArray(nameOrConfig.styles) ? ElementStyles.create(nameOrConfig.styles) : nameOrConfig.styles instanceof ElementStyles ? nameOrConfig.styles : ElementStyles.create([nameOrConfig.styles]); + } + /** + * Indicates if this element has been defined in at least one registry. + */ + get isDefined() { + return !!fastRegistry.getByType(this.type); + } + /** + * Defines a custom element based on this definition. + * @param registry - The element registry to define the element in. + */ + define(registry = customElements) { + const type = this.type; + if (fastRegistry.register(this)) { + const attributes = this.attributes; + const proto = type.prototype; + for (let i = 0, ii = attributes.length; i < ii; ++i) { + Observable.defineProperty(proto, attributes[i]); + } + Reflect.defineProperty(type, "observedAttributes", { + value: this.observedAttributes, + enumerable: true + }); + } + if (!registry.get(this.name)) { + registry.define(this.name, type, this.elementOptions); + } + return this; + } + }; + FASTElementDefinition.forType = fastRegistry.getByType; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/controller.js + function getShadowRoot(element) { + return element.shadowRoot || shadowRoots.get(element) || null; + } + var shadowRoots, defaultEventOptions, Controller; + var init_controller = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/controller.js"() { + init_dom(); + init_notifier(); + init_observable(); + init_fast_definitions(); + shadowRoots = /* @__PURE__ */ new WeakMap(); + defaultEventOptions = { + bubbles: true, + composed: true, + cancelable: true + }; + Controller = class _Controller extends PropertyChangeNotifier { + /** + * Creates a Controller to control the specified element. + * @param element - The element to be controlled by this controller. + * @param definition - The element definition metadata that instructs this + * controller in how to handle rendering and other platform integrations. + * @internal + */ + constructor(element, definition) { + super(element); + this.boundObservables = null; + this.behaviors = null; + this.needsInitialization = true; + this._template = null; + this._styles = null; + this._isConnected = false; + this.$fastController = this; + this.view = null; + this.element = element; + this.definition = definition; + const shadowOptions = definition.shadowOptions; + if (shadowOptions !== void 0) { + const shadowRoot = element.attachShadow(shadowOptions); + if (shadowOptions.mode === "closed") { + shadowRoots.set(element, shadowRoot); + } + } + const accessors = Observable.getAccessors(element); + if (accessors.length > 0) { + const boundObservables = this.boundObservables = /* @__PURE__ */ Object.create(null); + for (let i = 0, ii = accessors.length; i < ii; ++i) { + const propertyName = accessors[i].name; + const value = element[propertyName]; + if (value !== void 0) { + delete element[propertyName]; + boundObservables[propertyName] = value; + } + } + } + } + /** + * Indicates whether or not the custom element has been + * connected to the document. + */ + get isConnected() { + Observable.track(this, "isConnected"); + return this._isConnected; + } + setIsConnected(value) { + this._isConnected = value; + Observable.notify(this, "isConnected"); + } + /** + * Gets/sets the template used to render the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get template() { + return this._template; + } + set template(value) { + if (this._template === value) { + return; + } + this._template = value; + if (!this.needsInitialization) { + this.renderTemplate(value); + } + } + /** + * Gets/sets the primary styles used for the component. + * @remarks + * This value can only be accurately read after connect but can be set at any time. + */ + get styles() { + return this._styles; + } + set styles(value) { + if (this._styles === value) { + return; + } + if (this._styles !== null) { + this.removeStyles(this._styles); + } + this._styles = value; + if (!this.needsInitialization && value !== null) { + this.addStyles(value); + } + } + /** + * Adds styles to this element. Providing an HTMLStyleElement will attach the element instance to the shadowRoot. + * @param styles - The styles to add. + */ + addStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.append(styles); + } else if (!styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.addStylesTo(target); + if (sourceBehaviors !== null) { + this.addBehaviors(sourceBehaviors); + } + } + } + /** + * Removes styles from this element. Providing an HTMLStyleElement will detach the element instance from the shadowRoot. + * @param styles - the styles to remove. + */ + removeStyles(styles) { + const target = getShadowRoot(this.element) || this.element.getRootNode(); + if (styles instanceof HTMLStyleElement) { + target.removeChild(styles); + } else if (styles.isAttachedTo(target)) { + const sourceBehaviors = styles.behaviors; + styles.removeStylesFrom(target); + if (sourceBehaviors !== null) { + this.removeBehaviors(sourceBehaviors); + } + } + } + /** + * Adds behaviors to this element. + * @param behaviors - The behaviors to add. + */ + addBehaviors(behaviors) { + const targetBehaviors = this.behaviors || (this.behaviors = /* @__PURE__ */ new Map()); + const length = behaviors.length; + const behaviorsToBind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + targetBehaviors.set(behavior, targetBehaviors.get(behavior) + 1); + } else { + targetBehaviors.set(behavior, 1); + behaviorsToBind.push(behavior); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToBind.length; ++i) { + behaviorsToBind[i].bind(element, defaultExecutionContext); + } + } + } + /** + * Removes behaviors from this element. + * @param behaviors - The behaviors to remove. + * @param force - Forces unbinding of behaviors. + */ + removeBehaviors(behaviors, force = false) { + const targetBehaviors = this.behaviors; + if (targetBehaviors === null) { + return; + } + const length = behaviors.length; + const behaviorsToUnbind = []; + for (let i = 0; i < length; ++i) { + const behavior = behaviors[i]; + if (targetBehaviors.has(behavior)) { + const count = targetBehaviors.get(behavior) - 1; + count === 0 || force ? targetBehaviors.delete(behavior) && behaviorsToUnbind.push(behavior) : targetBehaviors.set(behavior, count); + } + } + if (this._isConnected) { + const element = this.element; + for (let i = 0; i < behaviorsToUnbind.length; ++i) { + behaviorsToUnbind[i].unbind(element); + } + } + } + /** + * Runs connected lifecycle behavior on the associated element. + */ + onConnectedCallback() { + if (this._isConnected) { + return; + } + const element = this.element; + if (this.needsInitialization) { + this.finishInitialization(); + } else if (this.view !== null) { + this.view.bind(element, defaultExecutionContext); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + for (const [behavior] of behaviors) { + behavior.bind(element, defaultExecutionContext); + } + } + this.setIsConnected(true); + } + /** + * Runs disconnected lifecycle behavior on the associated element. + */ + onDisconnectedCallback() { + if (!this._isConnected) { + return; + } + this.setIsConnected(false); + const view = this.view; + if (view !== null) { + view.unbind(); + } + const behaviors = this.behaviors; + if (behaviors !== null) { + const element = this.element; + for (const [behavior] of behaviors) { + behavior.unbind(element); + } + } + } + /** + * Runs the attribute changed callback for the associated element. + * @param name - The name of the attribute that changed. + * @param oldValue - The previous value of the attribute. + * @param newValue - The new value of the attribute. + */ + onAttributeChangedCallback(name, oldValue, newValue) { + const attrDef = this.definition.attributeLookup[name]; + if (attrDef !== void 0) { + attrDef.onAttributeChangedCallback(this.element, newValue); + } + } + /** + * Emits a custom HTML event. + * @param type - The type name of the event. + * @param detail - The event detail object to send with the event. + * @param options - The event options. By default bubbles and composed. + * @remarks + * Only emits events if connected. + */ + emit(type, detail, options) { + if (this._isConnected) { + return this.element.dispatchEvent(new CustomEvent(type, Object.assign(Object.assign({ detail }, defaultEventOptions), options))); + } + return false; + } + finishInitialization() { + const element = this.element; + const boundObservables = this.boundObservables; + if (boundObservables !== null) { + const propertyNames = Object.keys(boundObservables); + for (let i = 0, ii = propertyNames.length; i < ii; ++i) { + const propertyName = propertyNames[i]; + element[propertyName] = boundObservables[propertyName]; + } + this.boundObservables = null; + } + const definition = this.definition; + if (this._template === null) { + if (this.element.resolveTemplate) { + this._template = this.element.resolveTemplate(); + } else if (definition.template) { + this._template = definition.template || null; + } + } + if (this._template !== null) { + this.renderTemplate(this._template); + } + if (this._styles === null) { + if (this.element.resolveStyles) { + this._styles = this.element.resolveStyles(); + } else if (definition.styles) { + this._styles = definition.styles || null; + } + } + if (this._styles !== null) { + this.addStyles(this._styles); + } + this.needsInitialization = false; + } + renderTemplate(template) { + const element = this.element; + const host = getShadowRoot(element) || element; + if (this.view !== null) { + this.view.dispose(); + this.view = null; + } else if (!this.needsInitialization) { + DOM.removeChildNodes(host); + } + if (template) { + this.view = template.render(element, host, element); + } + } + /** + * Locates or creates a controller for the specified element. + * @param element - The element to return the controller for. + * @remarks + * The specified element must have a {@link FASTElementDefinition} + * registered either through the use of the {@link customElement} + * decorator or a call to `FASTElement.define`. + */ + static forCustomElement(element) { + const controller = element.$fastController; + if (controller !== void 0) { + return controller; + } + const definition = FASTElementDefinition.forType(element.constructor); + if (definition === void 0) { + throw new Error("Missing FASTElement definition."); + } + return element.$fastController = new _Controller(element, definition); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js + function createFASTElement(BaseType) { + return class extends BaseType { + constructor() { + super(); + Controller.forCustomElement(this); + } + $emit(type, detail, options) { + return this.$fastController.emit(type, detail, options); + } + connectedCallback() { + this.$fastController.onConnectedCallback(); + } + disconnectedCallback() { + this.$fastController.onDisconnectedCallback(); + } + attributeChangedCallback(name, oldValue, newValue) { + this.$fastController.onAttributeChangedCallback(name, oldValue, newValue); + } + }; + } + var FASTElement; + var init_fast_element = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/components/fast-element.js"() { + init_controller(); + init_fast_definitions(); + FASTElement = Object.assign(createFASTElement(HTMLElement), { + /** + * Creates a new FASTElement base class inherited from the + * provided base type. + * @param BaseType - The base element type to inherit from. + */ + from(BaseType) { + return createFASTElement(BaseType); + }, + /** + * Defines a platform custom element based on the provided type and definition. + * @param type - The custom element type to define. + * @param nameOrDef - The name of the element to define or a definition object + * that describes the element to define. + */ + define(type, nameOrDef) { + return new FASTElementDefinition(type, nameOrDef).define().type; + } + }); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js + var CSSDirective; + var init_css_directive = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css-directive.js"() { + CSSDirective = class { + /** + * Creates a CSS fragment to interpolate into the CSS document. + * @returns - the string to interpolate into CSS + */ + createCSS() { + return ""; + } + /** + * Creates a behavior to bind to the host element. + * @returns - the behavior to bind to the host element, or undefined. + */ + createBehavior() { + return void 0; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/styles/css.js + function collectStyles(strings, values) { + const styles = []; + let cssString = ""; + const behaviors = []; + for (let i = 0, ii = strings.length - 1; i < ii; ++i) { + cssString += strings[i]; + let value = values[i]; + if (value instanceof CSSDirective) { + const behavior = value.createBehavior(); + value = value.createCSS(); + if (behavior) { + behaviors.push(behavior); + } + } + if (value instanceof ElementStyles || value instanceof CSSStyleSheet) { + if (cssString.trim() !== "") { + styles.push(cssString); + cssString = ""; + } + styles.push(value); + } else { + cssString += value; + } + } + cssString += strings[strings.length - 1]; + if (cssString.trim() !== "") { + styles.push(cssString); + } + return { + styles, + behaviors + }; + } + function css(strings, ...values) { + const { styles, behaviors } = collectStyles(strings, values); + const elementStyles = ElementStyles.create(styles); + if (behaviors.length) { + elementStyles.withBehaviors(...behaviors); + } + return elementStyles; + } + var init_css = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/styles/css.js"() { + init_css_directive(); + init_element_styles(); + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js + function newSplice(index, removed, addedCount) { + return { + index, + removed, + addedCount + }; + } + function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) { + const rowCount = oldEnd - oldStart + 1; + const columnCount = currentEnd - currentStart + 1; + const distances = new Array(rowCount); + let north; + let west; + for (let i = 0; i < rowCount; ++i) { + distances[i] = new Array(columnCount); + distances[i][0] = i; + } + for (let j = 0; j < columnCount; ++j) { + distances[0][j] = j; + } + for (let i = 1; i < rowCount; ++i) { + for (let j = 1; j < columnCount; ++j) { + if (current[currentStart + j - 1] === old[oldStart + i - 1]) { + distances[i][j] = distances[i - 1][j - 1]; + } else { + north = distances[i - 1][j] + 1; + west = distances[i][j - 1] + 1; + distances[i][j] = north < west ? north : west; + } + } + } + return distances; + } + function spliceOperationsFromEditDistances(distances) { + let i = distances.length - 1; + let j = distances[0].length - 1; + let current = distances[i][j]; + const edits = []; + while (i > 0 || j > 0) { + if (i === 0) { + edits.push(EDIT_ADD); + j--; + continue; + } + if (j === 0) { + edits.push(EDIT_DELETE); + i--; + continue; + } + const northWest = distances[i - 1][j - 1]; + const west = distances[i - 1][j]; + const north = distances[i][j - 1]; + let min; + if (west < north) { + min = west < northWest ? west : northWest; + } else { + min = north < northWest ? north : northWest; + } + if (min === northWest) { + if (northWest === current) { + edits.push(EDIT_LEAVE); + } else { + edits.push(EDIT_UPDATE); + current = northWest; + } + i--; + j--; + } else if (min === west) { + edits.push(EDIT_DELETE); + i--; + current = west; + } else { + edits.push(EDIT_ADD); + j--; + current = north; + } + } + edits.reverse(); + return edits; + } + function sharedPrefix(current, old, searchLength) { + for (let i = 0; i < searchLength; ++i) { + if (current[i] !== old[i]) { + return i; + } + } + return searchLength; + } + function sharedSuffix(current, old, searchLength) { + let index1 = current.length; + let index2 = old.length; + let count = 0; + while (count < searchLength && current[--index1] === old[--index2]) { + count++; + } + return count; + } + function intersect(start1, end1, start2, end2) { + if (end1 < start2 || end2 < start1) { + return -1; + } + if (end1 === start2 || end2 === start1) { + return 0; + } + if (start1 < start2) { + if (end1 < end2) { + return end1 - start2; + } + return end2 - start2; + } + if (end2 < end1) { + return end2 - start1; + } + return end1 - start1; + } + function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) { + let prefixCount = 0; + let suffixCount = 0; + const minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart); + if (currentStart === 0 && oldStart === 0) { + prefixCount = sharedPrefix(current, old, minLength); + } + if (currentEnd === current.length && oldEnd === old.length) { + suffixCount = sharedSuffix(current, old, minLength - prefixCount); + } + currentStart += prefixCount; + oldStart += prefixCount; + currentEnd -= suffixCount; + oldEnd -= suffixCount; + if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) { + return emptyArray; + } + if (currentStart === currentEnd) { + const splice2 = newSplice(currentStart, [], 0); + while (oldStart < oldEnd) { + splice2.removed.push(old[oldStart++]); + } + return [splice2]; + } else if (oldStart === oldEnd) { + return [newSplice(currentStart, [], currentEnd - currentStart)]; + } + const ops = spliceOperationsFromEditDistances(calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd)); + const splices = []; + let splice = void 0; + let index = currentStart; + let oldIndex = oldStart; + for (let i = 0; i < ops.length; ++i) { + switch (ops[i]) { + case EDIT_LEAVE: + if (splice !== void 0) { + splices.push(splice); + splice = void 0; + } + index++; + oldIndex++; + break; + case EDIT_UPDATE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + case EDIT_ADD: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.addedCount++; + index++; + break; + case EDIT_DELETE: + if (splice === void 0) { + splice = newSplice(index, [], 0); + } + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + } + } + if (splice !== void 0) { + splices.push(splice); + } + return splices; + } + function mergeSplice(splices, index, removed, addedCount) { + const splice = newSplice(index, removed, addedCount); + let inserted = false; + let insertionOffset = 0; + for (let i = 0; i < splices.length; i++) { + const current = splices[i]; + current.index += insertionOffset; + if (inserted) { + continue; + } + const intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount); + if (intersectCount >= 0) { + splices.splice(i, 1); + i--; + insertionOffset -= current.addedCount - current.removed.length; + splice.addedCount += current.addedCount - intersectCount; + const deleteCount = splice.removed.length + current.removed.length - intersectCount; + if (!splice.addedCount && !deleteCount) { + inserted = true; + } else { + let currentRemoved = current.removed; + if (splice.index < current.index) { + const prepend = splice.removed.slice(0, current.index - splice.index); + $push.apply(prepend, currentRemoved); + currentRemoved = prepend; + } + if (splice.index + splice.removed.length > current.index + current.addedCount) { + const append = splice.removed.slice(current.index + current.addedCount - splice.index); + $push.apply(currentRemoved, append); + } + splice.removed = currentRemoved; + if (current.index < splice.index) { + splice.index = current.index; + } + } + } else if (splice.index < current.index) { + inserted = true; + splices.splice(i, 0, splice); + i++; + const offset = splice.addedCount - splice.removed.length; + current.index += offset; + insertionOffset += offset; + } + } + if (!inserted) { + splices.push(splice); + } + } + function createInitialSplices(changeRecords) { + const splices = []; + for (let i = 0, ii = changeRecords.length; i < ii; i++) { + const record = changeRecords[i]; + mergeSplice(splices, record.index, record.removed, record.addedCount); + } + return splices; + } + function projectArraySplices(array, changeRecords) { + let splices = []; + const initialSplices = createInitialSplices(changeRecords); + for (let i = 0, ii = initialSplices.length; i < ii; ++i) { + const splice = initialSplices[i]; + if (splice.addedCount === 1 && splice.removed.length === 1) { + if (splice.removed[0] !== array[splice.index]) { + splices.push(splice); + } + continue; + } + splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length)); + } + return splices; + } + var EDIT_LEAVE, EDIT_UPDATE, EDIT_ADD, EDIT_DELETE, $push; + var init_array_change_records = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-change-records.js"() { + init_platform(); + EDIT_LEAVE = 0; + EDIT_UPDATE = 1; + EDIT_ADD = 2; + EDIT_DELETE = 3; + $push = Array.prototype.push; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js + function adjustIndex(changeRecord, array) { + let index = changeRecord.index; + const arrayLength = array.length; + if (index > arrayLength) { + index = arrayLength - changeRecord.addedCount; + } else if (index < 0) { + index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount; + } + if (index < 0) { + index = 0; + } + changeRecord.index = index; + return changeRecord; + } + function enableArrayObservation() { + if (arrayObservationEnabled) { + return; + } + arrayObservationEnabled = true; + Observable.setArrayObserverFactory((collection) => { + return new ArrayObserver(collection); + }); + const proto = Array.prototype; + if (proto.$fastPatch) { + return; + } + Reflect.defineProperty(proto, "$fastPatch", { + value: 1, + enumerable: false + }); + const pop = proto.pop; + const push = proto.push; + const reverse = proto.reverse; + const shift = proto.shift; + const sort = proto.sort; + const splice = proto.splice; + const unshift = proto.unshift; + proto.pop = function() { + const notEmpty = this.length > 0; + const methodCallResult = pop.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(this.length, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.push = function() { + const methodCallResult = push.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(this.length - arguments.length, [], arguments.length), this)); + } + return methodCallResult; + }; + proto.reverse = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = reverse.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.shift = function() { + const notEmpty = this.length > 0; + const methodCallResult = shift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0 && notEmpty) { + o.addSplice(newSplice(0, [methodCallResult], 0)); + } + return methodCallResult; + }; + proto.sort = function() { + let oldArray; + const o = this.$fastController; + if (o !== void 0) { + o.flush(); + oldArray = this.slice(); + } + const methodCallResult = sort.apply(this, arguments); + if (o !== void 0) { + o.reset(oldArray); + } + return methodCallResult; + }; + proto.splice = function() { + const methodCallResult = splice.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(+arguments[0], methodCallResult, arguments.length > 2 ? arguments.length - 2 : 0), this)); + } + return methodCallResult; + }; + proto.unshift = function() { + const methodCallResult = unshift.apply(this, arguments); + const o = this.$fastController; + if (o !== void 0) { + o.addSplice(adjustIndex(newSplice(0, [], arguments.length), this)); + } + return methodCallResult; + }; + } + var arrayObservationEnabled, ArrayObserver; + var init_array_observer = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/observation/array-observer.js"() { + init_dom(); + init_array_change_records(); + init_notifier(); + init_observable(); + arrayObservationEnabled = false; + ArrayObserver = class extends SubscriberSet { + constructor(source) { + super(source); + this.oldCollection = void 0; + this.splices = void 0; + this.needsQueue = true; + this.call = this.flush; + Reflect.defineProperty(source, "$fastController", { + value: this, + enumerable: false + }); + } + subscribe(subscriber) { + this.flush(); + super.subscribe(subscriber); + } + addSplice(splice) { + if (this.splices === void 0) { + this.splices = [splice]; + } else { + this.splices.push(splice); + } + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + reset(oldCollection) { + this.oldCollection = oldCollection; + if (this.needsQueue) { + this.needsQueue = false; + DOM.queueUpdate(this); + } + } + flush() { + const splices = this.splices; + const oldCollection = this.oldCollection; + if (splices === void 0 && oldCollection === void 0) { + return; + } + this.needsQueue = true; + this.splices = void 0; + this.oldCollection = void 0; + const finalSplices = oldCollection === void 0 ? projectArraySplices(this.source, splices) : calcSplices(this.source, 0, this.source.length, oldCollection, 0, oldCollection.length); + this.notify(finalSplices); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/ref.js + function ref(propertyName) { + return new AttachedBehaviorHTMLDirective("fast-ref", RefBehavior, propertyName); + } + var RefBehavior; + var init_ref = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/ref.js"() { + init_html_directive(); + RefBehavior = class { + /** + * Creates an instance of RefBehavior. + * @param target - The element to reference. + * @param propertyName - The name of the property to assign the reference to. + */ + constructor(target, propertyName) { + this.target = target; + this.propertyName = propertyName; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + source[this.propertyName] = this.target; + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + /* eslint-disable-next-line @typescript-eslint/no-empty-function */ + unbind() { + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/interfaces.js + var isFunction; + var init_interfaces = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/interfaces.js"() { + isFunction = (object) => typeof object === "function"; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/when.js + function normalizeBinding(value) { + return value === void 0 ? noTemplate : isFunction(value) ? value : () => value; + } + function when(binding, templateOrTemplateBinding, elseTemplateOrTemplateBinding) { + const dataBinding = isFunction(binding) ? binding : () => binding; + const templateBinding = normalizeBinding(templateOrTemplateBinding); + const elseBinding = normalizeBinding(elseTemplateOrTemplateBinding); + return (source, context) => dataBinding(source, context) ? templateBinding(source, context) : elseBinding(source, context); + } + var noTemplate; + var init_when = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/when.js"() { + init_interfaces(); + noTemplate = () => null; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js + function bindWithoutPositioning(view, items, index, context) { + view.bind(items[index], context); + } + function bindWithPositioning(view, items, index, context) { + const childContext = Object.create(context); + childContext.index = index; + childContext.length = items.length; + view.bind(items[index], childContext); + } + var defaultRepeatOptions, RepeatBehavior, RepeatDirective; + var init_repeat = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/repeat.js"() { + init_dom(); + init_observable(); + init_array_observer(); + init_platform(); + init_html_directive(); + init_view(); + defaultRepeatOptions = Object.freeze({ + positioning: false, + recycle: true + }); + RepeatBehavior = class { + /** + * Creates an instance of RepeatBehavior. + * @param location - The location in the DOM to render the repeat. + * @param itemsBinding - The array to render. + * @param isItemsBindingVolatile - Indicates whether the items binding has volatile dependencies. + * @param templateBinding - The template to render for each item. + * @param isTemplateBindingVolatile - Indicates whether the template binding has volatile dependencies. + * @param options - Options used to turn on special repeat features. + */ + constructor(location, itemsBinding, isItemsBindingVolatile, templateBinding, isTemplateBindingVolatile, options) { + this.location = location; + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.source = null; + this.views = []; + this.items = null; + this.itemsObserver = null; + this.originalContext = void 0; + this.childContext = void 0; + this.bindView = bindWithoutPositioning; + this.itemsBindingObserver = Observable.binding(itemsBinding, this, isItemsBindingVolatile); + this.templateBindingObserver = Observable.binding(templateBinding, this, isTemplateBindingVolatile); + if (options.positioning) { + this.bindView = bindWithPositioning; + } + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source, context) { + this.source = source; + this.originalContext = context; + this.childContext = Object.create(context); + this.childContext.parent = source; + this.childContext.parentContext = this.originalContext; + this.items = this.itemsBindingObserver.observe(source, this.originalContext); + this.template = this.templateBindingObserver.observe(source, this.originalContext); + this.observeItems(true); + this.refreshAllViews(); + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.source = null; + this.items = null; + if (this.itemsObserver !== null) { + this.itemsObserver.unsubscribe(this); + } + this.unbindAllViews(); + this.itemsBindingObserver.disconnect(); + this.templateBindingObserver.disconnect(); + } + /** @internal */ + handleChange(source, args) { + if (source === this.itemsBinding) { + this.items = this.itemsBindingObserver.observe(this.source, this.originalContext); + this.observeItems(); + this.refreshAllViews(); + } else if (source === this.templateBinding) { + this.template = this.templateBindingObserver.observe(this.source, this.originalContext); + this.refreshAllViews(true); + } else { + this.updateViews(args); + } + } + observeItems(force = false) { + if (!this.items) { + this.items = emptyArray; + return; + } + const oldObserver = this.itemsObserver; + const newObserver = this.itemsObserver = Observable.getNotifier(this.items); + const hasNewObserver = oldObserver !== newObserver; + if (hasNewObserver && oldObserver !== null) { + oldObserver.unsubscribe(this); + } + if (hasNewObserver || force) { + newObserver.subscribe(this); + } + } + updateViews(splices) { + const childContext = this.childContext; + const views = this.views; + const bindView = this.bindView; + const items = this.items; + const template = this.template; + const recycle = this.options.recycle; + const leftoverViews = []; + let leftoverIndex = 0; + let availableViews = 0; + for (let i = 0, ii = splices.length; i < ii; ++i) { + const splice = splices[i]; + const removed = splice.removed; + let removeIndex = 0; + let addIndex = splice.index; + const end = addIndex + splice.addedCount; + const removedViews = views.splice(splice.index, removed.length); + const totalAvailableViews = availableViews = leftoverViews.length + removedViews.length; + for (; addIndex < end; ++addIndex) { + const neighbor = views[addIndex]; + const location = neighbor ? neighbor.firstChild : this.location; + let view; + if (recycle && availableViews > 0) { + if (removeIndex <= totalAvailableViews && removedViews.length > 0) { + view = removedViews[removeIndex]; + removeIndex++; + } else { + view = leftoverViews[leftoverIndex]; + leftoverIndex++; + } + availableViews--; + } else { + view = template.create(); + } + views.splice(addIndex, 0, view); + bindView(view, items, addIndex, childContext); + view.insertBefore(location); + } + if (removedViews[removeIndex]) { + leftoverViews.push(...removedViews.slice(removeIndex)); + } + } + for (let i = leftoverIndex, ii = leftoverViews.length; i < ii; ++i) { + leftoverViews[i].dispose(); + } + if (this.options.positioning) { + for (let i = 0, ii = views.length; i < ii; ++i) { + const currentContext = views[i].context; + currentContext.length = ii; + currentContext.index = i; + } + } + } + refreshAllViews(templateChanged = false) { + const items = this.items; + const childContext = this.childContext; + const template = this.template; + const location = this.location; + const bindView = this.bindView; + let itemsLength = items.length; + let views = this.views; + let viewsLength = views.length; + if (itemsLength === 0 || templateChanged || !this.options.recycle) { + HTMLView.disposeContiguousBatch(views); + viewsLength = 0; + } + if (viewsLength === 0) { + this.views = views = new Array(itemsLength); + for (let i = 0; i < itemsLength; ++i) { + const view = template.create(); + bindView(view, items, i, childContext); + views[i] = view; + view.insertBefore(location); + } + } else { + let i = 0; + for (; i < itemsLength; ++i) { + if (i < viewsLength) { + const view = views[i]; + bindView(view, items, i, childContext); + } else { + const view = template.create(); + bindView(view, items, i, childContext); + views.push(view); + view.insertBefore(location); + } + } + const removed = views.splice(i, viewsLength - i); + for (i = 0, itemsLength = removed.length; i < itemsLength; ++i) { + removed[i].dispose(); + } + } + } + unbindAllViews() { + const views = this.views; + for (let i = 0, ii = views.length; i < ii; ++i) { + views[i].unbind(); + } + } + }; + RepeatDirective = class extends HTMLDirective { + /** + * Creates an instance of RepeatDirective. + * @param itemsBinding - The binding that provides the array to render. + * @param templateBinding - The template binding used to obtain a template to render for each item in the array. + * @param options - Options used to turn on special repeat features. + */ + constructor(itemsBinding, templateBinding, options) { + super(); + this.itemsBinding = itemsBinding; + this.templateBinding = templateBinding; + this.options = options; + this.createPlaceholder = DOM.createBlockPlaceholder; + enableArrayObservation(); + this.isItemsBindingVolatile = Observable.isVolatileBinding(itemsBinding); + this.isTemplateBindingVolatile = Observable.isVolatileBinding(templateBinding); + } + /** + * Creates a behavior for the provided target node. + * @param target - The node instance to create the behavior for. + */ + createBehavior(target) { + return new RepeatBehavior(target, this.itemsBinding, this.isItemsBindingVolatile, this.templateBinding, this.isTemplateBindingVolatile, this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js + function elements(selector) { + if (selector) { + return function(value, index, array) { + return value.nodeType === 1 && value.matches(selector); + }; + } + return function(value, index, array) { + return value.nodeType === 1; + }; + } + var NodeObservationBehavior; + var init_node_observation = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/node-observation.js"() { + init_observable(); + init_platform(); + NodeObservationBehavior = class { + /** + * Creates an instance of NodeObservationBehavior. + * @param target - The target to assign the nodes property on. + * @param options - The options to use in configuring node observation. + */ + constructor(target, options) { + this.target = target; + this.options = options; + this.source = null; + } + /** + * Bind this behavior to the source. + * @param source - The source to bind to. + * @param context - The execution context that the binding is operating within. + */ + bind(source) { + const name = this.options.property; + this.shouldUpdate = Observable.getAccessors(source).some((x) => x.name === name); + this.source = source; + this.updateTarget(this.computeNodes()); + if (this.shouldUpdate) { + this.observe(); + } + } + /** + * Unbinds this behavior from the source. + * @param source - The source to unbind from. + */ + unbind() { + this.updateTarget(emptyArray); + this.source = null; + if (this.shouldUpdate) { + this.disconnect(); + } + } + /** @internal */ + handleEvent() { + this.updateTarget(this.computeNodes()); + } + computeNodes() { + let nodes = this.getNodes(); + if (this.options.filter !== void 0) { + nodes = nodes.filter(this.options.filter); + } + return nodes; + } + updateTarget(value) { + this.source[this.options.property] = value; + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js + function slotted(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { property: propertyOrOptions }; + } + return new AttachedBehaviorHTMLDirective("fast-slotted", SlottedBehavior, propertyOrOptions); + } + var SlottedBehavior; + var init_slotted = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/slotted.js"() { + init_html_directive(); + init_node_observation(); + SlottedBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of SlottedBehavior. + * @param target - The slot element target to observe. + * @param options - The options to use when observing the slot. + */ + constructor(target, options) { + super(target, options); + } + /** + * Begins observation of the nodes. + */ + observe() { + this.target.addEventListener("slotchange", this); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.target.removeEventListener("slotchange", this); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + return this.target.assignedNodes(this.options); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/templating/children.js + function children(propertyOrOptions) { + if (typeof propertyOrOptions === "string") { + propertyOrOptions = { + property: propertyOrOptions + }; + } + return new AttachedBehaviorHTMLDirective("fast-children", ChildrenBehavior, propertyOrOptions); + } + var ChildrenBehavior; + var init_children = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/templating/children.js"() { + init_html_directive(); + init_node_observation(); + ChildrenBehavior = class extends NodeObservationBehavior { + /** + * Creates an instance of ChildrenBehavior. + * @param target - The element target to observe children on. + * @param options - The options to use when observing the element children. + */ + constructor(target, options) { + super(target, options); + this.observer = null; + options.childList = true; + } + /** + * Begins observation of the nodes. + */ + observe() { + if (this.observer === null) { + this.observer = new MutationObserver(this.handleEvent.bind(this)); + } + this.observer.observe(this.target, this.options); + } + /** + * Disconnects observation of the nodes. + */ + disconnect() { + this.observer.disconnect(); + } + /** + * Retrieves the nodes that should be assigned to the target. + */ + getNodes() { + if ("subtree" in this.options) { + return Array.from(this.target.querySelectorAll(this.options.selector)); + } + return Array.from(this.target.childNodes); + } + }; + } + }); + + // node_modules/@microsoft/fast-element/dist/esm/index.js + var init_esm = __esm({ + "node_modules/@microsoft/fast-element/dist/esm/index.js"() { + init_platform(); + init_template(); + init_fast_element(); + init_fast_definitions(); + init_attributes(); + init_controller(); + init_compiler(); + init_element_styles(); + init_css(); + init_css_directive(); + init_view(); + init_observable(); + init_notifier(); + init_dom(); + init_binding(); + init_html_directive(); + init_ref(); + init_when(); + init_repeat(); + init_slotted(); + init_children(); + init_node_observation(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js + var StartEnd, endSlotTemplate, startSlotTemplate, endTemplate, startTemplate; + var init_start_end = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/start-end.js"() { + init_esm(); + StartEnd = class { + handleStartContentChange() { + this.startContainer.classList.toggle("start", this.start.assignedNodes().length > 0); + } + handleEndContentChange() { + this.endContainer.classList.toggle("end", this.end.assignedNodes().length > 0); + } + }; + endSlotTemplate = (context, definition) => html` + definition.end ? "end" : void 0} + > + + ${definition.end || ""} + + +`; + startSlotTemplate = (context, definition) => html` + + + ${definition.start || ""} + + +`; + endTemplate = html` + + + +`; + startTemplate = html` + + + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js + var init_accordion_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js + function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es6 = __esm({ + "node_modules/@microsoft/fast-foundation/node_modules/tslib/tslib.es6.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/di.js + function cloneArrayWithPossibleProps(source) { + const clone = source.slice(); + const keys = Object.keys(source); + const len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + clone[key] = source[key]; + } + } + return clone; + } + function getParamTypes(key) { + return (Type) => { + return Reflect.getOwnMetadata(key, Type); + }; + } + function createResolver(getter) { + return function(key) { + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor); + }; + return resolver; + }; + } + function createAllResolver(getter) { + return function(key, searchAncestors) { + searchAncestors = !!searchAncestors; + const resolver = function(target, property, descriptor) { + DI.inject(resolver)(target, property, descriptor); + }; + resolver.$isResolver = true; + resolver.resolve = function(handler, requestor) { + return getter(key, handler, requestor, searchAncestors); + }; + return resolver; + }; + } + function ignore(target, property, descriptor) { + DI.inject(ignore)(target, property, descriptor); + } + function createNewInstance(key, handler) { + return handler.getFactory(key).construct(handler); + } + function containerGetKey(d) { + return this.get(d); + } + function transformInstance(inst, transform) { + return transform(inst); + } + function isRegistry(obj) { + return typeof obj.register === "function"; + } + function isSelfRegistry(obj) { + return isRegistry(obj) && typeof obj.registerInRequestor === "boolean"; + } + function isRegisterInRequester(obj) { + return isSelfRegistry(obj) && obj.registerInRequestor; + } + function isClass(obj) { + return obj.prototype !== void 0; + } + function cacheCallbackResult(fun) { + return function(handler, requestor, resolver) { + if (cache.has(resolver)) { + return cache.get(resolver); + } + const t = fun(handler, requestor, resolver); + cache.set(resolver, t); + return t; + }; + } + function validateKey(key) { + if (key === null || key === void 0) { + throw new Error("key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?"); + } + } + function buildAllResponse(resolver, handler, requestor) { + if (resolver instanceof ResolverImpl && resolver.strategy === 4) { + const state = resolver.state; + let i = state.length; + const results = new Array(i); + while (i--) { + results[i] = state[i].resolve(handler, requestor); + } + return results; + } + return [resolver.resolve(handler, requestor)]; + } + function isObject(value) { + return typeof value === "object" && value !== null || typeof value === "function"; + } + function isArrayIndex(value) { + switch (typeof value) { + case "number": + return value >= 0 && (value | 0) === value; + case "string": { + const result = isNumericLookup[value]; + if (result !== void 0) { + return result; + } + const length = value.length; + if (length === 0) { + return isNumericLookup[value] = false; + } + let ch = 0; + for (let i = 0; i < length; ++i) { + ch = value.charCodeAt(i); + if (i === 0 && ch === 48 && length > 1 || ch < 48 || ch > 57) { + return isNumericLookup[value] = false; + } + } + return isNumericLookup[value] = true; + } + default: + return false; + } + } + var metadataByTarget, ResolverBuilder, DefaultResolver, ContainerConfiguration, dependencyLookup, rootDOMContainer, DI, Container, inject, defaultSingletonOptions, all, lazy, optional, newInstanceForScope, newInstanceOf, ResolverImpl, FactoryImpl, containerResolver, InstrinsicTypeNames, DILocateParentEventType, factories, ContainerImpl, cache, Registration, defaultFriendlyName, isNativeFunction, isNumericLookup; + var init_di = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/di.js"() { + init_esm(); + metadataByTarget = /* @__PURE__ */ new Map(); + if (!("metadata" in Reflect)) { + Reflect.metadata = function(key, value) { + return function(target) { + Reflect.defineMetadata(key, value, target); + }; + }; + Reflect.defineMetadata = function(key, value, target) { + let metadata = metadataByTarget.get(target); + if (metadata === void 0) { + metadataByTarget.set(target, metadata = /* @__PURE__ */ new Map()); + } + metadata.set(key, value); + }; + Reflect.getOwnMetadata = function(key, target) { + const metadata = metadataByTarget.get(target); + if (metadata !== void 0) { + return metadata.get(key); + } + return void 0; + }; + } + ResolverBuilder = class { + /** + * + * @param container - The container to create resolvers for. + * @param key - The key to register resolvers under. + */ + constructor(container, key) { + this.container = container; + this.key = key; + } + /** + * Creates a resolver for an existing object instance. + * @param value - The instance to resolve. + * @returns The resolver. + */ + instance(value) { + return this.registerResolver(0, value); + } + /** + * Creates a resolver that enforces a singleton lifetime. + * @param value - The type to create and cache the singleton for. + * @returns The resolver. + */ + singleton(value) { + return this.registerResolver(1, value); + } + /** + * Creates a resolver that creates a new instance for every dependency request. + * @param value - The type to create instances of. + * @returns - The resolver. + */ + transient(value) { + return this.registerResolver(2, value); + } + /** + * Creates a resolver that invokes a callback function for every dependency resolution + * request, allowing custom logic to return the dependency. + * @param value - The callback to call during resolution. + * @returns The resolver. + */ + callback(value) { + return this.registerResolver(3, value); + } + /** + * Creates a resolver that invokes a callback function the first time that a dependency + * resolution is requested. The returned value is then cached and provided for all + * subsequent requests. + * @param value - The callback to call during the first resolution. + * @returns The resolver. + */ + cachedCallback(value) { + return this.registerResolver(3, cacheCallbackResult(value)); + } + /** + * Aliases the current key to a different key. + * @param destinationKey - The key to point the alias to. + * @returns The resolver. + */ + aliasTo(destinationKey) { + return this.registerResolver(5, destinationKey); + } + registerResolver(strategy, state) { + const { container, key } = this; + this.container = this.key = void 0; + return container.registerResolver(key, new ResolverImpl(key, strategy, state)); + } + }; + DefaultResolver = Object.freeze({ + /** + * Disables auto-registration and throws for all un-registered dependencies. + * @param key - The key to create the resolver for. + */ + none(key) { + throw Error(`${key.toString()} not registered, did you forget to add @singleton()?`); + }, + /** + * Provides default singleton resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + singleton(key) { + return new ResolverImpl(key, 1, key); + }, + /** + * Provides default transient resolution behavior during auto-registration. + * @param key - The key to create the resolver for. + * @returns The resolver. + */ + transient(key) { + return new ResolverImpl(key, 2, key); + } + }); + ContainerConfiguration = Object.freeze({ + /** + * The default configuration used when creating a DOM-disconnected container. + * @remarks + * The default creates a root container, with no parent container. It does not handle + * owner requests and it uses singleton resolution behavior for auto-registration. + */ + default: Object.freeze({ + parentLocator: () => null, + responsibleForOwnerRequests: false, + defaultResolver: DefaultResolver.singleton + }) + }); + dependencyLookup = /* @__PURE__ */ new Map(); + rootDOMContainer = null; + DI = Object.freeze({ + /** + * Creates a new dependency injection container. + * @param config - The configuration for the container. + * @returns A newly created dependency injection container. + */ + createContainer(config) { + return new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config)); + }, + /** + * Finds the dependency injection container responsible for providing dependencies + * to the specified node. + * @param node - The node to find the responsible container for. + * @returns The container responsible for providing dependencies to the node. + * @remarks + * This will be the same as the parent container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findResponsibleContainer(node) { + const owned = node.$$container$$; + if (owned && owned.responsibleForOwnerRequests) { + return owned; + } + return DI.findParentContainer(node); + }, + /** + * Find the dependency injection container up the DOM tree from this node. + * @param node - The node to find the parent container for. + * @returns The parent container of this node. + * @remarks + * This will be the same as the responsible container if the specified node + * does not itself host a container configured with responsibleForOwnerRequests. + */ + findParentContainer(node) { + const event = new CustomEvent(DILocateParentEventType, { + bubbles: true, + composed: true, + cancelable: true, + detail: { container: void 0 } + }); + node.dispatchEvent(event); + return event.detail.container || DI.getOrCreateDOMContainer(); + }, + /** + * Returns a dependency injection container if one is explicitly owned by the specified + * node. If one is not owned, then a new container is created and assigned to the node. + * @param node - The node to find or create the container for. + * @param config - The configuration for the container if one needs to be created. + * @returns The located or created container. + * @remarks + * This API does not search for a responsible or parent container. It looks only for a container + * directly defined on the specified node and creates one at that location if one does not + * already exist. + */ + getOrCreateDOMContainer(node, config) { + if (!node) { + return rootDOMContainer || (rootDOMContainer = new ContainerImpl(null, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: () => null + }))); + } + return node.$$container$$ || new ContainerImpl(node, Object.assign({}, ContainerConfiguration.default, config, { + parentLocator: DI.findParentContainer + })); + }, + /** + * Gets the "design:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getDesignParamtypes: getParamTypes("design:paramtypes"), + /** + * Gets the "di:paramtypes" metadata for the specified type. + * @param Type - The type to get the metadata for. + * @returns The metadata array or undefined if no metadata is found. + */ + getAnnotationParamtypes: getParamTypes("di:paramtypes"), + /** + * + * @param Type - Gets the "di:paramtypes" metadata for the specified type. If none is found, + * an empty metadata array is created and added. + * @returns The metadata array. + */ + getOrCreateAnnotationParamTypes(Type) { + let annotationParamtypes = this.getAnnotationParamtypes(Type); + if (annotationParamtypes === void 0) { + Reflect.defineMetadata("di:paramtypes", annotationParamtypes = [], Type); + } + return annotationParamtypes; + }, + /** + * Gets the dependency keys representing what is needed to instantiate the specified type. + * @param Type - The type to get the dependencies for. + * @returns An array of dependency keys. + */ + getDependencies(Type) { + let dependencies = dependencyLookup.get(Type); + if (dependencies === void 0) { + const inject2 = Type.inject; + if (inject2 === void 0) { + const designParamtypes = DI.getDesignParamtypes(Type); + const annotationParamtypes = DI.getAnnotationParamtypes(Type); + if (designParamtypes === void 0) { + if (annotationParamtypes === void 0) { + const Proto = Object.getPrototypeOf(Type); + if (typeof Proto === "function" && Proto !== Function.prototype) { + dependencies = cloneArrayWithPossibleProps(DI.getDependencies(Proto)); + } else { + dependencies = []; + } + } else { + dependencies = cloneArrayWithPossibleProps(annotationParamtypes); + } + } else if (annotationParamtypes === void 0) { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + } else { + dependencies = cloneArrayWithPossibleProps(designParamtypes); + let len = annotationParamtypes.length; + let auAnnotationParamtype; + for (let i = 0; i < len; ++i) { + auAnnotationParamtype = annotationParamtypes[i]; + if (auAnnotationParamtype !== void 0) { + dependencies[i] = auAnnotationParamtype; + } + } + const keys = Object.keys(annotationParamtypes); + len = keys.length; + let key; + for (let i = 0; i < len; ++i) { + key = keys[i]; + if (!isArrayIndex(key)) { + dependencies[key] = annotationParamtypes[key]; + } + } + } + } else { + dependencies = cloneArrayWithPossibleProps(inject2); + } + dependencyLookup.set(Type, dependencies); + } + return dependencies; + }, + /** + * Defines a property on a web component class. The value of this property will + * be resolved from the dependency injection container responsible for the element + * instance, based on where it is connected in the DOM. + * @param target - The target to define the property on. + * @param propertyName - The name of the property to define. + * @param key - The dependency injection key. + * @param respectConnection - Indicates whether or not to update the property value if the + * hosting component is disconnected and then re-connected at a different location in the DOM. + * @remarks + * The respectConnection option is only applicable to elements that descend from FASTElement. + */ + defineProperty(target, propertyName, key, respectConnection = false) { + const diPropertyKey = `$di_${propertyName}`; + Reflect.defineProperty(target, propertyName, { + get: function() { + let value = this[diPropertyKey]; + if (value === void 0) { + const container = this instanceof HTMLElement ? DI.findResponsibleContainer(this) : DI.getOrCreateDOMContainer(); + value = container.get(key); + this[diPropertyKey] = value; + if (respectConnection && this instanceof FASTElement) { + const notifier = this.$fastController; + const handleChange = () => { + const newContainer = DI.findResponsibleContainer(this); + const newValue = newContainer.get(key); + const oldValue = this[diPropertyKey]; + if (newValue !== oldValue) { + this[diPropertyKey] = value; + notifier.notify(propertyName); + } + }; + notifier.subscribe({ handleChange }, "isConnected"); + } + } + return value; + } + }); + }, + /** + * Creates a dependency injection key. + * @param nameConfigOrCallback - A friendly name for the key or a lambda that configures a + * default resolution for the dependency. + * @param configuror - If a friendly name was provided for the first parameter, then an optional + * lambda that configures a default resolution for the dependency can be provided second. + * @returns The created key. + * @remarks + * The created key can be used as a property decorator or constructor parameter decorator, + * in addition to its standard use in an inject array or through direct container APIs. + */ + createInterface(nameConfigOrCallback, configuror) { + const configure = typeof nameConfigOrCallback === "function" ? nameConfigOrCallback : configuror; + const friendlyName = typeof nameConfigOrCallback === "string" ? nameConfigOrCallback : nameConfigOrCallback && "friendlyName" in nameConfigOrCallback ? nameConfigOrCallback.friendlyName || defaultFriendlyName : defaultFriendlyName; + const respectConnection = typeof nameConfigOrCallback === "string" ? false : nameConfigOrCallback && "respectConnection" in nameConfigOrCallback ? nameConfigOrCallback.respectConnection || false : false; + const Interface = function(target, property, index) { + if (target == null || new.target !== void 0) { + throw new Error(`No registration for interface: '${Interface.friendlyName}'`); + } + if (property) { + DI.defineProperty(target, property, Interface, respectConnection); + } else { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + annotationParamtypes[index] = Interface; + } + }; + Interface.$isInterface = true; + Interface.friendlyName = friendlyName == null ? "(anonymous)" : friendlyName; + if (configure != null) { + Interface.register = function(container, key) { + return configure(new ResolverBuilder(container, key !== null && key !== void 0 ? key : Interface)); + }; + } + Interface.toString = function toString() { + return `InterfaceSymbol<${Interface.friendlyName}>`; + }; + return Interface; + }, + /** + * A decorator that specifies what to inject into its target. + * @param dependencies - The dependencies to inject. + * @returns The decorator to be applied to the target class. + * @remarks + * The decorator can be used to decorate a class, listing all of the classes dependencies. + * Or it can be used to decorate a constructor paramter, indicating what to inject for that + * parameter. + * Or it can be used for a web component property, indicating what that property should resolve to. + */ + inject(...dependencies) { + return function(target, key, descriptor) { + if (typeof descriptor === "number") { + const annotationParamtypes = DI.getOrCreateAnnotationParamTypes(target); + const dep = dependencies[0]; + if (dep !== void 0) { + annotationParamtypes[descriptor] = dep; + } + } else if (key) { + DI.defineProperty(target, key, dependencies[0]); + } else { + const annotationParamtypes = descriptor ? DI.getOrCreateAnnotationParamTypes(descriptor.value) : DI.getOrCreateAnnotationParamTypes(target); + let dep; + for (let i = 0; i < dependencies.length; ++i) { + dep = dependencies[i]; + if (dep !== void 0) { + annotationParamtypes[i] = dep; + } + } + } + }; + }, + /** + * Registers the `target` class as a transient dependency; each time the dependency is resolved + * a new instance will be created. + * + * @param target - The class / constructor function to register as transient. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.transient(Foo); + * ``` + * + * @example + * Inline declaration + * + * ```ts + * const Foo = DI.transient(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + transient(target) { + target.register = function register(container) { + const registration = Registration.transient(target, target); + return registration.register(container); + }; + target.registerInRequestor = false; + return target; + }, + /** + * Registers the `target` class as a singleton dependency; the class will only be created once. Each + * consecutive time the dependency is resolved, the same instance will be returned. + * + * @param target - The class / constructor function to register as a singleton. + * @returns The same class, with a static `register` method that takes a container and returns the appropriate resolver. + * @example + * On an existing class + * ```ts + * class Foo { } + * DI.singleton(Foo); + * ``` + * + * @example + * Inline declaration + * ```ts + * const Foo = DI.singleton(class { }); + * // Foo is now strongly typed with register + * Foo.register(container); + * ``` + * + * @public + */ + singleton(target, options = defaultSingletonOptions) { + target.register = function register(container) { + const registration = Registration.singleton(target, target); + return registration.register(container); + }; + target.registerInRequestor = options.scoped; + return target; + } + }); + Container = DI.createInterface("Container"); + inject = DI.inject; + defaultSingletonOptions = { scoped: false }; + all = createAllResolver((key, handler, requestor, searchAncestors) => requestor.getAll(key, searchAncestors)); + lazy = createResolver((key, handler, requestor) => { + return () => requestor.get(key); + }); + optional = createResolver((key, handler, requestor) => { + if (requestor.has(key, true)) { + return requestor.get(key); + } else { + return void 0; + } + }); + ignore.$isResolver = true; + ignore.resolve = () => void 0; + newInstanceForScope = createResolver((key, handler, requestor) => { + const instance = createNewInstance(key, handler); + const resolver = new ResolverImpl(key, 0, instance); + requestor.registerResolver(key, resolver); + return instance; + }); + newInstanceOf = createResolver((key, handler, _requestor) => createNewInstance(key, handler)); + ResolverImpl = class { + constructor(key, strategy, state) { + this.key = key; + this.strategy = strategy; + this.state = state; + this.resolving = false; + } + get $isResolver() { + return true; + } + register(container) { + return container.registerResolver(this.key, this); + } + resolve(handler, requestor) { + switch (this.strategy) { + case 0: + return this.state; + case 1: { + if (this.resolving) { + throw new Error(`Cyclic dependency found: ${this.state.name}`); + } + this.resolving = true; + this.state = handler.getFactory(this.state).construct(requestor); + this.strategy = 0; + this.resolving = false; + return this.state; + } + case 2: { + const factory = handler.getFactory(this.state); + if (factory === null) { + throw new Error(`Resolver for ${String(this.key)} returned a null factory`); + } + return factory.construct(requestor); + } + case 3: + return this.state(handler, requestor, this); + case 4: + return this.state[0].resolve(handler, requestor); + case 5: + return requestor.get(this.state); + default: + throw new Error(`Invalid resolver strategy specified: ${this.strategy}.`); + } + } + getFactory(container) { + var _a, _b, _c; + switch (this.strategy) { + case 1: + case 2: + return container.getFactory(this.state); + case 5: + return (_c = (_b = (_a = container.getResolver(this.state)) === null || _a === void 0 ? void 0 : _a.getFactory) === null || _b === void 0 ? void 0 : _b.call(_a, container)) !== null && _c !== void 0 ? _c : null; + default: + return null; + } + } + }; + FactoryImpl = class { + constructor(Type, dependencies) { + this.Type = Type; + this.dependencies = dependencies; + this.transformers = null; + } + construct(container, dynamicDependencies) { + let instance; + if (dynamicDependencies === void 0) { + instance = new this.Type(...this.dependencies.map(containerGetKey, container)); + } else { + instance = new this.Type(...this.dependencies.map(containerGetKey, container), ...dynamicDependencies); + } + if (this.transformers == null) { + return instance; + } + return this.transformers.reduce(transformInstance, instance); + } + registerTransformer(transformer) { + (this.transformers || (this.transformers = [])).push(transformer); + } + }; + containerResolver = { + $isResolver: true, + resolve(handler, requestor) { + return requestor; + } + }; + InstrinsicTypeNames = /* @__PURE__ */ new Set([ + "Array", + "ArrayBuffer", + "Boolean", + "DataView", + "Date", + "Error", + "EvalError", + "Float32Array", + "Float64Array", + "Function", + "Int8Array", + "Int16Array", + "Int32Array", + "Map", + "Number", + "Object", + "Promise", + "RangeError", + "ReferenceError", + "RegExp", + "Set", + "SharedArrayBuffer", + "String", + "SyntaxError", + "TypeError", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "URIError", + "WeakMap", + "WeakSet" + ]); + DILocateParentEventType = "__DI_LOCATE_PARENT__"; + factories = /* @__PURE__ */ new Map(); + ContainerImpl = class _ContainerImpl { + constructor(owner, config) { + this.owner = owner; + this.config = config; + this._parent = void 0; + this.registerDepth = 0; + this.context = null; + if (owner !== null) { + owner.$$container$$ = this; + } + this.resolvers = /* @__PURE__ */ new Map(); + this.resolvers.set(Container, containerResolver); + if (owner instanceof Node) { + owner.addEventListener(DILocateParentEventType, (e) => { + if (e.composedPath()[0] !== this.owner) { + e.detail.container = this; + e.stopImmediatePropagation(); + } + }); + } + } + get parent() { + if (this._parent === void 0) { + this._parent = this.config.parentLocator(this.owner); + } + return this._parent; + } + get depth() { + return this.parent === null ? 0 : this.parent.depth + 1; + } + get responsibleForOwnerRequests() { + return this.config.responsibleForOwnerRequests; + } + registerWithContext(context, ...params) { + this.context = context; + this.register(...params); + this.context = null; + return this; + } + register(...params) { + if (++this.registerDepth === 100) { + throw new Error("Unable to autoregister dependency"); + } + let current; + let keys; + let value; + let j; + let jj; + const context = this.context; + for (let i = 0, ii = params.length; i < ii; ++i) { + current = params[i]; + if (!isObject(current)) { + continue; + } + if (isRegistry(current)) { + current.register(this, context); + } else if (isClass(current)) { + Registration.singleton(current, current).register(this); + } else { + keys = Object.keys(current); + j = 0; + jj = keys.length; + for (; j < jj; ++j) { + value = current[keys[j]]; + if (!isObject(value)) { + continue; + } + if (isRegistry(value)) { + value.register(this, context); + } else { + this.register(value); + } + } + } + } + --this.registerDepth; + return this; + } + registerResolver(key, resolver) { + validateKey(key); + const resolvers = this.resolvers; + const result = resolvers.get(key); + if (result == null) { + resolvers.set(key, resolver); + } else if (result instanceof ResolverImpl && result.strategy === 4) { + result.state.push(resolver); + } else { + resolvers.set(key, new ResolverImpl(key, 4, [result, resolver])); + } + return resolver; + } + registerTransformer(key, transformer) { + const resolver = this.getResolver(key); + if (resolver == null) { + return false; + } + if (resolver.getFactory) { + const factory = resolver.getFactory(this); + if (factory == null) { + return false; + } + factory.registerTransformer(transformer); + return true; + } + return false; + } + getResolver(key, autoRegister = true) { + validateKey(key); + if (key.resolve !== void 0) { + return key; + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + return autoRegister ? this.jitRegister(key, handler) : null; + } + current = current.parent; + } else { + return resolver; + } + } + return null; + } + has(key, searchAncestors = false) { + return this.resolvers.has(key) ? true : searchAncestors && this.parent != null ? this.parent.has(key, true) : false; + } + get(key) { + validateKey(key); + if (key.$isResolver) { + return key.resolve(this, this); + } + let current = this; + let resolver; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + if (current.parent == null) { + const handler = isRegisterInRequester(key) ? this : current; + resolver = this.jitRegister(key, handler); + return resolver.resolve(current, this); + } + current = current.parent; + } else { + return resolver.resolve(current, this); + } + } + throw new Error(`Unable to resolve key: ${String(key)}`); + } + getAll(key, searchAncestors = false) { + validateKey(key); + const requestor = this; + let current = requestor; + let resolver; + if (searchAncestors) { + let resolutions = emptyArray; + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver != null) { + resolutions = resolutions.concat( + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + buildAllResponse(resolver, current, requestor) + ); + } + current = current.parent; + } + return resolutions; + } else { + while (current != null) { + resolver = current.resolvers.get(key); + if (resolver == null) { + current = current.parent; + if (current == null) { + return emptyArray; + } + } else { + return buildAllResponse(resolver, current, requestor); + } + } + } + return emptyArray; + } + getFactory(Type) { + let factory = factories.get(Type); + if (factory === void 0) { + if (isNativeFunction(Type)) { + throw new Error(`${Type.name} is a native function and therefore cannot be safely constructed by DI. If this is intentional, please use a callback or cachedCallback resolver.`); + } + factories.set(Type, factory = new FactoryImpl(Type, DI.getDependencies(Type))); + } + return factory; + } + registerFactory(key, factory) { + factories.set(key, factory); + } + createChild(config) { + return new _ContainerImpl(null, Object.assign({}, this.config, config, { parentLocator: () => this })); + } + jitRegister(keyAsValue, handler) { + if (typeof keyAsValue !== "function") { + throw new Error(`Attempted to jitRegister something that is not a constructor: '${keyAsValue}'. Did you forget to register this dependency?`); + } + if (InstrinsicTypeNames.has(keyAsValue.name)) { + throw new Error(`Attempted to jitRegister an intrinsic type: ${keyAsValue.name}. Did you forget to add @inject(Key)`); + } + if (isRegistry(keyAsValue)) { + const registrationResolver = keyAsValue.register(handler); + if (!(registrationResolver instanceof Object) || registrationResolver.resolve == null) { + const newResolver = handler.resolvers.get(keyAsValue); + if (newResolver != void 0) { + return newResolver; + } + throw new Error("A valid resolver was not returned from the static register method"); + } + return registrationResolver; + } else if (keyAsValue.$isInterface) { + throw new Error(`Attempted to jitRegister an interface: ${keyAsValue.friendlyName}`); + } else { + const resolver = this.config.defaultResolver(keyAsValue, handler); + handler.resolvers.set(keyAsValue, resolver); + return resolver; + } + } + }; + cache = /* @__PURE__ */ new WeakMap(); + Registration = Object.freeze({ + /** + * Allows you to pass an instance. + * Every time you request this {@link Key} you will get this instance back. + * + * @example + * ``` + * Registration.instance(Foo, new Foo())); + * ``` + * + * @param key - The key to register the instance under. + * @param value - The instance to return when the key is requested. + */ + instance(key, value) { + return new ResolverImpl(key, 0, value); + }, + /** + * Creates an instance from the class. + * Every time you request this {@link Key} you will get the same one back. + * + * @example + * ``` + * Registration.singleton(Foo, Foo); + * ``` + * + * @param key - The key to register the singleton under. + * @param value - The class to instantiate as a singleton when first requested. + */ + singleton(key, value) { + return new ResolverImpl(key, 1, value); + }, + /** + * Creates an instance from a class. + * Every time you request this {@link Key} you will get a new instance. + * + * @example + * ``` + * Registration.instance(Foo, Foo); + * ``` + * + * @param key - The key to register the instance type under. + * @param value - The class to instantiate each time the key is requested. + */ + transient(key, value) { + return new ResolverImpl(key, 2, value); + }, + /** + * Delegates to a callback function to provide the dependency. + * Every time you request this {@link Key} the callback will be invoked to provide + * the dependency. + * + * @example + * ``` + * Registration.callback(Foo, () => new Foo()); + * Registration.callback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + */ + callback(key, callback) { + return new ResolverImpl(key, 3, callback); + }, + /** + * Delegates to a callback function to provide the dependency and then caches the + * dependency for future requests. + * + * @example + * ``` + * Registration.cachedCallback(Foo, () => new Foo()); + * Registration.cachedCallback(Bar, (c: Container) => new Bar(c.get(Foo))); + * ``` + * + * @param key - The key to register the callback for. + * @param callback - The function that is expected to return the dependency. + * @remarks + * If you pass the same Registration to another container, the same cached value will be used. + * Should all references to the resolver returned be removed, the cache will expire. + */ + cachedCallback(key, callback) { + return new ResolverImpl(key, 3, cacheCallbackResult(callback)); + }, + /** + * Creates an alternate {@link Key} to retrieve an instance by. + * + * @example + * ``` + * Register.singleton(Foo, Foo) + * Register.aliasTo(Foo, MyFoos); + * + * container.getAll(MyFoos) // contains an instance of Foo + * ``` + * + * @param originalKey - The original key that has been registered. + * @param aliasKey - The alias to the original key. + */ + aliasTo(originalKey, aliasKey) { + return new ResolverImpl(aliasKey, 5, originalKey); + } + }); + defaultFriendlyName = "(anonymous)"; + isNativeFunction = /* @__PURE__ */ (function() { + const lookup = /* @__PURE__ */ new WeakMap(); + let isNative = false; + let sourceText = ""; + let i = 0; + return function(fn) { + isNative = lookup.get(fn); + if (isNative === void 0) { + sourceText = fn.toString(); + i = sourceText.length; + isNative = // 29 is the length of 'function () { [native code] }' which is the smallest length of a native function string + i >= 29 && // 100 seems to be a safe upper bound of the max length of a native function. In Chrome and FF it's 56, in Edge it's 61. + i <= 100 && // This whole heuristic *could* be tricked by a comment. Do we need to care about that? + sourceText.charCodeAt(i - 1) === 125 && // } + // TODO: the spec is a little vague about the precise constraints, so we do need to test this across various browsers to make sure just one whitespace is a safe assumption. + sourceText.charCodeAt(i - 2) <= 32 && // whitespace + sourceText.charCodeAt(i - 3) === 93 && // ] + sourceText.charCodeAt(i - 4) === 101 && // e + sourceText.charCodeAt(i - 5) === 100 && // d + sourceText.charCodeAt(i - 6) === 111 && // o + sourceText.charCodeAt(i - 7) === 99 && // c + sourceText.charCodeAt(i - 8) === 32 && // + sourceText.charCodeAt(i - 9) === 101 && // e + sourceText.charCodeAt(i - 10) === 118 && // v + sourceText.charCodeAt(i - 11) === 105 && // i + sourceText.charCodeAt(i - 12) === 116 && // t + sourceText.charCodeAt(i - 13) === 97 && // a + sourceText.charCodeAt(i - 14) === 110 && // n + sourceText.charCodeAt(i - 15) === 88; + lookup.set(fn, isNative); + } + return isNative; + }; + })(); + isNumericLookup = {}; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js + function presentationKeyFromTag(tagName) { + return `${tagName.toLowerCase()}:presentation`; + } + var presentationRegistry, ComponentPresentation, DefaultComponentPresentation; + var init_component_presentation = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/component-presentation.js"() { + init_esm(); + init_di(); + presentationRegistry = /* @__PURE__ */ new Map(); + ComponentPresentation = Object.freeze({ + /** + * Defines a component presentation for an element. + * @param tagName - The element name to define the presentation for. + * @param presentation - The presentation that will be applied to matching elements. + * @param container - The dependency injection container to register the configuration in. + * @public + */ + define(tagName, presentation, container) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === void 0) { + presentationRegistry.set(key, presentation); + } else { + presentationRegistry.set(key, false); + } + container.register(Registration.instance(key, presentation)); + }, + /** + * Finds a component presentation for the specified element name, + * searching the DOM hierarchy starting from the provided element. + * @param tagName - The name of the element to locate the presentation for. + * @param element - The element to begin the search from. + * @returns The component presentation or null if none is found. + * @public + */ + forTag(tagName, element) { + const key = presentationKeyFromTag(tagName); + const existing = presentationRegistry.get(key); + if (existing === false) { + const container = DI.findResponsibleContainer(element); + return container.get(key); + } + return existing || null; + } + }); + DefaultComponentPresentation = class { + /** + * Creates an instance of DefaultComponentPresentation. + * @param template - The template to apply to the element. + * @param styles - The styles to apply to the element. + * @public + */ + constructor(template, styles) { + this.template = template || null; + this.styles = styles === void 0 ? null : Array.isArray(styles) ? ElementStyles.create(styles) : styles instanceof ElementStyles ? styles : ElementStyles.create([styles]); + } + /** + * Applies the presentation details to the specified element. + * @param element - The element to apply the presentation details to. + * @public + */ + applyTo(element) { + const controller = element.$fastController; + if (controller.template === null) { + controller.template = this.template; + } + if (controller.styles === null) { + controller.styles = this.styles; + } + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js + function resolveOption(option, context, definition) { + if (typeof option === "function") { + return option(context, definition); + } + return option; + } + var FoundationElement, FoundationElementRegistry; + var init_foundation_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/foundation-element.js"() { + init_tslib_es6(); + init_esm(); + init_component_presentation(); + FoundationElement = class _FoundationElement extends FASTElement { + constructor() { + super(...arguments); + this._presentation = void 0; + } + /** + * A property which resolves the ComponentPresentation instance + * for the current component. + * @public + */ + get $presentation() { + if (this._presentation === void 0) { + this._presentation = ComponentPresentation.forTag(this.tagName, this); + } + return this._presentation; + } + templateChanged() { + if (this.template !== void 0) { + this.$fastController.template = this.template; + } + } + stylesChanged() { + if (this.styles !== void 0) { + this.$fastController.styles = this.styles; + } + } + /** + * The connected callback for this FASTElement. + * @remarks + * This method is invoked by the platform whenever this FoundationElement + * becomes connected to the document. + * @public + */ + connectedCallback() { + if (this.$presentation !== null) { + this.$presentation.applyTo(this); + } + super.connectedCallback(); + } + /** + * Defines an element registry function with a set of element definition defaults. + * @param elementDefinition - The definition of the element to create the registry + * function for. + * @public + */ + static compose(elementDefinition) { + return (overrideDefinition = {}) => new FoundationElementRegistry(this === _FoundationElement ? class extends _FoundationElement { + } : this, elementDefinition, overrideDefinition); + } + }; + __decorate([ + observable + ], FoundationElement.prototype, "template", void 0); + __decorate([ + observable + ], FoundationElement.prototype, "styles", void 0); + FoundationElementRegistry = class { + constructor(type, elementDefinition, overrideDefinition) { + this.type = type; + this.elementDefinition = elementDefinition; + this.overrideDefinition = overrideDefinition; + this.definition = Object.assign(Object.assign({}, this.elementDefinition), this.overrideDefinition); + } + register(container, context) { + const definition = this.definition; + const overrideDefinition = this.overrideDefinition; + const prefix = definition.prefix || context.elementPrefix; + const name = `${prefix}-${definition.baseName}`; + context.tryDefineElement({ + name, + type: this.type, + baseClass: this.elementDefinition.baseClass, + callback: (x) => { + const presentation = new DefaultComponentPresentation(resolveOption(definition.template, x, definition), resolveOption(definition.styles, x, definition)); + x.definePresentation(presentation); + let shadowOptions = resolveOption(definition.shadowOptions, x, definition); + if (x.shadowRootMode) { + if (shadowOptions) { + if (!overrideDefinition.shadowOptions) { + shadowOptions.mode = x.shadowRootMode; + } + } else if (shadowOptions !== null) { + shadowOptions = { mode: x.shadowRootMode }; + } + } + x.defineElement({ + elementOptions: resolveOption(definition.elementOptions, x, definition), + shadowOptions, + attributes: resolveOption(definition.attributes, x, definition) + }); + } + }); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js + function applyMixins(derivedCtor, ...baseCtors) { + const derivedAttributes = AttributeConfiguration.locate(derivedCtor); + baseCtors.forEach((baseCtor) => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => { + if (name !== "constructor") { + Object.defineProperty( + derivedCtor.prototype, + name, + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + Object.getOwnPropertyDescriptor(baseCtor.prototype, name) + ); + } + }); + const baseAttributes = AttributeConfiguration.locate(baseCtor); + baseAttributes.forEach((x) => derivedAttributes.push(x)); + }); + } + var init_apply_mixins = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/apply-mixins.js"() { + init_esm(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js + var AccordionItem; + var init_accordion_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/accordion-item.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_start_end(); + init_apply_mixins(); + AccordionItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.headinglevel = 2; + this.expanded = false; + this.clickHandler = (e) => { + this.expanded = !this.expanded; + this.change(); + }; + this.change = () => { + this.$emit("change"); + }; + } + }; + __decorate([ + attr({ + attribute: "heading-level", + mode: "fromView", + converter: nullableNumberConverter + }) + ], AccordionItem.prototype, "headinglevel", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], AccordionItem.prototype, "expanded", void 0); + __decorate([ + attr + ], AccordionItem.prototype, "id", void 0); + applyMixins(AccordionItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js + var init_accordion_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion-item/index.js"() { + init_accordion_item_template(); + init_accordion_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js + var init_accordion_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.template.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/aria.js + var Orientation; + var init_aria = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/aria.js"() { + Orientation = { + horizontal: "horizontal", + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/array.js + function findLastIndex(array, predicate) { + let k = array.length; + while (k--) { + if (predicate(array[k], k, array)) { + return k; + } + } + return -1; + } + var init_array = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/array.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/class-names.js + var init_class_names = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/class-names.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-dom.js + function canUseDOM() { + return !!(typeof window !== "undefined" && window.document && window.document.createElement); + } + var init_can_use_dom = __esm({ + "node_modules/exenv-es6/dist/can-use-dom.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-event-listeners.js + var init_can_use_event_listeners = __esm({ + "node_modules/exenv-es6/dist/can-use-event-listeners.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-viewport.js + var init_can_use_viewport = __esm({ + "node_modules/exenv-es6/dist/can-use-viewport.js"() { + } + }); + + // node_modules/exenv-es6/dist/can-use-workers.js + var init_can_use_workers = __esm({ + "node_modules/exenv-es6/dist/can-use-workers.js"() { + } + }); + + // node_modules/exenv-es6/dist/index.js + var init_dist = __esm({ + "node_modules/exenv-es6/dist/index.js"() { + init_can_use_dom(); + init_can_use_event_listeners(); + init_can_use_viewport(); + init_can_use_workers(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/dom.js + function isHTMLElement(...args) { + return args.every((arg) => arg instanceof HTMLElement); + } + function getDisplayedNodes(rootNode, selector) { + if (!rootNode || !selector || !isHTMLElement(rootNode)) { + return; + } + const nodes = Array.from(rootNode.querySelectorAll(selector)); + return nodes.filter((node) => node.offsetParent !== null); + } + function getNonce() { + const node = document.querySelector('meta[property="csp-nonce"]'); + if (node) { + return node.getAttribute("content"); + } else { + return null; + } + } + function canUseFocusVisible() { + if (typeof _canUseFocusVisible === "boolean") { + return _canUseFocusVisible; + } + if (!canUseDOM()) { + _canUseFocusVisible = false; + return _canUseFocusVisible; + } + const styleElement = document.createElement("style"); + const styleNonce = getNonce(); + if (styleNonce !== null) { + styleElement.setAttribute("nonce", styleNonce); + } + document.head.appendChild(styleElement); + try { + styleElement.sheet.insertRule("foo:focus-visible {color:inherit}", 0); + _canUseFocusVisible = true; + } catch (e) { + _canUseFocusVisible = false; + } finally { + document.head.removeChild(styleElement); + } + return _canUseFocusVisible; + } + var _canUseFocusVisible; + var init_dom2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/dom.js"() { + init_dist(); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/events.js + var eventFocus, eventFocusIn, eventFocusOut, eventKeyDown, eventResize, eventScroll; + var init_events = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/events.js"() { + eventFocus = "focus"; + eventFocusIn = "focusin"; + eventFocusOut = "focusout"; + eventKeyDown = "keydown"; + eventResize = "resize"; + eventScroll = "scroll"; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/html.js + var init_html = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/html.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/key-codes.js + var KeyCodes, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnter, keyEscape, keyHome, keyEnd, keyFunction2, keyPageDown, keyPageUp, keySpace, keyTab, keyBackspace, keyDelete, ArrowKeys; + var init_key_codes = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/key-codes.js"() { + (function(KeyCodes2) { + KeyCodes2[KeyCodes2["alt"] = 18] = "alt"; + KeyCodes2[KeyCodes2["arrowDown"] = 40] = "arrowDown"; + KeyCodes2[KeyCodes2["arrowLeft"] = 37] = "arrowLeft"; + KeyCodes2[KeyCodes2["arrowRight"] = 39] = "arrowRight"; + KeyCodes2[KeyCodes2["arrowUp"] = 38] = "arrowUp"; + KeyCodes2[KeyCodes2["back"] = 8] = "back"; + KeyCodes2[KeyCodes2["backSlash"] = 220] = "backSlash"; + KeyCodes2[KeyCodes2["break"] = 19] = "break"; + KeyCodes2[KeyCodes2["capsLock"] = 20] = "capsLock"; + KeyCodes2[KeyCodes2["closeBracket"] = 221] = "closeBracket"; + KeyCodes2[KeyCodes2["colon"] = 186] = "colon"; + KeyCodes2[KeyCodes2["colon2"] = 59] = "colon2"; + KeyCodes2[KeyCodes2["comma"] = 188] = "comma"; + KeyCodes2[KeyCodes2["ctrl"] = 17] = "ctrl"; + KeyCodes2[KeyCodes2["delete"] = 46] = "delete"; + KeyCodes2[KeyCodes2["end"] = 35] = "end"; + KeyCodes2[KeyCodes2["enter"] = 13] = "enter"; + KeyCodes2[KeyCodes2["equals"] = 187] = "equals"; + KeyCodes2[KeyCodes2["equals2"] = 61] = "equals2"; + KeyCodes2[KeyCodes2["equals3"] = 107] = "equals3"; + KeyCodes2[KeyCodes2["escape"] = 27] = "escape"; + KeyCodes2[KeyCodes2["forwardSlash"] = 191] = "forwardSlash"; + KeyCodes2[KeyCodes2["function1"] = 112] = "function1"; + KeyCodes2[KeyCodes2["function10"] = 121] = "function10"; + KeyCodes2[KeyCodes2["function11"] = 122] = "function11"; + KeyCodes2[KeyCodes2["function12"] = 123] = "function12"; + KeyCodes2[KeyCodes2["function2"] = 113] = "function2"; + KeyCodes2[KeyCodes2["function3"] = 114] = "function3"; + KeyCodes2[KeyCodes2["function4"] = 115] = "function4"; + KeyCodes2[KeyCodes2["function5"] = 116] = "function5"; + KeyCodes2[KeyCodes2["function6"] = 117] = "function6"; + KeyCodes2[KeyCodes2["function7"] = 118] = "function7"; + KeyCodes2[KeyCodes2["function8"] = 119] = "function8"; + KeyCodes2[KeyCodes2["function9"] = 120] = "function9"; + KeyCodes2[KeyCodes2["home"] = 36] = "home"; + KeyCodes2[KeyCodes2["insert"] = 45] = "insert"; + KeyCodes2[KeyCodes2["menu"] = 93] = "menu"; + KeyCodes2[KeyCodes2["minus"] = 189] = "minus"; + KeyCodes2[KeyCodes2["minus2"] = 109] = "minus2"; + KeyCodes2[KeyCodes2["numLock"] = 144] = "numLock"; + KeyCodes2[KeyCodes2["numPad0"] = 96] = "numPad0"; + KeyCodes2[KeyCodes2["numPad1"] = 97] = "numPad1"; + KeyCodes2[KeyCodes2["numPad2"] = 98] = "numPad2"; + KeyCodes2[KeyCodes2["numPad3"] = 99] = "numPad3"; + KeyCodes2[KeyCodes2["numPad4"] = 100] = "numPad4"; + KeyCodes2[KeyCodes2["numPad5"] = 101] = "numPad5"; + KeyCodes2[KeyCodes2["numPad6"] = 102] = "numPad6"; + KeyCodes2[KeyCodes2["numPad7"] = 103] = "numPad7"; + KeyCodes2[KeyCodes2["numPad8"] = 104] = "numPad8"; + KeyCodes2[KeyCodes2["numPad9"] = 105] = "numPad9"; + KeyCodes2[KeyCodes2["numPadDivide"] = 111] = "numPadDivide"; + KeyCodes2[KeyCodes2["numPadDot"] = 110] = "numPadDot"; + KeyCodes2[KeyCodes2["numPadMinus"] = 109] = "numPadMinus"; + KeyCodes2[KeyCodes2["numPadMultiply"] = 106] = "numPadMultiply"; + KeyCodes2[KeyCodes2["numPadPlus"] = 107] = "numPadPlus"; + KeyCodes2[KeyCodes2["openBracket"] = 219] = "openBracket"; + KeyCodes2[KeyCodes2["pageDown"] = 34] = "pageDown"; + KeyCodes2[KeyCodes2["pageUp"] = 33] = "pageUp"; + KeyCodes2[KeyCodes2["period"] = 190] = "period"; + KeyCodes2[KeyCodes2["print"] = 44] = "print"; + KeyCodes2[KeyCodes2["quote"] = 222] = "quote"; + KeyCodes2[KeyCodes2["scrollLock"] = 145] = "scrollLock"; + KeyCodes2[KeyCodes2["shift"] = 16] = "shift"; + KeyCodes2[KeyCodes2["space"] = 32] = "space"; + KeyCodes2[KeyCodes2["tab"] = 9] = "tab"; + KeyCodes2[KeyCodes2["tilde"] = 192] = "tilde"; + KeyCodes2[KeyCodes2["windowsLeft"] = 91] = "windowsLeft"; + KeyCodes2[KeyCodes2["windowsOpera"] = 219] = "windowsOpera"; + KeyCodes2[KeyCodes2["windowsRight"] = 92] = "windowsRight"; + })(KeyCodes || (KeyCodes = {})); + keyArrowDown = "ArrowDown"; + keyArrowLeft = "ArrowLeft"; + keyArrowRight = "ArrowRight"; + keyArrowUp = "ArrowUp"; + keyEnter = "Enter"; + keyEscape = "Escape"; + keyHome = "Home"; + keyEnd = "End"; + keyFunction2 = "F2"; + keyPageDown = "PageDown"; + keyPageUp = "PageUp"; + keySpace = " "; + keyTab = "Tab"; + keyBackspace = "Backspace"; + keyDelete = "Delete"; + ArrowKeys = { + ArrowDown: keyArrowDown, + ArrowLeft: keyArrowLeft, + ArrowRight: keyArrowRight, + ArrowUp: keyArrowUp + }; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/localization.js + var Direction; + var init_localization = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/localization.js"() { + (function(Direction2) { + Direction2["ltr"] = "ltr"; + Direction2["rtl"] = "rtl"; + })(Direction || (Direction = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/numbers.js + function wrapInBounds(min, max, value) { + if (value < min) { + return max; + } else if (value > max) { + return min; + } + return value; + } + function limit(min, max, value) { + return Math.min(Math.max(value, min), max); + } + function inRange(value, min, max = 0) { + [min, max] = [min, max].sort((a, b) => a - b); + return min <= value && value < max; + } + var init_numbers = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/numbers.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/strings.js + function uniqueId(prefix = "") { + return `${prefix}${uniqueIdCounter++}`; + } + var uniqueIdCounter; + var init_strings = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/strings.js"() { + uniqueIdCounter = 0; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/query.js + var init_query = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/query.js"() { + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js + var RtlScrollConverter; + var init_rtl_scroll_converter = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/rtl-scroll-converter.js"() { + init_dist(); + init_localization(); + RtlScrollConverter = class _RtlScrollConverter { + /** + * Gets the scrollLeft value of the provided element + */ + static getScrollLeft(scrolledElement, direction) { + if (direction === Direction.rtl) { + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + return scrolledElement.scrollLeft; + } + /** + * Sets the scrollLeft value of the provided element + */ + static setScrollLeft(scrolledElement, scrollValue, direction) { + if (direction === Direction.rtl) { + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, scrollValue); + return; + } + scrolledElement.scrollLeft = scrollValue; + } + /** + * The initial rtl scroll converter getter function, it calls the browser test to set the correct converter + * functions and then invokes the getter + */ + static initialGetRtlScrollConverter(scrolledElement) { + _RtlScrollConverter.initializeRtlScrollConverters(); + return _RtlScrollConverter.getRtlScrollLeftConverter(scrolledElement); + } + /** + * The "direct" rtl get scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft; + } + /** + * The "inverted" get scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedGetRtlScrollConverter(scrolledElement) { + return -Math.abs(scrolledElement.scrollLeft); + } + /** + * The "reverse" get scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseGetRtlScrollConverter(scrolledElement) { + return scrolledElement.scrollLeft - (scrolledElement.scrollWidth - scrolledElement.clientWidth); + } + /** + * The initial rtl scroll converter setter function, it calls the browser test to set the correct converter + * functions and then invokes the setter + */ + static initialSetRtlScrollConverter(scrolledElement, newScrollValue) { + _RtlScrollConverter.initializeRtlScrollConverters(); + _RtlScrollConverter.setRtlScrollLeftConverter(scrolledElement, newScrollValue); + } + /** + * The "direct" rtl set scroll converter does not need to tamper with the scrollLeft + * values as the browser is already doing the right thing. Content start = 0 and + * scrolling left goes negative. + */ + static directSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = newScrollValue; + } + /** + * The "inverted" set scroll converter is used when the browser reports scroll left + * as a positive maximum scroll value at content start and then goes to zero as content + * is scrolled left + */ + static invertedSetRtlScrollConverter(scrolledElement, newScrollValue) { + scrolledElement.scrollLeft = Math.abs(newScrollValue); + } + /** + * The "reverse" set scroll converter is used when the browser reports scroll left + * as 0 at content start and then goes positive as content is scrolled left + */ + static reverseSetRtlScrollConverter(scrolledElement, newScrollValue) { + const maxScroll = scrolledElement.scrollWidth - scrolledElement.clientWidth; + scrolledElement.scrollLeft = maxScroll + newScrollValue; + } + /** + * detects the appropriate rtl scroll converter functions and assigns them + * should only run once + */ + static initializeRtlScrollConverters() { + if (!canUseDOM()) { + _RtlScrollConverter.applyDirectScrollConverters(); + return; + } + const testElement = _RtlScrollConverter.getTestElement(); + document.body.appendChild(testElement); + _RtlScrollConverter.checkForScrollType(testElement); + document.body.removeChild(testElement); + } + /** + * checks the provided test element to determine scroll type + * and apply appropriate converters + */ + static checkForScrollType(testElement) { + if (_RtlScrollConverter.isReverse(testElement)) { + _RtlScrollConverter.applyReverseScrollConverters(); + } else { + if (_RtlScrollConverter.isDirect(testElement)) { + _RtlScrollConverter.applyDirectScrollConverters(); + } else { + _RtlScrollConverter.applyInvertedScrollConverters(); + } + } + } + /** + * checks test element initial state for rtl "reverse" mode + */ + static isReverse(testElement) { + return testElement.scrollLeft > 0; + } + /** + * checks test element for rtl "direct" mode + */ + static isDirect(testElement) { + testElement.scrollLeft = -1; + return testElement.scrollLeft < 0; + } + /** + * apply direct scroll conververters + */ + static applyDirectScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.directSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.directGetRtlScrollConverter; + } + /** + * apply inverted scroll conververters + */ + static applyInvertedScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.invertedSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.invertedGetRtlScrollConverter; + } + /** + * apply reverse scroll conververters + */ + static applyReverseScrollConverters() { + _RtlScrollConverter.setRtlScrollLeftConverter = _RtlScrollConverter.reverseSetRtlScrollConverter; + _RtlScrollConverter.getRtlScrollLeftConverter = _RtlScrollConverter.reverseGetRtlScrollConverter; + } + /** + * generate a test element for rtl testing + */ + static getTestElement() { + const testElement = document.createElement("div"); + testElement.appendChild(document.createTextNode("ABCD")); + testElement.dir = "rtl"; + testElement.style.fontSize = "14px"; + testElement.style.width = "4px"; + testElement.style.height = "1px"; + testElement.style.position = "absolute"; + testElement.style.top = "-1000px"; + testElement.style.overflow = "scroll"; + return testElement; + } + }; + RtlScrollConverter.getRtlScrollLeftConverter = RtlScrollConverter.initialGetRtlScrollConverter; + RtlScrollConverter.setRtlScrollLeftConverter = RtlScrollConverter.initialSetRtlScrollConverter; + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/system-colors.js + var SystemColors; + var init_system_colors = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/system-colors.js"() { + (function(SystemColors2) { + SystemColors2["Canvas"] = "Canvas"; + SystemColors2["CanvasText"] = "CanvasText"; + SystemColors2["LinkText"] = "LinkText"; + SystemColors2["VisitedText"] = "VisitedText"; + SystemColors2["ActiveText"] = "ActiveText"; + SystemColors2["ButtonFace"] = "ButtonFace"; + SystemColors2["ButtonText"] = "ButtonText"; + SystemColors2["Field"] = "Field"; + SystemColors2["FieldText"] = "FieldText"; + SystemColors2["Highlight"] = "Highlight"; + SystemColors2["HighlightText"] = "HighlightText"; + SystemColors2["GrayText"] = "GrayText"; + })(SystemColors || (SystemColors = {})); + } + }); + + // node_modules/@microsoft/fast-web-utilities/dist/index.js + var init_dist2 = __esm({ + "node_modules/@microsoft/fast-web-utilities/dist/index.js"() { + init_aria(); + init_array(); + init_class_names(); + init_dom2(); + init_events(); + init_html(); + init_key_codes(); + init_localization(); + init_numbers(); + init_strings(); + init_query(); + init_rtl_scroll_converter(); + init_system_colors(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js + var AccordionExpandMode, Accordion; + var init_accordion = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/accordion.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_accordion_item(); + AccordionExpandMode = { + /** + * Designates only a single {@link @microsoft/fast-foundation#(AccordionItem:class) } can be open a time. + */ + single: "single", + /** + * Designates multiple {@link @microsoft/fast-foundation#(AccordionItem:class) | AccordionItems} can be open simultaneously. + */ + multi: "multi" + }; + Accordion = class extends FoundationElement { + constructor() { + super(...arguments); + this.expandmode = AccordionExpandMode.multi; + this.activeItemIndex = 0; + this.change = () => { + this.$emit("change", this.activeid); + }; + this.setItems = () => { + var _a; + if (this.accordionItems.length === 0) { + return; + } + this.accordionIds = this.getItemIds(); + this.accordionItems.forEach((item, index) => { + if (item instanceof AccordionItem) { + item.addEventListener("change", this.activeItemChange); + if (this.isSingleExpandMode()) { + this.activeItemIndex !== index ? item.expanded = false : item.expanded = true; + } + } + const itemId = this.accordionIds[index]; + item.setAttribute("id", typeof itemId !== "string" ? `accordion-${index + 1}` : itemId); + this.activeid = this.accordionIds[this.activeItemIndex]; + item.addEventListener("keydown", this.handleItemKeyDown); + item.addEventListener("focus", this.handleItemFocus); + }); + if (this.isSingleExpandMode()) { + const expandedItem = (_a = this.findExpandedItem()) !== null && _a !== void 0 ? _a : this.accordionItems[0]; + expandedItem.setAttribute("aria-disabled", "true"); + } + }; + this.removeItemListeners = (oldValue) => { + oldValue.forEach((item, index) => { + item.removeEventListener("change", this.activeItemChange); + item.removeEventListener("keydown", this.handleItemKeyDown); + item.removeEventListener("focus", this.handleItemFocus); + }); + }; + this.activeItemChange = (event) => { + if (event.defaultPrevented || event.target !== event.currentTarget) { + return; + } + event.preventDefault(); + const selectedItem = event.target; + this.activeid = selectedItem.getAttribute("id"); + if (this.isSingleExpandMode()) { + this.resetItems(); + selectedItem.expanded = true; + selectedItem.setAttribute("aria-disabled", "true"); + this.accordionItems.forEach((item) => { + if (!item.hasAttribute("disabled") && item.id !== this.activeid) { + item.removeAttribute("aria-disabled"); + } + }); + } + this.activeItemIndex = Array.from(this.accordionItems).indexOf(selectedItem); + this.change(); + }; + this.handleItemKeyDown = (event) => { + if (event.target !== event.currentTarget) { + return; + } + this.accordionIds = this.getItemIds(); + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjust(-1); + break; + case keyArrowDown: + event.preventDefault(); + this.adjust(1); + break; + case keyHome: + this.activeItemIndex = 0; + this.focusItem(); + break; + case keyEnd: + this.activeItemIndex = this.accordionItems.length - 1; + this.focusItem(); + break; + } + }; + this.handleItemFocus = (event) => { + if (event.target === event.currentTarget) { + const focusedItem = event.target; + const focusedIndex = this.activeItemIndex = Array.from(this.accordionItems).indexOf(focusedItem); + if (this.activeItemIndex !== focusedIndex && focusedIndex !== -1) { + this.activeItemIndex = focusedIndex; + this.activeid = this.accordionIds[this.activeItemIndex]; + } + } + }; + } + /** + * @internal + */ + accordionItemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.removeItemListeners(oldValue); + this.setItems(); + } + } + findExpandedItem() { + for (let item = 0; item < this.accordionItems.length; item++) { + if (this.accordionItems[item].getAttribute("expanded") === "true") { + return this.accordionItems[item]; + } + } + return null; + } + resetItems() { + this.accordionItems.forEach((item, index) => { + item.expanded = false; + }); + } + getItemIds() { + return this.accordionItems.map((accordionItem) => { + return accordionItem.getAttribute("id"); + }); + } + isSingleExpandMode() { + return this.expandmode === AccordionExpandMode.single; + } + adjust(adjustment) { + this.activeItemIndex = wrapInBounds(0, this.accordionItems.length - 1, this.activeItemIndex + adjustment); + this.focusItem(); + } + focusItem() { + const element = this.accordionItems[this.activeItemIndex]; + if (element instanceof AccordionItem) { + element.expandbutton.focus(); + } + } + }; + __decorate([ + attr({ attribute: "expand-mode" }) + ], Accordion.prototype, "expandmode", void 0); + __decorate([ + observable + ], Accordion.prototype, "accordionItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js + var init_accordion2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/accordion/index.js"() { + init_accordion_template(); + init_accordion(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js + var anchorTemplate; + var init_anchor_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.template.js"() { + init_esm(); + init_start_end(); + anchorTemplate = (context, definition) => html` + + ${startSlotTemplate(context, definition)} + + + + ${endSlotTemplate(context, definition)} + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js + var ARIAGlobalStatesAndProperties; + var init_aria_global = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/aria-global.js"() { + init_tslib_es6(); + init_esm(); + ARIAGlobalStatesAndProperties = class { + }; + __decorate([ + attr({ attribute: "aria-atomic" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaAtomic", void 0); + __decorate([ + attr({ attribute: "aria-busy" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaBusy", void 0); + __decorate([ + attr({ attribute: "aria-controls" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaControls", void 0); + __decorate([ + attr({ attribute: "aria-current" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaCurrent", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-details" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDetails", void 0); + __decorate([ + attr({ attribute: "aria-disabled" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaDisabled", void 0); + __decorate([ + attr({ attribute: "aria-errormessage" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaErrormessage", void 0); + __decorate([ + attr({ attribute: "aria-flowto" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaFlowto", void 0); + __decorate([ + attr({ attribute: "aria-haspopup" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHaspopup", void 0); + __decorate([ + attr({ attribute: "aria-hidden" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaHidden", void 0); + __decorate([ + attr({ attribute: "aria-invalid" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaInvalid", void 0); + __decorate([ + attr({ attribute: "aria-keyshortcuts" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaKeyshortcuts", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabel", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-live" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaLive", void 0); + __decorate([ + attr({ attribute: "aria-owns" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaOwns", void 0); + __decorate([ + attr({ attribute: "aria-relevant" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRelevant", void 0); + __decorate([ + attr({ attribute: "aria-roledescription" }) + ], ARIAGlobalStatesAndProperties.prototype, "ariaRoledescription", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js + var init_patterns = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/patterns/index.js"() { + init_aria_global(); + init_start_end(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js + var Anchor, DelegatesARIALink; + var init_anchor = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/anchor.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_patterns(); + init_apply_mixins(); + Anchor = class extends FoundationElement { + constructor() { + super(...arguments); + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + var _a2; + (_a2 = this.control) === null || _a2 === void 0 ? void 0 : _a2.focus(); + }; + } + }; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.handleUnsupportedDelegatesFocus(); + } + }; + __decorate([ + attr + ], Anchor.prototype, "download", void 0); + __decorate([ + attr + ], Anchor.prototype, "href", void 0); + __decorate([ + attr + ], Anchor.prototype, "hreflang", void 0); + __decorate([ + attr + ], Anchor.prototype, "ping", void 0); + __decorate([ + attr + ], Anchor.prototype, "referrerpolicy", void 0); + __decorate([ + attr + ], Anchor.prototype, "rel", void 0); + __decorate([ + attr + ], Anchor.prototype, "target", void 0); + __decorate([ + attr + ], Anchor.prototype, "type", void 0); + __decorate([ + observable + ], Anchor.prototype, "defaultSlottedContent", void 0); + DelegatesARIALink = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIALink.prototype, "ariaExpanded", void 0); + applyMixins(DelegatesARIALink, ARIAGlobalStatesAndProperties); + applyMixins(Anchor, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js + var init_anchor2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchor/index.js"() { + init_anchor_template(); + init_anchor(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js + var init_anchored_region_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js + var getDirection; + var init_direction = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/direction.js"() { + init_dist2(); + getDirection = (rootNode) => { + const dirNode = rootNode.closest("[dir]"); + return dirNode !== null && dirNode.dir === "rtl" ? Direction.rtl : Direction.ltr; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js + var IntersectionService; + var init_intersection_service = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/intersection-service.js"() { + init_esm(); + IntersectionService = class { + constructor() { + this.intersectionDetector = null; + this.observedElements = /* @__PURE__ */ new Map(); + this.requestPosition = (target, callback) => { + var _a; + if (this.intersectionDetector === null) { + return; + } + if (this.observedElements.has(target)) { + (_a = this.observedElements.get(target)) === null || _a === void 0 ? void 0 : _a.push(callback); + return; + } + this.observedElements.set(target, [callback]); + this.intersectionDetector.observe(target); + }; + this.cancelRequestPosition = (target, callback) => { + const callbacks = this.observedElements.get(target); + if (callbacks !== void 0) { + const callBackIndex = callbacks.indexOf(callback); + if (callBackIndex !== -1) { + callbacks.splice(callBackIndex, 1); + } + } + }; + this.initializeIntersectionDetector = () => { + if (!$global.IntersectionObserver) { + return; + } + this.intersectionDetector = new IntersectionObserver(this.handleIntersection, { + root: null, + rootMargin: "0px", + threshold: [0, 1] + }); + }; + this.handleIntersection = (entries) => { + if (this.intersectionDetector === null) { + return; + } + const pendingCallbacks = []; + const pendingCallbackParams = []; + entries.forEach((entry) => { + var _a; + (_a = this.intersectionDetector) === null || _a === void 0 ? void 0 : _a.unobserve(entry.target); + const thisElementCallbacks = this.observedElements.get(entry.target); + if (thisElementCallbacks !== void 0) { + thisElementCallbacks.forEach((callback) => { + let targetCallbackIndex = pendingCallbacks.indexOf(callback); + if (targetCallbackIndex === -1) { + targetCallbackIndex = pendingCallbacks.length; + pendingCallbacks.push(callback); + pendingCallbackParams.push([]); + } + pendingCallbackParams[targetCallbackIndex].push(entry); + }); + this.observedElements.delete(entry.target); + } + }); + pendingCallbacks.forEach((callback, index) => { + callback(pendingCallbackParams[index]); + }); + }; + this.initializeIntersectionDetector(); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js + var AnchoredRegion; + var init_anchored_region = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_direction(); + init_intersection_service(); + AnchoredRegion = class _AnchoredRegion extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.viewport = ""; + this.horizontalPositioningMode = "uncontrolled"; + this.horizontalDefaultPosition = "unset"; + this.horizontalViewportLock = false; + this.horizontalInset = false; + this.horizontalScaling = "content"; + this.verticalPositioningMode = "uncontrolled"; + this.verticalDefaultPosition = "unset"; + this.verticalViewportLock = false; + this.verticalInset = false; + this.verticalScaling = "content"; + this.fixedPlacement = false; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.initialLayoutComplete = false; + this.resizeDetector = null; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.pendingPositioningUpdate = false; + this.pendingReset = false; + this.currentDirection = Direction.ltr; + this.regionVisible = false; + this.forceUpdate = false; + this.updateThreshold = 0.5; + this.update = () => { + if (!this.pendingPositioningUpdate) { + this.requestPositionUpdates(); + } + }; + this.startObservers = () => { + this.stopObservers(); + if (this.anchorElement === null) { + return; + } + this.requestPositionUpdates(); + if (this.resizeDetector !== null) { + this.resizeDetector.observe(this.anchorElement); + this.resizeDetector.observe(this); + } + }; + this.requestPositionUpdates = () => { + if (this.anchorElement === null || this.pendingPositioningUpdate) { + return; + } + _AnchoredRegion.intersectionService.requestPosition(this, this.handleIntersection); + _AnchoredRegion.intersectionService.requestPosition(this.anchorElement, this.handleIntersection); + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.requestPosition(this.viewportElement, this.handleIntersection); + } + this.pendingPositioningUpdate = true; + }; + this.stopObservers = () => { + if (this.pendingPositioningUpdate) { + this.pendingPositioningUpdate = false; + _AnchoredRegion.intersectionService.cancelRequestPosition(this, this.handleIntersection); + if (this.anchorElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.anchorElement, this.handleIntersection); + } + if (this.viewportElement !== null) { + _AnchoredRegion.intersectionService.cancelRequestPosition(this.viewportElement, this.handleIntersection); + } + } + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + } + }; + this.getViewport = () => { + if (typeof this.viewport !== "string" || this.viewport === "") { + return document.documentElement; + } + return document.getElementById(this.viewport); + }; + this.getAnchor = () => { + return document.getElementById(this.anchor); + }; + this.handleIntersection = (entries) => { + if (!this.pendingPositioningUpdate) { + return; + } + this.pendingPositioningUpdate = false; + if (!this.applyIntersectionEntries(entries)) { + return; + } + this.updateLayout(); + }; + this.applyIntersectionEntries = (entries) => { + const regionEntry = entries.find((x) => x.target === this); + const anchorEntry = entries.find((x) => x.target === this.anchorElement); + const viewportEntry = entries.find((x) => x.target === this.viewportElement); + if (regionEntry === void 0 || viewportEntry === void 0 || anchorEntry === void 0) { + return false; + } + if (!this.regionVisible || this.forceUpdate || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0 || this.isRectDifferent(this.anchorRect, anchorEntry.boundingClientRect) || this.isRectDifferent(this.viewportRect, viewportEntry.boundingClientRect) || this.isRectDifferent(this.regionRect, regionEntry.boundingClientRect)) { + this.regionRect = regionEntry.boundingClientRect; + this.anchorRect = anchorEntry.boundingClientRect; + if (this.viewportElement === document.documentElement) { + this.viewportRect = new DOMRectReadOnly(viewportEntry.boundingClientRect.x + document.documentElement.scrollLeft, viewportEntry.boundingClientRect.y + document.documentElement.scrollTop, viewportEntry.boundingClientRect.width, viewportEntry.boundingClientRect.height); + } else { + this.viewportRect = viewportEntry.boundingClientRect; + } + this.updateRegionOffset(); + this.forceUpdate = false; + return true; + } + return false; + }; + this.updateRegionOffset = () => { + if (this.anchorRect && this.regionRect) { + this.baseHorizontalOffset = this.baseHorizontalOffset + (this.anchorRect.left - this.regionRect.left) + (this.translateX - this.baseHorizontalOffset); + this.baseVerticalOffset = this.baseVerticalOffset + (this.anchorRect.top - this.regionRect.top) + (this.translateY - this.baseVerticalOffset); + } + }; + this.isRectDifferent = (rectA, rectB) => { + if (Math.abs(rectA.top - rectB.top) > this.updateThreshold || Math.abs(rectA.right - rectB.right) > this.updateThreshold || Math.abs(rectA.bottom - rectB.bottom) > this.updateThreshold || Math.abs(rectA.left - rectB.left) > this.updateThreshold) { + return true; + } + return false; + }; + this.handleResize = (entries) => { + this.update(); + }; + this.reset = () => { + if (!this.pendingReset) { + return; + } + this.pendingReset = false; + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + if (this.viewportElement === null) { + this.viewportElement = this.getViewport(); + } + this.currentDirection = getDirection(this); + this.startObservers(); + }; + this.updateLayout = () => { + let desiredVerticalPosition = void 0; + let desiredHorizontalPosition = void 0; + if (this.horizontalPositioningMode !== "uncontrolled") { + const horizontalOptions = this.getPositioningOptions(this.horizontalInset); + if (this.horizontalDefaultPosition === "center") { + desiredHorizontalPosition = "center"; + } else if (this.horizontalDefaultPosition !== "unset") { + let dirCorrectedHorizontalDefaultPosition = this.horizontalDefaultPosition; + if (dirCorrectedHorizontalDefaultPosition === "start" || dirCorrectedHorizontalDefaultPosition === "end") { + const newDirection = getDirection(this); + if (newDirection !== this.currentDirection) { + this.currentDirection = newDirection; + this.initialize(); + return; + } + if (this.currentDirection === Direction.ltr) { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "left" : "right"; + } else { + dirCorrectedHorizontalDefaultPosition = dirCorrectedHorizontalDefaultPosition === "start" ? "right" : "left"; + } + } + switch (dirCorrectedHorizontalDefaultPosition) { + case "left": + desiredHorizontalPosition = this.horizontalInset ? "insetStart" : "start"; + break; + case "right": + desiredHorizontalPosition = this.horizontalInset ? "insetEnd" : "end"; + break; + } + } + const horizontalThreshold = this.horizontalThreshold !== void 0 ? this.horizontalThreshold : this.regionRect !== void 0 ? this.regionRect.width : 0; + const anchorLeft = this.anchorRect !== void 0 ? this.anchorRect.left : 0; + const anchorRight = this.anchorRect !== void 0 ? this.anchorRect.right : 0; + const anchorWidth = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + const viewportLeft = this.viewportRect !== void 0 ? this.viewportRect.left : 0; + const viewportRight = this.viewportRect !== void 0 ? this.viewportRect.right : 0; + if (desiredHorizontalPosition === void 0 || !(this.horizontalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredHorizontalPosition, anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) < horizontalThreshold) { + desiredHorizontalPosition = this.getAvailableSpace(horizontalOptions[0], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) > this.getAvailableSpace(horizontalOptions[1], anchorLeft, anchorRight, anchorWidth, viewportLeft, viewportRight) ? horizontalOptions[0] : horizontalOptions[1]; + } + } + if (this.verticalPositioningMode !== "uncontrolled") { + const verticalOptions = this.getPositioningOptions(this.verticalInset); + if (this.verticalDefaultPosition === "center") { + desiredVerticalPosition = "center"; + } else if (this.verticalDefaultPosition !== "unset") { + switch (this.verticalDefaultPosition) { + case "top": + desiredVerticalPosition = this.verticalInset ? "insetStart" : "start"; + break; + case "bottom": + desiredVerticalPosition = this.verticalInset ? "insetEnd" : "end"; + break; + } + } + const verticalThreshold = this.verticalThreshold !== void 0 ? this.verticalThreshold : this.regionRect !== void 0 ? this.regionRect.height : 0; + const anchorTop = this.anchorRect !== void 0 ? this.anchorRect.top : 0; + const anchorBottom = this.anchorRect !== void 0 ? this.anchorRect.bottom : 0; + const anchorHeight = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + const viewportTop = this.viewportRect !== void 0 ? this.viewportRect.top : 0; + const viewportBottom = this.viewportRect !== void 0 ? this.viewportRect.bottom : 0; + if (desiredVerticalPosition === void 0 || !(this.verticalPositioningMode === "locktodefault") && this.getAvailableSpace(desiredVerticalPosition, anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) < verticalThreshold) { + desiredVerticalPosition = this.getAvailableSpace(verticalOptions[0], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) > this.getAvailableSpace(verticalOptions[1], anchorTop, anchorBottom, anchorHeight, viewportTop, viewportBottom) ? verticalOptions[0] : verticalOptions[1]; + } + } + const nextPositionerDimension = this.getNextRegionDimension(desiredHorizontalPosition, desiredVerticalPosition); + const positionChanged = this.horizontalPosition !== desiredHorizontalPosition || this.verticalPosition !== desiredVerticalPosition; + this.setHorizontalPosition(desiredHorizontalPosition, nextPositionerDimension); + this.setVerticalPosition(desiredVerticalPosition, nextPositionerDimension); + this.updateRegionStyle(); + if (!this.initialLayoutComplete) { + this.initialLayoutComplete = true; + this.requestPositionUpdates(); + return; + } + if (!this.regionVisible) { + this.regionVisible = true; + this.style.removeProperty("pointer-events"); + this.style.removeProperty("opacity"); + this.classList.toggle("loaded", true); + this.$emit("loaded", this, { bubbles: false }); + } + this.updatePositionClasses(); + if (positionChanged) { + this.$emit("positionchange", this, { bubbles: false }); + } + }; + this.updateRegionStyle = () => { + this.style.width = this.regionWidth; + this.style.height = this.regionHeight; + this.style.transform = `translate(${this.translateX}px, ${this.translateY}px)`; + }; + this.updatePositionClasses = () => { + this.classList.toggle("top", this.verticalPosition === "start"); + this.classList.toggle("bottom", this.verticalPosition === "end"); + this.classList.toggle("inset-top", this.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.verticalPosition === "insetEnd"); + this.classList.toggle("vertical-center", this.verticalPosition === "center"); + this.classList.toggle("left", this.horizontalPosition === "start"); + this.classList.toggle("right", this.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.horizontalPosition === "insetEnd"); + this.classList.toggle("horizontal-center", this.horizontalPosition === "center"); + }; + this.setHorizontalPosition = (desiredHorizontalPosition, nextPositionerDimension) => { + if (desiredHorizontalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionWidth = 0; + switch (this.horizontalScaling) { + case "anchor": + case "fill": + nextRegionWidth = this.horizontalViewportLock ? this.viewportRect.width : nextPositionerDimension.width; + this.regionWidth = `${nextRegionWidth}px`; + break; + case "content": + nextRegionWidth = this.regionRect.width; + this.regionWidth = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredHorizontalPosition) { + case "start": + this.translateX = this.baseHorizontalOffset - nextRegionWidth; + if (this.horizontalViewportLock && this.anchorRect.left > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.right); + } + break; + case "insetStart": + this.translateX = this.baseHorizontalOffset - nextRegionWidth + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right > this.viewportRect.right) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.right); + } + break; + case "insetEnd": + this.translateX = this.baseHorizontalOffset; + if (this.horizontalViewportLock && this.anchorRect.left < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.left - this.viewportRect.left); + } + break; + case "end": + this.translateX = this.baseHorizontalOffset + this.anchorRect.width; + if (this.horizontalViewportLock && this.anchorRect.right < this.viewportRect.left) { + this.translateX = this.translateX - (this.anchorRect.right - this.viewportRect.left); + } + break; + case "center": + sizeDelta = (this.anchorRect.width - nextRegionWidth) / 2; + this.translateX = this.baseHorizontalOffset + sizeDelta; + if (this.horizontalViewportLock) { + const regionLeft = this.anchorRect.left + sizeDelta; + const regionRight = this.anchorRect.right - sizeDelta; + if (regionLeft < this.viewportRect.left && !(regionRight > this.viewportRect.right)) { + this.translateX = this.translateX - (regionLeft - this.viewportRect.left); + } else if (regionRight > this.viewportRect.right && !(regionLeft < this.viewportRect.left)) { + this.translateX = this.translateX - (regionRight - this.viewportRect.right); + } + } + break; + } + this.horizontalPosition = desiredHorizontalPosition; + }; + this.setVerticalPosition = (desiredVerticalPosition, nextPositionerDimension) => { + if (desiredVerticalPosition === void 0 || this.regionRect === void 0 || this.anchorRect === void 0 || this.viewportRect === void 0) { + return; + } + let nextRegionHeight = 0; + switch (this.verticalScaling) { + case "anchor": + case "fill": + nextRegionHeight = this.verticalViewportLock ? this.viewportRect.height : nextPositionerDimension.height; + this.regionHeight = `${nextRegionHeight}px`; + break; + case "content": + nextRegionHeight = this.regionRect.height; + this.regionHeight = "unset"; + break; + } + let sizeDelta = 0; + switch (desiredVerticalPosition) { + case "start": + this.translateY = this.baseVerticalOffset - nextRegionHeight; + if (this.verticalViewportLock && this.anchorRect.top > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.bottom); + } + break; + case "insetStart": + this.translateY = this.baseVerticalOffset - nextRegionHeight + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom > this.viewportRect.bottom) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.bottom); + } + break; + case "insetEnd": + this.translateY = this.baseVerticalOffset; + if (this.verticalViewportLock && this.anchorRect.top < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.top - this.viewportRect.top); + } + break; + case "end": + this.translateY = this.baseVerticalOffset + this.anchorRect.height; + if (this.verticalViewportLock && this.anchorRect.bottom < this.viewportRect.top) { + this.translateY = this.translateY - (this.anchorRect.bottom - this.viewportRect.top); + } + break; + case "center": + sizeDelta = (this.anchorRect.height - nextRegionHeight) / 2; + this.translateY = this.baseVerticalOffset + sizeDelta; + if (this.verticalViewportLock) { + const regionTop = this.anchorRect.top + sizeDelta; + const regionBottom = this.anchorRect.bottom - sizeDelta; + if (regionTop < this.viewportRect.top && !(regionBottom > this.viewportRect.bottom)) { + this.translateY = this.translateY - (regionTop - this.viewportRect.top); + } else if (regionBottom > this.viewportRect.bottom && !(regionTop < this.viewportRect.top)) { + this.translateY = this.translateY - (regionBottom - this.viewportRect.bottom); + } + } + } + this.verticalPosition = desiredVerticalPosition; + }; + this.getPositioningOptions = (inset) => { + if (inset) { + return ["insetStart", "insetEnd"]; + } + return ["start", "end"]; + }; + this.getAvailableSpace = (positionOption, anchorStart, anchorEnd, anchorSpan, viewportStart, viewportEnd) => { + const spaceStart = anchorStart - viewportStart; + const spaceEnd = viewportEnd - (anchorStart + anchorSpan); + switch (positionOption) { + case "start": + return spaceStart; + case "insetStart": + return spaceStart + anchorSpan; + case "insetEnd": + return spaceEnd + anchorSpan; + case "end": + return spaceEnd; + case "center": + return Math.min(spaceStart, spaceEnd) * 2 + anchorSpan; + } + }; + this.getNextRegionDimension = (desiredHorizontalPosition, desiredVerticalPosition) => { + const newRegionDimension = { + height: this.regionRect !== void 0 ? this.regionRect.height : 0, + width: this.regionRect !== void 0 ? this.regionRect.width : 0 + }; + if (desiredHorizontalPosition !== void 0 && this.horizontalScaling === "fill") { + newRegionDimension.width = this.getAvailableSpace(desiredHorizontalPosition, this.anchorRect !== void 0 ? this.anchorRect.left : 0, this.anchorRect !== void 0 ? this.anchorRect.right : 0, this.anchorRect !== void 0 ? this.anchorRect.width : 0, this.viewportRect !== void 0 ? this.viewportRect.left : 0, this.viewportRect !== void 0 ? this.viewportRect.right : 0); + } else if (this.horizontalScaling === "anchor") { + newRegionDimension.width = this.anchorRect !== void 0 ? this.anchorRect.width : 0; + } + if (desiredVerticalPosition !== void 0 && this.verticalScaling === "fill") { + newRegionDimension.height = this.getAvailableSpace(desiredVerticalPosition, this.anchorRect !== void 0 ? this.anchorRect.top : 0, this.anchorRect !== void 0 ? this.anchorRect.bottom : 0, this.anchorRect !== void 0 ? this.anchorRect.height : 0, this.viewportRect !== void 0 ? this.viewportRect.top : 0, this.viewportRect !== void 0 ? this.viewportRect.bottom : 0); + } else if (this.verticalScaling === "anchor") { + newRegionDimension.height = this.anchorRect !== void 0 ? this.anchorRect.height : 0; + } + return newRegionDimension; + }; + this.startAutoUpdateEventListeners = () => { + window.addEventListener(eventResize, this.update, { passive: true }); + window.addEventListener(eventScroll, this.update, { + passive: true, + capture: true + }); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.observe(this.viewportElement); + } + }; + this.stopAutoUpdateEventListeners = () => { + window.removeEventListener(eventResize, this.update); + window.removeEventListener(eventScroll, this.update); + if (this.resizeDetector !== null && this.viewportElement !== null) { + this.resizeDetector.unobserve(this.viewportElement); + } + }; + } + anchorChanged() { + if (this.initialLayoutComplete) { + this.anchorElement = this.getAnchor(); + } + } + viewportChanged() { + if (this.initialLayoutComplete) { + this.viewportElement = this.getViewport(); + } + } + horizontalPositioningModeChanged() { + this.requestReset(); + } + horizontalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + horizontalViewportLockChanged() { + this.updateForAttributeChange(); + } + horizontalInsetChanged() { + this.updateForAttributeChange(); + } + horizontalThresholdChanged() { + this.updateForAttributeChange(); + } + horizontalScalingChanged() { + this.updateForAttributeChange(); + } + verticalPositioningModeChanged() { + this.requestReset(); + } + verticalDefaultPositionChanged() { + this.updateForAttributeChange(); + } + verticalViewportLockChanged() { + this.updateForAttributeChange(); + } + verticalInsetChanged() { + this.updateForAttributeChange(); + } + verticalThresholdChanged() { + this.updateForAttributeChange(); + } + verticalScalingChanged() { + this.updateForAttributeChange(); + } + fixedPlacementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + autoUpdateModeChanged(prevMode, newMode) { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + if (prevMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + if (newMode === "auto") { + this.startAutoUpdateEventListeners(); + } + } + } + anchorElementChanged() { + this.requestReset(); + } + viewportElementChanged() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.initialize(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.autoUpdateMode === "auto") { + this.startAutoUpdateEventListeners(); + } + this.initialize(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + if (this.autoUpdateMode === "auto") { + this.stopAutoUpdateEventListeners(); + } + this.stopObservers(); + this.disconnectResizeDetector(); + } + /** + * @internal + */ + adoptedCallback() { + this.initialize(); + } + /** + * destroys the instance's resize observer + */ + disconnectResizeDetector() { + if (this.resizeDetector !== null) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.handleResize); + } + /** + * react to attribute changes that don't require a reset + */ + updateForAttributeChange() { + if (this.$fastController.isConnected && this.initialLayoutComplete) { + this.forceUpdate = true; + this.update(); + } + } + /** + * fully initializes the component + */ + initialize() { + this.initializeResizeDetector(); + if (this.anchorElement === null) { + this.anchorElement = this.getAnchor(); + } + this.requestReset(); + } + /** + * Request a reset if there are currently no open requests + */ + requestReset() { + if (this.$fastController.isConnected && this.pendingReset === false) { + this.setInitialState(); + DOM.queueUpdate(() => this.reset()); + this.pendingReset = true; + } + } + /** + * sets the starting configuration for component internal values + */ + setInitialState() { + this.initialLayoutComplete = false; + this.regionVisible = false; + this.translateX = 0; + this.translateY = 0; + this.baseHorizontalOffset = 0; + this.baseVerticalOffset = 0; + this.viewportRect = void 0; + this.regionRect = void 0; + this.anchorRect = void 0; + this.verticalPosition = void 0; + this.horizontalPosition = void 0; + this.style.opacity = "0"; + this.style.pointerEvents = "none"; + this.forceUpdate = false; + this.style.position = this.fixedPlacement ? "fixed" : "absolute"; + this.updatePositionClasses(); + this.updateRegionStyle(); + } + }; + AnchoredRegion.intersectionService = new IntersectionService(); + __decorate([ + attr + ], AnchoredRegion.prototype, "anchor", void 0); + __decorate([ + attr + ], AnchoredRegion.prototype, "viewport", void 0); + __decorate([ + attr({ attribute: "horizontal-positioning-mode" }) + ], AnchoredRegion.prototype, "horizontalPositioningMode", void 0); + __decorate([ + attr({ attribute: "horizontal-default-position" }) + ], AnchoredRegion.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "horizontal-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "horizontalInset", void 0); + __decorate([ + attr({ attribute: "horizontal-threshold" }) + ], AnchoredRegion.prototype, "horizontalThreshold", void 0); + __decorate([ + attr({ attribute: "horizontal-scaling" }) + ], AnchoredRegion.prototype, "horizontalScaling", void 0); + __decorate([ + attr({ attribute: "vertical-positioning-mode" }) + ], AnchoredRegion.prototype, "verticalPositioningMode", void 0); + __decorate([ + attr({ attribute: "vertical-default-position" }) + ], AnchoredRegion.prototype, "verticalDefaultPosition", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-inset", mode: "boolean" }) + ], AnchoredRegion.prototype, "verticalInset", void 0); + __decorate([ + attr({ attribute: "vertical-threshold" }) + ], AnchoredRegion.prototype, "verticalThreshold", void 0); + __decorate([ + attr({ attribute: "vertical-scaling" }) + ], AnchoredRegion.prototype, "verticalScaling", void 0); + __decorate([ + attr({ attribute: "fixed-placement", mode: "boolean" }) + ], AnchoredRegion.prototype, "fixedPlacement", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], AnchoredRegion.prototype, "autoUpdateMode", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "anchorElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "viewportElement", void 0); + __decorate([ + observable + ], AnchoredRegion.prototype, "initialLayoutComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js + var horizontalAnchorOverlay, FlyoutPosTop, FlyoutPosBottom, FlyoutPosTallest, FlyoutPosTopFill, FlyoutPosBottomFill, FlyoutPosTallestFill; + var init_anchored_region_config = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/anchored-region-config.js"() { + horizontalAnchorOverlay = { + horizontalDefaultPosition: "center", + horizontalPositioningMode: "locktodefault", + horizontalInset: false, + horizontalScaling: "anchor" + }; + FlyoutPosTop = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "top", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosBottom = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalDefaultPosition: "bottom", verticalPositioningMode: "locktodefault", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTallest = Object.assign(Object.assign({}, horizontalAnchorOverlay), { verticalPositioningMode: "dynamic", verticalInset: false, verticalScaling: "content" }); + FlyoutPosTopFill = Object.assign(Object.assign({}, FlyoutPosTop), { verticalScaling: "fill" }); + FlyoutPosBottomFill = Object.assign(Object.assign({}, FlyoutPosBottom), { verticalScaling: "fill" }); + FlyoutPosTallestFill = Object.assign(Object.assign({}, FlyoutPosTallest), { verticalScaling: "fill" }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js + var init_anchored_region2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/anchored-region/index.js"() { + init_anchored_region_template(); + init_anchored_region(); + init_anchored_region_config(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js + var init_avatar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js + var Avatar; + var init_avatar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/avatar.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Avatar = class extends FoundationElement { + /** + * Internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.shape) { + this.shape = "circle"; + } + } + }; + __decorate([ + attr + ], Avatar.prototype, "fill", void 0); + __decorate([ + attr + ], Avatar.prototype, "color", void 0); + __decorate([ + attr + ], Avatar.prototype, "link", void 0); + __decorate([ + attr + ], Avatar.prototype, "shape", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js + var init_avatar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/avatar/index.js"() { + init_avatar_template(); + init_avatar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js + var badgeTemplate; + var init_badge_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.template.js"() { + init_esm(); + badgeTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js + var Badge; + var init_badge = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/badge.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Badge = class extends FoundationElement { + constructor() { + super(...arguments); + this.generateBadgeStyle = () => { + if (!this.fill && !this.color) { + return; + } + const fill = `background-color: var(--badge-fill-${this.fill});`; + const color = `color: var(--badge-color-${this.color});`; + if (this.fill && !this.color) { + return fill; + } else if (this.color && !this.fill) { + return color; + } else { + return `${color} ${fill}`; + } + }; + } + }; + __decorate([ + attr({ attribute: "fill" }) + ], Badge.prototype, "fill", void 0); + __decorate([ + attr({ attribute: "color" }) + ], Badge.prototype, "color", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Badge.prototype, "circular", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js + var init_badge2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/badge/index.js"() { + init_badge_template(); + init_badge(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js + var init_breadcrumb_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js + var BreadcrumbItem; + var init_breadcrumb_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/breadcrumb-item.js"() { + init_tslib_es6(); + init_esm(); + init_anchor(); + init_patterns(); + init_apply_mixins(); + BreadcrumbItem = class extends Anchor { + constructor() { + super(...arguments); + this.separator = true; + } + }; + __decorate([ + observable + ], BreadcrumbItem.prototype, "separator", void 0); + applyMixins(BreadcrumbItem, StartEnd, DelegatesARIALink); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js + var init_breadcrumb_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb-item/index.js"() { + init_breadcrumb_item_template(); + init_breadcrumb_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js + var init_breadcrumb_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js + var Breadcrumb; + var init_breadcrumb = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/breadcrumb.js"() { + init_tslib_es6(); + init_esm(); + init_breadcrumb_item(); + init_foundation_element(); + Breadcrumb = class extends FoundationElement { + slottedBreadcrumbItemsChanged() { + if (this.$fastController.isConnected) { + if (this.slottedBreadcrumbItems === void 0 || this.slottedBreadcrumbItems.length === 0) { + return; + } + const lastNode = this.slottedBreadcrumbItems[this.slottedBreadcrumbItems.length - 1]; + this.slottedBreadcrumbItems.forEach((item) => { + const itemIsLastNode = item === lastNode; + this.setItemSeparator(item, itemIsLastNode); + this.setAriaCurrent(item, itemIsLastNode); + }); + } + } + setItemSeparator(item, isLastNode) { + if (item instanceof BreadcrumbItem) { + item.separator = !isLastNode; + } + } + /** + * Finds href on childnodes in the light DOM or shadow DOM. + * We look in the shadow DOM because we insert an anchor when breadcrumb-item has an href. + */ + findChildWithHref(node) { + var _a, _b; + if (node.childElementCount > 0) { + return node.querySelector("a[href]"); + } else if ((_a = node.shadowRoot) === null || _a === void 0 ? void 0 : _a.childElementCount) { + return (_b = node.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector("a[href]"); + } else + return null; + } + /** + * Sets ARIA Current for the current node + * If child node with an anchor tag and with href is found then set aria-current to correct value for the child node, + * otherwise apply aria-current to the host element, with an href + */ + setAriaCurrent(item, isLastNode) { + const childNodeWithHref = this.findChildWithHref(item); + if (childNodeWithHref === null && item.hasAttribute("href") && item instanceof BreadcrumbItem) { + isLastNode ? item.setAttribute("aria-current", "page") : item.removeAttribute("aria-current"); + } else if (childNodeWithHref !== null) { + isLastNode ? childNodeWithHref.setAttribute("aria-current", "page") : childNodeWithHref.removeAttribute("aria-current"); + } + } + }; + __decorate([ + observable + ], Breadcrumb.prototype, "slottedBreadcrumbItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js + var init_breadcrumb2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/breadcrumb/index.js"() { + init_breadcrumb_template(); + init_breadcrumb(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js + var buttonTemplate; + var init_button_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.template.js"() { + init_esm(); + init_start_end(); + buttonTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js + function FormAssociated(BaseCtor) { + const C = class extends BaseCtor { + constructor(...args) { + super(...args); + this.dirtyValue = false; + this.disabled = false; + this.proxyEventsToBlock = ["change", "click"]; + this.proxyInitialized = false; + this.required = false; + this.initialValue = this.initialValue || ""; + if (!this.elementInternals) { + this.formResetCallback = this.formResetCallback.bind(this); + } + } + /** + * Must evaluate to true to enable elementInternals. + * Feature detects API support and resolve respectively + * + * @internal + */ + static get formAssociated() { + return supportsElementInternals; + } + /** + * Returns the validity state of the element + * + * @alpha + */ + get validity() { + return this.elementInternals ? this.elementInternals.validity : this.proxy.validity; + } + /** + * Retrieve a reference to the associated form. + * Returns null if not associated to any form. + * + * @alpha + */ + get form() { + return this.elementInternals ? this.elementInternals.form : this.proxy.form; + } + /** + * Retrieve the localized validation message, + * or custom validation message if set. + * + * @alpha + */ + get validationMessage() { + return this.elementInternals ? this.elementInternals.validationMessage : this.proxy.validationMessage; + } + /** + * Whether the element will be validated when the + * form is submitted + */ + get willValidate() { + return this.elementInternals ? this.elementInternals.willValidate : this.proxy.willValidate; + } + /** + * A reference to all associated label elements + */ + get labels() { + if (this.elementInternals) { + return Object.freeze(Array.from(this.elementInternals.labels)); + } else if (this.proxy instanceof HTMLElement && this.proxy.ownerDocument && this.id) { + const parentLabels = this.proxy.labels; + const forLabels = Array.from(this.proxy.getRootNode().querySelectorAll(`[for='${this.id}']`)); + const labels = parentLabels ? forLabels.concat(Array.from(parentLabels)) : forLabels; + return Object.freeze(labels); + } else { + return emptyArray; + } + } + /** + * Invoked when the `value` property changes + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `valueChanged` method + * They must be sure to invoke `super.valueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + valueChanged(previous, next) { + this.dirtyValue = true; + if (this.proxy instanceof HTMLElement) { + this.proxy.value = this.value; + } + this.currentValue = this.value; + this.setFormValue(this.value); + this.validate(); + } + currentValueChanged() { + this.value = this.currentValue; + } + /** + * Invoked when the `initialValue` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `initialValueChanged` method + * They must be sure to invoke `super.initialValueChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + /** + * Invoked when the `disabled` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `disabledChanged` method + * They must be sure to invoke `super.disabledChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + disabledChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.disabled = this.disabled; + } + DOM.queueUpdate(() => this.classList.toggle("disabled", this.disabled)); + } + /** + * Invoked when the `name` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `nameChanged` method + * They must be sure to invoke `super.nameChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + nameChanged(previous, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.name = this.name; + } + } + /** + * Invoked when the `required` property changes + * + * @param previous - the previous value + * @param next - the new value + * + * @remarks + * If elements extending `FormAssociated` implement a `requiredChanged` method + * They must be sure to invoke `super.requiredChanged(previous, next)` to ensure + * proper functioning of `FormAssociated` + */ + requiredChanged(prev, next) { + if (this.proxy instanceof HTMLElement) { + this.proxy.required = this.required; + } + DOM.queueUpdate(() => this.classList.toggle("required", this.required)); + this.validate(); + } + /** + * The element internals object. Will only exist + * in browsers supporting the attachInternals API + */ + get elementInternals() { + if (!supportsElementInternals) { + return null; + } + let internals = InternalsMap.get(this); + if (!internals) { + internals = this.attachInternals(); + InternalsMap.set(this, internals); + } + return internals; + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("keypress", this._keypressHandler); + if (!this.value) { + this.value = this.initialValue; + this.dirtyValue = false; + } + if (!this.elementInternals) { + this.attachProxy(); + if (this.form) { + this.form.addEventListener("reset", this.formResetCallback); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.proxyEventsToBlock.forEach((name) => this.proxy.removeEventListener(name, this.stopPropagation)); + if (!this.elementInternals && this.form) { + this.form.removeEventListener("reset", this.formResetCallback); + } + } + /** + * Return the current validity of the element. + */ + checkValidity() { + return this.elementInternals ? this.elementInternals.checkValidity() : this.proxy.checkValidity(); + } + /** + * Return the current validity of the element. + * If false, fires an invalid event at the element. + */ + reportValidity() { + return this.elementInternals ? this.elementInternals.reportValidity() : this.proxy.reportValidity(); + } + /** + * Set the validity of the control. In cases when the elementInternals object is not + * available (and the proxy element is used to report validity), this function will + * do nothing unless a message is provided, at which point the setCustomValidity method + * of the proxy element will be invoked with the provided message. + * @param flags - Validity flags + * @param message - Optional message to supply + * @param anchor - Optional element used by UA to display an interactive validation UI + */ + setValidity(flags, message, anchor) { + if (this.elementInternals) { + this.elementInternals.setValidity(flags, message, anchor); + } else if (typeof message === "string") { + this.proxy.setCustomValidity(message); + } + } + /** + * Invoked when a connected component's form or fieldset has its disabled + * state changed. + * @param disabled - the disabled value of the form / fieldset + */ + formDisabledCallback(disabled) { + this.disabled = disabled; + } + formResetCallback() { + this.value = this.initialValue; + this.dirtyValue = false; + } + /** + * Attach the proxy element to the DOM + */ + attachProxy() { + var _a; + if (!this.proxyInitialized) { + this.proxyInitialized = true; + this.proxy.style.display = "none"; + this.proxyEventsToBlock.forEach((name) => this.proxy.addEventListener(name, this.stopPropagation)); + this.proxy.disabled = this.disabled; + this.proxy.required = this.required; + if (typeof this.name === "string") { + this.proxy.name = this.name; + } + if (typeof this.value === "string") { + this.proxy.value = this.value; + } + this.proxy.setAttribute("slot", proxySlotName); + this.proxySlot = document.createElement("slot"); + this.proxySlot.setAttribute("name", proxySlotName); + } + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(this.proxySlot); + this.appendChild(this.proxy); + } + /** + * Detach the proxy element from the DOM + */ + detachProxy() { + var _a; + this.removeChild(this.proxy); + (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.removeChild(this.proxySlot); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate(anchor) { + if (this.proxy instanceof HTMLElement) { + this.setValidity(this.proxy.validity, this.proxy.validationMessage, anchor); + } + } + /** + * Associates the provided value (and optional state) with the parent form. + * @param value - The value to set + * @param state - The state object provided to during session restores and when autofilling. + */ + setFormValue(value, state) { + if (this.elementInternals) { + this.elementInternals.setFormValue(value, state || value); + } + } + _keypressHandler(e) { + switch (e.key) { + case keyEnter: + if (this.form instanceof HTMLFormElement) { + const defaultButton = this.form.querySelector("[type=submit]"); + defaultButton === null || defaultButton === void 0 ? void 0 : defaultButton.click(); + } + break; + } + } + /** + * Used to stop propagation of proxy element events + * @param e - Event object + */ + stopPropagation(e) { + e.stopPropagation(); + } + }; + attr({ mode: "boolean" })(C.prototype, "disabled"); + attr({ mode: "fromView", attribute: "value" })(C.prototype, "initialValue"); + attr({ attribute: "current-value" })(C.prototype, "currentValue"); + attr(C.prototype, "name"); + attr({ mode: "boolean" })(C.prototype, "required"); + observable(C.prototype, "value"); + return C; + } + function CheckableFormAssociated(BaseCtor) { + class C extends FormAssociated(BaseCtor) { + } + class D extends C { + constructor(...args) { + super(args); + this.dirtyChecked = false; + this.checkedAttribute = false; + this.checked = false; + this.dirtyChecked = false; + } + checkedAttributeChanged() { + this.defaultChecked = this.checkedAttribute; + } + /** + * @internal + */ + defaultCheckedChanged() { + if (!this.dirtyChecked) { + this.checked = this.defaultChecked; + this.dirtyChecked = false; + } + } + checkedChanged(prev, next) { + if (!this.dirtyChecked) { + this.dirtyChecked = true; + } + this.currentChecked = this.checked; + this.updateForm(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.checked = this.checked; + } + if (prev !== void 0) { + this.$emit("change"); + } + this.validate(); + } + currentCheckedChanged(prev, next) { + this.checked = this.currentChecked; + } + updateForm() { + const value = this.checked ? this.value : null; + this.setFormValue(value, value); + } + connectedCallback() { + super.connectedCallback(); + this.updateForm(); + } + formResetCallback() { + super.formResetCallback(); + this.checked = !!this.checkedAttribute; + this.dirtyChecked = false; + } + } + attr({ attribute: "checked", mode: "boolean" })(D.prototype, "checkedAttribute"); + attr({ attribute: "current-checked", converter: booleanConverter })(D.prototype, "currentChecked"); + observable(D.prototype, "defaultChecked"); + observable(D.prototype, "checked"); + return D; + } + var proxySlotName, ElementInternalsKey, supportsElementInternals, InternalsMap; + var init_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/form-associated.js"() { + init_esm(); + init_dist2(); + proxySlotName = "form-associated-proxy"; + ElementInternalsKey = "ElementInternals"; + supportsElementInternals = ElementInternalsKey in window && "setFormValue" in window[ElementInternalsKey].prototype; + InternalsMap = /* @__PURE__ */ new WeakMap(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js + var _Button, FormAssociatedButton; + var init_button_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Button = class extends FoundationElement { + }; + FormAssociatedButton = class extends FormAssociated(_Button) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/button.js + var Button, DelegatesARIAButton; + var init_button = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/button.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_button_form_associated(); + Button = class extends FormAssociatedButton { + constructor() { + super(...arguments); + this.handleClick = (e) => { + var _a; + if (this.disabled && ((_a = this.defaultSlottedContent) === null || _a === void 0 ? void 0 : _a.length) <= 1) { + e.stopPropagation(); + } + }; + this.handleSubmission = () => { + if (!this.form) { + return; + } + const attached = this.proxy.isConnected; + if (!attached) { + this.attachProxy(); + } + typeof this.form.requestSubmit === "function" ? this.form.requestSubmit(this.proxy) : this.proxy.click(); + if (!attached) { + this.detachProxy(); + } + }; + this.handleFormReset = () => { + var _a; + (_a = this.form) === null || _a === void 0 ? void 0 : _a.reset(); + }; + this.handleUnsupportedDelegatesFocus = () => { + var _a; + if (window.ShadowRoot && !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") && ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) { + this.focus = () => { + this.control.focus(); + }; + } + }; + } + formactionChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formAction = this.formaction; + } + } + formenctypeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formEnctype = this.formenctype; + } + } + formmethodChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formMethod = this.formmethod; + } + } + formnovalidateChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formNoValidate = this.formnovalidate; + } + } + formtargetChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.formTarget = this.formtarget; + } + } + typeChanged(previous, next) { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + } + next === "submit" && this.addEventListener("click", this.handleSubmission); + previous === "submit" && this.removeEventListener("click", this.handleSubmission); + next === "reset" && this.addEventListener("click", this.handleFormReset); + previous === "reset" && this.removeEventListener("click", this.handleFormReset); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.handleUnsupportedDelegatesFocus(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.addEventListener("click", this.handleClick); + }); + } + } + /** + * @internal + */ + disconnectedCallback() { + var _a; + super.disconnectedCallback(); + const elements2 = Array.from((_a = this.control) === null || _a === void 0 ? void 0 : _a.children); + if (elements2) { + elements2.forEach((span) => { + span.removeEventListener("click", this.handleClick); + }); + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], Button.prototype, "formId", void 0); + __decorate([ + attr + ], Button.prototype, "formaction", void 0); + __decorate([ + attr + ], Button.prototype, "formenctype", void 0); + __decorate([ + attr + ], Button.prototype, "formmethod", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Button.prototype, "formnovalidate", void 0); + __decorate([ + attr + ], Button.prototype, "formtarget", void 0); + __decorate([ + attr + ], Button.prototype, "type", void 0); + __decorate([ + observable + ], Button.prototype, "defaultSlottedContent", void 0); + DelegatesARIAButton = class { + }; + __decorate([ + attr({ attribute: "aria-expanded" }) + ], DelegatesARIAButton.prototype, "ariaExpanded", void 0); + __decorate([ + attr({ attribute: "aria-pressed" }) + ], DelegatesARIAButton.prototype, "ariaPressed", void 0); + applyMixins(DelegatesARIAButton, ARIAGlobalStatesAndProperties); + applyMixins(Button, StartEnd, DelegatesARIAButton); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/button/index.js + var init_button2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/button/index.js"() { + init_button_template(); + init_button(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js + var DateFormatter; + var init_date_formatter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/date-formatter.js"() { + DateFormatter = class { + constructor(config) { + this.dayFormat = "numeric"; + this.weekdayFormat = "long"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.date = /* @__PURE__ */ new Date(); + if (config) { + for (const key in config) { + const value = config[key]; + if (key === "date") { + this.date = this.getDateObject(value); + } else { + this[key] = value; + } + } + } + } + /** + * Helper function to make sure that the DateFormatter is working with an instance of Date + * @param date - The date as an object, string or Date insance + * @returns - A Date instance + * @public + */ + getDateObject(date) { + if (typeof date === "string") { + const dates = date.split(/[/-]/); + if (dates.length < 3) { + return /* @__PURE__ */ new Date(); + } + return new Date(parseInt(dates[2], 10), parseInt(dates[0], 10) - 1, parseInt(dates[1], 10)); + } else if ("day" in date && "month" in date && "year" in date) { + const { day, month, year } = date; + return new Date(year, month - 1, day); + } + return date; + } + /** + * + * @param date - a valide date as either a Date, string, objec or a DateFormatter + * @param format - The formatting for the string + * @param locale - locale data used for formatting + * @returns A localized string of the date provided + * @public + */ + getDate(date = this.date, format = { + weekday: this.weekdayFormat, + month: this.monthFormat, + day: this.dayFormat, + year: this.yearFormat + }, locale = this.locale) { + const dateObj = this.getDateObject(date); + if (!dateObj.getTime()) { + return ""; + } + const optionsWithTimeZone = Object.assign({ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }, format); + return new Intl.DateTimeFormat(locale, optionsWithTimeZone).format(dateObj); + } + /** + * + * @param day - Day to localize + * @param format - The formatting for the day + * @param locale - The locale data used for formatting + * @returns - A localized number for the day + * @public + */ + getDay(day = this.date.getDate(), format = this.dayFormat, locale = this.locale) { + return this.getDate({ month: 1, day, year: 2020 }, { day: format }, locale); + } + /** + * + * @param month - The month to localize + * @param format - The formatting for the month + * @param locale - The locale data used for formatting + * @returns - A localized name of the month + * @public + */ + getMonth(month = this.date.getMonth() + 1, format = this.monthFormat, locale = this.locale) { + return this.getDate({ month, day: 2, year: 2020 }, { month: format }, locale); + } + /** + * + * @param year - The year to localize + * @param format - The formatting for the year + * @param locale - The locale data used for formatting + * @returns - A localized string for the year + * @public + */ + getYear(year = this.date.getFullYear(), format = this.yearFormat, locale = this.locale) { + return this.getDate({ month: 2, day: 2, year }, { year: format }, locale); + } + /** + * + * @param weekday - The number of the weekday, defaults to Sunday + * @param format - The formatting for the weekday label + * @param locale - The locale data used for formatting + * @returns - A formatted weekday label + * @public + */ + getWeekday(weekday = 0, format = this.weekdayFormat, locale = this.locale) { + const date = `1-${weekday + 1}-2017`; + return this.getDate(date, { weekday: format }, locale); + } + /** + * + * @param format - The formatting for the weekdays + * @param locale - The locale data used for formatting + * @returns - An array of the weekday labels + * @public + */ + getWeekdays(format = this.weekdayFormat, locale = this.locale) { + return Array(7).fill(null).map((_, day) => this.getWeekday(day, format, locale)); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js + var Calendar; + var init_calendar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_date_formatter(); + Calendar = class extends FoundationElement { + constructor() { + super(...arguments); + this.dateFormatter = new DateFormatter(); + this.readonly = false; + this.locale = "en-US"; + this.month = (/* @__PURE__ */ new Date()).getMonth() + 1; + this.year = (/* @__PURE__ */ new Date()).getFullYear(); + this.dayFormat = "numeric"; + this.weekdayFormat = "short"; + this.monthFormat = "long"; + this.yearFormat = "numeric"; + this.minWeeks = 0; + this.disabledDates = ""; + this.selectedDates = ""; + this.oneDayInMs = 864e5; + } + localeChanged() { + this.dateFormatter.locale = this.locale; + } + dayFormatChanged() { + this.dateFormatter.dayFormat = this.dayFormat; + } + weekdayFormatChanged() { + this.dateFormatter.weekdayFormat = this.weekdayFormat; + } + monthFormatChanged() { + this.dateFormatter.monthFormat = this.monthFormat; + } + yearFormatChanged() { + this.dateFormatter.yearFormat = this.yearFormat; + } + /** + * Gets data needed to render about a calendar month as well as the previous and next months + * @param year - year of the calendar + * @param month - month of the calendar + * @returns - an object with data about the current and 2 surrounding months + * @public + */ + getMonthInfo(month = this.month, year = this.year) { + const getFirstDay = (date) => new Date(date.getFullYear(), date.getMonth(), 1).getDay(); + const getLength = (date) => { + const nextMonth2 = new Date(date.getFullYear(), date.getMonth() + 1, 1); + return new Date(nextMonth2.getTime() - this.oneDayInMs).getDate(); + }; + const thisMonth = new Date(year, month - 1); + const nextMonth = new Date(year, month); + const previousMonth = new Date(year, month - 2); + return { + length: getLength(thisMonth), + month, + start: getFirstDay(thisMonth), + year, + previous: { + length: getLength(previousMonth), + month: previousMonth.getMonth() + 1, + start: getFirstDay(previousMonth), + year: previousMonth.getFullYear() + }, + next: { + length: getLength(nextMonth), + month: nextMonth.getMonth() + 1, + start: getFirstDay(nextMonth), + year: nextMonth.getFullYear() + } + }; + } + /** + * A list of calendar days + * @param info - an object containing the information needed to render a calendar month + * @param minWeeks - minimum number of weeks to show + * @returns a list of days in a calendar month + * @public + */ + getDays(info = this.getMonthInfo(), minWeeks = this.minWeeks) { + minWeeks = minWeeks > 10 ? 10 : minWeeks; + const { start, length, previous, next } = info; + const days = []; + let dayCount = 1 - start; + while (dayCount < length + 1 || days.length < minWeeks || days[days.length - 1].length % 7 !== 0) { + const { month, year } = dayCount < 1 ? previous : dayCount > length ? next : info; + const day = dayCount < 1 ? previous.length + dayCount : dayCount > length ? dayCount - length : dayCount; + const dateString = `${month}-${day}-${year}`; + const disabled = this.dateInString(dateString, this.disabledDates); + const selected = this.dateInString(dateString, this.selectedDates); + const date = { + day, + month, + year, + disabled, + selected + }; + const target = days[days.length - 1]; + if (days.length === 0 || target.length % 7 === 0) { + days.push([date]); + } else { + target.push(date); + } + dayCount++; + } + return days; + } + /** + * A helper function that checks if a date exists in a list of dates + * @param date - A date objec that includes the day, month and year + * @param datesString - a comma separated list of dates + * @returns - Returns true if it found the date in the list of dates + * @public + */ + dateInString(date, datesString) { + const dates = datesString.split(",").map((str) => str.trim()); + date = typeof date === "string" ? date : `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`; + return dates.some((d) => d === date); + } + /** + * Creates a class string for the day container + * @param date - date of the calendar cell + * @returns - string of class names + * @public + */ + getDayClassNames(date, todayString) { + const { day, month, year, disabled, selected } = date; + const today = todayString === `${month}-${day}-${year}`; + const inactive = this.month !== month; + return [ + "day", + today && "today", + inactive && "inactive", + disabled && "disabled", + selected && "selected" + ].filter(Boolean).join(" "); + } + /** + * Returns a list of weekday labels + * @returns An array of weekday text and full text if abbreviated + * @public + */ + getWeekdayText() { + const weekdayText = this.dateFormatter.getWeekdays().map((text) => ({ text })); + if (this.weekdayFormat !== "long") { + const longText = this.dateFormatter.getWeekdays("long"); + weekdayText.forEach((weekday, index) => { + weekday.abbr = longText[index]; + }); + } + return weekdayText; + } + /** + * Emits the "date-select" event with the day, month and year. + * @param date - Date cell + * @public + */ + handleDateSelect(event, day) { + event.preventDefault; + this.$emit("dateselected", day); + } + /** + * Handles keyboard events on a cell + * @param event - Keyboard event + * @param date - Date of the cell selected + */ + handleKeydown(event, date) { + if (event.key === keyEnter) { + this.handleDateSelect(event, date); + } + return true; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Calendar.prototype, "readonly", void 0); + __decorate([ + attr + ], Calendar.prototype, "locale", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "month", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Calendar.prototype, "year", void 0); + __decorate([ + attr({ attribute: "day-format", mode: "fromView" }) + ], Calendar.prototype, "dayFormat", void 0); + __decorate([ + attr({ attribute: "weekday-format", mode: "fromView" }) + ], Calendar.prototype, "weekdayFormat", void 0); + __decorate([ + attr({ attribute: "month-format", mode: "fromView" }) + ], Calendar.prototype, "monthFormat", void 0); + __decorate([ + attr({ attribute: "year-format", mode: "fromView" }) + ], Calendar.prototype, "yearFormat", void 0); + __decorate([ + attr({ attribute: "min-weeks", converter: nullableNumberConverter }) + ], Calendar.prototype, "minWeeks", void 0); + __decorate([ + attr({ attribute: "disabled-dates" }) + ], Calendar.prototype, "disabledDates", void 0); + __decorate([ + attr({ attribute: "selected-dates" }) + ], Calendar.prototype, "selectedDates", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js + var GenerateHeaderOptions, DataGridCellTypes, DataGridRowTypes; + var init_data_grid_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.options.js"() { + GenerateHeaderOptions = { + none: "none", + default: "default", + sticky: "sticky" + }; + DataGridCellTypes = { + default: "default", + columnHeader: "columnheader", + rowHeader: "rowheader" + }; + DataGridRowTypes = { + default: "default", + header: "header", + stickyHeader: "sticky-header" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js + var DataGridRow; + var init_data_grid_row = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGridRow = class extends FoundationElement { + constructor() { + super(...arguments); + this.rowType = DataGridRowTypes.default; + this.rowData = null; + this.columnDefinitions = null; + this.isActiveRow = false; + this.cellsRepeatBehavior = null; + this.cellsPlaceholder = null; + this.focusColumnIndex = 0; + this.refocusOnLoad = false; + this.updateRowStyle = () => { + this.style.gridTemplateColumns = this.gridTemplateColumns; + }; + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowStyle(); + } + } + rowTypeChanged() { + if (this.$fastController.isConnected) { + this.updateItemTemplate(); + } + } + rowDataChanged() { + if (this.rowData !== null && this.isActiveRow) { + this.refocusOnLoad = true; + return; + } + } + cellItemTemplateChanged() { + this.updateItemTemplate(); + } + headerCellItemTemplateChanged() { + this.updateItemTemplate(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.cellsRepeatBehavior === null) { + this.cellsPlaceholder = document.createComment(""); + this.appendChild(this.cellsPlaceholder); + this.updateItemTemplate(); + this.cellsRepeatBehavior = new RepeatDirective((x) => x.columnDefinitions, (x) => x.activeCellItemTemplate, { positioning: true }).createBehavior(this.cellsPlaceholder); + this.$fastController.addBehaviors([this.cellsRepeatBehavior]); + } + this.addEventListener("cell-focused", this.handleCellFocus); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.updateRowStyle(); + if (this.refocusOnLoad) { + this.refocusOnLoad = false; + if (this.cellElements.length > this.focusColumnIndex) { + this.cellElements[this.focusColumnIndex].focus(); + } + } + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("cell-focused", this.handleCellFocus); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + } + handleFocusout(e) { + if (!this.contains(e.target)) { + this.isActiveRow = false; + this.focusColumnIndex = 0; + } + } + handleCellFocus(e) { + this.isActiveRow = true; + this.focusColumnIndex = this.cellElements.indexOf(e.target); + this.$emit("row-focused", this); + } + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusColumnIndex = 0; + switch (e.key) { + case keyArrowLeft: + newFocusColumnIndex = Math.max(0, this.focusColumnIndex - 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyArrowRight: + newFocusColumnIndex = Math.min(this.cellElements.length - 1, this.focusColumnIndex + 1); + this.cellElements[newFocusColumnIndex].focus(); + e.preventDefault(); + break; + case keyHome: + if (!e.ctrlKey) { + this.cellElements[0].focus(); + e.preventDefault(); + } + break; + case keyEnd: + if (!e.ctrlKey) { + this.cellElements[this.cellElements.length - 1].focus(); + e.preventDefault(); + } + break; + } + } + updateItemTemplate() { + this.activeCellItemTemplate = this.rowType === DataGridRowTypes.default && this.cellItemTemplate !== void 0 ? this.cellItemTemplate : this.rowType === DataGridRowTypes.default && this.cellItemTemplate === void 0 ? this.defaultCellItemTemplate : this.headerCellItemTemplate !== void 0 ? this.headerCellItemTemplate : this.defaultHeaderCellItemTemplate; + } + }; + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGridRow.prototype, "gridTemplateColumns", void 0); + __decorate([ + attr({ attribute: "row-type" }) + ], DataGridRow.prototype, "rowType", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "rowIndex", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "isActiveRow", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "activeCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "defaultHeaderCellItemTemplate", void 0); + __decorate([ + observable + ], DataGridRow.prototype, "cellElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js + function createRowItemTemplate(context) { + const rowTag = context.tagFor(DataGridRow); + return html` + <${rowTag} + :rowData="${(x) => x}" + :cellItemTemplate="${(x, c) => c.parent.cellItemTemplate}" + :headerCellItemTemplate="${(x, c) => c.parent.headerCellItemTemplate}" + > +`; + } + var dataGridTemplate; + var init_data_grid_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.template.js"() { + init_esm(); + init_data_grid_row(); + dataGridTemplate = (context, definition) => { + const rowItemTemplate = createRowItemTemplate(context); + const rowTag = context.tagFor(DataGridRow); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js + var DataGrid; + var init_data_grid = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + DataGrid = class _DataGrid extends FoundationElement { + constructor() { + super(); + this.noTabbing = false; + this.generateHeader = GenerateHeaderOptions.default; + this.rowsData = []; + this.columnDefinitions = null; + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + this.rowsPlaceholder = null; + this.generatedHeader = null; + this.isUpdatingFocus = false; + this.pendingFocusUpdate = false; + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = true; + this.generatedGridTemplateColumns = ""; + this.focusOnCell = (rowIndex, columnIndex, scrollIntoView) => { + if (this.rowElements.length === 0) { + this.focusRowIndex = 0; + this.focusColumnIndex = 0; + return; + } + const focusRowIndex = Math.max(0, Math.min(this.rowElements.length - 1, rowIndex)); + const focusRow = this.rowElements[focusRowIndex]; + const cells = focusRow.querySelectorAll('[role="cell"], [role="gridcell"], [role="columnheader"], [role="rowheader"]'); + const focusColumnIndex = Math.max(0, Math.min(cells.length - 1, columnIndex)); + const focusTarget = cells[focusColumnIndex]; + if (scrollIntoView && this.scrollHeight !== this.clientHeight && (focusRowIndex < this.focusRowIndex && this.scrollTop > 0 || focusRowIndex > this.focusRowIndex && this.scrollTop < this.scrollHeight - this.clientHeight)) { + focusTarget.scrollIntoView({ block: "center", inline: "center" }); + } + focusTarget.focus(); + }; + this.onChildListChange = (mutations, observer) => { + if (mutations && mutations.length) { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((newNode) => { + if (newNode.nodeType === 1 && newNode.getAttribute("role") === "row") { + newNode.columnDefinitions = this.columnDefinitions; + } + }); + }); + this.queueRowIndexUpdate(); + } + }; + this.queueRowIndexUpdate = () => { + if (!this.rowindexUpdateQueued) { + this.rowindexUpdateQueued = true; + DOM.queueUpdate(this.updateRowIndexes); + } + }; + this.updateRowIndexes = () => { + let newGridTemplateColumns = this.gridTemplateColumns; + if (newGridTemplateColumns === void 0) { + if (this.generatedGridTemplateColumns === "" && this.rowElements.length > 0) { + const firstRow = this.rowElements[0]; + this.generatedGridTemplateColumns = new Array(firstRow.cellElements.length).fill("1fr").join(" "); + } + newGridTemplateColumns = this.generatedGridTemplateColumns; + } + this.rowElements.forEach((element, index) => { + const thisRow = element; + thisRow.rowIndex = index; + thisRow.gridTemplateColumns = newGridTemplateColumns; + if (this.columnDefinitionsStale) { + thisRow.columnDefinitions = this.columnDefinitions; + } + }); + this.rowindexUpdateQueued = false; + this.columnDefinitionsStale = false; + }; + } + /** + * generates a gridTemplateColumns based on columndata array + */ + static generateTemplateColumns(columnDefinitions) { + let templateColumns = ""; + columnDefinitions.forEach((column) => { + templateColumns = `${templateColumns}${templateColumns === "" ? "" : " "}${"1fr"}`; + }); + return templateColumns; + } + noTabbingChanged() { + if (this.$fastController.isConnected) { + if (this.noTabbing) { + this.setAttribute("tabIndex", "-1"); + } else { + this.setAttribute("tabIndex", this.contains(document.activeElement) || this === document.activeElement ? "-1" : "0"); + } + } + } + generateHeaderChanged() { + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + gridTemplateColumnsChanged() { + if (this.$fastController.isConnected) { + this.updateRowIndexes(); + } + } + rowsDataChanged() { + if (this.columnDefinitions === null && this.rowsData.length > 0) { + this.columnDefinitions = _DataGrid.generateColumns(this.rowsData[0]); + } + if (this.$fastController.isConnected) { + this.toggleGeneratedHeader(); + } + } + columnDefinitionsChanged() { + if (this.columnDefinitions === null) { + this.generatedGridTemplateColumns = ""; + return; + } + this.generatedGridTemplateColumns = _DataGrid.generateTemplateColumns(this.columnDefinitions); + if (this.$fastController.isConnected) { + this.columnDefinitionsStale = true; + this.queueRowIndexUpdate(); + } + } + headerCellItemTemplateChanged() { + if (this.$fastController.isConnected) { + if (this.generatedHeader !== null) { + this.generatedHeader.headerCellItemTemplate = this.headerCellItemTemplate; + } + } + } + focusRowIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + focusColumnIndexChanged() { + if (this.$fastController.isConnected) { + this.queueFocusUpdate(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.rowItemTemplate === void 0) { + this.rowItemTemplate = this.defaultRowItemTemplate; + } + this.rowsPlaceholder = document.createComment(""); + this.appendChild(this.rowsPlaceholder); + this.toggleGeneratedHeader(); + this.rowsRepeatBehavior = new RepeatDirective((x) => x.rowsData, (x) => x.rowItemTemplate, { positioning: true }).createBehavior(this.rowsPlaceholder); + this.$fastController.addBehaviors([this.rowsRepeatBehavior]); + this.addEventListener("row-focused", this.handleRowFocus); + this.addEventListener(eventFocus, this.handleFocus); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.addEventListener(eventFocusOut, this.handleFocusOut); + this.observer = new MutationObserver(this.onChildListChange); + this.observer.observe(this, { childList: true }); + if (this.noTabbing) { + this.setAttribute("tabindex", "-1"); + } + DOM.queueUpdate(this.queueRowIndexUpdate); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("row-focused", this.handleRowFocus); + this.removeEventListener(eventFocus, this.handleFocus); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.removeEventListener(eventFocusOut, this.handleFocusOut); + this.observer.disconnect(); + this.rowsPlaceholder = null; + this.generatedHeader = null; + } + /** + * @internal + */ + handleRowFocus(e) { + this.isUpdatingFocus = true; + const focusRow = e.target; + this.focusRowIndex = this.rowElements.indexOf(focusRow); + this.focusColumnIndex = focusRow.focusColumnIndex; + this.setAttribute("tabIndex", "-1"); + this.isUpdatingFocus = false; + } + /** + * @internal + */ + handleFocus(e) { + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + /** + * @internal + */ + handleFocusOut(e) { + if (e.relatedTarget === null || !this.contains(e.relatedTarget)) { + this.setAttribute("tabIndex", this.noTabbing ? "-1" : "0"); + } + } + /** + * @internal + */ + handleKeydown(e) { + if (e.defaultPrevented) { + return; + } + let newFocusRowIndex; + const maxIndex = this.rowElements.length - 1; + const currentGridBottom = this.offsetHeight + this.scrollTop; + const lastRow = this.rowElements[maxIndex]; + switch (e.key) { + case keyArrowUp: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex - 1, this.focusColumnIndex, true); + break; + case keyArrowDown: + e.preventDefault(); + this.focusOnCell(this.focusRowIndex + 1, this.focusColumnIndex, true); + break; + case keyPageUp: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex === 0) { + this.focusOnCell(0, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex - 1; + for (newFocusRowIndex; newFocusRowIndex >= 0; newFocusRowIndex--) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop < this.scrollTop) { + this.scrollTop = thisRow.offsetTop + thisRow.clientHeight - this.clientHeight; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyPageDown: + e.preventDefault(); + if (this.rowElements.length === 0) { + this.focusOnCell(0, 0, false); + break; + } + if (this.focusRowIndex >= maxIndex || lastRow.offsetTop + lastRow.offsetHeight <= currentGridBottom) { + this.focusOnCell(maxIndex, this.focusColumnIndex, false); + return; + } + newFocusRowIndex = this.focusRowIndex + 1; + for (newFocusRowIndex; newFocusRowIndex <= maxIndex; newFocusRowIndex++) { + const thisRow = this.rowElements[newFocusRowIndex]; + if (thisRow.offsetTop + thisRow.offsetHeight > currentGridBottom) { + let stickyHeaderOffset = 0; + if (this.generateHeader === GenerateHeaderOptions.sticky && this.generatedHeader !== null) { + stickyHeaderOffset = this.generatedHeader.clientHeight; + } + this.scrollTop = thisRow.offsetTop - stickyHeaderOffset; + break; + } + } + this.focusOnCell(newFocusRowIndex, this.focusColumnIndex, false); + break; + case keyHome: + if (e.ctrlKey) { + e.preventDefault(); + this.focusOnCell(0, 0, true); + } + break; + case keyEnd: + if (e.ctrlKey && this.columnDefinitions !== null) { + e.preventDefault(); + this.focusOnCell(this.rowElements.length - 1, this.columnDefinitions.length - 1, true); + } + break; + } + } + queueFocusUpdate() { + if (this.isUpdatingFocus && (this.contains(document.activeElement) || this === document.activeElement)) { + return; + } + if (this.pendingFocusUpdate === false) { + this.pendingFocusUpdate = true; + DOM.queueUpdate(() => this.updateFocus()); + } + } + updateFocus() { + this.pendingFocusUpdate = false; + this.focusOnCell(this.focusRowIndex, this.focusColumnIndex, true); + } + toggleGeneratedHeader() { + if (this.generatedHeader !== null) { + this.removeChild(this.generatedHeader); + this.generatedHeader = null; + } + if (this.generateHeader !== GenerateHeaderOptions.none && this.rowsData.length > 0) { + const generatedHeaderElement = document.createElement(this.rowElementTag); + this.generatedHeader = generatedHeaderElement; + this.generatedHeader.columnDefinitions = this.columnDefinitions; + this.generatedHeader.gridTemplateColumns = this.gridTemplateColumns; + this.generatedHeader.rowType = this.generateHeader === GenerateHeaderOptions.sticky ? DataGridRowTypes.stickyHeader : DataGridRowTypes.header; + if (this.firstChild !== null || this.rowsPlaceholder !== null) { + this.insertBefore(generatedHeaderElement, this.firstChild !== null ? this.firstChild : this.rowsPlaceholder); + } + return; + } + } + }; + DataGrid.generateColumns = (row) => { + return Object.getOwnPropertyNames(row).map((property, index) => { + return { + columnDataKey: property, + gridColumn: `${index}` + }; + }); + }; + __decorate([ + attr({ attribute: "no-tabbing", mode: "boolean" }) + ], DataGrid.prototype, "noTabbing", void 0); + __decorate([ + attr({ attribute: "generate-header" }) + ], DataGrid.prototype, "generateHeader", void 0); + __decorate([ + attr({ attribute: "grid-template-columns" }) + ], DataGrid.prototype, "gridTemplateColumns", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowsData", void 0); + __decorate([ + observable + ], DataGrid.prototype, "columnDefinitions", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "cellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "headerCellItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusRowIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "focusColumnIndex", void 0); + __decorate([ + observable + ], DataGrid.prototype, "defaultRowItemTemplate", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElementTag", void 0); + __decorate([ + observable + ], DataGrid.prototype, "rowElements", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js + var defaultCellContentsTemplate, defaultHeaderCellContentsTemplate, DataGridCell; + var init_data_grid_cell = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_data_grid_options(); + defaultCellContentsTemplate = html` + +`; + defaultHeaderCellContentsTemplate = html` + +`; + DataGridCell = class extends FoundationElement { + constructor() { + super(...arguments); + this.cellType = DataGridCellTypes.default; + this.rowData = null; + this.columnDefinition = null; + this.isActiveCell = false; + this.customCellView = null; + this.updateCellStyle = () => { + this.style.gridColumn = this.gridColumn; + }; + } + cellTypeChanged() { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + gridColumnChanged() { + if (this.$fastController.isConnected) { + this.updateCellStyle(); + } + } + columnDefinitionChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.updateCellView(); + } + } + /** + * @internal + */ + connectedCallback() { + var _a; + super.connectedCallback(); + this.addEventListener(eventFocusIn, this.handleFocusin); + this.addEventListener(eventFocusOut, this.handleFocusout); + this.addEventListener(eventKeyDown, this.handleKeydown); + this.style.gridColumn = `${((_a = this.columnDefinition) === null || _a === void 0 ? void 0 : _a.gridColumn) === void 0 ? 0 : this.columnDefinition.gridColumn}`; + this.updateCellView(); + this.updateCellStyle(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener(eventFocusIn, this.handleFocusin); + this.removeEventListener(eventFocusOut, this.handleFocusout); + this.removeEventListener(eventKeyDown, this.handleKeydown); + this.disconnectCellView(); + } + handleFocusin(e) { + if (this.isActiveCell) { + return; + } + this.isActiveCell = true; + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition !== null && this.columnDefinition.headerCellInternalFocusQueue !== true && typeof this.columnDefinition.headerCellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + default: + if (this.columnDefinition !== null && this.columnDefinition.cellInternalFocusQueue !== true && typeof this.columnDefinition.cellFocusTargetCallback === "function") { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + } + break; + } + this.$emit("cell-focused", this); + } + handleFocusout(e) { + if (this !== document.activeElement && !this.contains(document.activeElement)) { + this.isActiveCell = false; + } + } + handleKeydown(e) { + if (e.defaultPrevented || this.columnDefinition === null || this.cellType === DataGridCellTypes.default && this.columnDefinition.cellInternalFocusQueue !== true || this.cellType === DataGridCellTypes.columnHeader && this.columnDefinition.headerCellInternalFocusQueue !== true) { + return; + } + switch (e.key) { + case keyEnter: + case keyFunction2: + if (this.contains(document.activeElement) && document.activeElement !== this) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.headerCellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + default: + if (this.columnDefinition.cellFocusTargetCallback !== void 0) { + const focusTarget = this.columnDefinition.cellFocusTargetCallback(this); + if (focusTarget !== null) { + focusTarget.focus(); + } + e.preventDefault(); + } + break; + } + break; + case keyEscape: + if (this.contains(document.activeElement) && document.activeElement !== this) { + this.focus(); + e.preventDefault(); + } + break; + } + } + updateCellView() { + this.disconnectCellView(); + if (this.columnDefinition === null) { + return; + } + switch (this.cellType) { + case DataGridCellTypes.columnHeader: + if (this.columnDefinition.headerCellTemplate !== void 0) { + this.customCellView = this.columnDefinition.headerCellTemplate.render(this, this); + } else { + this.customCellView = defaultHeaderCellContentsTemplate.render(this, this); + } + break; + case void 0: + case DataGridCellTypes.rowHeader: + case DataGridCellTypes.default: + if (this.columnDefinition.cellTemplate !== void 0) { + this.customCellView = this.columnDefinition.cellTemplate.render(this, this); + } else { + this.customCellView = defaultCellContentsTemplate.render(this, this); + } + break; + } + } + disconnectCellView() { + if (this.customCellView !== null) { + this.customCellView.dispose(); + this.customCellView = null; + } + } + }; + __decorate([ + attr({ attribute: "cell-type" }) + ], DataGridCell.prototype, "cellType", void 0); + __decorate([ + attr({ attribute: "grid-column" }) + ], DataGridCell.prototype, "gridColumn", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "rowData", void 0); + __decorate([ + observable + ], DataGridCell.prototype, "columnDefinition", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js + function createCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="${(x) => x.isRowHeader ? "rowheader" : void 0}" + grid-column="${(x, c) => c.index + 1}" + :rowData="${(x, c) => c.parent.rowData}" + :columnDefinition="${(x) => x}" + > +`; + } + function createHeaderCellItemTemplate(context) { + const cellTag = context.tagFor(DataGridCell); + return html` + <${cellTag} + cell-type="columnheader" + grid-column="${(x, c) => c.index + 1}" + :columnDefinition="${(x) => x}" + > +`; + } + var dataGridRowTemplate; + var init_data_grid_row_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-row.template.js"() { + init_esm(); + init_data_grid_cell(); + dataGridRowTemplate = (context, definition) => { + const cellItemTemplate = createCellItemTemplate(context); + const headerCellItemTemplate = createHeaderCellItemTemplate(context); + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js + var dataGridCellTemplate; + var init_data_grid_cell_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/data-grid-cell.template.js"() { + init_esm(); + dataGridCellTemplate = (context, definition) => { + return html` + + `; + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js + var init_data_grid2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/data-grid/index.js"() { + init_data_grid_template(); + init_data_grid(); + init_data_grid_row_template(); + init_data_grid_row(); + init_data_grid_cell_template(); + init_data_grid_cell(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js + var CalendarTitleTemplate; + var init_calendar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/calendar.template.js"() { + init_esm(); + CalendarTitleTemplate = html` +
+ + ${(x) => x.dateFormatter.getMonth(x.month)} + + ${(x) => x.dateFormatter.getYear(x.year)} +
+`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js + var init_calendar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/calendar/index.js"() { + init_calendar(); + init_calendar_template(); + init_date_formatter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js + var init_card_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/card.js + var init_card = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/card.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/card/index.js + var init_card2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/card/index.js"() { + init_card_template(); + init_card(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js + var checkboxTemplate; + var init_checkbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.template.js"() { + init_esm(); + checkboxTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js + var _Checkbox, FormAssociatedCheckbox; + var init_checkbox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Checkbox = class extends FoundationElement { + }; + FormAssociatedCheckbox = class extends CheckableFormAssociated(_Checkbox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js + var Checkbox; + var init_checkbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/checkbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_checkbox_form_associated(); + Checkbox = class extends FormAssociatedCheckbox { + constructor() { + super(); + this.initialValue = "on"; + this.indeterminate = false; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keySpace: + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + if (this.indeterminate) { + this.indeterminate = false; + } + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Checkbox.prototype, "readOnly", void 0); + __decorate([ + observable + ], Checkbox.prototype, "defaultSlottedNodes", void 0); + __decorate([ + observable + ], Checkbox.prototype, "indeterminate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js + var init_checkbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/checkbox/index.js"() { + init_checkbox_template(); + init_checkbox(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js + function isListboxOption(el) { + return isHTMLElement(el) && (el.getAttribute("role") === "option" || el instanceof HTMLOptionElement); + } + var ListboxOption, DelegatesARIAListboxOption; + var init_listbox_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + ListboxOption = class extends FoundationElement { + constructor(text, value, defaultSelected, selected) { + super(); + this.defaultSelected = false; + this.dirtySelected = false; + this.selected = this.defaultSelected; + this.dirtyValue = false; + if (text) { + this.textContent = text; + } + if (value) { + this.initialValue = value; + } + if (defaultSelected) { + this.defaultSelected = defaultSelected; + } + if (selected) { + this.selected = selected; + } + this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected); + this.proxy.disabled = this.disabled; + } + /** + * Updates the ariaChecked property when the checked property changes. + * + * @param prev - the previous checked value + * @param next - the current checked value + * + * @public + */ + checkedChanged(prev, next) { + if (typeof next === "boolean") { + this.ariaChecked = next ? "true" : "false"; + return; + } + this.ariaChecked = null; + } + /** + * Updates the proxy's text content when the default slot changes. + * @param prev - the previous content value + * @param next - the current content value + * + * @internal + */ + contentChanged(prev, next) { + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.textContent = this.textContent; + } + this.$emit("contentchange", null, { bubbles: true }); + } + defaultSelectedChanged() { + if (!this.dirtySelected) { + this.selected = this.defaultSelected; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.defaultSelected; + } + } + } + disabledChanged(prev, next) { + this.ariaDisabled = this.disabled ? "true" : "false"; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.disabled = this.disabled; + } + } + selectedAttributeChanged() { + this.defaultSelected = this.selectedAttribute; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.defaultSelected = this.defaultSelected; + } + } + selectedChanged() { + this.ariaSelected = this.selected ? "true" : "false"; + if (!this.dirtySelected) { + this.dirtySelected = true; + } + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.selected = this.selected; + } + } + initialValueChanged(previous, next) { + if (!this.dirtyValue) { + this.value = this.initialValue; + this.dirtyValue = false; + } + } + get label() { + var _a; + return (_a = this.value) !== null && _a !== void 0 ? _a : this.text; + } + get text() { + var _a, _b; + return (_b = (_a = this.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, " ").trim()) !== null && _b !== void 0 ? _b : ""; + } + set value(next) { + const newValue = `${next !== null && next !== void 0 ? next : ""}`; + this._value = newValue; + this.dirtyValue = true; + if (this.proxy instanceof HTMLOptionElement) { + this.proxy.value = newValue; + } + Observable.notify(this, "value"); + } + get value() { + var _a; + Observable.track(this, "value"); + return (_a = this._value) !== null && _a !== void 0 ? _a : this.text; + } + get form() { + return this.proxy ? this.proxy.form : null; + } + }; + __decorate([ + observable + ], ListboxOption.prototype, "checked", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "content", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "defaultSelected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxOption.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "selected", mode: "boolean" }) + ], ListboxOption.prototype, "selectedAttribute", void 0); + __decorate([ + observable + ], ListboxOption.prototype, "selected", void 0); + __decorate([ + attr({ attribute: "value", mode: "fromView" }) + ], ListboxOption.prototype, "initialValue", void 0); + DelegatesARIAListboxOption = class { + }; + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0); + __decorate([ + observable + ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0); + applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties); + applyMixins(ListboxOption, StartEnd, DelegatesARIAListboxOption); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js + var Listbox, DelegatesARIAListbox; + var init_listbox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_listbox_option(); + init_aria_global(); + init_apply_mixins(); + Listbox = class _Listbox extends FoundationElement { + constructor() { + super(...arguments); + this._options = []; + this.selectedIndex = -1; + this.selectedOptions = []; + this.shouldSkipFocus = false; + this.typeaheadBuffer = ""; + this.typeaheadExpired = true; + this.typeaheadTimeout = -1; + } + /** + * The first selected option. + * + * @internal + */ + get firstSelectedOption() { + var _a; + return (_a = this.selectedOptions[0]) !== null && _a !== void 0 ? _a : null; + } + /** + * Returns true if there is one or more selectable option. + * + * @internal + */ + get hasSelectableOptions() { + return this.options.length > 0 && !this.options.every((o) => o.disabled); + } + /** + * The number of options. + * + * @public + */ + get length() { + var _a, _b; + return (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; + } + /** + * The list of options. + * + * @public + */ + get options() { + Observable.track(this, "options"); + return this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Flag for the typeahead timeout expiration. + * + * @deprecated use `Listbox.typeaheadExpired` + * @internal + */ + get typeAheadExpired() { + return this.typeaheadExpired; + } + set typeAheadExpired(value) { + this.typeaheadExpired = value; + } + /** + * Handle click events for listbox options. + * + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && !captured.disabled) { + this.selectedIndex = this.options.indexOf(captured); + return true; + } + } + /** + * Ensures that the provided option is focused and scrolled into view. + * + * @param optionToFocus - The option to focus + * @internal + */ + focusAndScrollOptionIntoView(optionToFocus = this.firstSelectedOption) { + if (this.contains(document.activeElement) && optionToFocus !== null) { + optionToFocus.focus(); + requestAnimationFrame(() => { + optionToFocus.scrollIntoView({ block: "nearest" }); + }); + } + } + /** + * Handles `focusin` actions for the component. When the component receives focus, + * the list of selected options is refreshed and the first selected option is scrolled + * into view. + * + * @internal + */ + focusinHandler(e) { + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Returns the options which match the current typeahead buffer. + * + * @internal + */ + getTypeaheadMatches() { + const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); + const re = new RegExp(`^${pattern}`, "gi"); + return this.options.filter((o) => o.text.trim().match(re)); + } + /** + * Determines the index of the next option which is selectable, if any. + * + * @param prev - the previous selected index + * @param next - the next index to select + * + * @internal + */ + getSelectableIndex(prev = this.selectedIndex, next) { + const direction = prev > next ? -1 : prev < next ? 1 : 0; + const potentialDirection = prev + direction; + let nextSelectableOption = null; + switch (direction) { + case -1: { + nextSelectableOption = this.options.reduceRight((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index < potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + case 1: { + nextSelectableOption = this.options.reduce((nextSelectableOption2, thisOption, index) => !nextSelectableOption2 && !thisOption.disabled && index > potentialDirection ? thisOption : nextSelectableOption2, nextSelectableOption); + break; + } + } + return this.options.indexOf(nextSelectableOption); + } + /** + * Handles external changes to child options. + * + * @param source - the source object + * @param propertyName - the property + * + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "selected": { + if (_Listbox.slottedOptionFilter(source)) { + this.selectedIndex = this.options.indexOf(source); + } + this.setSelectedOptions(); + break; + } + } + } + /** + * Moves focus to an option whose label matches characters typed by the user. + * Consecutive keystrokes are batched into a buffer of search text used + * to match against the set of options. If `TYPE_AHEAD_TIMEOUT_MS` passes + * between consecutive keystrokes, the search restarts. + * + * @param key - the key to be evaluated + * + * @internal + */ + handleTypeAhead(key) { + if (this.typeaheadTimeout) { + window.clearTimeout(this.typeaheadTimeout); + } + this.typeaheadTimeout = window.setTimeout(() => this.typeaheadExpired = true, _Listbox.TYPE_AHEAD_TIMEOUT_MS); + if (key.length > 1) { + return; + } + this.typeaheadBuffer = `${this.typeaheadExpired ? "" : this.typeaheadBuffer}${key}`; + } + /** + * Handles `keydown` actions for listbox navigation and typeahead. + * + * @internal + */ + keydownHandler(e) { + if (this.disabled) { + return true; + } + this.shouldSkipFocus = false; + const key = e.key; + switch (key) { + // Select the first available option + case keyHome: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectFirstOption(); + } + break; + } + // Select the next selectable option + case keyArrowDown: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectNextOption(); + } + break; + } + // Select the previous selectable option + case keyArrowUp: { + if (!e.shiftKey) { + e.preventDefault(); + this.selectPreviousOption(); + } + break; + } + // Select the last available option + case keyEnd: { + e.preventDefault(); + this.selectLastOption(); + break; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEnter: + case keyEscape: { + return true; + } + case keySpace: { + if (this.typeaheadExpired) { + return true; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @internal + */ + mousedownHandler(e) { + this.shouldSkipFocus = !this.contains(document.activeElement); + return true; + } + /** + * Switches between single-selection and multi-selection mode. + * + * @param prev - the previous value of the `multiple` attribute + * @param next - the next value of the `multiple` attribute + * + * @internal + */ + multipleChanged(prev, next) { + this.ariaMultiSelectable = next ? "true" : null; + } + /** + * Updates the list of selected options when the `selectedIndex` changes. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + var _a; + if (!this.hasSelectableOptions) { + this.selectedIndex = -1; + return; + } + if (((_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.disabled) && typeof prev === "number") { + const selectableIndex = this.getSelectableIndex(prev, next); + const newNext = selectableIndex > -1 ? selectableIndex : prev; + this.selectedIndex = newNext; + if (next === newNext) { + this.selectedIndexChanged(next, newNext); + } + return; + } + this.setSelectedOptions(); + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + const filteredNext = next.filter(_Listbox.slottedOptionFilter); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "selected"); + o.selected = filteredNext.includes(o); + notifier.subscribe(this, "selected"); + }); + } + /** + * Moves focus to the first selectable option. + * + * @public + */ + selectFirstOption() { + var _a, _b; + if (!this.disabled) { + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((o) => !o.disabled)) !== null && _b !== void 0 ? _b : -1; + } + } + /** + * Moves focus to the last selectable option. + * + * @internal + */ + selectLastOption() { + if (!this.disabled) { + this.selectedIndex = findLastIndex(this.options, (o) => !o.disabled); + } + } + /** + * Moves focus to the next selectable option. + * + * @internal + */ + selectNextOption() { + if (!this.disabled && this.selectedIndex < this.options.length - 1) { + this.selectedIndex += 1; + } + } + /** + * Moves focus to the previous selectable option. + * + * @internal + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex > 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Updates the selected index to match the first selected option. + * + * @internal + */ + setDefaultSelectedOption() { + var _a, _b; + this.selectedIndex = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.findIndex((el) => el.defaultSelected)) !== null && _b !== void 0 ? _b : -1; + } + /** + * Sets an option as selected and gives it focus. + * + * @public + */ + setSelectedOptions() { + var _a, _b, _c; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) { + this.selectedOptions = [this.options[this.selectedIndex]]; + this.ariaActiveDescendant = (_c = (_b = this.firstSelectedOption) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : ""; + this.focusAndScrollOptionIntoView(); + } + } + /** + * Updates the list of options and resets the selected option when the slotted option content changes. + * + * @param prev - the previous list of slotted options + * @param next - the current list of slotted options + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options = next.reduce((options, item) => { + if (isListboxOption(item)) { + options.push(item); + } + return options; + }, []); + const setSize = `${this.options.length}`; + this.options.forEach((option, index) => { + if (!option.id) { + option.id = uniqueId("option-"); + } + option.ariaPosInSet = `${index + 1}`; + option.ariaSetSize = setSize; + }); + if (this.$fastController.isConnected) { + this.setSelectedOptions(); + this.setDefaultSelectedOption(); + } + } + /** + * Updates the filtered list of options when the typeahead buffer changes. + * + * @param prev - the previous typeahead buffer value + * @param next - the current typeahead buffer value + * + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + if (typeaheadMatches.length) { + const selectedIndex = this.options.indexOf(typeaheadMatches[0]); + if (selectedIndex > -1) { + this.selectedIndex = selectedIndex; + } + } + this.typeaheadExpired = false; + } + } + }; + Listbox.slottedOptionFilter = (n) => isListboxOption(n) && !n.hidden; + Listbox.TYPE_AHEAD_TIMEOUT_MS = 1e3; + __decorate([ + attr({ mode: "boolean" }) + ], Listbox.prototype, "disabled", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedIndex", void 0); + __decorate([ + observable + ], Listbox.prototype, "selectedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "slottedOptions", void 0); + __decorate([ + observable + ], Listbox.prototype, "typeaheadBuffer", void 0); + DelegatesARIAListbox = class { + }; + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaActiveDescendant", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaDisabled", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaExpanded", void 0); + __decorate([ + observable + ], DelegatesARIAListbox.prototype, "ariaMultiSelectable", void 0); + applyMixins(DelegatesARIAListbox, ARIAGlobalStatesAndProperties); + applyMixins(Listbox, DelegatesARIAListbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js + var SelectPosition; + var init_select_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.options.js"() { + SelectPosition = { + above: "above", + below: "below" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js + var _Combobox, FormAssociatedCombobox; + var init_combobox_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.form-associated.js"() { + init_form_associated(); + init_listbox(); + _Combobox = class extends Listbox { + }; + FormAssociatedCombobox = class extends FormAssociated(_Combobox) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js + var ComboboxAutocomplete; + var init_combobox_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.options.js"() { + ComboboxAutocomplete = { + inline: "inline", + list: "list", + both: "both", + none: "none" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js + var Combobox, DelegatesARIACombobox; + var init_combobox = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_select_options(); + init_apply_mixins(); + init_combobox_form_associated(); + init_combobox_options(); + Combobox = class extends FormAssociatedCombobox { + constructor() { + super(...arguments); + this._value = ""; + this.filteredOptions = []; + this.filter = ""; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + this.open = false; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + super.formResetCallback(); + this.setDefaultSelectedOption(); + this.updateValue(); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + get isAutocompleteInline() { + return this.autocomplete === ComboboxAutocomplete.inline || this.isAutocompleteBoth; + } + get isAutocompleteList() { + return this.autocomplete === ComboboxAutocomplete.list || this.isAutocompleteBoth; + } + get isAutocompleteBoth() { + return this.autocomplete === ComboboxAutocomplete.both; + } + /** + * Sets focus and synchronize ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged() { + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The list of options. + * + * @public + * @remarks + * Overrides `Listbox.options`. + */ + get options() { + Observable.track(this, "options"); + return this.filteredOptions.length ? this.filteredOptions : this._options; + } + set options(value) { + this._options = value; + Observable.notify(this, "options"); + } + /** + * Updates the placeholder on the proxy element. + * @internal + */ + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c; + const prev = `${this._value}`; + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el) => el.text.toLowerCase() === next.toLowerCase()); + const prevSelectedValue = (_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.text; + const nextSelectedValue = (_b = this.options[selectedIndex]) === null || _b === void 0 ? void 0 : _b.text; + this.selectedIndex = prevSelectedValue !== nextSelectedValue ? selectedIndex : this.selectedIndex; + next = ((_c = this.firstSelectedOption) === null || _c === void 0 ? void 0 : _c.text) || next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + } + } + /** + * Handle opening and closing the listbox when the combobox is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + const captured = e.target.closest(`option,[role=option]`); + if (this.disabled || (captured === null || captured === void 0 ? void 0 : captured.disabled)) { + return; + } + if (this.open) { + if (e.composedPath()[0] === this.control) { + return; + } + if (captured) { + this.selectedOptions = [captured]; + this.control.value = captured.text; + this.clearSelectionRange(); + this.updateValue(true); + } + } + this.open = !this.open; + if (this.open) { + this.control.focus(); + } + return true; + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + if (this.value) { + this.initialValue = this.value; + } + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Filter available options by text value. + * + * @public + */ + filterOptions() { + if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) { + this.filter = ""; + } + const filter = this.filter.toLowerCase(); + this.filteredOptions = this._options.filter((o) => o.text.toLowerCase().startsWith(this.filter.toLowerCase())); + if (this.isAutocompleteList) { + if (!this.filteredOptions.length && !filter) { + this.filteredOptions = this._options; + } + this._options.forEach((o) => { + o.hidden = !this.filteredOptions.includes(o); + }); + } + } + /** + * Focus the control and scroll the first selected option into view. + * + * @internal + * @remarks + * Overrides: `Listbox.focusAndScrollOptionIntoView` + */ + focusAndScrollOptionIntoView() { + if (this.contains(document.activeElement)) { + this.control.focus(); + if (this.firstSelectedOption) { + requestAnimationFrame(() => { + var _a; + (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: "nearest" }); + }); + } + } + } + /** + * Handle focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + this.syncValue(); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!this.options || !this.options.includes(focusTarget)) { + this.open = false; + } + } + /** + * Handle content changes on the control input. + * + * @param e - the input event + * @internal + */ + inputHandler(e) { + this.filter = this.control.value; + this.filterOptions(); + if (!this.isAutocompleteInline) { + this.selectedIndex = this.options.map((option) => option.text).indexOf(this.control.value); + } + if (e.inputType.includes("deleteContent") || !this.filter.length) { + return true; + } + if (this.isAutocompleteList && !this.open) { + this.open = true; + } + if (this.isAutocompleteInline) { + if (this.filteredOptions.length) { + this.selectedOptions = [this.filteredOptions[0]]; + this.selectedIndex = this.options.indexOf(this.firstSelectedOption); + this.setInlineSelection(); + } else { + this.selectedIndex = -1; + } + } + return; + } + /** + * Handle keydown actions for listbox navigation. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (e.ctrlKey || e.shiftKey) { + return true; + } + switch (key) { + case "Enter": { + this.syncValue(); + if (this.isAutocompleteInline) { + this.filter = this.value; + } + this.open = false; + this.clearSelectionRange(); + break; + } + case "Escape": { + if (!this.isAutocompleteInline) { + this.selectedIndex = -1; + } + if (this.open) { + this.open = false; + break; + } + this.value = ""; + this.control.value = ""; + this.filter = ""; + this.filterOptions(); + break; + } + case "Tab": { + this.setInputToSelection(); + if (!this.open) { + return true; + } + e.preventDefault(); + this.open = false; + break; + } + case "ArrowUp": + case "ArrowDown": { + this.filterOptions(); + if (!this.open) { + this.open = true; + break; + } + if (this.filteredOptions.length > 0) { + super.keydownHandler(e); + } + if (this.isAutocompleteInline) { + this.setInlineSelection(); + } + break; + } + default: { + return true; + } + } + } + /** + * Handle keyup actions for value input and text field manipulations. + * + * @param e - the keyboard event + * @internal + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + case "ArrowRight": + case "Backspace": + case "Delete": + case "Home": + case "End": { + this.filter = this.control.value; + this.selectedIndex = -1; + this.filterOptions(); + break; + } + } + } + /** + * Ensure that the selectedIndex is within the current allowable filtered range. + * + * @param prev - the previous selected index value + * @param next - the current selected index value + * + * @internal + */ + selectedIndexChanged(prev, next) { + if (this.$fastController.isConnected) { + next = limit(-1, this.options.length - 1, next); + if (next !== this.selectedIndex) { + this.selectedIndex = next; + return; + } + super.selectedIndexChanged(prev, next); + } + } + /** + * Move focus to the previous selectable option. + * + * @internal + * @remarks + * Overrides `Listbox.selectPreviousOption` + */ + selectPreviousOption() { + if (!this.disabled && this.selectedIndex >= 0) { + this.selectedIndex = this.selectedIndex - 1; + } + } + /** + * Set the default selected options at initialization or reset. + * + * @internal + * @remarks + * Overrides `Listbox.setDefaultSelectedOption` + */ + setDefaultSelectedOption() { + if (this.$fastController.isConnected && this.options) { + const selectedIndex = this.options.findIndex((el) => el.getAttribute("selected") !== null || el.selected); + this.selectedIndex = selectedIndex; + if (!this.dirtyValue && this.firstSelectedOption) { + this.value = this.firstSelectedOption.text; + } + this.setSelectedOptions(); + } + } + /** + * Focus and set the content of the control based on the first selected option. + * + * @internal + */ + setInputToSelection() { + if (this.firstSelectedOption) { + this.control.value = this.firstSelectedOption.text; + this.control.focus(); + } + } + /** + * Focus, set and select the content of the control based on the first selected option. + * + * @internal + */ + setInlineSelection() { + if (this.firstSelectedOption) { + this.setInputToSelection(); + this.control.setSelectionRange(this.filter.length, this.control.value.length, "backward"); + } + } + /** + * Determines if a value update should involve emitting a change event, then updates the value. + * + * @internal + */ + syncValue() { + var _a; + const newValue = this.selectedIndex > -1 ? (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text : this.control.value; + this.updateValue(this.value !== newValue); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @param force - direction to force the listbox to display + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * Ensure that the entire list of options is used when setting the selected property. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @internal + * @remarks + * Overrides: `Listbox.selectedOptionsChanged` + */ + selectedOptionsChanged(prev, next) { + if (this.$fastController.isConnected) { + this._options.forEach((o) => { + o.selected = next.includes(o); + }); + } + } + /** + * Synchronize the form-associated proxy and update the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + super.slottedOptionsChanged(prev, next); + this.updateValue(); + } + /** + * Sets the value and to match the first selected option. + * + * @param shouldEmit - if true, the change event will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a; + if (this.$fastController.isConnected) { + this.value = ((_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) || this.control.value; + this.control.value = this.value; + } + if (shouldEmit) { + this.$emit("change"); + } + } + /** + * @internal + */ + clearSelectionRange() { + const controlValueLength = this.control.value.length; + this.control.setSelectionRange(controlValueLength, controlValueLength); + } + }; + __decorate([ + attr({ attribute: "autocomplete", mode: "fromView" }) + ], Combobox.prototype, "autocomplete", void 0); + __decorate([ + observable + ], Combobox.prototype, "maxHeight", void 0); + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Combobox.prototype, "open", void 0); + __decorate([ + attr + ], Combobox.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Combobox.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Combobox.prototype, "position", void 0); + DelegatesARIACombobox = class { + }; + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaAutoComplete", void 0); + __decorate([ + observable + ], DelegatesARIACombobox.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIACombobox, DelegatesARIAListbox); + applyMixins(Combobox, StartEnd, DelegatesARIACombobox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js + var init_combobox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/combobox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js + var init_combobox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/combobox/index.js"() { + init_combobox(); + init_combobox_options(); + init_combobox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js + function composedParent(element) { + const parentNode = element.parentElement; + if (parentNode) { + return parentNode; + } else { + const rootNode = element.getRootNode(); + if (rootNode.host instanceof HTMLElement) { + return rootNode.host; + } + } + return null; + } + var init_composed_parent = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-parent.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js + function composedContains(reference, test) { + let current = test; + while (current !== null) { + if (current === reference) { + return true; + } + current = composedParent(current); + } + return false; + } + var init_composed_contains = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/composed-contains.js"() { + init_composed_parent(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js + function isFastElement(element) { + return element instanceof FASTElement; + } + var defaultElement, QueuedStyleSheetTarget, ConstructableStyleSheetTarget, DocumentStyleSheetTarget, HeadStyleElementStyleSheetTarget, StyleElementStyleSheetTarget, ElementStyleSheetTarget, RootStyleSheetTarget, propertyTargetCache, propertyTargetCtor, PropertyTargetManager; + var init_custom_property_manager = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/custom-property-manager.js"() { + init_tslib_es6(); + init_esm(); + defaultElement = document.createElement("div"); + QueuedStyleSheetTarget = class { + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + ConstructableStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor(source) { + super(); + const sheet = new CSSStyleSheet(); + sheet[prependToAdoptedStyleSheetsSymbol] = true; + this.target = sheet.cssRules[sheet.insertRule(":host{}")].style; + source.$fastController.addStyles(ElementStyles.create([sheet])); + } + }; + DocumentStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + const sheet = new CSSStyleSheet(); + this.target = sheet.cssRules[sheet.insertRule(":root{}")].style; + document.adoptedStyleSheets = [ + ...document.adoptedStyleSheets, + sheet + ]; + } + }; + HeadStyleElementStyleSheetTarget = class extends QueuedStyleSheetTarget { + constructor() { + super(); + this.style = document.createElement("style"); + document.head.appendChild(this.style); + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":root{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } + } + }; + StyleElementStyleSheetTarget = class { + constructor(target) { + this.store = /* @__PURE__ */ new Map(); + this.target = null; + const controller = target.$fastController; + this.style = document.createElement("style"); + controller.addStyles(this.style); + Observable.getNotifier(controller).subscribe(this, "isConnected"); + this.handleChange(controller, "isConnected"); + } + targetChanged() { + if (this.target !== null) { + for (const [key, value] of this.store.entries()) { + this.target.setProperty(key, value); + } + } + } + setProperty(name, value) { + this.store.set(name, value); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.setProperty(name, value); + } + }); + } + removeProperty(name) { + this.store.delete(name); + DOM.queueUpdate(() => { + if (this.target !== null) { + this.target.removeProperty(name); + } + }); + } + handleChange(source, key) { + const { sheet } = this.style; + if (sheet) { + const index = sheet.insertRule(":host{}", sheet.cssRules.length); + this.target = sheet.cssRules[index].style; + } else { + this.target = null; + } + } + }; + __decorate([ + observable + ], StyleElementStyleSheetTarget.prototype, "target", void 0); + ElementStyleSheetTarget = class { + constructor(source) { + this.target = source.style; + } + setProperty(name, value) { + DOM.queueUpdate(() => this.target.setProperty(name, value)); + } + removeProperty(name) { + DOM.queueUpdate(() => this.target.removeProperty(name)); + } + }; + RootStyleSheetTarget = class _RootStyleSheetTarget { + setProperty(name, value) { + _RootStyleSheetTarget.properties[name] = value; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).setProperty(name, value); + } + } + removeProperty(name) { + delete _RootStyleSheetTarget.properties[name]; + for (const target of _RootStyleSheetTarget.roots.values()) { + PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(target)).removeProperty(name); + } + } + static registerRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (!roots.has(root)) { + roots.add(root); + const target = PropertyTargetManager.getOrCreate(this.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.setProperty(key, _RootStyleSheetTarget.properties[key]); + } + } + } + static unregisterRoot(root) { + const { roots } = _RootStyleSheetTarget; + if (roots.has(root)) { + roots.delete(root); + const target = PropertyTargetManager.getOrCreate(_RootStyleSheetTarget.normalizeRoot(root)); + for (const key in _RootStyleSheetTarget.properties) { + target.removeProperty(key); + } + } + } + /** + * Returns the document when provided the default element, + * otherwise is a no-op + * @param root - the root to normalize + */ + static normalizeRoot(root) { + return root === defaultElement ? document : root; + } + }; + RootStyleSheetTarget.roots = /* @__PURE__ */ new Set(); + RootStyleSheetTarget.properties = {}; + propertyTargetCache = /* @__PURE__ */ new WeakMap(); + propertyTargetCtor = DOM.supportsAdoptedStyleSheets ? ConstructableStyleSheetTarget : StyleElementStyleSheetTarget; + PropertyTargetManager = Object.freeze({ + getOrCreate(source) { + if (propertyTargetCache.has(source)) { + return propertyTargetCache.get(source); + } + let target; + if (source === defaultElement) { + target = new RootStyleSheetTarget(); + } else if (source instanceof Document) { + target = DOM.supportsAdoptedStyleSheets ? new DocumentStyleSheetTarget() : new HeadStyleElementStyleSheetTarget(); + } else if (isFastElement(source)) { + target = new propertyTargetCtor(source); + } else { + target = new ElementStyleSheetTarget(source); + } + propertyTargetCache.set(source, target); + return target; + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js + function create(nameOrConfig) { + return DesignTokenImpl.from(nameOrConfig); + } + var DesignTokenImpl, CustomPropertyReflector, DesignTokenBindingObserver, Store, nodeCache, childToParent, DesignTokenNode, DesignToken; + var init_design_token = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-token/design-token.js"() { + init_tslib_es6(); + init_esm(); + init_composed_parent(); + init_composed_contains(); + init_custom_property_manager(); + init_custom_property_manager(); + DesignTokenImpl = class _DesignTokenImpl extends CSSDirective { + constructor(configuration) { + super(); + this.subscribers = /* @__PURE__ */ new WeakMap(); + this._appliedTo = /* @__PURE__ */ new Set(); + this.name = configuration.name; + if (configuration.cssCustomPropertyName !== null) { + this.cssCustomProperty = `--${configuration.cssCustomPropertyName}`; + this.cssVar = `var(${this.cssCustomProperty})`; + } + this.id = _DesignTokenImpl.uniqueId(); + _DesignTokenImpl.tokensById.set(this.id, this); + } + get appliedTo() { + return [...this._appliedTo]; + } + static from(nameOrConfig) { + return new _DesignTokenImpl({ + name: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.name, + cssCustomPropertyName: typeof nameOrConfig === "string" ? nameOrConfig : nameOrConfig.cssCustomPropertyName === void 0 ? nameOrConfig.name : nameOrConfig.cssCustomPropertyName + }); + } + static isCSSDesignToken(token) { + return typeof token.cssCustomProperty === "string"; + } + static isDerivedDesignTokenValue(value) { + return typeof value === "function"; + } + /** + * Gets a token by ID. Returns undefined if the token was not found. + * @param id - The ID of the token + * @returns + */ + static getTokenById(id) { + return _DesignTokenImpl.tokensById.get(id); + } + getOrCreateSubscriberSet(target = this) { + return this.subscribers.get(target) || this.subscribers.set(target, /* @__PURE__ */ new Set()) && this.subscribers.get(target); + } + createCSS() { + return this.cssVar || ""; + } + getValueFor(element) { + const value = DesignTokenNode.getOrCreate(element).get(this); + if (value !== void 0) { + return value; + } + throw new Error(`Value could not be retrieved for token named "${this.name}". Ensure the value is set for ${element} or an ancestor of ${element}.`); + } + setValueFor(element, value) { + this._appliedTo.add(element); + if (value instanceof _DesignTokenImpl) { + value = this.alias(value); + } + DesignTokenNode.getOrCreate(element).set(this, value); + return this; + } + deleteValueFor(element) { + this._appliedTo.delete(element); + if (DesignTokenNode.existsFor(element)) { + DesignTokenNode.getOrCreate(element).delete(this); + } + return this; + } + withDefault(value) { + this.setValueFor(defaultElement, value); + return this; + } + subscribe(subscriber, target) { + const subscriberSet = this.getOrCreateSubscriberSet(target); + if (target && !DesignTokenNode.existsFor(target)) { + DesignTokenNode.getOrCreate(target); + } + if (!subscriberSet.has(subscriber)) { + subscriberSet.add(subscriber); + } + } + unsubscribe(subscriber, target) { + const list = this.subscribers.get(target || this); + if (list && list.has(subscriber)) { + list.delete(subscriber); + } + } + /** + * Notifies subscribers that the value for an element has changed. + * @param element - The element to emit a notification for + */ + notify(element) { + const record = Object.freeze({ token: this, target: element }); + if (this.subscribers.has(this)) { + this.subscribers.get(this).forEach((sub) => sub.handleChange(record)); + } + if (this.subscribers.has(element)) { + this.subscribers.get(element).forEach((sub) => sub.handleChange(record)); + } + } + /** + * Alias the token to the provided token. + * @param token - the token to alias to + */ + alias(token) { + return ((target) => token.getValueFor(target)); + } + }; + DesignTokenImpl.uniqueId = /* @__PURE__ */ (() => { + let id = 0; + return () => { + id++; + return id.toString(16); + }; + })(); + DesignTokenImpl.tokensById = /* @__PURE__ */ new Map(); + CustomPropertyReflector = class { + startReflection(token, target) { + token.subscribe(this, target); + this.handleChange({ token, target }); + } + stopReflection(token, target) { + token.unsubscribe(this, target); + this.remove(token, target); + } + handleChange(record) { + const { token, target } = record; + this.add(token, target); + } + add(token, target) { + PropertyTargetManager.getOrCreate(target).setProperty(token.cssCustomProperty, this.resolveCSSValue(DesignTokenNode.getOrCreate(target).get(token))); + } + remove(token, target) { + PropertyTargetManager.getOrCreate(target).removeProperty(token.cssCustomProperty); + } + resolveCSSValue(value) { + return value && typeof value.createCSS === "function" ? value.createCSS() : value; + } + }; + DesignTokenBindingObserver = class { + constructor(source, token, node) { + this.source = source; + this.token = token; + this.node = node; + this.dependencies = /* @__PURE__ */ new Set(); + this.observer = Observable.binding(source, this, false); + this.observer.handleChange = this.observer.call; + this.handleChange(); + } + disconnect() { + this.observer.disconnect(); + } + /** + * @internal + */ + handleChange() { + try { + this.node.store.set(this.token, this.observer.observe(this.node.target, defaultExecutionContext)); + } catch (e) { + console.error(e); + } + } + }; + Store = class { + constructor() { + this.values = /* @__PURE__ */ new Map(); + } + set(token, value) { + if (this.values.get(token) !== value) { + this.values.set(token, value); + Observable.getNotifier(this).notify(token.id); + } + } + get(token) { + Observable.track(this, token.id); + return this.values.get(token); + } + delete(token) { + this.values.delete(token); + Observable.getNotifier(this).notify(token.id); + } + all() { + return this.values.entries(); + } + }; + nodeCache = /* @__PURE__ */ new WeakMap(); + childToParent = /* @__PURE__ */ new WeakMap(); + DesignTokenNode = class _DesignTokenNode { + constructor(target) { + this.target = target; + this.store = new Store(); + this.children = []; + this.assignedValues = /* @__PURE__ */ new Map(); + this.reflecting = /* @__PURE__ */ new Set(); + this.bindingObservers = /* @__PURE__ */ new Map(); + this.tokenValueChangeHandler = { + handleChange: (source, arg) => { + const token = DesignTokenImpl.getTokenById(arg); + if (token) { + token.notify(this.target); + this.updateCSSTokenReflection(source, token); + } + } + }; + nodeCache.set(target, this); + Observable.getNotifier(this.store).subscribe(this.tokenValueChangeHandler); + if (target instanceof FASTElement) { + target.$fastController.addBehaviors([this]); + } else if (target.isConnected) { + this.bind(); + } + } + /** + * Returns a DesignTokenNode for an element. + * Creates a new instance if one does not already exist for a node, + * otherwise returns the cached instance + * + * @param target - The HTML element to retrieve a DesignTokenNode for + */ + static getOrCreate(target) { + return nodeCache.get(target) || new _DesignTokenNode(target); + } + /** + * Determines if a DesignTokenNode has been created for a target + * @param target - The element to test + */ + static existsFor(target) { + return nodeCache.has(target); + } + /** + * Searches for and return the nearest parent DesignTokenNode. + * Null is returned if no node is found or the node provided is for a default element. + */ + static findParent(node) { + if (!(defaultElement === node.target)) { + let parent = composedParent(node.target); + while (parent !== null) { + if (nodeCache.has(parent)) { + return nodeCache.get(parent); + } + parent = composedParent(parent); + } + return _DesignTokenNode.getOrCreate(defaultElement); + } + return null; + } + /** + * Finds the closest node with a value explicitly assigned for a token, otherwise null. + * @param token - The token to look for + * @param start - The node to start looking for value assignment + * @returns + */ + static findClosestAssignedNode(token, start) { + let current = start; + do { + if (current.has(token)) { + return current; + } + current = current.parent ? current.parent : current.target !== defaultElement ? _DesignTokenNode.getOrCreate(defaultElement) : null; + } while (current !== null); + return null; + } + /** + * The parent DesignTokenNode, or null. + */ + get parent() { + return childToParent.get(this) || null; + } + updateCSSTokenReflection(source, token) { + if (DesignTokenImpl.isCSSDesignToken(token)) { + const parent = this.parent; + const reflecting = this.isReflecting(token); + if (parent) { + const parentValue = parent.get(token); + const sourceValue = source.get(token); + if (parentValue !== sourceValue && !reflecting) { + this.reflectToCSS(token); + } else if (parentValue === sourceValue && reflecting) { + this.stopReflectToCSS(token); + } + } else if (!reflecting) { + this.reflectToCSS(token); + } + } + } + /** + * Checks if a token has been assigned an explicit value the node. + * @param token - the token to check. + */ + has(token) { + return this.assignedValues.has(token); + } + /** + * Gets the value of a token for a node + * @param token - The token to retrieve the value for + * @returns + */ + get(token) { + const value = this.store.get(token); + if (value !== void 0) { + return value; + } + const raw = this.getRaw(token); + if (raw !== void 0) { + this.hydrate(token, raw); + return this.get(token); + } + } + /** + * Retrieves the raw assigned value of a token from the nearest assigned node. + * @param token - The token to retrieve a raw value for + * @returns + */ + getRaw(token) { + var _a; + if (this.assignedValues.has(token)) { + return this.assignedValues.get(token); + } + return (_a = _DesignTokenNode.findClosestAssignedNode(token, this)) === null || _a === void 0 ? void 0 : _a.getRaw(token); + } + /** + * Sets a token to a value for a node + * @param token - The token to set + * @param value - The value to set the token to + */ + set(token, value) { + if (DesignTokenImpl.isDerivedDesignTokenValue(this.assignedValues.get(token))) { + this.tearDownBindingObserver(token); + } + this.assignedValues.set(token, value); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + this.setupBindingObserver(token, value); + } else { + this.store.set(token, value); + } + } + /** + * Deletes a token value for the node. + * @param token - The token to delete the value for + */ + delete(token) { + this.assignedValues.delete(token); + this.tearDownBindingObserver(token); + const upstream = this.getRaw(token); + if (upstream) { + this.hydrate(token, upstream); + } else { + this.store.delete(token); + } + } + /** + * Invoked when the DesignTokenNode.target is attached to the document + */ + bind() { + const parent = _DesignTokenNode.findParent(this); + if (parent) { + parent.appendChild(this); + } + for (const key of this.assignedValues.keys()) { + key.notify(this.target); + } + } + /** + * Invoked when the DesignTokenNode.target is detached from the document + */ + unbind() { + if (this.parent) { + const parent = childToParent.get(this); + parent.removeChild(this); + } + for (const token of this.bindingObservers.keys()) { + this.tearDownBindingObserver(token); + } + } + /** + * Appends a child to a parent DesignTokenNode. + * @param child - The child to append to the node + */ + appendChild(child) { + if (child.parent) { + childToParent.get(child).removeChild(child); + } + const reParent = this.children.filter((x) => child.contains(x)); + childToParent.set(child, this); + this.children.push(child); + reParent.forEach((x) => child.appendChild(x)); + Observable.getNotifier(this.store).subscribe(child); + for (const [token, value] of this.store.all()) { + child.hydrate(token, this.bindingObservers.has(token) ? this.getRaw(token) : value); + child.updateCSSTokenReflection(child.store, token); + } + } + /** + * Removes a child from a node. + * @param child - The child to remove. + */ + removeChild(child) { + const childIndex = this.children.indexOf(child); + if (childIndex !== -1) { + this.children.splice(childIndex, 1); + } + Observable.getNotifier(this.store).unsubscribe(child); + if (child.parent !== this) { + return false; + } + const deleted = childToParent.delete(child); + for (const [token] of this.store.all()) { + child.hydrate(token, child.getRaw(token)); + child.updateCSSTokenReflection(child.store, token); + } + return deleted; + } + /** + * Tests whether a provided node is contained by + * the calling node. + * @param test - The node to test + */ + contains(test) { + return composedContains(this.target, test.target); + } + /** + * Instructs the node to reflect a design token for the provided token. + * @param token - The design token to reflect + */ + reflectToCSS(token) { + if (!this.isReflecting(token)) { + this.reflecting.add(token); + _DesignTokenNode.cssCustomPropertyReflector.startReflection(token, this.target); + } + } + /** + * Stops reflecting a DesignToken to CSS + * @param token - The design token to stop reflecting + */ + stopReflectToCSS(token) { + if (this.isReflecting(token)) { + this.reflecting.delete(token); + _DesignTokenNode.cssCustomPropertyReflector.stopReflection(token, this.target); + } + } + /** + * Determines if a token is being reflected to CSS for a node. + * @param token - The token to check for reflection + * @returns + */ + isReflecting(token) { + return this.reflecting.has(token); + } + /** + * Handle changes to upstream tokens + * @param source - The parent DesignTokenNode + * @param property - The token ID that changed + */ + handleChange(source, property) { + const token = DesignTokenImpl.getTokenById(property); + if (!token) { + return; + } + this.hydrate(token, this.getRaw(token)); + this.updateCSSTokenReflection(this.store, token); + } + /** + * Hydrates a token with a DesignTokenValue, making retrieval available. + * @param token - The token to hydrate + * @param value - The value to hydrate + */ + hydrate(token, value) { + if (!this.has(token)) { + const observer = this.bindingObservers.get(token); + if (DesignTokenImpl.isDerivedDesignTokenValue(value)) { + if (observer) { + if (observer.source !== value) { + this.tearDownBindingObserver(token); + this.setupBindingObserver(token, value); + } + } else { + this.setupBindingObserver(token, value); + } + } else { + if (observer) { + this.tearDownBindingObserver(token); + } + this.store.set(token, value); + } + } + } + /** + * Sets up a binding observer for a derived token value that notifies token + * subscribers on change. + * + * @param token - The token to notify when the binding updates + * @param source - The binding source + */ + setupBindingObserver(token, source) { + const binding = new DesignTokenBindingObserver(source, token, this); + this.bindingObservers.set(token, binding); + return binding; + } + /** + * Tear down a binding observer for a token. + */ + tearDownBindingObserver(token) { + if (this.bindingObservers.has(token)) { + this.bindingObservers.get(token).disconnect(); + this.bindingObservers.delete(token); + return true; + } + return false; + } + }; + DesignTokenNode.cssCustomPropertyReflector = new CustomPropertyReflector(); + __decorate([ + observable + ], DesignTokenNode.prototype, "children", void 0); + DesignToken = Object.freeze({ + create, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been connected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * 3. The HTMLElement is not connected to the document when token values are set. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyConnection(element) { + if (!element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).bind(); + return true; + }, + /** + * Informs DesignToken that an HTMLElement for which tokens have + * been set has been disconnected to the document. + * + * The browser does not provide a reliable mechanism to observe an HTMLElement's connectedness + * in all scenarios, so invoking this method manually is necessary when: + * + * 1. Token values are set for an HTMLElement. + * 2. The HTMLElement does not inherit from FASTElement. + * + * @param element - The element to notify + * @returns - true if notification was successful, otherwise false. + */ + notifyDisconnection(element) { + if (element.isConnected || !DesignTokenNode.existsFor(element)) { + return false; + } + DesignTokenNode.getOrCreate(element).unbind(); + return true; + }, + /** + * Registers and element or document as a DesignToken root. + * {@link CSSDesignToken | CSSDesignTokens} with default values assigned via + * {@link (DesignToken:interface).withDefault} will emit CSS custom properties to all + * registered roots. + * @param target - The root to register + */ + registerRoot(target = defaultElement) { + RootStyleSheetTarget.registerRoot(target); + }, + /** + * Unregister an element or document as a DesignToken root. + * @param target - The root to deregister + */ + unregisterRoot(target = defaultElement) { + RootStyleSheetTarget.unregisterRoot(target); + } + }); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js + function extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback) { + if (typeof params === "string") { + return { + name: params, + type: elementDefinitionType, + callback: elementDefinitionCallback + }; + } else { + return params; + } + } + var ElementDisambiguation, elementTypesByTag, elementTagsByType, rootDesignSystem, designSystemKey, DesignSystem, DefaultDesignSystem, ElementDefinitionEntry; + var init_design_system = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/design-system.js"() { + init_esm(); + init_foundation_element(); + init_di(); + init_design_token(); + init_component_presentation(); + ElementDisambiguation = Object.freeze({ + /** + * Skip defining the element but still call the provided callback passed + * to DesignSystemRegistrationContext.tryDefineElement + */ + definitionCallbackOnly: null, + /** + * Ignore the duplicate element entirely. + */ + ignoreDuplicate: /* @__PURE__ */ Symbol() + }); + elementTypesByTag = /* @__PURE__ */ new Map(); + elementTagsByType = /* @__PURE__ */ new Map(); + rootDesignSystem = null; + designSystemKey = DI.createInterface((x) => x.cachedCallback((handler) => { + if (rootDesignSystem === null) { + rootDesignSystem = new DefaultDesignSystem(null, handler); + } + return rootDesignSystem; + })); + DesignSystem = Object.freeze({ + /** + * Returns the HTML element name that the type is defined as. + * @param type - The type to lookup. + * @public + */ + tagFor(type) { + return elementTagsByType.get(type); + }, + /** + * Searches the DOM hierarchy for the design system that is responsible + * for the provided element. + * @param element - The element to locate the design system for. + * @returns The located design system. + * @public + */ + responsibleFor(element) { + const owned = element.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.findResponsibleContainer(element); + return container.get(designSystemKey); + }, + /** + * Gets the DesignSystem if one is explicitly defined on the provided element; + * otherwise creates a design system defined directly on the element. + * @param element - The element to get or create a design system for. + * @returns The design system. + * @public + */ + getOrCreate(node) { + if (!node) { + if (rootDesignSystem === null) { + rootDesignSystem = DI.getOrCreateDOMContainer().get(designSystemKey); + } + return rootDesignSystem; + } + const owned = node.$$designSystem$$; + if (owned) { + return owned; + } + const container = DI.getOrCreateDOMContainer(node); + if (container.has(designSystemKey, false)) { + return container.get(designSystemKey); + } else { + const system = new DefaultDesignSystem(node, container); + container.register(Registration.instance(designSystemKey, system)); + return system; + } + } + }); + DefaultDesignSystem = class { + constructor(owner, container) { + this.owner = owner; + this.container = container; + this.designTokensInitialized = false; + this.prefix = "fast"; + this.shadowRootMode = void 0; + this.disambiguate = () => ElementDisambiguation.definitionCallbackOnly; + if (owner !== null) { + owner.$$designSystem$$ = this; + } + } + withPrefix(prefix) { + this.prefix = prefix; + return this; + } + withShadowRootMode(mode) { + this.shadowRootMode = mode; + return this; + } + withElementDisambiguation(callback) { + this.disambiguate = callback; + return this; + } + withDesignTokenRoot(root) { + this.designTokenRoot = root; + return this; + } + register(...registrations) { + const container = this.container; + const elementDefinitionEntries = []; + const disambiguate = this.disambiguate; + const shadowRootMode = this.shadowRootMode; + const context = { + elementPrefix: this.prefix, + tryDefineElement(params, elementDefinitionType, elementDefinitionCallback) { + const extractedParams = extractTryDefineElementParams(params, elementDefinitionType, elementDefinitionCallback); + const { name, callback, baseClass } = extractedParams; + let { type } = extractedParams; + let elementName = name; + let typeFoundByName = elementTypesByTag.get(elementName); + let needsDefine = true; + while (typeFoundByName) { + const result = disambiguate(elementName, type, typeFoundByName); + switch (result) { + case ElementDisambiguation.ignoreDuplicate: + return; + case ElementDisambiguation.definitionCallbackOnly: + needsDefine = false; + typeFoundByName = void 0; + break; + default: + elementName = result; + typeFoundByName = elementTypesByTag.get(elementName); + break; + } + } + if (needsDefine) { + if (elementTagsByType.has(type) || type === FoundationElement) { + type = class extends type { + }; + } + elementTypesByTag.set(elementName, type); + elementTagsByType.set(type, elementName); + if (baseClass) { + elementTagsByType.set(baseClass, elementName); + } + } + elementDefinitionEntries.push(new ElementDefinitionEntry(container, elementName, type, shadowRootMode, callback, needsDefine)); + } + }; + if (!this.designTokensInitialized) { + this.designTokensInitialized = true; + if (this.designTokenRoot !== null) { + DesignToken.registerRoot(this.designTokenRoot); + } + } + container.registerWithContext(context, ...registrations); + for (const entry of elementDefinitionEntries) { + entry.callback(entry); + if (entry.willDefine && entry.definition !== null) { + entry.definition.define(); + } + } + return this; + } + }; + ElementDefinitionEntry = class { + constructor(container, name, type, shadowRootMode, callback, willDefine) { + this.container = container; + this.name = name; + this.type = type; + this.shadowRootMode = shadowRootMode; + this.callback = callback; + this.willDefine = willDefine; + this.definition = null; + } + definePresentation(presentation) { + ComponentPresentation.define(this.name, presentation, this.container); + } + defineElement(definition) { + this.definition = new FASTElementDefinition(this.type, Object.assign(Object.assign({}, definition), { name: this.name })); + } + tagFor(type) { + return DesignSystem.tagFor(type); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js + var init_registration_context = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/registration-context.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js + var init_design_system2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/design-system/index.js"() { + init_design_system(); + init_component_presentation(); + init_registration_context(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/di/index.js + var init_di2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/di/index.js"() { + init_di(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js + var init_dialog_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.template.js"() { + } + }); + + // node_modules/tabbable/dist/index.esm.js + var candidateSelectors, candidateSelector, NoElement, matches, getRootNode, getTabindex, isInput, isHiddenInput, isDetailsWithSummary, getCheckedRadio, isTabbableRadio, isRadio, isNonTabbableRadio, isZeroArea, isHidden, isDisabledFromFieldset, isNodeMatchingSelectorFocusable, isNodeMatchingSelectorTabbable, isTabbable, focusableCandidateSelector, isFocusable; + var init_index_esm = __esm({ + "node_modules/tabbable/dist/index.esm.js"() { + candidateSelectors = ["input", "select", "textarea", "a[href]", "button", "[tabindex]:not(slot)", "audio[controls]", "video[controls]", '[contenteditable]:not([contenteditable="false"])', "details>summary:first-of-type", "details"]; + candidateSelector = /* @__PURE__ */ candidateSelectors.join(","); + NoElement = typeof Element === "undefined"; + matches = NoElement ? function() { + } : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; + getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) { + return element.getRootNode(); + } : function(element) { + return element.ownerDocument; + }; + getTabindex = function getTabindex2(node, isScope) { + if (node.tabIndex < 0) { + if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute("tabindex"), 10))) { + return 0; + } + } + return node.tabIndex; + }; + isInput = function isInput2(node) { + return node.tagName === "INPUT"; + }; + isHiddenInput = function isHiddenInput2(node) { + return isInput(node) && node.type === "hidden"; + }; + isDetailsWithSummary = function isDetailsWithSummary2(node) { + var r = node.tagName === "DETAILS" && Array.prototype.slice.apply(node.children).some(function(child) { + return child.tagName === "SUMMARY"; + }); + return r; + }; + getCheckedRadio = function getCheckedRadio2(nodes, form) { + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].checked && nodes[i].form === form) { + return nodes[i]; + } + } + }; + isTabbableRadio = function isTabbableRadio2(node) { + if (!node.name) { + return true; + } + var radioScope = node.form || getRootNode(node); + var queryRadios = function queryRadios2(name) { + return radioScope.querySelectorAll('input[type="radio"][name="' + name + '"]'); + }; + var radioSet; + if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && typeof window.CSS.escape === "function") { + radioSet = queryRadios(window.CSS.escape(node.name)); + } else { + try { + radioSet = queryRadios(node.name); + } catch (err) { + console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", err.message); + return false; + } + } + var checked = getCheckedRadio(radioSet, node.form); + return !checked || checked === node; + }; + isRadio = function isRadio2(node) { + return isInput(node) && node.type === "radio"; + }; + isNonTabbableRadio = function isNonTabbableRadio2(node) { + return isRadio(node) && !isTabbableRadio(node); + }; + isZeroArea = function isZeroArea2(node) { + var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height; + return width === 0 && height === 0; + }; + isHidden = function isHidden2(node, _ref) { + var displayCheck = _ref.displayCheck, getShadowRoot2 = _ref.getShadowRoot; + if (getComputedStyle(node).visibility === "hidden") { + return true; + } + var isDirectSummary = matches.call(node, "details>summary:first-of-type"); + var nodeUnderDetails = isDirectSummary ? node.parentElement : node; + if (matches.call(nodeUnderDetails, "details:not([open]) *")) { + return true; + } + var nodeRootHost = getRootNode(node).host; + var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node); + if (!displayCheck || displayCheck === "full") { + if (typeof getShadowRoot2 === "function") { + var originalNode = node; + while (node) { + var parentElement = node.parentElement; + var rootNode = getRootNode(node); + if (parentElement && !parentElement.shadowRoot && getShadowRoot2(parentElement) === true) { + return isZeroArea(node); + } else if (node.assignedSlot) { + node = node.assignedSlot; + } else if (!parentElement && rootNode !== node.ownerDocument) { + node = rootNode.host; + } else { + node = parentElement; + } + } + node = originalNode; + } + if (nodeIsAttached) { + return !node.getClientRects().length; + } + } else if (displayCheck === "non-zero-area") { + return isZeroArea(node); + } + return false; + }; + isDisabledFromFieldset = function isDisabledFromFieldset2(node) { + if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) { + var parentNode = node.parentElement; + while (parentNode) { + if (parentNode.tagName === "FIELDSET" && parentNode.disabled) { + for (var i = 0; i < parentNode.children.length; i++) { + var child = parentNode.children.item(i); + if (child.tagName === "LEGEND") { + return matches.call(parentNode, "fieldset[disabled] *") ? true : !child.contains(node); + } + } + return true; + } + parentNode = parentNode.parentElement; + } + } + return false; + }; + isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) { + if (node.disabled || isHiddenInput(node) || isHidden(node, options) || // For a details element with a summary, the summary element gets the focus + isDetailsWithSummary(node) || isDisabledFromFieldset(node)) { + return false; + } + return true; + }; + isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) { + if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) { + return false; + } + return true; + }; + isTabbable = function isTabbable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, candidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorTabbable(options, node); + }; + focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat("iframe").join(","); + isFocusable = function isFocusable2(node, options) { + options = options || {}; + if (!node) { + throw new Error("No node provided"); + } + if (matches.call(node, focusableCandidateSelector) === false) { + return false; + } + return isNodeMatchingSelectorFocusable(options, node); + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js + var Dialog; + var init_dialog = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/dialog.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + Dialog = class _Dialog extends FoundationElement { + constructor() { + super(...arguments); + this.modal = true; + this.hidden = false; + this.trapFocus = true; + this.trapFocusChanged = () => { + if (this.$fastController.isConnected) { + this.updateTrapFocus(); + } + }; + this.isTrappingFocus = false; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && !this.hidden) { + switch (e.key) { + case keyEscape: + this.dismiss(); + e.preventDefault(); + break; + case keyTab: + this.handleTabKeyDown(e); + break; + } + } + }; + this.handleDocumentFocus = (e) => { + if (!e.defaultPrevented && this.shouldForceFocus(e.target)) { + this.focusFirstElement(); + e.preventDefault(); + } + }; + this.handleTabKeyDown = (e) => { + if (!this.trapFocus || this.hidden) { + return; + } + const bounds = this.getTabQueueBounds(); + if (bounds.length === 0) { + return; + } + if (bounds.length === 1) { + bounds[0].focus(); + e.preventDefault(); + return; + } + if (e.shiftKey && e.target === bounds[0]) { + bounds[bounds.length - 1].focus(); + e.preventDefault(); + } else if (!e.shiftKey && e.target === bounds[bounds.length - 1]) { + bounds[0].focus(); + e.preventDefault(); + } + return; + }; + this.getTabQueueBounds = () => { + const bounds = []; + return _Dialog.reduceTabbableItems(bounds, this); + }; + this.focusFirstElement = () => { + const bounds = this.getTabQueueBounds(); + if (bounds.length > 0) { + bounds[0].focus(); + } else { + if (this.dialog instanceof HTMLElement) { + this.dialog.focus(); + } + } + }; + this.shouldForceFocus = (currentFocusElement) => { + return this.isTrappingFocus && !this.contains(currentFocusElement); + }; + this.shouldTrapFocus = () => { + return this.trapFocus && !this.hidden; + }; + this.updateTrapFocus = (shouldTrapFocusOverride) => { + const shouldTrapFocus = shouldTrapFocusOverride === void 0 ? this.shouldTrapFocus() : shouldTrapFocusOverride; + if (shouldTrapFocus && !this.isTrappingFocus) { + this.isTrappingFocus = true; + document.addEventListener("focusin", this.handleDocumentFocus); + DOM.queueUpdate(() => { + if (this.shouldForceFocus(document.activeElement)) { + this.focusFirstElement(); + } + }); + } else if (!shouldTrapFocus && this.isTrappingFocus) { + this.isTrappingFocus = false; + document.removeEventListener("focusin", this.handleDocumentFocus); + } + }; + } + /** + * @internal + */ + dismiss() { + this.$emit("dismiss"); + this.$emit("cancel"); + } + /** + * The method to show the dialog. + * + * @public + */ + show() { + this.hidden = false; + } + /** + * The method to hide the dialog. + * + * @public + */ + hide() { + this.hidden = true; + this.$emit("close"); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + document.addEventListener("keydown", this.handleDocumentKeydown); + this.notifier = Observable.getNotifier(this); + this.notifier.subscribe(this, "hidden"); + this.updateTrapFocus(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.updateTrapFocus(false); + this.notifier.unsubscribe(this, "hidden"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "hidden": + this.updateTrapFocus(); + break; + default: + break; + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceTabbableItems(elements2, element) { + if (element.getAttribute("tabindex") === "-1") { + return elements2; + } + if (isTabbable(element) || _Dialog.isFocusableFastElement(element) && _Dialog.hasTabbableShadow(element)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Dialog.reduceTabbableItems, [])); + } + return elements2; + } + /** + * Test if element is focusable fast element + * + * @param element - The element to check + * + * @internal + */ + static isFocusableFastElement(element) { + var _a, _b; + return !!((_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus); + } + /** + * Test if the element has a focusable shadow + * + * @param element - The element to check + * + * @internal + */ + static hasTabbableShadow(element) { + var _a, _b; + return Array.from((_b = (_a = element.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll("*")) !== null && _b !== void 0 ? _b : []).some((x) => { + return isTabbable(x); + }); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "modal", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Dialog.prototype, "hidden", void 0); + __decorate([ + attr({ attribute: "trap-focus", mode: "boolean" }) + ], Dialog.prototype, "trapFocus", void 0); + __decorate([ + attr({ attribute: "aria-describedby" }) + ], Dialog.prototype, "ariaDescribedby", void 0); + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], Dialog.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], Dialog.prototype, "ariaLabel", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js + var init_dialog2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/dialog/index.js"() { + init_dialog_template(); + init_dialog(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js + var init_disclosure_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js + var Disclosure; + var init_disclosure = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/disclosure.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Disclosure = class extends FoundationElement { + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.setup(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.details.removeEventListener("toggle", this.onToggle); + } + /** + * Show extra content. + */ + show() { + this.details.open = true; + } + /** + * Hide extra content. + */ + hide() { + this.details.open = false; + } + /** + * Toggle the current(expanded/collapsed) state. + */ + toggle() { + this.details.open = !this.details.open; + } + /** + * Register listener and set default disclosure mode + */ + setup() { + this.onToggle = this.onToggle.bind(this); + this.details.addEventListener("toggle", this.onToggle); + if (this.expanded) { + this.show(); + } + } + /** + * Update the aria attr and fire `toggle` event + */ + onToggle() { + this.expanded = this.details.open; + this.$emit("toggle"); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Disclosure.prototype, "expanded", void 0); + __decorate([ + attr + ], Disclosure.prototype, "title", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js + var init_disclosure2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/disclosure/index.js"() { + init_disclosure_template(); + init_disclosure(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js + var dividerTemplate; + var init_divider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.template.js"() { + init_esm(); + dividerTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js + var DividerRole; + var init_divider_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.options.js"() { + DividerRole = { + /** + * The divider semantically separates content + */ + separator: "separator", + /** + * The divider has no semantic value and is for visual presentation only. + */ + presentation: "presentation" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js + var Divider; + var init_divider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/divider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_divider_options(); + Divider = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = DividerRole.separator; + this.orientation = Orientation.horizontal; + } + }; + __decorate([ + attr + ], Divider.prototype, "role", void 0); + __decorate([ + attr + ], Divider.prototype, "orientation", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js + var init_divider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/divider/index.js"() { + init_divider_template(); + init_divider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js + var FlipperDirection; + var init_flipper_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.options.js"() { + FlipperDirection = { + next: "next", + previous: "previous" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js + var init_flipper_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js + var Flipper; + var init_flipper = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/flipper.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + init_flipper_options(); + Flipper = class extends FoundationElement { + constructor() { + super(...arguments); + this.hiddenFromAT = true; + this.direction = FlipperDirection.next; + } + /** + * Simulate a click event when the flipper has focus and the user hits enter or space keys + * Blur focus if the user hits escape key + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + if (!this.hiddenFromAT) { + const key = e.key; + if (key === "Enter" || key === "Space") { + this.$emit("click", e); + } + if (key === "Escape") { + this.blur(); + } + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Flipper.prototype, "disabled", void 0); + __decorate([ + attr({ attribute: "aria-hidden", converter: booleanConverter }) + ], Flipper.prototype, "hiddenFromAT", void 0); + __decorate([ + attr + ], Flipper.prototype, "direction", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js + var init_flipper2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/flipper/index.js"() { + init_flipper_template(); + init_flipper(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js + var init_form_associated2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/form-associated/index.js"() { + init_form_associated(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js + var init_foundation_element2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/foundation-element/index.js"() { + init_foundation_element(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js + var listboxOptionTemplate; + var init_listbox_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/listbox-option.template.js"() { + init_esm(); + init_start_end(); + listboxOptionTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js + var init_listbox_option2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox-option/index.js"() { + init_listbox_option(); + init_listbox_option_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js + var ListboxElement; + var init_listbox_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.element.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + ListboxElement = class extends Listbox { + constructor() { + super(...arguments); + this.activeIndex = -1; + this.rangeStartIndex = -1; + } + /** + * Returns the last checked option. + * + * @internal + */ + get activeOption() { + return this.options[this.activeIndex]; + } + /** + * Returns the list of checked options. + * + * @internal + */ + get checkedOptions() { + var _a; + return (_a = this.options) === null || _a === void 0 ? void 0 : _a.filter((o) => o.checked); + } + /** + * Returns the index of the first selected option. + * + * @internal + */ + get firstSelectedOptionIndex() { + return this.options.indexOf(this.firstSelectedOption); + } + /** + * Updates the `ariaActiveDescendant` property when the active index changes. + * + * @param prev - the previous active index + * @param next - the next active index + * + * @internal + */ + activeIndexChanged(prev, next) { + var _a, _b; + this.ariaActiveDescendant = (_b = (_a = this.options[next]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ""; + this.focusAndScrollOptionIntoView(); + } + /** + * Toggles the checked state for the currently active option. + * + * @remarks + * Multiple-selection mode only. + * + * @internal + */ + checkActiveIndex() { + if (!this.multiple) { + return; + } + const activeItem = this.activeOption; + if (activeItem) { + activeItem.checked = true; + } + } + /** + * Sets the active index to the first option and marks it as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkFirstOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex + 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and sets the matching option as checked. + * + * @remarks + * Multi-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkLastOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.options.length); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex = this.options.length - 1; + this.checkActiveIndex(); + } + /** + * @override + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.addEventListener("focusout", this.focusoutHandler); + } + /** + * @override + * @internal + */ + disconnectedCallback() { + this.removeEventListener("focusout", this.focusoutHandler); + super.disconnectedCallback(); + } + /** + * Increments the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkNextOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.rangeStartIndex, this.activeIndex + 1); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex += this.activeIndex < this.options.length - 1 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Decrements the active index and marks the matching option as checked. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - mark all options unchecked before changing the active index + * + * @internal + */ + checkPreviousOption(preserveChecked = false) { + if (preserveChecked) { + if (this.rangeStartIndex === -1) { + this.rangeStartIndex = this.activeIndex; + } + if (this.checkedOptions.length === 1) { + this.rangeStartIndex += 1; + } + this.options.forEach((o, i) => { + o.checked = inRange(i, this.activeIndex, this.rangeStartIndex); + }); + } else { + this.uncheckAllOptions(); + } + this.activeIndex -= this.activeIndex > 0 ? 1 : 0; + this.checkActiveIndex(); + } + /** + * Handles click events for listbox options. + * + * @param e - the event object + * + * @override + * @internal + */ + clickHandler(e) { + var _a; + if (!this.multiple) { + return super.clickHandler(e); + } + const captured = (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest(`[role=option]`); + if (!captured || captured.disabled) { + return; + } + this.uncheckAllOptions(); + this.activeIndex = this.options.indexOf(captured); + this.checkActiveIndex(); + this.toggleSelectedForAllCheckedOptions(); + return true; + } + /** + * @override + * @internal + */ + focusAndScrollOptionIntoView() { + super.focusAndScrollOptionIntoView(this.activeOption); + } + /** + * In multiple-selection mode: + * If any options are selected, the first selected option is checked when + * the listbox receives focus. If no options are selected, the first + * selectable option is checked. + * + * @override + * @internal + */ + focusinHandler(e) { + if (!this.multiple) { + return super.focusinHandler(e); + } + if (!this.shouldSkipFocus && e.target === e.currentTarget) { + this.uncheckAllOptions(); + if (this.activeIndex === -1) { + this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0; + } + this.checkActiveIndex(); + this.setSelectedOptions(); + this.focusAndScrollOptionIntoView(); + } + this.shouldSkipFocus = false; + } + /** + * Unchecks all options when the listbox loses focus. + * + * @internal + */ + focusoutHandler(e) { + if (this.multiple) { + this.uncheckAllOptions(); + } + } + /** + * Handles keydown actions for listbox navigation and typeahead + * + * @override + * @internal + */ + keydownHandler(e) { + if (!this.multiple) { + return super.keydownHandler(e); + } + if (this.disabled) { + return true; + } + const { key, shiftKey } = e; + this.shouldSkipFocus = false; + switch (key) { + // Select the first available option + case keyHome: { + this.checkFirstOption(shiftKey); + return; + } + // Select the next selectable option + case keyArrowDown: { + this.checkNextOption(shiftKey); + return; + } + // Select the previous selectable option + case keyArrowUp: { + this.checkPreviousOption(shiftKey); + return; + } + // Select the last available option + case keyEnd: { + this.checkLastOption(shiftKey); + return; + } + case keyTab: { + this.focusAndScrollOptionIntoView(); + return true; + } + case keyEscape: { + this.uncheckAllOptions(); + this.checkActiveIndex(); + return true; + } + case keySpace: { + e.preventDefault(); + if (this.typeAheadExpired) { + this.toggleSelectedForAllCheckedOptions(); + return; + } + } + // Send key to Typeahead handler + default: { + if (key.length === 1) { + this.handleTypeAhead(`${key}`); + } + return true; + } + } + } + /** + * Prevents `focusin` events from firing before `click` events when the + * element is unfocused. + * + * @override + * @internal + */ + mousedownHandler(e) { + if (e.offsetX >= 0 && e.offsetX <= this.scrollWidth) { + return super.mousedownHandler(e); + } + } + /** + * Switches between single-selection and multi-selection mode. + * + * @internal + */ + multipleChanged(prev, next) { + var _a; + this.ariaMultiSelectable = next ? "true" : null; + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o) => { + o.checked = next ? false : void 0; + }); + this.setSelectedOptions(); + } + /** + * Sets an option as selected and gives it focus. + * + * @override + * @public + */ + setSelectedOptions() { + if (!this.multiple) { + super.setSelectedOptions(); + return; + } + if (this.$fastController.isConnected && this.options) { + this.selectedOptions = this.options.filter((o) => o.selected); + this.focusAndScrollOptionIntoView(); + } + } + /** + * Ensures the size is a positive integer when the property is updated. + * + * @param prev - the previous size value + * @param next - the current size value + * + * @internal + */ + sizeChanged(prev, next) { + var _a; + const size = Math.max(0, parseInt((_a = next === null || next === void 0 ? void 0 : next.toFixed()) !== null && _a !== void 0 ? _a : "", 10)); + if (size !== next) { + DOM.queueUpdate(() => { + this.size = size; + }); + } + } + /** + * Toggles the selected state of the provided options. If any provided items + * are in an unselected state, all items are set to selected. If every + * provided item is selected, they are all unselected. + * + * @internal + */ + toggleSelectedForAllCheckedOptions() { + const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled); + const force = !enabledCheckedOptions.every((o) => o.selected); + enabledCheckedOptions.forEach((o) => o.selected = force); + this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]); + this.setSelectedOptions(); + } + /** + * @override + * @internal + */ + typeaheadBufferChanged(prev, next) { + if (!this.multiple) { + super.typeaheadBufferChanged(prev, next); + return; + } + if (this.$fastController.isConnected) { + const typeaheadMatches = this.getTypeaheadMatches(); + const activeIndex = this.options.indexOf(typeaheadMatches[0]); + if (activeIndex > -1) { + this.activeIndex = activeIndex; + this.uncheckAllOptions(); + this.checkActiveIndex(); + } + this.typeAheadExpired = false; + } + } + /** + * Unchecks all options. + * + * @remarks + * Multiple-selection mode only. + * + * @param preserveChecked - reset the rangeStartIndex + * + * @internal + */ + uncheckAllOptions(preserveChecked = false) { + this.options.forEach((o) => o.checked = this.multiple ? false : void 0); + if (!preserveChecked) { + this.rangeStartIndex = -1; + } + } + }; + __decorate([ + observable + ], ListboxElement.prototype, "activeIndex", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], ListboxElement.prototype, "multiple", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], ListboxElement.prototype, "size", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js + var init_listbox_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/listbox.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js + var init_listbox2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/listbox/index.js"() { + init_listbox(); + init_listbox_element(); + init_listbox_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js + var PickerMenu; + var init_picker_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.js"() { + init_tslib_es6(); + init_dist2(); + init_esm(); + init_foundation_element(); + PickerMenu = class extends FoundationElement { + constructor() { + super(...arguments); + this.optionElements = []; + } + menuElementsChanged() { + this.updateOptions(); + } + headerElementsChanged() { + this.updateOptions(); + } + footerElementsChanged() { + this.updateOptions(); + } + updateOptions() { + this.optionElements.splice(0, this.optionElements.length); + this.addSlottedListItems(this.headerElements); + this.addSlottedListItems(this.menuElements); + this.addSlottedListItems(this.footerElements); + this.$emit("optionsupdated", { bubbles: false }); + } + addSlottedListItems(slotChildren) { + if (slotChildren === void 0) { + return; + } + slotChildren.forEach((child) => { + if (child.nodeType === 1 && child.getAttribute("role") === "listitem") { + child.id = child.id || uniqueId("option-"); + this.optionElements.push(child); + } + }); + } + }; + __decorate([ + observable + ], PickerMenu.prototype, "menuElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "headerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "footerElements", void 0); + __decorate([ + observable + ], PickerMenu.prototype, "suggestionsAvailableText", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js + var defaultContentsTemplate, PickerMenuOption; + var init_picker_menu_option = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + defaultContentsTemplate = html` + +`; + PickerMenuOption = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.disconnectView(); + } + handleClick(e) { + if (e.defaultPrevented) { + return false; + } + this.handleInvoked(); + return false; + } + handleInvoked() { + this.$emit("pickeroptioninvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerMenuOption.prototype, "value", void 0); + __decorate([ + observable + ], PickerMenuOption.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js + var init_picker_list = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js + var defaultContentsTemplate2, PickerListItem; + var init_picker_list_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + defaultContentsTemplate2 = html` + +`; + PickerListItem = class extends FoundationElement { + contentsTemplateChanged() { + if (this.$fastController.isConnected) { + this.updateView(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updateView(); + } + /** + * @internal + */ + disconnectedCallback() { + this.disconnectView(); + super.disconnectedCallback(); + } + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + if (e.key === keyEnter) { + this.handleInvoke(); + return false; + } + return true; + } + handleClick(e) { + if (!e.defaultPrevented) { + this.handleInvoke(); + } + return false; + } + handleInvoke() { + this.$emit("pickeriteminvoked"); + } + updateView() { + var _a, _b; + this.disconnectView(); + this.customView = (_b = (_a = this.contentsTemplate) === null || _a === void 0 ? void 0 : _a.render(this, this)) !== null && _b !== void 0 ? _b : defaultContentsTemplate2.render(this, this); + } + disconnectView() { + var _a; + (_a = this.customView) === null || _a === void 0 ? void 0 : _a.dispose(); + this.customView = void 0; + } + }; + __decorate([ + attr({ attribute: "value" }) + ], PickerListItem.prototype, "value", void 0); + __decorate([ + observable + ], PickerListItem.prototype, "contentsTemplate", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js + var init_picker_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js + var _Picker, FormAssociatedPicker; + var init_picker_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Picker = class extends FoundationElement { + }; + FormAssociatedPicker = class extends FormAssociated(_Picker) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js + var pickerInputTemplate, Picker; + var init_picker = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_anchored_region2(); + init_picker_menu_option(); + init_picker_list_item(); + init_picker_form_associated(); + pickerInputTemplate = html` + +`; + Picker = class extends FormAssociatedPicker { + constructor() { + super(...arguments); + this.selection = ""; + this.filterSelected = true; + this.filterQuery = true; + this.noSuggestionsText = "No suggestions available"; + this.suggestionsAvailableText = "Suggestions available"; + this.loadingText = "Loading suggestions"; + this.menuPlacement = "bottom-fill"; + this.showLoading = false; + this.optionsList = []; + this.filteredOptionsList = []; + this.flyoutOpen = false; + this.menuFocusIndex = -1; + this.showNoOptions = false; + this.selectedItems = []; + this.inputElementView = null; + this.handleTextInput = (e) => { + this.query = this.inputElement.value; + }; + this.handleInputClick = (e) => { + e.preventDefault(); + this.toggleFlyout(true); + }; + this.setRegionProps = () => { + if (!this.flyoutOpen) { + return; + } + if (this.region === null || this.region === void 0) { + DOM.queueUpdate(this.setRegionProps); + return; + } + this.region.anchorElement = this.inputElement; + }; + this.configLookup = { + top: FlyoutPosTop, + bottom: FlyoutPosBottom, + tallest: FlyoutPosTallest, + "top-fill": FlyoutPosTopFill, + "bottom-fill": FlyoutPosBottomFill, + "tallest-fill": FlyoutPosTallestFill + }; + } + selectionChanged() { + if (this.$fastController.isConnected) { + this.handleSelectionChange(); + if (this.proxy instanceof HTMLInputElement) { + this.proxy.value = this.selection; + this.validate(); + } + } + } + optionsChanged() { + this.optionsList = this.options.split(",").map((opt) => opt.trim()).filter((opt) => opt !== ""); + } + menuPlacementChanged() { + if (this.$fastController.isConnected) { + this.updateMenuConfig(); + } + } + showLoadingChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + listItemTemplateChanged() { + this.updateListItemTemplate(); + } + defaultListItemTemplateChanged() { + this.updateListItemTemplate(); + } + menuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + defaultMenuOptionTemplateChanged() { + this.updateOptionTemplate(); + } + optionsListChanged() { + this.updateFilteredOptions(); + } + queryChanged() { + if (this.$fastController.isConnected) { + if (this.inputElement.value !== this.query) { + this.inputElement.value = this.query; + } + this.updateFilteredOptions(); + this.$emit("querychange", { bubbles: false }); + } + } + filteredOptionsListChanged() { + if (this.$fastController.isConnected) { + this.showNoOptions = this.filteredOptionsList.length === 0 && this.menuElement.querySelectorAll('[role="listitem"]').length === 0; + this.setFocusedOption(this.showNoOptions ? -1 : 0); + } + } + flyoutOpenChanged() { + if (this.flyoutOpen) { + DOM.queueUpdate(this.setRegionProps); + this.$emit("menuopening", { bubbles: false }); + } else { + this.$emit("menuclosing", { bubbles: false }); + } + } + showNoOptionsChanged() { + if (this.$fastController.isConnected) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + }); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.listElement = document.createElement(this.selectedListTag); + this.appendChild(this.listElement); + this.itemsPlaceholderElement = document.createComment(""); + this.listElement.append(this.itemsPlaceholderElement); + this.inputElementView = pickerInputTemplate.render(this, this.listElement); + const match = this.menuTag.toUpperCase(); + this.menuElement = Array.from(this.children).find((element) => { + return element.tagName === match; + }); + if (this.menuElement === void 0) { + this.menuElement = document.createElement(this.menuTag); + this.appendChild(this.menuElement); + } + if (this.menuElement.id === "") { + this.menuElement.id = uniqueId("listbox-"); + } + this.menuId = this.menuElement.id; + this.optionsPlaceholder = document.createComment(""); + this.menuElement.append(this.optionsPlaceholder); + this.updateMenuConfig(); + DOM.queueUpdate(() => this.initialize()); + } + disconnectedCallback() { + super.disconnectedCallback(); + this.toggleFlyout(false); + this.inputElement.removeEventListener("input", this.handleTextInput); + this.inputElement.removeEventListener("click", this.handleInputClick); + if (this.inputElementView !== null) { + this.inputElementView.dispose(); + this.inputElementView = null; + } + } + /** + * Move focus to the input element + * @public + */ + focus() { + this.inputElement.focus(); + } + /** + * Initialize the component. This is delayed a frame to ensure children are connected as well. + */ + initialize() { + this.updateListItemTemplate(); + this.updateOptionTemplate(); + this.itemsRepeatBehavior = new RepeatDirective((x) => x.selectedItems, (x) => x.activeListItemTemplate, { positioning: true }).createBehavior(this.itemsPlaceholderElement); + this.inputElement.addEventListener("input", this.handleTextInput); + this.inputElement.addEventListener("click", this.handleInputClick); + this.$fastController.addBehaviors([this.itemsRepeatBehavior]); + this.menuElement.suggestionsAvailableText = this.suggestionsAvailableText; + this.menuElement.addEventListener("optionsupdated", this.handleMenuOptionsUpdated); + this.optionsRepeatBehavior = new RepeatDirective((x) => x.filteredOptionsList, (x) => x.activeMenuOptionTemplate, { positioning: true }).createBehavior(this.optionsPlaceholder); + this.$fastController.addBehaviors([this.optionsRepeatBehavior]); + this.handleSelectionChange(); + } + /** + * Toggles the menu flyout + */ + toggleFlyout(open) { + if (this.flyoutOpen === open) { + return; + } + if (open && document.activeElement === this.inputElement) { + this.flyoutOpen = open; + DOM.queueUpdate(() => { + if (this.menuElement !== void 0) { + this.setFocusedOption(0); + } else { + this.disableMenu(); + } + }); + return; + } + this.flyoutOpen = false; + this.disableMenu(); + return; + } + /** + * Handle the menu options updated event from the child menu + */ + handleMenuOptionsUpdated(e) { + e.preventDefault(); + if (this.flyoutOpen) { + this.setFocusedOption(0); + } + } + /** + * Handle key down events. + */ + handleKeyDown(e) { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + // TODO: what should "home" and "end" keys do, exactly? + // + // case keyHome: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.setFocusedOption(0); + // } + // } + // return false; + // } + // case keyEnd: { + // if (!this.flyoutOpen) { + // this.toggleFlyout(true); + // } else { + // if (this.menuElement.optionElements.length > 0) { + // this.toggleFlyout(true); + // this.setFocusedOption(this.menuElement.optionElements.length - 1); + // } + // } + // return false; + // } + case keyArrowDown: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const nextFocusOptionIndex = this.flyoutOpen ? Math.min(this.menuFocusIndex + 1, this.menuElement.optionElements.length - 1) : 0; + this.setFocusedOption(nextFocusOptionIndex); + } + return false; + } + case keyArrowUp: { + if (!this.flyoutOpen) { + this.toggleFlyout(true); + } else { + const previousFocusOptionIndex = this.flyoutOpen ? Math.max(this.menuFocusIndex - 1, 0) : 0; + this.setFocusedOption(previousFocusOptionIndex); + } + return false; + } + case keyEscape: { + this.toggleFlyout(false); + return false; + } + case keyEnter: { + if (this.menuFocusIndex !== -1 && this.menuElement.optionElements.length > this.menuFocusIndex) { + this.menuElement.optionElements[this.menuFocusIndex].click(); + } + return false; + } + case keyArrowRight: { + if (document.activeElement !== this.inputElement) { + this.incrementFocusedItem(1); + return false; + } + return true; + } + case keyArrowLeft: { + if (this.inputElement.selectionStart === 0) { + this.incrementFocusedItem(-1); + return false; + } + return true; + } + case keyDelete: + case keyBackspace: { + if (document.activeElement === null) { + return true; + } + if (document.activeElement === this.inputElement) { + if (this.inputElement.selectionStart === 0) { + this.selection = this.selectedItems.slice(0, this.selectedItems.length - 1).toString(); + this.toggleFlyout(false); + return false; + } + return true; + } + const selectedItems = Array.from(this.listElement.children); + const currentFocusedItemIndex = selectedItems.indexOf(document.activeElement); + if (currentFocusedItemIndex > -1) { + this.selection = this.selectedItems.splice(currentFocusedItemIndex, 1).toString(); + DOM.queueUpdate(() => { + selectedItems[Math.min(selectedItems.length, currentFocusedItemIndex)].focus(); + }); + return false; + } + return true; + } + } + this.toggleFlyout(true); + return true; + } + /** + * Handle focus in events. + */ + handleFocusIn(e) { + return false; + } + /** + * Handle focus out events. + */ + handleFocusOut(e) { + if (this.menuElement === void 0 || !this.menuElement.contains(e.relatedTarget)) { + this.toggleFlyout(false); + } + return false; + } + /** + * The list of selected items has changed + */ + handleSelectionChange() { + if (this.selectedItems.toString() === this.selection) { + return; + } + this.selectedItems = this.selection === "" ? [] : this.selection.split(","); + this.updateFilteredOptions(); + DOM.queueUpdate(() => { + this.checkMaxItems(); + }); + this.$emit("selectionchange", { bubbles: false }); + } + /** + * Anchored region is loaded, menu and options exist in the DOM. + */ + handleRegionLoaded(e) { + DOM.queueUpdate(() => { + this.setFocusedOption(0); + this.$emit("menuloaded", { bubbles: false }); + }); + } + /** + * Checks if the maximum number of items has been chosen and updates the ui. + */ + checkMaxItems() { + if (this.inputElement === void 0) { + return; + } + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + if (document.activeElement === this.inputElement) { + const selectedItemInstances = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + selectedItemInstances[selectedItemInstances.length - 1].focus(); + } + this.inputElement.hidden = true; + } else { + this.inputElement.hidden = false; + } + } + /** + * A list item has been invoked. + */ + handleItemInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerListItem) { + const listItems = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + const itemIndex = listItems.indexOf(e.target); + if (itemIndex !== -1) { + const newSelection = this.selectedItems.slice(); + newSelection.splice(itemIndex, 1); + this.selection = newSelection.toString(); + DOM.queueUpdate(() => this.incrementFocusedItem(0)); + } + return false; + } + return true; + } + /** + * A menu option has been invoked. + */ + handleOptionInvoke(e) { + if (e.defaultPrevented) { + return false; + } + if (e.target instanceof PickerMenuOption) { + if (e.target.value !== void 0) { + this.selection = `${this.selection}${this.selection === "" ? "" : ","}${e.target.value}`; + } + this.inputElement.value = ""; + this.query = ""; + this.inputElement.focus(); + this.toggleFlyout(false); + return false; + } + return true; + } + /** + * Increments the focused list item by the specified amount + */ + incrementFocusedItem(increment) { + if (this.selectedItems.length === 0) { + this.inputElement.focus(); + return; + } + const selectedItemsAsElements = Array.from(this.listElement.querySelectorAll("[role='listitem']")); + if (document.activeElement !== null) { + let currentFocusedItemIndex = selectedItemsAsElements.indexOf(document.activeElement); + if (currentFocusedItemIndex === -1) { + currentFocusedItemIndex = selectedItemsAsElements.length; + } + const newFocusedItemIndex = Math.min(selectedItemsAsElements.length, Math.max(0, currentFocusedItemIndex + increment)); + if (newFocusedItemIndex === selectedItemsAsElements.length) { + if (this.maxSelected !== void 0 && this.selectedItems.length >= this.maxSelected) { + selectedItemsAsElements[newFocusedItemIndex - 1].focus(); + } else { + this.inputElement.focus(); + } + } else { + selectedItemsAsElements[newFocusedItemIndex].focus(); + } + } + } + /** + * Disables the menu. Note that the menu can be open, just doens't have any valid options on display. + */ + disableMenu() { + var _a, _b, _c; + this.menuFocusIndex = -1; + this.menuFocusOptionId = void 0; + (_a = this.inputElement) === null || _a === void 0 ? void 0 : _a.removeAttribute("aria-activedescendant"); + (_b = this.inputElement) === null || _b === void 0 ? void 0 : _b.removeAttribute("aria-owns"); + (_c = this.inputElement) === null || _c === void 0 ? void 0 : _c.removeAttribute("aria-expanded"); + } + /** + * Sets the currently focused menu option by index + */ + setFocusedOption(optionIndex) { + if (!this.flyoutOpen || optionIndex === -1 || this.showNoOptions || this.showLoading) { + this.disableMenu(); + return; + } + if (this.menuElement.optionElements.length === 0) { + return; + } + this.menuElement.optionElements.forEach((element) => { + element.setAttribute("aria-selected", "false"); + }); + this.menuFocusIndex = optionIndex; + if (this.menuFocusIndex > this.menuElement.optionElements.length - 1) { + this.menuFocusIndex = this.menuElement.optionElements.length - 1; + } + this.menuFocusOptionId = this.menuElement.optionElements[this.menuFocusIndex].id; + this.inputElement.setAttribute("aria-owns", this.menuId); + this.inputElement.setAttribute("aria-expanded", "true"); + this.inputElement.setAttribute("aria-activedescendant", this.menuFocusOptionId); + const focusedOption = this.menuElement.optionElements[this.menuFocusIndex]; + focusedOption.setAttribute("aria-selected", "true"); + this.menuElement.scrollTo(0, focusedOption.offsetTop); + } + /** + * Updates the template used for the list item repeat behavior + */ + updateListItemTemplate() { + var _a; + this.activeListItemTemplate = (_a = this.listItemTemplate) !== null && _a !== void 0 ? _a : this.defaultListItemTemplate; + } + /** + * Updates the template used for the menu option repeat behavior + */ + updateOptionTemplate() { + var _a; + this.activeMenuOptionTemplate = (_a = this.menuOptionTemplate) !== null && _a !== void 0 ? _a : this.defaultMenuOptionTemplate; + } + /** + * Updates the filtered options array + */ + updateFilteredOptions() { + this.filteredOptionsList = this.optionsList.slice(0); + if (this.filterSelected) { + this.filteredOptionsList = this.filteredOptionsList.filter((el) => this.selectedItems.indexOf(el) === -1); + } + if (this.filterQuery && this.query !== "" && this.query !== void 0) { + this.filteredOptionsList = this.filteredOptionsList.filter((el) => el.indexOf(this.query) !== -1); + } + } + /** + * Updates the menu configuration + */ + updateMenuConfig() { + let newConfig = this.configLookup[this.menuPlacement]; + if (newConfig === null) { + newConfig = FlyoutPosBottomFill; + } + this.menuConfig = Object.assign(Object.assign({}, newConfig), { autoUpdateMode: "auto", fixedPlacement: true, horizontalViewportLock: false, verticalViewportLock: false }); + } + }; + __decorate([ + attr({ attribute: "selection" }) + ], Picker.prototype, "selection", void 0); + __decorate([ + attr({ attribute: "options" }) + ], Picker.prototype, "options", void 0); + __decorate([ + attr({ attribute: "filter-selected", mode: "boolean" }) + ], Picker.prototype, "filterSelected", void 0); + __decorate([ + attr({ attribute: "filter-query", mode: "boolean" }) + ], Picker.prototype, "filterQuery", void 0); + __decorate([ + attr({ attribute: "max-selected" }) + ], Picker.prototype, "maxSelected", void 0); + __decorate([ + attr({ attribute: "no-suggestions-text" }) + ], Picker.prototype, "noSuggestionsText", void 0); + __decorate([ + attr({ attribute: "suggestions-available-text" }) + ], Picker.prototype, "suggestionsAvailableText", void 0); + __decorate([ + attr({ attribute: "loading-text" }) + ], Picker.prototype, "loadingText", void 0); + __decorate([ + attr({ attribute: "label" }) + ], Picker.prototype, "label", void 0); + __decorate([ + attr({ attribute: "labelledby" }) + ], Picker.prototype, "labelledBy", void 0); + __decorate([ + attr({ attribute: "placeholder" }) + ], Picker.prototype, "placeholder", void 0); + __decorate([ + attr({ attribute: "menu-placement" }) + ], Picker.prototype, "menuPlacement", void 0); + __decorate([ + observable + ], Picker.prototype, "showLoading", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeListItemTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "defaultMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "activeMenuOptionTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "listItemContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "menuOptionContentsTemplate", void 0); + __decorate([ + observable + ], Picker.prototype, "optionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "query", void 0); + __decorate([ + observable + ], Picker.prototype, "filteredOptionsList", void 0); + __decorate([ + observable + ], Picker.prototype, "flyoutOpen", void 0); + __decorate([ + observable + ], Picker.prototype, "menuId", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedListTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuTag", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusIndex", void 0); + __decorate([ + observable + ], Picker.prototype, "menuFocusOptionId", void 0); + __decorate([ + observable + ], Picker.prototype, "showNoOptions", void 0); + __decorate([ + observable + ], Picker.prototype, "menuConfig", void 0); + __decorate([ + observable + ], Picker.prototype, "selectedItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js + var init_picker_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js + var init_picker_menu_option_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-menu-option.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js + var init_picker_list_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js + var init_picker_list_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/picker-list-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js + var init_picker2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/picker/index.js"() { + init_picker_template(); + init_picker(); + init_picker_menu_template(); + init_picker_menu(); + init_picker_menu_option_template(); + init_picker_menu_option(); + init_picker_list_template(); + init_picker_list(); + init_picker_list_item_template(); + init_picker_list_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js + var MenuItemRole, roleForMenuItem; + var init_menu_item_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.options.js"() { + MenuItemRole = { + /** + * The menu item has a "menuitem" role + */ + menuitem: "menuitem", + /** + * The menu item has a "menuitemcheckbox" role + */ + menuitemcheckbox: "menuitemcheckbox", + /** + * The menu item has a "menuitemradio" role + */ + menuitemradio: "menuitemradio" + }; + roleForMenuItem = { + [MenuItemRole.menuitem]: "menuitem", + [MenuItemRole.menuitemcheckbox]: "menuitemcheckbox", + [MenuItemRole.menuitemradio]: "menuitemradio" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js + var MenuItem; + var init_menu_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_foundation_element(); + init_start_end(); + init_direction(); + init_apply_mixins(); + init_menu_item_options(); + MenuItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.role = MenuItemRole.menuitem; + this.hasSubmenu = false; + this.currentDirection = Direction.ltr; + this.focusSubmenuOnLoad = false; + this.handleMenuItemKeyDown = (e) => { + if (e.defaultPrevented) { + return false; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.invoke(); + return false; + case keyArrowRight: + this.expandAndFocus(); + return false; + case keyArrowLeft: + if (this.expanded) { + this.expanded = false; + this.focus(); + return false; + } + } + return true; + }; + this.handleMenuItemClick = (e) => { + if (e.defaultPrevented || this.disabled) { + return false; + } + this.invoke(); + return false; + }; + this.submenuLoaded = () => { + if (!this.focusSubmenuOnLoad) { + return; + } + this.focusSubmenuOnLoad = false; + if (this.hasSubmenu) { + this.submenu.focus(); + this.setAttribute("tabindex", "-1"); + } + }; + this.handleMouseOver = (e) => { + if (this.disabled || !this.hasSubmenu || this.expanded) { + return false; + } + this.expanded = true; + return false; + }; + this.handleMouseOut = (e) => { + if (!this.expanded || this.contains(document.activeElement)) { + return false; + } + this.expanded = false; + return false; + }; + this.expandAndFocus = () => { + if (!this.hasSubmenu) { + return; + } + this.focusSubmenuOnLoad = true; + this.expanded = true; + }; + this.invoke = () => { + if (this.disabled) { + return; + } + switch (this.role) { + case MenuItemRole.menuitemcheckbox: + this.checked = !this.checked; + break; + case MenuItemRole.menuitem: + this.updateSubmenu(); + if (this.hasSubmenu) { + this.expandAndFocus(); + } else { + this.$emit("change"); + } + break; + case MenuItemRole.menuitemradio: + if (!this.checked) { + this.checked = true; + } + break; + } + }; + this.updateSubmenu = () => { + this.submenu = this.domChildren().find((element) => { + return element.getAttribute("role") === "menu"; + }); + this.hasSubmenu = this.submenu === void 0 ? false : true; + }; + } + expandedChanged(oldValue) { + if (this.$fastController.isConnected) { + if (this.submenu === void 0) { + return; + } + if (this.expanded === false) { + this.submenu.collapseExpandedItem(); + } else { + this.currentDirection = getDirection(this); + } + this.$emit("expanded-change", this, { bubbles: false }); + } + } + checkedChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.$emit("change"); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.updateSubmenu(); + }); + if (!this.startColumnCount) { + this.startColumnCount = 1; + } + this.observer = new MutationObserver(this.updateSubmenu); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.submenu = void 0; + if (this.observer !== void 0) { + this.observer.disconnect(); + this.observer = void 0; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "disabled", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "expanded", void 0); + __decorate([ + observable + ], MenuItem.prototype, "startColumnCount", void 0); + __decorate([ + attr + ], MenuItem.prototype, "role", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], MenuItem.prototype, "checked", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenuRegion", void 0); + __decorate([ + observable + ], MenuItem.prototype, "hasSubmenu", void 0); + __decorate([ + observable + ], MenuItem.prototype, "currentDirection", void 0); + __decorate([ + observable + ], MenuItem.prototype, "submenu", void 0); + applyMixins(MenuItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js + var init_menu_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/menu-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js + var init_menu_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu-item/index.js"() { + init_menu_item_template(); + init_menu_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js + var init_menu_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js + var Menu; + var init_menu = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/menu.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_menu_item2(); + init_foundation_element(); + Menu = class _Menu extends FoundationElement { + constructor() { + super(...arguments); + this.expandedItem = null; + this.focusIndex = -1; + this.isNestedMenu = () => { + return this.parentElement !== null && isHTMLElement(this.parentElement) && this.parentElement.getAttribute("role") === "menuitem"; + }; + this.handleFocusOut = (e) => { + if (!this.contains(e.relatedTarget) && this.menuItems !== void 0) { + this.collapseExpandedItem(); + const focusIndex = this.menuItems.findIndex(this.isFocusableElement); + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.menuItems[focusIndex].setAttribute("tabindex", "0"); + this.focusIndex = focusIndex; + } + }; + this.handleItemFocus = (e) => { + const targetItem = e.target; + if (this.menuItems !== void 0 && targetItem !== this.menuItems[this.focusIndex]) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.focusIndex = this.menuItems.indexOf(targetItem); + targetItem.setAttribute("tabindex", "0"); + } + }; + this.handleExpandedChanged = (e) => { + if (e.defaultPrevented || e.target === null || this.menuItems === void 0 || this.menuItems.indexOf(e.target) < 0) { + return; + } + e.preventDefault(); + const changedItem = e.target; + if (this.expandedItem !== null && changedItem === this.expandedItem && changedItem.expanded === false) { + this.expandedItem = null; + return; + } + if (changedItem.expanded) { + if (this.expandedItem !== null && this.expandedItem !== changedItem) { + this.expandedItem.expanded = false; + } + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + this.expandedItem = changedItem; + this.focusIndex = this.menuItems.indexOf(changedItem); + changedItem.setAttribute("tabindex", "0"); + } + }; + this.removeItemListeners = () => { + if (this.menuItems !== void 0) { + this.menuItems.forEach((item) => { + item.removeEventListener("expanded-change", this.handleExpandedChanged); + item.removeEventListener("focus", this.handleItemFocus); + }); + } + }; + this.setItems = () => { + const newItems = this.domChildren(); + this.removeItemListeners(); + this.menuItems = newItems; + const menuItems = this.menuItems.filter(this.isMenuItemElement); + if (menuItems.length) { + this.focusIndex = 0; + } + function elementIndent(el) { + const role = el.getAttribute("role"); + const startSlot = el.querySelector("[slot=start]"); + if (role !== MenuItemRole.menuitem && startSlot === null) { + return 1; + } else if (role === MenuItemRole.menuitem && startSlot !== null) { + return 1; + } else if (role !== MenuItemRole.menuitem && startSlot !== null) { + return 2; + } else { + return 0; + } + } + const indent = menuItems.reduce((accum, current) => { + const elementValue = elementIndent(current); + return accum > elementValue ? accum : elementValue; + }, 0); + menuItems.forEach((item, index) => { + item.setAttribute("tabindex", index === 0 ? "0" : "-1"); + item.addEventListener("expanded-change", this.handleExpandedChanged); + item.addEventListener("focus", this.handleItemFocus); + if (item instanceof MenuItem || "startColumnCount" in item) { + item.startColumnCount = indent; + } + }); + }; + this.changeHandler = (e) => { + if (this.menuItems === void 0) { + return; + } + const changedMenuItem = e.target; + const changeItemIndex = this.menuItems.indexOf(changedMenuItem); + if (changeItemIndex === -1) { + return; + } + if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked === true) { + for (let i = changeItemIndex - 1; i >= 0; --i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + const maxIndex = this.menuItems.length - 1; + for (let i = changeItemIndex + 1; i <= maxIndex; ++i) { + const item = this.menuItems[i]; + const role = item.getAttribute("role"); + if (role === MenuItemRole.menuitemradio) { + item.checked = false; + } + if (role === "separator") { + break; + } + } + } + }; + this.isMenuItemElement = (el) => { + return isHTMLElement(el) && _Menu.focusableElementRoles.hasOwnProperty(el.getAttribute("role")); + }; + this.isFocusableElement = (el) => { + return this.isMenuItemElement(el); + }; + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.menuItems !== void 0) { + this.setItems(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + DOM.queueUpdate(() => { + this.setItems(); + }); + this.addEventListener("change", this.changeHandler); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeItemListeners(); + this.menuItems = void 0; + this.removeEventListener("change", this.changeHandler); + } + /** + * Focuses the first item in the menu. + * + * @public + */ + focus() { + this.setFocus(0, 1); + } + /** + * Collapses any expanded menu items. + * + * @public + */ + collapseExpandedItem() { + if (this.expandedItem !== null) { + this.expandedItem.expanded = false; + this.expandedItem = null; + } + } + /** + * @internal + */ + handleMenuKeyDown(e) { + if (e.defaultPrevented || this.menuItems === void 0) { + return; + } + switch (e.key) { + case keyArrowDown: + this.setFocus(this.focusIndex + 1, 1); + return; + case keyArrowUp: + this.setFocus(this.focusIndex - 1, -1); + return; + case keyEnd: + this.setFocus(this.menuItems.length - 1, -1); + return; + case keyHome: + this.setFocus(0, 1); + return; + default: + return true; + } + } + /** + * get an array of valid DOM children + */ + domChildren() { + return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")); + } + setFocus(focusIndex, adjustment) { + if (this.menuItems === void 0) { + return; + } + while (focusIndex >= 0 && focusIndex < this.menuItems.length) { + const child = this.menuItems[focusIndex]; + if (this.isFocusableElement(child)) { + if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) { + this.menuItems[this.focusIndex].setAttribute("tabindex", "-1"); + } + this.focusIndex = focusIndex; + child.setAttribute("tabindex", "0"); + child.focus(); + break; + } + focusIndex += adjustment; + } + } + }; + Menu.focusableElementRoles = roleForMenuItem; + __decorate([ + observable + ], Menu.prototype, "items", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js + var init_menu2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/menu/index.js"() { + init_menu_template(); + init_menu(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js + var init_number_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js + var _TextField, FormAssociatedTextField; + var init_text_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextField = class extends FoundationElement { + }; + FormAssociatedTextField = class extends FormAssociated(_TextField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js + var TextFieldType; + var init_text_field_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.options.js"() { + TextFieldType = { + /** + * An email TextField + */ + email: "email", + /** + * A password TextField + */ + password: "password", + /** + * A telephone TextField + */ + tel: "tel", + /** + * A text TextField + */ + text: "text", + /** + * A URL TextField + */ + url: "url" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js + var TextField, DelegatesARIATextbox; + var init_text_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_text_field_form_associated(); + init_text_field_options(); + TextField = class extends FormAssociatedTextField { + constructor() { + super(...arguments); + this.type = TextFieldType.text; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + typeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.type = this.type; + this.validate(); + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", this.type); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the text field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], TextField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "autofocus", void 0); + __decorate([ + attr + ], TextField.prototype, "placeholder", void 0); + __decorate([ + attr + ], TextField.prototype, "type", void 0); + __decorate([ + attr + ], TextField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "minlength", void 0); + __decorate([ + attr + ], TextField.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextField.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextField.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextField.prototype, "defaultSlottedNodes", void 0); + DelegatesARIATextbox = class { + }; + applyMixins(DelegatesARIATextbox, ARIAGlobalStatesAndProperties); + applyMixins(TextField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js + var _NumberField, FormAssociatedNumberField; + var init_number_field_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _NumberField = class extends FoundationElement { + }; + FormAssociatedNumberField = class extends FormAssociated(_NumberField) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js + var NumberField; + var init_number_field = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/number-field.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_text_field(); + init_number_field_form_associated(); + NumberField = class extends FormAssociatedNumberField { + constructor() { + super(...arguments); + this.hideStep = false; + this.step = 1; + this.isUserInput = false; + } + /** + * Ensures that the max is greater than the min and that the value + * is less than the max + * @param previous - the previous max value + * @param next - updated max value + * + * @internal + */ + maxChanged(previous, next) { + var _a; + this.max = Math.max(next, (_a = this.min) !== null && _a !== void 0 ? _a : next); + const min = Math.min(this.min, this.max); + if (this.min !== void 0 && this.min !== min) { + this.min = min; + } + this.value = this.getValidValue(this.value); + } + /** + * Ensures that the min is less than the max and that the value + * is greater than the min + * @param previous - previous min value + * @param next - updated min value + * + * @internal + */ + minChanged(previous, next) { + var _a; + this.min = Math.min(next, (_a = this.max) !== null && _a !== void 0 ? _a : next); + const max = Math.max(this.min, this.max); + if (this.max !== void 0 && this.max !== max) { + this.max = max; + } + this.value = this.getValidValue(this.value); + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * Validates that the value is a number between the min and max + * @param previous - previous stored value + * @param next - value being updated + * @param updateControl - should the text field be updated with value, defaults to true + * @internal + */ + valueChanged(previous, next) { + this.value = this.getValidValue(next); + if (next !== this.value) { + return; + } + if (this.control && !this.isUserInput) { + this.control.value = this.value; + } + super.valueChanged(previous, this.value); + if (previous !== void 0 && !this.isUserInput) { + this.$emit("input"); + this.$emit("change"); + } + this.isUserInput = false; + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Sets the internal value to a valid number between the min and max properties + * @param value - user input + * + * @internal + */ + getValidValue(value) { + var _a, _b; + let validValue = parseFloat(parseFloat(value).toPrecision(12)); + if (isNaN(validValue)) { + validValue = ""; + } else { + validValue = Math.min(validValue, (_a = this.max) !== null && _a !== void 0 ? _a : validValue); + validValue = Math.max(validValue, (_b = this.min) !== null && _b !== void 0 ? _b : validValue).toString(); + } + return validValue; + } + /** + * Increments the value using the step value + * + * @public + */ + stepUp() { + const value = parseFloat(this.value); + const stepUpValue = !isNaN(value) ? value + this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? this.step : 0; + this.value = stepUpValue.toString(); + } + /** + * Decrements the value using the step value + * + * @public + */ + stepDown() { + const value = parseFloat(this.value); + const stepDownValue = !isNaN(value) ? value - this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? 0 - this.step : 0; + this.value = stepDownValue.toString(); + } + /** + * Sets up the initial state of the number field + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "number"); + this.validate(); + this.control.value = this.value; + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** + * Selects all the text in the number field + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, ""); + this.isUserInput = true; + this.value = this.control.value; + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** + * Handles the internal control's `keydown` event + * @internal + */ + handleKeyDown(e) { + const key = e.key; + switch (key) { + case keyArrowUp: + this.stepUp(); + return false; + case keyArrowDown: + this.stepDown(); + return false; + } + return true; + } + /** + * Handles populating the input field with a validated value when + * leaving the input field. + * @internal + */ + handleBlur() { + this.control.value = this.value; + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], NumberField.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], NumberField.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "hide-step", mode: "boolean" }) + ], NumberField.prototype, "hideStep", void 0); + __decorate([ + attr + ], NumberField.prototype, "placeholder", void 0); + __decorate([ + attr + ], NumberField.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "minlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "size", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "step", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], NumberField.prototype, "min", void 0); + __decorate([ + observable + ], NumberField.prototype, "defaultSlottedNodes", void 0); + applyMixins(NumberField, StartEnd, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js + var init_number_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/number-field/index.js"() { + init_number_field_template(); + init_number_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js + var progressSegments, progressRingTemplate; + var init_progress_ring_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/progress-ring.template.js"() { + init_esm(); + progressSegments = 44; + progressRingTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js + var init_progress_ring = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress-ring/index.js"() { + init_progress_ring_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js + var BaseProgress; + var init_base_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/base-progress.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + BaseProgress = class extends FoundationElement { + constructor() { + super(...arguments); + this.percentComplete = 0; + } + valueChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + minChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + maxChanged() { + if (this.$fastController.isConnected) { + this.updatePercentComplete(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.updatePercentComplete(); + } + updatePercentComplete() { + const min = typeof this.min === "number" ? this.min : 0; + const max = typeof this.max === "number" ? this.max : 100; + const value = typeof this.value === "number" ? this.value : 0; + const range2 = max - min; + this.percentComplete = range2 === 0 ? 0 : Math.fround((value - min) / range2 * 100); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "value", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], BaseProgress.prototype, "max", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], BaseProgress.prototype, "paused", void 0); + __decorate([ + observable + ], BaseProgress.prototype, "percentComplete", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js + var init_progress_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/progress.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js + var init_progress = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/progress/index.js"() { + init_base_progress(); + init_progress_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js + var radioGroupTemplate; + var init_radio_group_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.template.js"() { + init_esm(); + init_dist2(); + radioGroupTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js + var RadioGroup; + var init_radio_group = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/radio-group.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + RadioGroup = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = Orientation.horizontal; + this.radioChangeHandler = (e) => { + const changedRadio = e.target; + if (changedRadio.checked) { + this.slottedRadioButtons.forEach((radio) => { + if (radio !== changedRadio) { + radio.checked = false; + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + } + }); + this.selectedRadio = changedRadio; + this.value = changedRadio.value; + changedRadio.setAttribute("tabindex", "0"); + this.focusedRadio = changedRadio; + } + e.stopPropagation(); + }; + this.moveToRadioByIndex = (group, index) => { + const radio = group[index]; + if (!this.isInsideToolbar) { + radio.setAttribute("tabindex", "0"); + if (radio.readOnly) { + this.slottedRadioButtons.forEach((nextRadio) => { + if (nextRadio !== radio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + radio.checked = true; + this.selectedRadio = radio; + } + } + this.focusedRadio = radio; + radio.focus(); + }; + this.moveRightOffGroup = () => { + var _a; + (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.moveLeftOffGroup = () => { + var _a; + (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus(); + }; + this.focusOutHandler = (e) => { + const group = this.slottedRadioButtons; + const radio = e.target; + const index = radio !== null ? group.indexOf(radio) : 0; + const focusedIndex = this.focusedRadio ? group.indexOf(this.focusedRadio) : -1; + if (focusedIndex === 0 && index === focusedIndex || focusedIndex === group.length - 1 && focusedIndex === index) { + if (!this.selectedRadio) { + this.focusedRadio = group[0]; + this.focusedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.focusedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } else { + this.focusedRadio = this.selectedRadio; + if (!this.isInsideFoundationToolbar) { + this.selectedRadio.setAttribute("tabindex", "0"); + group.forEach((nextRadio) => { + if (nextRadio !== this.selectedRadio) { + nextRadio.setAttribute("tabindex", "-1"); + } + }); + } + } + } + return true; + }; + this.clickHandler = (e) => { + const radio = e.target; + if (radio) { + const group = this.slottedRadioButtons; + if (radio.checked || group.indexOf(radio) === 0) { + radio.setAttribute("tabindex", "0"); + this.selectedRadio = radio; + } else { + radio.setAttribute("tabindex", "-1"); + this.selectedRadio = null; + } + this.focusedRadio = radio; + } + e.preventDefault(); + }; + this.shouldMoveOffGroupToTheRight = (index, group, key) => { + return index === group.length && this.isInsideToolbar && key === keyArrowRight; + }; + this.shouldMoveOffGroupToTheLeft = (group, key) => { + const index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + return index < 0 && this.isInsideToolbar && key === keyArrowLeft; + }; + this.checkFocusedRadio = () => { + if (this.focusedRadio !== null && !this.focusedRadio.readOnly && !this.focusedRadio.checked) { + this.focusedRadio.checked = true; + this.focusedRadio.setAttribute("tabindex", "0"); + this.focusedRadio.focus(); + this.selectedRadio = this.focusedRadio; + } + }; + this.moveRight = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1; + if (this.shouldMoveOffGroupToTheRight(index, group, e.key)) { + this.moveRightOffGroup(); + return; + } else if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index + 1 >= group.length) { + if (this.isInsideToolbar) { + break; + } else { + index = 0; + } + } else { + index += 1; + } + } + }; + this.moveLeft = (e) => { + const group = this.slottedRadioButtons; + let index = 0; + index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + if (this.shouldMoveOffGroupToTheLeft(group, e.key)) { + this.moveLeftOffGroup(); + return; + } + while (index >= 0 && group.length > 1) { + if (!group[index].disabled) { + this.moveToRadioByIndex(group, index); + break; + } else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) { + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.keydownHandler = (e) => { + const key = e.key; + if (key in ArrowKeys && this.isInsideFoundationToolbar) { + return true; + } + switch (key) { + case keyEnter: { + this.checkFocusedRadio(); + break; + } + case keyArrowRight: + case keyArrowDown: { + if (this.direction === Direction.ltr) { + this.moveRight(e); + } else { + this.moveLeft(e); + } + break; + } + case keyArrowLeft: + case keyArrowUp: { + if (this.direction === Direction.ltr) { + this.moveLeft(e); + } else { + this.moveRight(e); + } + break; + } + default: { + return true; + } + } + }; + } + readOnlyChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.readOnly) { + radio.readOnly = true; + } else { + radio.readOnly = false; + } + }); + } + } + disabledChanged() { + if (this.slottedRadioButtons !== void 0) { + this.slottedRadioButtons.forEach((radio) => { + if (this.disabled) { + radio.disabled = true; + } else { + radio.disabled = false; + } + }); + } + } + nameChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + radio.setAttribute("name", this.name); + }); + } + } + valueChanged() { + if (this.slottedRadioButtons) { + this.slottedRadioButtons.forEach((radio) => { + if (radio.value === this.value) { + radio.checked = true; + this.selectedRadio = radio; + } + }); + } + this.$emit("change"); + } + slottedRadioButtonsChanged(oldValue, newValue) { + if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) { + this.setupRadioButtons(); + } + } + get parentToolbar() { + return this.closest('[role="toolbar"]'); + } + get isInsideToolbar() { + var _a; + return (_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false; + } + get isInsideFoundationToolbar() { + var _a; + return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + this.setupRadioButtons(); + } + disconnectedCallback() { + this.slottedRadioButtons.forEach((radio) => { + radio.removeEventListener("change", this.radioChangeHandler); + }); + } + setupRadioButtons() { + const checkedRadios = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0; + if (numberOfCheckedRadios > 1) { + const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1]; + lastCheckedRadio.checked = true; + } + let foundMatchingVal = false; + this.slottedRadioButtons.forEach((radio) => { + if (this.name !== void 0) { + radio.setAttribute("name", this.name); + } + if (this.disabled) { + radio.disabled = true; + } + if (this.readOnly) { + radio.readOnly = true; + } + if (this.value && this.value === radio.value) { + this.selectedRadio = radio; + this.focusedRadio = radio; + radio.checked = true; + radio.setAttribute("tabindex", "0"); + foundMatchingVal = true; + } else { + if (!this.isInsideFoundationToolbar) { + radio.setAttribute("tabindex", "-1"); + } + radio.checked = false; + } + radio.addEventListener("change", this.radioChangeHandler); + }); + if (this.value === void 0 && this.slottedRadioButtons.length > 0) { + const checkedRadios2 = this.slottedRadioButtons.filter((radio) => { + return radio.hasAttribute("checked"); + }); + const numberOfCheckedRadios2 = checkedRadios2 !== null ? checkedRadios2.length : 0; + if (numberOfCheckedRadios2 > 0 && !foundMatchingVal) { + const lastCheckedRadio = checkedRadios2[numberOfCheckedRadios2 - 1]; + lastCheckedRadio.checked = true; + this.focusedRadio = lastCheckedRadio; + lastCheckedRadio.setAttribute("tabindex", "0"); + } else { + this.slottedRadioButtons[0].setAttribute("tabindex", "0"); + this.focusedRadio = this.slottedRadioButtons[0]; + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], RadioGroup.prototype, "readOnly", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], RadioGroup.prototype, "disabled", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "name", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "value", void 0); + __decorate([ + attr + ], RadioGroup.prototype, "orientation", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "childItems", void 0); + __decorate([ + observable + ], RadioGroup.prototype, "slottedRadioButtons", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js + var init_radio_group2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio-group/index.js"() { + init_radio_group_template(); + init_radio_group(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js + var radioTemplate; + var init_radio_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.template.js"() { + init_esm(); + radioTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js + var _Radio, FormAssociatedRadio; + var init_radio_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Radio = class extends FoundationElement { + }; + FormAssociatedRadio = class extends CheckableFormAssociated(_Radio) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js + var Radio; + var init_radio = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/radio.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_radio_form_associated(); + Radio = class extends FormAssociatedRadio { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + switch (e.key) { + case keySpace: + if (!this.checked && !this.readOnly) { + this.checked = true; + } + return; + } + return true; + }; + this.proxy.setAttribute("type", "radio"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * @internal + */ + defaultCheckedChanged() { + var _a; + if (this.$fastController.isConnected && !this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_a = this.defaultChecked) !== null && _a !== void 0 ? _a : false; + this.dirtyChecked = false; + } + } + } + /** + * @internal + */ + connectedCallback() { + var _a, _b; + super.connectedCallback(); + this.validate(); + if (((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("role")) !== "radiogroup" && this.getAttribute("tabindex") === null) { + if (!this.disabled) { + this.setAttribute("tabindex", "0"); + } + } + if (this.checkedAttribute) { + if (!this.dirtyChecked) { + if (!this.isInsideRadioGroup()) { + this.checked = (_b = this.defaultChecked) !== null && _b !== void 0 ? _b : false; + this.dirtyChecked = false; + } + } + } + } + isInsideRadioGroup() { + const parent = this.closest("[role=radiogroup]"); + return parent !== null; + } + /** + * @internal + */ + clickHandler(e) { + if (!this.disabled && !this.readOnly && !this.checked) { + this.checked = true; + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Radio.prototype, "readOnly", void 0); + __decorate([ + observable + ], Radio.prototype, "name", void 0); + __decorate([ + observable + ], Radio.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js + var init_radio2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/radio/index.js"() { + init_radio_template(); + init_radio(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js + var HorizontalScroll; + var init_horizontal_scroll = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + HorizontalScroll = class extends FoundationElement { + constructor() { + super(...arguments); + this.framesPerSecond = 60; + this.updatingItems = false; + this.speed = 600; + this.easing = "ease-in-out"; + this.flippersHiddenFromAT = false; + this.scrolling = false; + this.resizeDetector = null; + } + /** + * The calculated duration for a frame. + * + * @internal + */ + get frameTime() { + return 1e3 / this.framesPerSecond; + } + /** + * Firing scrollstart and scrollend events + * @internal + */ + scrollingChanged(prev, next) { + if (this.scrollContainer) { + const event = this.scrolling == true ? "scrollstart" : "scrollend"; + this.$emit(event, this.scrollContainer.scrollLeft); + } + } + /** + * In RTL mode + * @internal + */ + get isRtl() { + return this.scrollItems.length > 1 && this.scrollItems[0].offsetLeft > this.scrollItems[1].offsetLeft; + } + connectedCallback() { + super.connectedCallback(); + this.initializeResizeDetector(); + } + disconnectedCallback() { + this.disconnectResizeDetector(); + super.disconnectedCallback(); + } + /** + * Updates scroll stops and flippers when scroll items change + * @param previous - current scroll items + * @param next - new updated scroll items + * @public + */ + scrollItemsChanged(previous, next) { + if (next && !this.updatingItems) { + DOM.queueUpdate(() => this.setStops()); + } + } + /** + * destroys the instance's resize observer + * @internal + */ + disconnectResizeDetector() { + if (this.resizeDetector) { + this.resizeDetector.disconnect(); + this.resizeDetector = null; + } + } + /** + * initializes the instance's resize observer + * @internal + */ + initializeResizeDetector() { + this.disconnectResizeDetector(); + this.resizeDetector = new window.ResizeObserver(this.resized.bind(this)); + this.resizeDetector.observe(this); + } + /** + * Looks for slots and uses child nodes instead + * @internal + */ + updateScrollStops() { + this.updatingItems = true; + const updatedItems = this.scrollItems.reduce((scrollItems, scrollItem) => { + if (scrollItem instanceof HTMLSlotElement) { + return scrollItems.concat(scrollItem.assignedElements()); + } + scrollItems.push(scrollItem); + return scrollItems; + }, []); + this.scrollItems = updatedItems; + this.updatingItems = false; + } + /** + * Finds all of the scroll stops between elements + * @internal + */ + setStops() { + this.updateScrollStops(); + const { scrollContainer: container } = this; + const { scrollLeft } = container; + const { width: containerWidth, left: containerLeft } = container.getBoundingClientRect(); + this.width = containerWidth; + let lastStop = 0; + let stops = this.scrollItems.map((item, index) => { + const { left, width } = item.getBoundingClientRect(); + const leftPosition = Math.round(left + scrollLeft - containerLeft); + const right = Math.round(leftPosition + width); + if (this.isRtl) { + return -right; + } + lastStop = right; + return index === 0 ? 0 : leftPosition; + }).concat(lastStop); + stops = this.fixScrollMisalign(stops); + stops.sort((a, b) => Math.abs(a) - Math.abs(b)); + this.scrollStops = stops; + this.setFlippers(); + } + /** + * Checks to see if the stops are returning values + * otherwise it will try to reinitialize them + * + * @returns boolean indicating that current scrollStops are valid non-zero values + * @internal + */ + validateStops(reinit = true) { + const hasStops = () => !!this.scrollStops.find((stop) => stop > 0); + if (!hasStops() && reinit) { + this.setStops(); + } + return hasStops(); + } + /** + * + */ + fixScrollMisalign(stops) { + if (this.isRtl && stops.some((stop) => stop > 0)) { + stops.sort((a, b) => b - a); + const offset = stops[0]; + stops = stops.map((stop) => stop - offset); + } + return stops; + } + /** + * Sets the controls view if enabled + * @internal + */ + setFlippers() { + var _a, _b; + const position = this.scrollContainer.scrollLeft; + (_a = this.previousFlipperContainer) === null || _a === void 0 ? void 0 : _a.classList.toggle("disabled", position === 0); + if (this.scrollStops) { + const lastStop = Math.abs(this.scrollStops[this.scrollStops.length - 1]); + (_b = this.nextFlipperContainer) === null || _b === void 0 ? void 0 : _b.classList.toggle("disabled", this.validateStops(false) && Math.abs(position) + this.width >= lastStop); + } + } + /** + * Function that can scroll an item into view. + * @param item - An item index, a scroll item or a child of one of the scroll items + * @param padding - Padding of the viewport where the active item shouldn't be + * @param rightPadding - Optional right padding. Uses the padding if not defined + * + * @public + */ + scrollInView(item, padding = 0, rightPadding) { + var _a; + if (typeof item !== "number" && item) { + item = this.scrollItems.findIndex((scrollItem) => scrollItem === item || scrollItem.contains(item)); + } + if (item !== void 0) { + rightPadding = rightPadding !== null && rightPadding !== void 0 ? rightPadding : padding; + const { scrollContainer: container, scrollStops, scrollItems: items } = this; + const { scrollLeft } = this.scrollContainer; + const { width: containerWidth } = container.getBoundingClientRect(); + const itemStart = scrollStops[item]; + const { width } = items[item].getBoundingClientRect(); + const itemEnd = itemStart + width; + const isBefore = scrollLeft + padding > itemStart; + if (isBefore || scrollLeft + containerWidth - rightPadding < itemEnd) { + const stops = [...scrollStops].sort((a, b) => isBefore ? b - a : a - b); + const scrollTo = (_a = stops.find((position) => isBefore ? position + padding < itemStart : position + containerWidth - (rightPadding !== null && rightPadding !== void 0 ? rightPadding : 0) > itemEnd)) !== null && _a !== void 0 ? _a : 0; + this.scrollToPosition(scrollTo); + } + } + } + /** + * Lets the user arrow left and right through the horizontal scroll + * @param e - Keyboard event + * @public + */ + keyupHandler(e) { + const key = e.key; + switch (key) { + case "ArrowLeft": + this.scrollToPrevious(); + break; + case "ArrowRight": + this.scrollToNext(); + break; + } + } + /** + * Scrolls items to the left + * @public + */ + scrollToPrevious() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop, index) => stop >= scrollPosition && (this.isRtl || index === this.scrollStops.length - 1 || this.scrollStops[index + 1] > scrollPosition)); + const right = Math.abs(this.scrollStops[current + 1]); + let nextIndex = this.scrollStops.findIndex((stop) => Math.abs(stop) + this.width > right); + if (nextIndex >= current || nextIndex === -1) { + nextIndex = current > 0 ? current - 1 : 0; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Scrolls items to the right + * @public + */ + scrollToNext() { + this.validateStops(); + const scrollPosition = this.scrollContainer.scrollLeft; + const current = this.scrollStops.findIndex((stop) => Math.abs(stop) >= Math.abs(scrollPosition)); + const outOfView = this.scrollStops.findIndex((stop) => Math.abs(scrollPosition) + this.width <= Math.abs(stop)); + let nextIndex = current; + if (outOfView > current + 2) { + nextIndex = outOfView - 2; + } else if (current < this.scrollStops.length - 2) { + nextIndex = current + 1; + } + this.scrollToPosition(this.scrollStops[nextIndex], scrollPosition); + } + /** + * Handles scrolling with easing + * @param position - starting position + * @param newPosition - position to scroll to + * @public + */ + scrollToPosition(newPosition, position = this.scrollContainer.scrollLeft) { + var _a; + if (this.scrolling) { + return; + } + this.scrolling = true; + const seconds = (_a = this.duration) !== null && _a !== void 0 ? _a : `${Math.abs(newPosition - position) / this.speed}s`; + this.content.style.setProperty("transition-duration", seconds); + const computedDuration = parseFloat(getComputedStyle(this.content).getPropertyValue("transition-duration")); + const transitionendHandler = (e) => { + if (e && e.target !== e.currentTarget) { + return; + } + this.content.style.setProperty("transition-duration", "0s"); + this.content.style.removeProperty("transform"); + this.scrollContainer.style.setProperty("scroll-behavior", "auto"); + this.scrollContainer.scrollLeft = newPosition; + this.setFlippers(); + this.content.removeEventListener("transitionend", transitionendHandler); + this.scrolling = false; + }; + if (computedDuration === 0) { + transitionendHandler(); + return; + } + this.content.addEventListener("transitionend", transitionendHandler); + const maxScrollValue = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth; + let transitionStop = this.scrollContainer.scrollLeft - Math.min(newPosition, maxScrollValue); + if (this.isRtl) { + transitionStop = this.scrollContainer.scrollLeft + Math.min(Math.abs(newPosition), maxScrollValue); + } + this.content.style.setProperty("transition-property", "transform"); + this.content.style.setProperty("transition-timing-function", this.easing); + this.content.style.setProperty("transform", `translateX(${transitionStop}px)`); + } + /** + * Monitors resize event on the horizontal-scroll element + * @public + */ + resized() { + if (this.resizeTimeout) { + this.resizeTimeout = clearTimeout(this.resizeTimeout); + } + this.resizeTimeout = setTimeout(() => { + this.width = this.scrollContainer.offsetWidth; + this.setFlippers(); + }, this.frameTime); + } + /** + * Monitors scrolled event on the content container + * @public + */ + scrolled() { + if (this.scrollTimeout) { + this.scrollTimeout = clearTimeout(this.scrollTimeout); + } + this.scrollTimeout = setTimeout(() => { + this.setFlippers(); + }, this.frameTime); + } + }; + __decorate([ + attr({ converter: nullableNumberConverter }) + ], HorizontalScroll.prototype, "speed", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "duration", void 0); + __decorate([ + attr + ], HorizontalScroll.prototype, "easing", void 0); + __decorate([ + attr({ attribute: "flippers-hidden-from-at", converter: booleanConverter }) + ], HorizontalScroll.prototype, "flippersHiddenFromAT", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrolling", void 0); + __decorate([ + observable + ], HorizontalScroll.prototype, "scrollItems", void 0); + __decorate([ + attr({ attribute: "view" }) + ], HorizontalScroll.prototype, "view", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js + var init_horizontal_scroll_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/horizontal-scroll.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js + var init_horizontal_scroll2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/horizontal-scroll/index.js"() { + init_horizontal_scroll(); + init_horizontal_scroll_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js + function whitespaceFilter(value, index, array) { + return value.nodeType !== Node.TEXT_NODE ? true : typeof value.nodeValue === "string" && !!value.nodeValue.trim().length; + } + var init_whitespace_filter = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/whitespace-filter.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js + var init_search_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js + var _Search, FormAssociatedSearch; + var init_search_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Search = class extends FoundationElement { + }; + FormAssociatedSearch = class extends FormAssociated(_Search) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/search.js + var Search, DelegatesARIASearch; + var init_search = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/search.js"() { + init_tslib_es6(); + init_esm(); + init_patterns(); + init_apply_mixins(); + init_search_form_associated(); + Search = class extends FormAssociatedSearch { + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + this.validate(); + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.autofocus = this.autofocus; + this.validate(); + } + } + placeholderChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.placeholder = this.placeholder; + } + } + listChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.setAttribute("list", this.list); + this.validate(); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.maxLength = this.maxlength; + this.validate(); + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.minLength = this.minlength; + this.validate(); + } + } + patternChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.pattern = this.pattern; + this.validate(); + } + } + sizeChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.size = this.size; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.validate(); + if (this.autofocus) { + DOM.queueUpdate(() => { + this.focus(); + }); + } + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + /** + * Handles the internal control's `input` event + * @internal + */ + handleTextInput() { + this.value = this.control.value; + } + /** + * Handles the control's clear value event + * @public + */ + handleClearInput() { + this.value = ""; + this.control.focus(); + this.handleChange(); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Search.prototype, "readOnly", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "autofocus", void 0); + __decorate([ + attr + ], Search.prototype, "placeholder", void 0); + __decorate([ + attr + ], Search.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "minlength", void 0); + __decorate([ + attr + ], Search.prototype, "pattern", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Search.prototype, "size", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Search.prototype, "spellcheck", void 0); + __decorate([ + observable + ], Search.prototype, "defaultSlottedNodes", void 0); + DelegatesARIASearch = class { + }; + applyMixins(DelegatesARIASearch, ARIAGlobalStatesAndProperties); + applyMixins(Search, StartEnd, DelegatesARIASearch); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/search/index.js + var init_search2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/search/index.js"() { + init_search_template(); + init_search(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js + var _Select, FormAssociatedSelect; + var init_select_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.form-associated.js"() { + init_listbox_element(); + init_form_associated(); + _Select = class extends ListboxElement { + }; + FormAssociatedSelect = class extends FormAssociated(_Select) { + constructor() { + super(...arguments); + this.proxy = document.createElement("select"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.js + var Select, DelegatesARIASelect; + var init_select = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_listbox(); + init_start_end(); + init_apply_mixins(); + init_select_form_associated(); + init_select_options(); + Select = class extends FormAssociatedSelect { + constructor() { + super(...arguments); + this.open = false; + this.forcedPosition = false; + this.listboxId = uniqueId("listbox-"); + this.maxHeight = 0; + } + /** + * Sets focus and synchronizes ARIA attributes when the open property changes. + * + * @param prev - the previous open value + * @param next - the current open value + * + * @internal + */ + openChanged(prev, next) { + if (!this.collapsible) { + return; + } + if (this.open) { + this.ariaControls = this.listboxId; + this.ariaExpanded = "true"; + this.setPositioning(); + this.focusAndScrollOptionIntoView(); + this.indexWhenOpened = this.selectedIndex; + DOM.queueUpdate(() => this.focus()); + return; + } + this.ariaControls = ""; + this.ariaExpanded = "false"; + } + /** + * The component is collapsible when in single-selection mode with no size attribute. + * + * @internal + */ + get collapsible() { + return !(this.multiple || typeof this.size === "number"); + } + /** + * The value property. + * + * @public + */ + get value() { + Observable.track(this, "value"); + return this._value; + } + set value(next) { + var _a, _b, _c, _d, _e, _f, _g; + const prev = `${this._value}`; + if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.length) { + const selectedIndex = this._options.findIndex((el) => el.value === next); + const prevSelectedValue = (_c = (_b = this._options[this.selectedIndex]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null; + const nextSelectedValue = (_e = (_d = this._options[selectedIndex]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : null; + if (selectedIndex === -1 || prevSelectedValue !== nextSelectedValue) { + next = ""; + this.selectedIndex = selectedIndex; + } + next = (_g = (_f = this.firstSelectedOption) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : next; + } + if (prev !== next) { + this._value = next; + super.valueChanged(prev, next); + Observable.notify(this, "value"); + this.updateDisplayValue(); + } + } + /** + * Sets the value and display value to match the first selected option. + * + * @param shouldEmit - if true, the input and change events will be emitted + * + * @internal + */ + updateValue(shouldEmit) { + var _a, _b; + if (this.$fastController.isConnected) { + this.value = (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : ""; + } + if (shouldEmit) { + this.$emit("input"); + this.$emit("change", this, { + bubbles: true, + composed: void 0 + }); + } + } + /** + * Updates the proxy value when the selected index changes. + * + * @param prev - the previous selected index + * @param next - the next selected index + * + * @internal + */ + selectedIndexChanged(prev, next) { + super.selectedIndexChanged(prev, next); + this.updateValue(); + } + positionChanged(prev, next) { + this.positionAttribute = next; + this.setPositioning(); + } + /** + * Calculate and apply listbox positioning based on available viewport space. + * + * @public + */ + setPositioning() { + const currentBox = this.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const availableBottom = viewportHeight - currentBox.bottom; + this.position = this.forcedPosition ? this.positionAttribute : currentBox.top > availableBottom ? SelectPosition.above : SelectPosition.below; + this.positionAttribute = this.forcedPosition ? this.positionAttribute : this.position; + this.maxHeight = this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom; + } + /** + * The value displayed on the button. + * + * @public + */ + get displayValue() { + var _a, _b; + Observable.track(this, "displayValue"); + return (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : ""; + } + /** + * Synchronize the `aria-disabled` property when the `disabled` property changes. + * + * @param prev - The previous disabled value + * @param next - The next disabled value + * + * @internal + */ + disabledChanged(prev, next) { + if (super.disabledChanged) { + super.disabledChanged(prev, next); + } + this.ariaDisabled = this.disabled ? "true" : "false"; + } + /** + * Reset the element to its first selectable option when its parent form is reset. + * + * @internal + */ + formResetCallback() { + this.setProxyOptions(); + super.setDefaultSelectedOption(); + if (this.selectedIndex === -1) { + this.selectedIndex = 0; + } + } + /** + * Handle opening and closing the listbox when the select is clicked. + * + * @param e - the mouse event + * @internal + */ + clickHandler(e) { + if (this.disabled) { + return; + } + if (this.open) { + const captured = e.target.closest(`option,[role=option]`); + if (captured && captured.disabled) { + return; + } + } + super.clickHandler(e); + this.open = this.collapsible && !this.open; + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + return true; + } + /** + * Handles focus state when the element or its children lose focus. + * + * @param e - The focus event + * @internal + */ + focusoutHandler(e) { + var _a; + super.focusoutHandler(e); + if (!this.open) { + return true; + } + const focusTarget = e.relatedTarget; + if (this.isSameNode(focusTarget)) { + this.focus(); + return; + } + if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.includes(focusTarget))) { + this.open = false; + if (this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + } + } + } + /** + * Updates the value when an option's value changes. + * + * @param source - the source object + * @param propertyName - the property to evaluate + * + * @internal + * @override + */ + handleChange(source, propertyName) { + super.handleChange(source, propertyName); + if (propertyName === "value") { + this.updateValue(); + } + } + /** + * Synchronize the form-associated proxy and updates the value property of the element. + * + * @param prev - the previous collection of slotted option elements + * @param next - the next collection of slotted option elements + * + * @internal + */ + slottedOptionsChanged(prev, next) { + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.unsubscribe(this, "value"); + }); + super.slottedOptionsChanged(prev, next); + this.options.forEach((o) => { + const notifier = Observable.getNotifier(o); + notifier.subscribe(this, "value"); + }); + this.setProxyOptions(); + this.updateValue(); + } + /** + * Prevents focus when size is set and a scrollbar is clicked. + * + * @param e - the mouse event object + * + * @override + * @internal + */ + mousedownHandler(e) { + var _a; + if (e.offsetX >= 0 && e.offsetX <= ((_a = this.listbox) === null || _a === void 0 ? void 0 : _a.scrollWidth)) { + return super.mousedownHandler(e); + } + return this.collapsible; + } + /** + * Sets the multiple property on the proxy element. + * + * @param prev - the previous multiple value + * @param next - the current multiple value + */ + multipleChanged(prev, next) { + super.multipleChanged(prev, next); + if (this.proxy) { + this.proxy.multiple = next; + } + } + /** + * Updates the selectedness of each option when the list of selected options changes. + * + * @param prev - the previous list of selected options + * @param next - the current list of selected options + * + * @override + * @internal + */ + selectedOptionsChanged(prev, next) { + var _a; + super.selectedOptionsChanged(prev, next); + (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o, i) => { + var _a2; + const proxyOption = (_a2 = this.proxy) === null || _a2 === void 0 ? void 0 : _a2.options.item(i); + if (proxyOption) { + proxyOption.selected = o.selected; + } + }); + } + /** + * Sets the selected index to match the first option with the selected attribute, or + * the first selectable option. + * + * @override + * @internal + */ + setDefaultSelectedOption() { + var _a; + const options = (_a = this.options) !== null && _a !== void 0 ? _a : Array.from(this.children).filter(Listbox.slottedOptionFilter); + const selectedIndex = options === null || options === void 0 ? void 0 : options.findIndex((el) => el.hasAttribute("selected") || el.selected || el.value === this.value); + if (selectedIndex !== -1) { + this.selectedIndex = selectedIndex; + return; + } + this.selectedIndex = 0; + } + /** + * Resets and fills the proxy to match the component's options. + * + * @internal + */ + setProxyOptions() { + if (this.proxy instanceof HTMLSelectElement && this.options) { + this.proxy.options.length = 0; + this.options.forEach((option) => { + const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null); + if (proxyOption) { + this.proxy.options.add(proxyOption); + } + }); + } + } + /** + * Handle keyboard interaction for the select. + * + * @param e - the keyboard event + * @internal + */ + keydownHandler(e) { + super.keydownHandler(e); + const key = e.key || e.key.charCodeAt(0); + switch (key) { + case keySpace: { + e.preventDefault(); + if (this.collapsible && this.typeAheadExpired) { + this.open = !this.open; + } + break; + } + case keyHome: + case keyEnd: { + e.preventDefault(); + break; + } + case keyEnter: { + e.preventDefault(); + this.open = !this.open; + break; + } + case keyEscape: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + break; + } + case keyTab: { + if (this.collapsible && this.open) { + e.preventDefault(); + this.open = false; + } + return true; + } + } + if (!this.open && this.indexWhenOpened !== this.selectedIndex) { + this.updateValue(true); + this.indexWhenOpened = this.selectedIndex; + } + return !(key === keyArrowDown || key === keyArrowUp); + } + connectedCallback() { + super.connectedCallback(); + this.forcedPosition = !!this.positionAttribute; + this.addEventListener("contentchange", this.updateDisplayValue); + } + disconnectedCallback() { + this.removeEventListener("contentchange", this.updateDisplayValue); + super.disconnectedCallback(); + } + /** + * Updates the proxy's size property when the size attribute changes. + * + * @param prev - the previous size + * @param next - the current size + * + * @override + * @internal + */ + sizeChanged(prev, next) { + super.sizeChanged(prev, next); + if (this.proxy) { + this.proxy.size = next; + } + } + /** + * + * @internal + */ + updateDisplayValue() { + if (this.collapsible) { + Observable.notify(this, "displayValue"); + } + } + }; + __decorate([ + attr({ attribute: "open", mode: "boolean" }) + ], Select.prototype, "open", void 0); + __decorate([ + volatile + ], Select.prototype, "collapsible", null); + __decorate([ + observable + ], Select.prototype, "control", void 0); + __decorate([ + attr({ attribute: "position" }) + ], Select.prototype, "positionAttribute", void 0); + __decorate([ + observable + ], Select.prototype, "position", void 0); + __decorate([ + observable + ], Select.prototype, "maxHeight", void 0); + DelegatesARIASelect = class { + }; + __decorate([ + observable + ], DelegatesARIASelect.prototype, "ariaControls", void 0); + applyMixins(DelegatesARIASelect, DelegatesARIAListbox); + applyMixins(Select, StartEnd, DelegatesARIASelect); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js + var selectTemplate; + var init_select_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/select.template.js"() { + init_esm(); + init_listbox(); + init_start_end(); + selectTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/select/index.js + var init_select2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/select/index.js"() { + init_select(); + init_select_options(); + init_select_template(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js + var init_skeleton_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js + var Skeleton; + var init_skeleton = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/skeleton.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Skeleton = class extends FoundationElement { + constructor() { + super(...arguments); + this.shape = "rect"; + } + }; + __decorate([ + attr + ], Skeleton.prototype, "fill", void 0); + __decorate([ + attr + ], Skeleton.prototype, "shape", void 0); + __decorate([ + attr + ], Skeleton.prototype, "pattern", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Skeleton.prototype, "shimmer", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js + var init_skeleton2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/skeleton/index.js"() { + init_skeleton_template(); + init_skeleton(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js + var init_slider_label_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js + function convertPixelToPercent(pixelPos, minPosition, maxPosition, direction) { + let pct = limit(0, 1, (pixelPos - minPosition) / (maxPosition - minPosition)); + if (direction === Direction.rtl) { + pct = 1 - pct; + } + return pct; + } + var init_slider_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider-utilities.js"() { + init_dist2(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js + var defaultConfig, SliderLabel; + var init_slider_label = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/slider-label.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_slider_utilities(); + init_foundation_element(); + defaultConfig = { + min: 0, + max: 0, + direction: Direction.ltr, + orientation: Orientation.horizontal, + disabled: false + }; + SliderLabel = class extends FoundationElement { + constructor() { + super(...arguments); + this.hideMark = false; + this.sliderDirection = Direction.ltr; + this.getSliderConfiguration = () => { + if (!this.isSliderConfig(this.parentNode)) { + this.sliderDirection = defaultConfig.direction || Direction.ltr; + this.sliderOrientation = defaultConfig.orientation || Orientation.horizontal; + this.sliderMaxPosition = defaultConfig.max; + this.sliderMinPosition = defaultConfig.min; + } else { + const parentSlider = this.parentNode; + const { min, max, direction, orientation, disabled } = parentSlider; + if (disabled !== void 0) { + this.disabled = disabled; + } + this.sliderDirection = direction || Direction.ltr; + this.sliderOrientation = orientation || Orientation.horizontal; + this.sliderMaxPosition = max; + this.sliderMinPosition = min; + } + }; + this.positionAsStyle = () => { + const direction = this.sliderDirection ? this.sliderDirection : Direction.ltr; + const pct = convertPixelToPercent(Number(this.position), Number(this.sliderMinPosition), Number(this.sliderMaxPosition)); + let rightNum = Math.round((1 - pct) * 100); + let leftNum = Math.round(pct * 100); + if (Number.isNaN(leftNum) && Number.isNaN(rightNum)) { + rightNum = 50; + leftNum = 50; + } + if (this.sliderOrientation === Orientation.horizontal) { + return direction === Direction.rtl ? `right: ${leftNum}%; left: ${rightNum}%;` : `left: ${leftNum}%; right: ${rightNum}%;`; + } else { + return `top: ${leftNum}%; bottom: ${rightNum}%;`; + } + }; + } + positionChanged() { + this.positionStyle = this.positionAsStyle(); + } + /** + * @internal + */ + sliderOrientationChanged() { + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.getSliderConfiguration(); + this.positionStyle = this.positionAsStyle(); + this.notifier = Observable.getNotifier(this.parentNode); + this.notifier.subscribe(this, "orientation"); + this.notifier.subscribe(this, "direction"); + this.notifier.subscribe(this, "max"); + this.notifier.subscribe(this, "min"); + } + /** + * @internal + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.notifier.unsubscribe(this, "orientation"); + this.notifier.unsubscribe(this, "direction"); + this.notifier.unsubscribe(this, "max"); + this.notifier.unsubscribe(this, "min"); + } + /** + * @internal + */ + handleChange(source, propertyName) { + switch (propertyName) { + case "direction": + this.sliderDirection = source.direction; + break; + case "orientation": + this.sliderOrientation = source.orientation; + break; + case "max": + this.sliderMaxPosition = source.max; + break; + case "min": + this.sliderMinPosition = source.min; + break; + default: + break; + } + this.positionStyle = this.positionAsStyle(); + } + isSliderConfig(node) { + return node.max !== void 0 && node.min !== void 0; + } + }; + __decorate([ + observable + ], SliderLabel.prototype, "positionStyle", void 0); + __decorate([ + attr + ], SliderLabel.prototype, "position", void 0); + __decorate([ + attr({ attribute: "hide-mark", mode: "boolean" }) + ], SliderLabel.prototype, "hideMark", void 0); + __decorate([ + attr({ attribute: "disabled", mode: "boolean" }) + ], SliderLabel.prototype, "disabled", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderOrientation", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMinPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderMaxPosition", void 0); + __decorate([ + observable + ], SliderLabel.prototype, "sliderDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js + var init_slider_label2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider-label/index.js"() { + init_slider_label_template(); + init_slider_label(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js + var init_slider_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js + var _Slider, FormAssociatedSlider; + var init_slider_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Slider = class extends FoundationElement { + }; + FormAssociatedSlider = class extends FormAssociated(_Slider) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js + var SliderMode, Slider; + var init_slider = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/slider.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_slider_utilities(); + init_slider_form_associated(); + SliderMode = { + singleValue: "single-value" + }; + Slider = class extends FormAssociatedSlider { + constructor() { + super(...arguments); + this.direction = Direction.ltr; + this.isDragging = false; + this.trackWidth = 0; + this.trackMinWidth = 0; + this.trackHeight = 0; + this.trackLeft = 0; + this.trackMinHeight = 0; + this.valueTextFormatter = () => null; + this.min = 0; + this.max = 10; + this.step = 1; + this.orientation = Orientation.horizontal; + this.mode = SliderMode.singleValue; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + if (e.key === keyHome) { + e.preventDefault(); + this.value = `${this.min}`; + } else if (e.key === keyEnd) { + e.preventDefault(); + this.value = `${this.max}`; + } else if (!e.shiftKey) { + switch (e.key) { + case keyArrowRight: + case keyArrowUp: + e.preventDefault(); + this.increment(); + break; + case keyArrowLeft: + case keyArrowDown: + e.preventDefault(); + this.decrement(); + break; + } + } + }; + this.setupTrackConstraints = () => { + const clientRect = this.track.getBoundingClientRect(); + this.trackWidth = this.track.clientWidth; + this.trackMinWidth = this.track.clientLeft; + this.trackHeight = clientRect.bottom; + this.trackMinHeight = clientRect.top; + this.trackLeft = this.getBoundingClientRect().left; + if (this.trackWidth === 0) { + this.trackWidth = 1; + } + }; + this.setupListeners = (remove = false) => { + const eventAction = `${remove ? "remove" : "add"}EventListener`; + this[eventAction]("keydown", this.keypressHandler); + this[eventAction]("mousedown", this.handleMouseDown); + this.thumb[eventAction]("mousedown", this.handleThumbMouseDown, { + passive: true + }); + this.thumb[eventAction]("touchstart", this.handleThumbMouseDown, { + passive: true + }); + if (remove) { + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + } + }; + this.initialValue = ""; + this.handleThumbMouseDown = (event) => { + if (event) { + if (this.readOnly || this.disabled || event.defaultPrevented) { + return; + } + event.target.focus(); + } + const eventAction = `${event !== null ? "add" : "remove"}EventListener`; + window[eventAction]("mouseup", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchmove", this.handleMouseMove, { passive: true }); + window[eventAction]("touchend", this.handleWindowMouseUp); + this.isDragging = event !== null; + }; + this.handleMouseMove = (e) => { + if (this.readOnly || this.disabled || e.defaultPrevented) { + return; + } + const sourceEvent = window.TouchEvent && e instanceof TouchEvent ? e.touches[0] : e; + const eventValue = this.orientation === Orientation.horizontal ? sourceEvent.pageX - document.documentElement.scrollLeft - this.trackLeft : sourceEvent.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(eventValue)}`; + }; + this.calculateNewValue = (rawValue) => { + const newPosition = convertPixelToPercent(rawValue, this.orientation === Orientation.horizontal ? this.trackMinWidth : this.trackMinHeight, this.orientation === Orientation.horizontal ? this.trackWidth : this.trackHeight, this.direction); + const newValue = (this.max - this.min) * newPosition + this.min; + return this.convertToConstrainedValue(newValue); + }; + this.handleWindowMouseUp = (event) => { + this.stopDragging(); + }; + this.stopDragging = () => { + this.isDragging = false; + this.handleMouseDown(null); + this.handleThumbMouseDown(null); + }; + this.handleMouseDown = (e) => { + const eventAction = `${e !== null ? "add" : "remove"}EventListener`; + if (e === null || !this.disabled && !this.readOnly) { + window[eventAction]("mouseup", this.handleWindowMouseUp); + window.document[eventAction]("mouseleave", this.handleWindowMouseUp); + window[eventAction]("mousemove", this.handleMouseMove); + if (e) { + e.preventDefault(); + this.setupTrackConstraints(); + e.target.focus(); + const controlValue = this.orientation === Orientation.horizontal ? e.pageX - document.documentElement.scrollLeft - this.trackLeft : e.pageY - document.documentElement.scrollTop; + this.value = `${this.calculateNewValue(controlValue)}`; + } + } + }; + this.convertToConstrainedValue = (value) => { + if (isNaN(value)) { + value = this.min; + } + let constrainedValue = value - this.min; + const roundedConstrainedValue = Math.round(constrainedValue / this.step); + const remainderValue = constrainedValue - roundedConstrainedValue * (this.stepMultiplier * this.step) / this.stepMultiplier; + constrainedValue = remainderValue >= Number(this.step) / 2 ? constrainedValue - remainderValue + Number(this.step) : constrainedValue - remainderValue; + return constrainedValue + this.min; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + } + /** + * The value property, typed as a number. + * + * @public + */ + get valueAsNumber() { + return parseFloat(super.value); + } + set valueAsNumber(next) { + this.value = next.toString(); + } + /** + * @internal + */ + valueChanged(previous, next) { + super.valueChanged(previous, next); + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + this.$emit("change"); + } + minChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.min = `${this.min}`; + } + this.validate(); + } + maxChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.max = `${this.max}`; + } + this.validate(); + } + stepChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.step = `${this.step}`; + } + this.updateStepMultiplier(); + this.validate(); + } + orientationChanged() { + if (this.$fastController.isConnected) { + this.setThumbPositionForOrientation(this.direction); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.proxy.setAttribute("type", "range"); + this.direction = getDirection(this); + this.updateStepMultiplier(); + this.setupTrackConstraints(); + this.setupListeners(); + this.setupDefaultValue(); + this.setThumbPositionForOrientation(this.direction); + } + /** + * @internal + */ + disconnectedCallback() { + this.setupListeners(true); + } + /** + * Increment the value by the step + * + * @public + */ + increment() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) + Number(this.step) : Number(this.value) - Number(this.step); + const incrementedVal = this.convertToConstrainedValue(newVal); + const incrementedValString = incrementedVal < Number(this.max) ? `${incrementedVal}` : `${this.max}`; + this.value = incrementedValString; + } + /** + * Decrement the value by the step + * + * @public + */ + decrement() { + const newVal = this.direction !== Direction.rtl && this.orientation !== Orientation.vertical ? Number(this.value) - Number(this.step) : Number(this.value) + Number(this.step); + const decrementedVal = this.convertToConstrainedValue(newVal); + const decrementedValString = decrementedVal > Number(this.min) ? `${decrementedVal}` : `${this.min}`; + this.value = decrementedValString; + } + /** + * Places the thumb based on the current value + * + * @public + * @param direction - writing mode + */ + setThumbPositionForOrientation(direction) { + const newPct = convertPixelToPercent(Number(this.value), Number(this.min), Number(this.max), direction); + const percentage = (1 - newPct) * 100; + if (this.orientation === Orientation.horizontal) { + this.position = this.isDragging ? `right: ${percentage}%; transition: none;` : `right: ${percentage}%; transition: all 0.2s ease;`; + } else { + this.position = this.isDragging ? `bottom: ${percentage}%; transition: none;` : `bottom: ${percentage}%; transition: all 0.2s ease;`; + } + } + /** + * Update the step multiplier used to ensure rounding errors from steps that + * are not whole numbers + */ + updateStepMultiplier() { + const stepString = this.step + ""; + const decimalPlacesOfStep = !!(this.step % 1) ? stepString.length - stepString.indexOf(".") - 1 : 0; + this.stepMultiplier = Math.pow(10, decimalPlacesOfStep); + } + get midpoint() { + return `${this.convertToConstrainedValue((this.max + this.min) / 2)}`; + } + setupDefaultValue() { + if (typeof this.value === "string") { + if (this.value.length === 0) { + this.initialValue = this.midpoint; + } else { + const value = parseFloat(this.value); + if (!Number.isNaN(value) && (value < this.min || value > this.max)) { + this.value = this.midpoint; + } + } + } + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Slider.prototype, "readOnly", void 0); + __decorate([ + observable + ], Slider.prototype, "direction", void 0); + __decorate([ + observable + ], Slider.prototype, "isDragging", void 0); + __decorate([ + observable + ], Slider.prototype, "position", void 0); + __decorate([ + observable + ], Slider.prototype, "trackWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinWidth", void 0); + __decorate([ + observable + ], Slider.prototype, "trackHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "trackLeft", void 0); + __decorate([ + observable + ], Slider.prototype, "trackMinHeight", void 0); + __decorate([ + observable + ], Slider.prototype, "valueTextFormatter", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "min", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "max", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], Slider.prototype, "step", void 0); + __decorate([ + attr + ], Slider.prototype, "orientation", void 0); + __decorate([ + attr + ], Slider.prototype, "mode", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js + var init_slider2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/slider/index.js"() { + init_slider_template(); + init_slider(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js + var init_switch_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js + var _Switch, FormAssociatedSwitch; + var init_switch_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _Switch = class extends FoundationElement { + }; + FormAssociatedSwitch = class extends CheckableFormAssociated(_Switch) { + constructor() { + super(...arguments); + this.proxy = document.createElement("input"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js + var Switch; + var init_switch = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/switch.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_switch_form_associated(); + Switch = class extends FormAssociatedSwitch { + constructor() { + super(); + this.initialValue = "on"; + this.keypressHandler = (e) => { + if (this.readOnly) { + return; + } + switch (e.key) { + case keyEnter: + case keySpace: + this.checked = !this.checked; + break; + } + }; + this.clickHandler = (e) => { + if (!this.disabled && !this.readOnly) { + this.checked = !this.checked; + } + }; + this.proxy.setAttribute("type", "checkbox"); + } + readOnlyChanged() { + if (this.proxy instanceof HTMLInputElement) { + this.proxy.readOnly = this.readOnly; + } + this.readOnly ? this.classList.add("readonly") : this.classList.remove("readonly"); + } + /** + * @internal + */ + checkedChanged(prev, next) { + super.checkedChanged(prev, next); + this.checked ? this.classList.add("checked") : this.classList.remove("checked"); + } + }; + __decorate([ + attr({ attribute: "readonly", mode: "boolean" }) + ], Switch.prototype, "readOnly", void 0); + __decorate([ + observable + ], Switch.prototype, "defaultSlottedNodes", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js + var init_switch2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/switch/index.js"() { + init_switch_template(); + init_switch(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js + var tabPanelTemplate; + var init_tab_panel_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.template.js"() { + init_esm(); + tabPanelTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js + var TabPanel; + var init_tab_panel = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/tab-panel.js"() { + init_foundation_element(); + TabPanel = class extends FoundationElement { + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js + var init_tab_panel2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab-panel/index.js"() { + init_tab_panel_template(); + init_tab_panel(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js + var tabTemplate; + var init_tab_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.template.js"() { + init_esm(); + tabTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js + var Tab; + var init_tab = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/tab.js"() { + init_tslib_es6(); + init_esm(); + init_foundation_element(); + Tab = class extends FoundationElement { + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tab.prototype, "disabled", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js + var init_tab2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tab/index.js"() { + init_tab_template(); + init_tab(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js + var tabsTemplate; + var init_tabs_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.template.js"() { + init_esm(); + init_start_end(); + tabsTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js + var TabsOrientation, Tabs; + var init_tabs = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/tabs.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TabsOrientation = { + vertical: "vertical", + horizontal: "horizontal" + }; + Tabs = class extends FoundationElement { + constructor() { + super(...arguments); + this.orientation = TabsOrientation.horizontal; + this.activeindicator = true; + this.showActiveIndicator = true; + this.prevActiveTabIndex = 0; + this.activeTabIndex = 0; + this.ticking = false; + this.change = () => { + this.$emit("change", this.activetab); + }; + this.isDisabledElement = (el) => { + return el.getAttribute("aria-disabled") === "true"; + }; + this.isHiddenElement = (el) => { + return el.hasAttribute("hidden"); + }; + this.isFocusableElement = (el) => { + return !this.isDisabledElement(el) && !this.isHiddenElement(el); + }; + this.setTabs = () => { + const gridHorizontalProperty = "gridColumn"; + const gridVerticalProperty = "gridRow"; + const gridProperty = this.isHorizontal() ? gridHorizontalProperty : gridVerticalProperty; + this.activeTabIndex = this.getActiveIndex(); + this.showActiveIndicator = false; + this.tabs.forEach((tab, index) => { + if (tab.slot === "tab") { + const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab); + if (this.activeindicator && this.isFocusableElement(tab)) { + this.showActiveIndicator = true; + } + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tab.setAttribute("id", tabId); + tab.setAttribute("aria-selected", isActiveTab ? "true" : "false"); + tab.setAttribute("aria-controls", tabpanelId); + tab.addEventListener("click", this.handleTabClick); + tab.addEventListener("keydown", this.handleTabKeyDown); + tab.setAttribute("tabindex", isActiveTab ? "0" : "-1"); + if (isActiveTab) { + this.activetab = tab; + this.activeid = tabId; + } + } + tab.style[gridHorizontalProperty] = ""; + tab.style[gridVerticalProperty] = ""; + tab.style[gridProperty] = `${index + 1}`; + !this.isHorizontal() ? tab.classList.add("vertical") : tab.classList.remove("vertical"); + }); + }; + this.setTabPanels = () => { + this.tabpanels.forEach((tabpanel, index) => { + const tabId = this.tabIds[index]; + const tabpanelId = this.tabpanelIds[index]; + tabpanel.setAttribute("id", tabpanelId); + tabpanel.setAttribute("aria-labelledby", tabId); + this.activeTabIndex !== index ? tabpanel.setAttribute("hidden", "") : tabpanel.removeAttribute("hidden"); + }); + }; + this.handleTabClick = (event) => { + const selectedTab = event.currentTarget; + if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) { + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = this.tabs.indexOf(selectedTab); + this.setComponent(); + } + }; + this.handleTabKeyDown = (event) => { + if (this.isHorizontal()) { + switch (event.key) { + case keyArrowLeft: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowRight: + event.preventDefault(); + this.adjustForward(event); + break; + } + } else { + switch (event.key) { + case keyArrowUp: + event.preventDefault(); + this.adjustBackward(event); + break; + case keyArrowDown: + event.preventDefault(); + this.adjustForward(event); + break; + } + } + switch (event.key) { + case keyHome: + event.preventDefault(); + this.adjust(-this.activeTabIndex); + break; + case keyEnd: + event.preventDefault(); + this.adjust(this.tabs.length - this.activeTabIndex - 1); + break; + } + }; + this.adjustForward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) + 1 : 1; + if (index === group.length) { + index = 0; + } + while (index < group.length && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (this.activetab && index === group.indexOf(this.activetab)) { + break; + } else if (index + 1 >= group.length) { + index = 0; + } else { + index += 1; + } + } + }; + this.adjustBackward = (e) => { + const group = this.tabs; + let index = 0; + index = this.activetab ? group.indexOf(this.activetab) - 1 : 0; + index = index < 0 ? group.length - 1 : index; + while (index >= 0 && group.length > 1) { + if (this.isFocusableElement(group[index])) { + this.moveToTabByIndex(group, index); + break; + } else if (index - 1 < 0) { + index = group.length - 1; + } else { + index -= 1; + } + } + }; + this.moveToTabByIndex = (group, index) => { + const tab = group[index]; + this.activetab = tab; + this.prevActiveTabIndex = this.activeTabIndex; + this.activeTabIndex = index; + tab.focus(); + this.setComponent(); + }; + } + /** + * @internal + */ + orientationChanged() { + if (this.$fastController.isConnected) { + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + activeidChanged(oldValue, newValue) { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabsChanged() { + if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + /** + * @internal + */ + tabpanelsChanged() { + if (this.$fastController.isConnected && this.tabpanels.length <= this.tabs.length) { + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.setTabs(); + this.setTabPanels(); + this.handleActiveIndicatorPosition(); + } + } + getActiveIndex() { + const id = this.activeid; + if (id !== void 0) { + return this.tabIds.indexOf(this.activeid) === -1 ? 0 : this.tabIds.indexOf(this.activeid); + } else { + return 0; + } + } + getTabIds() { + return this.tabs.map((tab) => { + var _a; + return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`; + }); + } + getTabPanelIds() { + return this.tabpanels.map((tabPanel) => { + var _a; + return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`; + }); + } + setComponent() { + if (this.activeTabIndex !== this.prevActiveTabIndex) { + this.activeid = this.tabIds[this.activeTabIndex]; + this.focusTab(); + this.change(); + } + } + isHorizontal() { + return this.orientation === TabsOrientation.horizontal; + } + handleActiveIndicatorPosition() { + if (this.showActiveIndicator && this.activeindicator && this.activeTabIndex !== this.prevActiveTabIndex) { + if (this.ticking) { + this.ticking = false; + } else { + this.ticking = true; + this.animateActiveIndicator(); + } + } + } + animateActiveIndicator() { + this.ticking = true; + const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow"; + const translateProperty = this.isHorizontal() ? "translateX" : "translateY"; + const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop"; + const prev = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + const next = this.activeIndicatorRef[offsetProperty]; + this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`; + const dif = next - prev; + this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`; + this.activeIndicatorRef.classList.add("activeIndicatorTransition"); + this.activeIndicatorRef.addEventListener("transitionend", () => { + this.ticking = false; + this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`; + this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`; + this.activeIndicatorRef.classList.remove("activeIndicatorTransition"); + }); + } + /** + * The adjust method for FASTTabs + * @public + * @remarks + * This method allows the active index to be adjusted by numerical increments + */ + adjust(adjustment) { + const focusableTabs = this.tabs.filter((t) => this.isFocusableElement(t)); + const currentActiveTabIndex = focusableTabs.indexOf(this.activetab); + const nextTabIndex = limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment); + const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]); + if (nextIndex > -1) { + this.moveToTabByIndex(this.tabs, nextIndex); + } + } + focusTab() { + this.tabs[this.activeTabIndex].focus(); + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.tabIds = this.getTabIds(); + this.tabpanelIds = this.getTabPanelIds(); + this.activeTabIndex = this.getActiveIndex(); + } + }; + __decorate([ + attr + ], Tabs.prototype, "orientation", void 0); + __decorate([ + attr + ], Tabs.prototype, "activeid", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabs", void 0); + __decorate([ + observable + ], Tabs.prototype, "tabpanels", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], Tabs.prototype, "activeindicator", void 0); + __decorate([ + observable + ], Tabs.prototype, "activeIndicatorRef", void 0); + __decorate([ + observable + ], Tabs.prototype, "showActiveIndicator", void 0); + applyMixins(Tabs, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js + var init_tabs2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tabs/index.js"() { + init_tabs_template(); + init_tabs(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js + var _TextArea, FormAssociatedTextArea; + var init_text_area_form_associated = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.form-associated.js"() { + init_form_associated(); + init_foundation_element(); + _TextArea = class extends FoundationElement { + }; + FormAssociatedTextArea = class extends FormAssociated(_TextArea) { + constructor() { + super(...arguments); + this.proxy = document.createElement("textarea"); + } + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js + var TextAreaResize; + var init_text_area_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.options.js"() { + TextAreaResize = { + /** + * No resize. + */ + none: "none", + /** + * Resize vertically and horizontally. + */ + both: "both", + /** + * Resize horizontally. + */ + horizontal: "horizontal", + /** + * Resize vertically. + */ + vertical: "vertical" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js + var TextArea; + var init_text_area = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.js"() { + init_tslib_es6(); + init_esm(); + init_text_field(); + init_apply_mixins(); + init_text_area_form_associated(); + init_text_area_options(); + TextArea = class extends FormAssociatedTextArea { + constructor() { + super(...arguments); + this.resize = TextAreaResize.none; + this.cols = 20; + this.handleTextInput = () => { + this.value = this.control.value; + }; + } + readOnlyChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.readOnly = this.readOnly; + } + } + autofocusChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.autofocus = this.autofocus; + } + } + listChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.setAttribute("list", this.list); + } + } + maxlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.maxLength = this.maxlength; + } + } + minlengthChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.minLength = this.minlength; + } + } + spellcheckChanged() { + if (this.proxy instanceof HTMLTextAreaElement) { + this.proxy.spellcheck = this.spellcheck; + } + } + /** + * Selects all the text in the text area + * + * @public + */ + select() { + this.control.select(); + this.$emit("select"); + } + /** + * Change event handler for inner control. + * @remarks + * "Change" events are not `composable` so they will not + * permeate the shadow DOM boundary. This fn effectively proxies + * the change event, emitting a `change` event whenever the internal + * control emits a `change` event + * @internal + */ + handleChange() { + this.$emit("change"); + } + /** {@inheritDoc (FormAssociated:interface).validate} */ + validate() { + super.validate(this.control); + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "readOnly", void 0); + __decorate([ + attr + ], TextArea.prototype, "resize", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "autofocus", void 0); + __decorate([ + attr({ attribute: "form" }) + ], TextArea.prototype, "formId", void 0); + __decorate([ + attr + ], TextArea.prototype, "list", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "maxlength", void 0); + __decorate([ + attr({ converter: nullableNumberConverter }) + ], TextArea.prototype, "minlength", void 0); + __decorate([ + attr + ], TextArea.prototype, "name", void 0); + __decorate([ + attr + ], TextArea.prototype, "placeholder", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "cols", void 0); + __decorate([ + attr({ converter: nullableNumberConverter, mode: "fromView" }) + ], TextArea.prototype, "rows", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TextArea.prototype, "spellcheck", void 0); + __decorate([ + observable + ], TextArea.prototype, "defaultSlottedNodes", void 0); + applyMixins(TextArea, DelegatesARIATextbox); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js + var textAreaTemplate; + var init_text_area_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/text-area.template.js"() { + init_esm(); + init_text_area(); + textAreaTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js + var init_text_area2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-area/index.js"() { + init_text_area_template(); + init_text_area(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js + var textFieldTemplate; + var init_text_field_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/text-field.template.js"() { + init_esm(); + init_start_end(); + init_whitespace_filter(); + textFieldTemplate = (context, definition) => html` + +`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js + var init_text_field2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/text-field/index.js"() { + init_text_field_template(); + init_text_field(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js + var init_toolbar_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js + function getRootActiveElement(element) { + const rootNode = element.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.activeElement; + } + return document.activeElement; + } + var init_root_active_element = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/root-active-element.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js + var ToolbarArrowKeyMap, Toolbar, DelegatesARIAToolbar; + var init_toolbar = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/toolbar.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_index_esm(); + init_foundation_element(); + init_aria_global(); + init_start_end(); + init_apply_mixins(); + init_direction(); + init_root_active_element(); + ToolbarArrowKeyMap = Object.freeze({ + [ArrowKeys.ArrowUp]: { + [Orientation.vertical]: -1 + }, + [ArrowKeys.ArrowDown]: { + [Orientation.vertical]: 1 + }, + [ArrowKeys.ArrowLeft]: { + [Orientation.horizontal]: { + [Direction.ltr]: -1, + [Direction.rtl]: 1 + } + }, + [ArrowKeys.ArrowRight]: { + [Orientation.horizontal]: { + [Direction.ltr]: 1, + [Direction.rtl]: -1 + } + } + }); + Toolbar = class _Toolbar extends FoundationElement { + constructor() { + super(...arguments); + this._activeIndex = 0; + this.direction = Direction.ltr; + this.orientation = Orientation.horizontal; + } + /** + * The index of the currently focused element, clamped between 0 and the last element. + * + * @internal + */ + get activeIndex() { + Observable.track(this, "activeIndex"); + return this._activeIndex; + } + set activeIndex(value) { + if (this.$fastController.isConnected) { + this._activeIndex = limit(0, this.focusableElements.length - 1, value); + Observable.notify(this, "activeIndex"); + } + } + slottedItemsChanged() { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * Set the activeIndex when a focusable element in the toolbar is clicked. + * + * @internal + */ + mouseDownHandler(e) { + var _a; + const activeIndex = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a.findIndex((x) => x.contains(e.target)); + if (activeIndex > -1 && this.activeIndex !== activeIndex) { + this.setFocusedElement(activeIndex); + } + return true; + } + childItemsChanged(prev, next) { + if (this.$fastController.isConnected) { + this.reduceFocusableElements(); + } + } + /** + * @internal + */ + connectedCallback() { + super.connectedCallback(); + this.direction = getDirection(this); + } + /** + * When the toolbar receives focus, set the currently active element as focused. + * + * @internal + */ + focusinHandler(e) { + const relatedTarget = e.relatedTarget; + if (!relatedTarget || this.contains(relatedTarget)) { + return; + } + this.setFocusedElement(); + } + /** + * Determines a value that can be used to iterate a list with the arrow keys. + * + * @param this - An element with an orientation and direction + * @param key - The event key value + * @internal + */ + getDirectionalIncrementer(key) { + var _a, _b, _c, _d, _e; + return (_e = (_c = (_b = (_a = ToolbarArrowKeyMap[key]) === null || _a === void 0 ? void 0 : _a[this.orientation]) === null || _b === void 0 ? void 0 : _b[this.direction]) !== null && _c !== void 0 ? _c : (_d = ToolbarArrowKeyMap[key]) === null || _d === void 0 ? void 0 : _d[this.orientation]) !== null && _e !== void 0 ? _e : 0; + } + /** + * Handle keyboard events for the toolbar. + * + * @internal + */ + keydownHandler(e) { + const key = e.key; + if (!(key in ArrowKeys) || e.defaultPrevented || e.shiftKey) { + return true; + } + const incrementer = this.getDirectionalIncrementer(key); + if (!incrementer) { + return !e.target.closest("[role=radiogroup]"); + } + const nextIndex = this.activeIndex + incrementer; + if (this.focusableElements[nextIndex]) { + e.preventDefault(); + } + this.setFocusedElement(nextIndex); + return true; + } + /** + * get all the slotted elements + * @internal + */ + get allSlottedItems() { + return [ + ...this.start.assignedElements(), + ...this.slottedItems, + ...this.end.assignedElements() + ]; + } + /** + * Prepare the slotted elements which can be focusable. + * + * @internal + */ + reduceFocusableElements() { + var _a; + const previousFocusedElement = (_a = this.focusableElements) === null || _a === void 0 ? void 0 : _a[this.activeIndex]; + this.focusableElements = this.allSlottedItems.reduce(_Toolbar.reduceFocusableItems, []); + const adjustedActiveIndex = this.focusableElements.indexOf(previousFocusedElement); + this.activeIndex = Math.max(0, adjustedActiveIndex); + this.setFocusableElements(); + } + /** + * Set the activeIndex and focus the corresponding control. + * + * @param activeIndex - The new index to set + * @internal + */ + setFocusedElement(activeIndex = this.activeIndex) { + this.activeIndex = activeIndex; + this.setFocusableElements(); + if (this.focusableElements[this.activeIndex] && // Don't focus the toolbar element if some event handlers moved + // the focus on another element in the page. + this.contains(getRootActiveElement(this))) { + this.focusableElements[this.activeIndex].focus(); + } + } + /** + * Reduce a collection to only its focusable elements. + * + * @param elements - Collection of elements to reduce + * @param element - The current element + * + * @internal + */ + static reduceFocusableItems(elements2, element) { + var _a, _b, _c, _d; + const isRoleRadio = element.getAttribute("role") === "radio"; + const isFocusableFastElement = (_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus; + const hasFocusableShadow = Array.from((_d = (_c = element.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll("*")) !== null && _d !== void 0 ? _d : []).some((x) => isFocusable(x)); + if (!element.hasAttribute("disabled") && !element.hasAttribute("hidden") && (isFocusable(element) || isRoleRadio || isFocusableFastElement || hasFocusableShadow)) { + elements2.push(element); + return elements2; + } + if (element.childElementCount) { + return elements2.concat(Array.from(element.children).reduce(_Toolbar.reduceFocusableItems, [])); + } + return elements2; + } + /** + * @internal + */ + setFocusableElements() { + if (this.$fastController.isConnected && this.focusableElements.length > 0) { + this.focusableElements.forEach((element, index) => { + element.tabIndex = this.activeIndex === index ? 0 : -1; + }); + } + } + }; + __decorate([ + observable + ], Toolbar.prototype, "direction", void 0); + __decorate([ + attr + ], Toolbar.prototype, "orientation", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedItems", void 0); + __decorate([ + observable + ], Toolbar.prototype, "slottedLabel", void 0); + __decorate([ + observable + ], Toolbar.prototype, "childItems", void 0); + DelegatesARIAToolbar = class { + }; + __decorate([ + attr({ attribute: "aria-labelledby" }) + ], DelegatesARIAToolbar.prototype, "ariaLabelledby", void 0); + __decorate([ + attr({ attribute: "aria-label" }) + ], DelegatesARIAToolbar.prototype, "ariaLabel", void 0); + applyMixins(DelegatesARIAToolbar, ARIAGlobalStatesAndProperties); + applyMixins(Toolbar, StartEnd, DelegatesARIAToolbar); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js + var init_toolbar2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/toolbar/index.js"() { + init_toolbar_template(); + init_toolbar(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js + var init_tooltip_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js + var TooltipPosition; + var init_tooltip_options = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.options.js"() { + TooltipPosition = { + /** + * The tooltip is positioned above the element + */ + top: "top", + /** + * The tooltip is positioned to the right of the element + */ + right: "right", + /** + * The tooltip is positioned below the element + */ + bottom: "bottom", + /** + * The tooltip is positioned to the left of the element + */ + left: "left", + /** + * The tooltip is positioned before the element + */ + start: "start", + /** + * The tooltip is positioned after the element + */ + end: "end", + /** + * The tooltip is positioned above the element and to the left + */ + topLeft: "top-left", + /** + * The tooltip is positioned above the element and to the right + */ + topRight: "top-right", + /** + * The tooltip is positioned below the element and to the left + */ + bottomLeft: "bottom-left", + /** + * The tooltip is positioned below the element and to the right + */ + bottomRight: "bottom-right", + /** + * The tooltip is positioned above the element and to the left + */ + topStart: "top-start", + /** + * The tooltip is positioned above the element and to the right + */ + topEnd: "top-end", + /** + * The tooltip is positioned below the element and to the left + */ + bottomStart: "bottom-start", + /** + * The tooltip is positioned below the element and to the right + */ + bottomEnd: "bottom-end" + }; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js + var Tooltip; + var init_tooltip = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/tooltip.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_direction(); + init_foundation_element(); + init_tooltip_options(); + Tooltip = class extends FoundationElement { + constructor() { + super(...arguments); + this.anchor = ""; + this.delay = 300; + this.autoUpdateMode = "anchor"; + this.anchorElement = null; + this.viewportElement = null; + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.horizontalInset = "false"; + this.verticalInset = "false"; + this.horizontalScaling = "content"; + this.verticalScaling = "content"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = void 0; + this.tooltipVisible = false; + this.currentDirection = Direction.ltr; + this.showDelayTimer = null; + this.hideDelayTimer = null; + this.isAnchorHoveredFocused = false; + this.isRegionHovered = false; + this.handlePositionChange = (ev) => { + this.classList.toggle("top", this.region.verticalPosition === "start"); + this.classList.toggle("bottom", this.region.verticalPosition === "end"); + this.classList.toggle("inset-top", this.region.verticalPosition === "insetStart"); + this.classList.toggle("inset-bottom", this.region.verticalPosition === "insetEnd"); + this.classList.toggle("center-vertical", this.region.verticalPosition === "center"); + this.classList.toggle("left", this.region.horizontalPosition === "start"); + this.classList.toggle("right", this.region.horizontalPosition === "end"); + this.classList.toggle("inset-left", this.region.horizontalPosition === "insetStart"); + this.classList.toggle("inset-right", this.region.horizontalPosition === "insetEnd"); + this.classList.toggle("center-horizontal", this.region.horizontalPosition === "center"); + }; + this.handleRegionMouseOver = (ev) => { + this.isRegionHovered = true; + }; + this.handleRegionMouseOut = (ev) => { + this.isRegionHovered = false; + this.startHideDelayTimer(); + }; + this.handleAnchorMouseOver = (ev) => { + if (this.tooltipVisible) { + this.isAnchorHoveredFocused = true; + return; + } + this.startShowDelayTimer(); + }; + this.handleAnchorMouseOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.handleAnchorFocusIn = (ev) => { + this.startShowDelayTimer(); + }; + this.handleAnchorFocusOut = (ev) => { + this.isAnchorHoveredFocused = false; + this.clearShowDelayTimer(); + this.startHideDelayTimer(); + }; + this.startHideDelayTimer = () => { + this.clearHideDelayTimer(); + if (!this.tooltipVisible) { + return; + } + this.hideDelayTimer = window.setTimeout(() => { + this.updateTooltipVisibility(); + }, 60); + }; + this.clearHideDelayTimer = () => { + if (this.hideDelayTimer !== null) { + clearTimeout(this.hideDelayTimer); + this.hideDelayTimer = null; + } + }; + this.startShowDelayTimer = () => { + if (this.isAnchorHoveredFocused) { + return; + } + if (this.delay > 1) { + if (this.showDelayTimer === null) + this.showDelayTimer = window.setTimeout(() => { + this.startHover(); + }, this.delay); + return; + } + this.startHover(); + }; + this.startHover = () => { + this.isAnchorHoveredFocused = true; + this.updateTooltipVisibility(); + }; + this.clearShowDelayTimer = () => { + if (this.showDelayTimer !== null) { + clearTimeout(this.showDelayTimer); + this.showDelayTimer = null; + } + }; + this.getAnchor = () => { + const rootNode = this.getRootNode(); + if (rootNode instanceof ShadowRoot) { + return rootNode.getElementById(this.anchor); + } + return document.getElementById(this.anchor); + }; + this.handleDocumentKeydown = (e) => { + if (!e.defaultPrevented && this.tooltipVisible) { + switch (e.key) { + case keyEscape: + this.isAnchorHoveredFocused = false; + this.updateTooltipVisibility(); + this.$emit("dismiss"); + break; + } + } + }; + this.updateTooltipVisibility = () => { + if (this.visible === false) { + this.hideTooltip(); + } else if (this.visible === true) { + this.showTooltip(); + return; + } else { + if (this.isAnchorHoveredFocused || this.isRegionHovered) { + this.showTooltip(); + return; + } + this.hideTooltip(); + } + }; + this.showTooltip = () => { + if (this.tooltipVisible) { + return; + } + this.currentDirection = getDirection(this); + this.tooltipVisible = true; + document.addEventListener("keydown", this.handleDocumentKeydown); + DOM.queueUpdate(this.setRegionProps); + }; + this.hideTooltip = () => { + if (!this.tooltipVisible) { + return; + } + this.clearHideDelayTimer(); + if (this.region !== null && this.region !== void 0) { + this.region.removeEventListener("positionchange", this.handlePositionChange); + this.region.viewportElement = null; + this.region.anchorElement = null; + this.region.removeEventListener("mouseover", this.handleRegionMouseOver); + this.region.removeEventListener("mouseout", this.handleRegionMouseOut); + } + document.removeEventListener("keydown", this.handleDocumentKeydown); + this.tooltipVisible = false; + }; + this.setRegionProps = () => { + if (!this.tooltipVisible) { + return; + } + this.region.viewportElement = this.viewportElement; + this.region.anchorElement = this.anchorElement; + this.region.addEventListener("positionchange", this.handlePositionChange); + this.region.addEventListener("mouseover", this.handleRegionMouseOver, { + passive: true + }); + this.region.addEventListener("mouseout", this.handleRegionMouseOut, { + passive: true + }); + }; + } + visibleChanged() { + if (this.$fastController.isConnected) { + this.updateTooltipVisibility(); + this.updateLayout(); + } + } + anchorChanged() { + if (this.$fastController.isConnected) { + this.anchorElement = this.getAnchor(); + } + } + positionChanged() { + if (this.$fastController.isConnected) { + this.updateLayout(); + } + } + anchorElementChanged(oldValue) { + if (this.$fastController.isConnected) { + if (oldValue !== null && oldValue !== void 0) { + oldValue.removeEventListener("mouseover", this.handleAnchorMouseOver); + oldValue.removeEventListener("mouseout", this.handleAnchorMouseOut); + oldValue.removeEventListener("focusin", this.handleAnchorFocusIn); + oldValue.removeEventListener("focusout", this.handleAnchorFocusOut); + } + if (this.anchorElement !== null && this.anchorElement !== void 0) { + this.anchorElement.addEventListener("mouseover", this.handleAnchorMouseOver, { passive: true }); + this.anchorElement.addEventListener("mouseout", this.handleAnchorMouseOut, { passive: true }); + this.anchorElement.addEventListener("focusin", this.handleAnchorFocusIn, { + passive: true + }); + this.anchorElement.addEventListener("focusout", this.handleAnchorFocusOut, { passive: true }); + const anchorId = this.anchorElement.id; + if (this.anchorElement.parentElement !== null) { + this.anchorElement.parentElement.querySelectorAll(":hover").forEach((element) => { + if (element.id === anchorId) { + this.startShowDelayTimer(); + } + }); + } + } + if (this.region !== null && this.region !== void 0 && this.tooltipVisible) { + this.region.anchorElement = this.anchorElement; + } + this.updateLayout(); + } + } + viewportElementChanged() { + if (this.region !== null && this.region !== void 0) { + this.region.viewportElement = this.viewportElement; + } + this.updateLayout(); + } + connectedCallback() { + super.connectedCallback(); + this.anchorElement = this.getAnchor(); + this.updateTooltipVisibility(); + } + disconnectedCallback() { + this.hideTooltip(); + this.clearShowDelayTimer(); + this.clearHideDelayTimer(); + super.disconnectedCallback(); + } + /** + * updated the properties being passed to the anchored region + */ + updateLayout() { + this.verticalPositioningMode = "locktodefault"; + this.horizontalPositioningMode = "locktodefault"; + switch (this.position) { + case TooltipPosition.top: + case TooltipPosition.bottom: + this.verticalDefaultPosition = this.position; + this.horizontalDefaultPosition = "center"; + break; + case TooltipPosition.right: + case TooltipPosition.left: + case TooltipPosition.start: + case TooltipPosition.end: + this.verticalDefaultPosition = "center"; + this.horizontalDefaultPosition = this.position; + break; + case TooltipPosition.topLeft: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.topRight: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.bottomLeft: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "left"; + break; + case TooltipPosition.bottomRight: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "right"; + break; + case TooltipPosition.topStart: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.topEnd: + this.verticalDefaultPosition = "top"; + this.horizontalDefaultPosition = "end"; + break; + case TooltipPosition.bottomStart: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "start"; + break; + case TooltipPosition.bottomEnd: + this.verticalDefaultPosition = "bottom"; + this.horizontalDefaultPosition = "end"; + break; + default: + this.verticalPositioningMode = "dynamic"; + this.horizontalPositioningMode = "dynamic"; + this.verticalDefaultPosition = void 0; + this.horizontalDefaultPosition = "center"; + break; + } + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], Tooltip.prototype, "visible", void 0); + __decorate([ + attr + ], Tooltip.prototype, "anchor", void 0); + __decorate([ + attr + ], Tooltip.prototype, "delay", void 0); + __decorate([ + attr + ], Tooltip.prototype, "position", void 0); + __decorate([ + attr({ attribute: "auto-update-mode" }) + ], Tooltip.prototype, "autoUpdateMode", void 0); + __decorate([ + attr({ attribute: "horizontal-viewport-lock" }) + ], Tooltip.prototype, "horizontalViewportLock", void 0); + __decorate([ + attr({ attribute: "vertical-viewport-lock" }) + ], Tooltip.prototype, "verticalViewportLock", void 0); + __decorate([ + observable + ], Tooltip.prototype, "anchorElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "viewportElement", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalPositioningMode", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalInset", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalScaling", void 0); + __decorate([ + observable + ], Tooltip.prototype, "verticalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "horizontalDefaultPosition", void 0); + __decorate([ + observable + ], Tooltip.prototype, "tooltipVisible", void 0); + __decorate([ + observable + ], Tooltip.prototype, "currentDirection", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js + var init_tooltip2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tooltip/index.js"() { + init_tooltip_template(); + init_tooltip(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js + var init_tree_item_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js + function isTreeItemElement(el) { + return isHTMLElement(el) && el.getAttribute("role") === "treeitem"; + } + var TreeItem; + var init_tree_item = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/tree-item.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_start_end(); + init_apply_mixins(); + init_foundation_element(); + TreeItem = class extends FoundationElement { + constructor() { + super(...arguments); + this.expanded = false; + this.focusable = false; + this.isNestedItem = () => { + return isTreeItemElement(this.parentElement); + }; + this.handleExpandCollapseButtonClick = (e) => { + if (!this.disabled && !e.defaultPrevented) { + this.expanded = !this.expanded; + } + }; + this.handleFocus = (e) => { + this.setAttribute("tabindex", "0"); + }; + this.handleBlur = (e) => { + this.setAttribute("tabindex", "-1"); + }; + } + expandedChanged() { + if (this.$fastController.isConnected) { + this.$emit("expanded-change", this); + } + } + selectedChanged() { + if (this.$fastController.isConnected) { + this.$emit("selected-change", this); + } + } + itemsChanged(oldValue, newValue) { + if (this.$fastController.isConnected) { + this.items.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = true; + } + }); + } + } + /** + * Places document focus on a tree item + * + * @public + * @param el - the element to focus + */ + static focusItem(el) { + el.focusable = true; + el.focus(); + } + /** + * Gets number of children + * + * @internal + */ + childItemLength() { + const treeChildren = this.childItems.filter((item) => { + return isTreeItemElement(item); + }); + return treeChildren ? treeChildren.length : 0; + } + }; + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "expanded", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "selected", void 0); + __decorate([ + attr({ mode: "boolean" }) + ], TreeItem.prototype, "disabled", void 0); + __decorate([ + observable + ], TreeItem.prototype, "focusable", void 0); + __decorate([ + observable + ], TreeItem.prototype, "childItems", void 0); + __decorate([ + observable + ], TreeItem.prototype, "items", void 0); + __decorate([ + observable + ], TreeItem.prototype, "nested", void 0); + __decorate([ + observable + ], TreeItem.prototype, "renderCollapsedChildren", void 0); + applyMixins(TreeItem, StartEnd); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js + var init_tree_item2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-item/index.js"() { + init_tree_item_template(); + init_tree_item(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js + var init_tree_view_template = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.template.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js + var TreeView; + var init_tree_view = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/tree-view.js"() { + init_tslib_es6(); + init_esm(); + init_dist2(); + init_tree_item(); + init_foundation_element(); + TreeView = class extends FoundationElement { + constructor() { + super(...arguments); + this.currentFocused = null; + this.handleFocus = (e) => { + if (this.slottedTreeItems.length < 1) { + return; + } + if (e.target === this) { + if (this.currentFocused === null) { + this.currentFocused = this.getValidFocusableItem(); + } + if (this.currentFocused !== null) { + TreeItem.focusItem(this.currentFocused); + } + return; + } + if (this.contains(e.target)) { + this.setAttribute("tabindex", "-1"); + this.currentFocused = e.target; + } + }; + this.handleBlur = (e) => { + if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) { + this.setAttribute("tabindex", "0"); + } + }; + this.handleKeyDown = (e) => { + if (e.defaultPrevented) { + return; + } + if (this.slottedTreeItems.length < 1) { + return true; + } + const treeItems = this.getVisibleNodes(); + switch (e.key) { + case keyHome: + if (treeItems.length) { + TreeItem.focusItem(treeItems[0]); + } + return; + case keyEnd: + if (treeItems.length) { + TreeItem.focusItem(treeItems[treeItems.length - 1]); + } + return; + case keyArrowLeft: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) { + item.expanded = false; + } else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) { + TreeItem.focusItem(item.parentElement); + } + } + return false; + case keyArrowRight: + if (e.target && this.isFocusableElement(e.target)) { + const item = e.target; + if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) { + item.expanded = true; + } else if (item instanceof TreeItem && item.childItemLength() > 0) { + this.focusNextNode(1, e.target); + } + } + return; + case keyArrowDown: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(1, e.target); + } + return; + case keyArrowUp: + if (e.target && this.isFocusableElement(e.target)) { + this.focusNextNode(-1, e.target); + } + return; + case keyEnter: + this.handleClick(e); + return; + } + return true; + }; + this.handleSelectedChange = (e) => { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (item.selected) { + if (this.currentSelected && this.currentSelected !== item) { + this.currentSelected.selected = false; + } + this.currentSelected = item; + } else if (!item.selected && this.currentSelected === item) { + this.currentSelected = null; + } + return; + }; + this.setItems = () => { + const selectedItem = this.treeView.querySelector("[aria-selected='true']"); + this.currentSelected = selectedItem; + if (this.currentFocused === null || !this.contains(this.currentFocused)) { + this.currentFocused = this.getValidFocusableItem(); + } + this.nested = this.checkForNestedItems(); + const treeItems = this.getVisibleNodes(); + treeItems.forEach((node) => { + if (isTreeItemElement(node)) { + node.nested = this.nested; + } + }); + }; + this.isFocusableElement = (el) => { + return isTreeItemElement(el); + }; + this.isSelectedElement = (el) => { + return el.selected; + }; + } + slottedTreeItemsChanged() { + if (this.$fastController.isConnected) { + this.setItems(); + } + } + connectedCallback() { + super.connectedCallback(); + this.setAttribute("tabindex", "0"); + DOM.queueUpdate(() => { + this.setItems(); + }); + } + /** + * Handles click events bubbling up + * + * @internal + */ + handleClick(e) { + if (e.defaultPrevented) { + return; + } + if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) { + return true; + } + const item = e.target; + if (!item.disabled) { + item.selected = !item.selected; + } + return; + } + /** + * Move focus to a tree item based on its offset from the provided item + */ + focusNextNode(delta, item) { + const visibleNodes = this.getVisibleNodes(); + if (!visibleNodes) { + return; + } + const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta]; + if (isHTMLElement(focusItem)) { + TreeItem.focusItem(focusItem); + } + } + /** + * checks if there are any nested tree items + */ + getValidFocusableItem() { + const treeItems = this.getVisibleNodes(); + let focusIndex = treeItems.findIndex(this.isSelectedElement); + if (focusIndex === -1) { + focusIndex = treeItems.findIndex(this.isFocusableElement); + } + if (focusIndex !== -1) { + return treeItems[focusIndex]; + } + return null; + } + /** + * checks if there are any nested tree items + */ + checkForNestedItems() { + return this.slottedTreeItems.some((node) => { + return isTreeItemElement(node) && node.querySelector("[role='treeitem']"); + }); + } + getVisibleNodes() { + return getDisplayedNodes(this, "[role='treeitem']") || []; + } + }; + __decorate([ + attr({ attribute: "render-collapsed-nodes" }) + ], TreeView.prototype, "renderCollapsedNodes", void 0); + __decorate([ + observable + ], TreeView.prototype, "currentSelected", void 0); + __decorate([ + observable + ], TreeView.prototype, "slottedTreeItems", void 0); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js + var init_tree_view2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/tree-view/index.js"() { + init_tree_view_template(); + init_tree_view(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js + var MatchMediaBehavior, MatchMediaStyleSheetBehavior, forcedColorsStylesheetBehavior, darkModeStylesheetBehavior, lightModeStylesheetBehavior; + var init_match_media_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/match-media-stylesheet-behavior.js"() { + MatchMediaBehavior = class { + /** + * + * @param query - The media query to operate from. + */ + constructor(query) { + this.listenerCache = /* @__PURE__ */ new WeakMap(); + this.query = query; + } + /** + * Binds the behavior to the element. + * @param source - The element for which the behavior is bound. + */ + bind(source) { + const { query } = this; + const listener = this.constructListener(source); + listener.bind(query)(); + query.addListener(listener); + this.listenerCache.set(source, listener); + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + */ + unbind(source) { + const listener = this.listenerCache.get(source); + if (listener) { + this.query.removeListener(listener); + this.listenerCache.delete(source); + } + } + }; + MatchMediaStyleSheetBehavior = class _MatchMediaStyleSheetBehavior extends MatchMediaBehavior { + /** + * Constructs a {@link MatchMediaStyleSheetBehavior} instance. + * @param query - The media query to operate from. + * @param styles - The styles to coordinate with the query. + */ + constructor(query, styles) { + super(query); + this.styles = styles; + } + /** + * Defines a function to construct {@link MatchMediaStyleSheetBehavior | MatchMediaStyleSheetBehaviors} for + * a provided query. + * @param query - The media query to operate from. + * + * @public + * @example + * + * ```ts + * import { css } from "@microsoft/fast-element"; + * import { MatchMediaStyleSheetBehavior } from "@microsoft/fast-foundation"; + * + * const landscapeBehavior = MatchMediaStyleSheetBehavior.with( + * window.matchMedia("(orientation: landscape)") + * ); + * const styles = css` + * :host { + * width: 200px; + * height: 400px; + * } + * ` + * .withBehaviors(landscapeBehavior(css` + * :host { + * width: 400px; + * height: 200px; + * } + * `)) + * ``` + */ + static with(query) { + return (styles) => { + return new _MatchMediaStyleSheetBehavior(query, styles); + }; + } + /** + * Constructs a match-media listener for a provided element. + * @param source - the element for which to attach or detach styles. + * @internal + */ + constructListener(source) { + let attached = false; + const styles = this.styles; + return function listener() { + const { matches: matches2 } = this; + if (matches2 && !attached) { + source.$fastController.addStyles(styles); + attached = matches2; + } else if (!matches2 && attached) { + source.$fastController.removeStyles(styles); + attached = matches2; + } + }; + } + /** + * Unbinds the behavior from the element. + * @param source - The element for which the behavior is unbinding. + * @internal + */ + unbind(source) { + super.unbind(source); + source.$fastController.removeStyles(this.styles); + } + }; + forcedColorsStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(forced-colors)")); + darkModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: dark)")); + lightModeStylesheetBehavior = MatchMediaStyleSheetBehavior.with(window.matchMedia("(prefers-color-scheme: light)")); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js + var init_property_stylesheet_behavior = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/property-stylesheet-behavior.js"() { + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js + var disabledCursor; + var init_disabled = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/disabled.js"() { + disabledCursor = "not-allowed"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js + function display(displayValue) { + return `${hidden}:host{display:${displayValue}}`; + } + var hidden; + var init_display = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/display.js"() { + hidden = `:host([hidden]){display:none}`; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js + var focusVisible; + var init_focus = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/focus.js"() { + init_dist2(); + focusVisible = canUseFocusVisible() ? "focus-visible" : "focus"; + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js + var init_style = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/style/index.js"() { + init_disabled(); + init_display(); + init_focus(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js + var init_utilities = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/utilities/index.js"() { + init_apply_mixins(); + init_composed_parent(); + init_match_media_stylesheet_behavior(); + init_property_stylesheet_behavior(); + init_style(); + init_direction(); + init_whitespace_filter(); + } + }); + + // node_modules/@microsoft/fast-foundation/dist/esm/index.js + var init_esm2 = __esm({ + "node_modules/@microsoft/fast-foundation/dist/esm/index.js"() { + init_accordion_item2(); + init_accordion2(); + init_anchor2(); + init_anchored_region2(); + init_avatar2(); + init_badge2(); + init_breadcrumb_item2(); + init_breadcrumb2(); + init_button2(); + init_calendar2(); + init_card2(); + init_checkbox2(); + init_combobox2(); + init_data_grid2(); + init_design_system2(); + init_design_token(); + init_di2(); + init_dialog2(); + init_disclosure2(); + init_divider2(); + init_flipper2(); + init_form_associated2(); + init_foundation_element2(); + init_listbox_option2(); + init_listbox2(); + init_picker2(); + init_menu_item2(); + init_menu2(); + init_number_field2(); + init_patterns(); + init_progress_ring(); + init_progress(); + init_radio_group2(); + init_radio2(); + init_horizontal_scroll2(); + init_search2(); + init_select2(); + init_skeleton2(); + init_slider_label2(); + init_slider2(); + init_switch2(); + init_tab_panel2(); + init_tab2(); + init_tabs2(); + init_text_area2(); + init_text_field2(); + init_toolbar2(); + init_tooltip2(); + init_tree_item2(); + init_tree_view2(); + init_utilities(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js + function provideVSCodeDesignSystem(element) { + return DesignSystem.getOrCreate(element).withPrefix("vscode"); + } + var init_vscode_design_system = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/vscode-design-system.js"() { + init_esm2(); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js + function initThemeChangeListener(tokenMappings2) { + window.addEventListener("load", () => { + const observer = new MutationObserver(() => { + applyCurrentTheme(tokenMappings2); + }); + observer.observe(document.body, { + attributes: true, + attributeFilter: ["class"] + }); + applyCurrentTheme(tokenMappings2); + }); + } + function applyCurrentTheme(tokenMappings2) { + const styles = getComputedStyle(document.body); + const body = document.querySelector("body"); + if (body) { + const themeKind = body.getAttribute("data-vscode-theme-kind"); + for (const [vscodeTokenName, toolkitToken] of tokenMappings2) { + let value = styles.getPropertyValue(vscodeTokenName).toString(); + if (themeKind === "vscode-high-contrast") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + value = "transparent"; + } + if (toolkitToken.name === "button-icon-hover-background") { + value = "transparent"; + } + } else if (themeKind === "vscode-high-contrast-light") { + if (value.length === 0 && toolkitToken.name.includes("background")) { + switch (toolkitToken.name) { + case "button-primary-hover-background": + value = "#0F4A85"; + break; + case "button-secondary-hover-background": + value = "transparent"; + break; + case "button-icon-hover-background": + value = "transparent"; + break; + } + } + } else { + if (toolkitToken.name === "contrast-active-border") { + value = "transparent"; + } + } + toolkitToken.setValueFor(body, value); + } + } + } + var init_applyTheme = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/theme/applyTheme.js"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js + function create2(name, vscodeThemeVar) { + const designToken = DesignToken.create(name); + if (vscodeThemeVar) { + if (vscodeThemeVar.includes("--fake-vscode-token")) { + const uniqueId2 = "id" + Math.random().toString(16).slice(2); + vscodeThemeVar = `${vscodeThemeVar}-${uniqueId2}`; + } + tokenMappings.set(vscodeThemeVar, designToken); + } + if (!isThemeListenerInitialized) { + initThemeChangeListener(tokenMappings); + isThemeListenerInitialized = true; + } + return designToken; + } + var tokenMappings, isThemeListenerInitialized; + var init_create = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/utilities/design-tokens/create.js"() { + init_esm2(); + init_applyTheme(); + tokenMappings = /* @__PURE__ */ new Map(); + isThemeListenerInitialized = false; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js + var background, borderWidth, contrastActiveBorder, contrastBorder, cornerRadius, cornerRadiusRound, designUnit, disabledOpacity, focusBorder, fontFamily, fontWeight, foreground, inputHeight, inputMinWidth, typeRampBaseFontSize, typeRampBaseLineHeight, typeRampMinus1FontSize, typeRampMinus1LineHeight, typeRampMinus2FontSize, typeRampMinus2LineHeight, typeRampPlus1FontSize, typeRampPlus1LineHeight, scrollbarWidth, scrollbarHeight, scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, badgeBackground, badgeForeground, buttonBorder, buttonIconBackground, buttonIconCornerRadius, buttonIconFocusBorderOffset, buttonIconHoverBackground, buttonIconPadding, buttonPrimaryBackground, buttonPrimaryForeground, buttonPrimaryHoverBackground, buttonSecondaryBackground, buttonSecondaryForeground, buttonSecondaryHoverBackground, buttonPaddingHorizontal, buttonPaddingVertical, checkboxBackground, checkboxBorder, checkboxCornerRadius, checkboxForeground, listActiveSelectionBackground, listActiveSelectionForeground, listHoverBackground, dividerBackground, dropdownBackground, dropdownBorder, dropdownForeground, dropdownListMaxHeight, inputBackground, inputForeground, inputPlaceholderForeground, linkActiveForeground, linkForeground, progressBackground, panelTabActiveBorder, panelTabActiveForeground, panelTabForeground, panelViewBackground, panelViewBorder, tagCornerRadius; + var init_design_tokens = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/design-tokens.js"() { + init_create(); + background = create2("background", "--vscode-editor-background").withDefault("#1e1e1e"); + borderWidth = create2("border-width").withDefault(1); + contrastActiveBorder = create2("contrast-active-border", "--vscode-contrastActiveBorder").withDefault("#f38518"); + contrastBorder = create2("contrast-border", "--vscode-contrastBorder").withDefault("#6fc3df"); + cornerRadius = create2("corner-radius").withDefault(0); + cornerRadiusRound = create2("corner-radius-round").withDefault(2); + designUnit = create2("design-unit").withDefault(4); + disabledOpacity = create2("disabled-opacity").withDefault(0.4); + focusBorder = create2("focus-border", "--vscode-focusBorder").withDefault("#007fd4"); + fontFamily = create2("font-family", "--vscode-font-family").withDefault("-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol"); + fontWeight = create2("font-weight", "--vscode-font-weight").withDefault("400"); + foreground = create2("foreground", "--vscode-foreground").withDefault("#cccccc"); + inputHeight = create2("input-height").withDefault("26"); + inputMinWidth = create2("input-min-width").withDefault("100px"); + typeRampBaseFontSize = create2("type-ramp-base-font-size", "--vscode-font-size").withDefault("13px"); + typeRampBaseLineHeight = create2("type-ramp-base-line-height").withDefault("normal"); + typeRampMinus1FontSize = create2("type-ramp-minus1-font-size").withDefault("11px"); + typeRampMinus1LineHeight = create2("type-ramp-minus1-line-height").withDefault("16px"); + typeRampMinus2FontSize = create2("type-ramp-minus2-font-size").withDefault("9px"); + typeRampMinus2LineHeight = create2("type-ramp-minus2-line-height").withDefault("16px"); + typeRampPlus1FontSize = create2("type-ramp-plus1-font-size").withDefault("16px"); + typeRampPlus1LineHeight = create2("type-ramp-plus1-line-height").withDefault("24px"); + scrollbarWidth = create2("scrollbarWidth").withDefault("10px"); + scrollbarHeight = create2("scrollbarHeight").withDefault("10px"); + scrollbarSliderBackground = create2("scrollbar-slider-background", "--vscode-scrollbarSlider-background").withDefault("#79797966"); + scrollbarSliderHoverBackground = create2("scrollbar-slider-hover-background", "--vscode-scrollbarSlider-hoverBackground").withDefault("#646464b3"); + scrollbarSliderActiveBackground = create2("scrollbar-slider-active-background", "--vscode-scrollbarSlider-activeBackground").withDefault("#bfbfbf66"); + badgeBackground = create2("badge-background", "--vscode-badge-background").withDefault("#4d4d4d"); + badgeForeground = create2("badge-foreground", "--vscode-badge-foreground").withDefault("#ffffff"); + buttonBorder = create2("button-border", "--vscode-button-border").withDefault("transparent"); + buttonIconBackground = create2("button-icon-background").withDefault("transparent"); + buttonIconCornerRadius = create2("button-icon-corner-radius").withDefault("5px"); + buttonIconFocusBorderOffset = create2("button-icon-outline-offset").withDefault(0); + buttonIconHoverBackground = create2("button-icon-hover-background", "--fake-vscode-token").withDefault("rgba(90, 93, 94, 0.31)"); + buttonIconPadding = create2("button-icon-padding").withDefault("3px"); + buttonPrimaryBackground = create2("button-primary-background", "--vscode-button-background").withDefault("#0e639c"); + buttonPrimaryForeground = create2("button-primary-foreground", "--vscode-button-foreground").withDefault("#ffffff"); + buttonPrimaryHoverBackground = create2("button-primary-hover-background", "--vscode-button-hoverBackground").withDefault("#1177bb"); + buttonSecondaryBackground = create2("button-secondary-background", "--vscode-button-secondaryBackground").withDefault("#3a3d41"); + buttonSecondaryForeground = create2("button-secondary-foreground", "--vscode-button-secondaryForeground").withDefault("#ffffff"); + buttonSecondaryHoverBackground = create2("button-secondary-hover-background", "--vscode-button-secondaryHoverBackground").withDefault("#45494e"); + buttonPaddingHorizontal = create2("button-padding-horizontal").withDefault("11px"); + buttonPaddingVertical = create2("button-padding-vertical").withDefault("4px"); + checkboxBackground = create2("checkbox-background", "--vscode-checkbox-background").withDefault("#3c3c3c"); + checkboxBorder = create2("checkbox-border", "--vscode-checkbox-border").withDefault("#3c3c3c"); + checkboxCornerRadius = create2("checkbox-corner-radius").withDefault(3); + checkboxForeground = create2("checkbox-foreground", "--vscode-checkbox-foreground").withDefault("#f0f0f0"); + listActiveSelectionBackground = create2("list-active-selection-background", "--vscode-list-activeSelectionBackground").withDefault("#094771"); + listActiveSelectionForeground = create2("list-active-selection-foreground", "--vscode-list-activeSelectionForeground").withDefault("#ffffff"); + listHoverBackground = create2("list-hover-background", "--vscode-list-hoverBackground").withDefault("#2a2d2e"); + dividerBackground = create2("divider-background", "--vscode-settings-dropdownListBorder").withDefault("#454545"); + dropdownBackground = create2("dropdown-background", "--vscode-dropdown-background").withDefault("#3c3c3c"); + dropdownBorder = create2("dropdown-border", "--vscode-dropdown-border").withDefault("#3c3c3c"); + dropdownForeground = create2("dropdown-foreground", "--vscode-dropdown-foreground").withDefault("#f0f0f0"); + dropdownListMaxHeight = create2("dropdown-list-max-height").withDefault("200px"); + inputBackground = create2("input-background", "--vscode-input-background").withDefault("#3c3c3c"); + inputForeground = create2("input-foreground", "--vscode-input-foreground").withDefault("#cccccc"); + inputPlaceholderForeground = create2("input-placeholder-foreground", "--vscode-input-placeholderForeground").withDefault("#cccccc"); + linkActiveForeground = create2("link-active-foreground", "--vscode-textLink-activeForeground").withDefault("#3794ff"); + linkForeground = create2("link-foreground", "--vscode-textLink-foreground").withDefault("#3794ff"); + progressBackground = create2("progress-background", "--vscode-progressBar-background").withDefault("#0e70c0"); + panelTabActiveBorder = create2("panel-tab-active-border", "--vscode-panelTitle-activeBorder").withDefault("#e7e7e7"); + panelTabActiveForeground = create2("panel-tab-active-foreground", "--vscode-panelTitle-activeForeground").withDefault("#e7e7e7"); + panelTabForeground = create2("panel-tab-foreground", "--vscode-panelTitle-inactiveForeground").withDefault("#e7e7e799"); + panelViewBackground = create2("panel-view-background", "--vscode-panel-background").withDefault("#1e1e1e"); + panelViewBorder = create2("panel-view-border", "--vscode-panel-border").withDefault("#80808059"); + tagCornerRadius = create2("tag-corner-radius").withDefault("2px"); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js + var badgeStyles; + var init_badge_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/badge.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + badgeStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + text-align: center; + } + .control { + align-items: center; + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: 11px; + box-sizing: border-box; + color: ${badgeForeground}; + display: flex; + height: calc(${designUnit} * 4px); + justify-content: center; + min-width: calc(${designUnit} * 4px + 2px); + min-height: calc(${designUnit} * 4px + 2px); + padding: 3px 6px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js + var Badge2, vsCodeBadge; + var init_badge3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/badge/index.js"() { + init_esm2(); + init_badge_styles(); + Badge2 = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.circular) { + this.circular = true; + } + } + }; + vsCodeBadge = Badge2.compose({ + baseName: "badge", + template: badgeTemplate, + styles: badgeStyles + }); + } + }); + + // node_modules/tslib/tslib.es6.mjs + function __decorate2(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + var init_tslib_es62 = __esm({ + "node_modules/tslib/tslib.es6.mjs"() { + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js + var BaseButtonStyles, PrimaryButtonStyles, SecondaryButtonStyles, IconButtonStyles, buttonStyles; + var init_button_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/button.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + BaseButtonStyles = css` + ${display("inline-flex")} :host { + outline: none; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${buttonPrimaryForeground}; + background: ${buttonPrimaryBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + fill: currentColor; + cursor: pointer; + } + .control { + background: transparent; + height: inherit; + flex-grow: 1; + box-sizing: border-box; + display: inline-flex; + justify-content: center; + align-items: center; + padding: ${buttonPaddingVertical} ${buttonPaddingHorizontal}; + white-space: wrap; + outline: none; + text-decoration: none; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + color: inherit; + border-radius: inherit; + fill: inherit; + cursor: inherit; + font-family: inherit; + } + :host(:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host(:active) { + background: ${buttonPrimaryBackground}; + } + .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + .control::-moz-focus-inner { + border: 0; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + background: ${buttonPrimaryBackground}; + cursor: ${disabledCursor}; + } + .content { + display: flex; + } + .start { + display: flex; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-end: 8px; + } +`; + PrimaryButtonStyles = css` + :host([appearance='primary']) { + background: ${buttonPrimaryBackground}; + color: ${buttonPrimaryForeground}; + } + :host([appearance='primary']:hover) { + background: ${buttonPrimaryHoverBackground}; + } + :host([appearance='primary']:active) .control:active { + background: ${buttonPrimaryBackground}; + } + :host([appearance='primary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='primary'][disabled]) { + background: ${buttonPrimaryBackground}; + } +`; + SecondaryButtonStyles = css` + :host([appearance='secondary']) { + background: ${buttonSecondaryBackground}; + color: ${buttonSecondaryForeground}; + } + :host([appearance='secondary']:hover) { + background: ${buttonSecondaryHoverBackground}; + } + :host([appearance='secondary']:active) .control:active { + background: ${buttonSecondaryBackground}; + } + :host([appearance='secondary']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: calc(${borderWidth} * 2px); + } + :host([appearance='secondary'][disabled]) { + background: ${buttonSecondaryBackground}; + } +`; + IconButtonStyles = css` + :host([appearance='icon']) { + background: ${buttonIconBackground}; + border-radius: ${buttonIconCornerRadius}; + color: ${foreground}; + } + :host([appearance='icon']:hover) { + background: ${buttonIconHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } + :host([appearance='icon']) .control { + padding: ${buttonIconPadding}; + border: none; + } + :host([appearance='icon']:active) .control:active { + background: ${buttonIconHoverBackground}; + } + :host([appearance='icon']) .control:${focusVisible} { + outline: calc(${borderWidth} * 1px) solid ${focusBorder}; + outline-offset: ${buttonIconFocusBorderOffset}; + } + :host([appearance='icon'][disabled]) { + background: ${buttonIconBackground}; + } +`; + buttonStyles = (context, definition) => css` + ${BaseButtonStyles} + ${PrimaryButtonStyles} + ${SecondaryButtonStyles} + ${IconButtonStyles} +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/button/index.js + var Button2, vsCodeButton; + var init_button3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/button/index.js"() { + init_tslib_es62(); + init_esm(); + init_esm2(); + init_button_styles(); + Button2 = class extends Button { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (!this.appearance) { + const appearanceValue = this.getAttribute("appearance"); + this.appearance = appearanceValue; + } + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "appearance" && newVal === "icon") { + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.ariaLabel = "Icon Button"; + } + } + if (attrName === "aria-label") { + this.ariaLabel = newVal; + } + if (attrName === "disabled") { + this.disabled = newVal !== null; + } + } + }; + __decorate2([ + attr + ], Button2.prototype, "appearance", void 0); + vsCodeButton = Button2.compose({ + baseName: "button", + template: buttonTemplate, + styles: buttonStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js + var checkboxStyles; + var init_checkbox_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/checkbox.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + checkboxStyles = (context, defintiion) => css` + ${display("inline-flex")} :host { + align-items: center; + outline: none; + margin: calc(${designUnit} * 1px) 0; + user-select: none; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control { + position: relative; + width: calc(${designUnit} * 4px + 2px); + height: calc(${designUnit} * 4px + 2px); + box-sizing: border-box; + border-radius: calc(${checkboxCornerRadius} * 1px); + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + background: ${checkboxBackground}; + outline: none; + cursor: pointer; + } + .label { + font-family: ${fontFamily}; + color: ${foreground}; + padding-inline-start: calc(${designUnit} * 2px + 2px); + margin-inline-end: calc(${designUnit} * 2px + 2px); + cursor: pointer; + } + .label__hidden { + display: none; + visibility: hidden; + } + .checked-indicator { + width: 100%; + height: 100%; + display: block; + fill: ${foreground}; + opacity: 0; + pointer-events: none; + } + .indeterminate-indicator { + border-radius: 2px; + background: ${foreground}; + position: absolute; + top: 50%; + left: 50%; + width: 50%; + height: 50%; + transform: translate(-50%, -50%); + opacity: 0; + } + :host(:enabled) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:enabled) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host(.disabled) .label, + :host(.readonly) .label, + :host(.readonly) .control, + :host(.disabled) .control { + cursor: ${disabledCursor}; + } + :host(.checked:not(.indeterminate)) .checked-indicator, + :host(.indeterminate) .indeterminate-indicator { + opacity: 1; + } + :host(.disabled) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js + var Checkbox2, vsCodeCheckbox; + var init_checkbox3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/checkbox/index.js"() { + init_esm2(); + init_checkbox_styles(); + Checkbox2 = class extends Checkbox { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Checkbox"); + } + } + }; + vsCodeCheckbox = Checkbox2.compose({ + baseName: "checkbox", + template: checkboxTemplate, + styles: checkboxStyles, + checkedIndicator: ` + + + + `, + indeterminateIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js + var dataGridStyles; + var init_data_grid_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid.styles.js"() { + init_esm(); + dataGridStyles = (context, definition) => css` + :host { + display: flex; + position: relative; + flex-direction: column; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js + var dataGridRowStyles; + var init_data_grid_row_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-row.styles.js"() { + init_esm(); + init_design_tokens(); + dataGridRowStyles = (context, definition) => css` + :host { + display: grid; + padding: calc((${designUnit} / 4) * 1px) 0; + box-sizing: border-box; + width: 100%; + background: transparent; + } + :host(.header) { + } + :host(.sticky-header) { + background: ${background}; + position: sticky; + top: 0; + } + :host(:hover) { + background: ${listHoverBackground}; + outline: 1px dotted ${contrastActiveBorder}; + outline-offset: -1px; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js + var dataGridCellStyles; + var init_data_grid_cell_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/data-grid-cell.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dataGridCellStyles = (context, definition) => css` + :host { + padding: calc(${designUnit} * 1px) calc(${designUnit} * 3px); + color: ${foreground}; + opacity: 1; + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + font-weight: 400; + border: solid calc(${borderWidth} * 1px) transparent; + border-radius: calc(${cornerRadius} * 1px); + white-space: wrap; + overflow-wrap: anywhere; + } + :host(.column-header) { + font-weight: 600; + } + :host(:${focusVisible}), + :host(:focus), + :host(:active) { + background: ${listActiveSelectionBackground}; + border: solid calc(${borderWidth} * 1px) ${focusBorder}; + color: ${listActiveSelectionForeground}; + outline: none; + } + :host(:${focusVisible}) ::slotted(*), + :host(:focus) ::slotted(*), + :host(:active) ::slotted(*) { + color: ${listActiveSelectionForeground} !important; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js + var DataGrid2, vsCodeDataGrid, DataGridRow2, vsCodeDataGridRow, DataGridCell2, vsCodeDataGridCell; + var init_data_grid3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/data-grid/index.js"() { + init_esm2(); + init_data_grid_styles(); + init_data_grid_row_styles(); + init_data_grid_cell_styles(); + DataGrid2 = class extends DataGrid { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Data Grid"); + } + } + }; + vsCodeDataGrid = DataGrid2.compose({ + baseName: "data-grid", + baseClass: DataGrid, + template: dataGridTemplate, + styles: dataGridStyles + }); + DataGridRow2 = class extends DataGridRow { + }; + vsCodeDataGridRow = DataGridRow2.compose({ + baseName: "data-grid-row", + baseClass: DataGridRow, + template: dataGridRowTemplate, + styles: dataGridRowStyles + }); + DataGridCell2 = class extends DataGridCell { + }; + vsCodeDataGridCell = DataGridCell2.compose({ + baseName: "data-grid-cell", + baseClass: DataGridCell, + template: dataGridCellTemplate, + styles: dataGridCellStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js + var dividerStyles; + var init_divider_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/divider.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dividerStyles = (context, definition) => css` + ${display("block")} :host { + border: none; + border-top: calc(${borderWidth} * 1px) solid ${dividerBackground}; + box-sizing: content-box; + height: 0; + margin: calc(${designUnit} * 1px) 0; + width: 100%; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js + var Divider2, vsCodeDivider; + var init_divider3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/divider/index.js"() { + init_esm2(); + init_divider_styles(); + Divider2 = class extends Divider { + }; + vsCodeDivider = Divider2.compose({ + baseName: "divider", + template: dividerTemplate, + styles: dividerStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js + var dropdownStyles; + var init_dropdown_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/dropdown.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + dropdownStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: ${dropdownBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + color: ${foreground}; + contain: contents; + font-family: ${fontFamily}; + height: calc(${inputHeight} * 1px); + position: relative; + user-select: none; + min-width: ${inputMinWidth}; + outline: none; + vertical-align: top; + } + .control { + align-items: center; + box-sizing: border-box; + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + cursor: pointer; + display: flex; + font-family: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + min-height: 100%; + padding: 2px 6px 2px 8px; + width: 100%; + } + .listbox { + background: ${dropdownBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + border-radius: calc(${cornerRadiusRound} * 1px); + box-sizing: border-box; + display: inline-flex; + flex-direction: column; + left: 0; + max-height: ${dropdownListMaxHeight}; + padding: 0; + overflow-y: auto; + position: absolute; + width: 100%; + z-index: 1; + } + .listbox[hidden] { + display: none; + } + :host(:${focusVisible}) .control { + border-color: ${focusBorder}; + } + :host(:not([disabled]):hover) { + background: ${dropdownBackground}; + border-color: ${dropdownBorder}; + } + :host(:${focusVisible}) ::slotted([aria-selected="true"][role="option"]:not([disabled])) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + cursor: ${disabledCursor}; + user-select: none; + } + :host([disabled]:hover) { + background: ${dropdownBackground}; + color: ${foreground}; + fill: currentcolor; + } + :host(:not([disabled])) .control:active { + border-color: ${focusBorder}; + } + :host(:empty) .listbox { + display: none; + } + :host([open]) .control { + border-color: ${focusBorder}; + } + :host([open][position='above']) .listbox { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + :host([open][position='below']) .listbox { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + :host([open][position='above']) .listbox { + bottom: calc(${inputHeight} * 1px); + } + :host([open][position='below']) .listbox { + top: calc(${inputHeight} * 1px); + } + .selected-value { + flex: 1 1 auto; + font-family: inherit; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + } + .indicator { + flex: 0 0 auto; + margin-inline-start: 1em; + } + slot[name='listbox'] { + display: none; + width: 100%; + } + :host([open]) slot[name='listbox'] { + display: flex; + position: absolute; + } + .end { + margin-inline-start: auto; + } + .start, + .end, + .indicator, + .select-indicator, + ::slotted(svg), + ::slotted(span) { + fill: currentcolor; + height: 1em; + min-height: calc(${designUnit} * 4px); + min-width: calc(${designUnit} * 4px); + width: 1em; + } + ::slotted([role='option']), + ::slotted(option) { + flex: 0 0 auto; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js + var Dropdown, vsCodeDropdown; + var init_dropdown = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/dropdown/index.js"() { + init_esm2(); + init_dropdown_styles(); + Dropdown = class extends Select { + }; + vsCodeDropdown = Dropdown.compose({ + baseName: "dropdown", + template: selectTemplate, + styles: dropdownStyles, + indicator: ` + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js + var linkStyles; + var init_link_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/link.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + linkStyles = (context, definition) => css` + ${display("inline-flex")} :host { + background: transparent; + box-sizing: border-box; + color: ${linkForeground}; + cursor: pointer; + fill: currentcolor; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + outline: none; + } + .control { + background: transparent; + border: calc(${borderWidth} * 1px) solid transparent; + border-radius: calc(${cornerRadius} * 1px); + box-sizing: border-box; + color: inherit; + cursor: inherit; + fill: inherit; + font-family: inherit; + height: inherit; + padding: 0; + outline: none; + text-decoration: none; + word-break: break-word; + } + .control::-moz-focus-inner { + border: 0; + } + :host(:hover) { + color: ${linkActiveForeground}; + } + :host(:hover) .content { + text-decoration: underline; + } + :host(:active) { + background: transparent; + color: ${linkActiveForeground}; + } + :host(:${focusVisible}) .control, + :host(:focus) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/link/index.js + var Link, vsCodeLink; + var init_link = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/link/index.js"() { + init_esm2(); + init_link_styles(); + Link = class extends Anchor { + }; + vsCodeLink = Link.compose({ + baseName: "link", + template: anchorTemplate, + styles: linkStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js + var optionStyles; + var init_option_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/option.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + optionStyles = (context, definition) => css` + ${display("inline-flex")} :host { + font-family: var(--body-font); + border-radius: ${cornerRadius}; + border: calc(${borderWidth} * 1px) solid transparent; + box-sizing: border-box; + color: ${foreground}; + cursor: pointer; + fill: currentcolor; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: 0; + outline: none; + overflow: hidden; + padding: 0 calc((${designUnit} / 2) * 1px) + calc((${designUnit} / 4) * 1px); + user-select: none; + white-space: nowrap; + } + :host(:${focusVisible}) { + border-color: ${focusBorder}; + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([aria-selected='true']) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:active) { + background: ${listActiveSelectionBackground}; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):hover) { + background: ${listActiveSelectionBackground}; + border: calc(${borderWidth} * 1px) solid transparent; + color: ${listActiveSelectionForeground}; + } + :host(:not([aria-selected='true']):active) { + background: ${listActiveSelectionBackground}; + color: ${foreground}; + } + :host([disabled]) { + cursor: ${disabledCursor}; + opacity: ${disabledOpacity}; + } + :host([disabled]:hover) { + background-color: inherit; + } + .content { + grid-column-start: 2; + justify-self: start; + overflow: hidden; + text-overflow: ellipsis; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/option/index.js + var Option2, vsCodeOption; + var init_option = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/option/index.js"() { + init_esm2(); + init_option_styles(); + Option2 = class extends ListboxOption { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Option"); + } + } + }; + vsCodeOption = Option2.compose({ + baseName: "option", + template: listboxOptionTemplate, + styles: optionStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js + var panelsStyles; + var init_panels_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panels.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelsStyles = (context, definition) => css` + ${display("grid")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + color: ${foreground}; + grid-template-columns: auto 1fr auto; + grid-template-rows: auto 1fr; + overflow-x: auto; + } + .tablist { + display: grid; + grid-template-rows: auto auto; + grid-template-columns: auto; + column-gap: calc(${designUnit} * 8px); + position: relative; + width: max-content; + align-self: end; + padding: calc(${designUnit} * 1px) calc(${designUnit} * 1px) 0; + box-sizing: border-box; + } + .start, + .end { + align-self: center; + } + .activeIndicator { + grid-row: 2; + grid-column: 1; + width: 100%; + height: calc((${designUnit} / 4) * 1px); + justify-self: center; + background: ${panelTabActiveForeground}; + margin: 0; + border-radius: calc(${cornerRadius} * 1px); + } + .activeIndicatorTransition { + transition: transform 0.01s linear; + } + .tabpanel { + grid-row: 2; + grid-column-start: 1; + grid-column-end: 4; + position: relative; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js + var panelTabStyles; + var init_panel_tab_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-tab.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelTabStyles = (context, definition) => css` + ${display("inline-flex")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + height: calc(${designUnit} * 7px); + padding: calc(${designUnit} * 1px) 0; + color: ${panelTabForeground}; + fill: currentcolor; + border-radius: calc(${cornerRadius} * 1px); + border: solid calc(${borderWidth} * 1px) transparent; + align-items: center; + justify-content: center; + grid-row: 1; + cursor: pointer; + } + :host(:hover) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:active) { + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:hover) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host([aria-selected='true']:active) { + background: transparent; + color: ${panelTabActiveForeground}; + fill: currentcolor; + } + :host(:${focusVisible}) { + outline: none; + border: solid calc(${borderWidth} * 1px) ${panelTabActiveBorder}; + } + :host(:focus) { + outline: none; + } + ::slotted(vscode-badge) { + margin-inline-start: calc(${designUnit} * 2px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js + var panelViewStyles; + var init_panel_view_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/panel-view.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + panelViewStyles = (context, definition) => css` + ${display("flex")} :host { + color: inherit; + background-color: transparent; + border: solid calc(${borderWidth} * 1px) transparent; + box-sizing: border-box; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: 10px calc((${designUnit} + 2) * 1px); + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js + var Panels, vsCodePanels, PanelTab, vsCodePanelTab, PanelView, vsCodePanelView; + var init_panels = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/panels/index.js"() { + init_esm2(); + init_panels_styles(); + init_panel_tab_styles(); + init_panel_view_styles(); + Panels = class extends Tabs { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.orientation) { + this.orientation = TabsOrientation.horizontal; + } + const ariaLabelValue = this.getAttribute("aria-label"); + if (!ariaLabelValue) { + this.setAttribute("aria-label", "Panels"); + } + } + }; + vsCodePanels = Panels.compose({ + baseName: "panels", + template: tabsTemplate, + styles: panelsStyles + }); + PanelTab = class extends Tab { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.disabled) { + this.disabled = false; + } + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } + } + }; + vsCodePanelTab = PanelTab.compose({ + baseName: "panel-tab", + template: tabTemplate, + styles: panelTabStyles + }); + PanelView = class extends TabPanel { + }; + vsCodePanelView = PanelView.compose({ + baseName: "panel-view", + template: tabPanelTemplate, + styles: panelViewStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js + var progressRingStyles; + var init_progress_ring_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/progress-ring.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + progressRingStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: center; + outline: none; + height: calc(${designUnit} * 7px); + width: calc(${designUnit} * 7px); + margin: 0; + } + .progress { + height: 100%; + width: 100%; + } + .background { + fill: none; + stroke: transparent; + stroke-width: calc(${designUnit} / 2 * 1px); + } + .indeterminate-indicator-1 { + fill: none; + stroke: ${progressBackground}; + stroke-width: calc(${designUnit} / 2 * 1px); + stroke-linecap: square; + transform-origin: 50% 50%; + transform: rotate(-90deg); + transition: all 0.2s ease-in-out; + animation: spin-infinite 2s linear infinite; + } + @keyframes spin-infinite { + 0% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(0deg); + } + 50% { + stroke-dasharray: 21.99px 21.99px; + transform: rotate(450deg); + } + 100% { + stroke-dasharray: 0.01px 43.97px; + transform: rotate(1080deg); + } + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js + var ProgressRing, vsCodeProgressRing; + var init_progress_ring2 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/progress-ring/index.js"() { + init_esm2(); + init_progress_ring_styles(); + ProgressRing = class extends BaseProgress { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.paused) { + this.paused = false; + } + this.setAttribute("aria-label", "Loading"); + this.setAttribute("aria-live", "assertive"); + this.setAttribute("role", "alert"); + } + /** + * Component lifecycle method that runs when an attribute of the + * element is changed. + * + * @param attrName - The attribute that was changed + * @param oldVal - The old value of the attribute + * @param newVal - The new value of the attribute + * + * @internal + */ + attributeChangedCallback(attrName, oldVal, newVal) { + if (attrName === "value") { + this.removeAttribute("value"); + } + } + }; + vsCodeProgressRing = ProgressRing.compose({ + baseName: "progress-ring", + template: progressRingTemplate, + styles: progressRingStyles, + indeterminateIndicator: ` + + + + + ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js + var radioGroupStyles; + var init_radio_group_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/radio-group.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioGroupStyles = (context, definition) => css` + ${display("flex")} :host { + align-items: flex-start; + margin: calc(${designUnit} * 1px) 0; + flex-direction: column; + } + .positioning-region { + display: flex; + flex-wrap: wrap; + } + :host([orientation='vertical']) .positioning-region { + flex-direction: column; + } + :host([orientation='horizontal']) .positioning-region { + flex-direction: row; + } + ::slotted([slot='label']) { + color: ${foreground}; + font-size: ${typeRampBaseFontSize}; + margin: calc(${designUnit} * 1px) 0; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js + var RadioGroup2, vsCodeRadioGroup; + var init_radio_group3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio-group/index.js"() { + init_dist2(); + init_esm2(); + init_radio_group_styles(); + RadioGroup2 = class extends RadioGroup { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + const label = this.querySelector("label"); + if (label) { + const id = "radio-group-" + Math.random().toString(16).slice(2); + label.setAttribute("id", id); + this.setAttribute("aria-labelledby", id); + } + } + }; + vsCodeRadioGroup = RadioGroup2.compose({ + baseName: "radio-group", + template: radioGroupTemplate, + styles: radioGroupStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js + var radioStyles; + var init_radio_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/radio.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + radioStyles = (context, definition) => css` + ${display("inline-flex")} :host { + align-items: center; + flex-direction: row; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin: calc(${designUnit} * 1px) 0; + outline: none; + position: relative; + transition: all 0.2s ease-in-out; + user-select: none; + } + .control { + background: ${checkboxBackground}; + border-radius: 999px; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + box-sizing: border-box; + cursor: pointer; + height: calc(${designUnit} * 4px); + position: relative; + outline: none; + width: calc(${designUnit} * 4px); + } + .label { + color: ${foreground}; + cursor: pointer; + font-family: ${fontFamily}; + margin-inline-end: calc(${designUnit} * 2px + 2px); + padding-inline-start: calc(${designUnit} * 2px + 2px); + } + .label__hidden { + display: none; + visibility: hidden; + } + .control, + .checked-indicator { + flex-shrink: 0; + } + .checked-indicator { + background: ${foreground}; + border-radius: 999px; + display: inline-block; + inset: calc(${designUnit} * 1px); + opacity: 0; + pointer-events: none; + position: absolute; + } + :host(:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border-color: ${checkboxBorder}; + } + :host(:not([disabled])) .control:active { + background: ${checkboxBackground}; + border-color: ${focusBorder}; + } + :host(:${focusVisible}) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked='true']) .control { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:hover { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${checkboxBorder}; + } + :host([aria-checked='true']:not([disabled])) .control:active { + background: ${checkboxBackground}; + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([aria-checked="true"]:${focusVisible}:not([disabled])) .control { + border: calc(${borderWidth} * 1px) solid ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([aria-checked='true']) .checked-indicator { + opacity: 1; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js + var Radio2, vsCodeRadio; + var init_radio3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/radio/index.js"() { + init_esm2(); + init_radio_styles(); + Radio2 = class extends Radio { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Radio"); + } + } + }; + vsCodeRadio = Radio2.compose({ + baseName: "radio", + template: radioTemplate, + styles: radioStyles, + checkedIndicator: ` +
+ ` + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js + var tagStyles; + var init_tag_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/tag.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + tagStyles = (context, definition) => css` + ${display("inline-block")} :host { + box-sizing: border-box; + font-family: ${fontFamily}; + font-size: ${typeRampMinus1FontSize}; + line-height: ${typeRampMinus1LineHeight}; + } + .control { + background-color: ${badgeBackground}; + border: calc(${borderWidth} * 1px) solid ${buttonBorder}; + border-radius: ${tagCornerRadius}; + color: ${badgeForeground}; + padding: calc(${designUnit} * 0.5px) calc(${designUnit} * 1px); + text-transform: uppercase; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js + var Tag, vsCodeTag; + var init_tag = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/tag/index.js"() { + init_esm2(); + init_tag_styles(); + Tag = class extends Badge { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.circular) { + this.circular = false; + } + } + }; + vsCodeTag = Tag.compose({ + baseName: "tag", + template: badgeTemplate, + styles: tagStyles + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js + var textAreaStyles; + var init_text_area_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/text-area.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textAreaStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .control { + box-sizing: border-box; + position: relative; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + font: inherit; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + padding: calc(${designUnit} * 2px + 1px); + width: 100%; + min-width: ${inputMinWidth}; + resize: none; + } + .control:hover:enabled { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + .control:active:enabled { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .control::-webkit-scrollbar { + width: ${scrollbarWidth}; + height: ${scrollbarHeight}; + } + .control::-webkit-scrollbar-corner { + background: ${inputBackground}; + } + .control::-webkit-scrollbar-thumb { + background: ${scrollbarSliderBackground}; + } + .control::-webkit-scrollbar-thumb:hover { + background: ${scrollbarSliderHoverBackground}; + } + .control::-webkit-scrollbar-thumb:active { + background: ${scrollbarSliderActiveBackground}; + } + :host(:focus-within:not([disabled])) .control { + border-color: ${focusBorder}; + } + :host([resize='both']) .control { + resize: both; + } + :host([resize='horizontal']) .control { + resize: horizontal; + } + :host([resize='vertical']) .control { + resize: vertical; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js + var TextArea2, vsCodeTextArea; + var init_text_area3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-area/index.js"() { + init_esm2(); + init_text_area_styles(); + TextArea2 = class extends TextArea { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text area"); + } + } + }; + vsCodeTextArea = TextArea2.compose({ + baseName: "text-area", + template: textAreaTemplate, + styles: textAreaStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js + var textFieldStyles; + var init_text_field_styles = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/text-field.styles.js"() { + init_esm(); + init_esm2(); + init_design_tokens(); + textFieldStyles = (context, definition) => css` + ${display("inline-block")} :host { + font-family: ${fontFamily}; + outline: none; + user-select: none; + } + .root { + box-sizing: border-box; + position: relative; + display: flex; + flex-direction: row; + color: ${inputForeground}; + background: ${inputBackground}; + border-radius: calc(${cornerRadiusRound} * 1px); + border: calc(${borderWidth} * 1px) solid ${dropdownBorder}; + height: calc(${inputHeight} * 1px); + min-width: ${inputMinWidth}; + } + .control { + -webkit-appearance: none; + font: inherit; + background: transparent; + border: 0; + color: inherit; + height: calc(100% - (${designUnit} * 1px)); + width: 100%; + margin-top: auto; + margin-bottom: auto; + border: none; + padding: 0 calc(${designUnit} * 2px + 1px); + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + } + .control:hover, + .control:${focusVisible}, + .control:disabled, + .control:active { + outline: none; + } + .label { + display: block; + color: ${foreground}; + cursor: pointer; + font-size: ${typeRampBaseFontSize}; + line-height: ${typeRampBaseLineHeight}; + margin-bottom: 2px; + } + .label__hidden { + display: none; + visibility: hidden; + } + .start, + .end { + display: flex; + margin: auto; + fill: currentcolor; + } + ::slotted(svg), + ::slotted(span) { + width: calc(${designUnit} * 4px); + height: calc(${designUnit} * 4px); + } + .start { + margin-inline-start: calc(${designUnit} * 2px); + } + .end { + margin-inline-end: calc(${designUnit} * 2px); + } + :host(:hover:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${dropdownBorder}; + } + :host(:active:not([disabled])) .root { + background: ${inputBackground}; + border-color: ${focusBorder}; + } + :host(:focus-within:not([disabled])) .root { + border-color: ${focusBorder}; + } + :host([disabled]) .label, + :host([readonly]) .label, + :host([readonly]) .control, + :host([disabled]) .control { + cursor: ${disabledCursor}; + } + :host([disabled]) { + opacity: ${disabledOpacity}; + } + :host([disabled]) .control { + border-color: ${dropdownBorder}; + } +`; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js + var TextField2, vsCodeTextField; + var init_text_field3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/text-field/index.js"() { + init_esm2(); + init_text_field_styles(); + TextField2 = class extends TextField { + /** + * Component lifecycle method that runs when the component is inserted + * into the DOM. + * + * @internal + */ + connectedCallback() { + super.connectedCallback(); + if (this.textContent) { + this.setAttribute("aria-label", this.textContent); + } else { + this.setAttribute("aria-label", "Text field"); + } + } + }; + vsCodeTextField = TextField2.compose({ + baseName: "text-field", + template: textFieldTemplate, + styles: textFieldStyles, + shadowOptions: { + delegatesFocus: true + } + }); + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js + var allComponents; + var init_custom_elements = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/custom-elements.js"() { + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + allComponents = { + vsCodeBadge, + vsCodeButton, + vsCodeCheckbox, + vsCodeDataGrid, + vsCodeDataGridCell, + vsCodeDataGridRow, + vsCodeDivider, + vsCodeDropdown, + vsCodeLink, + vsCodeOption, + vsCodePanels, + vsCodePanelTab, + vsCodePanelView, + vsCodeProgressRing, + vsCodeRadioGroup, + vsCodeRadio, + vsCodeTag, + vsCodeTextArea, + vsCodeTextField, + register(container, ...rest) { + if (!container) { + return; + } + for (const key in this) { + if (key === "register") { + continue; + } + this[key]().register(container, ...rest); + } + } + }; + } + }); + + // node_modules/@vscode/webview-ui-toolkit/dist/index.js + var dist_exports = {}; + __export(dist_exports, { + Badge: () => Badge2, + Button: () => Button2, + Checkbox: () => Checkbox2, + DataGrid: () => DataGrid2, + DataGridCell: () => DataGridCell2, + DataGridCellTypes: () => DataGridCellTypes, + DataGridRow: () => DataGridRow2, + DataGridRowTypes: () => DataGridRowTypes, + Divider: () => Divider2, + DividerRole: () => DividerRole, + Dropdown: () => Dropdown, + DropdownPosition: () => SelectPosition, + GenerateHeaderOptions: () => GenerateHeaderOptions, + Link: () => Link, + Option: () => Option2, + PanelTab: () => PanelTab, + PanelView: () => PanelView, + Panels: () => Panels, + ProgressRing: () => ProgressRing, + Radio: () => Radio2, + RadioGroup: () => RadioGroup2, + RadioGroupOrientation: () => Orientation, + Tag: () => Tag, + TextArea: () => TextArea2, + TextAreaResize: () => TextAreaResize, + TextField: () => TextField2, + TextFieldType: () => TextFieldType, + allComponents: () => allComponents, + provideVSCodeDesignSystem: () => provideVSCodeDesignSystem, + vsCodeBadge: () => vsCodeBadge, + vsCodeButton: () => vsCodeButton, + vsCodeCheckbox: () => vsCodeCheckbox, + vsCodeDataGrid: () => vsCodeDataGrid, + vsCodeDataGridCell: () => vsCodeDataGridCell, + vsCodeDataGridRow: () => vsCodeDataGridRow, + vsCodeDivider: () => vsCodeDivider, + vsCodeDropdown: () => vsCodeDropdown, + vsCodeLink: () => vsCodeLink, + vsCodeOption: () => vsCodeOption, + vsCodePanelTab: () => vsCodePanelTab, + vsCodePanelView: () => vsCodePanelView, + vsCodePanels: () => vsCodePanels, + vsCodeProgressRing: () => vsCodeProgressRing, + vsCodeRadio: () => vsCodeRadio, + vsCodeRadioGroup: () => vsCodeRadioGroup, + vsCodeTag: () => vsCodeTag, + vsCodeTextArea: () => vsCodeTextArea, + vsCodeTextField: () => vsCodeTextField + }); + var init_dist3 = __esm({ + "node_modules/@vscode/webview-ui-toolkit/dist/index.js"() { + init_vscode_design_system(); + init_custom_elements(); + init_badge3(); + init_button3(); + init_checkbox3(); + init_data_grid3(); + init_divider3(); + init_dropdown(); + init_link(); + init_option(); + init_panels(); + init_progress_ring2(); + init_radio_group3(); + init_radio3(); + init_tag(); + init_text_area3(); + init_text_field3(); + } + }); + + // src/webview/shared/buttonConfig.ts + var BUTTONS = { + "btn-refresh": { + id: "btn-refresh", + label: "\u{1F504} Refresh", + appearance: "primary" + }, + "btn-details": { + id: "btn-details", + label: "\u{1F916} Details" + }, + "btn-chart": { + id: "btn-chart", + label: "\u{1F4C8} Chart" + }, + "btn-usage": { + id: "btn-usage", + label: "\u{1F4CA} Usage Analysis" + }, + "btn-diagnostics": { + id: "btn-diagnostics", + label: "\u{1F50D} Diagnostics" + }, + "btn-maturity": { + id: "btn-maturity", + label: "\u{1F3AF} Fluency Score" + }, + "btn-dashboard": { + id: "btn-dashboard", + label: "\u{1F4CA} Team Dashboard" + }, + "btn-level-viewer": { + id: "btn-level-viewer", + label: "\u{1F50D} Level Viewer" + }, + "btn-environmental": { + id: "btn-environmental", + label: "\u{1F33F} Environmental Impact" + } + }; + function buttonHtml(id) { + const config = BUTTONS[id]; + const appearance = config.appearance ? ` appearance="${config.appearance}"` : ""; + return `${config.label}`; + } + + // src/webview/shared/theme.css + var theme_default = '/**\n * Shared theme variables for all webview panels\n * Uses VS Code theme tokens for automatic light/dark theme support\n */\n\n:root {\n /* VS Code base colors */\n --bg-primary: var(--vscode-editor-background);\n --bg-secondary: var(--vscode-sideBar-background);\n --bg-tertiary: var(--vscode-editorWidget-background);\n --text-primary: var(--vscode-editor-foreground);\n --text-secondary: var(--vscode-descriptionForeground);\n --text-muted: var(--vscode-disabledForeground);\n --border-color: var(--vscode-panel-border);\n --border-subtle: var(--vscode-widget-border);\n \n /* Button colors */\n --button-bg: var(--vscode-button-background);\n --button-fg: var(--vscode-button-foreground);\n --button-hover-bg: var(--vscode-button-hoverBackground);\n --button-secondary-bg: var(--vscode-button-secondaryBackground);\n --button-secondary-fg: var(--vscode-button-secondaryForeground);\n --button-secondary-hover-bg: var(--vscode-button-secondaryHoverBackground);\n \n /* Input colors */\n --input-bg: var(--vscode-input-background);\n --input-fg: var(--vscode-input-foreground);\n --input-border: var(--vscode-input-border);\n \n /* List/card colors */\n --list-hover-bg: var(--vscode-list-hoverBackground);\n --list-active-bg: var(--vscode-list-activeSelectionBackground);\n --list-active-fg: var(--vscode-list-activeSelectionForeground);\n --list-inactive-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Alternating row colors for better readability */\n --row-alternate-bg: var(--vscode-list-inactiveSelectionBackground);\n \n /* Badge colors */\n --badge-bg: var(--vscode-badge-background);\n --badge-fg: var(--vscode-badge-foreground);\n \n /* Focus colors */\n --focus-border: var(--vscode-focusBorder);\n \n /* Link colors */\n --link-color: var(--vscode-textLink-foreground);\n --link-hover-color: var(--vscode-textLink-activeForeground);\n \n /* Status colors */\n --error-fg: var(--vscode-errorForeground);\n --warning-fg: var(--vscode-editorWarning-foreground);\n --success-fg: var(--vscode-terminal-ansiGreen);\n \n /* Shadow for cards */\n --shadow-color: rgb(0, 0, 0, 0.16);\n --shadow-hover-color: rgb(0, 0, 0, 0.24);\n}\n\n/* Light theme adjustments */\nbody[data-vscode-theme-kind="vscode-light"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --shadow-color: rgb(0, 0, 0, 0.08);\n --shadow-hover-color: rgb(0, 0, 0, 0.12);\n}\n\n/* High contrast mode adjustments */\nbody[data-vscode-theme-kind="vscode-high-contrast"],\nbody[data-vscode-theme-kind="vscode-high-contrast-light"] {\n --border-color: var(--vscode-contrastBorder);\n --border-subtle: var(--vscode-contrastBorder);\n}\n'; + + // src/webview/maturity/styles.css + var styles_default = `* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + background: var(--bg-primary); + color: var(--text-primary); + padding: 16px; + line-height: 1.5; + min-width: 320px; +} + +.container { + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: 10px; + padding: 16px; + box-shadow: 0 4px 10px var(--shadow-color); + max-width: 1200px; + margin: 0 auto; +} + +.header { + display: flex; + justify-content: space-between; + align-items: center; + gap: 12px; + margin-bottom: 14px; + padding-bottom: 4px; +} + +.header-left { + display: flex; + align-items: center; + gap: 8px; +} + +.header-icon { + font-size: 20px; +} + +.header-title { + font-size: 16px; + font-weight: 700; + color: var(--text-primary); + letter-spacing: 0.2px; +} + +.button-row { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +/* Overall stage banner */ +.stage-banner { + background: var(--bg-tertiary); + border: 1px solid var(--border-color); + border-radius: 10px; + padding: 20px 24px; + margin-bottom: 16px; + text-align: center; +} + +.stage-banner-label { + font-size: 12px; + color: var(--text-secondary); + text-transform: uppercase; + letter-spacing: 1.5px; + margin-bottom: 6px; +} + +.stage-banner-title { + font-size: 24px; + font-weight: 800; + margin-bottom: 4px; +} + +.stage-banner-subtitle { + font-size: 13px; + color: var(--text-secondary); +} + +/* Stage accent colors \u2014 dark theme defaults */ +.stage-1 { color: #93c5fd; } +.stage-2 { color: #6ee7b7; } +.stage-3 { color: #3b82f6; } +.stage-4 { color: #10b981; } + +/* Light theme: darken pale stage colors for readable contrast */ +body[data-vscode-theme-kind="vscode-light"] .stage-1, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .stage-1 { color: #1d6fa4 !important; } +body[data-vscode-theme-kind="vscode-light"] .stage-2, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .stage-2 { color: #059669 !important; } +body[data-vscode-theme-kind="vscode-light"] .stage-3, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .stage-3 { color: #2563eb !important; } +body[data-vscode-theme-kind="vscode-light"] .stage-4, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .stage-4 { color: #059669 !important; } + +/* Radar / spider chart container */ +.radar-wrapper { + display: flex; + gap: 20px; + margin-bottom: 20px; + align-items: flex-start; +} + +.radar-container { + flex: 1; + display: flex; + justify-content: center; +} + +.radar-svg { + max-width: 650px; + width: 100%; + height: auto; +} + +/* SVG radar chart elements \u2014 use CSS fill/stroke so theme variables apply */ +.radar-svg .radar-label { + fill: var(--text-primary); +} + +.radar-svg .radar-ring-label { + fill: var(--text-muted); +} + +.radar-svg .radar-grid { + stroke: var(--border-subtle); +} + +.radar-svg .radar-dot { + stroke: var(--bg-primary); +} + +/* Legend panel */ +.legend-panel { + background: var(--bg-tertiary); + border: 1px solid var(--border-subtle); + border-radius: 8px; + padding: 16px; + min-width: 280px; + max-width: 320px; + flex-shrink: 0; +} + +.legend-title { + font-size: 14px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 14px; + padding-bottom: 10px; + border-bottom: 1px solid var(--border-subtle); +} + +.legend-item { + display: flex; + gap: 12px; + margin-bottom: 14px; + align-items: flex-start; +} + +.legend-item:last-child { + margin-bottom: 0; +} + +.legend-dot { + width: 14px; + height: 14px; + border-radius: 50%; + flex-shrink: 0; + margin-top: 2px; + border: 2px solid var(--bg-primary); +} + +.stage-1-dot { background: #93c5fd; } +.stage-2-dot { background: #6ee7b7; } +.stage-3-dot { background: #3b82f6; } +.stage-4-dot { background: #10b981; } + +.legend-content { + flex: 1; +} + +.legend-label { + font-size: 12px; + font-weight: 600; + color: var(--text-primary); + margin-bottom: 2px; +} + +.legend-desc { + font-size: 11px; + color: var(--text-muted); + line-height: 1.4; +} + +/* Category cards grid */ +.category-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); + gap: 14px; + margin-bottom: 16px; +} + +.category-card { + background: var(--bg-tertiary); + border: 1px solid var(--border-subtle); + border-radius: 8px; + padding: 14px; + box-shadow: 0 2px 6px var(--shadow-color); +} + +.category-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; +} + +.category-name { + font-size: 14px; + font-weight: 700; + color: var(--text-primary); +} + +.category-stage-badge { + font-size: 11px; + font-weight: 700; + padding: 3px 10px; + border-radius: 12px; + letter-spacing: 0.5px; +} + +/* Dark theme badge backgrounds */ +.badge-1 { + background: rgba(147, 197, 253, 0.15); + color: #93c5fd; + border: 1px solid rgba(147, 197, 253, 0.4); +} + +.badge-2 { + background: rgba(110, 231, 183, 0.15); + color: #6ee7b7; + border: 1px solid rgba(110, 231, 183, 0.4); +} + +.badge-3 { + background: rgba(59, 130, 246, 0.15); + color: #3b82f6; + border: 1px solid rgba(59, 130, 246, 0.4); +} + +.badge-4 { + background: rgba(16, 185, 129, 0.15); + color: #10b981; + border: 1px solid rgba(16, 185, 129, 0.4); +} + +/* Light theme badge overrides \u2014 use darker text for contrast */ +body[data-vscode-theme-kind="vscode-light"] .badge-1, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .badge-1 { color: #1d6fa4; } +body[data-vscode-theme-kind="vscode-light"] .badge-2, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .badge-2 { color: #059669; } +body[data-vscode-theme-kind="vscode-light"] .badge-3, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .badge-3 { color: #2563eb; } +body[data-vscode-theme-kind="vscode-light"] .badge-4, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .badge-4 { color: #059669; } + +.category-stage-label { + font-size: 11px; + color: var(--text-muted); + margin-bottom: 10px; +} + +/* Progress bar for category */ +.category-progress { + background: var(--row-alternate-bg); + height: 6px; + border-radius: 3px; + overflow: hidden; + margin-bottom: 12px; +} + +.category-progress-fill { + height: 100%; + border-radius: 3px; + transition: width 0.4s ease; +} + +/* Evidence list */ +.evidence-list { + list-style: none; + padding: 0; +} + +.evidence-item { + display: flex; + align-items: flex-start; + gap: 8px; + padding: 4px 0; + font-size: 12px; + color: var(--text-secondary); +} + +.evidence-icon { + flex-shrink: 0; + width: 16px; + text-align: center; +} + +/* Tips section */ +.tips-section { + background: var(--bg-secondary); + border: 1px solid var(--border-subtle); + border-radius: 8px; + padding: 14px; + margin-bottom: 16px; +} + +.tips-title { + font-size: 14px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 10px; + display: flex; + align-items: center; + gap: 6px; +} + +.tip-item { + background: var(--list-hover-bg); + border: 1px solid var(--border-subtle); + border-radius: 6px; + padding: 10px 12px; + margin-bottom: 8px; + font-size: 12px; + color: var(--text-primary); +} + +.tip-item strong { + color: var(--link-color); +} + +.tip-item a { + color: var(--link-color); + text-decoration: none; + border-bottom: 1px solid transparent; + transition: border-color 0.2s ease; +} + +.tip-item a:hover { + border-bottom-color: var(--link-color); +} + +/* MCP Discovery Button */ +.mcp-discover-btn { + width: 100%; + background: var(--button-bg); + border: 1px solid var(--button-bg); + color: var(--button-fg); + padding: 10px 14px; + border-radius: 6px; + font-size: 12px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; + display: flex; + align-items: center; + justify-content: center; + gap: 6px; +} + +.mcp-discover-btn:hover { + background: var(--button-hover-bg); + transform: translateY(-1px); + box-shadow: 0 4px 8px var(--shadow-color); +} + +.mcp-discover-btn:active { + transform: translateY(0); +} + +.dismiss-tips-btn { + background: transparent; + border: 1px solid var(--border-subtle); + color: var(--text-muted); + padding: 2px 6px; + border-radius: 4px; + font-size: 11px; + cursor: pointer; + transition: all 0.2s ease; + line-height: 1; +} + +.dismiss-tips-btn:hover { + background: var(--list-hover-bg); + border-color: var(--border-color); + color: var(--text-secondary); +} + +.dismiss-tips-btn:active { + transform: scale(0.95); +} + +.info-box { + background: var(--bg-tertiary); + border: 1px solid var(--border-subtle); + border-radius: 6px; + padding: 12px; + margin-bottom: 16px; + font-size: 12px; + color: var(--text-secondary); +} + +.info-box-title { + font-weight: 600; + color: var(--text-primary); + margin-bottom: 6px; +} + +.footer { + margin-top: 6px; + padding-top: 12px; + border-top: 1px solid var(--border-subtle); + font-size: 11px; + color: var(--text-muted); + display: flex; + justify-content: space-between; + align-items: center; + gap: 16px; +} + +.footer-info { + flex: 1; +} + +.reset-tips-btn { + display: inline-block; + padding: 4px 10px; + background: var(--button-secondary-bg); + border: 1px solid var(--border-color); + color: var(--button-secondary-fg); + border-radius: 4px; + font-size: 10px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; + white-space: nowrap; + vertical-align: middle; +} + +.reset-tips-btn:hover { + background: var(--button-secondary-hover-bg); + transform: translateY(-1px); + box-shadow: 0 2px 6px var(--shadow-color); +} + +.reset-tips-btn:active { + transform: translateY(0); +} + +.inline-action-btn { + display: inline-block; + padding: 2px 8px; + background: var(--button-secondary-bg); + border: 1px solid var(--border-color); + color: var(--button-secondary-fg); + border-radius: 4px; + font-size: 11px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; + white-space: nowrap; + vertical-align: middle; +} + +.inline-action-btn:hover { + background: var(--button-secondary-hover-bg); + transform: translateY(-1px); + box-shadow: 0 2px 6px var(--shadow-color); +} + +.inline-action-btn:active { + transform: translateY(0); +} + +/* Beta warning footer */ +.beta-footer { + display: flex; + align-items: center; + gap: 10px; + margin-top: 12px; + padding: 12px 14px; + background: rgba(245, 158, 11, 0.1); + border: 1px solid rgba(245, 158, 11, 0.4); + border-radius: 6px; + font-size: 12px; + color: var(--warning-fg); +} + +/* Share to social media section */ +.share-section { + background: var(--bg-tertiary); + border: 1px solid var(--border-color); + border-radius: 8px; + padding: 18px; + margin-top: 16px; + margin-bottom: 16px; +} + +.share-header { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 8px; +} + +.share-icon { + font-size: 20px; +} + +.share-title { + font-size: 16px; + font-weight: 700; + color: var(--text-primary); +} + +.share-description { + font-size: 12px; + color: var(--text-secondary); + margin-bottom: 14px; + line-height: 1.5; +} + +.share-buttons { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 10px; +} + +.share-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 12px 16px; + border-radius: 6px; + font-size: 13px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; + border: 1px solid; + background: var(--button-secondary-bg); +} + +.share-btn-icon { + font-size: 16px; + flex-shrink: 0; +} + +.share-btn-linkedin { + color: #0a66c2; + border-color: rgba(10, 102, 194, 0.5); +} + +.share-btn-linkedin:hover { + background: rgba(10, 102, 194, 0.12); + border-color: #0a66c2; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(10, 102, 194, 0.25); +} + +.share-btn-bluesky { + color: #1285fe; + border-color: rgba(18, 133, 254, 0.5); +} + +.share-btn-bluesky:hover { + background: rgba(18, 133, 254, 0.12); + border-color: #1285fe; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(18, 133, 254, 0.25); +} + +.share-btn-mastodon { + color: #6364ff; + border-color: rgba(99, 100, 255, 0.5); +} + +.share-btn-mastodon:hover { + background: rgba(99, 100, 255, 0.12); + border-color: #6364ff; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(99, 100, 255, 0.25); +} + +.share-btn-download { + color: #10b981; + border-color: rgba(16, 185, 129, 0.5); +} + +.share-btn-download:hover { + background: rgba(16, 185, 129, 0.12); + border-color: #10b981; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(16, 185, 129, 0.25); +} + +/* Light theme overrides for share button text colors */ +body[data-vscode-theme-kind="vscode-light"] .share-btn-linkedin, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .share-btn-linkedin { color: #0a66c2; } +body[data-vscode-theme-kind="vscode-light"] .share-btn-bluesky, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .share-btn-bluesky { color: #0369a1; } +body[data-vscode-theme-kind="vscode-light"] .share-btn-mastodon, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .share-btn-mastodon { color: #4f46e5; } +body[data-vscode-theme-kind="vscode-light"] .share-btn-download, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .share-btn-download { color: #059669; } + +.export-dropdown-container { + position: relative; +} + +.dropdown-arrow { + font-size: 10px; + margin-left: 4px; + transition: transform 0.2s ease; +} + +.export-dropdown-menu { + position: absolute; + top: 100%; + left: 0; + right: 0; + margin-top: 4px; + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: 6px; + box-shadow: 0 4px 12px var(--shadow-color); + z-index: 1000; + overflow: hidden; +} + +.export-menu-item { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 12px 16px; + border: none; + background: transparent; + color: var(--text-primary); + font-size: 13px; + font-weight: 600; + cursor: pointer; + transition: background 0.2s ease; + text-align: left; +} + +.export-menu-item:hover { + background: var(--list-hover-bg); +} + +.export-menu-item:active { + background: var(--list-active-bg); +} + +.export-menu-icon { + font-size: 16px; + flex-shrink: 0; +} + +.share-btn:active { + transform: translateY(0); +} + +.beta-footer-icon { + flex-shrink: 0; + font-size: 16px; +} + +.beta-footer-content { + flex: 1; + line-height: 1.5; +} + +.beta-link { + color: var(--warning-fg); + text-decoration: underline; +} + +.beta-link:hover { + color: var(--warning-fg); + opacity: 0.8; +} + +.share-issue-btn { + flex-shrink: 0; + background: rgba(245, 158, 11, 0.1); + border: 1px solid var(--warning-fg); + color: var(--warning-fg); + padding: 6px 14px; + border-radius: 6px; + font-size: 12px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; + white-space: nowrap; +} + +.share-issue-btn:hover { + background: rgba(245, 158, 11, 0.2); + transform: translateY(-1px); + box-shadow: 0 4px 8px rgba(245, 158, 11, 0.2); +} + +.share-issue-btn:active { + transform: translateY(0); +} + +@media (width <= 768px) { + .category-grid { + grid-template-columns: 1fr; + } + + .radar-wrapper { + flex-direction: column; + } + + .legend-panel { + max-width: 100%; + min-width: 0; + } + + /* Allow chart to be larger on small screens since legend is stacked below */ + .radar-svg { + max-width: 100%; + } +} + +/* Demo mode controls */ +.demo-panel { + background: var(--bg-tertiary); + border: 1px solid var(--border-color); + border-radius: 8px; + padding: 14px; + margin-bottom: 16px; +} + +.demo-panel-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; + padding-bottom: 10px; + border-bottom: 1px solid var(--border-subtle); +} + +.demo-panel-header.demo-collapsed { + margin-bottom: 0; + padding-bottom: 0; + border-bottom: none; +} + +.demo-panel-title { + font-size: 13px; + font-weight: 700; + color: var(--link-color); + display: flex; + align-items: center; + gap: 8px; +} + +.demo-expand-btn { + background: transparent; + border: none; + color: var(--link-color); + font-size: 12px; + cursor: pointer; + padding: 2px 4px; + transition: transform 0.2s ease; + line-height: 1; +} + +.demo-expand-btn:hover { + color: var(--link-hover-color); + transform: scale(1.1); +} + +.demo-hidden { + display: none !important; +} + +.demo-panel-actions { + display: flex; + gap: 8px; +} + +.demo-btn { + padding: 4px 12px; + border-radius: 4px; + font-size: 11px; + font-weight: 600; + cursor: pointer; + border: 1px solid; + transition: all 0.2s ease; +} + +.demo-btn-toggle { + background: var(--button-bg); + border-color: var(--button-bg); + color: var(--button-fg); +} + +.demo-btn-toggle:hover { + background: var(--button-hover-bg); +} + +.demo-btn-reset { + background: transparent; + border-color: var(--border-subtle); + color: var(--text-muted); +} + +.demo-btn-reset:hover { + background: var(--list-hover-bg); + border-color: var(--border-color); + color: var(--text-secondary); +} + +.demo-sliders { + display: flex; + flex-direction: column; + gap: 8px; +} + +.demo-sliders.demo-disabled { + opacity: 0.45; + pointer-events: none; +} + +.demo-slider-row { + display: flex; + align-items: center; + gap: 12px; +} + +.demo-slider-label { + font-size: 12px; + color: var(--text-secondary); + min-width: 160px; + flex-shrink: 0; +} + +.demo-step-group { + display: flex; + gap: 0; + border-radius: 6px; + overflow: hidden; + border: 1px solid var(--border-subtle); +} + +.demo-step-btn { + width: 36px; + height: 28px; + border: none; + background: var(--bg-secondary); + color: var(--text-muted); + font-size: 12px; + font-weight: 700; + cursor: pointer; + transition: all 0.15s ease; + border-right: 1px solid var(--border-subtle); +} + +.demo-step-btn:last-child { + border-right: none; +} + +.demo-step-btn:hover { + background: var(--list-hover-bg); + color: var(--text-secondary); +} + +.demo-step-active.demo-step-1 { background: rgba(147, 197, 253, 0.2); color: #93c5fd; } +.demo-step-active.demo-step-2 { background: rgba(110, 231, 183, 0.2); color: #6ee7b7; } +.demo-step-active.demo-step-3 { background: rgba(59, 130, 246, 0.2); color: #3b82f6; } +.demo-step-active.demo-step-4 { background: rgba(16, 185, 129, 0.2); color: #10b981; } + +body[data-vscode-theme-kind="vscode-light"] .demo-step-active.demo-step-1, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .demo-step-active.demo-step-1 { color: #1d6fa4; } +body[data-vscode-theme-kind="vscode-light"] .demo-step-active.demo-step-2, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .demo-step-active.demo-step-2 { color: #059669; } +body[data-vscode-theme-kind="vscode-light"] .demo-step-active.demo-step-3, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .demo-step-active.demo-step-3 { color: #2563eb; } +body[data-vscode-theme-kind="vscode-light"] .demo-step-active.demo-step-4, +body[data-vscode-theme-kind="vscode-high-contrast-light"] .demo-step-active.demo-step-4 { color: #059669; } + +.demo-slider-value { + font-size: 11px; + font-weight: 700; + padding: 2px 8px; + border-radius: 10px; + min-width: 180px; + text-align: center; + flex-shrink: 0; +} + +/* Demo mode card highlight */ +.demo-card-highlight { + border-color: var(--border-color) !important; + box-shadow: 0 0 0 1px var(--focus-border), 0 2px 8px var(--shadow-color) !important; +} + +.demo-card-description { + font-size: 12px; + color: var(--text-secondary); + margin-bottom: 10px; + font-style: italic; +} + +.demo-section-label { + font-size: 11px; + font-weight: 600; + color: var(--text-primary); + margin-bottom: 6px; +} + +`; + + // src/webview/maturity/main.ts + var vscode = acquireVsCodeApi(); + var initialData = window.__INITIAL_MATURITY__; + var demoModeActive = false; + var demoStageOverrides = []; + var demoPanelExpanded = false; + var STAGE_LABELS = { + 1: "Stage 1: Copilot Skeptic", + 2: "Stage 2: Copilot Explorer", + 3: "Stage 3: Copilot Collaborator", + 4: "Stage 4: Copilot Strategist" + }; + var STAGE_DESCRIPTIONS = { + 1: "Rarely uses Copilot or uses only basic features", + 2: "Exploring Copilot capabilities with occasional use", + 3: "Regular, purposeful use across multiple features", + 4: "Strategic, advanced use leveraging the full Copilot ecosystem" + }; + function renderRadarChart(categories) { + const cx = 325, cy = 325, maxR = 150; + const n = categories.length; + const angleStep = 2 * Math.PI / n; + const startAngle = -Math.PI / 2; + const rings = [1, 2, 3, 4].map((level) => { + const r = level / 4 * maxR; + const points = Array.from({ length: n }, (_, i) => { + const angle = startAngle + i * angleStep; + return `${cx + r * Math.cos(angle)},${cy + r * Math.sin(angle)}`; + }).join(" "); + return ``; + }).join(""); + const axes = Array.from({ length: n }, (_, i) => { + const angle = startAngle + i * angleStep; + const x2 = cx + maxR * Math.cos(angle); + const y2 = cy + maxR * Math.sin(angle); + return ``; + }).join(""); + const dataPoints = categories.map((cat, i) => { + const r = cat.stage / 4 * maxR; + const angle = startAngle + i * angleStep; + return `${cx + r * Math.cos(angle)},${cy + r * Math.sin(angle)}`; + }).join(" "); + const labels = categories.map((cat, i) => { + const angle = startAngle + i * angleStep; + const labelR = maxR + 35; + const x = cx + labelR * Math.cos(angle); + const y = cy + labelR * Math.sin(angle); + let anchor = "middle"; + if (Math.cos(angle) < -0.3) { + anchor = "end"; + } else if (Math.cos(angle) > 0.3) { + anchor = "start"; + } + return `${cat.icon} ${cat.category}`; + }).join(""); + const dots = categories.map((cat, i) => { + const r = cat.stage / 4 * maxR; + const angle = startAngle + i * angleStep; + const x = cx + r * Math.cos(angle); + const y = cy + r * Math.sin(angle); + const color = stageColor(cat.stage); + return ``; + }).join(""); + const ringLabels = [1, 2, 3, 4].map((level) => { + const r = level / 4 * maxR; + return `${level}`; + }).join(""); + return ` + ${rings} + ${axes} + + ${dots} + ${labels} + ${ringLabels} + `; + } + function stageColor(stage) { + switch (stage) { + case 1: + return "#93c5fd"; + case 2: + return "#6ee7b7"; + case 3: + return "#3b82f6"; + case 4: + return "#10b981"; + default: + return "#666"; + } + } + function escapeHtml(text) { + return text.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); + } + function markdownToHtml(text) { + let escaped = escapeHtml(text); + escaped = escaped.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1'); + return escaped; + } + function renderDemoControls(categories) { + const sliders = categories.map((cat, i) => { + const currentStage = demoModeActive ? demoStageOverrides[i] : cat.stage; + const stageButtons = [1, 2, 3, 4].map( + (s) => `` + ).join(""); + return ` +
+ +
${stageButtons}
+ ${escapeHtml(STAGE_LABELS[currentStage] || "")} +
+ `; + }).join(""); + return ` +
+
+
+ + \u{1F41B} Demo Mode \u2014 Override Spider Chart +
+
+ + +
+
+
+ ${sliders} +
+
+ `; + } + function wireDemoControls(data) { + if (demoStageOverrides.length === 0) { + demoStageOverrides = data.categories.map((c) => c.stage); + } + document.getElementById("demo-expand-toggle")?.addEventListener("click", () => { + demoPanelExpanded = !demoPanelExpanded; + renderLayout(data); + }); + document.getElementById("demo-toggle")?.addEventListener("click", () => { + demoModeActive = !demoModeActive; + renderLayout(data); + }); + document.getElementById("demo-reset")?.addEventListener("click", () => { + demoStageOverrides = data.categories.map((c) => c.stage); + demoModeActive = false; + renderLayout(data); + }); + document.querySelectorAll(".demo-step-btn").forEach((btn) => { + btn.addEventListener("click", (e) => { + const target = e.currentTarget; + const idx = parseInt(target.getAttribute("data-index") || "0", 10); + const stage = parseInt(target.getAttribute("data-stage") || "1", 10); + demoStageOverrides[idx] = stage; + if (demoModeActive) { + renderLayout(data); + } + }); + }); + } + function renderLayout(data) { + const root = document.getElementById("root"); + if (!root) { + return; + } + const dismissedTips = data.dismissedTips || []; + const useDemoCards = demoModeActive && data.fluencyLevels; + const categoryCards = data.categories.map((cat, catIdx) => { + const demoStage = demoStageOverrides[catIdx] ?? cat.stage; + const displayStage = useDemoCards ? demoStage : cat.stage; + const progressPct = displayStage / 4 * 100; + const color = stageColor(displayStage); + if (useDemoCards && data.fluencyLevels) { + const levelData = data.fluencyLevels.find((l) => l.category === cat.category); + const stageInfo = levelData?.levels.find((l) => l.stage === demoStage); + const thresholdsHtml = stageInfo && stageInfo.thresholds.length > 0 ? stageInfo.thresholds.map( + (t) => `
  • \u{1F3AF}${escapeHtml(t)}
  • ` + ).join("") : '
  • -No thresholds defined
  • '; + const tipsHtml2 = stageInfo && stageInfo.tips.length > 0 ? stageInfo.tips.map((t) => `
    ${markdownToHtml(t)}
    `).join("") : '
    No tips for this stage
    '; + return ` +
    +
    + ${cat.icon} ${escapeHtml(cat.category)} + Stage ${displayStage} +
    +
    ${escapeHtml(STAGE_LABELS[displayStage] || "Unknown")}
    +
    ${escapeHtml(stageInfo?.description || "")}
    +
    +
    +
    + +
      ${thresholdsHtml}
    +
    + + ${tipsHtml2} +
    +
    `; + } + const evidenceHtml = cat.evidence.map( + (e) => `
  • ${escapeHtml(e)}
  • ` + ).join(""); + const tipsHtml = cat.tips.length > 0 ? cat.tips.map((t) => { + if (t.includes("\n")) { + const lines = t.split("\n").filter((line) => line.trim()); + const summary = lines[0]; + const hasHeader = lines.length > 1 && lines[1].toLowerCase().includes("top repos"); + if (hasHeader && lines.length > 2) { + const header = lines[1]; + const listItems = lines.slice(2).map((item) => `
  • ${markdownToHtml(item)}
  • `).join(""); + return `
    ${markdownToHtml(summary)}
    ${markdownToHtml(header)}
      ${listItems}
    `; + } else { + return `
    ${lines.map((line) => markdownToHtml(line)).join("
    ")}
    `; + } + } else { + return `
    ${markdownToHtml(t)}
    `; + } + }).join("") : `
    No specific suggestions - you're doing great!
    `; + const tipsAreDismissed = dismissedTips.includes(cat.category); + const mcpButton = cat.category === "Tool Usage" ? ` +
    + +
    + ` : ""; + return ` +
    +
    + ${cat.icon} ${escapeHtml(cat.category)} + Stage ${cat.stage} +
    +
    ${escapeHtml(STAGE_LABELS[cat.stage] || "Unknown")}
    +
    +
    +
    +
      ${evidenceHtml || '
    • -No significant activity detected
    • '}
    + ${!tipsAreDismissed && cat.tips.length > 0 ? ` +
    +
    +
    \u{1F4A1} Next steps to level up:
    + +
    + ${tipsHtml} +
    + ` : ""}${mcpButton}
    `; + }).join(""); + root.innerHTML = ` + + +
    +
    +
    + \u{1F3AF} + Copilot Fluency Score +
    +
    + ${buttonHtml("btn-refresh")} + ${buttonHtml("btn-details")} + ${buttonHtml("btn-chart")} + ${buttonHtml("btn-usage")} + ${buttonHtml("btn-environmental")} + ${buttonHtml("btn-diagnostics")} + ${data.backendConfigured ? buttonHtml("btn-dashboard") : ""} +
    +
    + +
    +
    \u{1F4CB} About This Dashboard
    +
    + This dashboard maps your GitHub Copilot usage patterns from the last 30 days to a maturity model with 4 stages across 6 categories. + It helps you understand which Copilot capabilities you already use and suggests areas to explore for greater productivity. +

    + \u{1F4D6} Read the full scoring rules to learn how each category and stage is calculated. +

    + Note: Scores are based on data from session log files. Some features (e.g., inline suggestion acceptance) cannot be tracked via logs. +
    +
    + + +
    +
    Overall Copilot Fluency
    +
    ${escapeHtml(data.overallLabel)}
    +
    ${escapeHtml(STAGE_DESCRIPTIONS[data.overallStage] || "")}
    +
    + + + ${data.isDebugMode ? renderDemoControls(data.categories) : ""} + + +
    +
    + ${renderRadarChart(demoModeActive ? data.categories.map((c, i) => ({ ...c, stage: demoStageOverrides[i] ?? c.stage })) : data.categories)} +
    +
    +
    Stage Reference
    +
    +
    +
    +
    Stage 1: Copilot Skeptic
    +
    Rarely uses Copilot or uses only basic features
    +
    +
    +
    +
    +
    +
    Stage 2: Copilot Explorer
    +
    Exploring Copilot capabilities with occasional use
    +
    +
    +
    +
    +
    +
    Stage 3: Copilot Collaborator
    +
    Regular, purposeful use across multiple features
    +
    +
    +
    +
    +
    +
    Stage 4: Copilot Strategist
    +
    Strategic, advanced use leveraging the full Copilot ecosystem
    +
    +
    +
    +
    + + +
    + ${categoryCards} +
    + + + + + + + +
    + `; + document.getElementById("btn-refresh")?.addEventListener("click", () => { + vscode.postMessage({ command: "refresh" }); + }); + document.getElementById("btn-level-viewer-inline")?.addEventListener("click", () => { + vscode.postMessage({ command: "showFluencyLevelViewer" }); + }); + document.getElementById("btn-details")?.addEventListener("click", () => { + vscode.postMessage({ command: "showDetails" }); + }); + document.getElementById("btn-chart")?.addEventListener("click", () => { + vscode.postMessage({ command: "showChart" }); + }); + document.getElementById("btn-usage")?.addEventListener("click", () => { + vscode.postMessage({ command: "showUsageAnalysis" }); + }); + document.getElementById("btn-diagnostics")?.addEventListener("click", () => { + vscode.postMessage({ command: "showDiagnostics" }); + }); + document.getElementById("btn-dashboard")?.addEventListener("click", () => { + vscode.postMessage({ command: "showDashboard" }); + }); + document.getElementById("btn-environmental")?.addEventListener("click", () => { + vscode.postMessage({ command: "showEnvironmental" }); + }); + document.getElementById("btn-share-issue")?.addEventListener("click", () => { + vscode.postMessage({ command: "shareToIssue" }); + }); + document.querySelector(".mcp-discover-btn")?.addEventListener("click", () => { + vscode.postMessage({ command: "searchMcpExtensions" }); + }); + document.querySelectorAll(".dismiss-tips-btn").forEach((btn) => { + btn.addEventListener("click", (e) => { + const target = e.target; + const category = target.getAttribute("data-category"); + if (category) { + vscode.postMessage({ command: "dismissTips", category }); + } + }); + }); + document.getElementById("btn-reset-tips")?.addEventListener("click", () => { + vscode.postMessage({ command: "resetDismissedTips" }); + }); + document.getElementById("btn-share-linkedin")?.addEventListener("click", () => { + vscode.postMessage({ command: "shareToLinkedIn" }); + }); + document.getElementById("btn-share-bluesky")?.addEventListener("click", () => { + vscode.postMessage({ command: "shareToBluesky" }); + }); + document.getElementById("btn-share-mastodon")?.addEventListener("click", () => { + vscode.postMessage({ command: "shareToMastodon" }); + }); + const exportToggleBtn = document.getElementById("btn-export-toggle"); + const exportDropdown = document.getElementById("export-dropdown"); + exportToggleBtn?.addEventListener("click", (e) => { + e.stopPropagation(); + if (exportDropdown) { + const isVisible = exportDropdown.style.display === "block"; + exportDropdown.style.display = isVisible ? "none" : "block"; + } + }); + document.addEventListener("click", () => { + if (exportDropdown) { + exportDropdown.style.display = "none"; + } + }); + document.querySelectorAll(".export-menu-item").forEach((item) => { + item.addEventListener("click", (e) => { + e.stopPropagation(); + const target = e.currentTarget; + const exportType = target.getAttribute("data-export-type"); + if (exportDropdown) { + exportDropdown.style.display = "none"; + } + if (exportType === "png") { + handlePngExport(); + } else if (exportType === "pdf") { + void handleScreenshotExport("exportPdf"); + } else if (exportType === "pptx") { + void handleScreenshotExport("exportPptx"); + } + }); + }); + function handlePngExport() { + const svgEl = document.querySelector(".radar-svg"); + if (!svgEl) { + return; + } + const clone = svgEl.cloneNode(true); + clone.setAttribute("width", "1100"); + clone.setAttribute("height", "1100"); + const bg = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + bg.setAttribute("width", "100%"); + bg.setAttribute("height", "100%"); + bg.setAttribute("fill", "#1b1b1e"); + clone.insertBefore(bg, clone.firstChild); + const svgData = new XMLSerializer().serializeToString(clone); + const encodedSvg = "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(svgData))); + const img = new Image(); + img.onload = () => { + const canvas = document.createElement("canvas"); + canvas.width = 1100; + canvas.height = 1100; + const ctx = canvas.getContext("2d"); + if (!ctx) { + return; + } + ctx.drawImage(img, 0, 0, 1100, 1100); + const dataUrl = canvas.toDataURL("image/png"); + vscode.postMessage({ command: "saveChartImage", data: dataUrl }); + }; + img.onerror = () => { + vscode.postMessage({ command: "downloadChartImage" }); + }; + img.src = encodedSvg; + } + async function handleScreenshotExport(command) { + const html2canvasModule = await Promise.resolve().then(() => __toESM(require_html2canvas())); + const html2canvas = html2canvasModule.default ?? html2canvasModule; + const images = []; + const stageBanner = document.querySelector(".stage-banner"); + const radarWrapper = document.querySelector(".radar-wrapper"); + const coverContainer = document.createElement("div"); + coverContainer.style.cssText = "position:absolute;left:-9999px;top:0;width:1200px;background:#1b1b1e;padding:24px;border-radius:10px;"; + const titleEl = document.createElement("div"); + titleEl.style.cssText = "text-align:center;margin-bottom:20px;"; + titleEl.innerHTML = `
    GitHub Copilot Fluency Score
    Report · ${(/* @__PURE__ */ new Date()).toLocaleDateString()}
    `; + coverContainer.appendChild(titleEl); + if (stageBanner) { + coverContainer.appendChild(stageBanner.cloneNode(true)); + } + if (radarWrapper) { + coverContainer.appendChild(radarWrapper.cloneNode(true)); + } + document.body.appendChild(coverContainer); + try { + const coverCanvas = await html2canvas(coverContainer, { backgroundColor: "#1b1b1e", scale: 2, useCORS: true }); + images.push({ label: "Cover", dataUrl: coverCanvas.toDataURL("image/png") }); + } finally { + document.body.removeChild(coverContainer); + } + const cards = Array.from(document.querySelectorAll(".category-card")); + for (const card of cards) { + const wrapper = document.createElement("div"); + wrapper.style.cssText = "position:absolute;left:-9999px;top:0;width:900px;background:#1b1b1e;padding:24px;border-radius:10px;"; + wrapper.appendChild(card.cloneNode(true)); + document.body.appendChild(wrapper); + try { + const cardCanvas = await html2canvas(wrapper, { backgroundColor: "#1b1b1e", scale: 2, useCORS: true }); + const nameEl = card.querySelector(".category-name"); + const label = nameEl?.textContent?.trim() || "Category"; + images.push({ label, dataUrl: cardCanvas.toDataURL("image/png") }); + } finally { + document.body.removeChild(wrapper); + } + } + vscode.postMessage({ command, data: images }); + } + if (data.isDebugMode) { + wireDemoControls(data); + } + } + async function bootstrap() { + const { provideVSCodeDesignSystem: provideVSCodeDesignSystem2, vsCodeButton: vsCodeButton2 } = await Promise.resolve().then(() => (init_dist3(), dist_exports)); + provideVSCodeDesignSystem2().register(vsCodeButton2()); + if (!initialData) { + const root = document.getElementById("root"); + if (root) { + root.textContent = "No data available."; + } + return; + } + renderLayout(initialData); + } + void bootstrap(); +})(); +/*! Bundled license information: + +html2canvas/dist/html2canvas.js: + (*! + * html2canvas 1.4.1 + * Copyright (c) 2022 Niklas von Hertzen + * Released under MIT License + *) + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) + +tslib/tslib.es6.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) + +tabbable/dist/index.esm.js: + (*! + * tabbable 5.3.3 + * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE + *) +*/ +//# sourceMappingURL=maturity.js.map diff --git a/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js b/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js index b0b642c6..9f809b43 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js +++ b/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js @@ -20718,6 +20718,15 @@ Please add friendly names for these tools to improve the user experience.` `; } + function unionFill(map, keys) { + const result = { ...map }; + for (const k of keys) { + if (!(k in result)) { + result[k] = 0; + } + } + return result; + } function sanitizeStats(raw) { if (!raw || typeof raw !== "object") { return null; @@ -20879,6 +20888,36 @@ Please add friendly names for these tools to improve the user experience.` `; } + const allToolKeys = [.../* @__PURE__ */ new Set([ + ...Object.keys(stats.today.toolCalls.byTool), + ...Object.keys(stats.last30Days.toolCalls.byTool), + ...Object.keys(stats.month.toolCalls.byTool) + ])]; + const allMcpToolKeys = [.../* @__PURE__ */ new Set([ + ...Object.keys(stats.today.mcpTools.byTool), + ...Object.keys(stats.last30Days.mcpTools.byTool), + ...Object.keys(stats.month.mcpTools.byTool) + ])]; + const allMcpServerKeys = [.../* @__PURE__ */ new Set([ + ...Object.keys(stats.today.mcpTools.byServer), + ...Object.keys(stats.last30Days.mcpTools.byServer), + ...Object.keys(stats.month.mcpTools.byServer) + ])]; + const allStandardModels = [.../* @__PURE__ */ new Set([ + ...stats.today.modelSwitching.standardModels, + ...stats.last30Days.modelSwitching.standardModels, + ...stats.month.modelSwitching.standardModels + ])]; + const allPremiumModels = [.../* @__PURE__ */ new Set([ + ...stats.today.modelSwitching.premiumModels, + ...stats.last30Days.modelSwitching.premiumModels, + ...stats.month.modelSwitching.premiumModels + ])]; + const allUnknownModels = [.../* @__PURE__ */ new Set([ + ...stats.today.modelSwitching.unknownModels, + ...stats.last30Days.modelSwitching.unknownModels, + ...stats.month.modelSwitching.unknownModels + ])]; const todayTotalRefs = getTotalContextRefs(stats.today.contextReferences); const last30DaysTotalRefs = getTotalContextRefs(stats.last30Days.contextReferences); const todayTotalModes = stats.today.modeUsage.ask + stats.today.modeUsage.edit + stats.today.modeUsage.agent + stats.today.modeUsage.plan + stats.today.modeUsage.customAgent; @@ -21045,21 +21084,21 @@ Please add friendly names for these tools to improve the user experience.`

    \u{1F4C5} Today

    Total Tool Calls: ${formatNumber(stats.today.toolCalls.total)}
    - ${renderToolsTable(stats.today.toolCalls.byTool, 10)} + ${renderToolsTable(unionFill(stats.today.toolCalls.byTool, allToolKeys), 10)}

    \u{1F4C6} Last 30 Days

    Total Tool Calls: ${formatNumber(stats.last30Days.toolCalls.total)}
    - ${renderToolsTable(stats.last30Days.toolCalls.byTool, 10)} + ${renderToolsTable(unionFill(stats.last30Days.toolCalls.byTool, allToolKeys), 10)}

    \u{1F4C5} Previous Month

    Total Tool Calls: ${formatNumber(stats.month.toolCalls.total)}
    - ${renderToolsTable(stats.month.toolCalls.byTool, 10)} + ${renderToolsTable(unionFill(stats.month.toolCalls.byTool, allToolKeys), 10)}
    @@ -21092,9 +21131,6 @@ Please add friendly names for these tools to improve the user experience.` }).join(" "); return `
    -
    - Found ${unknownTools.length} tool${unknownTools.length > 1 ? "s" : ""} without friendly names \u2014 might not be included in the top-10 tables above -
    ${toolListHtml}
    @@ -21112,8 +21148,8 @@ Please add friendly names for these tools to improve the user experience.`

    \u{1F4C5} Today

    Total MCP Calls: ${formatNumber(stats.today.mcpTools.total)}
    - ${stats.today.mcpTools.total > 0 ? ` -
    By Server:
    ${renderToolsTable(stats.today.mcpTools.byServer, 8)}
    + ${allMcpServerKeys.length > 0 ? ` +
    By Server:
    ${renderToolsTable(unionFill(stats.today.mcpTools.byServer, allMcpServerKeys), 200)}
    ` : '
    No MCP tools used yet
    '}
    @@ -21121,8 +21157,8 @@ Please add friendly names for these tools to improve the user experience.`

    \u{1F4C6} Last 30 Days

    Total MCP Calls: ${formatNumber(stats.last30Days.mcpTools.total)}
    - ${stats.last30Days.mcpTools.total > 0 ? ` -
    By Server:
    ${renderToolsTable(stats.last30Days.mcpTools.byServer, 8)}
    + ${allMcpServerKeys.length > 0 ? ` +
    By Server:
    ${renderToolsTable(unionFill(stats.last30Days.mcpTools.byServer, allMcpServerKeys), 200)}
    ` : '
    No MCP tools used yet
    '}
    @@ -21130,31 +21166,31 @@ Please add friendly names for these tools to improve the user experience.`

    \u{1F4C5} Previous Month

    Total MCP Calls: ${formatNumber(stats.month.mcpTools.total)}
    - ${stats.month.mcpTools.total > 0 ? ` -
    By Server:
    ${renderToolsTable(stats.month.mcpTools.byServer, 8)}
    + ${allMcpServerKeys.length > 0 ? ` +
    By Server:
    ${renderToolsTable(unionFill(stats.month.mcpTools.byServer, allMcpServerKeys), 200)}
    ` : '
    No MCP tools used yet
    '}
    - ${stats.today.mcpTools.total > 0 ? ` + ${allMcpToolKeys.length > 0 ? `
    -
    By Tool:
    ${renderToolsTable(stats.today.mcpTools.byTool, 8, lookupMcpToolName)}
    +
    By Tool:
    ${renderToolsTable(unionFill(stats.today.mcpTools.byTool, allMcpToolKeys), 10, lookupMcpToolName)}
    ` : ""}
    - ${stats.last30Days.mcpTools.total > 0 ? ` + ${allMcpToolKeys.length > 0 ? `
    -
    By Tool:
    ${renderToolsTable(stats.last30Days.mcpTools.byTool, 8, lookupMcpToolName)}
    +
    By Tool:
    ${renderToolsTable(unionFill(stats.last30Days.mcpTools.byTool, allMcpToolKeys), 10, lookupMcpToolName)}
    ` : ""}
    - ${stats.month.mcpTools.total > 0 ? ` + ${allMcpToolKeys.length > 0 ? `
    -
    By Tool:
    ${renderToolsTable(stats.month.mcpTools.byTool, 8, lookupMcpToolName)}
    +
    By Tool:
    ${renderToolsTable(unionFill(stats.month.mcpTools.byTool, allMcpToolKeys), 10, lookupMcpToolName)}
    ` : ""}
    @@ -21186,22 +21222,22 @@ Please add friendly names for these tools to improve the user experience.`
    Models by Tier:
    - ${stats.today.modelSwitching.standardModels.length > 0 ? ` + ${allStandardModels.length > 0 ? `
    \u{1F535} Standard: - ${stats.today.modelSwitching.standardModels.map(escapeHtml).join(", ")} + ${allStandardModels.map(escapeHtml).join(", ")}
    ` : '
    '} - ${stats.today.modelSwitching.premiumModels.length > 0 ? ` + ${allPremiumModels.length > 0 ? `
    \u2B50 Premium: - ${stats.today.modelSwitching.premiumModels.map(escapeHtml).join(", ")} + ${allPremiumModels.map(escapeHtml).join(", ")}
    ` : '
    '} - ${stats.today.modelSwitching.unknownModels.length > 0 ? ` + ${allUnknownModels.length > 0 ? `
    \u2753 Unknown: - ${stats.today.modelSwitching.unknownModels.map(escapeHtml).join(", ")} + ${allUnknownModels.map(escapeHtml).join(", ")}
    ` : ""}
    @@ -21255,22 +21291,22 @@ Please add friendly names for these tools to improve the user experience.`
    Models by Tier:
    - ${stats.last30Days.modelSwitching.standardModels.length > 0 ? ` + ${allStandardModels.length > 0 ? `
    \u{1F535} Standard: - ${stats.last30Days.modelSwitching.standardModels.map(escapeHtml).join(", ")} + ${allStandardModels.map(escapeHtml).join(", ")}
    ` : '
    '} - ${stats.last30Days.modelSwitching.premiumModels.length > 0 ? ` + ${allPremiumModels.length > 0 ? `
    \u2B50 Premium: - ${stats.last30Days.modelSwitching.premiumModels.map(escapeHtml).join(", ")} + ${allPremiumModels.map(escapeHtml).join(", ")}
    ` : '
    '} - ${stats.last30Days.modelSwitching.unknownModels.length > 0 ? ` + ${allUnknownModels.length > 0 ? `
    \u2753 Unknown: - ${stats.last30Days.modelSwitching.unknownModels.map(escapeHtml).join(", ")} + ${allUnknownModels.map(escapeHtml).join(", ")}
    ` : ""}
    @@ -21324,22 +21360,22 @@ Please add friendly names for these tools to improve the user experience.`
    Models by Tier:
    - ${stats.month.modelSwitching.standardModels.length > 0 ? ` + ${allStandardModels.length > 0 ? `
    \u{1F535} Standard: - ${stats.month.modelSwitching.standardModels.map(escapeHtml).join(", ")} + ${allStandardModels.map(escapeHtml).join(", ")}
    ` : '
    '} - ${stats.month.modelSwitching.premiumModels.length > 0 ? ` + ${allPremiumModels.length > 0 ? `
    \u2B50 Premium: - ${stats.month.modelSwitching.premiumModels.map(escapeHtml).join(", ")} + ${allPremiumModels.map(escapeHtml).join(", ")}
    ` : '
    '} - ${stats.month.modelSwitching.unknownModels.length > 0 ? ` + ${allUnknownModels.length > 0 ? `
    \u2753 Unknown: - ${stats.month.modelSwitching.unknownModels.map(escapeHtml).join(", ")} + ${allUnknownModels.map(escapeHtml).join(", ")}
    ` : ""}
    diff --git a/vscode-extension/src/sessionParser.ts b/vscode-extension/src/sessionParser.ts index a0e6b05d..5b7d62a9 100644 --- a/vscode-extension/src/sessionParser.ts +++ b/vscode-extension/src/sessionParser.ts @@ -201,6 +201,7 @@ export function parseSessionFileContent( let totalInputTokens = 0; let totalOutputTokens = 0; let totalThinkingTokens = 0; + let totalActualTokens = 0; let sessionJson: any | undefined; @@ -298,7 +299,8 @@ export function parseSessionFileContent( tokens: totalInputTokens + totalOutputTokens + totalThinkingTokens, interactions, modelUsage, - thinkingTokens: totalThinkingTokens + thinkingTokens: totalThinkingTokens, + actualTokens: 0, // delta-based JSONL: no result.usage fields to read }; } @@ -306,7 +308,7 @@ export function parseSessionFileContent( try { sessionJson = JSON.parse(fileContent.trim()); } catch { - return { tokens: 0, interactions: 0, modelUsage: {}, thinkingTokens: 0 }; + return { tokens: 0, interactions: 0, modelUsage: {}, thinkingTokens: 0, actualTokens: 0 }; } } @@ -315,7 +317,7 @@ export function parseSessionFileContent( try { sessionJson = JSON.parse(fileContent); } catch { - return { tokens: 0, interactions: 0, modelUsage: {}, thinkingTokens: 0 }; + return { tokens: 0, interactions: 0, modelUsage: {}, thinkingTokens: 0, actualTokens: 0 }; } } @@ -362,13 +364,29 @@ export function parseSessionFileContent( } } } + + // Extract actual token counts from LLM API usage data (mirrors extension's estimateTokensFromSession logic) + if (request?.result?.usage) { + // OLD FORMAT (pre-Feb 2026) + const u = request.result.usage; + const prompt = typeof u.promptTokens === 'number' ? u.promptTokens : 0; + const completion = typeof u.completionTokens === 'number' ? u.completionTokens : 0; + totalActualTokens += prompt + completion; + } else if (typeof request?.result?.promptTokens === 'number' && typeof request?.result?.outputTokens === 'number') { + // NEW FORMAT (Feb 2026+) + totalActualTokens += request.result.promptTokens + request.result.outputTokens; + } else if (request?.result?.metadata && typeof request?.result?.metadata?.promptTokens === 'number' && typeof request?.result?.metadata?.outputTokens === 'number') { + // INSIDERS FORMAT (Feb 2026+): Tokens nested under result.metadata + totalActualTokens += request.result.metadata.promptTokens + request.result.metadata.outputTokens; + } } return { tokens: totalInputTokens + totalOutputTokens + totalThinkingTokens, interactions, modelUsage, - thinkingTokens: totalThinkingTokens + thinkingTokens: totalThinkingTokens, + actualTokens: totalActualTokens, }; } diff --git a/vscode-extension/src/usageAnalysis.ts b/vscode-extension/src/usageAnalysis.ts index 82c2c47d..f168e919 100644 --- a/vscode-extension/src/usageAnalysis.ts +++ b/vscode-extension/src/usageAnalysis.ts @@ -495,6 +495,41 @@ export function analyzeRequestContext(request: any, refs: ContextReferenceUsage) } } +/** + * Classifies unique models by tier and counts requests per tier. + * Called before each early return in analyzeSessionUsage so that all session + * formats (OpenCode, Visual Studio, Crush, Continue) populate the tier-breakdown + * shown by the Multi-Model Usage section in the usage analysis view. + */ +function applyModelTierClassification( + deps: Pick, + uniqueModels: string[], + allModelRequests: string[], + analysis: SessionUsageAnalysis +): void { + const standard: string[] = []; + const premium: string[] = []; + const unknown: string[] = []; + for (const model of uniqueModels) { + const tier = getModelTier(model, deps.modelPricing); + if (tier === 'standard') { standard.push(model); } + else if (tier === 'premium') { premium.push(model); } + else { unknown.push(model); } + } + analysis.modelSwitching.tiers = { standard, premium, unknown }; + analysis.modelSwitching.hasMixedTiers = standard.length > 0 && premium.length > 0; + let stdReq = 0, premReq = 0, unkReq = 0; + for (const model of allModelRequests) { + const tier = getModelTier(model, deps.modelPricing); + if (tier === 'standard') { stdReq++; } + else if (tier === 'premium') { premReq++; } + else { unkReq++; } + } + analysis.modelSwitching.standardRequests = stdReq; + analysis.modelSwitching.premiumRequests = premReq; + analysis.modelSwitching.unknownRequests = unkReq; +} + /** * Calculate model switching statistics for a session file. * This method updates the analysis.modelSwitching field in place. @@ -969,52 +1004,30 @@ export async function analyzeSessionUsage(deps: UsageAnalysisDeps, sessionFile: const models: string[] = []; for (let i = 1; i < objects.length; i++) { const isRequest = i % 2 === 1; + // VS session objects are [version, innerData] tuples; inner data is at index [1] + const objData = objects[i]?.[1]; if (isRequest) { analysis.modeUsage.ask++; } else { - const model = deps.visualStudio.getModelId(objects[i], false); + const model = deps.visualStudio.getModelId(objData, false); if (model) { models.push(model); } - // Count tool calls from response content - for (const c of (objects[i]?.Content || [])) { - const inner = Array.isArray(c) ? c[1] : null; + // Count tool calls from response content (at objData.Content, not objects[i].Content) + for (const c of ((objData?.Content ?? []) as any[])) { + const inner: any = Array.isArray(c) ? c[1] : null; if (inner?.Function) { analysis.toolCalls.total++; - const toolName = String(inner.Function.Description || 'tool'); - analysis.toolCalls.byTool[toolName] = (analysis.toolCalls.byTool[toolName] || 0) + 1; - } - } - } - } - const uniqueModels = [...new Set(models)]; - analysis.modelSwitching.uniqueModels = uniqueModels; - analysis.modelSwitching.modelCount = uniqueModels.length; - analysis.modelSwitching.totalRequests = models.length; - let switchCount = 0; - for (let i = 1; i < models.length; i++) { - if (models[i] !== models[i - 1]) { switchCount++; } - } - analysis.modelSwitching.switchCount = switchCount; - return analysis; - } - - // Handle Visual Studio sessions - if (deps.visualStudio?.isVSSessionFile(sessionFile)) { - const objects = deps.visualStudio.decodeSessionFile(sessionFile); - const models: string[] = []; - for (let i = 1; i < objects.length; i++) { - const isRequest = i % 2 === 1; - if (isRequest) { - analysis.modeUsage.ask++; - } else { - const model = deps.visualStudio.getModelId(objects[i], false); - if (model) { models.push(model); } - // Count tool calls from response content - for (const c of (objects[i]?.Content || [])) { - const inner = Array.isArray(c) ? c[1] : null; - if (inner?.Function) { - analysis.toolCalls.total++; - const toolName = String(inner.Function.Description || 'tool'); - analysis.toolCalls.byTool[toolName] = (analysis.toolCalls.byTool[toolName] || 0) + 1; + const toolName = String(inner.Function.Name || inner.Function.Description || 'tool'); + if (isMcpTool(toolName)) { + analysis.mcpTools.total++; + const serverName = extractMcpServerName(toolName, deps.toolNameMap); + analysis.mcpTools.byServer[serverName] = (analysis.mcpTools.byServer[serverName] || 0) + 1; + const normalizedTool = normalizeMcpToolName(toolName); + analysis.mcpTools.byTool[normalizedTool] = (analysis.mcpTools.byTool[normalizedTool] || 0) + 1; + // Don't count as regular tool call + analysis.toolCalls.total--; + } else { + analysis.toolCalls.byTool[toolName] = (analysis.toolCalls.byTool[toolName] || 0) + 1; + } } } } @@ -1028,6 +1041,7 @@ export async function analyzeSessionUsage(deps: UsageAnalysisDeps, sessionFile: if (models[i] !== models[i - 1]) { switchCount++; } } analysis.modelSwitching.switchCount = switchCount; + applyModelTierClassification(deps, uniqueModels, models, analysis); return analysis; } @@ -1062,6 +1076,7 @@ export async function analyzeSessionUsage(deps: UsageAnalysisDeps, sessionFile: if (models[i] !== models[i - 1]) { switchCount++; } } analysis.modelSwitching.switchCount = switchCount; + applyModelTierClassification(deps, uniqueModels, models, analysis); return analysis; } @@ -1094,6 +1109,7 @@ export async function analyzeSessionUsage(deps: UsageAnalysisDeps, sessionFile: if (models[ki] !== models[ki - 1]) { switchCount++; } } analysis.modelSwitching.switchCount = switchCount; + applyModelTierClassification(deps, uniqueModels, models, analysis); return analysis; } diff --git a/vscode-extension/src/webview/usage/main.ts b/vscode-extension/src/webview/usage/main.ts index da7ef73c..6aefee61 100644 --- a/vscode-extension/src/webview/usage/main.ts +++ b/vscode-extension/src/webview/usage/main.ts @@ -1,4 +1,4 @@ -// Usage Analysis webview +// Usage Analysis webview import { el } from '../shared/domUtils'; import { buttonHtml } from '../shared/buttonConfig'; import { ContextReferenceUsage, getTotalContextRefs } from '../shared/contextRefUtils'; @@ -279,6 +279,18 @@ function renderToolsTable(byTool: { [key: string]: number }, limit = 10, nameRes `; } +/** + * Return a copy of `map` with every key from `keys` present (defaulting to 0). + * Used to build cross-period tables where every item found in any period is shown in all. + */ +function unionFill(map: { [key: string]: number }, keys: string[]): { [key: string]: number } { + const result: { [key: string]: number } = { ...map }; + for (const k of keys) { + if (!(k in result)) { result[k] = 0; } + } + return result; +} + function sanitizeStats(raw: any): UsageAnalysisStats | null { if (!raw || typeof raw !== 'object') { return null; @@ -459,6 +471,38 @@ function renderLayout(stats: UsageAnalysisStats): void {
    `; } + // Compute union of keys across all periods so every column shows every known item + const allToolKeys = [...new Set([ + ...Object.keys(stats.today.toolCalls.byTool), + ...Object.keys(stats.last30Days.toolCalls.byTool), + ...Object.keys(stats.month.toolCalls.byTool), + ])]; + const allMcpToolKeys = [...new Set([ + ...Object.keys(stats.today.mcpTools.byTool), + ...Object.keys(stats.last30Days.mcpTools.byTool), + ...Object.keys(stats.month.mcpTools.byTool), + ])]; + const allMcpServerKeys = [...new Set([ + ...Object.keys(stats.today.mcpTools.byServer), + ...Object.keys(stats.last30Days.mcpTools.byServer), + ...Object.keys(stats.month.mcpTools.byServer), + ])]; + const allStandardModels = [...new Set([ + ...stats.today.modelSwitching.standardModels, + ...stats.last30Days.modelSwitching.standardModels, + ...stats.month.modelSwitching.standardModels, + ])]; + const allPremiumModels = [...new Set([ + ...stats.today.modelSwitching.premiumModels, + ...stats.last30Days.modelSwitching.premiumModels, + ...stats.month.modelSwitching.premiumModels, + ])]; + const allUnknownModels = [...new Set([ + ...stats.today.modelSwitching.unknownModels, + ...stats.last30Days.modelSwitching.unknownModels, + ...stats.month.modelSwitching.unknownModels, + ])]; + const todayTotalRefs = getTotalContextRefs(stats.today.contextReferences); const last30DaysTotalRefs = getTotalContextRefs(stats.last30Days.contextReferences); const todayTotalModes = stats.today.modeUsage.ask + stats.today.modeUsage.edit + stats.today.modeUsage.agent + stats.today.modeUsage.plan + stats.today.modeUsage.customAgent; @@ -634,21 +678,21 @@ function renderLayout(stats: UsageAnalysisStats): void {

    📅 Today

    Total Tool Calls: ${formatNumber(stats.today.toolCalls.total)}
    - ${renderToolsTable(stats.today.toolCalls.byTool, 10)} + ${renderToolsTable(unionFill(stats.today.toolCalls.byTool, allToolKeys), 10)}

    📆 Last 30 Days

    Total Tool Calls: ${formatNumber(stats.last30Days.toolCalls.total)}
    - ${renderToolsTable(stats.last30Days.toolCalls.byTool, 10)} + ${renderToolsTable(unionFill(stats.last30Days.toolCalls.byTool, allToolKeys), 10)}

    📅 Previous Month

    Total Tool Calls: ${formatNumber(stats.month.toolCalls.total)}
    - ${renderToolsTable(stats.month.toolCalls.byTool, 10)} + ${renderToolsTable(unionFill(stats.month.toolCalls.byTool, allToolKeys), 10)}
    @@ -675,9 +719,6 @@ function renderLayout(stats: UsageAnalysisStats): void { }).join(' '); return `
    -
    - Found ${unknownTools.length} tool${unknownTools.length > 1 ? 's' : ''} without friendly names — might not be included in the top-10 tables above -
    ${toolListHtml}
    @@ -695,8 +736,8 @@ function renderLayout(stats: UsageAnalysisStats): void {

    📅 Today

    Total MCP Calls: ${formatNumber(stats.today.mcpTools.total)}
    - ${stats.today.mcpTools.total > 0 ? ` -
    By Server:
    ${renderToolsTable(stats.today.mcpTools.byServer, 8)}
    + ${allMcpServerKeys.length > 0 ? ` +
    By Server:
    ${renderToolsTable(unionFill(stats.today.mcpTools.byServer, allMcpServerKeys), 200)}
    ` : '
    No MCP tools used yet
    '}
    @@ -704,8 +745,8 @@ function renderLayout(stats: UsageAnalysisStats): void {

    📆 Last 30 Days

    Total MCP Calls: ${formatNumber(stats.last30Days.mcpTools.total)}
    - ${stats.last30Days.mcpTools.total > 0 ? ` -
    By Server:
    ${renderToolsTable(stats.last30Days.mcpTools.byServer, 8)}
    + ${allMcpServerKeys.length > 0 ? ` +
    By Server:
    ${renderToolsTable(unionFill(stats.last30Days.mcpTools.byServer, allMcpServerKeys), 200)}
    ` : '
    No MCP tools used yet
    '}
    @@ -713,31 +754,31 @@ function renderLayout(stats: UsageAnalysisStats): void {

    📅 Previous Month

    Total MCP Calls: ${formatNumber(stats.month.mcpTools.total)}
    - ${stats.month.mcpTools.total > 0 ? ` -
    By Server:
    ${renderToolsTable(stats.month.mcpTools.byServer, 8)}
    + ${allMcpServerKeys.length > 0 ? ` +
    By Server:
    ${renderToolsTable(unionFill(stats.month.mcpTools.byServer, allMcpServerKeys), 200)}
    ` : '
    No MCP tools used yet
    '}
    - ${stats.today.mcpTools.total > 0 ? ` + ${allMcpToolKeys.length > 0 ? `
    -
    By Tool:
    ${renderToolsTable(stats.today.mcpTools.byTool, 8, lookupMcpToolName)}
    +
    By Tool:
    ${renderToolsTable(unionFill(stats.today.mcpTools.byTool, allMcpToolKeys), 10, lookupMcpToolName)}
    ` : ''}
    - ${stats.last30Days.mcpTools.total > 0 ? ` + ${allMcpToolKeys.length > 0 ? `
    -
    By Tool:
    ${renderToolsTable(stats.last30Days.mcpTools.byTool, 8, lookupMcpToolName)}
    +
    By Tool:
    ${renderToolsTable(unionFill(stats.last30Days.mcpTools.byTool, allMcpToolKeys), 10, lookupMcpToolName)}
    ` : ''}
    - ${stats.month.mcpTools.total > 0 ? ` + ${allMcpToolKeys.length > 0 ? `
    -
    By Tool:
    ${renderToolsTable(stats.month.mcpTools.byTool, 8, lookupMcpToolName)}
    +
    By Tool:
    ${renderToolsTable(unionFill(stats.month.mcpTools.byTool, allMcpToolKeys), 10, lookupMcpToolName)}
    ` : ''}
    @@ -769,22 +810,22 @@ function renderLayout(stats: UsageAnalysisStats): void {
    Models by Tier:
    - ${stats.today.modelSwitching.standardModels.length > 0 ? ` + ${allStandardModels.length > 0 ? `
    🔵 Standard: - ${stats.today.modelSwitching.standardModels.map(escapeHtml).join(', ')} + ${allStandardModels.map(escapeHtml).join(', ')}
    ` : '
    '} - ${stats.today.modelSwitching.premiumModels.length > 0 ? ` + ${allPremiumModels.length > 0 ? `
    ⭐ Premium: - ${stats.today.modelSwitching.premiumModels.map(escapeHtml).join(', ')} + ${allPremiumModels.map(escapeHtml).join(', ')}
    ` : '
    '} - ${stats.today.modelSwitching.unknownModels.length > 0 ? ` + ${allUnknownModels.length > 0 ? `
    ❓ Unknown: - ${stats.today.modelSwitching.unknownModels.map(escapeHtml).join(', ')} + ${allUnknownModels.map(escapeHtml).join(', ')}
    ` : ''}
    @@ -838,22 +879,22 @@ function renderLayout(stats: UsageAnalysisStats): void {
    Models by Tier:
    - ${stats.last30Days.modelSwitching.standardModels.length > 0 ? ` + ${allStandardModels.length > 0 ? `
    🔵 Standard: - ${stats.last30Days.modelSwitching.standardModels.map(escapeHtml).join(', ')} + ${allStandardModels.map(escapeHtml).join(', ')}
    ` : '
    '} - ${stats.last30Days.modelSwitching.premiumModels.length > 0 ? ` + ${allPremiumModels.length > 0 ? `
    ⭐ Premium: - ${stats.last30Days.modelSwitching.premiumModels.map(escapeHtml).join(', ')} + ${allPremiumModels.map(escapeHtml).join(', ')}
    ` : '
    '} - ${stats.last30Days.modelSwitching.unknownModels.length > 0 ? ` + ${allUnknownModels.length > 0 ? `
    ❓ Unknown: - ${stats.last30Days.modelSwitching.unknownModels.map(escapeHtml).join(', ')} + ${allUnknownModels.map(escapeHtml).join(', ')}
    ` : ''}
    @@ -907,22 +948,22 @@ function renderLayout(stats: UsageAnalysisStats): void {
    Models by Tier:
    - ${stats.month.modelSwitching.standardModels.length > 0 ? ` + ${allStandardModels.length > 0 ? `
    🔵 Standard: - ${stats.month.modelSwitching.standardModels.map(escapeHtml).join(', ')} + ${allStandardModels.map(escapeHtml).join(', ')}
    ` : '
    '} - ${stats.month.modelSwitching.premiumModels.length > 0 ? ` + ${allPremiumModels.length > 0 ? `
    ⭐ Premium: - ${stats.month.modelSwitching.premiumModels.map(escapeHtml).join(', ')} + ${allPremiumModels.map(escapeHtml).join(', ')}
    ` : '
    '} - ${stats.month.modelSwitching.unknownModels.length > 0 ? ` + ${allUnknownModels.length > 0 ? `
    ❓ Unknown: - ${stats.month.modelSwitching.unknownModels.map(escapeHtml).join(', ')} + ${allUnknownModels.map(escapeHtml).join(', ')}
    ` : ''}
    diff --git a/vscode-extension/test/unit/sessionParser.test.ts b/vscode-extension/test/unit/sessionParser.test.ts index 42d0b2f7..95227266 100644 --- a/vscode-extension/test/unit/sessionParser.test.ts +++ b/vscode-extension/test/unit/sessionParser.test.ts @@ -380,3 +380,81 @@ test('delta-based JSONL: invalid JSON lines are silently skipped', () => { assert.equal(result.interactions, 1); assert.equal(result.tokens, 'hi'.length + 'yo'.length); }); + +// ── actualTokens extraction tests ────────────────────────────────────────── + +test('JSON session: extracts actualTokens from old result.usage format', () => { + const content = JSON.stringify({ + requests: [ + { + model: 'gpt-4o', + message: { text: 'hello' }, + response: [{ value: 'world' }], + result: { usage: { promptTokens: 100, completionTokens: 50 } } + } + ] + }); + const result = parseSessionFileContent('s.json', content, estimateTokensByLength); + assert.equal(result.actualTokens, 150); +}); + +test('JSON session: extracts actualTokens from new result.promptTokens/outputTokens format', () => { + const content = JSON.stringify({ + requests: [ + { + model: 'gpt-4o', + message: { text: 'hello' }, + response: [{ value: 'world' }], + result: { promptTokens: 200, outputTokens: 80 } + } + ] + }); + const result = parseSessionFileContent('s.json', content, estimateTokensByLength); + assert.equal(result.actualTokens, 280); +}); + +test('JSON session: extracts actualTokens from insiders result.metadata format', () => { + const content = JSON.stringify({ + requests: [ + { + model: 'gpt-4o', + message: { text: 'hello' }, + response: [{ value: 'world' }], + result: { metadata: { promptTokens: 300, outputTokens: 120 } } + } + ] + }); + const result = parseSessionFileContent('s.json', content, estimateTokensByLength); + assert.equal(result.actualTokens, 420); +}); + +test('JSON session: accumulates actualTokens across multiple requests', () => { + const content = JSON.stringify({ + requests: [ + { + model: 'gpt-4o', + message: { text: 'a' }, + response: [{ value: 'b' }], + result: { usage: { promptTokens: 100, completionTokens: 50 } } + }, + { + model: 'gpt-4o', + message: { text: 'c' }, + response: [{ value: 'd' }], + result: { promptTokens: 200, outputTokens: 80 } + } + ] + }); + const result = parseSessionFileContent('s.json', content, estimateTokensByLength); + assert.equal(result.actualTokens, 430); +}); + +test('JSON session: actualTokens is 0 when no result usage fields present', () => { + const content = JSON.stringify({ + requests: [ + { model: 'gpt-4o', message: { text: 'hello' }, response: [{ value: 'world' }] } + ] + }); + const result = parseSessionFileContent('s.json', content, estimateTokensByLength); + assert.equal(result.actualTokens, 0); +}); From b4680cde46a254ed69ef6c04f2c249f9357cbfd6 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Thu, 26 Mar 2026 03:07:19 +0100 Subject: [PATCH 11/15] add. file --- .../src/CopilotTokenTracker/webview/usage.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js b/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js index 9f809b43..123a225b 100644 --- a/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js +++ b/visualstudio-extension/src/CopilotTokenTracker/webview/usage.js @@ -20306,6 +20306,11 @@ mcp_gitkraken_git_branch: "GitKraken MCP: Git Branch", mcp_gitkraken_git_checkout: "GitKraken MCP: Git Checkout", mcp_gitkraken_gitkraken_workspace_list: "GitKraken MCP: List Workspaces", + mcp_pencil_batch_design: "Pencil MCP: Batch Design", + mcp_pencil_get_editor_state: "Pencil MCP: Get Editor State", + mcp_pencil_get_guidelines: "Pencil MCP: Get Guidelines", + mcp_pencil_get_screenshot: "Pencil MCP: Get Screenshot", + mcp_pencil_snapshot_layout: "Pencil MCP: Snapshot Layout", mcp_azure_aks: "Azure MCP: AKS", mcp_azure_mcp_azureterraformbestpractices: "Azure MCP: Azure Terraform Best Practices", mcp_azure_mcp_documentation: "Azure MCP: Documentation", From 2ff08902e718c1ee3be22929d59c659c5b8debc7 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Thu, 26 Mar 2026 03:19:42 +0100 Subject: [PATCH 12/15] fix: update script paths after moving vscode-extension to subfolder --- scripts/validate-json.js | 33 ++++++++++++++++++--------------- vscode-extension/package.json | 10 +++++----- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/scripts/validate-json.js b/scripts/validate-json.js index 909be53d..7fddddc3 100755 --- a/scripts/validate-json.js +++ b/scripts/validate-json.js @@ -10,10 +10,14 @@ const fs = require('fs'); const path = require('path'); +// Resolve node_modules from the CWD (where npm runs this script from) +// This allows the script to be called from vscode-extension/ and find its deps there +const cwdNodeModules = path.join(process.cwd(), 'node_modules'); + // Try to load jsonc-parser, fallback to strip-json-comments if not available let parseJsonc; try { - const jsoncParser = require('jsonc-parser'); + const jsoncParser = require(path.join(cwdNodeModules, 'jsonc-parser')); parseJsonc = (content) => { const errors = []; const result = jsoncParser.parse(content, errors, { allowTrailingComma: true }); @@ -25,7 +29,7 @@ try { }; } catch (e) { // Fallback to strip-json-comments - const stripJsonComments = require('strip-json-comments'); + const stripJsonComments = require(path.join(cwdNodeModules, 'strip-json-comments')); parseJsonc = (content) => JSON.parse(stripJsonComments(content)); } @@ -43,18 +47,17 @@ const EXCLUDE_PATTERNS = [ // JSON files to validate (relative to repo root) const JSON_FILES = [ - // Core configuration files - 'package.json', - 'package-lock.json', - 'tsconfig.json', - 'tsconfig.tests.json', - '.stylelintrc.json', + // VS Code extension configuration files + 'vscode-extension/package.json', + 'vscode-extension/package-lock.json', + 'vscode-extension/tsconfig.json', + 'vscode-extension/tsconfig.tests.json', - // Extension data files - 'src/tokenEstimators.json', - 'src/modelPricing.json', - 'src/toolNames.json', - 'src/customizationPatterns.json', + // VS Code extension data files + 'vscode-extension/src/tokenEstimators.json', + 'vscode-extension/src/modelPricing.json', + 'vscode-extension/src/toolNames.json', + 'vscode-extension/src/customizationPatterns.json', // VS Code configuration '.vscode/settings.json', @@ -72,8 +75,8 @@ const JSON_FILES = [ // Files that support JSONC (JSON with Comments) const JSONC_FILES = new Set([ - 'tsconfig.json', - 'tsconfig.tests.json', + 'vscode-extension/tsconfig.json', + 'vscode-extension/tsconfig.tests.json', '.vscode/settings.json', '.vscode/launch.json', '.vscode/tasks.json', diff --git a/vscode-extension/package.json b/vscode-extension/package.json index 386369e8..e2f3379e 100644 --- a/vscode-extension/package.json +++ b/vscode-extension/package.json @@ -281,14 +281,14 @@ "check-types": "tsc --noEmit", "lint": "eslint src", "lint:css": "stylelint \"src/webview/**/*.css\"", - "lint:json": "node scripts/validate-json.js", + "lint:json": "node ../scripts/validate-json.js", "test": "vscode-test", "test:node": "npm run compile-tests && node --require ./out/test/unit/vscode-shim-register.js --test --test-force-exit out/test/unit/*.test.js", "test:coverage": "npm run compile-tests && node --require ./out/test/unit/vscode-shim-register.js --experimental-test-coverage --test --test-force-exit --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=60 --test-coverage-include=out/src/backend/**/*.js --test-coverage-include=out/src/utils/**/*.js out/test/unit/*.test.js", - "pre-release": "node scripts/pre-release.js", - "capture-screenshots": "pwsh -File scripts/capture-screenshots.ps1", - "sync-changelog": "node scripts/sync-changelog.js", - "sync-changelog:test": "node scripts/sync-changelog.js --test", + "pre-release": "node ../scripts/pre-release.js", + "capture-screenshots": "pwsh -File ../scripts/capture-screenshots.ps1", + "sync-changelog": "node ../scripts/sync-changelog.js", + "sync-changelog:test": "node ../scripts/sync-changelog.js --test", "cli:build": "cd cli && npm install && npm run build", "cli:build:production": "cd cli && npm install && npm run build:production", "cli:stats": "cd cli && node dist/cli.js stats", From 7006fd5352df617ba0c58073bf726412d31552b9 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Thu, 26 Mar 2026 03:24:00 +0100 Subject: [PATCH 13/15] fix: update cli-build.yml paths and working-directory after repo restructure --- .github/workflows/cli-build.yml | 41 +++++++++++++++++---------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/.github/workflows/cli-build.yml b/.github/workflows/cli-build.yml index 59742772..aa88f0de 100644 --- a/.github/workflows/cli-build.yml +++ b/.github/workflows/cli-build.yml @@ -5,16 +5,16 @@ on: branches: [main] paths: - 'cli/**' - - 'src/sessionDiscovery.ts' - - 'src/sessionParser.ts' - - 'src/tokenEstimation.ts' - - 'src/maturityScoring.ts' - - 'src/usageAnalysis.ts' - - 'src/opencode.ts' - - 'src/types.ts' - - 'src/tokenEstimators.json' - - 'src/modelPricing.json' - - 'src/toolNames.json' + - 'vscode-extension/src/sessionDiscovery.ts' + - 'vscode-extension/src/sessionParser.ts' + - 'vscode-extension/src/tokenEstimation.ts' + - 'vscode-extension/src/maturityScoring.ts' + - 'vscode-extension/src/usageAnalysis.ts' + - 'vscode-extension/src/opencode.ts' + - 'vscode-extension/src/types.ts' + - 'vscode-extension/src/tokenEstimators.json' + - 'vscode-extension/src/modelPricing.json' + - 'vscode-extension/src/toolNames.json' pull_request: branches: [main] @@ -42,16 +42,16 @@ jobs: filters: | cli-relevant: - 'cli/**' - - 'src/sessionDiscovery.ts' - - 'src/sessionParser.ts' - - 'src/tokenEstimation.ts' - - 'src/maturityScoring.ts' - - 'src/usageAnalysis.ts' - - 'src/opencode.ts' - - 'src/types.ts' - - 'src/tokenEstimators.json' - - 'src/modelPricing.json' - - 'src/toolNames.json' + - 'vscode-extension/src/sessionDiscovery.ts' + - 'vscode-extension/src/sessionParser.ts' + - 'vscode-extension/src/tokenEstimation.ts' + - 'vscode-extension/src/maturityScoring.ts' + - 'vscode-extension/src/usageAnalysis.ts' + - 'vscode-extension/src/opencode.ts' + - 'vscode-extension/src/types.ts' + - 'vscode-extension/src/tokenEstimators.json' + - 'vscode-extension/src/modelPricing.json' + - 'vscode-extension/src/toolNames.json' build-and-validate: needs: check-changes @@ -73,6 +73,7 @@ jobs: node-version: ${{ env.node-version }} - name: Install extension dependencies + working-directory: vscode-extension run: npm ci - name: Install CLI dependencies From ab493ffabd39acb6553c6f6c41ddc66db354a724 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Thu, 26 Mar 2026 03:24:55 +0100 Subject: [PATCH 14/15] fix: register chart and usage-analysis commands in CLI --- cli/src/cli.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cli/src/cli.ts b/cli/src/cli.ts index 960fd120..e8395ecf 100644 --- a/cli/src/cli.ts +++ b/cli/src/cli.ts @@ -10,6 +10,8 @@ import { usageCommand } from './commands/usage'; import { environmentalCommand } from './commands/environmental'; import { fluencyCommand } from './commands/fluency'; import { diagnosticsCommand } from './commands/diagnostics'; +import { chartCommand } from './commands/chart'; +import { usageAnalysisCommand } from './commands/usage-analysis'; import { loadCache, saveCache, disableCache } from './helpers'; // eslint-disable-next-line @typescript-eslint/no-require-imports @@ -40,5 +42,7 @@ program.addCommand(usageCommand); program.addCommand(environmentalCommand); program.addCommand(fluencyCommand); program.addCommand(diagnosticsCommand); +program.addCommand(chartCommand); +program.addCommand(usageAnalysisCommand); program.parse(); From d8ef63a864b404a0e338c22b372e7a0902459343 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Thu, 26 Mar 2026 03:32:16 +0100 Subject: [PATCH 15/15] fix: implement calculateDailyStats and buildChartPayload in CLI helpers --- cli/src/helpers.ts | 139 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) diff --git a/cli/src/helpers.ts b/cli/src/helpers.ts index c89c0b54..a8efc343 100644 --- a/cli/src/helpers.ts +++ b/cli/src/helpers.ts @@ -518,6 +518,145 @@ function createEmptyUsageAnalysisPeriod(): UsageAnalysisPeriod { }; } +/** A single day's aggregated token data for the chart view. */ +interface DailyEntry { + tokens: number; + sessions: number; + modelUsage: ModelUsage; + editorUsage: { [editor: string]: { tokens: number; sessions: number } }; +} + +/** + * Process session files and return per-day stats for the last 30 days. + * Returns `{ labels, days }` where labels are sorted YYYY-MM-DD strings and + * days are the corresponding aggregated stats. + */ +export async function calculateDailyStats(sessionFiles: string[]): Promise<{ + labels: string[]; + days: DailyEntry[]; +}> { + const now = new Date(); + const last30DaysStart = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 30); + + // Fill in all 31 days (today inclusive) with zeroes so the chart has continuous labels + const dailyMap = new Map(); + const cursor = new Date(last30DaysStart); + while (cursor <= now) { + const key = `${cursor.getFullYear()}-${String(cursor.getMonth() + 1).padStart(2, '0')}-${String(cursor.getDate()).padStart(2, '0')}`; + dailyMap.set(key, { tokens: 0, sessions: 0, modelUsage: {}, editorUsage: {} }); + cursor.setDate(cursor.getDate() + 1); + } + + for (const file of sessionFiles) { + const data = await processSessionFile(file); + if (!data || data.tokens === 0 || data.interactions === 0) { continue; } + if (data.lastModified < last30DaysStart) { continue; } + + const d = data.lastModified; + const dateKey = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; + const entry = dailyMap.get(dateKey); + if (!entry) { continue; } + + entry.tokens += data.tokens; + entry.sessions++; + + for (const [model, usage] of Object.entries(data.modelUsage)) { + if (!entry.modelUsage[model]) { + entry.modelUsage[model] = { inputTokens: 0, outputTokens: 0 }; + } + entry.modelUsage[model].inputTokens += usage.inputTokens; + entry.modelUsage[model].outputTokens += usage.outputTokens; + } + + const editor = data.editorSource; + if (!entry.editorUsage[editor]) { + entry.editorUsage[editor] = { tokens: 0, sessions: 0 }; + } + entry.editorUsage[editor].tokens += data.tokens; + entry.editorUsage[editor].sessions++; + } + + const labels = Array.from(dailyMap.keys()).sort(); + const days = labels.map(l => dailyMap.get(l)!); + return { labels, days }; +} + +const CHART_COLORS = [ + { bg: 'rgba(54, 162, 235, 0.6)', border: 'rgba(54, 162, 235, 1)' }, + { bg: 'rgba(255, 99, 132, 0.6)', border: 'rgba(255, 99, 132, 1)' }, + { bg: 'rgba(75, 192, 192, 0.6)', border: 'rgba(75, 192, 192, 1)' }, + { bg: 'rgba(153, 102, 255, 0.6)', border: 'rgba(153, 102, 255, 1)' }, + { bg: 'rgba(255, 159, 64, 0.6)', border: 'rgba(255, 159, 64, 1)' }, + { bg: 'rgba(255, 205, 86, 0.6)', border: 'rgba(255, 205, 86, 1)' }, + { bg: 'rgba(201, 203, 207, 0.6)', border: 'rgba(201, 203, 207, 1)' }, + { bg: 'rgba(100, 181, 246, 0.6)', border: 'rgba(100, 181, 246, 1)' }, +]; + +/** + * Build the JSON payload consumed by the chart webview from the daily stats arrays + * returned by `calculateDailyStats`. + */ +export function buildChartPayload(labels: string[], days: DailyEntry[]): object { + const tokensData = days.map(d => d.tokens); + const sessionsData = days.map(d => d.sessions); + + const allModels = new Set(); + days.forEach(d => Object.keys(d.modelUsage).forEach(m => allModels.add(m))); + const modelDatasets = Array.from(allModels).map((model, idx) => { + const color = CHART_COLORS[idx % CHART_COLORS.length]; + return { + label: model, + data: days.map(d => { + const u = d.modelUsage[model]; + return u ? u.inputTokens + u.outputTokens : 0; + }), + backgroundColor: color.bg, + borderColor: color.border, + borderWidth: 1, + }; + }); + + const allEditors = new Set(); + days.forEach(d => Object.keys(d.editorUsage).forEach(e => allEditors.add(e))); + const editorDatasets = Array.from(allEditors).map((editor, idx) => { + const color = CHART_COLORS[idx % CHART_COLORS.length]; + return { + label: editor, + data: days.map(d => d.editorUsage[editor]?.tokens || 0), + backgroundColor: color.bg, + borderColor: color.border, + borderWidth: 1, + }; + }); + + const editorTotalsMap: Record = {}; + days.forEach(d => { + Object.entries(d.editorUsage).forEach(([editor, usage]) => { + editorTotalsMap[editor] = (editorTotalsMap[editor] || 0) + usage.tokens; + }); + }); + + const totalTokens = tokensData.reduce((a, b) => a + b, 0); + const totalSessions = sessionsData.reduce((a, b) => a + b, 0); + + return { + labels, + tokensData, + sessionsData, + modelDatasets, + editorDatasets, + editorTotalsMap, + repositoryDatasets: [], + repositoryTotalsMap: {}, + dailyCount: labels.length, + totalTokens, + avgTokensPerDay: labels.length > 0 ? Math.round(totalTokens / labels.length) : 0, + totalSessions, + lastUpdated: new Date().toISOString(), + backendConfigured: false, + }; +} + /** Format a number with thousand separators */ export function fmt(n: number): string { return n.toLocaleString('en-US');